forked from mrdoob/three.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpage.js
147 lines (93 loc) · 5.64 KB
/
page.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
if ( ! window.frameElement && window.location.protocol !== 'file:' ) {
// If the page is not yet displayed as an iframe of the index page (navigation panel/working links),
// redirect to the index page (using the current URL without extension as the new fragment).
// If this URL itself has a fragment, append it with a dot (since '#' in an URL fragment is not allowed).
let href = window.location.href;
const splitIndex = href.lastIndexOf( '/docs/' ) + 6;
const docsBaseURL = href.substr( 0, splitIndex );
let hash = window.location.hash;
if ( hash !== '' ) {
href = href.replace( hash, '' );
hash = hash.replace( '#', '.' );
}
const extension = href.split( '.' ).pop();
const end = ( extension === 'html' ) ? - 5 : href.length;
const pathSnippet = href.slice( splitIndex, end );
window.location.replace( docsBaseURL + '#' + pathSnippet + hash );
}
function onDocumentLoad() {
let path, localizedPath;
const pathname = window.location.pathname;
const section = /\/(manual|api|examples)\//.exec( pathname )[ 1 ].toString().split( '.html' )[ 0 ];
let name = /[\-A-z0-9]+\.html/.exec( pathname ).toString().split( '.html' )[ 0 ];
switch ( section ) {
case 'api':
localizedPath = /\/api\/[A-z0-9\/]+/.exec( pathname ).toString().substr( 5 );
// Remove localized part of the path (e.g. 'en/' or 'es-MX/'):
path = localizedPath.replace( /^[A-z0-9-]+\//, '' );
break;
case 'examples':
path = localizedPath = /\/examples\/[A-z0-9\/]+/.exec( pathname ).toString().substr( 10 );
break;
case 'manual':
name = name.replace( /\-/g, ' ' );
path = pathname.replace( /\ /g, '-' );
path = localizedPath = /\/manual\/[-A-z0-9\/]+/.exec( path ).toString().substr( 8 );
break;
}
let text = document.body.innerHTML;
text = text.replace( /\[name\]/gi, name );
text = text.replace( /\[path\]/gi, path );
text = text.replace( /\[page:([\w\.]+)\]/gi, "[page:$1 $1]" ); // [page:name] to [page:name title]
text = text.replace( /\[page:\.([\w\.]+) ([\w\.\s]+)\]/gi, "[page:" + name + ".$1 $2]" ); // [page:.member title] to [page:name.member title]
text = text.replace( /\[page:([\w\.]+) ([\w\.\s]+)\]/gi, "<a onclick=\"window.parent.setUrlFragment('$1')\" title=\"$1\">$2</a>" ); // [page:name title]
// text = text.replace( /\[member:.([\w]+) ([\w\.\s]+)\]/gi, "<a onclick=\"window.parent.setUrlFragment('" + name + ".$1')\" title=\"$1\">$2</a>" );
text = text.replace( /\[(member|property|method|param):([\w]+)\]/gi, "[$1:$2 $2]" ); // [member:name] to [member:name title]
text = text.replace( /\[(?:member|property|method):([\w]+) ([\w\.\s]+)\]\s*(\(.*\))?/gi, "<a onclick=\"window.parent.setUrlFragment('" + name + ".$2')\" target=\"_parent\" title=\"" + name + ".$2\" class=\"permalink\">#</a> .<a onclick=\"window.parent.setUrlFragment('" + name + ".$2')\" id=\"$2\">$2</a> $3 : <a class=\"param\" onclick=\"window.parent.setUrlFragment('$1')\">$1</a>" );
text = text.replace( /\[param:([\w\.]+) ([\w\.\s]+)\]/gi, "$2 : <a class=\"param\" onclick=\"window.parent.setUrlFragment('$1')\">$1</a>" ); // [param:name title]
text = text.replace( /\[link:([\w|\:|\/|\.|\-|\_]+)\]/gi, "[link:$1 $1]" ); // [link:url] to [link:url title]
text = text.replace( /\[link:([\w|\:|\/|\.|\-|\_|\(|\)|\?|\#|\=|\!]+) ([\w|\:|\/|\.|\-|\_|\s]+)\]/gi, "<a href=\"$1\" target=\"_blank\">$2</a>" ); // [link:url title]
text = text.replace( /\*([\w|\d|\"|\-|\(][\w|\d|\ |\-|\/|\+|\-|\(|\)|\=|\,|\.\"]*[\w|\d|\"|\)]|\w)\*/gi, "<strong>$1</strong>" ); // *
text = text.replace( /\[example:([\w\_]+)\]/gi, "[example:$1 $1]" ); // [example:name] to [example:name title]
text = text.replace( /\[example:([\w\_]+) ([\w\:\/\.\-\_ \s]+)\]/gi, "<a href=\"../examples/#$1\" target=\"_blank\">$2</a>" ); // [example:name title]
text = text.replace( /<a class="param" onclick="window.parent.setUrlFragment\('\w+'\)">(null|this|Boolean|Object|Array|Number|String|Integer|Float|TypedArray|ArrayBuffer)<\/a>/gi, '<span class="param">$1</span>' ); // remove links to primitive types
document.body.innerHTML = text;
// handle code snippets formatting
const elements = document.getElementsByTagName( 'code' );
for ( let i = 0; i < elements.length; i ++ ) {
const element = elements[ i ];
text = element.textContent.trim();
text = text.replace( /^\t\t/gm, '' );
element.textContent = text;
}
// Edit button
const button = document.createElement( 'div' );
button.id = 'button';
button.innerHTML = '<img src="../files/ic_mode_edit_black_24dp.svg">';
button.addEventListener( 'click', function ( event ) {
window.open( 'https://github.com/mrdoob/three.js/blob/dev/docs/' + section + '/' + localizedPath + '.html' );
}, false );
document.body.appendChild( button );
// Syntax highlighting
const styleBase = document.createElement( 'link' );
styleBase.href = pathname.substring( 0, pathname.indexOf( 'docs' ) + 4 ) + '/prettify/prettify.css';
styleBase.rel = 'stylesheet';
const styleCustom = document.createElement( 'link' );
styleCustom.href = pathname.substring( 0, pathname.indexOf( 'docs' ) + 4 ) + '/prettify/threejs.css';
styleCustom.rel = 'stylesheet';
document.head.appendChild( styleBase );
document.head.appendChild( styleCustom );
const prettify = document.createElement( 'script' );
prettify.src = pathname.substring( 0, pathname.indexOf( 'docs' ) + 4 ) + '/prettify/prettify.js';
prettify.onload = function () {
const elements = document.getElementsByTagName( 'code' );
for ( let i = 0; i < elements.length; i ++ ) {
const e = elements[ i ];
e.className += ' prettyprint';
e.setAttribute( 'translate', 'no' );
}
prettyPrint();
};
document.head.appendChild( prettify );
}
document.addEventListener( 'DOMContentLoaded', onDocumentLoad, false );