index.html 5.8 KB
Newer Older
M
Mr.doob 已提交
1 2 3
<!DOCTYPE html>
<html lang="en">
	<head>
M
Mr.doob 已提交
4
		<meta charset="utf-8">
M
Mr.doob 已提交
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
Mugen87 已提交
12 13
				text-decoration: none;
				cursor: pointer;
M
Mr.doob 已提交
14 15
			}

16
			#viewSrcButton {
M
Mr.doob 已提交
17 18 19
				position: fixed;
				bottom: 20px;
				right: 20px;
20 21 22 23 24
				padding: 8px;
				color: #fff;
				background-color: #555;
				opacity: 0.7;
			}
M
Mr.doob 已提交
25

26
			#viewSrcButton:hover {
M
Mugen87 已提交
27 28 29
				cursor: pointer;
				opacity: 1;
			}
M
Mr.doob 已提交
30 31 32
		</style>
	</head>
	<body>
M
Mugen87 已提交
33

M
Mr.doob 已提交
34
		<div id="panel">
M
Mr.doob 已提交
35

M
Mr.doob 已提交
36
			<div id="header">
M
Mr.doob 已提交
37

M
Mr.doob 已提交
38
				<h1><a href="http://threejs.org">three.js</a></h1>
M
Mr.doob 已提交
39

M
Mr.doob 已提交
40
				<img id="expandButton" src="../files/ic_menu_black_24dp.svg">
M
Mr.doob 已提交
41

M
Mr.doob 已提交
42
				<div id="sections">
M
Mr.doob 已提交
43
					<a href="../docs/">docs</a> <span class="selected">examples</span>
M
Mr.doob 已提交
44
				</div>
M
Mr.doob 已提交
45

M
Mr.doob 已提交
46
				<input type="text" id="filter" autocorrect="off" autocapitalize="off" spellcheck="false"/>
M
Mr.doob 已提交
47

M
Mugen87 已提交
48
			</div>
M
Mr.doob 已提交
49

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

M
Mr.doob 已提交
52
		</div>
M
Mr.doob 已提交
53

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

G
gero3 已提交
56
		<script src="files.js"></script>
57

M
Mr.doob 已提交
58 59
		<script>

60
		function extractQuery() {
61
			var p = window.location.search.indexOf( '?q=' );
62 63
			if( p !== -1 ) {
				return window.location.search.substr( 3 );
M
Mr.doob 已提交
64
			}
65 66 67
			return ''
		}

M
Mr.doob 已提交
68
		var panel = document.getElementById( 'panel' );
M
Mr.doob 已提交
69
		var content = document.getElementById( 'content' );
M
Mr.doob 已提交
70
		var viewer = document.getElementById( 'viewer' );
M
Mr.doob 已提交
71

M
Mr.doob 已提交
72
		var filterInput = document.getElementById( 'filter' );
M
Mugen87 已提交
73

M
Mr.doob 已提交
74 75 76
		var expandButton = document.getElementById( 'expandButton' );
		expandButton.addEventListener( 'click', function ( event ) {
			event.preventDefault();
M
Mr.doob 已提交
77
			panel.classList.toggle( 'collapsed' );
M
Mr.doob 已提交
78 79
		} );

80
		// iOS iframe auto-resize workaround
M
Mr.doob 已提交
81

82 83
		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {

84 85
			viewer.style.width = getComputedStyle( viewer ).width;
			viewer.style.height = getComputedStyle( viewer ).height;
86
			viewer.setAttribute( 'scrolling', 'no' );
87 88 89

		}

M
Mr.doob 已提交
90
		var container = document.createElement( 'div' );
M
Mr.doob 已提交
91
		content.appendChild( container );
M
Mr.doob 已提交
92

93 94 95 96 97 98
		var viewSrcButton = document.createElement( 'a' );
		viewSrcButton.id = 'viewSrcButton';
		viewSrcButton.target = '_blank';
		viewSrcButton.textContent = 'View source';
		viewSrcButton.style.display = 'none';
		document.body.appendChild( viewSrcButton );
99

100
		var links = {};
101
		var selected = null;
M
Mr.doob 已提交
102

M
Mr.doob 已提交
103 104 105 106 107 108 109 110 111
		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 ) {

M
Mr.doob 已提交
112
				if ( event.button !== 0 || event.ctrlKey || event.altKey || event.metaKey ) return;
M
Mr.doob 已提交
113

M
Mr.doob 已提交
114
				selectFile( file );
M
Mr.doob 已提交
115 116 117 118 119 120 121

			} );

			return link;

		}

