vmware-nsx/doc/source/docbkx/quantum-api-1.0/js/trc/schema/sampleManager.js
Brad Hall 559aedc3d9 Merge from launchpad quantum/diablo branch:
merge salv's fix to remove keystone middleware: lp855151
  one more 202->200 from tyler
  merge tylers additional 202 -> 200 changes
  merge additions to OVS readme describing running with multiple hosts
  merge brad's changes to make create API calls return 200, not 202
  merge unit test for showing unset attachment
  merging API docs branch
  Merge: lp:~yinliu2/quantum/bug856564
  Merge: lp:~bgh/quantum/bug850261

Change-Id: I56fe24c59f918737e57b562343c33ec6dcceac60
2011-09-23 20:17:44 -07:00

343 lines
9.0 KiB
JavaScript

/**
schemaManager.js:
(C) 2009 Rackspace Hosting, All Rights Reserved
This file defines a single object in global scope:
trc.schema.sampleManager
The object is responsible for loading, formatting, and displaying
samples in schema files. It expects trc.util to be defined which is
provided in trc/util.js.
Code highlighting is provided by SHJS
(http://shjs.sourceforge.net/). It should also be loaded before
this code is initialized.
All methods/properties prepended with an underscore (_) are meant
for internal use.
**/
//
// Initialization code...
//
(function()
{
//
// Make sure dependecies are defined in the global scope, throw
// an error if they are not.
//
if ((!window.trc) ||
(!trc.util))
{
throw new Error("Require trc/util.js to be loaded.");
}
//
// Make sure syntax highlighter scripts are loaded, if not then
// load them.
//
if (!window.sh_highlightDocument)
{
trc.util.dom.addStyle ("../style/shjs/sh_darkblue.css");
trc.util.dom.addScript ("../js/shjs/sh_main.js");
trc.util.dom.addScript ("../js/shjs/sh_xml.js");
trc.util.dom.addScript ("../js/shjs/sh_javascript.js");
trc.util.dom.addScript ("../js/shjs/sh_java.js");
}
function InitSchemaSampleManager()
{
trc.schema.sampleManager._init();
}
trc.util.browser.addInitFunction(InitSchemaSampleManager);
})();
//
// Define trc.schema.sampleManager...
//
if (!trc.schema)
{
trc.schema = new Object();
}
trc.schema.sampleManager = {
//
// All sample data in an associative array:
//
// Select Element ID -> Array of sample ids.
//
samples : new Object(),
//
// An array of code data..
//
// Code data is defined as an object with the following
// properties:
//
// type: The mimetype of the code...href: The location of the code
// or null if it's inline
//
// id: The id of the pre that contains the code.
//
// The initial object is the source code for the current document.
//
codes : new Array({
id : "SrcContentCode",
type : "application/xml",
href : (function() {
var ret = location.href;
if (location.hash && (location.hash.length != 0))
{
ret = ret.replace (location.hash, "");
}
return ret;
})()
}),
//
// Sets up the manager, begins the loading process...
//
_init : function() {
//
// Setup an array to hold data items to load, this is used by
// the loadSample method.
//
this._toLoad = new Array();
for (var i=0;i<this.codes.length;i++)
{
if ((this.codes[i] != null) &&
(this.codes[i].href != null))
{
this._toLoad.push (this.codes[i]);
}
}
//
// Loads the code text
//
this._loadCode();
},
//
// Loads the next sample in the toLoad array.
//
_loadCode : function() {
if (this._toLoad.length == 0)
{
//
// All samples have been loaded, fire the loadComplete
// method.
//
this._loadComplete();
return;
}
var codeData = this._toLoad.pop();
var request = trc.util.net.getHTTPRequest();
var manager = this;
request.onreadystatechange = function() {
if (request.readyState == 4 /* Ready */) {
if (request.status == 200 /* OKAY */) {
manager._setCodeText (codeData, request.responseText);
}
else
{
manager._setCodeText (codeData, "Could not load sample ("+request.status+") "+request.responseText);
}
manager._loadCode();
}
};
request.open ("GET", codeData.href);
request.send(null);
},
//
// Called after all samples are loaded into the DOM.
//
_loadComplete : function()
{
//
// Normalize all code samples..
//
this._normalizeCodeText(1, 1, 5);
//
// Perform syntax highlighting...
//
sh_highlightDocument();
//
// All samples are initially hidden, show the selected
// samples...
//
for (var optionID in this.samples)
{
this.showSample(optionID);
}
//
// We've adjusted the document, we need to setup the view so
// that we're still pointing to the hash target.
//
if (window.location.hash &&
(window.location.hash.length != 0))
{
window.location.href = window.location.hash;
}
},
//
// Sets code text replacing any text already existing there.
//
_setCodeText : function ( codeData /* Info of the code to set (code object) */,
code /* Code text to set (string) */)
{
//
// Preprocess the txt if nessesary...
//
var ieVersion = trc.util.browser.detectIEVersion();
if ((ieVersion > -1) &&
(ieVersion < 8))
{
code = trc.util.text.unix2dos (code);
}
var pre = document.getElementById(codeData.id);
var preNodes = pre.childNodes;
//
// Remove placeholder data...
//
while (preNodes.length != 0)
{
pre.removeChild (preNodes[0]);
}
//
// Set the correct class type...
//
switch (codeData.type)
{
/*
Javascript mimetypes
*/
case 'application/json':
case 'application/javascript':
case 'application/x-javascript':
case 'application/ecmascript':
case 'text/ecmascript':
case 'text/javascript':
trc.util.dom.setClassName (pre, "sh_javascript");
break;
/*
Not real mimetypes but this is what we'll use for Java.
*/
case 'application/java':
case 'text/java':
trc.util.dom.setClassName (pre, "sh_java");
break;
default:
trc.util.dom.setClassName (pre, "sh_xml");
break;
}
//
// Add new code...
//
pre.appendChild (document.createTextNode (code));
},
//
// Retrives source code text
//
_getCodeText : function (codeData /* Info for the code to get*/)
{
var pre = document.getElementById(codeData.id);
pre.normalize();
//
// Should be a single text node after pre...
//
return pre.firstChild.nodeValue;
},
//
// Normalizes text by ensuring that top, bottom, right indent
// levels are equal for all samples.
//
_normalizeCodeText : function (top, /* integer, top indent in lines */
bottom, /* integer, bottom indent in lines */
right /* integer, right indent in spaces */
)
{
for (var i=0;i<this.codes.length;i++)
{
if (this.codes[i] != null)
{
var code = this._getCodeText (this.codes[i]);
code = trc.util.text.setIndent (code, top, bottom, right);
this._setCodeText (this.codes[i], code);
}
}
},
//
// This event handler shows the appropriate sample given an ID
// to the select element.
//
showSample : function (selectID) /* ID of the Select element */
{
//
// Get the selected value
//
var selected = document.getElementById(selectID);
var selectedValue = selected.options[selected.selectedIndex].value;
var samples = this.samples[selectID];
//
// Undisplay old samples, display selected ones.
//
for (var i=0;i<samples.length;i++)
{
if (samples[i] != null)
{
var sample = document.getElementById (samples[i]);
if (samples[i] == selectedValue)
{
sample.style.display = "block";
}
else
{
sample.style.display = "none";
}
}
}
},
//
// Toggles the current source view. If the source is displayed it
// undisplays it and vice versa.
//
toggleSrcView : function()
{
var content = document.getElementById ("Content");
var src = document.getElementById ("SrcContent");
if (content.style.display != "none")
{
content.style.display = "none";
src.style.display = "block";
}
else
{
content.style.display = "block";
src.style.display = "none";
}
}
};