2c59ecdc82
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
343 lines
9.0 KiB
JavaScript
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";
|
|
}
|
|
}
|
|
};
|