M
Mr.doob 已提交
122
		for ( var key in files ) {
M
Mr.doob 已提交
123

M
Mr.doob 已提交
124
			var section = files[ key ];
M
Mr.doob 已提交
125

M
Mugen87 已提交
126 127 128 129
			var header = document.createElement( 'h2' );
			header.textContent = key;
			header.setAttribute( 'data-category', key );
			container.appendChild( header );
M
Mr.doob 已提交
130

M
Mr.doob 已提交
131
			for ( var i = 0; i < section.length; i ++ ) {
M
Mr.doob 已提交
132

M
Mr.doob 已提交
133
				var file = section[ i ];
M
Mr.doob 已提交
134

M
Mr.doob 已提交
135 136
				var link = createLink( file );
				container.appendChild( link );
M
Mr.doob 已提交
137

M
Mr.doob 已提交
138
				links[ file ] = link;
M
Mr.doob 已提交
139 140

			}
M
Mr.doob 已提交
141 142 143

		}

M
Mr.doob 已提交
144
		function loadFile( file ) {
M
Mr.doob 已提交
145

146 147 148
			selectFile( file );
			viewer.src = file + '.html';

M
Mr.doob 已提交
149
		}
150

M
Mr.doob 已提交
151
		function selectFile( file ) {
152

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

155
			links[ file ].classList.add( 'selected' );
M
Mr.doob 已提交
156 157

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

160
			panel.classList.add( 'collapsed' );
M
Mr.doob 已提交
161

M
Mr.doob 已提交
162 163
			selected = file;

164 165 166
			// 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 已提交
167
			viewSrcButton.title = 'View source code for ' + getName( selected ) + ' on GitHub';
168

169
		}
M
Mr.doob 已提交
170

M
Mr.doob 已提交
171
		if ( window.location.hash !== '' ) {
M
Mr.doob 已提交
172

M
Mr.doob 已提交
173
			loadFile( window.location.hash.substring( 1 ) );
M
Mr.doob 已提交
174 175 176

		}

M
Mugen87 已提交
177 178 179 180 181 182 183 184 185 186
		// filter

		filterInput.addEventListener( 'input', function( e ) {

			updateFilter();

		} );

		function updateFilter() {

187 188
			var v = filterInput.value;
			if( v !== '' ) {
189
				window.history.replaceState( {} , '', '?q=' + v + window.location.hash );
190
			} else {
191
				window.history.replaceState( {} , '', window.location.pathname + window.location.hash );
192 193 194
			}

			var exp = new RegExp( v, 'gi' );
M
Mugen87 已提交
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220

			for ( var key in files ) {

				var section = files[ key ];

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

					filterExample( section[ i ], exp );

				}

			}

			layoutList();

		}

		function filterExample( file, exp ){

			var link = links[ file ];
			var name = getName( file );
			var res = file.match( exp );
			var text;

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

M
Mr.doob 已提交
221
				link.classList.remove( 'hidden' );
M
Mugen87 已提交
222 223 224 225 226 227 228 229 230

				for( var i = 0; i < res.length; i++ ) {
					text = name.replace( res[ i ], '<b>' + res[ i ] + '</b>' );
				}

				link.innerHTML = text;

			} else {

M
Mr.doob 已提交
231
				link.classList.add( 'hidden' );
M
Mugen87 已提交
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
				link.innerHTML = name;

			}
		}

		function getName( file ) {

			var name = file.split( '_' );
			name.shift();
			return name.join( ' / ' );

		}

		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
Mr.doob 已提交
257
					if ( links[ file ].classList.contains( 'hidden' ) === false ){
M
Mugen87 已提交
258 259 260 261 262 263 264 265 266 267

						collapsed = false;
						break;

					}

				}

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

M
Mr.doob 已提交
268
				if ( collapsed ) {
M
Mugen87 已提交
269

M
Mr.doob 已提交
270
					element.classList.add( 'hidden' );
M
Mugen87 已提交
271 272 273

				} else {

M
Mr.doob 已提交
274
					element.classList.remove( 'hidden' );
M
Mugen87 已提交
275 276 277 278 279 280 281

				}

			}

		}

282
		filterInput.value = extractQuery();
M
Mr.doob 已提交
283
		updateFilter();
284

M
Mr.doob 已提交
285 286 287
		</script>

	</body>
288
</html>