summaryrefslogtreecommitdiffstats
path: root/o3d/samples/interactive_logic.js
diff options
context:
space:
mode:
authorbradnelson@google.com <bradnelson@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-28 20:23:26 +0000
committerbradnelson@google.com <bradnelson@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-28 20:23:26 +0000
commitd15f03f7d3aaa253d32c8bfc4f1543f5f9d6eeae (patch)
treee3ae9df25c03721d2889ca4aad346dc7c2d99363 /o3d/samples/interactive_logic.js
parente6111af1609505398801eed7619a2f7191fe3a2b (diff)
downloadchromium_src-d15f03f7d3aaa253d32c8bfc4f1543f5f9d6eeae.zip
chromium_src-d15f03f7d3aaa253d32c8bfc4f1543f5f9d6eeae.tar.gz
chromium_src-d15f03f7d3aaa253d32c8bfc4f1543f5f9d6eeae.tar.bz2
Moving o3d up a level, to get it out of chrome checkouts.
BUG=None TEST=None Too large for codereview. Manual review by thaloun and tschelcher. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@79609 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/samples/interactive_logic.js')
-rw-r--r--o3d/samples/interactive_logic.js576
1 files changed, 0 insertions, 576 deletions
diff --git a/o3d/samples/interactive_logic.js b/o3d/samples/interactive_logic.js
deleted file mode 100644
index e2f9eed..0000000
--- a/o3d/samples/interactive_logic.js
+++ /dev/null
@@ -1,576 +0,0 @@
-/*
- * Copyright 2009, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-/**
- * @fileoverview This file is the master javascript file for the interactive
- * editor/runner for all the simple samples.
- *
- */
-// For browserFun
-// TODO:
-// Make it so that you can make the code editing window wider...
-// Make it so that you can click links to the documentation of each object
-// Add Ping Pong
-// Fix the spacing in the editor (when u hit tab)
-// Try to see if for the javascript part you can eval line by line so that you
-// can output the line number
-
-var fileTypes = {
- 'js' : 'javascript',
- 'html' : 'html',
- 'php' : 'php'
-};
-
-function InteractiveSample() {
- this.categories = [];
- this.codeTitles = [];
- this.adjustCodeBoxAmount = 50;
- this.selectCode;
- this.codeDiv;
- this.codeLIs = [];
- this.currentCode = new Object();
- this.curI = '';
- this.cleanWindowObj;
-
- // Assume we're offline until we know that file reading doesn't work
- this.online = false;
-}
-
-function sortByCategory(a, b) {
- return a.category > b.category;
-}
-
-function sortByName(a, b) {
- return a.sampleName > b.sampleName;
-}
-
-function nameToHashName(name) {
- var hashName = name.toLowerCase();
- hashName = hashName.replace(/ /g, '_');
- return hashName;
-}
-
-InteractiveSample.prototype.init = function(codeDiv) {
- this.codeDiv = codeDiv;
- this.createCategories();
- this.addShowHideClicks();
-
- // TODO: Sort samples
- // codeArray.sort(sortByCategory);
- //
- // for (var i=0; i < codeArray.length; i++) {
- // codeArray[i].samples.sort(sortByName);
- // }
-
- // Gotta set this for the iFrame to know it and change it
- // This is specific to O3D because a transparent overlay that is
- // under the <object> tag will actually hide the <object> tag
- // unless we muck with the zIndex after the <object> loads
- window.iframeZindex = '4999';
-
- // This is so that we can restore the first level of the window object
- // after we run a sample... so samples can get run a lot and not clutter
- // the window object.
- this.cleanWindowObj = singleLevelKeyCopy(window);
-};
-
-InteractiveSample.prototype.createCategories = function() {
- // codeArray is from interactive_samples.js
- this.selectCode = _gel('selectCode');
-
- for (var i = 0; i < codeArray.length; i++) {
- var container = _cel('span');
- container.className = 'category';
-
- var catName = _cel('span');
-
- var img = _cel('img');
- img.className = 'collapse';
- img.src = 'interactive_sampler_assets/images/cleardot.gif';
- // addEvent(img, 'click', this.toggleExpand(img), false);
-
- catName.appendChild(img);
- catName.innerHTML += codeArray[i].category;
-
- container.appendChild(catName);
-
- var ul = _cel('ul');
- ul.className = 'categoryItems';
-
- container.appendChild(ul);
-
- for (var j = 0; j < codeArray[i].samples.length; j++) {
- var item = codeArray[i].samples[j];
- var li = _cel('li');
-
- li.innerHTML = item.sampleName;
-
- this.codeTitles.push(li);
- var files = []
- for (var index = 0; index < codeArray[i].samples[j].files.length;
- ++index) {
- var dirName = '';
- var baseName = codeArray[i].samples[j].files[index];
- var slashIndex = baseName.lastIndexOf('/');
- if (slashIndex >= 0) {
- dirName = baseName.substring(0, slashIndex + 1);
- baseName = baseName.substring(slashIndex + 1);
- }
- files[index] = dirName + 'sampler_' + baseName;
- }
- //var files = codeArray[i].samples[j].files;
- addEvent(li, 'click', this.showSample(this, item, files, li));
-
- if (i == 0 && j == 0) {
- this.showSample(this, item, files, li, true)();
- }
-
- if (window.location.hash.length > 0) {
- var hashName = nameToHashName(item.sampleName);
- if (window.location.hash.substring(1) == hashName) {
- this.showSample(this, item, files, li)();
- }
- }
-
- this.codeLIs.push(li);
- ul.appendChild(li);
- }
-
- this.selectCode.appendChild(container);
- this.categories.push(container);
- }
-};
-
-InteractiveSample.prototype.toggleShowHide = function(category,
- interactiveSample) {
- return function() {
- var li = category.nextSibling;
- var el = category.childNodes[0];
- if (el.className == 'expand')
- el.className = 'collapse';
- else
- el.className = 'expand';
-
- if (li.style.display == 'none') {
- li.style.display = 'block';
- } else {
- li.style.display = 'none';
- }
- };
-};
-
-InteractiveSample.prototype.addShowHideClicks = function() {
- for (var i = 0; i < this.categories.length; i++) {
- categoryName = this.categories[i].childNodes[0];
- addEvent(categoryName, 'click', this.toggleShowHide(categoryName, this));
- }
-};
-
-InteractiveSample.prototype.loadLocally = function(relativeUrl, filename,
- fileType,
- opt_changeCodeMirror) {
- // readFile is in utils.js
- var data = readFile(relativeUrl);
- if (data == null) {
- this.online = true;
- return false;
- }
- if (fileType == 'javascript') {
- data = this.replaceV8Call(data);
- }
- if (opt_changeCodeMirror == true) {
- this.changeCodeMirror(data, fileType);
- }
- is_instance.currentCode[filename] = {
- code : data
- };
- console.log(relativeUrl + ': loaded locally.');
-
- return true;
-};
-
-InteractiveSample.prototype.loadRemotely = function(relativeUrl, filename,
- fileType,
- opt_changeCodeMirror) {
- is_instance = this;
- downloadUrl(relativeUrl, function(data, status) {
- if (fileType == 'javascript') {
- data = this.replaceV8Call(data);
- }
- if (opt_changeCodeMirror == true) {
- is_instance.changeCodeMirror(data, fileType);
- }
- is_instance.currentCode[filename] = {
- code : data
- };
- });
-};
-
-InteractiveSample.prototype.loadCode = function(filename,
- opt_changeCodeMirror) {
- // If the code is in the currentCode buffer, then grab it there
- // otherwise, load it via XHR
- // If opt_changeCodeMirror is specified, load it into the window
-
- // Get filetype
- var filenameSplit = filename.split('.');
- var extension = filenameSplit[filenameSplit.length - 1];
- var fileType = fileTypes[extension.toLowerCase()];
- var inBuffer = (this.currentCode[filename] &&
- this.currentCode[filename].code) ? true : false;
- if (inBuffer && opt_changeCodeMirror == true) {
- this.changeCodeMirror(this.currentCode[filename].code, fileType);
- } else {
- var relativeUrl = filename;
- is_instance = this;
-
- if (!this.online) {
- this.loadLocally(relativeUrl, filename, fileType, opt_changeCodeMirror);
- }
-
- if (this.online) {
- this.loadRemotely(relativeUrl, filename, fileType, opt_changeCodeMirror);
- }
- }
-};
-
-// TODO: can is_instance just be set as is_instance = this above return
-// function()
-InteractiveSample.prototype.showSample = function(is_instance, codeItem,
- files, thisLI, def) {
- return function() {
- is_instance.refreshInlinePlugin();
-
- var codeDiv = is_instance.codeDiv;
- var codeLIs = is_instance.codeLIs;
- for (var i = 0; i < codeLIs.length; i++) {
- codeLIs[i].className = '';
- }
-
- // turn off the "Run Here" button if this sample should be run in its own
- // window.
- var runHere = document.getElementById('runHere');
- runHere.style.visibility = codeItem.ownWindow ? 'hidden' : 'visible';
-
- // For linking purposes
- if (!def) {
- window.location.hash = nameToHashName(thisLI.innerHTML);
- }
-
- // Make code selected designate this as selected
- thisLI.className = 'selected';
-
- is_instance.currentCode = new Object();
-
-
- // add file names at top
- var tab_bar = _gel('tab_bar');
- tab_bar.innerHTML = '';
-
- // prototype syntax
- files.each(function(file, index) {
-
- var tabClass = 'lb';
- if (index == 0) {
- tabClass = 'db';
- is_instance.loadCode(file, true);
- } else {
- is_instance.loadCode(file, false);
- }
-
-
- var containerDiv = _cel('div');
- containerDiv.className = 'roundedcornr_box';
- addEvent(containerDiv, 'click', is_instance.changeTab(file, is_instance));
-
- var html = '<div class="' + tabClass + '_top" ><div></div></div>';
- html += '<div class="' + tabClass + '_roundedcornr_content" >';
- html += file;
- html += '</div>';
-
- containerDiv.innerHTML = html;
-
- tab_bar.appendChild(containerDiv);
- });
-
- // is_instance.loadCode(files[0], textArea);
- is_instance.curI = files[0];
- };
-};
-
-InteractiveSample.prototype.changeTab = function(i, is_instance) {
- return function() {
- var siblings = this.parentNode.childNodes;
- is_instance.currentCode[is_instance.curI].code = is_instance.getCode();
-
- // Swap the colors of the tabs
- for (var z = 0; z < siblings.length; z++) {
- if (siblings[z].childNodes[1].innerHTML == i) {
- siblings[z].childNodes[0].className = 'db_top';
- siblings[z].childNodes[1].className = 'db_roundedcornr_content';
- } else {
- siblings[z].childNodes[0].className = 'lb_top';
- siblings[z].childNodes[1].className = 'lb_roundedcornr_content';
- }
- }
-
- is_instance.loadCode(i, true);
- is_instance.curI = i;
- };
-};
-
-InteractiveSample.prototype.increaseCodeBoxHeight = function() {
- var curHeight = this.textArea.style.height;
- curHeight = curHeight.substr(0, curHeight.indexOf('px'));
- var newHeight = parseInt(curHeight) + this.adjustCodeBoxAmount;
- newHeight += 'px';
- this.textArea.style.height = newHeight;
-};
-
-InteractiveSample.prototype.decreaseCodeBoxHeight = function() {
- var curHeight = this.textArea.style.height;
- curHeight = curHeight.substr(0, curHeight.indexOf('px'));
- var newHeight = parseInt(curHeight) - this.adjustCodeBoxAmount;
- newHeight += 'px';
- this.textArea.style.height = newHeight;
-};
-
-InteractiveSample.prototype.replaceV8Call = function(code) {
- return code.replace(
- /(o3djs.util.setMainEngine[^;\n]+)[;\n]/,
- "\n // Can't use V8 in the interactive sampler yet.\n //$1");
-}
-
-InteractiveSample.prototype.prepareAllCodeRun = function() {
- // TODO: Change this so it doesn't rely on the first file being HTML
- // TODO: Change this to use REGEX to replace
- this.deleteOldWindowStuff();
-
- this.refreshInlinePlugin();
- this.currentCode[this.curI].code = this.getCode();
-
- var html = '';
- for (var i in this.currentCode) {
- if (i.indexOf('.html') != -1)
- html = this.currentCode[i].code;
- }
- var pattern = /<script\s*(type\s*=\s*"[^"]*"\s*)?src\s*=\s*"/g;
- var result;
- while ((result = pattern.exec(html)) != null) {
- var scriptSrc = pattern.lastIndex;
- var scriptSrcEnd = html.indexOf('"', scriptSrc);
- var script = html.substring(scriptSrc, scriptSrcEnd);
- var endScriptLoc = html.indexOf('</script>', scriptSrcEnd) + 9;
- var found = false;
- for (var z in this.currentCode) {
- if (z == script) {
- var data = this.replaceV8Call(this.currentCode[z].code);
- script = '<script type="text/javascript" charset="utf-8">' + data +
- '</script>';
- found = true;
- break;
- }
- }
- if (found) {
- html = html.substring(0, result.index) + script +
- html.substring(endScriptLoc);
- }
- }
-
- // console.log(html);
- window.codeToRun = html;
-
- // console.log(html.slice(scriptLoc, endScriptLoc));
- // console.log(html);
-};
-
-InteractiveSample.prototype.refreshInlinePlugin = function() {
- var o3dobject = _gel('o3d');
- o3dparent = o3dobject.parentNode;
- o3dparent.removeChild(o3dobject);
-
- var nO3D = _cel('div');
- nO3D.id = 'o3d';
- nO3D.style.width = '300px';
- nO3D.style.height = '300px';
- nO3D.style.backgroundColor = 'gray';
-
- o3dparent.appendChild(nO3D);
-};
-
-InteractiveSample.prototype.runJS = function() {
- // TODO don't assume that we run javascript in any order. Make it so that
- // it checks the HTML for which order JS goes in
- this.refreshInlinePlugin();
-
- // console.log(this.currentCode[0].code.split('\n'));
- window.is.startJS();
-};
-
-InteractiveSample.prototype.deleteOldWindowStuff = function() {
- for (var i in window) {
- if (typeof this.cleanWindowObj[i] == 'boolean' &&
- this.cleanWindowObj[i] == true) {
- } else {
- window[i] = null; // Delete doesn't remove properties created with var.
- delete window[i]; // But just in case we can, we do.
- }
- }
-};
-
-InteractiveSample.prototype.startJS = function() {
- this.deleteOldWindowStuff();
- var topHolder = _gel('HTMLforInlineJavascript');
- topHolder.innerHTML = "";
- var scriptHolder = document.createElement('div');
- topHolder.appendChild(scriptHolder);
- var htmlHolder = document.createElement('div');
- topHolder.appendChild(htmlHolder);
-
- // NOTE: These are ordered such that no file depends on anything after it.
- var forced_includes = [
- "o3djs/base.js",
- "o3djs/error.js",
- "o3djs/dump.js",
- "o3djs/math.js",
- "o3djs/serialization.js",
- "o3djs/element.js",
- "o3djs/shape.js",
- "o3djs/rendergraph.js",
- "o3djs/test.js",
- "o3djs/particles.js",
- "o3djs/primitives.js",
- "o3djs/quaternions.js",
- "o3djs/arcball.js",
- "o3djs/event.js",
- "o3djs/debug.js",
- "o3djs/picking.js",
- "o3djs/io.js",
- "o3djs/util.js",
- "o3djs/effect.js",
- "o3djs/material.js",
- "o3djs/camera.js",
- "o3djs/canvas.js",
- "o3djs/pack.js",
- "o3djs/scene.js",
- "o3djs/loader.js",
- "o3djs/simple.js",
- "o3djs/fps.js" // If fps isn't last on this list, update the check below.
- ];
-
- for (var i = 0; i < forced_includes.length; ++i) {
- var scr = document.createElement('script');
- scr.type = "text/javascript";
- scr.src = forced_includes[i];
- scriptHolder.appendChild(scr);
- }
-
- this.currentCode[this.curI].code = this.getCode();
-
- var sampleJS;
- var sampleHTML;
- for (var i in this.currentCode) {
- if (i.indexOf('.html') != -1) {
- // Change the name and id of the object tag before storing the HTML,
- // otherwise it will override the inline object we actually want the demo
- // to be run in.
- sampleHTML = this.currentCode[i].code;
- sampleHTML = sampleHTML.replace('id="o3d"', 'id="notouchy"');
- sampleHTML = sampleHTML.replace('id=\'o3d\'', 'id="notouchy"');
- sampleHTML = sampleHTML.replace('name="o3d"', 'name="notouchy"');
- sampleHTML = sampleHTML.replace('name=\'o3d\'', 'name="notouchy"');
- }
- if (i.indexOf('.js') != -1) {
- sampleJS = this.currentCode[i].code;
- }
- }
-
- var intervalId;
- var callback = function() {
- // fps is the last on the forced_includes list.
- if (o3djs != undefined && o3djs.fps) {
- clearInterval(intervalId);
- intervalId = null;
- // TODO Is there any chance that the onload could get called before
- // we're done loading the script tag? If so, we'll need to add another
- // stage to the callback.
- htmlHolder.innerHTML = sampleHTML;
- var scr = document.createElement('script');
- scr.type = "text/javascript";
- scr.text = sampleJS;
- scriptHolder.appendChild(scr);
- try {
- if (typeof window.onload == 'function') {
- window.onload()
- } else if (typeof window.init == 'function') {
- window.init();
- } else if (typeof window.initClient == 'function') {
- window.initClient();
- } else if (typeof window.createClients == 'function') {
- window.createClients();
- }
- } catch(e) {
- alert(e.message);
- }
-
- _gel('o3d').focus();
- }
- }
- intervalId = setInterval(callback, 10);
-};
-
-InteractiveSample.prototype.changeCodeMirror = function(content, lang) {
- if (lang == 'javascript') {
- window.jsEditor.setCode(content);
- window.jsEditor.frame.style.display = 'inline';
- window.htmlEditor.frame.style.display = 'none';
- } else if (lang == 'html') {
- window.htmlEditor.setCode(content);
- window.htmlEditor.frame.style.display = 'inline';
- window.jsEditor.frame.style.display = 'none';
- }
-};
-
-InteractiveSample.prototype.getCode = function() {
- if (window.htmlEditor.frame.style.display != 'none') {
- return window.htmlEditor.getCode();
- } else if (window.jsEditor.frame.style.display != 'none') {
- return window.jsEditor.getCode();
- }
-};
-
-// Todo have the window automatically size to the size of the window
-
-InteractiveSample.prototype.increaseWidth = function() {
- var container = document.getElementById('container');
- var curWidth = container.style.maxWidth = '1800px';
-};