index.html 6.5 KB
Newer Older
M
Mr.doob 已提交
1 2 3
<!DOCTYPE html>
<html lang="en">
	<head>
M
Mr.doob 已提交
4
		<meta charset="utf-8">
5
		<title>three.js examples</title>
M
Mr.doob 已提交
6
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
M
Mr.doob 已提交
7 8
		<link rel="shortcut icon" href="../files/favicon.ico" />
		<link rel="stylesheet" type="text/css" href="../files/main.css">
M
Mr.doob 已提交
9
		<style>
M
Mugen87 已提交
10
			#panel #content .link {
M
Mr.doob 已提交
11
				display: block;
M
Mr.doob 已提交
12
			}
M
Mr.doob 已提交
13 14 15
		</style>
	</head>
	<body>
M
Mugen87 已提交
16

17
		<div id="panel">
M
Mr.doob 已提交
18

M
Mr.doob 已提交
19
			<div id="header">
M
Mugen87 已提交
20
				<h1><a href="https://threejs.org">three.js</a></h1>
M
Mr.doob 已提交
21

M
Mr.doob 已提交
22
				<div id="sections">
23
					<a href="../docs/index.html#manual/introduction/Creating-a-scene">docs</a>
Y
Yuin Chien 已提交
24
					<span class="selected">examples</span>
M
Mr.doob 已提交
25
				</div>
M
Mr.doob 已提交
26

27
				<div id="expandButton"></div>
M
Mugen87 已提交
28
			</div>
M
Mr.doob 已提交
29

Y
Yuin Chien 已提交
30 31 32
			<div id="panelScrim"></div>

			<div id="contentWrapper">
33 34

				<div id="inputWrapper">
M
munrocket@pm.me 已提交
35
					<input placeholder="" type="text" id="filterInput" autocorrect="off" autocapitalize="off" spellcheck="false" />
36 37
					<div id="exitSearchButton"></div>
				</div>
Y
Yuin Chien 已提交
38 39 40

				<div id="content"></div>
			</div>
M
Mr.doob 已提交
41

M
Mr.doob 已提交
42
		</div>
M
Mr.doob 已提交
43

44
		<iframe id="viewer" name="viewer" allowfullscreen allowvr onmousewheel=""></iframe>
M
Mr.doob 已提交
45

46 47
		<a id="button" target="_blank"><img src="../files/ic_code_black_24dp.svg"></a>

G
gero3 已提交
48
		<script src="files.js"></script>
49

M
Mr.doob 已提交
50 51
		<script>

M
munrocket@pm.me 已提交
52 53 54 55 56 57 58 59
		var panel = document.getElementById( 'panel' );
		var content = document.getElementById( 'content' );
		var viewer = document.getElementById( 'viewer' );
		var filterInput = document.getElementById( 'filterInput' );
		var exitSearchButton = document.getElementById( 'exitSearchButton' );
		var expandButton = document.getElementById( 'expandButton' );
		var viewSrcButton = document.getElementById( 'button' );
		var panelScrim = document.getElementById( 'panelScrim' );
M
Mugen87 已提交
60

M
munrocket@pm.me 已提交
61 62 63
		var links = {};
		var selected = null;
		var container = document.createElement( 'div' );
M
Mugen87 已提交
64

M
munrocket@pm.me 已提交
65
		init();
M
Mugen87 已提交
66

M
munrocket@pm.me 已提交
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
		function init() {

			content.appendChild( container );

			viewSrcButton.style.display = 'none';

			for ( var key in files ) {

				var section = files[ key ];

				var header = document.createElement( 'h2' );
				header.textContent = key;
				header.setAttribute( 'data-category', key );
				container.appendChild( header );

				for ( var i = 0; i < section.length; i ++ ) {

					var file = section[ i ];

					var link = createLink( file );
					container.appendChild( link );

					links[ file ] = link;

				}
M
Mugen87 已提交
92

M
Mr.doob 已提交
93
			}
M
Mugen87 已提交
94

M
munrocket@pm.me 已提交
95
			if ( window.location.hash !== '' && links[ window.location.hash.substring( 1 ) ] ) {
M
Mugen87 已提交
96

M
munrocket@pm.me 已提交
97
				loadFile( window.location.hash.substring( 1 ) );
98

M
munrocket@pm.me 已提交
99
			}
M
Mr.doob 已提交
100

M
munrocket@pm.me 已提交
101
			filterInput.value = extractQuery();
M
Mugen87 已提交
102

M
munrocket@pm.me 已提交
103
			if ( filterInput.value !== '' ) {
M
Mugen87 已提交
104

M
munrocket@pm.me 已提交
105
				panel.classList.add( 'searchFocused' );
M
Mugen87 已提交
106

M
munrocket@pm.me 已提交
107
			}
M
Mr.doob 已提交
108

M
munrocket@pm.me 已提交
109
			updateFilter();
Y
Yuin Chien 已提交
110

M
munrocket@pm.me 已提交
111
			// Events
Y
Yuin Chien 已提交
112

M
munrocket@pm.me 已提交
113
			filterInput.onfocus = function ( event ) {
Y
Yuin Chien 已提交
114

M
munrocket@pm.me 已提交
115
				panel.classList.add( 'searchFocused' );
M
Mr.doob 已提交
116

M
munrocket@pm.me 已提交
117
			};
118

M
munrocket@pm.me 已提交
119
			filterInput.onblur = function ( event ) {
120

M
munrocket@pm.me 已提交
121
				if ( filterInput.value === '' ) {
122

M
munrocket@pm.me 已提交
123
					panel.classList.remove( 'searchFocused' );
M
Mr.doob 已提交
124

M
munrocket@pm.me 已提交
125
				}
126

M
munrocket@pm.me 已提交
127
			};
M
Mr.doob 已提交
128

M
munrocket@pm.me 已提交
129
			exitSearchButton.onclick = function ( event ) {
M
Mr.doob 已提交
130

M
munrocket@pm.me 已提交
131 132 133
				filterInput.value = '';
				updateFilter();
				panel.classList.remove( 'searchFocused' );
M
Mr.doob 已提交
134

M
munrocket@pm.me 已提交
135
			};
M
Mr.doob 已提交
136

M
munrocket@pm.me 已提交
137 138 139
			filterInput.addEventListener( 'input', function () {

				updateFilter();
M
Mr.doob 已提交
140 141 142 143

			} );


M
munrocket@pm.me 已提交
144
			expandButton.addEventListener( 'click', function ( event ) {
M
Mr.doob 已提交
145

M
munrocket@pm.me 已提交
146 147
				event.preventDefault();
				panel.classList.toggle( 'open' );
M
Mr.doob 已提交
148

M
munrocket@pm.me 已提交
149
			} );
M
Mr.doob 已提交
150

M
munrocket@pm.me 已提交
151
			panelScrim.onclick = function ( event ) {
M
Mr.doob 已提交
152

M
munrocket@pm.me 已提交
153 154
				event.preventDefault();
				panel.classList.toggle( 'open' );
M
Mr.doob 已提交
155

M
munrocket@pm.me 已提交
156
			};
M
Mr.doob 已提交
157

M
munrocket@pm.me 已提交
158
			// iOS iframe auto-resize workaround
M
Mr.doob 已提交
159

M
munrocket@pm.me 已提交
160 161 162 163 164
			if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {

				viewer.style.width = getComputedStyle( viewer ).width;
				viewer.style.height = getComputedStyle( viewer ).height;
				viewer.setAttribute( 'scrolling', 'no' );
M
Mr.doob 已提交
165 166

			}
M
Mr.doob 已提交
167 168 169

		}

M
munrocket@pm.me 已提交
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
		function createLink( file ) {

			var link = document.createElement( 'a' );
			link.className = 'link';
			link.href = file + '.html';
			link.textContent = getName( file );
			link.setAttribute( 'target', 'viewer' );
			link.addEventListener( 'click', function ( event ) {

				if ( event.button !== 0 || event.ctrlKey || event.altKey || event.metaKey ) return;

				selectFile( file );

			} );

			return link;

		}

M
Mr.doob 已提交
189
		function loadFile( file ) {
M
Mr.doob 已提交
190

191 192 193
			selectFile( file );
			viewer.src = file + '.html';

M
Mr.doob 已提交
194
		}
195

M
Mr.doob 已提交
196
		function selectFile( file ) {
197

198
			if ( selected !== null ) links[ selected ].classList.remove( 'selected' );
M
Mr.doob 已提交
199

200
			links[ file ].classList.add( 'selected' );
M
Mr.doob 已提交
201 202

			window.location.hash = file;
J
Jaume Sanchez 已提交
203
			viewer.focus();
M
Mr.doob 已提交
204

Y
Yuin Chien 已提交
205
			panel.classList.remove( 'open' );
M
Mr.doob 已提交
206

M
Mr.doob 已提交
207 208
			selected = file;

209 210 211
			// Reveal "View source" button and set attributes to this example
			viewSrcButton.style.display = '';
			viewSrcButton.href = 'https://github.com/mrdoob/three.js/blob/master/examples/' + selected + '.html';
M
Mr.doob 已提交
212
			viewSrcButton.title = 'View source code for ' + getName( selected ) + ' on GitHub';
213

214
		}
M
Mr.doob 已提交
215

M
Mugen87 已提交
216 217
		function updateFilter() {

218
			var v = filterInput.value;
M
Mugen87 已提交
219 220 221 222 223

			if ( v !== '' ) {

				window.history.replaceState( {}, '', '?q=' + v + window.location.hash );

224
			} else {
M
Mugen87 已提交
225 226 227

				window.history.replaceState( {}, '', window.location.pathname + window.location.hash );

228 229 230
			}

			var exp = new RegExp( v, 'gi' );
M
Mugen87 已提交
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247

			for ( var key in files ) {

				var section = files[ key ];

				for ( var i = 0; i < section.length; i ++ ) {

					filterExample( section[ i ], exp );

				}

			}

			layoutList();

		}

M
Mugen87 已提交
248
		function filterExample( file, exp ) {
M
Mugen87 已提交
249 250 251

			var link = links[ file ];
			var name = getName( file );
M
Mr.doob 已提交
252 253
			if ( file in tags ) file += tags[ file ].join( ' ' );
			var res = file.match( exp );
M
Mugen87 已提交
254 255 256 257
			var text;

			if ( res && res.length > 0 ) {

M
Mr.doob 已提交
258
				link.classList.remove( 'hidden' );
M
Mugen87 已提交
259

M
Mugen87 已提交
260 261
				for ( var i = 0; i < res.length; i ++ ) {

M
Mugen87 已提交
262
					text = name.replace( res[ i ], '<b>' + res[ i ] + '</b>' );
M
Mugen87 已提交
263

M
Mugen87 已提交
264 265 266 267 268 269
				}

				link.innerHTML = text;

			} else {

M
Mr.doob 已提交
270
				link.classList.add( 'hidden' );
M
Mugen87 已提交
271 272 273
				link.innerHTML = name;

			}
M
Mugen87 已提交
274

M
Mugen87 已提交
275 276 277 278 279 280
		}

		function getName( file ) {

			var name = file.split( '_' );
			name.shift();
M
Mugen87 已提交
281
			return name.join( ' / ' );
M
Mugen87 已提交
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296

		}

		function layoutList() {

			for ( var key in files ) {

				var collapsed = true;

				var section = files[ key ];

				for ( var i = 0; i < section.length; i ++ ) {

					var file = section[ i ];

M
Mugen87 已提交
297
					if ( links[ file ].classList.contains( 'hidden' ) === false ) {
M
Mugen87 已提交
298 299 300 301 302 303 304 305 306 307

						collapsed = false;
						break;

					}

				}

				var element = document.querySelector( 'h2[data-category="' + key + '"]' );

M
Mr.doob 已提交
308
				if ( collapsed ) {
M
Mugen87 已提交
309

M
Mr.doob 已提交
310
					element.classList.add( 'hidden' );
M
Mugen87 已提交
311 312 313

				} else {

M
Mr.doob 已提交
314
					element.classList.remove( 'hidden' );
M
Mugen87 已提交
315 316 317 318 319 320 321

				}

			}

		}

M
munrocket@pm.me 已提交
322 323 324 325 326
		function extractQuery() {

			var p = window.location.search.indexOf( '?q=' );

			if ( p !== - 1 ) {
M
Mr.doob 已提交
327

M
munrocket@pm.me 已提交
328
				return window.location.search.substr( 3 );
M
Mr.doob 已提交
329

M
munrocket@pm.me 已提交
330
			}
M
Mr.doob 已提交
331

M
munrocket@pm.me 已提交
332
			return '';
M
Mr.doob 已提交
333

M
munrocket@pm.me 已提交
334
		}
335

M
Mr.doob 已提交
336 337 338
		</script>

	</body>
339
</html>