Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/utils/lib/env.rhino.js
diff options
context:
space:
mode:
Diffstat (limited to 'utils/lib/env.rhino.js')
-rwxr-xr-xutils/lib/env.rhino.js9041
1 files changed, 0 insertions, 9041 deletions
diff --git a/utils/lib/env.rhino.js b/utils/lib/env.rhino.js
deleted file mode 100755
index eb086c7..0000000
--- a/utils/lib/env.rhino.js
+++ /dev/null
@@ -1,9041 +0,0 @@
-/**
- * @author thatcher
- */
-var Envjs = function(){
- if(arguments.length === 2){
- for ( var i in arguments[1] ) {
- var g = arguments[1].__lookupGetter__(i),
- s = arguments[1].__lookupSetter__(i);
- if ( g || s ) {
- if ( g ) Envjs.__defineGetter__(i, g);
- if ( s ) Envjs.__defineSetter__(i, s);
- } else
- Envjs[i] = arguments[1][i];
- }
- }
- window.location = arguments[0];
-};
-
-/*
-* env.rhino.js
-*/
-(function($env){
-
- //You can emulate different user agents by overriding these after loading env
- $env.appCodeName = "Envjs";//eg "Mozilla"
- $env.appName = "Resig/20070309 BirdDog/0.0.0.1";//eg "Gecko/20070309 Firefox/2.0.0.3"
-
- //set this to true and see profile/profile.js to select which methods
- //to profile
- $env.profile = false;
-
- $env.log = function(msg, level){};
- $env.debug = function(){};
- $env.info = function(){};
- $env.warn = function(){};
- $env.error = function(){};
-
- //uncomment these if you want to get some internal log statementes
- /*$env.debug = function(msg){
- $env.log(msg,"DEBUG");
- };*/
- $env.info = function(msg){
- $env.log(msg,"INFO");
- };
- $env.warn = function(msg){
- $env.log(msg,"WARNIING");
- };
- $env.error = function(msg, e){
- $env.log(msg+ " Line: "+ $env.lineSource(e),'ERROR');
- $env.log(e||"",'ERROR');
- };
-
- $env.info("Initializing Core Platform Env");
-
- $env.lineSource = function(e){};
-
- $env.hashCode = function(obj){};
-
- //resolves location relative to base or window location
- $env.location = function(path, base){};
-
- //For Java the window.timer is created using the java.lang.Thread in combination
- //with the java.lang.Runnable
- $env.timer = function(fn, time){};
-
- $env.javaEnabled = false;
-
- //Used in the XMLHttpRquest implementation to run a
- // request in a seperate thread
- $env.runAsync = function(fn){};
-
- //Used to write to a local file
- $env.writeToFile = function(text, url){};
-
- //Used to write to a local file
- $env.writeToTempFile = function(text, suffix){};
-
- //Used to delete a local file
- $env.deleteFile = function(url){};
-
- $env.connection = function(xhr, responseHandler, data){};
-
- $env.parseHTML = function(htmlstring){};
- $env.parseXML = function(xmlstring){};
- $env.xpath = function(expression, doc){};
-
- $env.tmpdir = '';
- $env.os_name = '';
- $env.os_arch = '';
- $env.os_version = '';
- $env.lang = '';
- $env.platform = "Rhino ";//how do we get the version
-
- $env.safeScript = function(){
- //do nothing
- };
-
- $env.scriptTypes = {
- "text/javascript" :false,
- "text/envjs" :true
- };
-
- $env.loadLocalScript = function(script, parser){
- $env.debug("loading script ");
- var types, type, src, i, base,
- docWrites = [],
- write = document.write,
- writeln = document.writeln;
- //temporarily replace document write becuase the function
- //has a different meaning during parsing
- document.write = function(text){
- docWrites.push(text);
- };
- try{
- if(script.type){
- types = script.type?script.type.split(";"):[];
- for(i=0;i<types.length;i++){
- if($env.scriptTypes[types[i]]){
- if(script.src){
- $env.info("loading allowed external script :" + script.src);
- if($env.beforeload&&$env.beforeload[script.src]){
- //lets you register a function to execute
- //before the script is loaded
- $env.beforeload[script.src]();
- }
- base = "" + window.location;
- load($env.location(script.src.match(/([^\?#]*)/)[1], base ));
- if($env.afterload&&$env.afterload[script.src]){
- //lets you register a function to execute
- //after the script is loaded
- $env.afterload[script.src]();
- }
- }else{
- $env.loadInlineScript(script);
- }
- }else{
- if(!script.src && script.type == "text/javascript"){
- $env.loadInlineScript(script);
- }
- }
- }
- }else{
- //anonymous type and anonymous src means inline
- if(!script.src){
- $env.loadInlineScript(script);
- }
- }
- }catch(e){
- $env.error("Error loading script.", e);
- }finally{
- if(parser){
- parser.appendFragment(docWrites.join(''));
- }
- //return document.write to it's non-script loading form
- document.write = write;
- document.writeln = writeln;
- }
- };
-
- $env.loadInlineScript = function(script){};
-
-})(Envjs);/*
-* env.rhino.js
-*/
-(function($env){
-
- $env.log = function(msg, level){
- print(' '+ (level?level:'LOG') + ':\t['+ new Date()+"] {ENVJS} "+msg);
- };
-
- $env.lineSource = function(e){
- return e&&e.rhinoException?e.rhinoException.lineSource():"(line ?)";
- };
-
- $env.hashCode = function(obj){
- return obj?obj.hashCode().toString()+'':null;
- };
-
- //For Java the window.location object is a java.net.URL
- $env.location = function(path, base){
- var protocol = new RegExp('(^file\:|^http\:|^https\:)');
- var m = protocol.exec(path);
- if(m&&m.length>1){
- return new java.net.URL(path).toString()+'';
- }else if(base){
- return new java.net.URL(new java.net.URL(base), path).toString()+'';
- }else{
- //return an absolute url from a url relative to the window location
- if(window.location.href.length > 0){
- base = window.location.href.substring(0, window.location.href.lastIndexOf('/'));
- return base + '/' + path;
- }else{
- return new java.io.File( path ).toURL().toString()+'';
- }
- }
- };
-
- //For Java the window.timer is created using the java.lang.Thread in combination
- //with the java.lang.Runnable
- $env.timer = function(fn, time){
- var running = true;
- var thread = new java.lang.Thread(new java.lang.Runnable({
- run: function(){
- while (running){
- java.lang.Thread.currentThread().sleep(time);
- //$env.debug("calling in timer "+time);
- fn();
- }
- }
- }));
- this.start = function(){
- thread.start();
- };
- this.stop = function(){
- running = false;
- }
- };
-
- //Since we're running in rhino I guess we can safely assume
- //java is 'enabled'. I'm sure this requires more thought
- //than I've given it here
- $env.javaEnabled = true;
-
-
- //Used in the XMLHttpRquest implementation to run a
- // request in a seperate thread
- $env.runAsync = function(fn){
- $env.debug("running async");
- (new java.lang.Thread(new java.lang.Runnable({
- run: fn
- }))).start();
- };
-
- //Used to write to a local file
- $env.writeToFile = function(text, url){
- $env.debug("writing text to url : " + url);
- var out = new java.io.FileWriter(
- new java.io.File(
- new java.net.URI(url.toString())));
- out.write( text, 0, text.length );
- out.flush();
- out.close();
- };
-
- //Used to write to a local file
- $env.writeToTempFile = function(text, suffix){
- $env.debug("writing text to temp url : " + suffix);
- // Create temp file.
- var temp = java.io.File.createTempFile("envjs-tmp", suffix);
-
- // Delete temp file when program exits.
- temp.deleteOnExit();
-
- // Write to temp file
- var out = new java.io.FileWriter(temp);
- out.write(text, 0, text.length);
- out.close();
- return temp.getAbsolutePath().toString()+'';
- };
-
- //Used to delete a local file
- $env.deleteFile = function(url){
- var file = new java.io.File( new java.net.URI( url ) );
- file["delete"]();
- };
-
- $env.connection = function(xhr, responseHandler, data){
- var url = java.net.URL(xhr.url);//, $w.location);
- var connection;
- if ( /^file\:/.test(url) ) {
- if ( xhr.method == "PUT" ) {
- var text = data || "" ;
- $env.writeToFile(text, url);
- } else if ( xhr.method == "DELETE" ) {
- $env.deleteFile(url);
- } else {
- connection = url.openConnection();
- connection.connect();
- }
- } else {
- connection = url.openConnection();
- connection.setRequestMethod( xhr.method );
-
- // Add headers to Java connection
- for (var header in xhr.headers){
- connection.addRequestProperty(header+'', xhr.headers[header]+'');
- }
-
- //write data to output stream if required
- if(data&&data.length&&data.length>0){
- if ( xhr.method == "PUT" ) {
- connection.setDoOutput(true);
- var outstream = connection.getOutputStream(),
- outbuffer = new java.lang.String(data).getBytes('UTF-8');
-
- outstream.write(outbuffer, 0, outbuffer.length);
- outstream.close();
- }
- }else{
- connection.connect();
- }
-
-
- var respheadlength = connection.getHeaderFields().size();
- // Stick the response headers into responseHeaders
- for (var i = 0; i < respheadlength; i++) {
- var headerName = connection.getHeaderFieldKey(i);
- var headerValue = connection.getHeaderField(i);
- if (headerName)
- xhr.responseHeaders[headerName+''] = headerValue+'';
- }
- }
- if(connection){
- xhr.readyState = 4;
- xhr.status = parseInt(connection.responseCode,10) || undefined;
- xhr.statusText = connection.responseMessage || "";
-
- var contentEncoding = connection.getContentEncoding() || "utf-8",
- stream = (contentEncoding.equalsIgnoreCase("gzip") || contentEncoding.equalsIgnoreCase("decompress") )?
- new java.util.zip.GZIPInputStream(connection.getInputStream()) :
- connection.getInputStream(),
- baos = new java.io.ByteArrayOutputStream(),
- buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024),
- length,
- responseXML = null;
-
- while ((length = stream.read(buffer)) != -1) {
- baos.write(buffer, 0, length);
- }
-
- baos.close();
- stream.close();
-
- xhr.responseText = java.nio.charset.Charset.forName("UTF-8").
- decode(java.nio.ByteBuffer.wrap(baos.toByteArray())).toString()+"";
-
- }
- if(responseHandler){
- responseHandler();
- }
- };
-
- var htmlDocBuilder = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance();
- htmlDocBuilder.setNamespaceAware(false);
- htmlDocBuilder.setValidating(false);
-
- $env.parseHTML = function(htmlstring){
- return htmlDocBuilder.newDocumentBuilder().parse(
- new java.io.ByteArrayInputStream(
- (new java.lang.String(htmlstring)).getBytes("UTF8")))+"";
- };
-
- var xmlDocBuilder = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance();
- xmlDocBuilder.setNamespaceAware(true);
- xmlDocBuilder.setValidating(true);
-
- $env.parseXML = function(xmlstring){
- return xmlDocBuilder.newDocumentBuilder().parse(
- new java.io.ByteArrayInputStream(
- (new java.lang.String(xmlstring)).getBytes("UTF8")))+"";
- };
-
-
- $env.xpath = function(expression, doc){
- return Packages.javax.xml.xpath.
- XPathFactory.newInstance().newXPath().
- evaluate(expression, doc, javax.xml.xpath.XPathConstants.NODESET);
- };
-
- $env.tmpdir = java.lang.System.getProperty("java.io.tmpdir");
- $env.os_name = java.lang.System.getProperty("os.name");
- $env.os_arch = java.lang.System.getProperty("os.arch");
- $env.os_version = java.lang.System.getProperty("os.version");
- $env.lang = java.lang.System.getProperty("user.lang");
- $env.platform = "Rhino ";//how do we get the version
-
- $env.safeScript = function(){
- //do nothing
- };
-
- $env.scriptTypes = {
- "text/javascript" :false,
- "text/envjs" :true
- };
-
-
- $env.loadInlineScript = function(script){
- $env.debug("loading inline script :" + script.text);
- var tmpFile = $env.writeToTempFile(script.text, 'js') ;
- $env.debug("loading " + tmpFile);
- load(tmpFile);
- };
-
-})(Envjs);/*
- * Pure JavaScript Browser Environment
- * By John Resig <http://ejohn.org/>
- * Copyright 2008 John Resig, under the MIT License
- */
-
-
-// The Window Object
-var __this__ = this;
-this.__defineGetter__('window', function(){
- return __this__;
-});
-
-try{
-(function($w, $env){
- /*
-* window.js
-* - this file will be wrapped in a closure providing the window object as $w
-*/
-// a logger or empty function available to all modules.
-var $log = $env.log,
- $debug = $env.debug,
- $info = $env.info,
- $warn = $env.warn,
- $error = $env.error;
-
-//The version of this application
-var $version = "0.1";
-//This should be hooked to git or svn or whatever
-var $revision = "0.0.0.0";
-
-//These descriptions of window properties are taken loosely David Flanagan's
-//'JavaScript - The Definitive Guide' (O'Reilly)
-
-/**> $cookies - see cookie.js <*/
-// read only boolean specifies whether the window has been closed
-var $closed = false;
-
-// a read/write string that specifies the default message that appears in the status line
-var $defaultStatus = "Done";
-
-// a read-only reference to the Document object belonging to this window
-/**> $document - See document.js <*/
-
-//IE only, refers to the most recent event object - this maybe be removed after review
-var $event = null;
-
-//A read-only array of window objects
-var $frames = [];
-
-// a read-only reference to the History object
-/**> $history - see location.js <**/
-
-// read-only properties that specify the height and width, in pixels
-var $innerHeight = 600, $innerWidth = 800;
-
-// a read-only reference to the Location object. the location object does expose read/write properties
-/**> $location - see location.js <**/
-
-// a read only property specifying the name of the window. Can be set when using open()
-// and may be used when specifying the target attribute of links
-var $name = 'Resig Env Browser';
-
-// a read-only reference to the Navigator object
-/**> $navigator - see navigator.js <**/
-
-// a read/write reference to the Window object that contained the script that called open() to
-//open this browser window. This property is valid only for top-level window objects.
-var $opener;
-
-// Read-only properties that specify the total height and width, in pixels, of the browser window.
-// These dimensions include the height and width of the menu bar, toolbars, scrollbars, window
-// borders and so on. These properties are not supported by IE and IE offers no alternative
-// properties;
-var $outerHeight = $innerHeight, $outerWidth = $innerWidth;
-
-// Read-only properties that specify the number of pixels that the current document has been scrolled
-//to the right and down. These are not supported by IE.
-var $pageXOffset = 0, $pageYOffset = 0;
-
-//A read-only reference to the Window object that contains this window or frame. If the window is
-// a top-level window, parent refers to the window itself. If this window is a frame, this property
-// refers to the window or frame that conatins it.
-var $parent;
-
-// a read-only refernce to the Screen object that specifies information about the screen:
-// the number of available pixels and the number of available colors.
-/**> $screen - see screen.js <**/
-
-// read only properties that specify the coordinates of the upper-left corner of the screen.
-var $screenX = 0, $screenY = 0;
-var $screenLeft = $screenX, $screenTop = $screenY;
-
-// a read-only refernce to this window itself.
-var $self;
-
-// a read/write string that specifies the current contents of the status line.
-var $status = '';
-
-// a read-only reference to the top-level window that contains this window. If this
-// window is a top-level window it is simply a refernce to itself. If this window
-// is a frame, the top property refers to the top-level window that contains the frame.
-var $top;
-
-// the window property is identical to the self property.
-var $window = $w;
-
-$debug("Initializing Window.");
-__extend__($w,{
- get closed(){return $closed;},
- get defaultStatus(){return $defaultStatus;},
- set defaultStatus(_defaultStatus){$defaultStatus = _defaultStatus;},
- //get document(){return $document;}, - see document.js
- get event(){return $event;},
- get frames(){return $frames;},
- //get history(){return $history;}, - see location.js
- get innerHeight(){return $innerHeight;},
- get innerWidth(){return $innerWidth;},
- get clientHeight(){return $innerHeight;},
- get clientWidth(){return $innerWidth;},
- //get location(){return $location;}, see location.js
- get name(){return $name;},
- //get navigator(){return $navigator;}, see navigator.js
- get opener(){return $opener;},
- get outerHeight(){return $outerHeight;},
- get outerWidth(){return $outerWidth;},
- get pageXOffest(){return $pageXOffset;},
- get pageYOffset(){return $pageYOffset;},
- get parent(){return $parent;},
- //get screen(){return $screen;}, see screen.js
- get screenLeft(){return $screenLeft;},
- get screenTop(){return $screenTop;},
- get screenX(){return $screenX;},
- get screenY(){return $screenY;},
- get self(){return $self;},
- get status(){return $status;},
- set status(_status){$status = _status;},
- get top(){return $top || $window;},
- get window(){return $window;}
-});
-
-$w.open = function(url, name, features, replace){
- //TODO
-};
-
-$w.close = function(){
- //TODO
-};
-
-/* Time related functions - see timer.js
-* - clearTimeout
-* - clearInterval
-* - setTimeout
-* - setInterval
-*/
-
-/*
-* Events related functions - see event.js
-* - addEventListener
-* - attachEvent
-* - detachEvent
-* - removeEventListener
-*
-* These functions are identical to the Element equivalents.
-*/
-
-/*
-* UIEvents related functions - see uievent.js
-* - blur
-* - focus
-*
-* These functions are identical to the Element equivalents.
-*/
-
-/* Dialog related functions - see dialog.js
-* - alert
-* - confirm
-* - prompt
-*/
-
-/* Screen related functions - see screen.js
-* - moveBy
-* - moveTo
-* - print
-* - resizeBy
-* - resizeTo
-* - scrollBy
-* - scrollTo
-*/
-
-/* CSS related functions - see css.js
-* - getComputedStyle
-*/
-
-/*
-* Shared utility methods
-*/
-// Helper method for extending one object with another.
-function __extend__(a,b) {
- for ( var i in b ) {
- var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
- if ( g || s ) {
- if ( g ) a.__defineGetter__(i, g);
- if ( s ) a.__defineSetter__(i, s);
- } else
- a[i] = b[i];
- } return a;
-};
-
-
-// from ariel flesler http://flesler.blogspot.com/2008/11/fast-trim-function-for-javascript.html
-// this might be a good utility function to provide in the env.core
-// as in might be useful to the parser and other areas as well
-function trim( str ){
- return (str || "").replace( /^\s+|\s+$/g, "" );
-
-};
-/*function trim( str ){
- var start = -1,
- end = str.length;
- /*jsl:ignore*
- while( str.charCodeAt(--end) < 33 );
- while( str.charCodeAt(++start) < 33 );
- /*jsl:end*
- return str.slice( start, end + 1 );
-};*/
-
-//from jQuery
-function __setArray__( target, array ) {
- // Resetting the length to 0, then using the native Array push
- // is a super-fast way to populate an object with array-like properties
- target.length = 0;
- Array.prototype.push.apply( target, array );
-};
-
-
-$debug("Defining NodeList");
-/*
-* NodeList - DOM Level 2
-*/
-/**
- * @class DOMNodeList - provides the abstraction of an ordered collection of nodes
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- *
- * @param ownerDocument : DOMDocument - the ownerDocument
- * @param parentNode : DOMNode - the node that the DOMNodeList is attached to (or null)
- */
-var DOMNodeList = function(ownerDocument, parentNode) {
- this.length = 0;
- this.parentNode = parentNode;
- this.ownerDocument = ownerDocument;
-
- this._readonly = false;
-
- __setArray__(this, []);
-};
-__extend__(DOMNodeList.prototype, {
- item : function(index) {
- var ret = null;
- //$log("NodeList item("+index+") = " + this[index]);
- if ((index >= 0) && (index < this.length)) { // bounds check
- ret = this[index]; // return selected Node
- }
-
- return ret; // if the index is out of bounds, default value null is returned
- },
- get xml() {
- var ret = "";
-
- // create string containing the concatenation of the string values of each child
- for (var i=0; i < this.length; i++) {
- if(this[i]){
- if(this[i].nodeType == DOMNode.TEXT_NODE && i>0 && this[i-1].nodeType == DOMNode.TEXT_NODE){
- //add a single space between adjacent text nodes
- ret += " "+this[i].xml;
- }else{
- ret += this[i].xml;
- }
- }
- }
-
- return ret;
- },
- toArray: function () {
- var children = [];
- for ( var i=0; i < this.length; i++) {
- children.push (this[i]);
- }
- return children;
- },
- toString: function(){
- return "[ "+(this.length > 0?Array.prototype.join.apply(this, [", "]):"Empty NodeList")+" ]";
- }
-});
-
-
-/**
- * @method DOMNodeList._findItemIndex - find the item index of the node with the specified internal id
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param id : int - unique internal id
- * @return : int
- */
-var __findItemIndex__ = function (nodelist, id) {
- var ret = -1;
-
- // test that id is valid
- if (id > -1) {
- for (var i=0; i<nodelist.length; i++) {
- // compare id to each node's _id
- if (nodelist[i]._id == id) { // found it!
- ret = i;
- break;
- }
- }
- }
-
- return ret; // if node is not found, default value -1 is returned
-};
-
-/**
- * @method DOMNodeList._insertBefore - insert the specified Node into the NodeList before the specified index
- * Used by DOMNode.insertBefore(). Note: DOMNode.insertBefore() is responsible for Node Pointer surgery
- * DOMNodeList._insertBefore() simply modifies the internal data structure (Array).
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param newChild : DOMNode - the Node to be inserted
- * @param refChildIndex : int - the array index to insert the Node before
- */
-var __insertBefore__ = function(nodelist, newChild, refChildIndex) {
- if ((refChildIndex >= 0) && (refChildIndex < nodelist.length)) { // bounds check
-
- if (newChild.nodeType == DOMNode.DOCUMENT_FRAGMENT_NODE) { // node is a DocumentFragment
- // append the children of DocumentFragment
- Array.prototype.splice.apply(nodelist,[refChildIndex, 0].concat(newChild.childNodes.toArray()));
- }
- else {
- // append the newChild
- Array.prototype.splice.apply(nodelist,[refChildIndex, 0, newChild]);
- }
- }
-};
-
-/**
- * @method DOMNodeList._replaceChild - replace the specified Node in the NodeList at the specified index
- * Used by DOMNode.replaceChild(). Note: DOMNode.replaceChild() is responsible for Node Pointer surgery
- * DOMNodeList._replaceChild() simply modifies the internal data structure (Array).
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param newChild : DOMNode - the Node to be inserted
- * @param refChildIndex : int - the array index to hold the Node
- */
-var __replaceChild__ = function(nodelist, newChild, refChildIndex) {
- var ret = null;
-
- if ((refChildIndex >= 0) && (refChildIndex < nodelist.length)) { // bounds check
- ret = nodelist[refChildIndex]; // preserve old child for return
-
- if (newChild.nodeType == DOMNode.DOCUMENT_FRAGMENT_NODE) { // node is a DocumentFragment
- // get array containing children prior to refChild
- Array.prototype.splice.apply(nodelist,[refChildIndex, 1].concat(newChild.childNodes.toArray()));
- }
- else {
- // simply replace node in array (links between Nodes are made at higher level)
- nodelist[refChildIndex] = newChild;
- }
- }
-
- return ret; // return replaced node
-};
-
-/**
- * @method DOMNodeList._removeChild - remove the specified Node in the NodeList at the specified index
- * Used by DOMNode.removeChild(). Note: DOMNode.removeChild() is responsible for Node Pointer surgery
- * DOMNodeList._replaceChild() simply modifies the internal data structure (Array).
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param refChildIndex : int - the array index holding the Node to be removed
- */
-var __removeChild__ = function(nodelist, refChildIndex) {
- var ret = null;
-
- if (refChildIndex > -1) { // found it!
- ret = nodelist[refChildIndex]; // return removed node
-
- // rebuild array without removed child
- Array.prototype.splice.apply(nodelist,[refChildIndex, 1]);
- }
-
- return ret; // return removed node
-};
-
-/**
- * @method DOMNodeList._appendChild - append the specified Node to the NodeList
- * Used by DOMNode.appendChild(). Note: DOMNode.appendChild() is responsible for Node Pointer surgery
- * DOMNodeList._appendChild() simply modifies the internal data structure (Array).
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param newChild : DOMNode - the Node to be inserted
- */
-var __appendChild__ = function(nodelist, newChild) {
- if (newChild.nodeType == DOMNode.DOCUMENT_FRAGMENT_NODE) { // node is a DocumentFragment
- // append the children of DocumentFragment
- Array.prototype.push.apply(nodelist, newChild.childNodes.toArray() );
- } else {
- // simply add node to array (links between Nodes are made at higher level)
- Array.prototype.push.apply(nodelist, [newChild]);
- }
-
-};
-
-/**
- * @method DOMNodeList._cloneNodes - Returns a NodeList containing clones of the Nodes in this NodeList
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param deep : boolean - If true, recursively clone the subtree under each of the nodes;
- * if false, clone only the nodes themselves (and their attributes, if it is an Element).
- * @param parentNode : DOMNode - the new parent of the cloned NodeList
- * @return : DOMNodeList - NodeList containing clones of the Nodes in this NodeList
- */
-var __cloneNodes__ = function(nodelist, deep, parentNode) {
- var cloneNodeList = new DOMNodeList(nodelist.ownerDocument, parentNode);
-
- // create list containing clones of each child
- for (var i=0; i < nodelist.length; i++) {
- __appendChild__(cloneNodeList, nodelist[i].cloneNode(deep));
- }
-
- return cloneNodeList;
-};
-
-$w.NodeList = DOMNodeList;
-
-/**
- * @class DOMNamedNodeMap - used to represent collections of nodes that can be accessed by name
- * typically a set of Element attributes
- *
- * @extends DOMNodeList - note W3C spec says that this is not the case,
- * but we need an item() method identicle to DOMNodeList's, so why not?
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param ownerDocument : DOMDocument - the ownerDocument
- * @param parentNode : DOMNode - the node that the DOMNamedNodeMap is attached to (or null)
- */
-var DOMNamedNodeMap = function(ownerDocument, parentNode) {
- //$log("\t\tcreating dom namednodemap");
- this.DOMNodeList = DOMNodeList;
- this.DOMNodeList(ownerDocument, parentNode);
- __setArray__(this, []);
-};
-DOMNamedNodeMap.prototype = new DOMNodeList;
-__extend__(DOMNamedNodeMap.prototype, {
- getNamedItem : function(name) {
- var ret = null;
-
- // test that Named Node exists
- var itemIndex = __findNamedItemIndex__(this, name);
-
- if (itemIndex > -1) { // found it!
- ret = this[itemIndex]; // return NamedNode
- }
-
- return ret; // if node is not found, default value null is returned
- },
- setNamedItem : function(arg) {
- // test for exceptions
- if (__ownerDocument__(this).implementation.errorChecking) {
- // throw Exception if arg was not created by this Document
- if (this.ownerDocument != arg.ownerDocument) {
- throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
- }
-
- // throw Exception if DOMNamedNodeMap is readonly
- if (this._readonly || (this.parentNode && this.parentNode._readonly)) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // throw Exception if arg is already an attribute of another Element object
- if (arg.ownerElement && (arg.ownerElement != this.parentNode)) {
- throw(new DOMException(DOMException.INUSE_ATTRIBUTE_ERR));
- }
- }
-
- // get item index
- var itemIndex = __findNamedItemIndex__(this, arg.name);
- var ret = null;
-
- if (itemIndex > -1) { // found it!
- ret = this[itemIndex]; // use existing Attribute
-
- // throw Exception if DOMAttr is readonly
- if (__ownerDocument__(this).implementation.errorChecking && ret._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- } else {
- this[itemIndex] = arg; // over-write existing NamedNode
- this[arg.name] = arg;
- }
- } else {
- // add new NamedNode
- Array.prototype.push.apply(this, [arg]);
- this[arg.name] = arg;
- }
-
- arg.ownerElement = this.parentNode; // update ownerElement
-
- return ret; // return old node or null
- },
- removeNamedItem : function(name) {
- var ret = null;
- // test for exceptions
- // throw Exception if DOMNamedNodeMap is readonly
- if (__ownerDocument__(this).implementation.errorChecking &&
- (this._readonly || (this.parentNode && this.parentNode._readonly))) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // get item index
- var itemIndex = __findNamedItemIndex__(this, name);
-
- // throw Exception if there is no node named name in this map
- if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
- throw(new DOMException(DOMException.NOT_FOUND_ERR));
- }
-
- // get Node
- var oldNode = this[itemIndex];
- //this[oldNode.name] = undefined;
-
- // throw Exception if Node is readonly
- if (__ownerDocument__(this).implementation.errorChecking && oldNode._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // return removed node
- return __removeChild__(this, itemIndex);
- },
- getNamedItemNS : function(namespaceURI, localName) {
- var ret = null;
-
- // test that Named Node exists
- var itemIndex = __findNamedItemNSIndex__(this, namespaceURI, localName);
-
- if (itemIndex > -1) { // found it!
- ret = this[itemIndex]; // return NamedNode
- }
-
- return ret; // if node is not found, default value null is returned
- },
- setNamedItemNS : function(arg) {
- // test for exceptions
- if (__ownerDocument__(this).implementation.errorChecking) {
- // throw Exception if DOMNamedNodeMap is readonly
- if (this._readonly || (this.parentNode && this.parentNode._readonly)) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // throw Exception if arg was not created by this Document
- if (__ownerDocument__(this) != __ownerDocument__(arg)) {
- throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
- }
-
- // throw Exception if arg is already an attribute of another Element object
- if (arg.ownerElement && (arg.ownerElement != this.parentNode)) {
- throw(new DOMException(DOMException.INUSE_ATTRIBUTE_ERR));
- }
- }
-
- // get item index
- var itemIndex = __findNamedItemNSIndex__(this, arg.namespaceURI, arg.localName);
- var ret = null;
-
- if (itemIndex > -1) { // found it!
- ret = this[itemIndex]; // use existing Attribute
- // throw Exception if DOMAttr is readonly
- if (__ownerDocument__(this).implementation.errorChecking && ret._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- } else {
- this[itemIndex] = arg; // over-write existing NamedNode
- }
- }else {
- // add new NamedNode
- Array.prototype.push.apply(this, [arg]);
- }
- arg.ownerElement = this.parentNode;
-
-
- return ret; // return old node or null
- },
- removeNamedItemNS : function(namespaceURI, localName) {
- var ret = null;
-
- // test for exceptions
- // throw Exception if DOMNamedNodeMap is readonly
- if (__ownerDocument__(this).implementation.errorChecking && (this._readonly || (this.parentNode && this.parentNode._readonly))) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // get item index
- var itemIndex = __findNamedItemNSIndex__(this, namespaceURI, localName);
-
- // throw Exception if there is no matching node in this map
- if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
- throw(new DOMException(DOMException.NOT_FOUND_ERR));
- }
-
- // get Node
- var oldNode = this[itemIndex];
-
- // throw Exception if Node is readonly
- if (__ownerDocument__(this).implementation.errorChecking && oldNode._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- return __removeChild__(this, itemIndex); // return removed node
- },
- get xml() {
- var ret = "";
-
- // create string containing concatenation of all (but last) Attribute string values (separated by spaces)
- for (var i=0; i < this.length -1; i++) {
- ret += this[i].xml +" ";
- }
-
- // add last Attribute to string (without trailing space)
- if (this.length > 0) {
- ret += this[this.length -1].xml;
- }
-
- return ret;
- }
-
-});
-
-/**
- * @method DOMNamedNodeMap._findNamedItemIndex - find the item index of the node with the specified name
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param name : string - the name of the required node
- * @param isnsmap : if its a DOMNamespaceNodeMap
- * @return : int
- */
-var __findNamedItemIndex__ = function(namednodemap, name, isnsmap) {
- var ret = -1;
-
- // loop through all nodes
- for (var i=0; i<namednodemap.length; i++) {
- // compare name to each node's nodeName
- if(isnsmap){
- if (namednodemap[i].localName == localName) { // found it!
- ret = i;
- break;
- }
- }else{
- if (namednodemap[i].name == name) { // found it!
- ret = i;
- break;
- }
- }
- }
-
- return ret; // if node is not found, default value -1 is returned
-};
-
-/**
- * @method DOMNamedNodeMap._findNamedItemNSIndex - find the item index of the node with the specified namespaceURI and localName
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param namespaceURI : string - the namespace URI of the required node
- * @param localName : string - the local name of the required node
- * @return : int
- */
-var __findNamedItemNSIndex__ = function(namednodemap, namespaceURI, localName) {
- var ret = -1;
-
- // test that localName is not null
- if (localName) {
- // loop through all nodes
- for (var i=0; i<namednodemap.length; i++) {
- // compare name to each node's namespaceURI and localName
- if ((namednodemap[i].namespaceURI == namespaceURI) && (namednodemap[i].localName == localName)) {
- ret = i; // found it!
- break;
- }
- }
- }
-
- return ret; // if node is not found, default value -1 is returned
-};
-
-/**
- * @method DOMNamedNodeMap._hasAttribute - Returns true if specified node exists
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param name : string - the name of the required node
- * @return : boolean
- */
-var __hasAttribute__ = function(namednodemap, name) {
- var ret = false;
-
- // test that Named Node exists
- var itemIndex = __findNamedItemIndex__(namednodemap, name);
-
- if (itemIndex > -1) { // found it!
- ret = true; // return true
- }
-
- return ret; // if node is not found, default value false is returned
-}
-
-/**
- * @method DOMNamedNodeMap._hasAttributeNS - Returns true if specified node exists
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param namespaceURI : string - the namespace URI of the required node
- * @param localName : string - the local name of the required node
- * @return : boolean
- */
-var __hasAttributeNS__ = function(namednodemap, namespaceURI, localName) {
- var ret = false;
-
- // test that Named Node exists
- var itemIndex = __findNamedItemNSIndex__(namednodemap, namespaceURI, localName);
-
- if (itemIndex > -1) { // found it!
- ret = true; // return true
- }
-
- return ret; // if node is not found, default value false is returned
-}
-
-/**
- * @method DOMNamedNodeMap._cloneNodes - Returns a NamedNodeMap containing clones of the Nodes in this NamedNodeMap
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param parentNode : DOMNode - the new parent of the cloned NodeList
- * @param isnsmap : bool - is this a DOMNamespaceNodeMap
- * @return : DOMNamedNodeMap - NamedNodeMap containing clones of the Nodes in this DOMNamedNodeMap
- */
-var __cloneNamedNodes__ = function(namednodemap, parentNode, isnsmap) {
- var cloneNamedNodeMap = isnsmap?
- new DOMNamespaceNodeMap(namednodemap.ownerDocument, parentNode):
- new DOMNamedNodeMap(namednodemap.ownerDocument, parentNode);
-
- // create list containing clones of all children
- for (var i=0; i < namednodemap.length; i++) {
- $debug("cloning node in named node map :" + namednodemap[i]);
- __appendChild__(cloneNamedNodeMap, namednodemap[i].cloneNode(false));
- }
-
- return cloneNamedNodeMap;
-};
-
-
-/**
- * @class DOMNamespaceNodeMap - used to represent collections of namespace nodes that can be accessed by name
- * typically a set of Element attributes
- *
- * @extends DOMNamedNodeMap
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- *
- * @param ownerDocument : DOMDocument - the ownerDocument
- * @param parentNode : DOMNode - the node that the DOMNamespaceNodeMap is attached to (or null)
- */
-var DOMNamespaceNodeMap = function(ownerDocument, parentNode) {
- //$log("\t\t\tcreating dom namespacednodemap");
- this.DOMNamedNodeMap = DOMNamedNodeMap;
- this.DOMNamedNodeMap(ownerDocument, parentNode);
- __setArray__(this, []);
-};
-DOMNamespaceNodeMap.prototype = new DOMNamedNodeMap;
-__extend__(DOMNamespaceNodeMap.prototype, {
- get xml() {
- var ret = "";
-
- // identify namespaces declared local to this Element (ie, not inherited)
- for (var ind = 0; ind < this.length; ind++) {
- // if namespace declaration does not exist in the containing node's, parentNode's namespaces
- var ns = null;
- try {
- var ns = this.parentNode.parentNode._namespaces.
- getNamedItem(this[ind].localName);
- }
- catch (e) {
- //breaking to prevent default namespace being inserted into return value
- break;
- }
- if (!(ns && (""+ ns.nodeValue == ""+ this[ind].nodeValue))) {
- // display the namespace declaration
- ret += this[ind].xml +" ";
- }
- }
-
- return ret;
- }
-});
-$debug("Defining Node");
-/*
-* Node - DOM Level 2
-*/
-/**
- * @class DOMNode - The Node interface is the primary datatype for the entire Document Object Model.
- * It represents a single node in the document tree.
- * @author Jon van Noort (jon@webarcana.com.au), David Joham (djoham@yahoo.com) and Scott Severtson
- * @param ownerDocument : DOMDocument - The Document object associated with this node.
- */
-var DOMNode = function(ownerDocument) {
- if (ownerDocument) {
- this._id = ownerDocument._genId(); // generate unique internal id
- }
-
- this.namespaceURI = ""; // The namespace URI of this node (Level 2)
- this.prefix = ""; // The namespace prefix of this node (Level 2)
- this.localName = ""; // The localName of this node (Level 2)
-
- this.nodeName = ""; // The name of this node
- this.nodeValue = null; // The value of this node
- this.className = ""; // The CSS class name of this node.
-
- // The parent of this node. All nodes, except Document, DocumentFragment, and Attr may have a parent.
- // However, if a node has just been created and not yet added to the tree, or if it has been removed from the tree, this is null
- this.parentNode = null;
-
- // A NodeList that contains all children of this node. If there are no children, this is a NodeList containing no nodes.
- // The content of the returned NodeList is "live" in the sense that, for instance, changes to the children of the node object
- // that it was created from are immediately reflected in the nodes returned by the NodeList accessors;
- // it is not a static snapshot of the content of the node. This is true for every NodeList, including the ones returned by the getElementsByTagName method.
- this.childNodes = new DOMNodeList(ownerDocument, this);
-
- this.firstChild = null; // The first child of this node. If there is no such node, this is null
- this.lastChild = null; // The last child of this node. If there is no such node, this is null.
- this.previousSibling = null; // The node immediately preceding this node. If there is no such node, this is null.
- this.nextSibling = null; // The node immediately following this node. If there is no such node, this is null.
-
- this.ownerDocument = ownerDocument; // The Document object associated with this node
- this.attributes = new DOMNamedNodeMap(this.ownerDocument, this);
- this._namespaces = new DOMNamespaceNodeMap(ownerDocument, this); // The namespaces in scope for this node
- this._readonly = false;
-};
-
-// nodeType constants
-DOMNode.ELEMENT_NODE = 1;
-DOMNode.ATTRIBUTE_NODE = 2;
-DOMNode.TEXT_NODE = 3;
-DOMNode.CDATA_SECTION_NODE = 4;
-DOMNode.ENTITY_REFERENCE_NODE = 5;
-DOMNode.ENTITY_NODE = 6;
-DOMNode.PROCESSING_INSTRUCTION_NODE = 7;
-DOMNode.COMMENT_NODE = 8;
-DOMNode.DOCUMENT_NODE = 9;
-DOMNode.DOCUMENT_TYPE_NODE = 10;
-DOMNode.DOCUMENT_FRAGMENT_NODE = 11;
-DOMNode.NOTATION_NODE = 12;
-DOMNode.NAMESPACE_NODE = 13;
-
-__extend__(DOMNode.prototype, {
- hasAttributes : function() {
- if (this.attributes.length == 0) {
- return false;
- }else{
- return true;
- }
- },
- insertBefore : function(newChild, refChild) {
- var prevNode;
-
- if(newChild==null || refChild==null){
- return newChild;
- }
-
- // test for exceptions
- if (__ownerDocument__(this).implementation.errorChecking) {
- // throw Exception if DOMNode is readonly
- if (this._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // throw Exception if newChild was not created by this Document
- if (__ownerDocument__(this) != __ownerDocument__(newChild)) {
- throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
- }
-
- // throw Exception if the node is an ancestor
- if (__isAncestor__(this, newChild)) {
- throw(new DOMException(DOMException.HIERARCHY_REQUEST_ERR));
- }
- }
-
- if (refChild) { // if refChild is specified, insert before it
- // find index of refChild
- var itemIndex = __findItemIndex__(this.childNodes, refChild._id);
-
- // throw Exception if there is no child node with this id
- if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
- throw(new DOMException(DOMException.NOT_FOUND_ERR));
- }
-
- // if the newChild is already in the tree,
- var newChildParent = newChild.parentNode;
- if (newChildParent) {
- // remove it
- newChildParent.removeChild(newChild);
- }
-
- // insert newChild into childNodes
- __insertBefore__(this.childNodes, newChild,
- __findItemIndex__(this.childNodes, refChild._id));
-
- // do node pointer surgery
- prevNode = refChild.previousSibling;
-
- // handle DocumentFragment
- if (newChild.nodeType == DOMNode.DOCUMENT_FRAGMENT_NODE) {
- if (newChild.childNodes.length > 0) {
- // set the parentNode of DocumentFragment's children
- for (var ind = 0; ind < newChild.childNodes.length; ind++) {
- newChild.childNodes[ind].parentNode = this;
- }
-
- // link refChild to last child of DocumentFragment
- refChild.previousSibling = newChild.childNodes[newChild.childNodes.length-1];
- }
- }else {
- newChild.parentNode = this; // set the parentNode of the newChild
- refChild.previousSibling = newChild; // link refChild to newChild
- }
- }else { // otherwise, append to end
- prevNode = this.lastChild;
- this.appendChild(newChild);
- }
-
- if (newChild.nodeType == DOMNode.DOCUMENT_FRAGMENT_NODE) {
- // do node pointer surgery for DocumentFragment
- if (newChild.childNodes.length > 0) {
- if (prevNode) {
- prevNode.nextSibling = newChild.childNodes[0];
- }else { // this is the first child in the list
- this.firstChild = newChild.childNodes[0];
- }
-
- newChild.childNodes[0].previousSibling = prevNode;
- newChild.childNodes[newChild.childNodes.length-1].nextSibling = refChild;
- }
- }else {
- // do node pointer surgery for newChild
- if (prevNode) {
- prevNode.nextSibling = newChild;
- }else { // this is the first child in the list
- this.firstChild = newChild;
- }
-
- newChild.previousSibling = prevNode;
- newChild.nextSibling = refChild;
- }
-
- return newChild;
- },
- replaceChild : function(newChild, oldChild) {
- var ret = null;
-
- if(newChild==null || oldChild==null){
- return oldChild;
- }
-
- // test for exceptions
- if (__ownerDocument__(this).implementation.errorChecking) {
- // throw Exception if DOMNode is readonly
- if (this._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // throw Exception if newChild was not created by this Document
- if (__ownerDocument__(this) != __ownerDocument__(newChild)) {
- throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
- }
-
- // throw Exception if the node is an ancestor
- if (__isAncestor__(this, newChild)) {
- throw(new DOMException(DOMException.HIERARCHY_REQUEST_ERR));
- }
- }
-
- // get index of oldChild
- var index = __findItemIndex__(this.childNodes, oldChild._id);
-
- // throw Exception if there is no child node with this id
- if (__ownerDocument__(this).implementation.errorChecking && (index < 0)) {
- throw(new DOMException(DOMException.NOT_FOUND_ERR));
- }
-
- // if the newChild is already in the tree,
- var newChildParent = newChild.parentNode;
- if (newChildParent) {
- // remove it
- newChildParent.removeChild(newChild);
- }
-
- // add newChild to childNodes
- ret = __replaceChild__(this.childNodes,newChild, index);
-
-
- if (newChild.nodeType == DOMNode.DOCUMENT_FRAGMENT_NODE) {
- // do node pointer surgery for Document Fragment
- if (newChild.childNodes.length > 0) {
- for (var ind = 0; ind < newChild.childNodes.length; ind++) {
- newChild.childNodes[ind].parentNode = this;
- }
-
- if (oldChild.previousSibling) {
- oldChild.previousSibling.nextSibling = newChild.childNodes[0];
- } else {
- this.firstChild = newChild.childNodes[0];
- }
-
- if (oldChild.nextSibling) {
- oldChild.nextSibling.previousSibling = newChild;
- } else {
- this.lastChild = newChild.childNodes[newChild.childNodes.length-1];
- }
-
- newChild.childNodes[0].previousSibling = oldChild.previousSibling;
- newChild.childNodes[newChild.childNodes.length-1].nextSibling = oldChild.nextSibling;
- }
- } else {
- // do node pointer surgery for newChild
- newChild.parentNode = this;
-
- if (oldChild.previousSibling) {
- oldChild.previousSibling.nextSibling = newChild;
- }else{
- this.firstChild = newChild;
- }
- if (oldChild.nextSibling) {
- oldChild.nextSibling.previousSibling = newChild;
- }else{
- this.lastChild = newChild;
- }
- newChild.previousSibling = oldChild.previousSibling;
- newChild.nextSibling = oldChild.nextSibling;
- }
- return ret;
- },
- removeChild : function(oldChild) {
- if(!oldChild){
- return null;
- }
- // throw Exception if DOMNamedNodeMap is readonly
- if (__ownerDocument__(this).implementation.errorChecking && (this._readonly || oldChild._readonly)) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // get index of oldChild
- var itemIndex = __findItemIndex__(this.childNodes, oldChild._id);
-
- // throw Exception if there is no child node with this id
- if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
- throw(new DOMException(DOMException.NOT_FOUND_ERR));
- }
-
- // remove oldChild from childNodes
- __removeChild__(this.childNodes, itemIndex);
-
- // do node pointer surgery
- oldChild.parentNode = null;
-
- if (oldChild.previousSibling) {
- oldChild.previousSibling.nextSibling = oldChild.nextSibling;
- }else {
- this.firstChild = oldChild.nextSibling;
- }
- if (oldChild.nextSibling) {
- oldChild.nextSibling.previousSibling = oldChild.previousSibling;
- }else {
- this.lastChild = oldChild.previousSibling;
- }
-
- oldChild.previousSibling = null;
- oldChild.nextSibling = null;
-
- return oldChild;
- },
- appendChild : function(newChild) {
- if(!newChild){
- return null;
- }
- // test for exceptions
- if (__ownerDocument__(this).implementation.errorChecking) {
- // throw Exception if Node is readonly
- if (this._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // throw Exception if arg was not created by this Document
- if (__ownerDocument__(this) != __ownerDocument__(this)) {
- throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
- }
-
- // throw Exception if the node is an ancestor
- if (__isAncestor__(this, newChild)) {
- throw(new DOMException(DOMException.HIERARCHY_REQUEST_ERR));
- }
- }
-
- // if the newChild is already in the tree,
- var newChildParent = newChild.parentNode;
- if (newChildParent) {
- // remove it
- newChildParent.removeChild(newChild);
- }
-
- // add newChild to childNodes
- __appendChild__(this.childNodes, newChild);
-
- if (newChild.nodeType == DOMNode.DOCUMENT_FRAGMENT_NODE) {
- // do node pointer surgery for DocumentFragment
- if (newChild.childNodes.length > 0) {
- for (var ind = 0; ind < newChild.childNodes.length; ind++) {
- newChild.childNodes[ind].parentNode = this;
- }
-
- if (this.lastChild) {
- this.lastChild.nextSibling = newChild.childNodes[0];
- newChild.childNodes[0].previousSibling = this.lastChild;
- this.lastChild = newChild.childNodes[newChild.childNodes.length-1];
- }
- else {
- this.lastChild = newChild.childNodes[newChild.childNodes.length-1];
- this.firstChild = newChild.childNodes[0];
- }
- }
- }
- else {
- // do node pointer surgery for newChild
- newChild.parentNode = this;
- if (this.lastChild) {
- this.lastChild.nextSibling = newChild;
- newChild.previousSibling = this.lastChild;
- this.lastChild = newChild;
- }
- else {
- this.lastChild = newChild;
- this.firstChild = newChild;
- }
- }
-
- return newChild;
- },
- hasChildNodes : function() {
- return (this.childNodes.length > 0);
- },
- cloneNode: function(deep) {
- // use importNode to clone this Node
- //do not throw any exceptions
- try {
- return __ownerDocument__(this).importNode(this, deep);
- } catch (e) {
- //there shouldn't be any exceptions, but if there are, return null
- return null;
- }
- },
- normalize : function() {
- var inode;
- var nodesToRemove = new DOMNodeList();
-
- if (this.nodeType == DOMNode.ELEMENT_NODE || this.nodeType == DOMNode.DOCUMENT_NODE) {
- var adjacentTextNode = null;
-
- // loop through all childNodes
- for(var i = 0; i < this.childNodes.length; i++) {
- inode = this.childNodes.item(i);
-
- if (inode.nodeType == DOMNode.TEXT_NODE) { // this node is a text node
- if (inode.length < 1) { // this text node is empty
- __appendChild__(nodesToRemove, inode); // add this node to the list of nodes to be remove
- }else {
- if (adjacentTextNode) { // if previous node was also text
- adjacentTextNode.appendData(inode.data); // merge the data in adjacent text nodes
- __appendChild__(nodesToRemove, inode); // add this node to the list of nodes to be removed
- }else {
- adjacentTextNode = inode; // remember this node for next cycle
- }
- }
- } else {
- adjacentTextNode = null; // (soon to be) previous node is not a text node
- inode.normalize(); // normalise non Text childNodes
- }
- }
-
- // remove redundant Text Nodes
- for(var i = 0; i < nodesToRemove.length; i++) {
- inode = nodesToRemove.item(i);
- inode.parentNode.removeChild(inode);
- }
- }
- },
- isSupported : function(feature, version) {
- // use Implementation.hasFeature to determin if this feature is supported
- return __ownerDocument__(this).implementation.hasFeature(feature, version);
- },
- getElementsByTagName : function(tagname) {
- // delegate to _getElementsByTagNameRecursive
- // recurse childNodes
- var nodelist = new DOMNodeList(__ownerDocument__(this));
- for(var i = 0; i < this.childNodes.length; i++) {
- nodeList = __getElementsByTagNameRecursive__(this.childNodes.item(i), tagname, nodelist);
- }
- return nodelist;
- },
- getElementsByTagNameNS : function(namespaceURI, localName) {
- // delegate to _getElementsByTagNameNSRecursive
- return __getElementsByTagNameNSRecursive__(this, namespaceURI, localName,
- new DOMNodeList(__ownerDocument__(this)));
- },
- importNode : function(importedNode, deep) {
-
- var importNode;
- //$debug("importing node " + importedNode.nodeName + "(?deep = "+deep+")");
- //there is no need to perform namespace checks since everything has already gone through them
- //in order to have gotten into the DOM in the first place. The following line
- //turns namespace checking off in ._isValidNamespace
- __ownerDocument__(this)._performingImportNodeOperation = true;
-
- if (importedNode.nodeType == DOMNode.ELEMENT_NODE) {
- if (!__ownerDocument__(this).implementation.namespaceAware) {
- // create a local Element (with the name of the importedNode)
- importNode = __ownerDocument__(this).createElement(importedNode.tagName);
-
- // create attributes matching those of the importedNode
- for(var i = 0; i < importedNode.attributes.length; i++) {
- importNode.setAttribute(importedNode.attributes.item(i).name, importedNode.attributes.item(i).value);
- }
- }else {
- // create a local Element (with the name & namespaceURI of the importedNode)
- importNode = __ownerDocument__(this).createElementNS(importedNode.namespaceURI, importedNode.nodeName);
-
- // create attributes matching those of the importedNode
- for(var i = 0; i < importedNode.attributes.length; i++) {
- importNode.setAttributeNS(importedNode.attributes.item(i).namespaceURI,
- importedNode.attributes.item(i).name, importedNode.attributes.item(i).value);
- }
-
- // create namespace definitions matching those of the importedNode
- for(var i = 0; i < importedNode._namespaces.length; i++) {
- importNode._namespaces[i] = __ownerDocument__(this).createNamespace(importedNode._namespaces.item(i).localName);
- importNode._namespaces[i].value = importedNode._namespaces.item(i).value;
- }
- }
- } else if (importedNode.nodeType == DOMNode.ATTRIBUTE_NODE) {
- if (!__ownerDocument__(this).implementation.namespaceAware) {
- // create a local Attribute (with the name of the importedAttribute)
- importNode = __ownerDocument__(this).createAttribute(importedNode.name);
- } else {
- // create a local Attribute (with the name & namespaceURI of the importedAttribute)
- importNode = __ownerDocument__(this).createAttributeNS(importedNode.namespaceURI, importedNode.nodeName);
-
- // create namespace definitions matching those of the importedAttribute
- for(var i = 0; i < importedNode._namespaces.length; i++) {
- importNode._namespaces[i] = __ownerDocument__(this).createNamespace(importedNode._namespaces.item(i).localName);
- importNode._namespaces[i].value = importedNode._namespaces.item(i).value;
- }
- }
-
- // set the value of the local Attribute to match that of the importedAttribute
- importNode.value = importedNode.value;
-
- } else if (importedNode.nodeType == DOMNode.DOCUMENT_FRAGMENT) {
- // create a local DocumentFragment
- importNode = __ownerDocument__(this).createDocumentFragment();
- } else if (importedNode.nodeType == DOMNode.NAMESPACE_NODE) {
- // create a local NamespaceNode (with the same name & value as the importedNode)
- importNode = __ownerDocument__(this).createNamespace(importedNode.nodeName);
- importNode.value = importedNode.value;
- } else if (importedNode.nodeType == DOMNode.TEXT_NODE) {
- // create a local TextNode (with the same data as the importedNode)
- importNode = __ownerDocument__(this).createTextNode(importedNode.data);
- } else if (importedNode.nodeType == DOMNode.CDATA_SECTION_NODE) {
- // create a local CDATANode (with the same data as the importedNode)
- importNode = __ownerDocument__(this).createCDATASection(importedNode.data);
- } else if (importedNode.nodeType == DOMNode.PROCESSING_INSTRUCTION_NODE) {
- // create a local ProcessingInstruction (with the same target & data as the importedNode)
- importNode = __ownerDocument__(this).createProcessingInstruction(importedNode.target, importedNode.data);
- } else if (importedNode.nodeType == DOMNode.COMMENT_NODE) {
- // create a local Comment (with the same data as the importedNode)
- importNode = __ownerDocument__(this).createComment(importedNode.data);
- } else { // throw Exception if nodeType is not supported
- throw(new DOMException(DOMException.NOT_SUPPORTED_ERR));
- }
-
- if (deep) { // recurse childNodes
- for(var i = 0; i < importedNode.childNodes.length; i++) {
- importNode.appendChild(__ownerDocument__(this).importNode(importedNode.childNodes.item(i), true));
- }
- }
-
- //reset _performingImportNodeOperation
- __ownerDocument__(this)._performingImportNodeOperation = false;
- return importNode;
-
- },
- contains : function(node){
- while(node && node != this ){
- node = node.parentNode;
- }
- return !!node;
- },
- compareDocumentPosition : function(b){
- var a = this;
- var number = (a != b && a.contains(b) && 16) + (a != b && b.contains(a) && 8);
- //find position of both
- var all = document.getElementsByTagName("*");
- var my_location = 0, node_location = 0;
- for(var i=0; i < all.length; i++){
- if(all[i] == a) my_location = i;
- if(all[i] == b) node_location = i;
- if(my_location && node_location) break;
- }
- number += (my_location < node_location && 4)
- number += (my_location > node_location && 2)
- return number;
- }
-
-});
-
-/**
- * @method DOMNode._getElementsByTagNameRecursive - implements getElementsByTagName()
- * @param elem : DOMElement - The element which are checking and then recursing into
- * @param tagname : string - The name of the tag to match on. The special value "*" matches all tags
- * @param nodeList : DOMNodeList - The accumulating list of matching nodes
- *
- * @return : DOMNodeList
- */
-var __getElementsByTagNameRecursive__ = function (elem, tagname, nodeList) {
-
- if (elem.nodeType == DOMNode.ELEMENT_NODE || elem.nodeType == DOMNode.DOCUMENT_NODE) {
-
- if(elem.nodeType !== DOMNode.DOCUMENT_NODE &&
- ((elem.nodeName.toUpperCase() == tagname.toUpperCase()) ||
- (tagname == "*")) ){
- __appendChild__(nodeList, elem); // add matching node to nodeList
- }
-
- // recurse childNodes
- for(var i = 0; i < elem.childNodes.length; i++) {
- nodeList = __getElementsByTagNameRecursive__(elem.childNodes.item(i), tagname, nodeList);
- }
- }
-
- return nodeList;
-};
-
-/**
- * @method DOMNode._getElementsByTagNameNSRecursive - implements getElementsByTagName()
- *
- * @param elem : DOMElement - The element which are checking and then recursing into
- * @param namespaceURI : string - the namespace URI of the required node
- * @param localName : string - the local name of the required node
- * @param nodeList : DOMNodeList - The accumulating list of matching nodes
- *
- * @return : DOMNodeList
- */
-var __getElementsByTagNameNSRecursive__ = function(elem, namespaceURI, localName, nodeList) {
- if (elem.nodeType == DOMNode.ELEMENT_NODE || elem.nodeType == DOMNode.DOCUMENT_NODE) {
-
- if (((elem.namespaceURI == namespaceURI) || (namespaceURI == "*")) && ((elem.localName == localName) || (localName == "*"))) {
- __appendChild__(nodeList, elem); // add matching node to nodeList
- }
-
- // recurse childNodes
- for(var i = 0; i < elem.childNodes.length; i++) {
- nodeList = __getElementsByTagNameNSRecursive__(elem.childNodes.item(i), namespaceURI, localName, nodeList);
- }
- }
-
- return nodeList;
-};
-
-/**
- * @method DOMNode._isAncestor - returns true if node is ancestor of target
- * @param target : DOMNode - The node we are using as context
- * @param node : DOMNode - The candidate ancestor node
- * @return : boolean
- */
-var __isAncestor__ = function(target, node) {
- // if this node matches, return true,
- // otherwise recurse up (if there is a parentNode)
- return ((target == node) || ((target.parentNode) && (__isAncestor__(target.parentNode, node))));
-};
-
-var __ownerDocument__ = function(node){
- return (node.nodeType == DOMNode.DOCUMENT_NODE)?node:node.ownerDocument;
-};
-
-$w.Node = DOMNode;
-
-/**
- * @class DOMNamespace - The Namespace interface represents an namespace in an Element object
- *
- * @extends DOMNode
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param ownerDocument : DOMDocument - The Document object associated with this node.
- */
-var DOMNamespace = function(ownerDocument) {
- this.DOMNode = DOMNode;
- this.DOMNode(ownerDocument);
-
- this.name = ""; // the name of this attribute
-
- // If this attribute was explicitly given a value in the original document, this is true; otherwise, it is false.
- // Note that the implementation is in charge of this attribute, not the user.
- // If the user changes the value of the attribute (even if it ends up having the same value as the default value)
- // then the specified flag is automatically flipped to true
- this.specified = false;
-};
-DOMNamespace.prototype = new DOMNode;
-__extend__(DOMNamespace.prototype, {
- get value(){
- // the value of the attribute is returned as a string
- return this.nodeValue;
- },
- set value(value){
- this.nodeValue = value+'';
- },
- get nodeType(){
- return DOMNode.NAMESPACE_NODE;
- },
- get xml(){
- var ret = "";
-
- // serialize Namespace Declaration
- if (this.nodeName != "") {
- ret += this.nodeName +"=\""+ __escapeXML__(this.nodeValue) +"\"";
- }
- else { // handle default namespace
- ret += "xmlns=\""+ __escapeXML__(this.nodeValue) +"\"";
- }
-
- return ret;
- },
- toString: function(){
- return "Namespace #" + this.id;
- }
-});
-
-$debug("Defining CharacterData");
-/*
-* CharacterData - DOM Level 2
-*/
-/**
- * @class DOMCharacterData - parent abstract class for DOMText and DOMComment
- * @extends DOMNode
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param ownerDocument : DOMDocument - The Document object associated with this node.
- */
-var DOMCharacterData = function(ownerDocument) {
- this.DOMNode = DOMNode;
- this.DOMNode(ownerDocument);
-};
-DOMCharacterData.prototype = new DOMNode;
-__extend__(DOMCharacterData.prototype,{
- get data(){
- return this.nodeValue;
- },
- set data(data){
- this.nodeValue = data;
- },
- get length(){return this.nodeValue.length;},
- appendData: function(arg){
- // throw Exception if DOMCharacterData is readonly
- if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
- // append data
- this.data = "" + this.data + arg;
- },
- deleteData: function(offset, count){
- // throw Exception if DOMCharacterData is readonly
- if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
- if (this.data) {
- // throw Exception if offset is negative or greater than the data length,
- if (__ownerDocument__(this).implementation.errorChecking &&
- ((offset < 0) || (offset > this.data.length) || (count < 0))) {
- throw(new DOMException(DOMException.INDEX_SIZE_ERR));
- }
-
- // delete data
- if(!count || (offset + count) > this.data.length) {
- this.data = this.data.substring(0, offset);
- }else {
- this.data = this.data.substring(0, offset).
- concat(this.data.substring(offset + count));
- }
- }
- },
- insertData: function(offset, arg){
- // throw Exception if DOMCharacterData is readonly
- if(__ownerDocument__(this).implementation.errorChecking && this._readonly){
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- if(this.data){
- // throw Exception if offset is negative or greater than the data length,
- if (__ownerDocument__(this).implementation.errorChecking &&
- ((offset < 0) || (offset > this.data.length))) {
- throw(new DOMException(DOMException.INDEX_SIZE_ERR));
- }
-
- // insert data
- this.data = this.data.substring(0, offset).concat(arg, this.data.substring(offset));
- }else {
- // throw Exception if offset is negative or greater than the data length,
- if (__ownerDocument__(this).implementation.errorChecking && (offset != 0)) {
- throw(new DOMException(DOMException.INDEX_SIZE_ERR));
- }
-
- // set data
- this.data = arg;
- }
- },
- replaceData: function(offset, count, arg){
- // throw Exception if DOMCharacterData is readonly
- if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- if (this.data) {
- // throw Exception if offset is negative or greater than the data length,
- if (__ownerDocument__(this).implementation.errorChecking &&
- ((offset < 0) || (offset > this.data.length) || (count < 0))) {
- throw(new DOMException(DOMException.INDEX_SIZE_ERR));
- }
-
- // replace data
- this.data = this.data.substring(0, offset).
- concat(arg, this.data.substring(offset + count));
- }else {
- // set data
- this.data = arg;
- }
- },
- substringData: function(offset, count){
- var ret = null;
- if (this.data) {
- // throw Exception if offset is negative or greater than the data length,
- // or the count is negative
- if (__ownerDocument__(this).implementation.errorChecking &&
- ((offset < 0) || (offset > this.data.length) || (count < 0))) {
- throw(new DOMException(DOMException.INDEX_SIZE_ERR));
- }
- // if count is not specified
- if (!count) {
- ret = this.data.substring(offset); // default to 'end of string'
- }else{
- ret = this.data.substring(offset, offset + count);
- }
- }
- return ret;
- }
-});
-
-$w.CharacterData = DOMCharacterData;$debug("Defining Text");
-/*
-* Text - DOM Level 2
-*/
-/**
- * @class DOMText - The Text interface represents the textual content (termed character data in XML) of an Element or Attr.
- * If there is no markup inside an element's content, the text is contained in a single object implementing the Text interface
- * that is the only child of the element. If there is markup, it is parsed into a list of elements and Text nodes that form the
- * list of children of the element.
- * @extends DOMCharacterData
- * @author Jon van Noort (jon@webarcana.com.au) and David Joham (djoham@yahoo.com)
- * @param ownerDocument : DOMDocument - The Document object associated with this node.
- */
-var DOMText = function(ownerDocument) {
- this.DOMCharacterData = DOMCharacterData;
- this.DOMCharacterData(ownerDocument);
-
- this.nodeName = "#text";
-};
-DOMText.prototype = new DOMCharacterData;
-__extend__(DOMText.prototype,{
- //Breaks this Text node into two Text nodes at the specified offset,
- // keeping both in the tree as siblings. This node then only contains all the content up to the offset point.
- // And a new Text node, which is inserted as the next sibling of this node, contains all the content at and after the offset point.
- splitText : function(offset) {
- var data, inode;
-
- // test for exceptions
- if (__ownerDocument__(this).implementation.errorChecking) {
- // throw Exception if Node is readonly
- if (this._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // throw Exception if offset is negative or greater than the data length,
- if ((offset < 0) || (offset > this.data.length)) {
- throw(new DOMException(DOMException.INDEX_SIZE_ERR));
- }
- }
-
- if (this.parentNode) {
- // get remaining string (after offset)
- data = this.substringData(offset);
-
- // create new TextNode with remaining string
- inode = __ownerDocument__(this).createTextNode(data);
-
- // attach new TextNode
- if (this.nextSibling) {
- this.parentNode.insertBefore(inode, this.nextSibling);
- }
- else {
- this.parentNode.appendChild(inode);
- }
-
- // remove remaining string from original TextNode
- this.deleteData(offset);
- }
-
- return inode;
- },
- get nodeType(){
- return DOMNode.TEXT_NODE;
- },
- get xml(){
- return __escapeXML__(""+ this.nodeValue);
- },
- toString: function(){
- return "Text #" + this._id;
- }
-});
-
-$w.Text = DOMText;$debug("Defining CDATASection");
-/*
-* CDATASection - DOM Level 2
-*/
-/**
- * @class DOMCDATASection - CDATA sections are used to escape blocks of text containing characters that would otherwise be regarded as markup.
- * The only delimiter that is recognized in a CDATA section is the "\]\]\>" string that ends the CDATA section
- * @extends DOMCharacterData
- * @author Jon van Noort (jon@webarcana.com.au) and David Joham (djoham@yahoo.com)
- * @param ownerDocument : DOMDocument - The Document object associated with this node.
- */
-var DOMCDATASection = function(ownerDocument) {
- this.DOMText = DOMText;
- this.DOMText(ownerDocument);
-
- this.nodeName = "#cdata-section";
-};
-DOMCDATASection.prototype = new DOMText;
-__extend__(DOMCDATASection.prototype,{
- get nodeType(){
- return DOMNode.CDATA_SECTION_NODE;
- },
- get xml(){
- return "<![CDATA[" + this.nodeValue + "]]>";
- },
- toString : function(){
- return "CDATA #"+this._id;
- }
-});
-
-$w.CDATASection = DOMCDATASection;$debug("Defining Comment");
-/*
-* Comment - DOM Level 2
-*/
-/**
- * @class DOMComment - This represents the content of a comment, i.e., all the characters between the starting '<!--' and ending '-->'
- * @extends DOMCharacterData
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param ownerDocument : DOMDocument - The Document object associated with this node.
- */
-var DOMComment = function(ownerDocument) {
- this.DOMCharacterData = DOMCharacterData;
- this.DOMCharacterData(ownerDocument);
-
- this.nodeName = "#comment";
-};
-DOMComment.prototype = new DOMCharacterData;
-__extend__(DOMComment.prototype, {
- get nodeType(){
- return DOMNode.COMMENT_NODE;
- },
- get xml(){
- return "<!--" + this.nodeValue + "-->";
- },
- toString : function(){
- return "Comment #"+this._id;
- }
-});
-
-$w.Comment = DOMComment;
-$debug("Defining DocumentType");
-;/*
-* DocumentType - DOM Level 2
-*/
-var DOMDocumentType = function() {
- $error("DOMDocumentType.constructor(): Not Implemented" );
-};
-
-$w.DocumentType = DOMDocumentType;
-$debug("Defining Attr");
-/*
-* Attr - DOM Level 2
-*/
-/**
- * @class DOMAttr - The Attr interface represents an attribute in an Element object
- * @extends DOMNode
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param ownerDocument : DOMDocument - The Document object associated with this node.
- */
-var DOMAttr = function(ownerDocument) {
- this.DOMNode = DOMNode;
- this.DOMNode(ownerDocument);
-
- this.ownerElement = null; // set when Attr is added to NamedNodeMap
-};
-DOMAttr.prototype = new DOMNode;
-__extend__(DOMAttr.prototype, {
- // the name of this attribute
- get name(){
- return this.nodeName;
- },
- set name(name){
- this.nodeName = name;
- },
- // the value of the attribute is returned as a string
- get value(){
- return this.nodeValue;
- },
- set value(value){
- // throw Exception if Attribute is readonly
- if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
- // delegate to node
- this.nodeValue = value;
- },
- get specified(){
- return (this.value.length > 0);
- },
- get nodeType(){
- return DOMNode.ATTRIBUTE_NODE;
- },
- get xml(){
- return this.nodeName + '="' + __escapeXML__(this.nodeValue) + '" ';
- },
- toString : function(){
- return "Attr #" + this._id + " " + this.name;
- }
-});
-
-$w.Attr = DOMAttr;
-$debug("Defining Element");
-/**
- * @class DOMElement - By far the vast majority of objects (apart from text) that authors encounter
- * when traversing a document are Element nodes.
- * @extends DOMNode
- * @author Jon van Noort (jon@webarcana.com.au) and David Joham (djoham@yahoo.com)
- * @param ownerDocument : DOMDocument - The Document object associated with this node.
- */
-var DOMElement = function(ownerDocument) {
- this.DOMNode = DOMNode;
- this.DOMNode(ownerDocument);
- this.id = ""; // the ID of the element
-};
-DOMElement.prototype = new DOMNode;
-__extend__(DOMElement.prototype, {
- // The name of the element.
- get tagName(){
- return this.nodeName;
- },
- set tagName(name){
- this.nodeName = name;
- },
- addEventListener : function(){ window.addEventListener.apply(this, arguments) },
- removeEventListener : function(){ window.removeEventListener.apply(this, arguments) },
- dispatchEvent : function(){ window.dispatchEvent.apply(this, arguments) },
- getAttribute: function(name) {
- var ret = null;
- // if attribute exists, use it
- var attr = this.attributes.getNamedItem(name);
- if (attr) {
- ret = attr.value;
- }
- return ret; // if Attribute exists, return its value, otherwise, return ""
- },
- setAttribute : function (name, value) {
- // if attribute exists, use it
- var attr = this.attributes.getNamedItem(name);
- var value = value+'';
- //I had to add this check becuase as the script initializes
- //the id may be set in the constructor, and the html element
- //overrides the id property with a getter/setter.
- if(__ownerDocument__(this)){
- if (!attr) {
- attr = __ownerDocument__(this).createAttribute(name); // otherwise create it
- }
-
-
- // test for exceptions
- if (__ownerDocument__(this).implementation.errorChecking) {
- // throw Exception if Attribute is readonly
- if (attr._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // throw Exception if the value string contains an illegal character
- if (!__isValidString__(value)) {
- throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
- }
- }
-
- if (__isIdDeclaration__(name)) {
- // this.id = value; // cache ID for getElementById()
- }
-
- // assign values to properties (and aliases)
- attr.value = value;
-
- // add/replace Attribute in NamedNodeMap
- this.attributes.setNamedItem(attr);
- }
- },
- removeAttribute : function removeAttribute(name) {
- // delegate to DOMNamedNodeMap.removeNamedItem
- return this.attributes.removeNamedItem(name);
- },
- getAttributeNode : function getAttributeNode(name) {
- // delegate to DOMNamedNodeMap.getNamedItem
- return this.attributes.getNamedItem(name);
- },
- setAttributeNode: function(newAttr) {
- // if this Attribute is an ID
- if (__isIdDeclaration__(newAttr.name)) {
- this.id = newAttr.value; // cache ID for getElementById()
- }
- // delegate to DOMNamedNodeMap.setNamedItem
- return this.attributes.setNamedItem(newAttr);
- },
- removeAttributeNode: function(oldAttr) {
- // throw Exception if Attribute is readonly
- if (__ownerDocument__(this).implementation.errorChecking && oldAttr._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // get item index
- var itemIndex = this.attributes._findItemIndex(oldAttr._id);
-
- // throw Exception if node does not exist in this map
- if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
- throw(new DOMException(DOMException.NOT_FOUND_ERR));
- }
-
- return this.attributes._removeChild(itemIndex);
- },
- getAttributeNS : function(namespaceURI, localName) {
- var ret = "";
- // delegate to DOMNAmedNodeMap.getNamedItemNS
- var attr = this.attributes.getNamedItemNS(namespaceURI, localName);
- if (attr) {
- ret = attr.value;
- }
- return ret; // if Attribute exists, return its value, otherwise return ""
- },
- setAttributeNS : function(namespaceURI, qualifiedName, value) {
- // call DOMNamedNodeMap.getNamedItem
- var attr = this.attributes.getNamedItem(namespaceURI, qualifiedName);
-
- if (!attr) { // if Attribute exists, use it
- // otherwise create it
- attr = __ownerDocument__(this).createAttributeNS(namespaceURI, qualifiedName);
- }
-
- var value = value+'';
-
- // test for exceptions
- if (__ownerDocument__(this).implementation.errorChecking) {
- // throw Exception if Attribute is readonly
- if (attr._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
-
- // throw Exception if the Namespace is invalid
- if (!__isValidNamespace__(namespaceURI, qualifiedName)) {
- throw(new DOMException(DOMException.NAMESPACE_ERR));
- }
-
- // throw Exception if the value string contains an illegal character
- if (!__isValidString__(value)) {
- throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
- }
- }
-
- // if this Attribute is an ID
- if (__isIdDeclaration__(name)) {
- this.id = value; // cache ID for getElementById()
- }
-
- // assign values to properties (and aliases)
- attr.value = value;
- attr.nodeValue = value;
-
- // delegate to DOMNamedNodeMap.setNamedItem
- this.attributes.setNamedItemNS(attr);
- },
- removeAttributeNS : function(namespaceURI, localName) {
- // delegate to DOMNamedNodeMap.removeNamedItemNS
- return this.attributes.removeNamedItemNS(namespaceURI, localName);
- },
- getAttributeNodeNS : function(namespaceURI, localName) {
- // delegate to DOMNamedNodeMap.getNamedItemNS
- return this.attributes.getNamedItemNS(namespaceURI, localName);
- },
- setAttributeNodeNS : function(newAttr) {
- // if this Attribute is an ID
- if ((newAttr.prefix == "") && __isIdDeclaration__(newAttr.name)) {
- this.id = newAttr.value+''; // cache ID for getElementById()
- }
-
- // delegate to DOMNamedNodeMap.setNamedItemNS
- return this.attributes.setNamedItemNS(newAttr);
- },
- hasAttribute : function(name) {
- // delegate to DOMNamedNodeMap._hasAttribute
- return __hasAttribute__(this.attributes,name);
- },
- hasAttributeNS : function(namespaceURI, localName) {
- // delegate to DOMNamedNodeMap._hasAttributeNS
- return __hasAttributeNS__(this.attributes, namespaceURI, localName);
- },
- get nodeType(){
- return DOMNode.ELEMENT_NODE;
- },
- get xml() {
- var ret = "";
-
- // serialize namespace declarations
- var ns = this._namespaces.xml;
- if (ns.length > 0) ns = " "+ ns;
-
- // serialize Attribute declarations
- var attrs = this.attributes.xml;
- if (attrs.length > 0) attrs = " "+ attrs;
-
- // serialize this Element
- ret += "<" + this.nodeName.toLowerCase() + ns + attrs +">";
- ret += this.childNodes.xml;
- ret += "</" + this.nodeName.toLowerCase()+">";
-
- return ret;
- },
- toString : function(){
- return "Element #"+this._id + " "+ this.tagName + (this.id?" => "+this.id:'');
- }
-});
-
-$w.Element = DOMElement;
-/**
- * @class DOMException - raised when an operation is impossible to perform
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param code : int - the exception code (one of the DOMException constants)
- */
-var DOMException = function(code) {
- this.code = code;
-};
-
-// DOMException constants
-// Introduced in DOM Level 1:
-DOMException.INDEX_SIZE_ERR = 1;
-DOMException.DOMSTRING_SIZE_ERR = 2;
-DOMException.HIERARCHY_REQUEST_ERR = 3;
-DOMException.WRONG_DOCUMENT_ERR = 4;
-DOMException.INVALID_CHARACTER_ERR = 5;
-DOMException.NO_DATA_ALLOWED_ERR = 6;
-DOMException.NO_MODIFICATION_ALLOWED_ERR = 7;
-DOMException.NOT_FOUND_ERR = 8;
-DOMException.NOT_SUPPORTED_ERR = 9;
-DOMException.INUSE_ATTRIBUTE_ERR = 10;
-
-// Introduced in DOM Level 2:
-DOMException.INVALID_STATE_ERR = 11;
-DOMException.SYNTAX_ERR = 12;
-DOMException.INVALID_MODIFICATION_ERR = 13;
-DOMException.NAMESPACE_ERR = 14;
-DOMException.INVALID_ACCESS_ERR = 15;
-$debug("Defining DocumentFragment");
-/*
-* DocumentFragment - DOM Level 2
-*/
-/**
- * @class DOMDocumentFragment - DocumentFragment is a "lightweight" or "minimal" Document object.
- * @extends DOMNode
- * @author Jon van Noort (jon@webarcana.com.au) and David Joham (djoham@yahoo.com)
- * @param ownerDocument : DOMDocument - The Document object associated with this node.
- */
-var DOMDocumentFragment = function(ownerDocument) {
- this.DOMNode = DOMNode;
- this.DOMNode(ownerDocument);
- this.nodeName = "#document-fragment";
-};
-DOMDocumentFragment.prototype = new DOMNode;
-__extend__(DOMDocumentFragment.prototype,{
- get nodeType(){
- return DOMNode.DOCUMENT_FRAGMENT_NODE;
- },
- get xml(){
- var xml = "",
- count = this.childNodes.length;
-
- // create string concatenating the serialized ChildNodes
- for (var i = 0; i < count; i++) {
- xml += this.childNodes.item(i).xml;
- }
-
- return xml;
- },
- toString : function(){
- return "DocumentFragment #"+this._id;
- }
-});
-
-$w.DocumentFragment = DOMDocumentFragment;
-$debug("Defining ProcessingInstruction");
-/*
-* ProcessingInstruction - DOM Level 2
-*/
-/**
- * @class DOMProcessingInstruction - The ProcessingInstruction interface represents a "processing instruction",
- * used in XML as a way to keep processor-specific information in the text of the document
- * @extends DOMNode
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param ownerDocument : DOMDocument - The Document object associated with this node.
- */
-var DOMProcessingInstruction = function(ownerDocument) {
- this.DOMNode = DOMNode;
- this.DOMNode(ownerDocument);
-};
-DOMProcessingInstruction.prototype = new DOMNode;
-__extend__(DOMProcessingInstruction.prototype, {
- get data(){
- return this.nodeValue;
- },
- set data(data){
- // throw Exception if DOMNode is readonly
- if (__ownerDocument__(this).errorChecking && this._readonly) {
- throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
- }
- this.nodeValue = data;
- },
- get target(){
- // The target of this processing instruction.
- // XML defines this as being the first token following the markup that begins the processing instruction.
- // The content of this processing instruction.
- return this.nodeName;
- },
- get nodeType(){
- return DOMNode.PROCESSING_INSTRUCTION_NODE;
- },
- get xml(){
- return "<?" + this.nodeName +" "+ this.nodeValue + " ?>";
- },
- toString : function(){
- return "ProcessingInstruction #"+this._id;
- }
-});
-
-$w.ProcessesingInstruction = DOMProcessingInstruction;
-$debug("Defining DOMParser");
-/*
-* DOMParser
-*/
-
-var DOMParser = function(){};
-__extend__(DOMParser.prototype,{
- parseFromString: function(xmlString){
- //$log("Parsing XML String: " +xmlString);
- return document.implementation.createDocument().loadXML(xmlString);
- }
-});
-
-$debug("Initializing Internal DOMParser.");
-//keep one around for internal use
-$domparser = new DOMParser();
-
-$w.DOMParser = DOMParser;
-// =========================================================================
-//
-// xmlsax.js - an XML SAX parser in JavaScript.
-//
-// version 3.1
-//
-// =========================================================================
-//
-// Copyright (C) 2001 - 2002 David Joham (djoham@yahoo.com) and Scott Severtson
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-// Visit the XML for <SCRIPT> home page at http://xmljs.sourceforge.net
-//
-
-// CONSTANTS
-var whitespace = "\n\r\t ";
-
-
-/**
-* function: this is the constructor to the XMLP Object
-* Author: Scott Severtson
-* Description:XMLP is a pull-based parser. The calling application passes in a XML string
-* to the constructor, then repeatedly calls .next() to parse the next segment.
-* .next() returns a flag indicating what type of segment was found, and stores
-* data temporarily in couple member variables (name, content, array of
-* attributes), which can be accessed by several .get____() methods.
-*
-* Basically, XMLP is the lowest common denominator parser - an very simple
-* API which other wrappers can be built against.
-**/
-
-
-var XMLP = function(strXML) {
- // Normalize line breaks
- strXML = SAXStrings.replace(strXML, null, null, "\r\n", "\n");
- strXML = SAXStrings.replace(strXML, null, null, "\r", "\n");
-
- this.m_xml = strXML;
- this.m_iP = 0;
- this.m_iState = XMLP._STATE_PROLOG;
- this.m_stack = new Stack();
- this._clearAttributes();
- this.replaceEntities = true;
-};
-
-
-// CONSTANTS (these must be below the constructor)
-
-
-XMLP._NONE = 0;
-XMLP._ELM_B = 1;
-XMLP._ELM_E = 2;
-XMLP._ELM_EMP = 3;
-XMLP._ATT = 4;
-XMLP._TEXT = 5;
-XMLP._ENTITY = 6;
-XMLP._PI = 7;
-XMLP._CDATA = 8;
-XMLP._COMMENT = 9;
-XMLP._DTD = 10;
-XMLP._ERROR = 11;
-
-XMLP._CONT_XML = 0;
-XMLP._CONT_ALT = 1;
-
-XMLP._ATT_NAME = 0;
-XMLP._ATT_VAL = 1;
-
-XMLP._STATE_PROLOG = 1;
-XMLP._STATE_DOCUMENT = 2;
-XMLP._STATE_MISC = 3;
-
-XMLP._errs = new Array();
-XMLP._errs[XMLP.ERR_CLOSE_PI = 0 ] = "PI: missing closing sequence";
-XMLP._errs[XMLP.ERR_CLOSE_DTD = 1 ] = "DTD: missing closing sequence";
-XMLP._errs[XMLP.ERR_CLOSE_COMMENT = 2 ] = "Comment: missing closing sequence";
-XMLP._errs[XMLP.ERR_CLOSE_CDATA = 3 ] = "CDATA: missing closing sequence";
-XMLP._errs[XMLP.ERR_CLOSE_ELM = 4 ] = "Element: missing closing sequence";
-XMLP._errs[XMLP.ERR_CLOSE_ENTITY = 5 ] = "Entity: missing closing sequence";
-XMLP._errs[XMLP.ERR_PI_TARGET = 6 ] = "PI: target is required";
-XMLP._errs[XMLP.ERR_ELM_EMPTY = 7 ] = "Element: cannot be both empty and closing";
-XMLP._errs[XMLP.ERR_ELM_NAME = 8 ] = "Element: name must immediatly follow \"<\"";
-XMLP._errs[XMLP.ERR_ELM_LT_NAME = 9 ] = "Element: \"<\" not allowed in element names";
-XMLP._errs[XMLP.ERR_ATT_VALUES = 10] = "Attribute: values are required and must be in quotes";
-XMLP._errs[XMLP.ERR_ATT_LT_NAME = 11] = "Element: \"<\" not allowed in attribute names";
-XMLP._errs[XMLP.ERR_ATT_LT_VALUE = 12] = "Attribute: \"<\" not allowed in attribute values";
-XMLP._errs[XMLP.ERR_ATT_DUP = 13] = "Attribute: duplicate attributes not allowed";
-XMLP._errs[XMLP.ERR_ENTITY_UNKNOWN = 14] = "Entity: unknown entity";
-XMLP._errs[XMLP.ERR_INFINITELOOP = 15] = "Infininte loop";
-XMLP._errs[XMLP.ERR_DOC_STRUCTURE = 16] = "Document: only comments, processing instructions, or whitespace allowed outside of document element";
-XMLP._errs[XMLP.ERR_ELM_NESTING = 17] = "Element: must be nested correctly";
-
-
-
-XMLP.prototype._addAttribute = function(name, value) {
- this.m_atts[this.m_atts.length] = new Array(name, value);
-}
-
-
-XMLP.prototype._checkStructure = function(iEvent) {
-
- if(XMLP._STATE_PROLOG == this.m_iState) {
- if((XMLP._TEXT == iEvent) || (XMLP._ENTITY == iEvent)) {
- if(SAXStrings.indexOfNonWhitespace(this.getContent(), this.getContentBegin(), this.getContentEnd()) != -1) {
- return this._setErr(XMLP.ERR_DOC_STRUCTURE);
- }
- }
-
- if((XMLP._ELM_B == iEvent) || (XMLP._ELM_EMP == iEvent)) {
- this.m_iState = XMLP._STATE_DOCUMENT;
- // Don't return - fall through to next state
- }
- }
- if(XMLP._STATE_DOCUMENT == this.m_iState) {
- if((XMLP._ELM_B == iEvent) || (XMLP._ELM_EMP == iEvent)) {
- this.m_stack.push(this.getName());
- }
-
- if((XMLP._ELM_E == iEvent) || (XMLP._ELM_EMP == iEvent)) {
- var strTop = this.m_stack.pop();
- if((strTop == null) || (strTop != this.getName())) {
- return this._setErr(XMLP.ERR_ELM_NESTING);
- }
- }
-
- if(this.m_stack.count() == 0) {
- this.m_iState = XMLP._STATE_MISC;
- return iEvent;
- }
- }
- if(XMLP._STATE_MISC == this.m_iState) {
- if((XMLP._ELM_B == iEvent) || (XMLP._ELM_E == iEvent) || (XMLP._ELM_EMP == iEvent) || (XMLP.EVT_DTD == iEvent)) {
- return this._setErr(XMLP.ERR_DOC_STRUCTURE);
- }
-
- if((XMLP._TEXT == iEvent) || (XMLP._ENTITY == iEvent)) {
- if(SAXStrings.indexOfNonWhitespace(this.getContent(), this.getContentBegin(), this.getContentEnd()) != -1) {
- return this._setErr(XMLP.ERR_DOC_STRUCTURE);
- }
- }
- }
-
- return iEvent;
-
-}
-
-
-XMLP.prototype._clearAttributes = function() {
- this.m_atts = new Array();
-}
-
-
-XMLP.prototype._findAttributeIndex = function(name) {
- for(var i = 0; i < this.m_atts.length; i++) {
- if(this.m_atts[i][XMLP._ATT_NAME] == name) {
- return i;
- }
- }
- return -1;
-
-}
-
-
-XMLP.prototype.getAttributeCount = function() {
-
- return this.m_atts ? this.m_atts.length : 0;
-
-}
-
-
-XMLP.prototype.getAttributeName = function(index) {
-
- return ((index < 0) || (index >= this.m_atts.length)) ? null : this.m_atts[index][XMLP._ATT_NAME];
-
-}
-
-
-XMLP.prototype.getAttributeValue = function(index) {
-
- return ((index < 0) || (index >= this.m_atts.length)) ? null : __unescapeXML__(this.m_atts[index][XMLP._ATT_VAL]);
-
-}
-
-
-XMLP.prototype.getAttributeValueByName = function(name) {
-
- return this.getAttributeValue(this._findAttributeIndex(name));
-
-}
-
-
-XMLP.prototype.getColumnNumber = function() {
-
- return SAXStrings.getColumnNumber(this.m_xml, this.m_iP);
-
-}
-
-
-XMLP.prototype.getContent = function() {
-
- return (this.m_cSrc == XMLP._CONT_XML) ? this.m_xml : this.m_cAlt;
-
-}
-
-
-XMLP.prototype.getContentBegin = function() {
-
- return this.m_cB;
-
-}
-
-
-XMLP.prototype.getContentEnd = function() {
-
- return this.m_cE;
-
-}
-
-
-XMLP.prototype.getLineNumber = function() {
-
- return SAXStrings.getLineNumber(this.m_xml, this.m_iP);
-
-}
-
-
-XMLP.prototype.getName = function() {
-
- return this.m_name;
-
-}
-
-
-XMLP.prototype.next = function() {
-
- return this._checkStructure(this._parse());
-
-}
-
-XMLP.prototype.appendFragment = function(xmlfragment) {
-
- var start = this.m_xml.slice(0,this.m_iP);
- var end = this.m_xml.slice(this.m_iP);
- this.m_xml = start+xmlfragment+end;
-
-}
-
-
-XMLP.prototype._parse = function() {
-
- if(this.m_iP == this.m_xml.length) {
- return XMLP._NONE;
- }
-
- if(this.m_iP == this.m_xml.indexOf("<", this.m_iP)){
- if(this.m_xml.charAt(this.m_iP+1) == "?") {
- return this._parsePI(this.m_iP + 2);
- }
- else if(this.m_xml.charAt(this.m_iP+1) == "!") {
- if(this.m_xml.charAt(this.m_iP+2) == "D") {
- return this._parseDTD(this.m_iP + 9);
- }
- else if(this.m_xml.charAt(this.m_iP+2) == "-") {
- return this._parseComment(this.m_iP + 4);
- }
- else if(this.m_xml.charAt(this.m_iP+2) == "[") {
- return this._parseCDATA(this.m_iP + 9);
- }
- }
- else{
- return this._parseElement(this.m_iP + 1);
- }
- }
- else if(this.m_iP == this.m_xml.indexOf("&", this.m_iP)) {
- return this._parseEntity(this.m_iP + 1);
- }
- else{
- return this._parseText(this.m_iP);
- }
-
-
-}
-
-
-XMLP.prototype._parseAttribute = function(iB, iE) {
- var iNB, iNE, iEq, iVB, iVE;
- var cQuote, strN, strV;
-
- this.m_cAlt = ""; //resets the value so we don't use an old one by accident (see testAttribute7 in the test suite)
-
- iNB = SAXStrings.indexOfNonWhitespace(this.m_xml, iB, iE);
- if((iNB == -1) ||(iNB >= iE)) {
- return iNB;
- }
-
- iEq = this.m_xml.indexOf("=", iNB);
- if((iEq == -1) || (iEq > iE)) {
- return this._setErr(XMLP.ERR_ATT_VALUES);
- }
-
- iNE = SAXStrings.lastIndexOfNonWhitespace(this.m_xml, iNB, iEq);
-
- iVB = SAXStrings.indexOfNonWhitespace(this.m_xml, iEq + 1, iE);
- if((iVB == -1) ||(iVB > iE)) {
- return this._setErr(XMLP.ERR_ATT_VALUES);
- }
-
- cQuote = this.m_xml.charAt(iVB);
- if(_SAXStrings.QUOTES.indexOf(cQuote) == -1) {
- return this._setErr(XMLP.ERR_ATT_VALUES);
- }
-
- iVE = this.m_xml.indexOf(cQuote, iVB + 1);
- if((iVE == -1) ||(iVE > iE)) {
- return this._setErr(XMLP.ERR_ATT_VALUES);
- }
-
- strN = this.m_xml.substring(iNB, iNE + 1);
- strV = this.m_xml.substring(iVB + 1, iVE);
-
- if(strN.indexOf("<") != -1) {
- return this._setErr(XMLP.ERR_ATT_LT_NAME);
- }
-
- if(strV.indexOf("<") != -1) {
- return this._setErr(XMLP.ERR_ATT_LT_VALUE);
- }
-
- strV = SAXStrings.replace(strV, null, null, "\n", " ");
- strV = SAXStrings.replace(strV, null, null, "\t", " ");
- iRet = this._replaceEntities(strV);
- if(iRet == XMLP._ERROR) {
- return iRet;
- }
-
- strV = this.m_cAlt;
-
- if(this._findAttributeIndex(strN) == -1) {
- this._addAttribute(strN, strV);
- }else {
- return this._setErr(XMLP.ERR_ATT_DUP);
- }
-
- this.m_iP = iVE + 2;
-
- return XMLP._ATT;
-
-}
-
-
-XMLP.prototype._parseCDATA = function(iB) {
- var iE = this.m_xml.indexOf("]]>", iB);
- if (iE == -1) {
- return this._setErr(XMLP.ERR_CLOSE_CDATA);
- }
-
- this._setContent(XMLP._CONT_XML, iB, iE);
-
- this.m_iP = iE + 3;
-
- return XMLP._CDATA;
-
-}
-
-
-XMLP.prototype._parseComment = function(iB) {
- var iE = this.m_xml.indexOf("-" + "->", iB);
- if (iE == -1) {
- return this._setErr(XMLP.ERR_CLOSE_COMMENT);
- }
-
- this._setContent(XMLP._CONT_XML, iB, iE);
-
- this.m_iP = iE + 3;
-
- return XMLP._COMMENT;
-
-}
-
-
-XMLP.prototype._parseDTD = function(iB) {
-
- // Eat DTD
-
- var iE, strClose, iInt, iLast;
-
- iE = this.m_xml.indexOf(">", iB);
- if(iE == -1) {
- return this._setErr(XMLP.ERR_CLOSE_DTD);
- }
-
- iInt = this.m_xml.indexOf("[", iB);
- strClose = ((iInt != -1) && (iInt < iE)) ? "]>" : ">";
-
- while(true) {
- // DEBUG: Remove
- /*if(iE == iLast) {
- return this._setErr(XMLP.ERR_INFINITELOOP);
- }
-
- iLast = iE;*/
- // DEBUG: Remove End
-
- iE = this.m_xml.indexOf(strClose, iB);
- if(iE == -1) {
- return this._setErr(XMLP.ERR_CLOSE_DTD);
- }
-
- // Make sure it is not the end of a CDATA section
- if (this.m_xml.substring(iE - 1, iE + 2) != "]]>") {
- break;
- }
- }
-
- this.m_iP = iE + strClose.length;
-
- return XMLP._DTD;
-
-}
-
-
-XMLP.prototype._parseElement = function(iB) {
- var iE, iDE, iNE, iRet;
- var iType, strN, iLast;
-
- iDE = iE = this.m_xml.indexOf(">", iB);
- if(iE == -1) {
- return this._setErr(XMLP.ERR_CLOSE_ELM);
- }
-
- if(this.m_xml.charAt(iB) == "/") {
- iType = XMLP._ELM_E;
- iB++;
- } else {
- iType = XMLP._ELM_B;
- }
-
- if(this.m_xml.charAt(iE - 1) == "/") {
- if(iType == XMLP._ELM_E) {
- return this._setErr(XMLP.ERR_ELM_EMPTY);
- }
- iType = XMLP._ELM_EMP;
- iDE--;
- }
-
- iDE = SAXStrings.lastIndexOfNonWhitespace(this.m_xml, iB, iDE);
-
- //djohack
- //hack to allow for elements with single character names to be recognized
-
- /*if (iE - iB != 1 ) {
- if(SAXStrings.indexOfNonWhitespace(this.m_xml, iB, iDE) != iB) {
- return this._setErr(XMLP.ERR_ELM_NAME);
- }
- }*/
- // end hack -- original code below
-
- /*
- if(SAXStrings.indexOfNonWhitespace(this.m_xml, iB, iDE) != iB)
- return this._setErr(XMLP.ERR_ELM_NAME);
- */
- this._clearAttributes();
-
- iNE = SAXStrings.indexOfWhitespace(this.m_xml, iB, iDE);
- if(iNE == -1) {
- iNE = iDE + 1;
- }
- else {
- this.m_iP = iNE;
- while(this.m_iP < iDE) {
- // DEBUG: Remove
- //if(this.m_iP == iLast) return this._setErr(XMLP.ERR_INFINITELOOP);
- //iLast = this.m_iP;
- // DEBUG: Remove End
-
-
- iRet = this._parseAttribute(this.m_iP, iDE);
- if(iRet == XMLP._ERROR) return iRet;
- }
- }
-
- strN = this.m_xml.substring(iB, iNE);
-
- /*if(strN.indexOf("<") != -1) {
- return this._setErr(XMLP.ERR_ELM_LT_NAME);
- }*/
-
- this.m_name = strN;
- this.m_iP = iE + 1;
-
- return iType;
-
-}
-
-
-XMLP.prototype._parseEntity = function(iB) {
- var iE = this.m_xml.indexOf(";", iB);
- if(iE == -1) {
- return this._setErr(XMLP.ERR_CLOSE_ENTITY);
- }
-
- this.m_iP = iE + 1;
-
- return this._replaceEntity(this.m_xml, iB, iE);
-
-}
-
-
-XMLP.prototype._parsePI = function(iB) {
-
- var iE, iTB, iTE, iCB, iCE;
-
- iE = this.m_xml.indexOf("?>", iB);
- if(iE == -1) {
- return this._setErr(XMLP.ERR_CLOSE_PI);
- }
-
- iTB = SAXStrings.indexOfNonWhitespace(this.m_xml, iB, iE);
- if(iTB == -1) {
- return this._setErr(XMLP.ERR_PI_TARGET);
- }
-
- iTE = SAXStrings.indexOfWhitespace(this.m_xml, iTB, iE);
- if(iTE == -1) {
- iTE = iE;
- }
-
- iCB = SAXStrings.indexOfNonWhitespace(this.m_xml, iTE, iE);
- if(iCB == -1) {
- iCB = iE;
- }
-
- iCE = SAXStrings.lastIndexOfNonWhitespace(this.m_xml, iCB, iE);
- if(iCE == -1) {
- iCE = iE - 1;
- }
-
- this.m_name = this.m_xml.substring(iTB, iTE);
- this._setContent(XMLP._CONT_XML, iCB, iCE + 1);
- this.m_iP = iE + 2;
-
- return XMLP._PI;
-
-}
-
-
-XMLP.prototype._parseText = function(iB) {
- var iE, iEE;
-
- iE = this.m_xml.indexOf("<", iB);
- if(iE == -1) {
- iE = this.m_xml.length;
- }
-
- if(this.replaceEntities) {
- iEE = this.m_xml.indexOf("&", iB);
- if((iEE != -1) && (iEE <= iE)) {
- iE = iEE;
- }
- }
-
- this._setContent(XMLP._CONT_XML, iB, iE);
-
- this.m_iP = iE;
-
- return XMLP._TEXT;
-
-}
-
-
-XMLP.prototype._replaceEntities = function(strD, iB, iE) {
- if(SAXStrings.isEmpty(strD)) return "";
- iB = iB || 0;
- iE = iE || strD.length;
-
-
- var iEB, iEE, strRet = "";
-
- iEB = strD.indexOf("&", iB);
- iEE = iB;
-
- while((iEB > 0) && (iEB < iE)) {
- strRet += strD.substring(iEE, iEB);
-
- iEE = strD.indexOf(";", iEB) + 1;
-
- if((iEE == 0) || (iEE > iE)) {
- return this._setErr(XMLP.ERR_CLOSE_ENTITY);
- }
-
- iRet = this._replaceEntity(strD, iEB + 1, iEE - 1);
- if(iRet == XMLP._ERROR) {
- return iRet;
- }
-
- strRet += this.m_cAlt;
-
- iEB = strD.indexOf("&", iEE);
- }
-
- if(iEE != iE) {
- strRet += strD.substring(iEE, iE);
- }
-
- this._setContent(XMLP._CONT_ALT, strRet);
-
- return XMLP._ENTITY;
-
-}
-
-
-XMLP.prototype._replaceEntity = function(strD, iB, iE) {
- if(SAXStrings.isEmpty(strD)) return -1;
- iB = iB || 0;
- iE = iE || strD.length;
-
- switch(strD.substring(iB, iE)) {
- case "amp": strEnt = "&"; break;
- case "lt": strEnt = "<"; break;
- case "gt": strEnt = ">"; break;
- case "apos": strEnt = "'"; break;
- case "quot": strEnt = "\""; break;
- default:
- if(strD.charAt(iB) == "#") {
- strEnt = String.fromCharCode(parseInt(strD.substring(iB + 1, iE)))+'';
- } else {
- return this._setErr(XMLP.ERR_ENTITY_UNKNOWN);
- }
- break;
- }
- this._setContent(XMLP._CONT_ALT, strEnt);
-
- return XMLP._ENTITY;
-}
-
-
-XMLP.prototype._setContent = function(iSrc) {
- var args = arguments;
-
- if(XMLP._CONT_XML == iSrc) {
- this.m_cAlt = null;
- this.m_cB = args[1];
- this.m_cE = args[2];
- } else {
- this.m_cAlt = args[1];
- this.m_cB = 0;
- this.m_cE = args[1].length;
- }
- this.m_cSrc = iSrc;
-
-}
-
-
-XMLP.prototype._setErr = function(iErr) {
- var strErr = XMLP._errs[iErr];
-
- this.m_cAlt = strErr;
- this.m_cB = 0;
- this.m_cE = strErr.length;
- this.m_cSrc = XMLP._CONT_ALT;
-
- return XMLP._ERROR;
-
-}
-
-
-/**
-* function: SAXDriver
-* Author: Scott Severtson
-* Description:
-* SAXDriver is an object that basically wraps an XMLP instance, and provides an
-* event-based interface for parsing. This is the object users interact with when coding
-* with XML for <SCRIPT>
-**/
-
-var SAXDriver = function() {
- this.m_hndDoc = null;
- this.m_hndErr = null;
- this.m_hndLex = null;
-}
-
-
-// CONSTANTS
-SAXDriver.DOC_B = 1;
-SAXDriver.DOC_E = 2;
-SAXDriver.ELM_B = 3;
-SAXDriver.ELM_E = 4;
-SAXDriver.CHARS = 5;
-SAXDriver.PI = 6;
-SAXDriver.CD_B = 7;
-SAXDriver.CD_E = 8;
-SAXDriver.CMNT = 9;
-SAXDriver.DTD_B = 10;
-SAXDriver.DTD_E = 11;
-
-
-
-SAXDriver.prototype.parse = function(strD) {
- var parser = new XMLP(strD);
-
- if(this.m_hndDoc && this.m_hndDoc.setDocumentLocator) {
- this.m_hndDoc.setDocumentLocator(this);
- }
-
- this.m_parser = parser;
- this.m_bErr = false;
-
- if(!this.m_bErr) {
- this._fireEvent(SAXDriver.DOC_B);
- }
- this._parseLoop();
- if(!this.m_bErr) {
- this._fireEvent(SAXDriver.DOC_E);
- }
-
- this.m_xml = null;
- this.m_iP = 0;
-
-}
-
-
-SAXDriver.prototype.setDocumentHandler = function(hnd) {
-
- this.m_hndDoc = hnd;
-
-}
-
-
-SAXDriver.prototype.setErrorHandler = function(hnd) {
-
- this.m_hndErr = hnd;
-
-}
-
-
-SAXDriver.prototype.setLexicalHandler = function(hnd) {
-
- this.m_hndLex = hnd;
-
-}
-
-
- /**
- * LOCATOR/PARSE EXCEPTION INTERFACE
- ***/
-
-SAXDriver.prototype.getColumnNumber = function() {
-
- return this.m_parser.getColumnNumber();
-
-}
-
-
-SAXDriver.prototype.getLineNumber = function() {
-
- return this.m_parser.getLineNumber();
-
-}
-
-
-SAXDriver.prototype.getMessage = function() {
-
- return this.m_strErrMsg;
-
-}
-
-
-SAXDriver.prototype.getPublicId = function() {
-
- return null;
-
-}
-
-
-SAXDriver.prototype.getSystemId = function() {
-
- return null;
-
-}
-
-
- /***
- * Attribute List Interface
- **/
-
-SAXDriver.prototype.getLength = function() {
-
- return this.m_parser.getAttributeCount();
-
-}
-
-
-SAXDriver.prototype.getName = function(index) {
-
- return this.m_parser.getAttributeName(index);
-
-}
-
-
-SAXDriver.prototype.getValue = function(index) {
-
- return this.m_parser.getAttributeValue(index);
-
-}
-
-
-SAXDriver.prototype.getValueByName = function(name) {
-
- return this.m_parser.getAttributeValueByName(name);
-
-}
-
-
- /***
- * Private functions
- **/
-
-SAXDriver.prototype._fireError = function(strMsg) {
- this.m_strErrMsg = strMsg;
- this.m_bErr = true;
-
- if(this.m_hndErr && this.m_hndErr.fatalError) {
- this.m_hndErr.fatalError(this);
- }
-
-} // end function _fireError
-
-
-SAXDriver.prototype._fireEvent = function(iEvt) {
- var hnd, func, args = arguments, iLen = args.length - 1;
-
- if(this.m_bErr) return;
-
- if(SAXDriver.DOC_B == iEvt) {
- func = "startDocument"; hnd = this.m_hndDoc;
- }
- else if (SAXDriver.DOC_E == iEvt) {
- func = "endDocument"; hnd = this.m_hndDoc;
- }
- else if (SAXDriver.ELM_B == iEvt) {
- func = "startElement"; hnd = this.m_hndDoc;
- }
- else if (SAXDriver.ELM_E == iEvt) {
- func = "endElement"; hnd = this.m_hndDoc;
- }
- else if (SAXDriver.CHARS == iEvt) {
- func = "characters"; hnd = this.m_hndDoc;
- }
- else if (SAXDriver.PI == iEvt) {
- func = "processingInstruction"; hnd = this.m_hndDoc;
- }
- else if (SAXDriver.CD_B == iEvt) {
- func = "startCDATA"; hnd = this.m_hndLex;
- }
- else if (SAXDriver.CD_E == iEvt) {
- func = "endCDATA"; hnd = this.m_hndLex;
- }
- else if (SAXDriver.CMNT == iEvt) {
- func = "comment"; hnd = this.m_hndLex;
- }
-
- if(hnd && hnd[func]) {
- if(0 == iLen) {
- hnd[func]();
- }
- else if (1 == iLen) {
- hnd[func](args[1]);
- }
- else if (2 == iLen) {
- hnd[func](args[1], args[2]);
- }
- else if (3 == iLen) {
- hnd[func](args[1], args[2], args[3]);
- }
- }
-
-} // end function _fireEvent
-
-
-SAXDriver.prototype._parseLoop = function(parser) {
- var iEvent, parser;
-
- parser = this.m_parser;
- while(!this.m_bErr) {
- iEvent = parser.next();
-
- if(iEvent == XMLP._ELM_B) {
- this._fireEvent(SAXDriver.ELM_B, parser.getName(), this);
- }
- else if(iEvent == XMLP._ELM_E) {
- this._fireEvent(SAXDriver.ELM_E, parser.getName());
- }
- else if(iEvent == XMLP._ELM_EMP) {
- this._fireEvent(SAXDriver.ELM_B, parser.getName(), this);
- this._fireEvent(SAXDriver.ELM_E, parser.getName());
- }
- else if(iEvent == XMLP._TEXT) {
- this._fireEvent(SAXDriver.CHARS, parser.getContent(), parser.getContentBegin(), parser.getContentEnd() - parser.getContentBegin());
- }
- else if(iEvent == XMLP._ENTITY) {
- this._fireEvent(SAXDriver.CHARS, parser.getContent(), parser.getContentBegin(), parser.getContentEnd() - parser.getContentBegin());
- }
- else if(iEvent == XMLP._PI) {
- this._fireEvent(SAXDriver.PI, parser.getName(), parser.getContent().substring(parser.getContentBegin(), parser.getContentEnd()));
- }
- else if(iEvent == XMLP._CDATA) {
- this._fireEvent(SAXDriver.CD_B);
- this._fireEvent(SAXDriver.CHARS, parser.getContent(), parser.getContentBegin(), parser.getContentEnd() - parser.getContentBegin());
- this._fireEvent(SAXDriver.CD_E);
- }
- else if(iEvent == XMLP._COMMENT) {
- this._fireEvent(SAXDriver.CMNT, parser.getContent(), parser.getContentBegin(), parser.getContentEnd() - parser.getContentBegin());
- }
- else if(iEvent == XMLP._DTD) {
- }
- else if(iEvent == XMLP._ERROR) {
- this._fireError(parser.getContent());
- }
- else if(iEvent == XMLP._NONE) {
- return;
- }
- }
-
-} // end function _parseLoop
-
-/**
-* function: SAXStrings
-* Author: Scott Severtson
-* Description: a useful object containing string manipulation functions
-**/
-
-var _SAXStrings = function() {};
-
-
-_SAXStrings.WHITESPACE = " \t\n\r";
-_SAXStrings.NONWHITESPACE = /\S/;
-_SAXStrings.QUOTES = "\"'";
-
-
-_SAXStrings.prototype.getColumnNumber = function(strD, iP) {
- if((strD === null) || (strD.length === 0)) {
- return -1;
- }
- iP = iP || strD.length;
-
- var arrD = strD.substring(0, iP).split("\n");
- var strLine = arrD[arrD.length - 1];
- arrD.length--;
- var iLinePos = arrD.join("\n").length;
-
- return iP - iLinePos;
-
-} // end function getColumnNumber
-
-
-_SAXStrings.prototype.getLineNumber = function(strD, iP) {
- if((strD === null) || (strD.length === 0)) {
- return -1;
- }
- iP = iP || strD.length;
-
- return strD.substring(0, iP).split("\n").length
-} // end function getLineNumber
-
-
-_SAXStrings.prototype.indexOfNonWhitespace = function(strD, iB, iE) {
- if((strD === null) || (strD.length === 0)) {
- return -1;
- }
- iB = iB || 0;
- iE = iE || strD.length;
-
- //var i = strD.substring(iB, iE).search(_SAXStrings.NONWHITESPACE);
- //return i < 0 ? i : iB + i;
-
- while( strD.charCodeAt(iB++) < 33 );
- return (iB > iE)?-1:iB-1;
- /*for(var i = iB; i < iE; i++){
- if(_SAXStrings.WHITESPACE.indexOf(strD.charAt(i)) == -1) {
- return i;
- }
- }
- return -1;*/
-
-} // end function indexOfNonWhitespace
-
-
-_SAXStrings.prototype.indexOfWhitespace = function(strD, iB, iE) {
- if((strD === null) || (strD.length === 0)) {
- return -1;
- }
- iB = iB || 0;
- iE = iE || strD.length;
-
-
- while( strD.charCodeAt(iB++) >= 33 );
- return (iB > iE)?-1:iB-1;
-
- /*for(var i = iB; i < iE; i++) {
- if(_SAXStrings.WHITESPACE.indexOf(strD.charAt(i)) != -1) {
- return i;
- }
- }
- return -1;*/
-} // end function indexOfWhitespace
-
-
-_SAXStrings.prototype.isEmpty = function(strD) {
-
- return (strD == null) || (strD.length == 0);
-
-}
-
-
-_SAXStrings.prototype.lastIndexOfNonWhitespace = function(strD, iB, iE) {
- if((strD === null) || (strD.length === 0)) {
- return -1;
- }
- iB = iB || 0;
- iE = iE || strD.length;
-
- while( (iE >= iB) && strD.charCodeAt(--iE) < 33 );
- return (iE < iB)?-1:iE;
-
- /*for(var i = iE - 1; i >= iB; i--){
- if(_SAXStrings.WHITESPACE.indexOf(strD.charAt(i)) == -1){
- return i;
- }
- }
- return -1;*/
-}
-
-
-_SAXStrings.prototype.replace = function(strD, iB, iE, strF, strR) {
- if((strD == null) || (strD.length == 0)) {
- return "";
- }
- iB = iB || 0;
- iE = iE || strD.length;
-
- return strD.substring(iB, iE).split(strF).join(strR);
-
-};
-
-var SAXStrings = new _SAXStrings();
-
-
-
-/***************************************************************************************************************
-Stack: A simple stack class, used for verifying document structure.
-
- Author: Scott Severtson
-*****************************************************************************************************************/
-
-var Stack = function() {
- this.m_arr = new Array();
-};
-__extend__(Stack.prototype, {
- clear : function() {
- this.m_arr = new Array();
- },
- count : function() {
- return this.m_arr.length;
- },
- destroy : function() {
- this.m_arr = null;
- },
- peek : function() {
- if(this.m_arr.length == 0) {
- return null;
- }
- return this.m_arr[this.m_arr.length - 1];
- },
- pop : function() {
- if(this.m_arr.length == 0) {
- return null;
- }
- var o = this.m_arr[this.m_arr.length - 1];
- this.m_arr.length--;
- return o;
- },
- push : function(o) {
- this.m_arr[this.m_arr.length] = o;
- }
-});
-
-
-/**
-* function: isEmpty
-* Author: mike@idle.org
-* Description: convenience function to identify an empty string
-**/
-function isEmpty(str) {
- return (str==null) || (str.length==0);
-};
-
-
-/**
- * function __escapeXML__
- * author: David Joham djoham@yahoo.com
- * @param str : string - The string to be escaped
- * @return : string - The escaped string
- */
-var escAmpRegEx = /&/g;
-var escLtRegEx = /</g;
-var escGtRegEx = />/g;
-var quotRegEx = /"/g;
-var aposRegEx = /'/g;
-function __escapeXML__(str) {
- str = str.replace(escAmpRegEx, "&amp;").
- replace(escLtRegEx, "&lt;").
- replace(escGtRegEx, "&gt;").
- replace(quotRegEx, "&quot;").
- replace(aposRegEx, "&apos;");
-
- return str;
-};
-
-/**
- * function __unescapeXML__
- * author: David Joham djoham@yahoo.com
- * @param str : string - The string to be unescaped
- * @return : string - The unescaped string
- */
-var unescAmpRegEx = /&amp;/g;
-var unescLtRegEx = /&lt;/g;
-var unescGtRegEx = /&gt;/g;
-var unquotRegEx = /&quot;/g;
-var unaposRegEx = /&apos;/g;
-function __unescapeXML__(str) {
- str = str.replace(unescAmpRegEx, "&").
- replace(unescLtRegEx, "<").
- replace(unescGtRegEx, ">").
- replace(unquotRegEx, "\"").
- replace(unaposRegEx, "'");
-
- return str;
-};
-
-//DOMImplementation
-$debug("Defining DOMImplementation");
-/**
- * @class DOMImplementation - provides a number of methods for performing operations
- * that are independent of any particular instance of the document object model.
- *
- * @author Jon van Noort (jon@webarcana.com.au)
- */
-var DOMImplementation = function() {
- this.preserveWhiteSpace = false; // by default, ignore whitespace
- this.namespaceAware = true; // by default, handle namespaces
- this.errorChecking = true; // by default, test for exceptions
-};
-__extend__(DOMImplementation.prototype,{
- // @param feature : string - The package name of the feature to test.
- // the legal only values are "XML" and "CORE" (case-insensitive).
- // @param version : string - This is the version number of the package
- // name to test. In Level 1, this is the string "1.0".*
- // @return : boolean
- hasFeature : function(feature, version) {
- var ret = false;
- if (feature.toLowerCase() == "xml") {
- ret = (!version || (version == "1.0") || (version == "2.0"));
- }
- else if (feature.toLowerCase() == "core") {
- ret = (!version || (version == "2.0"));
- }
- return ret;
- },
- createDocumentType : function(qname, publicid, systemid){
- return new DOMDocumentType();
- },
- createDocument : function(nsuri, qname, doctype){
- //TODO - this currently returns an empty doc
- //but needs to handle the args
- return new HTMLDocument($implementation);
- },
- translateErrCode : function(code) {
- //convert DOMException Code to human readable error message;
- var msg = "";
-
- switch (code) {
- case DOMException.INDEX_SIZE_ERR : // 1
- msg = "INDEX_SIZE_ERR: Index out of bounds";
- break;
-
- case DOMException.DOMSTRING_SIZE_ERR : // 2
- msg = "DOMSTRING_SIZE_ERR: The resulting string is too long to fit in a DOMString";
- break;
-
- case DOMException.HIERARCHY_REQUEST_ERR : // 3
- msg = "HIERARCHY_REQUEST_ERR: The Node can not be inserted at this location";
- break;
-
- case DOMException.WRONG_DOCUMENT_ERR : // 4
- msg = "WRONG_DOCUMENT_ERR: The source and the destination Documents are not the same";
- break;
-
- case DOMException.INVALID_CHARACTER_ERR : // 5
- msg = "INVALID_CHARACTER_ERR: The string contains an invalid character";
- break;
-
- case DOMException.NO_DATA_ALLOWED_ERR : // 6
- msg = "NO_DATA_ALLOWED_ERR: This Node / NodeList does not support data";
- break;
-
- case DOMException.NO_MODIFICATION_ALLOWED_ERR : // 7
- msg = "NO_MODIFICATION_ALLOWED_ERR: This object cannot be modified";
- break;
-
- case DOMException.NOT_FOUND_ERR : // 8
- msg = "NOT_FOUND_ERR: The item cannot be found";
- break;
-
- case DOMException.NOT_SUPPORTED_ERR : // 9
- msg = "NOT_SUPPORTED_ERR: This implementation does not support function";
- break;
-
- case DOMException.INUSE_ATTRIBUTE_ERR : // 10
- msg = "INUSE_ATTRIBUTE_ERR: The Attribute has already been assigned to another Element";
- break;
-
- // Introduced in DOM Level 2:
- case DOMException.INVALID_STATE_ERR : // 11
- msg = "INVALID_STATE_ERR: The object is no longer usable";
- break;
-
- case DOMException.SYNTAX_ERR : // 12
- msg = "SYNTAX_ERR: Syntax error";
- break;
-
- case DOMException.INVALID_MODIFICATION_ERR : // 13
- msg = "INVALID_MODIFICATION_ERR: Cannot change the type of the object";
- break;
-
- case DOMException.NAMESPACE_ERR : // 14
- msg = "NAMESPACE_ERR: The namespace declaration is incorrect";
- break;
-
- case DOMException.INVALID_ACCESS_ERR : // 15
- msg = "INVALID_ACCESS_ERR: The object does not support this function";
- break;
-
- default :
- msg = "UNKNOWN: Unknown Exception Code ("+ code +")";
- }
-
- return msg;
- }
-});
-
-
-/**
-* Defined 'globally' to this scope. Remember everything is wrapped in a closure so this doesnt show up
-* in the outer most global scope.
-*/
-
-/**
- * process SAX events
- *
- * @author Jon van Noort (jon@webarcana.com.au), David Joham (djoham@yahoo.com) and Scott Severtson
- *
- * @param impl : DOMImplementation
- * @param doc : DOMDocument - the Document to contain the parsed XML string
- * @param p : XMLP - the SAX Parser
- *
- * @return : DOMDocument
- */
-function __parseLoop__(impl, doc, p) {
- var iEvt, iNode, iAttr, strName;
- var iNodeParent = doc;
-
- var el_close_count = 0;
-
- var entitiesList = new Array();
- var textNodesList = new Array();
-
- // if namespaceAware, add default namespace
- if (impl.namespaceAware) {
- var iNS = doc.createNamespace(""); // add the default-default namespace
- iNS.value = "http://www.w3.org/2000/xmlns/";
- doc._namespaces.setNamedItem(iNS);
- }
-
- // loop until SAX parser stops emitting events
- while(true) {
- // get next event
- iEvt = p.next();
-
- if (iEvt == XMLP._ELM_B) { // Begin-Element Event
- var pName = p.getName(); // get the Element name
- pName = trim(pName, true, true); // strip spaces from Element name
- if(pName.toLowerCase() == 'script')
- p.replaceEntities = false;
-
- if (!impl.namespaceAware) {
- iNode = doc.createElement(p.getName()); // create the Element
-
- // add attributes to Element
- for(var i = 0; i < p.getAttributeCount(); i++) {
- strName = p.getAttributeName(i); // get Attribute name
- iAttr = iNode.getAttributeNode(strName); // if Attribute exists, use it
-
- if(!iAttr) {
- iAttr = doc.createAttribute(strName); // otherwise create it
- }
-
- iAttr.value = p.getAttributeValue(i); // set Attribute value
- iNode.setAttributeNode(iAttr); // attach Attribute to Element
- }
- }
- else { // Namespace Aware
- // create element (with empty namespaceURI,
- // resolve after namespace 'attributes' have been parsed)
- iNode = doc.createElementNS("", p.getName());
-
- // duplicate ParentNode's Namespace definitions
- iNode._namespaces = __cloneNamedNodes__(iNodeParent._namespaces, iNode);
-
- // add attributes to Element
- for(var i = 0; i < p.getAttributeCount(); i++) {
- strName = p.getAttributeName(i); // get Attribute name
-
- // if attribute is a namespace declaration
- if (__isNamespaceDeclaration__(strName)) {
- // parse Namespace Declaration
- var namespaceDec = __parseNSName__(strName);
-
- if (strName != "xmlns") {
- iNS = doc.createNamespace(strName); // define namespace
- }
- else {
- iNS = doc.createNamespace(""); // redefine default namespace
- }
- iNS.value = p.getAttributeValue(i); // set value = namespaceURI
-
- iNode._namespaces.setNamedItem(iNS); // attach namespace to namespace collection
- }
- else { // otherwise, it is a normal attribute
- iAttr = iNode.getAttributeNode(strName); // if Attribute exists, use it
-
- if(!iAttr) {
- iAttr = doc.createAttributeNS("", strName); // otherwise create it
- }
-
- iAttr.value = p.getAttributeValue(i); // set Attribute value
- iNode.setAttributeNodeNS(iAttr); // attach Attribute to Element
-
- if (__isIdDeclaration__(strName)) {
- iNode.id = p.getAttributeValue(i); // cache ID for getElementById()
- }
- }
- }
-
- // resolve namespaceURIs for this Element
- if (iNode._namespaces.getNamedItem(iNode.prefix)) {
- iNode.namespaceURI = iNode._namespaces.getNamedItem(iNode.prefix).value;
- }
-
- // for this Element's attributes
- for (var i = 0; i < iNode.attributes.length; i++) {
- if (iNode.attributes.item(i).prefix != "") { // attributes do not have a default namespace
- if (iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix)) {
- iNode.attributes.item(i).namespaceURI = iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix).value;
- }
- }
- }
- }
-
- // if this is the Root Element
- if (iNodeParent.nodeType == DOMNode.DOCUMENT_NODE) {
- iNodeParent.documentElement = iNode; // register this Element as the Document.documentElement
- }
-
- iNodeParent.appendChild(iNode); // attach Element to parentNode
- iNodeParent = iNode; // descend one level of the DOM Tree
- }
-
- else if(iEvt == XMLP._ELM_E) { // End-Element Event
- //handle script tag
- if(iNodeParent.nodeName.toLowerCase() == 'script'){
- p.replaceEntities = true;
- $env.loadLocalScript(iNodeParent, p);
- }
- iNodeParent = iNodeParent.parentNode; // ascend one level of the DOM Tree
-
- }
-
- else if(iEvt == XMLP._ELM_EMP) { // Empty Element Event
- pName = p.getName(); // get the Element name
- pName = trim(pName, true, true); // strip spaces from Element name
-
- if (!impl.namespaceAware) {
- iNode = doc.createElement(pName); // create the Element
-
- // add attributes to Element
- for(var i = 0; i < p.getAttributeCount(); i++) {
- strName = p.getAttributeName(i); // get Attribute name
- iAttr = iNode.getAttributeNode(strName); // if Attribute exists, use it
-
- if(!iAttr) {
- iAttr = doc.createAttribute(strName); // otherwise create it
- }
-
- iAttr.value = p.getAttributeValue(i); // set Attribute value
- iNode.setAttributeNode(iAttr); // attach Attribute to Element
- }
- }
- else { // Namespace Aware
- // create element (with empty namespaceURI,
- // resolve after namespace 'attributes' have been parsed)
- iNode = doc.createElementNS("", p.getName());
-
- // duplicate ParentNode's Namespace definitions
- iNode._namespaces = __cloneNamedNodes__(iNodeParent._namespaces, iNode);
-
- // add attributes to Element
- for(var i = 0; i < p.getAttributeCount(); i++) {
- strName = p.getAttributeName(i); // get Attribute name
-
- // if attribute is a namespace declaration
- if (__isNamespaceDeclaration__(strName)) {
- // parse Namespace Declaration
- var namespaceDec = __parseNSName__(strName);
-
- if (strName != "xmlns") {
- iNS = doc.createNamespace(strName); // define namespace
- }
- else {
- iNS = doc.createNamespace(""); // redefine default namespace
- }
- iNS.value = p.getAttributeValue(i); // set value = namespaceURI
-
- iNode._namespaces.setNamedItem(iNS); // attach namespace to namespace collection
- }
- else { // otherwise, it is a normal attribute
- iAttr = iNode.getAttributeNode(strName); // if Attribute exists, use it
-
- if(!iAttr) {
- iAttr = doc.createAttributeNS("", strName); // otherwise create it
- }
-
- iAttr.value = p.getAttributeValue(i); // set Attribute value
- iNode.setAttributeNodeNS(iAttr); // attach Attribute to Element
-
- if (__isIdDeclaration__(strName)) {
- iNode.id = p.getAttributeValue(i); // cache ID for getElementById()
- }
- }
- }
-
- // resolve namespaceURIs for this Element
- if (iNode._namespaces.getNamedItem(iNode.prefix)) {
- iNode.namespaceURI = iNode._namespaces.getNamedItem(iNode.prefix).value;
- }
-
- // for this Element's attributes
- for (var i = 0; i < iNode.attributes.length; i++) {
- if (iNode.attributes.item(i).prefix != "") { // attributes do not have a default namespace
- if (iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix)) {
- iNode.attributes.item(i).namespaceURI = iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix).value;
- }
- }
- }
- }
-
- // if this is the Root Element
- if (iNodeParent.nodeType == DOMNode.DOCUMENT_NODE) {
- iNodeParent.documentElement = iNode; // register this Element as the Document.documentElement
- }
-
- iNodeParent.appendChild(iNode); // attach Element to parentNode
- }
- else if(iEvt == XMLP._TEXT || iEvt == XMLP._ENTITY) { // TextNode and entity Events
- // get Text content
- var pContent = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
-
- if (!impl.preserveWhiteSpace ) {
- if (trim(pContent, true, true) == "") {
- pContent = ""; //this will cause us not to create the text node below
- }
- }
-
- if (pContent.length > 0) { // ignore empty TextNodes
- var textNode = doc.createTextNode(pContent);
- iNodeParent.appendChild(textNode); // attach TextNode to parentNode
-
- //the sax parser breaks up text nodes when it finds an entity. For
- //example hello&lt;there will fire a text, an entity and another text
- //this sucks for the dom parser because it looks to us in this logic
- //as three text nodes. I fix this by keeping track of the entity nodes
- //and when we're done parsing, calling normalize on their parent to
- //turn the multiple text nodes into one, which is what DOM users expect
- //the code to do this is at the bottom of this function
- if (iEvt == XMLP._ENTITY) {
- entitiesList[entitiesList.length] = textNode;
- }
- else {
- //I can't properly decide how to handle preserve whitespace
- //until the siblings of the text node are built due to
- //the entitiy handling described above. I don't know that this
- //will be all of the text node or not, so trimming is not appropriate
- //at this time. Keep a list of all the text nodes for now
- //and we'll process the preserve whitespace stuff at a later time.
- textNodesList[textNodesList.length] = textNode;
- }
- }
- }
- else if(iEvt == XMLP._PI) { // ProcessingInstruction Event
- // attach ProcessingInstruction to parentNode
- iNodeParent.appendChild(doc.createProcessingInstruction(p.getName(), p.getContent().substring(p.getContentBegin(), p.getContentEnd())));
- }
- else if(iEvt == XMLP._CDATA) { // CDATA Event
- // get CDATA data
- pContent = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
-
- if (!impl.preserveWhiteSpace) {
- pContent = trim(pContent, true, true); // trim whitespace
- pContent.replace(/ +/g, ' '); // collapse multiple spaces to 1 space
- }
-
- if (pContent.length > 0) { // ignore empty CDATANodes
- iNodeParent.appendChild(doc.createCDATASection(pContent)); // attach CDATA to parentNode
- }
- }
- else if(iEvt == XMLP._COMMENT) { // Comment Event
- // get COMMENT data
- var pContent = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
-
- if (!impl.preserveWhiteSpace) {
- pContent = trim(pContent, true, true); // trim whitespace
- pContent.replace(/ +/g, ' '); // collapse multiple spaces to 1 space
- }
-
- if (pContent.length > 0) { // ignore empty CommentNodes
- iNodeParent.appendChild(doc.createComment(pContent)); // attach Comment to parentNode
- }
- }
- else if(iEvt == XMLP._DTD) { // ignore DTD events
- }
- else if(iEvt == XMLP._ERROR) {
- $error("Fatal Error: " + p.getContent() +
- "\nLine: " + p.getLineNumber() +
- "\nColumn: " + p.getColumnNumber() + "\n");
- throw(new DOMException(DOMException.SYNTAX_ERR));
- }
- else if(iEvt == XMLP._NONE) { // no more events
- //steven woods notes that unclosed tags are rejected elsewhere and this check
- //breaks a table patching routine
- /*if (iNodeParent == doc) { // confirm that we have recursed back up to root
- break;
- }
- else {
- throw(new DOMException(DOMException.SYNTAX_ERR)); // one or more Tags were not closed properly
- }*/
- break;
-
- }
- }
-
- //normalize any entities in the DOM to a single textNode
- for (var i = 0; i < entitiesList.length; i++) {
- var entity = entitiesList[i];
- //its possible (if for example two entities were in the
- //same domnode, that the normalize on the first entitiy
- //will remove the parent for the second. Only do normalize
- //if I can find a parent node
- var parentNode = entity.parentNode;
- if (parentNode) {
- parentNode.normalize();
-
- //now do whitespace (if necessary)
- //it was not done for text nodes that have entities
- if(!impl.preserveWhiteSpace) {
- var children = parentNode.childNodes;
- for ( var j = 0; j < children.length; j++) {
- var child = children.item(j);
- if (child.nodeType == DOMNode.TEXT_NODE) {
- var childData = child.data;
- childData.replace(/\s/g, ' ');
- child.data = childData;
- }
- }
- }
- }
- }
-
- //do the preserve whitespace processing on the rest of the text nodes
- //It's possible (due to the processing above) that the node will have been
- //removed from the tree. Only do whitespace checking if parentNode is not null.
- //This may duplicate the whitespace processing for some nodes that had entities in them
- //but there's no way around that
- if (!impl.preserveWhiteSpace) {
- for (var i = 0; i < textNodesList.length; i++) {
- var node = textNodesList[i];
- if (node.parentNode != null) {
- var nodeData = node.data;
- nodeData.replace(/\s/g, ' ');
- node.data = nodeData;
- }
- }
-
- }
-};
-
-
-/**
- * @method DOMImplementation._isNamespaceDeclaration - Return true, if attributeName is a namespace declaration
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param attributeName : string - the attribute name
- * @return : boolean
- */
-function __isNamespaceDeclaration__(attributeName) {
- // test if attributeName is 'xmlns'
- return (attributeName.indexOf('xmlns') > -1);
-};
-
-/**
- * @method DOMImplementation._isIdDeclaration - Return true, if attributeName is an id declaration
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param attributeName : string - the attribute name
- * @return : boolean
- */
-function __isIdDeclaration__(attributeName) {
- // test if attributeName is 'id' (case insensitive)
- return (attributeName.toLowerCase() == 'id');
-};
-
-/**
- * @method DOMImplementation._isValidName - Return true,
- * if name contains no invalid characters
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param name : string - the candidate name
- * @return : boolean
- */
-function __isValidName__(name) {
- // test if name contains only valid characters
- return name.match(re_validName);
-};
-var re_validName = /^[a-zA-Z_:][a-zA-Z0-9\.\-_:]*$/;
-
-/**
- * @method DOMImplementation._isValidString - Return true, if string does not contain any illegal chars
- * All of the characters 0 through 31 and character 127 are nonprinting control characters.
- * With the exception of characters 09, 10, and 13, (Ox09, Ox0A, and Ox0D)
- * Note: different from _isValidName in that ValidStrings may contain spaces
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param name : string - the candidate string
- * @return : boolean
- */
-function __isValidString__(name) {
- // test that string does not contains invalid characters
- return (name.search(re_invalidStringChars) < 0);
-};
-var re_invalidStringChars = /\x01|\x02|\x03|\x04|\x05|\x06|\x07|\x08|\x0B|\x0C|\x0E|\x0F|\x10|\x11|\x12|\x13|\x14|\x15|\x16|\x17|\x18|\x19|\x1A|\x1B|\x1C|\x1D|\x1E|\x1F|\x7F/;
-
-/**
- * @method DOMImplementation._parseNSName - parse the namespace name.
- * if there is no colon, the
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param qualifiedName : string - The qualified name
- * @return : NSName - [
- .prefix : string - The prefix part of the qname
- .namespaceName : string - The namespaceURI part of the qname
- ]
- */
-function __parseNSName__(qualifiedName) {
- var resultNSName = new Object();
-
- resultNSName.prefix = qualifiedName; // unless the qname has a namespaceName, the prefix is the entire String
- resultNSName.namespaceName = "";
-
- // split on ':'
- var delimPos = qualifiedName.indexOf(':');
- if (delimPos > -1) {
- // get prefix
- resultNSName.prefix = qualifiedName.substring(0, delimPos);
- // get namespaceName
- resultNSName.namespaceName = qualifiedName.substring(delimPos +1, qualifiedName.length);
- }
- return resultNSName;
-};
-
-/**
- * @method DOMImplementation._parseQName - parse the qualified name
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param qualifiedName : string - The qualified name
- * @return : QName
- */
-function __parseQName__(qualifiedName) {
- var resultQName = new Object();
-
- resultQName.localName = qualifiedName; // unless the qname has a prefix, the local name is the entire String
- resultQName.prefix = "";
-
- // split on ':'
- var delimPos = qualifiedName.indexOf(':');
-
- if (delimPos > -1) {
- // get prefix
- resultQName.prefix = qualifiedName.substring(0, delimPos);
-
- // get localName
- resultQName.localName = qualifiedName.substring(delimPos +1, qualifiedName.length);
- }
-
- return resultQName;
-};
-
-$debug("Initializing document.implementation");
-var $implementation = new DOMImplementation();
-$implementation.namespaceAware = false;
-$implementation.errorChecking = false;$debug("Defining Document");
-/**
- * @class DOMDocument - The Document interface represents the entire HTML or XML document.
- * Conceptually, it is the root of the document tree, and provides the primary access to the document's data.
- *
- * @extends DOMNode
- * @author Jon van Noort (jon@webarcana.com.au)
- * @param implementation : DOMImplementation - the creator Implementation
- */
-var DOMDocument = function(implementation) {
- //$log("\tcreating dom document");
- this.DOMNode = DOMNode;
- this.DOMNode(this);
-
- this.doctype = null; // The Document Type Declaration (see DocumentType) associated with this document
- this.implementation = implementation; // The DOMImplementation object that handles this document.
- this.documentElement = null; // This is a convenience attribute that allows direct access to the child node that is the root element of the document
-
- this.nodeName = "#document";
- this._id = 0;
- this._lastId = 0;
- this._parseComplete = false; // initially false, set to true by parser
- this._url = "";
-
- this.ownerDocument = null;
-
- this._performingImportNodeOperation = false;
- //$log("\tfinished creating dom document " + this);
-};
-DOMDocument.prototype = new DOMNode;
-__extend__(DOMDocument.prototype, {
- addEventListener : function(){ window.addEventListener.apply(this, arguments); },
- removeEventListener : function(){ window.removeEventListener.apply(this, arguments); },
- attachEvent : function(){ window.addEventListener.apply(this, arguments); },
- detachEvent : function(){ window.removeEventListener.apply(this, arguments); },
- dispatchEvent : function(){ window.dispatchEvent.apply(this, arguments); },
-
- get styleSheets(){
- return [];/*TODO*/
- },
- get all(){
- return this.getElementsByTagName("*");
- },
- loadXML : function(xmlStr) {
- // create SAX Parser
- var parser = new XMLP(xmlStr+'');
-
- // create DOM Document
- var doc = new HTMLDocument(this.implementation);
- if(this === $document){
- $debug("Setting internal window.document");
- $document = doc;
- }
- // populate Document with Parsed Nodes
- try {
- __parseLoop__(this.implementation, doc, parser);
- //doc = html2dom(xmlStr+"", doc);
- //$log("\nhtml2xml\n" + doc.xml);
- } catch (e) {
- //$error(this.implementation.translateErrCode(e.code))
- $error(e);
- }
-
- // set parseComplete flag, (Some validation Rules are relaxed if this is false)
- doc._parseComplete = true;
- return doc;
- },
- load: function(url){
- $debug("Loading url into DOM Document: "+ url + " - (Asynch? "+$w.document.async+")");
- var scripts, _this = this;
- var xhr = new XMLHttpRequest();
- xhr.open("GET", url, $w.document.async);
- xhr.onreadystatechange = function(){
- try{
- _this.loadXML(xhr.responseText);
- }catch(e){
- $error("Error Parsing XML - ",e);
- _this.loadXML(
- "<html><head></head><body>"+
- "<h1>Parse Error</h1>"+
- "<p>"+e.toString()+"</p>"+
- "</body></html>");
- }
- _this._url = url;
-
- $info("Sucessfully loaded document at "+url);
- var event = document.createEvent();
- event.initEvent("load");
- $w.dispatchEvent( event );
- };
- xhr.send();
- },
- createEvent : function(eventType){
- var event;
- if(eventType === "UIEvents"){ event = new UIEvent();}
- else if(eventType === "MouseEvents"){ event = new MouseEvent();}
- else{ event = new Event(); }
- return event;
- },
- createExpression : function(xpath, nsuriMap){
- return new XPathExpression(xpath, nsuriMap);
- },
- createElement : function(tagName) {
- //$debug("DOMDocument.createElement( "+tagName+" )");
- // throw Exception if the tagName string contains an illegal character
- if (__ownerDocument__(this).implementation.errorChecking
- && (!__isValidName__(tagName))) {
- throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
- }
-
- // create DOMElement specifying 'this' as ownerDocument
- var node = new DOMElement(this);
-
- // assign values to properties (and aliases)
- node.tagName = tagName;
-
- return node;
- },
- createDocumentFragment : function() {
- // create DOMDocumentFragment specifying 'this' as ownerDocument
- var node = new DOMDocumentFragment(this);
- return node;
- },
- createTextNode: function(data) {
- // create DOMText specifying 'this' as ownerDocument
- var node = new DOMText(this);
-
- // assign values to properties (and aliases)
- node.data = data;
-
- return node;
- },
- createComment : function(data) {
- // create DOMComment specifying 'this' as ownerDocument
- var node = new DOMComment(this);
-
- // assign values to properties (and aliases)
- node.data = data;
-
- return node;
- },
- createCDATASection : function(data) {
- // create DOMCDATASection specifying 'this' as ownerDocument
- var node = new DOMCDATASection(this);
-
- // assign values to properties (and aliases)
- node.data = data;
-
- return node;
- },
- createProcessingInstruction : function(target, data) {
- // throw Exception if the target string contains an illegal character
- //$log("DOMDocument.createProcessingInstruction( "+target+" )");
- if (__ownerDocument__(this).implementation.errorChecking
- && (!__isValidName__(target))) {
- throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
- }
-
- // create DOMProcessingInstruction specifying 'this' as ownerDocument
- var node = new DOMProcessingInstruction(this);
-
- // assign values to properties (and aliases)
- node.target = target;
- node.data = data;
-
- return node;
- },
- createAttribute : function(name) {
- // throw Exception if the name string contains an illegal character
- //$log("DOMDocument.createAttribute( "+target+" )");
- if (__ownerDocument__(this).implementation.errorChecking
- && (!__isValidName__(name))) {
- throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
- }
-
- // create DOMAttr specifying 'this' as ownerDocument
- var node = new DOMAttr(this);
-
- // assign values to properties (and aliases)
- node.name = name;
-
- return node;
- },
- createElementNS : function(namespaceURI, qualifiedName) {
- //$log("DOMDocument.createElement( "+namespaceURI+", "+qualifiedName+" )");
- // test for exceptions
- if (__ownerDocument__(this).implementation.errorChecking) {
- // throw Exception if the Namespace is invalid
- if (!__isValidNamespace__(this, namespaceURI, qualifiedName)) {
- throw(new DOMException(DOMException.NAMESPACE_ERR));
- }
-
- // throw Exception if the qualifiedName string contains an illegal character
- if (!__isValidName__(qualifiedName)) {
- throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
- }
- }
-
- // create DOMElement specifying 'this' as ownerDocument
- var node = new DOMElement(this);
- var qname = __parseQName__(qualifiedName);
-
- // assign values to properties (and aliases)
- node.namespaceURI = namespaceURI;
- node.prefix = qname.prefix;
- node.localName = qname.localName;
- node.tagName = qualifiedName;
-
- return node;
- },
- createAttributeNS : function(namespaceURI, qualifiedName) {
- // test for exceptions
- if (__ownerDocument__(this).implementation.errorChecking) {
- // throw Exception if the Namespace is invalid
- if (!__isValidNamespace__(this, namespaceURI, qualifiedName, true)) {
- throw(new DOMException(DOMException.NAMESPACE_ERR));
- }
-
- // throw Exception if the qualifiedName string contains an illegal character
- if (!__isValidName__(qualifiedName)) {
- throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
- }
- }
-
- // create DOMAttr specifying 'this' as ownerDocument
- var node = new DOMAttr(this);
- var qname = __parseQName__(qualifiedName);
-
- // assign values to properties (and aliases)
- node.namespaceURI = namespaceURI;
- node.prefix = qname.prefix;
- node.localName = qname.localName;
- node.name = qualifiedName;
- node.nodeValue = "";
-
- return node;
- },
- createNamespace : function(qualifiedName) {
- // create DOMNamespace specifying 'this' as ownerDocument
- var node = new DOMNamespace(this);
- var qname = __parseQName__(qualifiedName);
-
- // assign values to properties (and aliases)
- node.prefix = qname.prefix;
- node.localName = qname.localName;
- node.name = qualifiedName;
- node.nodeValue = "";
-
- return node;
- },
- /** from David Flanagan's JavaScript - The Definitive Guide
- *
- * @param {String} xpathText
- * The string representing the XPath expression to evaluate.
- * @param {Node} contextNode
- * The node in this document against which the expression is to
- * be evaluated.
- * @param {Function} nsuriMapper
- * A function that will map from namespace prefix to to a full
- * namespace URL or null if no such mapping is required.
- * @param {Number} resultType
- * Specifies the type of object expected as a result, using
- * XPath conversions to coerce the result. Possible values for
- * type are the constrainsts defined by the XPathResult object.
- * (null if not required)
- * @param {XPathResult} result
- * An XPathResult object to be reused or null
- * if you want a new XPathResult object to be created.
- * @returns {XPathResult} result
- * A XPathResult object representing the evaluation of the
- * expression against the given context node.
- * @throws {Exception} e
- * This method may throw an exception if the xpathText contains
- * a syntax error, if the expression cannot be converted to the
- * desired resultType, if the expression contains namespaces
- * that nsuriMapper cannot resolve, or if contextNode is of the
- * wrong type or is not assosciated with this document.
- * @seealso
- * Document.evaluate
- */
- /*evaluate: function(xpathText, contextNode, nsuriMapper, resultType, result){
- return new XPathExpression().evaluate();
- },*/
- getElementById : function(elementId) {
- var retNode = null,
- node;
- // loop through all Elements in the 'all' collection
- var all = this.all;
- for (var i=0; i < all.length; i++) {
- node = all[i];
- // if id matches & node is alive (ie, connected (in)directly to the documentElement)
- if (node.id == elementId) {
- if((__ownerDocument__(node).documentElement._id == this.documentElement._id)){
- retNode = node;
- //$log("Found node with id = " + node.id);
- break;
- }
- }
- }
-
- //if(retNode == null){$log("Couldn't find id " + elementId);}
- return retNode;
- },
- normalizeDocument: function(){
- this.documentElement.normalize();
- },
- get nodeType(){
- return DOMNode.DOCUMENT_NODE;
- },
- get xml(){
- //$log("Serializing " + this);
- return this.documentElement.xml;
- },
- toString: function(){
- return "Document" + (typeof this._url == "string" ? ": " + this._url : "");
- },
- get defaultView(){ //TODO: why isnt this just 'return $w;'?
- return { getComputedStyle: function(elem){
- return { getPropertyValue: function(prop){
- prop = prop.replace(/\-(\w)/g,function(m,c){ return c.toUpperCase(); });
- var val = elem.style[prop];
- if ( prop == "opacity" && val == "" ){ val = "1"; }return val;
- }};
- }};
- },
- _genId : function() {
- this._lastId += 1; // increment lastId (to generate unique id)
- return this._lastId;
- }
-});
-
-
-var __isValidNamespace__ = function(doc, namespaceURI, qualifiedName, isAttribute) {
-
- if (doc._performingImportNodeOperation == true) {
- //we're doing an importNode operation (or a cloneNode) - in both cases, there
- //is no need to perform any namespace checking since the nodes have to have been valid
- //to have gotten into the DOM in the first place
- return true;
- }
-
- var valid = true;
- // parse QName
- var qName = __parseQName__(qualifiedName);
-
-
- //only check for namespaces if we're finished parsing
- if (this._parseComplete == true) {
-
- // if the qualifiedName is malformed
- if (qName.localName.indexOf(":") > -1 ){
- valid = false;
- }
-
- if ((valid) && (!isAttribute)) {
- // if the namespaceURI is not null
- if (!namespaceURI) {
- valid = false;
- }
- }
-
- // if the qualifiedName has a prefix
- if ((valid) && (qName.prefix == "")) {
- valid = false;
- }
-
- }
-
- // if the qualifiedName has a prefix that is "xml" and the namespaceURI is
- // different from "http://www.w3.org/XML/1998/namespace" [Namespaces].
- if ((valid) && (qName.prefix == "xml") && (namespaceURI != "http://www.w3.org/XML/1998/namespace")) {
- valid = false;
- }
-
- return valid;
-};
-
-$w.Document = DOMDocument;
-/*
-* parser.js
-*/
-/*
- * HTML Parser By John Resig (ejohn.org)
- * Original code by Erik Arvidsson, Mozilla Public License
- * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
- *
- * // Use like so:
- * HTMLParser(htmlString, {
- * start: function(tag, attrs, unary) {},
- * end: function(tag) {},
- * chars: function(text) {},
- * comment: function(text) {}
- * });
- *
- * // or to get an XML string:
- * HTMLtoXML(htmlString);
- *
- * // or to get an XML DOM Document
- * HTMLtoDOM(htmlString);
- *
- * // or to inject into an existing document/DOM node
- * HTMLtoDOM(htmlString, document);
- * HTMLtoDOM(htmlString, document.body);
- *
- */
- var html2dom, html2xml;
-
-(function(){
-
- // Regular Expressions for parsing tags and attributes
- var startTag = /^<([\w\:\-]+)((?:\s+[\w\:\-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
- endTag = /^<\/([\w\:\-]+)[^>]*>/,
- attr = /([\w\:\-]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
- // Empty Elements - HTML 4.01
- var empty = makeMap("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed");
-
- // Block Elements - HTML 4.01
- var block = makeMap("address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul");
-
- // Inline Elements - HTML 4.01
- var inline = makeMap("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var");
-
- // Elements that you can, intentionally, leave open
- // (and which close themselves)
- var closeSelf = makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");
-
- // Attributes that have their values filled in disabled="disabled"
- var fillAttrs = makeMap("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected");
-
- // Special Elements (can contain anything)
- var special = makeMap("script,style");
-
- var HTMLParser = function( html, handler ) {
- var index, chars, match, stack = [], last = html;
- stack.last = function(){
- return this[ this.length - 1 ];
- };
-
- while ( html ) {
- //$log("HTMLParser: chunking... ");
- chars = true;
-
- // Make sure we're not in a script or style element
- if ( !stack.last() || !special[ stack.last() ] ) {
-
- //$log("HTMLParser: ... ");
- // Comment
- if ( html.indexOf("<!--") === 0 ) {
- //$log("HTMLParser: comment ");
- index = html.indexOf("-->");
-
- if ( index >= 0 ) {
- if ( handler.comment )
- handler.comment( html.substring( 4, index ) );
- html = html.substring( index + 3 );
- chars = false;
- }
-
- // end tag
- } else if ( html.indexOf("</") === 0 ) {
- //$log("HTMLParser: endtag ");
- match = html.match( endTag );
-
- if ( match ) {
- //$log("HTMLParser: endtag match : "+match[0]);
- html = html.substring( match[0].length );
- match[0].replace( endTag, parseEndTag );
- chars = false;
- }
-
- // start tag
- } else if ( html.indexOf("<") === 0 ) {
- //$log("HTMLParser: starttag ");
- match = html.match( startTag );
-
- if ( match ) {
- //$log("HTMLParser: starttag match : "+match[0]);
- html = html.substring( match[0].length );
- match[0].replace( startTag, parseStartTag );
- chars = false;
- }
- }
-
- if ( chars ) {
- //$log("HTMLParser: other ");
- index = html.indexOf("<");
- var text = index < 0 ? html : html.substring( 0, index );
- html = index < 0 ? "" : html.substring( index );
- if ( handler.chars ){
- //$log("HTMLParser: chars " + text);
- handler.chars( text );
- }
- }
- } else {
- //$log("HTMLParser: special ");
- html = html.replace(new RegExp("(.*)<\/" + stack.last() + "[^>]*>"), function(all, text){
- text = text.replace(/<!--(.*?)-->/g, "$1").
- replace(/<!\[CDATA\[(.*?)]]>/g, "$1");
- if ( handler.chars ){
- //$log("HTMLParser: special chars " + text);
- handler.chars( text );
- }
- return "";
- });
- parseEndTag( "", stack.last() );
- }
- if ( html == last ){throw "Parse Error: " + html;}
- last = html;
- }
-
- // Clean up any remaining tags
- parseEndTag();
-
- function parseStartTag( tag, tagName, rest, unary ) {
- if ( block[ tagName ] ) {
- while ( stack.last() && inline[ stack.last() ] ) {
- parseEndTag( "", stack.last() );
- }
- }
-
- if ( closeSelf[ tagName ] && stack.last() == tagName ) {
- parseEndTag( "", tagName );
- }
-
- unary = empty[ tagName ] || !!unary;
-
- if ( !unary )
- stack.push( tagName );
-
- if ( handler.start ) {
- var attrs = [];
-
- rest.replace(attr, function(match, name) {
- var value = arguments[2] ? arguments[2] :
- arguments[3] ? arguments[3] :
- arguments[4] ? arguments[4] :
- fillAttrs[name] ? name : "";
-
- attrs.push({
- name: name,
- value: value,
- escaped: value.replace(/(^|[^\\])"/g, '$1\\\"') //"
- });
- });
-
- if ( handler.start ){
- //$log("unary ? : "+unary);
- handler.start( tagName, attrs, unary );
- }
- }
- }
-
- function parseEndTag( tag, tagName ) {
- var pos;
- // If no tag name is provided, clean shop
- if ( !tagName ){
- pos = 0;
- }else{
- // Find the closest opened tag of the same type
- for ( pos = stack.length - 1; pos >= 0; pos-- ){
- //$log("parseEndTag : "+stack[ pos ] );
- if ( stack[ pos ] == tagName ){
- break;
- }
- }
- }
- if ( pos >= 0 ) {
- // Close all the open elements, up the stack
- for ( var i = stack.length - 1; i >= pos; i-- ){
- if ( handler.end ){
- //$log("end : "+stack[ i ] );
- handler.end( stack[ i ] );
- }
- }
- // Remove the open elements from the stack
- //$log("setting stack length : " + stack.length + " -> " +pos );
- stack.length = pos;
- }
- }
- };
-
- html2xml = function( html ) {
- var results = "";
-
- HTMLParser(html, {
- start: function( tag, attrs, unary ) {
- results += "<" + tag;
-
- for ( var i = 0; i < attrs.length; i++ )
- results += " " + attrs[i].name + '="' + attrs[i].escaped + '"';
-
- results += (unary ? "/" : "") + ">";
- },
- end: function( tag ) {
- results += "</" + tag + ">";
- },
- chars: function( text ) {
- results += text;
- },
- comment: function( text ) {
- results += "<!--" + text + "-->";
- }
- });
-
- return results;
- };
-
- html2dom = function( html, doc ) {
- // There can be only one of these elements
- var one = makeMap("html,head,body,title");
-
- // Enforce a structure for the document
- /*var structure = {
- link: "head",
- base: "head"
- };*/
-
- if ( !doc ) {
- if ( typeof DOMDocument != "undefined" ){
- doc = new DOMDocument();
- }else if ( typeof document != "undefined" && document.implementation && document.implementation.createDocument ){
- doc = document.implementation.createDocument("", "", null);
- }else if ( typeof ActiveX != "undefined" ){
- doc = new ActiveXObject("Msxml.DOMDocument");
- }
- } else {
- doc = doc.ownerDocument ||
- doc.getOwnerDocument && doc.getOwnerDocument() ||
- doc;
- }
-
- var elems = [],
- documentElement = doc.documentElement ||
- doc.getDocumentElement && doc.getDocumentElement();
-
- // If we're dealing with an empty document then we
- // need to pre-populate it with the HTML document structure
- /*if ( !documentElement && doc.createElement ) (function(){
- //$log("HTMLtoDOM: adding structure... ");
- var html = doc.createElement("html");
- var head = doc.createElement("head");
- head.appendChild( doc.createElement("title") );
- html.appendChild( head );
- html.appendChild( doc.createElement("body") );
- doc.appendChild( html );
- doc.documentElement = html;
- })();*/
-
- // Find all the unique elements
- /*if ( doc.getElementsByTagName ){
- for ( var i in one ){
- one[ i ] = doc.getElementsByTagName( i )[0];
- }
- }*/
-
- // If we're working with a document, inject contents into
- // the body element
- var curParentNode;// = one.body;
-
- //$log("HTMLtoDOM: Parsing... ");
- HTMLParser( html, {
- start: function( tagName, attrs, unary ) {
-
- var elem;
- //$log("HTMLtoDOM: createElement... " + tagName);
- elem = doc.createElement( tagName );
-
-
- for ( var attr in attrs ){
- //$log("HTMLtoDOM: setAttribute... " + attrs[ attr ].name);
- elem.setAttribute( attrs[ attr ].name, attrs[ attr ].value );
- }
-
- if ( !doc.documentElement ){
- //$log("HTMLtoDOM: documentElement... " + elem.nodeName);
- doc.documentElement = elem;
- doc.appendChild( elem );
- }
-
- else if ( curParentNode && curParentNode.appendChild ){
- //$log("HTMLtoDOM: curParentNode.appendChild... " + curParentNode.nodeName + " -> " +elem.nodeName);
- curParentNode.appendChild( elem );
- }
-
- if ( !unary ) {
- //$log("start : push into elems[] " + tagName);
- elems.push( elem );
- curParentNode = elem;
- }
- },
- end: function( tag ) {
- //$log(tag + " : elems.lengths : "+elems.length);
- elems.length -= 1;
-
- // Init the new parentNode
- curParentNode = elems[ elems.length - 1 ];
-
- },
- chars: function( text ) {
- curParentNode.appendChild( doc.createTextNode( text ) );
- },
- comment: function( text ) {
- curParentNode.appendChild( doc.createComment( text ) );
- }
- });
-
- //$log("HTMLtoDOM: doc... " + doc);
- return doc;
- };
-
- function makeMap(str){
- var obj = {}, items = str.split(",");
- for ( var i = 0; i < items.length; i++ )
- obj[ items[i] ] = true;
- return obj;
- };
-
-})( );
-$debug("Defining HTMLDocument");
-/*
-* HTMLDocument - DOM Level 2
-*/
-/**
- * @class HTMLDocument - The Document interface represents the entire HTML or XML document.
- * Conceptually, it is the root of the document tree, and provides the primary access to the document's data.
- *
- * @extends DOMDocument
- */
-var HTMLDocument = function(implementation) {
- this.DOMDocument = DOMDocument;
- this.DOMDocument(implementation);
-
- this.title = "";
- this._refferer = "";
- this._domain;
- this._open = false;
-};
-HTMLDocument.prototype = new DOMDocument;
-__extend__(HTMLDocument.prototype, {
- createElement: function(tagName){
- // throw Exception if the tagName string contains an illegal character
- if (__ownerDocument__(this).implementation.errorChecking &&
- (!__isValidName__(tagName))) {
- throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
- }
- tagName = tagName.toUpperCase();
- // create DOMElement specifying 'this' as ownerDocument
- //This is an html document so we need to use explicit interfaces per the
- if( tagName.match(/^A$/)) {node = new HTMLAnchorElement(this);}
- else if(tagName.match(/AREA/)) {node = new HTMLAreaElement(this);}
- else if(tagName.match(/BASE/)) {node = new HTMLBaseElement(this);}
- else if(tagName.match(/BLOCKQUOTE|Q/)) {node = new HTMLQuoteElement(this);}
- else if(tagName.match(/BODY/)) {node = new HTMLElement(this);}
- else if(tagName.match(/BR/)) {node = new HTMLElement(this);}
- else if(tagName.match(/BUTTON/)) {node = new HTMLButtonElement(this);}
- else if(tagName.match(/CAPTION/)) {node = new HTMLElement(this);}
- else if(tagName.match(/COL|COLGROUP/)) {node = new HTMLTableColElement(this);}
- else if(tagName.match(/DEL|INS/)) {node = new HTMLModElement(this);}
- else if(tagName.match(/DIV/)) {node = new HTMLElement(this);}
- else if(tagName.match(/DL/)) {node = new HTMLElement(this);}
- else if(tagName.match(/FIELDSET/)) {node = new HTMLFieldSetElement(this);}
- else if(tagName.match(/FORM/)) {node = new HTMLFormElement(this);}
- else if(tagName.match(/^FRAME$/)) {node = new HTMLFrameElement(this);}
- else if(tagName.match(/FRAMESET/)) {node = new HTMLFrameSetElement(this);}
- else if(tagName.match(/H1|H2|H3|H4|H5|H6/)) {node = new HTMLElement(this);}
- else if(tagName.match(/HEAD/)) {node = new HTMLHeadElement(this);}
- else if(tagName.match(/HR/)) {node = new HTMLElement(this);}
- else if(tagName.match(/HTML/)) {node = new HTMLElement(this);}
- else if(tagName.match(/IFRAME/)) {node = new HTMLIFrameElement(this);}
- else if(tagName.match(/IMG/)) {node = new HTMLImageElement(this);}
- else if(tagName.match(/INPUT/)) {node = new HTMLInputElement(this);}
- else if(tagName.match(/LABEL/)) {node = new HTMLLabelElement(this);}
- else if(tagName.match(/LEGEND/)) {node = new HTMLLegendElement(this);}
- else if(tagName.match(/^LI$/)) {node = new HTMLElement(this);}
- else if(tagName.match(/LINK/)) {node = new HTMLLinkElement(this);}
- else if(tagName.match(/MAP/)) {node = new HTMLMapElement(this);}
- else if(tagName.match(/META/)) {node = new HTMLMetaElement(this);}
- else if(tagName.match(/OBJECT/)) {node = new HTMLObjectElement(this);}
- else if(tagName.match(/OL/)) {node = new HTMLElement(this);}
- else if(tagName.match(/OPTGROUP/)) {node = new HTMLOptGroupElement(this);}
- else if(tagName.match(/OPTION/)) {node = new HTMLOptionElement(this);;}
- else if(tagName.match(/^P$/)) {node = new HTMLElement(this);}
- else if(tagName.match(/PARAM/)) {node = new HTMLParamElement(this);}
- else if(tagName.match(/PRE/)) {node = new HTMLElement(this);}
- else if(tagName.match(/SCRIPT/)) {node = new HTMLScriptElement(this);}
- else if(tagName.match(/SELECT/)) {node = new HTMLSelectElement(this);}
- else if(tagName.match(/STYLE/)) {node = new HTMLStyleElement(this);}
- else if(tagName.match(/TABLE/)) {node = new HTMLTableElement(this);}
- else if(tagName.match(/TBODY|TFOOT|THEAD/)) {node = new HTMLSectionElement(this);}
- else if(tagName.match(/TD|TH/)) {node = new HTMLTableCellElement(this);}
- else if(tagName.match(/TEXTAREA/)) {node = new HTMLElement(this);}
- else if(tagName.match(/TITLE/)) {node = new HTMLElement(this);}
- else if(tagName.match(/TR/)) {node = new HTMLTableRowElement(this);}
- else if(tagName.match(/UL/)) {node = new HTMLElement(this);}
- else{
- node = new HTMLElement(this);
- }
-
- // assign values to properties (and aliases)
- node.tagName = tagName;
- return node;
- },
- get anchors(){
- return new HTMLCollection(this.getElementsByTagName('a'), 'Anchor');
-
- },
- get applets(){
- return new HTMLCollection(this.getElementsByTagName('applet'), 'Applet');
-
- },
- get body(){
- var nodelist = this.getElementsByTagName('body');
- return nodelist.item(0);
-
- },
- set body(html){
- return this.replaceNode(this.body,html);
-
- },
- //set/get cookie see cookie.js
- get domain(){
- return this._domain||window.location.domain;
-
- },
- set domain(){
- /* TODO - requires a bit of thought to enforce domain restrictions */
- return;
-
- },
- get forms(){
- return new HTMLCollection(this.getElementsByTagName('form'), 'Form');
- },
- get images(){
- return new HTMLCollection(this.getElementsByTagName('img'), 'Image');
-
- },
- get lastModified(){
- /* TODO */
- return this._lastModified;
-
- },
- get links(){
- return new HTMLCollection(this.getElementsByTagName('a'), 'Link');
-
- },
- get location(){
- return $w.location
- },
- get referrer(){
- /* TODO */
- return this._refferer;
-
- },
- get URL(){
- /* TODO*/
- return this._url;
-
- },
- close : function(){
- /* TODO */
- this._open = false;
- },
- getElementsByName : function(name){
- //returns a real Array + the DOMNodeList
- var retNodes = __extend__([],new DOMNodeList(this, this.documentElement)),
- node;
- // loop through all Elements in the 'all' collection
- var all = this.all;
- for (var i=0; i < all.length; i++) {
- node = all[i];
- if (node.nodeType == DOMNode.ELEMENT_NODE && node.getAttribute('name') == name) {
- retNodes.push(node);
- }
- }
- return retNodes;
- },
- open : function(){
- /* TODO */
- this._open = true;
- },
- write: function(htmlstring){
- /* TODO */
- return;
-
- },
- writeln: function(htmlstring){
- this.write(htmlstring+'\n');
- },
- toString: function(){
- return "Document" + (typeof this._url == "string" ? ": " + this._url : "");
- },
- get innerHTML(){
- return this.documentElement.outerHTML;
-
- },
- get __html__(){
- return true;
-
- }
-});
-
-$w.HTMLDocument = HTMLDocument;
-$debug("Defining HTMLElement");
-/*
-* HTMLElement - DOM Level 2
-*/
-var HTMLElement = function(ownerDocument) {
- this.DOMElement = DOMElement;
- this.DOMElement(ownerDocument);
-
- this.$css2props = null;
-};
-HTMLElement.prototype = new DOMElement;
-__extend__(HTMLElement.prototype, {
- get className() {
- return this.getAttribute("class")||"";
-
- },
- set className(val) {
- return this.setAttribute("class",trim(val));
-
- },
- get dir() {
- return this.getAttribute("dir")||"ltr";
-
- },
- set dir(val) {
- return this.setAttribute("dir",val);
-
- },
- get id(){
- return this.getAttribute('id')||'';
-
- },
- set id(id){
- this.setAttribute('id', id);
-
- },
- get innerHTML(){
- return this.childNodes.xml;
-
- },
- set innerHTML(html){
- //$debug("htmlElement.innerHTML("+html+")");
- //Should be replaced with HTMLPARSER usage
- var doc = new DOMParser().
- parseFromString('<div>'+html+'</div>');
- var parent = doc.documentElement;
- while(this.firstChild != null){
- this.removeChild( this.firstChild );
- }
- var importedNode;
- while(parent.firstChild != null){
- importedNode = this.importNode(
- parent.removeChild( parent.firstChild ), true);
- this.appendChild( importedNode );
- }
- //Mark for garbage collection
- doc = null;
- },
- get lang() {
- return this.getAttribute("lang")||"";
-
- },
- set lang(val) {
- return this.setAttribute("lang",val);
-
- },
- get offsetHeight(){
- return Number(this.style["height"].replace("px",""));
- },
- get offsetWidth(){
- return Number(this.style["width"].replace("px",""));
- },
- offsetLeft: 0,
- offsetRight: 0,
- get offsetParent(){
- /* TODO */
- return;
- },
- set offsetParent(element){
- /* TODO */
- return;
- },
- scrollHeight: 0,
- scrollWidth: 0,
- scrollLeft: 0,
- scrollRight: 0,
- get style(){
- if(this.$css2props === null){
- this.$css2props = new CSS2Properties({
- cssText:this.getAttribute("style")
- });
- }
- return this.$css2props
- },
- get title() {
- return this.getAttribute("title")||"";
-
- },
- set title(val) {
- return this.setAttribute("title",val);
-
- },
- //Not in the specs but I'll leave it here for now.
- get outerHTML(){
- return this.xml;
-
- },
- scrollIntoView: function(){
- /*TODO*/
- return;
-
- },
- onclick: function(event){
- __eval__(this.getAttribute('onclick')||'')
- },
- ondblclick: function(event){
- __eval__(this.getAttribute('ondblclick')||'');
- },
- onkeydown: function(event){
- __eval__(this.getAttribute('onkeydown')||'');
- },
- onkeypress: function(event){
- __eval__(this.getAttribute('onkeypress')||'');
- },
- onkeyup: function(event){
- __eval__(this.getAttribute('onkeyup')||'');
- },
- onmousedown: function(event){
- __eval__(this.getAttribute('onmousedown')||'');
- },
- onmousemove: function(event){
- __eval__(this.getAttribute('onmousemove')||'');
- },
- onmouseout: function(event){
- __eval__(this.getAttribute('onmouseout')||'');
- },
- onmouseover: function(event){
- __eval__(this.getAttribute('onmouseover')||'');
- },
- onmouseup: function(event){
- __eval__(this.getAttribute('onmouseup')||'');
- }
-});
-
-var __eval__ = function(script){
- try{
- eval(script);
- }catch(e){
- $error(e);
- }
-};
-
-var __registerEventAttrs__ = function(elm){
- if(elm.hasAttribute('onclick')){
- elm.addEventListener('click', elm.onclick );
- }
- if(elm.hasAttribute('ondblclick')){
- elm.addEventListener('dblclick', elm.onclick );
- }
- if(elm.hasAttribute('onkeydown')){
- elm.addEventListener('keydown', elm.onclick );
- }
- if(elm.hasAttribute('onkeypress')){
- elm.addEventListener('keypress', elm.onclick );
- }
- if(elm.hasAttribute('onkeyup')){
- elm.addEventListener('keyup', elm.onclick );
- }
- if(elm.hasAttribute('onmousedown')){
- elm.addEventListener('mousedown', elm.onclick );
- }
- if(elm.hasAttribute('onmousemove')){
- elm.addEventListener('mousemove', elm.onclick );
- }
- if(elm.hasAttribute('onmouseout')){
- elm.addEventListener('mouseout', elm.onclick );
- }
- if(elm.hasAttribute('onmouseover')){
- elm.addEventListener('mouseover', elm.onclick );
- }
- if(elm.hasAttribute('onmouseup')){
- elm.addEventListener('mouseup', elm.onclick );
- }
- return elm;
-};
-
-var __click__ = function(element){
- var event = new Event({
- target:element,
- currentTarget:element
- });
- event.initEvent("click");
- element.dispatchEvent(event);
-};
-var __submit__ = function(element){
- var event = new Event({
- target:element,
- currentTarget:element
- });
- event.initEvent("submit");
- element.dispatchEvent(event);
-};
-var __focus__ = function(element){
- var event = new Event({
- target:element,
- currentTarget:element
- });
- event.initEvent("focus");
- element.dispatchEvent(event);
-};
-var __blur__ = function(element){
- var event = new Event({
- target:element,
- currentTarget:element
- });
- event.initEvent("blur");
- element.dispatchEvent(event);
-};
-
-$w.HTMLElement = HTMLElement;
-$debug("Defining HTMLCollection");
-/*
-* HTMLCollection - DOM Level 2
-* Implementation Provided by Steven Wood
-*/
-var HTMLCollection = function(nodelist, type){
-
- __setArray__(this, []);
- for (var i=0; i<nodelist.length; i++) {
- this[i] = nodelist[i];
- }
-
- this.length = nodelist.length;
-
-}
-
-HTMLCollection.prototype = {
-
- item : function (idx) {
- var ret = null;
- if ((idx >= 0) && (idx < this.length)) {
- ret = this[idx];
- }
-
- return ret;
- },
-
- namedItem : function (name) {
- }
-};
-
-$w.HTMLCollection = HTMLCollection;
-
-/*var HTMLCollection = function(nodelist, type){
- var $items = [],
- $item, i;
- if(type === "Anchor" ){
- for(i=0;i<nodelist.length;i++){
- //The name property is required to be add to the collection
- if(nodelist.item(i).name){
- item = new nodelist.item(i);
- $items.push(item);
- this[nodelist.item(i).name] = item;
- }
- }
- }else if(type === "Link"){
- for(i=0;i<nodelist.length;i++){
- //The name property is required to be add to the collection
- if(nodelist.item(i).href){
- item = new nodelist.item(i);
- $items.push(item);
- this[nodelist.item(i).name] = item;
- }
- }
- }else if(type === "Form"){
- for(i=0;i<nodelist.length;i++){
- //The name property is required to be add to the collection
- if(nodelist.item(i).href){
- item = new nodelist.item(i);
- $items.push(item);
- this[nodelist.item(i).name] = item;
- }
- }
- }
- setArray(this, $items);
- return __extend__(this, {
- item : function(i){return this[i];},
- namedItem : function(name){return this[name];}
- });
-};*/
-
- $debug("Defining HTMLAnchorElement");
-/*
-* HTMLAnchorElement - DOM Level 2
-*/
-var HTMLAnchorElement = function(ownerDocument) {
- //$log("creating anchor element");
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLAnchorElement.prototype = new HTMLElement;
-__extend__(HTMLAnchorElement.prototype, {
- get accessKey() {
- return this.getAttribute("accesskey") || "";
-
- },
- set accessKey(val) {
- return this.setAttribute("accesskey",val);
-
- },
- get charset() {
- return this.getAttribute("charset") || "";
-
- },
- set charset(val) {
- return this.setAttribute("charset",val);
-
- },
- get coords() {
- return this.getAttribute("coords") || "";
-
- },
- set coords(val) {
- return this.setAttribute("coords",val);
-
- },
- get href() {
- return this.getAttribute("href") || "";
-
- },
- set href(val) {
- return this.setAttribute("href",val);
-
- },
- get hreflang() {
- return this.getAttribute("hreflang") || "";
-
- },
- set hreflang(val) {
- return this.setAttribute("hreflang",val);
-
- },
- get name() {
- return this.getAttribute("name") || "";
-
- },
- set name(val) {
- return this.setAttribute("name",val);
-
- },
- get rel() {
- return this.getAttribute("rel") || "";
-
- },
- set rel(val) {
- return this.setAttribute("rel",val);
-
- },
- get rev() {
- return this.getAttribute("rev") || "";
-
- },
- set rev(val) {
- return this.setAttribute("rev",val);
-
- },
- get shape() {
- return this.getAttribute("shape") || "";
-
- },
- set shape(val) {
- return this.setAttribute("shape",val);
-
- },
- get tabIndex() {
- return this.getAttribute("tabindex") || "";
-
- },
- set tabIndex(val) {
- return this.setAttribute("tabindex",val);
-
- },
- get target() {
- return this.getAttribute("target") || "";
-
- },
- set target(val) {
- return this.setAttribute("target",val);
-
- },
- get type() {
- return this.getAttribute("type") || "";
-
- },
- set type(val) {
- return this.setAttribute("type",val);
-
- },
- blur:function(){
- __blur__(this);
-
- },
- focus:function(){
- __focus__(this);
-
- }
-});
-
-$w.HTMLAnchorElement = HTMLAnchorElement;$debug("Defining Anchor");
-/*
-* Anchor - DOM Level 2
-*/
-var Anchor = function(ownerDocument) {
- this.HTMLAnchorElement = HTMLAnchorElement;
- this.HTMLAnchorElement(ownerDocument);
-};
-
-(function(){
- //static regular expressions
- var hash = new RegExp('(\\#.*)'),
- hostname = new RegExp('\/\/([^\:\/]+)'),
- pathname = new RegExp('(\/[^\\?\\#]*)'),
- port = new RegExp('\:(\\d+)\/'),
- protocol = new RegExp('(^\\w*\:)'),
- search = new RegExp('(\\?[^\\#]*)');
-
- __extend__(Anchor.prototype, {
- get hash(){
- var m = hash.exec(this.href);
- return m&&m.length>1?m[1]:"";
- },
- set hash(_hash){
- //setting the hash is the only property of the location object
- //that doesn't cause the window to reload
- _hash = _hash.indexOf('#')===0?_hash:"#"+_hash;
- this.href = this.protocol + this.host + this.pathname + this.search + _hash;
- },
- get host(){
- return this.hostname + (this.port !== "")?":"+this.port:"";
- },
- set host(_host){
- this.href = this.protocol + _host + this.pathname + this.search + this.hash;
- },
- get hostname(){
- var m = hostname.exec(this.href);
- return m&&m.length>1?m[1]:"";
- },
- set hostname(_hostname){
- this.href = this.protocol + _hostname + ((this.port=="")?"":(":"+this.port)) +
- this.pathname + this.search + this.hash;
- },
- get pathname(){
- var m = this.href;
- m = pathname.exec(m.substring(m.indexOf(this.hostname)));
- return m&&m.length>1?m[1]:"/";
- },
- set pathname(_pathname){
- this.href = this.protocol + this.host + _pathname +
- this.search + this.hash;
- },
- get port(){
- var m = port.exec(this.href);
- return m&&m.length>1?m[1]:"";
- },
- set port(_port){
- this.href = this.protocol + this.hostname + ":"+_port + this.pathname +
- this.search + this.hash;
- },
- get protocol(){
- return protocol.exec(this.href)[0];
- },
- set protocol(_protocol){
- this.href = _protocol + this.host + this.pathname +
- this.search + this.hash;
- },
- get search(){
- var m = search.exec(this.href);
- return m&&m.length>1?m[1]:"";
- },
- set search(_search){
- this.href = this.protocol + this.host + this.pathname +
- _search + this.hash;
- }
- });
-
-})();
-
-$w.Anchor = Anchor;
-$debug("Defining HTMLAreaElement");
-/*
-* HTMLAreaElement - DOM Level 2
-*/
-var HTMLAreaElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLAreaElement.prototype = new HTMLElement;
-__extend__(HTMLAreaElement.prototype, {
- get accessKey(){
- return this.getAttribute('accesskey');
- },
- set accessKey(value){
- this.setAttribute('accesskey',value);
- },
- get alt(){
- return this.getAttribute('alt');
- },
- set alt(value){
- this.setAttribute('alt',value);
- },
- get coords(){
- return this.getAttribute('coords');
- },
- set coords(value){
- this.setAttribute('coords',value);
- },
- get href(){
- return this.getAttribute('href');
- },
- set href(value){
- this.setAttribute('href',value);
- },
- get noHref(){
- return this.hasAttribute('href');
- },
- get shape(){
- //TODO
- return 0;
- },
- get tabIndex(){
- return this.getAttribute('tabindex');
- },
- set tabIndex(value){
- this.setAttribute('tabindex',value);
- },
- get target(){
- return this.getAttribute('target');
- },
- set target(value){
- this.setAttribute('target',value);
- }
-});
-
-$w.HTMLAreaElement = HTMLAreaElement;
- $debug("Defining HTMLBaseElement");
-/*
-* HTMLBaseElement - DOM Level 2
-*/
-var HTMLBaseElement = function(ownerDocument) {
- //$log("creating anchor element");
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLBaseElement.prototype = new HTMLElement;
-__extend__(HTMLBaseElement.prototype, {
- get href(){
- return this.getAttribute('href');
- },
- set href(value){
- this.setAttribute('href',value);
- },
- get target(){
- return this.getAttribute('target');
- },
- set target(value){
- this.setAttribute('target',value);
- }
-});
-
-$w.HTMLBaseElement = HTMLBaseElement; $debug("Defining HTMLQuoteElement");
-/*
-* HTMLQuoteElement - DOM Level 2
-*/
-var HTMLQuoteElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLQuoteElement.prototype = new HTMLElement;
-__extend__(HTMLQuoteElement.prototype, {
- get cite(){
- return this.getAttribute('cite');
- },
- set cite(value){
- this.setAttribute('cite',value);
- }
-});
-
-$w.HTMLQuoteElement = HTMLQuoteElement; $debug("Defining HTMLButtonElement");
-/*
-* HTMLButtonElement - DOM Level 2
-*/
-var HTMLButtonElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLButtonElement.prototype = new HTMLElement;
-__extend__(HTMLButtonElement.prototype, {
- get form(){
- var parent = this.parent;
- while(parent.nodeName.toLowerCase() != 'form'){
- parent = parent.parent;
- }
- return parent;
- },
- get accessKey(){
- return this.getAttribute('accesskey');
- },
- set accessKey(value){
- this.setAttribute('accesskey',value);
- },
- get tabIndex(){
- return Number(this.getAttribute('tabindex'));
- },
- set tabIndex(value){
- this.setAttribute('tabindex',Number(value));
- },
- get type(){
- return this.getAttribute('type');
- },
- set type(value){
- this.setAttribute('type',value);
- },
- get value(){
- return this.getAttribute('value');
- },
- set value(value){
- this.setAttribute('value',value);
- }
-});
-
-$w.HTMLButtonElement = HTMLButtonElement; $debug("Defining HTMLTableColElement");
-/*
-* HTMLTableColElement - DOM Level 2
-*/
-var HTMLTableColElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLTableColElement.prototype = new HTMLElement;
-__extend__(HTMLTableColElement.prototype, {
- get align(){
- return this.getAttribute('align');
- },
- set align(value){
- this.setAttribute('align', value);
- },
- get ch(){
- return this.getAttribute('ch');
- },
- set ch(value){
- this.setAttribute('ch', value);
- },
- get chOff(){
- return this.getAttribute('ch');
- },
- set chOff(value){
- this.setAttribute('ch', value);
- },
- get span(){
- return this.getAttribute('span');
- },
- set span(value){
- this.setAttribute('span', value);
- },
- get vAlign(){
- return this.getAttribute('valign');
- },
- set vAlign(value){
- this.setAttribute('valign', value);
- },
- get width(){
- return this.getAttribute('width');
- },
- set width(value){
- this.setAttribute('width', value);
- }
-});
-
-$w.HTMLTableColElement = HTMLTableColElement;
-$debug("Defining HTMLModElement");
-/*
-* HTMLModElement - DOM Level 2
-*/
-var HTMLModElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLModElement.prototype = new HTMLElement;
-__extend__(HTMLModElement.prototype, {
- get cite(){
- return this.getAttribute('cite');
- },
- set cite(value){
- this.setAttribute('cite', value);
- },
- get dateTime(){
- return this.getAttribute('datetime');
- },
- set dateTime(value){
- this.setAttribute('datetime', value);
- }
-});
-
-$w.HTMLModElement = HTMLModElement; $debug("Defining HTMLFieldSetElement");
-/*
-* HTMLFieldSetElement - DOM Level 2
-*/
-var HTMLFieldSetElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLFieldSetElement.prototype = new HTMLElement;
-__extend__(HTMLFieldSetElement.prototype, {
- get form(){
- var parent = this.parent;
- while(parent.nodeName.toLowerCase() != 'form'){
- parent = parent.parent;
- }
- return parent;
- }
-});
-
-$w.HTMLFieldSetElement = HTMLFieldSetElement; $debug("Defining HTMLFormElement");
-/*
-* HTMLFormElement - DOM Level 2
-*/
-var HTMLFormElement = function(ownerDocument){
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLFormElement.prototype = new HTMLElement;
-__extend__(HTMLFormElement.prototype,{
- get acceptCharset(){
- return this.getAttribute('accept-charset');
-
- },
- set acceptCharset(acceptCharset){
- this.setAttribute('accept-charset', acceptCharset);
-
- },
- get action(){
- return this.getAttribute('action');
-
- },
- set action(action){
- this.setAttribute('action', action);
-
- },
- get elements() {
- return this.getElementsByTagName("*");
-
- },
- get enctype(){
- return this.getAttribute('enctype');
-
- },
- set enctype(enctype){
- this.setAttribute('enctype', enctype);
-
- },
- get length() {
- return this.elements.length;
-
- },
- get method(){
- return this.getAttribute('method');
-
- },
- set method(action){
- this.setAttribute('method', method);
-
- },
- get name() {
- return this.getAttribute("name") || "";
-
- },
- set name(val) {
- return this.setAttribute("name",val);
-
- },
- get target() {
- return this.getAttribute("target") || "";
-
- },
- set target(val) {
- return this.setAttribute("target",val);
-
- },
- submit:function(){
- __submit__(this);
-
- },
- reset:function(){
- __reset__(this);
-
- }
-});
-
-$w.HTMLFormElement = HTMLFormElement;$debug("Defining HTMLFrameElement");
-/*
-* HTMLFrameElement - DOM Level 2
-*/
-var HTMLFrameElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLFrameElement.prototype = new HTMLElement;
-__extend__(HTMLFrameElement.prototype, {
- get frameBorder(){
- return this.getAttribute('border')||"";
- },
- set frameBorder(value){
- this.setAttribute('border', value);
- },
- get longDesc(){
- return this.getAttribute('longdesc')||"";
- },
- set longDesc(value){
- this.setAttribute('longdesc', value);
- },
- get marginHeight(){
- return this.getAttribute('marginheight')||"";
- },
- set marginHeight(value){
- this.setAttribute('marginheight', value);
- },
- get marginWidth(){
- return this.getAttribute('marginwidth')||"";
- },
- set marginWidth(value){
- this.setAttribute('marginwidth', value);
- },
- get name(){
- return this.getAttribute('name')||"";
- },
- set name(value){
- this.setAttribute('name', value);
- },
- get noResize(){
- return this.getAttribute('noresize')||"";
- },
- set noResize(value){
- this.setAttribute('noresize', value);
- },
- get scrolling(){
- return this.getAttribute('scrolling')||"";
- },
- set scrolling(value){
- this.setAttribute('scrolling', value);
- },
- get src(){
- return this.getAttribute('src')||"";
- },
- set src(value){
- this.setAttribute('src', value);
- },
- get contentDocument(){
- $debug("getting content document for (i)frame");
- if(!this._content){
- this._content = new HTMLDocument($implementation);
- if(this.src.length > 0){
- $info("Loading frame content from " + this.src);
- try{
- this._content.load(this.src);
- }catch(e){
- $error("failed to load frame content: from " + this.src, e);
- }
- }
- }
- return true;
- }
-});
-
-$w.HTMLFrameElement = HTMLFrameElement;
-$debug("Defining HTMLFrameSetElement");
-/*
-* HTMLFrameSetElement - DOM Level 2
-*/
-var HTMLFrameSetElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLFrameSetElement.prototype = new HTMLElement;
-__extend__(HTMLFrameSetElement.prototype, {
- get cols(){
- return this.getAttribute('cols');
- },
- set cols(value){
- this.setAttribute('cols', value);
- },
- get rows(){
- return this.getAttribute('rows');
- },
- set rows(value){
- this.setAttribute('rows', value);
- }
-});
-
-$w.HTMLFrameSetElement = HTMLFrameSetElement; $debug("Defining HTMLHeadElement");
-/*
-* HTMLHeadElement - DOM Level 2
-*/
-var HTMLHeadElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLHeadElement.prototype = new HTMLElement;
-__extend__(HTMLHeadElement.prototype, {
- get profile(){
- return this.getAttribute('profile');
- },
- set profile(value){
- this.setAttribute('profile', value);
- },
- //we override this so we can apply browser behavior specific to head children
- //like loading scripts
- appendChild : function(newChild) {
- var newChild = HTMLElement.prototype.appendChild.apply(this,[newChild]);
- //__evalScript__(newChild);
- return newChild;
- },
- insertBefore : function(newChild, refChild) {
- var newChild = HTMLElement.prototype.insertBefore.apply(this,[newChild]);
- //__evalScript__(newChild);
- return newChild;
- }
-});
-
-var __evalScript__ = function(newChild){
- //check to see if this is a script element and apply a script loading strategy
- //the check against the ownerDocument isnt really enough to support frames in
- // the long run, but for now it's ok
- if(newChild.nodeType == DOMNode.ELEMENT_NODE &&
- newChild.ownerDocument == window.document ){
- if(newChild.nodeName.toUpperCase() == "SCRIPT"){
- $debug("loading script via policy. ");
- $policy.loadScript(newChild);
- }
- }
-};
-
-$w.HTMLHeadElement = HTMLHeadElement;
-$debug("Defining HTMLIFrameElement");
-/*
-* HTMLIFrameElement - DOM Level 2
-*/
-var HTMLIFrameElement = function(ownerDocument) {
- this.HTMLFrameElement = HTMLFrameElement;
- this.HTMLFrameElement(ownerDocument);
-};
-HTMLIFrameElement.prototype = new HTMLFrameElement;
-__extend__(HTMLIFrameElement.prototype, {
- get height() {
- return this.getAttribute("height") || "";
- },
- set height(val) {
- return this.setAttribute("height",val);
- },
- get width() {
- return this.getAttribute("width") || "";
- },
- set width(val) {
- return this.setAttribute("width",val);
- }
-});
-
-$w.HTMLIFrameElement = HTMLIFrameElement;
- $debug("Defining HTMLImageElement");
-/*
-* HTMLImageElement - DOM Level 2
-*/
-var HTMLImageElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLImageElement.prototype = new HTMLElement;
-__extend__(HTMLImageElement.prototype, {
- get alt(){
- return this.getAttribute('alt');
- },
- set alt(value){
- this.setAttribute('alt', value);
- },
- get height(){
- return this.getAttribute('height');
- },
- set height(value){
- this.setAttribute('height', value);
- },
- get isMap(){
- return this.hasAttribute('map');
- },
- set useMap(value){
- this.setAttribute('map', value);
- },
- get longDesc(){
- return this.getAttribute('longdesc');
- },
- set longDesc(value){
- this.setAttribute('longdesc', value);
- },
- get name(){
- return this.getAttribute('name');
- },
- set name(value){
- this.setAttribute('name', value);
- },
- get src(){
- return this.getAttribute('src');
- },
- set src(value){
- this.setAttribute('src', value);
- },
- get width(){
- return this.getAttribute('width');
- },
- set width(value){
- this.setAttribute('width', value);
- }
-});
-
-$w.HTMLImageElement = HTMLImageElement;$debug("Defining HTMLInputElement");
-/*
-* HTMLInputElement - DOM Level 2
-*/
-var HTMLInputElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLInputElement.prototype = new HTMLElement;
-__extend__(HTMLInputElement.prototype, {
- get defaultValue(){
- return this.getAttribute('defaultValue');
- },
- set defaultValue(value){
- this.setAttribute('defaultValue', value);
- },
- get defaultChecked(){
- return this.getAttribute('defaultChecked');
- },
- get form(){
- var parent = this.parent;
- while(parent.nodeName.toLowerCase() != 'form'){
- parent = parent.parent;
- }
- return parent;
- },
- get accessKey(){
- return this.getAttribute('accesskey');
- },
- set accessKey(value){
- this.setAttribute('accesskey',value);
- },
- get access(){
- return this.getAttribute('access');
- },
- set access(value){
- this.setAttribute('access', value);
- },
- get alt(){
- return this.getAttribute('alt');
- },
- set alt(value){
- this.setAttribute('alt', value);
- },
- get checked(){
- return (this.getAttribute('checked')=='checked');
- },
- set checked(value){
- this.setAttribute('checked', (value ? 'checked' :''));
- },
- get disabled(){
- return (this.getAttribute('disabled')=='disabled');
- },
- set disabled(value){
- this.setAttribute('disabled', (value ? 'disabled' :''));
- },
- get maxLength(){
- return Number(this.getAttribute('maxlength')||'0');
- },
- set maxLength(value){
- this.setAttribute('maxlength', value);
- },
- get name(){
- return this.getAttribute('name')||'';
- },
- set name(value){
- this.setAttribute('name', value);
- },
- get readOnly(){
- return (this.getAttribute('readonly')=='readonly');
- },
- set readOnly(value){
- this.setAttribute('readonly', (value ? 'readonly' :''));
- },
- get size(){
- return this.getAttribute('size');
- },
- set size(value){
- this.setAttribute('size', value);
- },
- get src(){
- return this.getAttribute('src');
- },
- set src(value){
- this.setAttribute('src', value);
- },
- get tabIndex(){
- return Number(this.getAttribute('tabindex'));
- },
- set tabIndex(value){
- this.setAttribute('tabindex',Number(value));
- },
- get type(){
- return this.getAttribute('type');
- },
- set type(value){
- this.setAttribute('type',value);
- },
- get useMap(){
- return this.getAttribute('map');
- },
- get value(){
- return this.getAttribute('value');
- },
- set value(value){
- this.setAttribute('value',value);
- },
- blur:function(){
- __blur__(this);
-
- },
- focus:function(){
- __focus__(this);
-
- },
- select:function(){
- __select__(this);
-
- },
- click:function(){
- __click__(this);
-
- }
-});
-
-$w.HTMLInputElement = HTMLInputElement;$debug("Defining HTMLLabelElement");
-/*
-* HTMLLabelElement - DOM Level 2
-*/
-var HTMLLabelElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLLabelElement.prototype = new HTMLElement;
-__extend__(HTMLLabelElement.prototype, {
- get form(){
- var parent = this.parent;
- while(parent.nodeName.toLowerCase() != 'form'){
- parent = parent.parent;
- }
- return parent;
- },
- get accessKey(){
- return this.getAttribute('accesskey');
- },
- set accessKey(value){
- this.setAttribute('accesskey',value);
- },
- get htmlFor(){
- return this.getAttribute('for');
- },
- set htmlFor(value){
- this.setAttribute('for',value);
- }
-});
-
-$w.HTMLLabelElement = HTMLLabelElement; $debug("Defining HTMLLegendElement");
-/*
-* HTMLLegendElement - DOM Level 2
-*/
-var HTMLLegendElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLLegendElement.prototype = new HTMLElement;
-__extend__(HTMLLegendElement.prototype, {
- get form(){
- var parent = this.parent;
- while(parent.nodeName.toLowerCase() != 'form'){
- parent = parent.parent;
- }
- return parent;
- },
- get accessKey(){
- return this.getAttribute('accesskey');
- },
- set accessKey(value){
- this.setAttribute('accesskey',value);
- }
-});
-
-$w.HTMLLegendElement = HTMLLegendElement; /**
-* Link - HTMLElement
-*/
-$w.__defineGetter__("Link", function(){
- return function(){
- throw new Error("Object cannot be created in this context");
- };
-});
-
-
-$debug("Defining HTMLLinkElement");
-/*
-* HTMLLinkElement - DOM Level 2
-*/
-var HTMLLinkElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLLinkElement.prototype = new HTMLElement;
-__extend__(HTMLLinkElement.prototype, {
- get disabled(){
- return this.getAttribute('disabled');
- },
- set disabled(value){
- this.setAttribute('disabled',value);
- },
- get charset(){
- return this.getAttribute('charset');
- },
- set charset(value){
- this.setAttribute('charset',value);
- },
- get href(){
- return this.getAttribute('href');
- },
- set href(value){
- this.setAttribute('href',value);
- },
- get hreflang(){
- return this.getAttribute('hreflang');
- },
- set hreflang(value){
- this.setAttribute('hreflang',value);
- },
- get media(){
- return this.getAttribute('media');
- },
- set media(value){
- this.setAttribute('media',value);
- },
- get rel(){
- return this.getAttribute('rel');
- },
- set rel(value){
- this.setAttribute('rel',value);
- },
- get rev(){
- return this.getAttribute('rev');
- },
- set rev(value){
- this.setAttribute('rev',value);
- },
- get target(){
- return this.getAttribute('target');
- },
- set target(value){
- this.setAttribute('target',value);
- },
- get type(){
- return this.getAttribute('type');
- },
- set type(value){
- this.setAttribute('type',value);
- }
-});
-
-$w.HTMLLinkElement = HTMLLinkElement;
-$debug("Defining HTMLMapElement");
-/*
-* HTMLMapElement - DOM Level 2
-*/
-var HTMLMapElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLMapElement.prototype = new HTMLElement;
-__extend__(HTMLMapElement.prototype, {
- get areas(){
- return this.getElementsByTagName('area');
- },
- get name(){
- return this.getAttribute('name');
- },
- set name(value){
- this.setAttribute('name',value);
- }
-});
-
-$w.HTMLMapElement = HTMLMapElement;$debug("Defining HTMLMetaElement");
-/*
-* HTMLMetaElement - DOM Level 2
-*/
-var HTMLMetaElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLMetaElement.prototype = new HTMLElement;
-__extend__(HTMLMetaElement.prototype, {
- get content(){
- return this.getAttribute('content');
- },
- set content(value){
- this.setAttribute('content',value);
- },
- get httpEquiv(){
- return this.getAttribute('http-equiv');
- },
- set httpEquiv(value){
- this.setAttribute('http-equiv',value);
- },
- get name(){
- return this.getAttribute('name');
- },
- set name(value){
- this.setAttribute('name',value);
- },
- get scheme(){
- return this.getAttribute('scheme');
- },
- set scheme(value){
- this.setAttribute('scheme',value);
- }
-});
-
-$w.HTMLMetaElement = HTMLMetaElement;
-$debug("Defining HTMLObjectElement");
-/*
-* HTMLObjectElement - DOM Level 2
-*/
-var HTMLObjectElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLObjectElement.prototype = new HTMLElement;
-__extend__(HTMLObjectElement.prototype, {
- get code(){
- return this.getAttribute('code');
- },
- set code(value){
- this.setAttribute('code',value);
- },
- get archive(){
- return this.getAttribute('archive');
- },
- set archive(value){
- this.setAttribute('archive',value);
- },
- get codeBase(){
- return this.getAttribute('codebase');
- },
- set codeBase(value){
- this.setAttribute('codebase',value);
- },
- get codeType(){
- return this.getAttribute('codetype');
- },
- set codeType(value){
- this.setAttribute('codetype',value);
- },
- get data(){
- return this.getAttribute('data');
- },
- set data(value){
- this.setAttribute('data',value);
- },
- get declare(){
- return this.getAttribute('declare');
- },
- set declare(value){
- this.setAttribute('declare',value);
- },
- get height(){
- return this.getAttribute('height');
- },
- set height(value){
- this.setAttribute('height',value);
- },
- get standby(){
- return this.getAttribute('standby');
- },
- set standby(value){
- this.setAttribute('standby',value);
- },
- get tabIndex(){
- return this.getAttribute('tabindex');
- },
- set tabIndex(value){
- this.setAttribute('tabindex',value);
- },
- get type(){
- return this.getAttribute('type');
- },
- set type(value){
- this.setAttribute('type',value);
- },
- get useMap(){
- return this.getAttribute('usemap');
- },
- set useMap(value){
- this.setAttribute('usemap',value);
- },
- get width(){
- return this.getAttribute('width');
- },
- set width(value){
- this.setAttribute('width',value);
- },
- get contentDocument(){
- return this.ownerDocument;
- }
-});
-
-$w.HTMLObjectElement = HTMLObjectElement;
- $debug("Defining HTMLOptGroupElement");
-/*
-* HTMLOptGroupElement - DOM Level 2
-*/
-var HTMLOptGroupElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLOptGroupElement.prototype = new HTMLElement;
-__extend__(HTMLOptGroupElement.prototype, {
- get disabled(){
- return this.getAttribute('disabled');
- },
- set disabled(value){
- this.setAttribute('disabled',value);
- },
- get label(){
- return this.getAttribute('label');
- },
- set label(value){
- this.setAttribute('label',value);
- },
-});
-
-$w.HTMLOptGroupElement = HTMLOptGroupElement; $debug("Defining HTMLOptionElement");
-/*
-* HTMLOptionElement - DOM Level 2
-*/
-var HTMLOptionElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLOptionElement.prototype = new HTMLElement;
-__extend__(HTMLOptionElement.prototype, {
- get form(){
- var parent = this.parent;
- while(parent.nodeName.toLowerCase() != 'form'){
- parent = parent.parent;
- }
- return parent;
- },
- get defaultSelected(){
- return this.getAttribute('defaultSelected');
- },
- set defaultSelected(value){
- this.setAttribute('defaultSelected',value);
- },
- get text(){
- return ((this.nodeValue === null) || (this.nodeValue ===undefined)) ?
- this.innerHTML :
- this.nodeValue;
- },
- get index(){
- var options = this.parent.childNodes;
- for(var i; i<options.length;i++){
- if(this == options[i])
- return i;
- }
- return -1;
- },
- get disabled(){
- return this.getAttribute('disabled');
- },
- set disabled(value){
- this.setAttribute('disabled',value);
- },
- get label(){
- return this.getAttribute('label');
- },
- set label(value){
- this.setAttribute('label',value);
- },
- get selected(){
- return (this.getAttribute('selected')=='selected');
- },
- set selected(value){
- this.setAttribute('selected', (value ? 'selected' :''));
- },
- get value(){
- return ((this.getAttribute('value') === undefined) || (this.getAttribute('value') === null)) ?
- this.text :
- this.getAttribute('value');
- },
- set value(value){
- this.setAttribute('value',value);
- }
-});
-
-$w.HTMLOptionElement = HTMLOptionElement;
-$debug("Defining HTMLParamElement");
-/*
-* HTMLParamElement - DOM Level 2
-*/
-var HTMLParamElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLParamElement.prototype = new HTMLElement;
-__extend__(HTMLParamElement.prototype, {
- get name(){
- return this.getAttribute('name');
- },
- set name(value){
- this.setAttribute('name',value);
- },
- get type(){
- return this.getAttribute('type');
- },
- set type(value){
- this.setAttribute('type',value);
- },
- get value(){
- return this.getAttribute('value');
- },
- set value(value){
- this.setAttribute('value',value);
- },
- get valueType(){
- return this.getAttribute('valuetype');
- },
- set valueType(value){
- this.setAttribute('valuetype',value);
- },
-});
-
-$w.HTMLParamElement = HTMLParamElement;
- $debug("Defining HTMLScriptElement");
-/*
-* HTMLScriptElement - DOM Level 2
-*/
-var HTMLScriptElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLScriptElement.prototype = new HTMLElement;
-__extend__(HTMLScriptElement.prototype, {
- get text(){
- // text of script is in a child node of the element
- // scripts with < operator must be in a CDATA node
- for (var i=0; i<this.childNodes.length; i++) {
- if (this.childNodes[i].nodeType == DOMNode.CDATA_SECTION_NODE) {
- return this.childNodes[i].nodeValue;
- }
- }
- // otherwise there will be a text node containing the script
- if (this.childNodes[0] && this.childNodes[0].nodeType == DOMNode.TEXT_NODE) {
- return this.childNodes[0].nodeValue;
- }
- return this.nodeValue;
-
- },
- get htmlFor(){
- return this.getAttribute('for');
- },
- set htmlFor(value){
- this.setAttribute('for',value);
- },
- get event(){
- return this.getAttribute('event');
- },
- set event(value){
- this.setAttribute('event',value);
- },
- get charset(){
- return this.getAttribute('charset');
- },
- set charset(value){
- this.setAttribute('charset',value);
- },
- get defer(){
- return this.getAttribute('defer');
- },
- set defer(value){
- this.setAttribute('defer',value);
- },
- get src(){
- return this.getAttribute('src');
- },
- set src(value){
- this.setAttribute('src',value);
- },
- get type(){
- return this.getAttribute('type');
- },
- set type(value){
- this.setAttribute('type',value);
- }
-});
-
-$w.HTMLScriptElement = HTMLScriptElement;$debug("Defining HTMLSelectElement");
-/*
-* HTMLSelectElement - DOM Level 2
-*/
-var HTMLSelectElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLSelectElement.prototype = new HTMLElement;
-__extend__(HTMLSelectElement.prototype, {
- get type(){
- return this.getAttribute('type');
- },
- get selectedIndex(){
- var options = this.options;
- for(var i=0;i<options.length;i++){
- if(options[i].selected){
- return i;
- }
- };
- return -1;
- },
- set selectedIndex(value){
- if (this.selectedIndex != -1) {
- this.options[this.selectedIndex].selected = '';
- }
- var option = this.options[Number(value)];
- if (option) {
- option.selected = 'selected';
- }
- },
- get value(){
- return this.getAttribute('value')||'';
- },
- set value(value) {
- var options = this.options,
- i, index;
- for (i=0; i<options.length; i++) {
- if (options[i].value == value) {
- index = i;
- break;
- }
- }
- if (index !== undefined) {
- this.setAttribute('value', value);
- this.selectedIndex = index;
- }
- },
- get length(){
- return this.options.length;
- },
- get form(){
- var parent = this.parent;
- while(parent.nodeName.toLowerCase() != 'form'){
- parent = parent.parent;
- }
- return parent;
- },
- get options(){
- return this.getElementsByTagName('option');
- },
- get disabled(){
- return (this.getAttribute('disabled')=='disabled');
- },
- set disabled(value){
- this.setAttribute('disabled', (value ? 'disabled' :''));
- },
- get multiple(){
- return this.getAttribute('multiple');
- },
- set multiple(value){
- this.setAttribute('multiple',value);
- },
- get name(){
- return this.getAttribute('name')||'';
- },
- set name(value){
- this.setAttribute('name',value);
- },
- get size(){
- return Number(this.getAttribute('size'));
- },
- set size(value){
- this.setAttribute('size',value);
- },
- get tabIndex(){
- return Number(this.getAttribute('tabindex'));
- },
- set tabIndex(value){
- this.setAttribute('tabindex',value);
- },
- add : function(){
- __add__(this);
- },
- remove : function(){
- __remove__(this);
- },
- blur: function(){
- __blur__(this);
- },
- focus: function(){
- __focus__(this);
- }
-});
-
-$w.HTMLSelectElement = HTMLSelectElement;$debug("Defining HTMLStyleElement");
-/*
-* HTMLStyleElement - DOM Level 2
-*/
-var HTMLStyleElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLStyleElement.prototype = new HTMLElement;
-__extend__(HTMLStyleElement.prototype, {
- get disabled(){
- return this.getAttribute('disabled');
- },
- set disabled(value){
- this.setAttribute('disabled',value);
- },
- get media(){
- return this.getAttribute('media');
- },
- set media(value){
- this.setAttribute('media',value);
- },
- get type(){
- return this.getAttribute('type');
- },
- set type(value){
- this.setAttribute('type',value);
- }
-});
-
-$w.HTMLStyleElement = HTMLStyleElement;$debug("Defining HTMLTableElement");
-/*
-* HTMLTableElement - DOM Level 2
-* Implementation Provided by Steven Wood
-*/
-var HTMLTableElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-
-};
-
-HTMLTableElement.prototype = new HTMLElement;
-__extend__(HTMLTableElement.prototype, {
-
- get tFoot() {
- //tFoot returns the table footer.
- return this.getElementsByTagName("tfoot")[0];
- },
-
- createTFoot : function () {
- var tFoot = this.tFoot;
-
- if (!tFoot) {
- tFoot = document.createElement("tfoot");
- this.appendChild(tFoot);
- }
-
- return tFoot;
- },
-
- deleteTFoot : function () {
- var foot = this.tFoot;
- if (foot) {
- foot.parentNode.removeChild(foot);
- }
- },
-
- get tHead() {
- //tHead returns the table head.
- return this.getElementsByTagName("thead")[0];
- },
-
- createTHead : function () {
- var tHead = this.tHead;
-
- if (!tHead) {
- tHead = document.createElement("thead");
- this.insertBefore(tHead, this.firstChild);
- }
-
- return tHead;
- },
-
- deleteTHead : function () {
- var head = this.tHead;
- if (head) {
- head.parentNode.removeChild(head);
- }
- },
-
- appendChild : function (child) {
-
- var tagName = child.tagName.toLowerCase();
- if (tagName === "tr") {
- // need an implcit <tbody> to contain this...
- if (!this.currentBody) {
- this.currentBody = document.createElement("tbody");
-
- DOMNode.prototype.appendChild.apply(this, [this.currentBody]);
- }
-
- return this.currentBody.appendChild(child);
-
- } else if (tagName === "tbody" || tagName === "tfoot" && this.currentBody) {
- this.currentBody = child;
- return DOMNode.prototype.appendChild.apply(this, arguments);
-
- } else {
- return DOMNode.prototype.appendChild.apply(this, arguments);
- }
- },
-
- get tBodies() {
- return new HTMLCollection(this.getElementsByTagName("tbody"));
-
- },
-
- get rows() {
- return new HTMLCollection(this.getElementsByTagName("tr"));
- },
-
- insertRow : function (idx) {
- if (idx === undefined) {
- throw new Error("Index omitted in call to HTMLTableElement.insertRow ");
- }
-
- var rows = this.rows,
- numRows = rows.length,
- node,
- inserted,
- lastRow;
-
- if (idx > numRows) {
- throw new Error("Index > rows.length in call to HTMLTableElement.insertRow");
- }
-
- var inserted = document.createElement("tr");
- // If index is -1 or equal to the number of rows,
- // the row is appended as the last row. If index is omitted
- // or greater than the number of rows, an error will result
- if (idx === -1 || idx === numRows) {
- lastRow = rows[rows.length-1];
- lastRow.parentNode.appendChild(inserted);
- } else {
- rows[idx].parentNode.insertBefore(inserted, rows[idx]);
- }
-
- return inserted;
- },
-
- deleteRow : function (idx) {
- var elem = this.rows[idx];
- elem.parentNode.removeChild(elem);
- },
-
- get summary() {
- return this.getAttribute("summary");
- },
-
- set summary(summary) {
- this.setAttribute("summary", summary);
- },
-
- get align() {
- return this.getAttribute("align");
- },
-
- set align(align) {
- this.setAttribute("align", align);
- },
-
-
- get bgColor() {
- return this.getAttribute("bgColor");
- },
-
- set bgColor(bgColor) {
- return this.setAttribute("bgColor", bgColor);
- },
-
- get cellPadding() {
- return this.getAttribute("cellPadding");
- },
-
- set cellPadding(cellPadding) {
- return this.setAttribute("cellPadding", cellPadding);
- },
-
-
- get cellSpacing() {
- return this.getAttribute("cellSpacing");
- },
-
- set cellSpacing(cellSpacing) {
- this.setAttribute("cellSpacing", cellSpacing);
- },
-
- get frame() {
- return this.getAttribute("frame");
- },
-
- set frame(frame) {
- this.setAttribute("frame", frame);
- },
-
- get rules() {
- return this.getAttribute("rules");
- },
-
- set rules(rules) {
- this.setAttribute("rules", rules);
- },
-
- get width() {
- return this.getAttribute("width");
- },
-
- set width(width) {
- this.setAttribute("width", width);
- }
-
-});
-
-$w.HTMLTableElement = HTMLTableElement; $debug("Defining HTMLTableSectionElement");
-/*
-* HTMLxElement - DOM Level 2
-* - Contributed by Steven Wood
-*/
-var HTMLTableSectionElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLTableSectionElement.prototype = new HTMLElement;
-__extend__(HTMLTableSectionElement.prototype, {
-
- appendChild : function (child) {
-
- // disallow nesting of these elements.
- if (child.tagName.match(/TBODY|TFOOT|THEAD/)) {
- return this.parentNode.appendChild(child);
- } else {
- return DOMNode.prototype.appendChild.apply(this, arguments);
- }
-
- },
-
- get align() {
- return this.getAttribute("align");
- },
-
- get ch() {
- return this.getAttribute("ch");
- },
-
- set ch(ch) {
- this.setAttribute("ch", ch);
- },
-
- // ch gets or sets the alignment character for cells in a column.
- set chOff(chOff) {
- this.setAttribute("chOff", chOff);
- },
-
- get chOff(chOff) {
- return this.getAttribute("chOff");
- },
-
- get vAlign () {
- return this.getAttribute("vAlign");
- },
-
- get rows() {
- return new HTMLCollection(this.getElementsByTagName("tr"));
- },
-
- insertRow : function (idx) {
- if (idx === undefined) {
- throw new Error("Index omitted in call to HTMLTableSectionElement.insertRow ");
- }
-
- var numRows = this.rows.length,
- node = null;
-
- if (idx > numRows) {
- throw new Error("Index > rows.length in call to HTMLTableSectionElement.insertRow");
- }
-
- var row = document.createElement("tr");
- // If index is -1 or equal to the number of rows,
- // the row is appended as the last row. If index is omitted
- // or greater than the number of rows, an error will result
- if (idx === -1 || idx === numRows) {
- this.appendChild(row);
- } else {
- node = this.firstChild;
-
- for (var i=0; i<idx; i++) {
- node = node.nextSibling;
- }
- }
-
- this.insertBefore(row, node);
-
- return row;
- },
-
- deleteRow : function (idx) {
- var elem = this.rows[idx];
- this.removeChild(elem);
- }
-
-});
-
-$w.HTMLTableSectionElement = HTMLTableSectionElement;
-$debug("Defining HTMLTableCellElement");
-/*
-* HTMLTableCellElement - DOM Level 2
-* Implementation Provided by Steven Wood
-*/
-var HTMLTableCellElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-};
-HTMLTableCellElement.prototype = new HTMLElement;
-__extend__(HTMLTableCellElement.prototype, {
-
-
- // TODO :
-
-});
-
-$w.HTMLTableCellElement = HTMLTableCellElement;$debug("Defining HTMLTableRowElement");
-/*
-* HTMLRowElement - DOM Level 2
-* Implementation Provided by Steven Wood
-*/
-var HTMLTableRowElement = function(ownerDocument) {
- this.HTMLElement = HTMLElement;
- this.HTMLElement(ownerDocument);
-
-};
-HTMLTableRowElement.prototype = new HTMLElement;
-__extend__(HTMLTableRowElement.prototype, {
-
- // align gets or sets the horizontal alignment of data within cells of the row.
- get align() {
- return this.getAttribute("align");
- },
-
- get bgColor() {
- return this.getAttribute("bgcolor");
- },
-
- get cells() {
- var nl = this.getElementsByTagName("td");
- return new HTMLCollection(nl);
- },
-
- get ch() {
- return this.getAttribute("ch");
- },
-
- set ch(ch) {
- this.setAttribute("ch", ch);
- },
-
- // ch gets or sets the alignment character for cells in a column.
- set chOff(chOff) {
- this.setAttribute("chOff", chOff);
- },
-
- get chOff(chOff) {
- return this.getAttribute("chOff");
- },
-
- get rowIndex() {
- var nl = this.parentNode.childNodes;
- for (var i=0; i<nl.length; i++) {
- if (nl[i] === this) {
- return i;
- }
- }
- },
-
- get sectionRowIndex() {
- var nl = this.parentNode.getElementsByTagName(this.tagName);
- for (var i=0; i<nl.length; i++) {
- if (nl[i] === this) {
- return i;
- }
- }
- },
-
- get vAlign () {
- return this.getAttribute("vAlign");
- },
-
- insertCell : function (idx) {
- if (idx === undefined) {
- throw new Error("Index omitted in call to HTMLTableRow.insertCell");
- }
-
- var numCells = this.cells.length,
- node = null;
-
- if (idx > numCells) {
- throw new Error("Index > rows.length in call to HTMLTableRow.insertCell");
- }
-
- var cell = document.createElement("td");
-
- if (idx === -1 || idx === numCells) {
- this.appendChild(cell);
- } else {
-
-
- node = this.firstChild;
-
- for (var i=0; i<idx; i++) {
- node = node.nextSibling;
- }
- }
-
- this.insertBefore(cell, node);
-
- return cell;
- },
-
- deleteCell : function (idx) {
- var elem = this.cells[idx];
- this.removeChild(elem);
- }
-
-});
-
-$w.HTMLTableRowElement = HTMLTableRowElement;
-/**
- * @author thatcher
- */
-$debug("Defining XMLSerializer");
-/*
-* XMLSerializer
-*/
-$w.__defineGetter__("XMLSerializer", function(){
- return new XMLSerializer(arguments);
-});
-
-var XMLSerializer = function() {
-
-};
-__extend__(XMLSerializer.prototype, {
- serializeToString: function(node){
- return node.xml;
- }
-});/**
- * @author thatcher
- */
-$debug("Defining XPathExpression");
-/*
-* XPathExpression
-*/
-$w.__defineGetter__("XPathExpression", function(){
- return XPathExpression;
-});
-
-var XPathExpression = function() {};
-__extend__(XPathExpression.prototype, {
- evaluate: function(){
- //TODO for now just return an empty XPathResult
- return new XPathResult();
- }
-});/**
- * @author thatcher
- */
-$debug("Defining XPathResult");
-/*
-* XPathResult
-*/
-$w.__defineGetter__("XPathResult", function(){
- return XPathResult;
-});
-
-var XPathResult = function() {
- this.snapshotLength = 0;
- this.stringValue = '';
-};
-
-__extend__( XPathResult, {
- ANY_TYPE: 0,
- NUMBER_TYPE: 1,
- STRING_TYPE: 2,
- BOOLEAN_TYPE: 3,
- UNORDERED_NODE_ITERATOR_TYPE: 4,
- ORDERED_NODEITERATOR_TYPE: 5,
- UNORDERED_NODE_SNAPSHOT_TYPE: 6,
- ORDERED_NODE_SNAPSHOT_TYPE: 7,
- ANY_ORDERED_NODE_TYPE: 8,
- FIRST_ORDERED_NODE_TYPE: 9
-});
-
-__extend__(XPathResult.prototype, {
- get booleanValue(){
- //TODO
- },
- get invalidIteration(){
- //TODO
- },
- get numberValue(){
- //TODO
- },
- get resultType(){
- //TODO
- },
- get singleNodeValue(){
- //TODO
- },
- iterateNext: function(){
- //TODO
- },
- snapshotItem: function(index){
- //TODO
- }
-});
-
-/**
- * @author thatcher
- */
-
-$w.__defineGetter__("XSLTProcessor", function(){
- return new XSLTProcessor(arguments);
-});
-
-var XSLTProcessor = function() {
- this.__stylesheet__ = null;
-};
-__extend__(XSLTProcessor.prototype, {
- clearParameters: function(){
- //TODO
- },
- getParameter: function(nsuri, name){
- //TODO
- },
- importStyleSheet: function(stylesheet){
- this.__stylesheet__ = stylesheet;
- },
- removeParameter: function(nsuri, name){
- //TODO
- },
- reset: function(){
- //TODO
- },
- setParameter: function(nsuri, name, value){
- //TODO
- },
- transformToDocument: function(sourceNode){
- return xsltProcess(sourceNode, this.__stylesheet__);
- },
- transformToFragment: function(sourceNode, ownerDocument){
- return xsltProcess(sourceNode, this.__stylesheet__).childNodes;
- }
-});$debug("Defining Event");
-/*
-* event.js
-*/
-var Event = function(options){
- if(options === undefined){
- options={target:window,currentTarget:window};
- }
- __extend__(this,{
- CAPTURING_PHASE : 1,
- AT_TARGET : 2,
- BUBBLING_PHASE : 3
- });
- $debug("Creating new Event");
- var $bubbles = options.bubbles?options.bubbles:true,
- $cancelable = options.cancelable?options.cancelable:true,
- $currentTarget = options.currentTarget?options.currentTarget:null,
- $eventPhase = options.eventPhase?options.eventPhase:Event.CAPTURING_PHASE,
- $target = options.eventPhase?options.eventPhase:document,
- $timestamp = options.timestamp?options.timestamp:new Date().getTime().toString(),
- $type = options.type?options.type:"";
- return __extend__(this,{
- get bubbles(){return $bubbles;},
- get cancelable(){return $cancelable;},
- get currentTarget(){return $currentTarget;},
- get eventPhase(){return $eventPhase;},
- get target(){return $target;},
- get timestamp(){return $timestamp;},
- get type(){return $type;},
- initEvent: function(type,bubbles,cancelable){
- $type=type?type:$type;
- $bubbles=bubbles?bubbles:$bubbles;
- $cancelable=cancelable?cancelable:$cancelable;
- },
- preventDefault: function(){return;/* TODO */},
- stopPropagation: function(){return;/* TODO */}
- });
-};
-
-$w.Event = Event;
-$debug("Defining MouseEvent");
-/*
-* mouseevent.js
-*/
-$debug("Defining MouseEvent");
-/*
-* uievent.js
-*/
-
-var $onblur,
- $onfocus,
- $onresize;/*
-* CSS2Properties - DOM Level 2 CSS
-*/
-var CSS2Properties = function(options){
- __extend__(this, __supportedStyles__);
- __cssTextToStyles__(this, options.cssText?options.cssText:"");
-};
-__extend__(CSS2Properties.prototype, {
- get cssText(){
- return Array.prototype.apply.join(this,[';\n']);
- },
- set cssText(cssText){
- __cssTextToStyles__(this, cssText);
- },
- getPropertyCSSValue : function(){
-
- },
- getPropertyPriority : function(){
-
- },
- getPropertyValue : function(name){
- var camelCase = name.replace(/\-(\w)/g, function(all, letter){
- return letter.toUpperCase();
- });
- var i, value = this[camelCase];
- if(value === undefined){
- for(i=0;i<this.length;i++){
- if(this[i]===name){
- return this[i];
- }
- }
- }
- return value;
- },
- item : function(index){
- return this[index];
- },
- removeProperty: function(){
-
- },
- setProperty: function(){
-
- },
- toString:function(){
- if (this.length >0){
- return "{\n\t"+Array.prototype.join.apply(this,[';\n\t'])+"}\n";
- }else{
- return '';
- }
- }
-});
-
-var __cssTextToStyles__ = function(css2props, cssText){
- var styleArray=[];
- var style, name, value, camelCaseName, w3cName, styles = cssText.split(';');
- for ( var i = 0; i < styles.length; i++ ) {
- //$log("Adding style property " + styles[i]);
- style = styles[i].split(':');
- if ( style.length == 2 ){
- //keep a reference to the original name of the style which was set
- //this is the w3c style setting method.
- styleArray[styleArray.length] = w3cName = styles[i];
- //camel case for dash case
- value = trim(style[1]);
- camelCaseName = trim(style[0].replace(/\-(\w)/g, function(all, letter){
- return letter.toUpperCase();
- }));
- $debug('CSS Style Name: ' + camelCaseName);
- if(css2props[camelCaseName]!==undefined){
- //set the value internally with camelcase name
- $debug('Setting css ' + camelCaseName + ' to ' + value);
- css2props[camelCaseName] = value;
- };
- }
- }
- __setArray__(css2props, styleArray);
-};
-//Obviously these arent all supported but by commenting out various sections
-//this provides a single location to configure what is exposed as supported.
-//These will likely need to be functional getters/setters in the future to deal with
-//the variation on input formulations
-var __supportedStyles__ = {
- azimuth: "",
- background: "",
- backgroundAttachment: "",
- backgroundColor: "",
- backgroundImage: "",
- backgroundPosition: "",
- backgroundRepeat: "",
- border: "",
- borderBottom: "",
- borderBottomColor: "",
- borderBottomStyle: "",
- borderBottomWidth: "",
- borderCollapse: "",
- borderColor: "",
- borderLeft: "",
- borderLeftColor: "",
- borderLeftStyle: "",
- borderLeftWidth: "",
- borderRight: "",
- borderRightColor: "",
- borderRightStyle: "",
- borderRightWidth: "",
- borderSpacing: "",
- borderStyle: "",
- borderTop: "",
- borderTopColor: "",
- borderTopStyle: "",
- borderTopWidth: "",
- borderWidth: "",
- bottom: "",
- captionSide: "",
- clear: "",
- clip: "",
- color: "",
- content: "",
- counterIncrement: "",
- counterReset: "",
- cssFloat: "",
- cue: "",
- cueAfter: "",
- cueBefore: "",
- cursor: "",
- direction: "",
- display: "",
- elevation: "",
- emptyCells: "",
- font: "",
- fontFamily: "",
- fontSize: "",
- fontSizeAdjust: "",
- fontStretch: "",
- fontStyle: "",
- fontVariant: "",
- fontWeight: "",
- height: "",
- left: "",
- letterSpacing: "",
- lineHeight: "",
- listStyle: "",
- listStyleImage: "",
- listStylePosition: "",
- listStyleType: "",
- margin: "",
- marginBottom: "",
- marginLeft: "",
- marginRight: "",
- marginTop: "",
- markerOffset: "",
- marks: "",
- maxHeight: "",
- maxWidth: "",
- minHeight: "",
- minWidth: "",
- opacity: 1,
- orphans: "",
- outline: "",
- outlineColor: "",
- outlineOffset: "",
- outlineStyle: "",
- outlineWidth: "",
- overflow: "",
- overflowX: "",
- overflowY: "",
- padding: "",
- paddingBottom: "",
- paddingLeft: "",
- paddingRight: "",
- paddingTop: "",
- page: "",
- pageBreakAfter: "",
- pageBreakBefore: "",
- pageBreakInside: "",
- pause: "",
- pauseAfter: "",
- pauseBefore: "",
- pitch: "",
- pitchRange: "",
- position: "",
- quotes: "",
- richness: "",
- right: "",
- size: "",
- speak: "",
- speakHeader: "",
- speakNumeral: "",
- speakPunctuation: "",
- speechRate: "",
- stress: "",
- tableLayout: "",
- textAlign: "",
- textDecoration: "",
- textIndent: "",
- textShadow: "",
- textTransform: "",
- top: "",
- unicodeBidi: "",
- verticalAlign: "",
- visibility: "",
- voiceFamily: "",
- volume: "",
- whiteSpace: "",
- widows: "",
- width: "",
- wordSpacing: "",
- zIndex: ""
-};
-
-$w.CSS2Properties = CSS2Properties;/*
-* CSSRule - DOM Level 2
-*/
-var CSSRule = function(options){
- var $style,
- $selectorText = options.selectorText?options.selectorText:"";
- $style = new CSS2Properties({
- cssText:options.cssText?options.cssText:null
- });
- return __extend__(this, {
- get style(){
- return $style;
- },
- get selectorText(){
- return $selectorText;
- },
- set selectorText(selectorText){
- $selectorText = selectorText;
- }
- });
-};
-$w.CSSRule = CSSRule;
-/*
-* CSSStyleSheet - DOM Level 2
-*/
-var CSSStyleSheet = function(options){
- var $cssRules,
- $disabled = options.disabled?options.disabled:false,
- $href = options.href?options.href:null,
- $parentStyleSheet = options.parentStyleSheet?options.parentStyleSheet:null,
- $title = options.title?options.title:"",
- $type = "text/css";
-
- function parseStyleSheet(text){
- $debug("parsing css");
- //this is pretty ugly, but text is the entire text of a stylesheet
- var cssRules = [];
- if (!text) text = "";
- text = trim(text.replace(/\/\*(\r|\n|.)*\*\//g,""));
- // TODO: @import ?
- var blocks = text.split("}");
- blocks.pop();
- var i, len = blocks.length;
- var definition_block, properties, selectors;
- for (i=0; i<len; i++){
- definition_block = blocks[i].split("{");
- if(definition_block.length === 2){
- selectors = definition_block[0].split(",");
- for(var j=0;j<selectors.length;j++){
- cssRules.push(new CSSRule({
- selectorText:selectors[j],
- cssText:definition_block[1]
- }));
- }
- __setArray__($cssRules, cssRules);
- }
- }
- };
- parseStyleSheet(options.text);
- return __extend__(this, {
- get cssRules(){return $cssRules;},
- get rule(){return $cssRules;},//IE - may be deprecated
- get href(){return $href;},
- get parentStyleSheet(){return $parentStyleSheet;},
- get title(){return $title;},
- get type(){return $type;},
- addRule: function(selector, style, index){/*TODO*/},
- deleteRule: function(index){/*TODO*/},
- insertRule: function(rule, index){/*TODO*/},
- removeRule: function(index){this.deleteRule(index);}//IE - may be deprecated
- });
-};
-
-$w.CSSStyleSheet = CSSStyleSheet;
-/*
-* location.js
-* - requires env
-*/
-$debug("Initializing Window Location.");
-//the current location
-var $location = '';
-
-$w.__defineSetter__("location", function(url){
- //$w.onunload();
- $location = $env.location(url);
- setHistory($location);
- $w.document.load($location);
-});
-
-$w.__defineGetter__("location", function(url){
- var hash = new RegExp('(\\#.*)'),
- hostname = new RegExp('\/\/([^\:\/]+)'),
- pathname = new RegExp('(\/[^\\?\\#]*)'),
- port = new RegExp('\:(\\d+)\/'),
- protocol = new RegExp('(^\\w*\:)'),
- search = new RegExp('(\\?[^\\#]*)');
- return {
- get hash(){
- var m = hash.exec(this.href);
- return m&&m.length>1?m[1]:"";
- },
- set hash(_hash){
- //setting the hash is the only property of the location object
- //that doesn't cause the window to reload
- _hash = _hash.indexOf('#')===0?_hash:"#"+_hash;
- $location = this.protocol + this.host + this.pathname +
- this.search + _hash;
- setHistory(_hash, "hash");
- },
- get host(){
- return this.hostname + (this.port !== "")?":"+this.port:"";
- },
- set host(_host){
- $w.location = this.protocol + _host + this.pathname +
- this.search + this.hash;
- },
- get hostname(){
- var m = hostname.exec(this.href);
- return m&&m.length>1?m[1]:"";
- },
- set hostname(_hostname){
- $w.location = this.protocol + _hostname + ((this.port==="")?"":(":"+this.port)) +
- this.pathname + this.search + this.hash;
- },
- get href(){
- //This is the only env specific function
- return $location;
- },
- set href(url){
- $w.location = url;
- },
- get pathname(){
- var m = this.href;
- m = pathname.exec(m.substring(m.indexOf(this.hostname)));
- return m&&m.length>1?m[1]:"/";
- },
- set pathname(_pathname){
- $w.location = this.protocol + this.host + _pathname +
- this.search + this.hash;
- },
- get port(){
- var m = port.exec(this.href);
- return m&&m.length>1?m[1]:"";
- },
- set port(_port){
- $w.location = this.protocol + this.hostname + ":"+_port + this.pathname +
- this.search + this.hash;
- },
- get protocol(){
- return protocol.exec(this.href)[0];
- },
- set protocol(_protocol){
- $w.location = _protocol + this.host + this.pathname +
- this.search + this.hash;
- },
- get search(){
- var m = search.exec(this.href);
- return m&&m.length>1?m[1]:"";
- },
- set search(_search){
- $w.location = this.protocol + this.host + this.pathname +
- _search + this.hash;
- },
- toString: function(){
- return this.href;
- },
- reload: function(force){
- //TODO
- },
- replace: function(url){
- //TODO
- }
- };
-});
-
-/*
-* history.js
-*/
-
- $info("Initializing Window History.");
- $currentHistoryIndex = 0;
- $history = [];
-
- // Browser History
- $w.__defineGetter__("history", function(){
- return {
- get length(){ return $history.length; },
- back : function(count){
- if(count){
- go(-count);
- }else{go(-1);}
- },
- forward : function(count){
- if(count){
- go(count);
- }else{go(1);}
- },
- go : function(target){
- if(typeof target == "number"){
- target = $currentHistoryIndex+target;
- if(target > -1 && target < $history.length){
- if($history[target].location == "hash"){
- $w.location.hash = $history[target].value;
- }else{
- $w.location = $history[target].value;
- }
- $currentHistoryIndex = target;
- //remove the last item added to the history
- //since we are moving inside the history
- $history.pop();
- }
- }else{
- //TODO: walk throu the history and find the 'best match'
- }
- }
- };
- });
-
- //Here locationPart is the particutlar method/attribute
- // of the location object that was modified. This allows us
- // to modify the correct portion of the location object
- // when we navigate the history
- var setHistory = function( value, locationPart){
- $info("adding value to history: " +value);
- $currentHistoryIndex++;
- $history.push({
- location: locationPart||"href",
- value: value
- });
- };
- /*
-* navigator.js
-* - requires env
-*/
-$debug("Initializing Window Navigator.");
-
-var $appCodeName = $env.appCodeName;//eg "Mozilla"
-var $appName = $env.appName;//eg "Gecko/20070309 Firefox/2.0.0.3"
-
-// Browser Navigator
-$w.__defineGetter__("navigator", function(){
- return {
- get appCodeName(){
- return $appCodeName;
- },
- get appName(){
- return $appName;
- },
- get appVersion(){
- return $version +" ("+
- $w.navigator.platform +"; "+
- "U; "+//?
- $env.os_name+" "+$env.os_arch+" "+$env.os_version+"; "+
- $env.lang+"; "+
- "rv:"+$revision+
- ")";
- },
- get cookieEnabled(){
- return true;
- },
- get mimeTypes(){
- return [];
- },
- get platform(){
- return $env.platform;
- },
- get plugins(){
- return [];
- },
- get userAgent(){
- return $w.navigator.appCodeName + "/" + $w.navigator.appVersion + " " + $w.navigator.appName;
- },
- javaEnabled : function(){
- return $env.javaEnabled;
- }
- };
-});
-
-/*
-* timer.js
-*/
-
-
-$debug("Initializing Window Timer.");
-
-//private
-var $timers = [];
-
-$w.setTimeout = function(fn, time){
- var num;
- return num = window.setInterval(function(){
- fn();
- window.clearInterval(num);
- }, time);
-};
-
-window.setInterval = function(fn, time){
- var num = $timers.length+1;
-
- if (typeof fn == 'string') {
- var fnstr = fn;
- fn = function() {
- eval(fnstr);
- };
- }
- if(time===0){
- fn();
- }else{
- $debug("Creating timer number "+num);
- $timers[num] = new $env.timer(fn, time);
- $timers[num].start();
- }
- return num;
-};
-
-window.clearInterval = window.clearTimeout = function(num){
- if ( $timers[num] ) {
-
- $debug("Deleting timer number "+num);
- $timers[num].stop();
- delete $timers[num];
- }
-};
- /*
-* event.js
-*/
-// Window Events
-$debug("Initializing Window Event.");
-var $events = [],
- $onerror,
- $onload,
- $onunload;
-
-$w.addEventListener = function(type, fn){
- //$log("adding event listener " + type);
- if ( !this.uuid ) {
- this.uuid = $events.length;
- $events[this.uuid] = {};
- }
- if ( !$events[this.uuid][type] ){
- $events[this.uuid][type] = [];
- }
- if ( $events[this.uuid][type].indexOf( fn ) < 0 ){
- $events[this.uuid][type].push( fn );
- }
-};
-
-$w.removeEventListener = function(type, fn){
- if ( !this.uuid ) {
- this.uuid = $events.length;
- $events[this.uuid] = {};
- }
- if ( !$events[this.uuid][type] ){
- $events[this.uuid][type] = [];
- }
- $events[this.uuid][type] =
- $events[this.uuid][type].filter(function(f){
- return f != fn;
- });
-};
-
-$w.dispatchEvent = function(event){
- $debug("dispatching event " + event.type);
- //the window scope defines the $event object, for IE(^^^) compatibility;
- $event = event;
- if (!event.target) {
- event.target = this;
- }
- $debug("event target: " + event.target);
- if ( event.type ) {
- if ( this.uuid && $events[this.uuid][event.type] ) {
- var _this = this;
- $events[this.uuid][event.type].forEach(function(fn){
- $debug('calling event handler '+fn+' on target '+_this);
- fn.call( _this, event );
- });
- }
-
- if (this["on" + event.type]) {
- $debug('calling event handler '+event.type+' on target '+this);
- this["on" + event.type].call(_this, event);
- }
- }
- if(this.parentNode){
- this.parentNode.dispatchEvent.call(this.parentNode,event);
- }
-};
-
-$w.__defineGetter__('onerror', function(){
- return function(){
- //$w.dispatchEvent('error');
- };
-});
-
-$w.__defineSetter__('onerror', function(fn){
- //$w.addEventListener('error', fn);
-});
-
-/*$w.__defineGetter__('onload', function(){
- return function(){
- //var event = document.createEvent();
- //event.initEvent("load");
- //$w.dispatchEvent(event);
- };
-});
-
-$w.__defineSetter__('onload', function(fn){
- //$w.addEventListener('load', fn);
-});
-
-$w.__defineGetter__('onunload', function(){
- return function(){
- //$w.dispatchEvent('unload');
- };
-});
-
-$w.__defineSetter__('onunload', function(fn){
- //$w.addEventListener('unload', fn);
-});*//*
-* xhr.js
-*/
-$debug("Initializing Window XMLHttpRequest.");
-// XMLHttpRequest
-// Originally implemented by Yehuda Katz
-$w.XMLHttpRequest = function(){
- this.headers = {};
- this.responseHeaders = {};
- $debug("creating xhr");
-};
-
-XMLHttpRequest.prototype = {
- open: function(method, url, async, user, password){
- this.readyState = 1;
- if (async === false ){
- this.async = false;
- }else{ this.async = true; }
- this.method = method || "GET";
- this.url = $env.location(url);
- this.onreadystatechange();
- },
- setRequestHeader: function(header, value){
- this.headers[header] = value;
- },
- getResponseHeader: function(header){ },
- send: function(data){
- var _this = this;
-
- function makeRequest(){
- $env.connection(_this, function(){
- var responseXML = null;
- _this.__defineGetter__("responseXML", function(){
- if ( _this.responseText.match(/^\s*</) ) {
- if(responseXML){
- return responseXML;
-
- }else{
- try {
- $debug("parsing response text into xml document");
- responseXML = $domparser.parseFromString(_this.responseText+"");
- return responseXML;
- } catch(e) { return null;/*TODO: need to flag an error here*/}
- }
- }else{return null;}
- });
- }, data);
- _this.onreadystatechange();
- }
- if (this.async){
- $debug("XHR sending asynch;");
- $env.runAsync(makeRequest);
- }else{
- $debug("XHR sending synch;");
- makeRequest();
- }
- },
- abort: function(){
- //TODO
- },
- onreadystatechange: function(){
- //TODO
- },
- getResponseHeader: function(header){
- var rHeader, returnedHeaders;
- if (this.readyState < 3){
- throw new Error("INVALID_STATE_ERR");
- } else {
- returnedHeaders = [];
- for (rHeader in this.responseHeaders) {
- if (rHeader.match(new RegExp(header, "i")))
- returnedHeaders.push(this.responseHeaders[rHeader]);
- }
- if (returnedHeaders.length){ return returnedHeaders.join(", "); }
- }return null;
- },
- getAllResponseHeaders: function(){
- var header, returnedHeaders = [];
- if (this.readyState < 3){
- throw new Error("INVALID_STATE_ERR");
- } else {
- for (header in this.responseHeaders){
- returnedHeaders.push( header + ": " + this.responseHeaders[header] );
- }
- }return returnedHeaders.join("\r\n");
- },
- async: true,
- readyState: 0,
- responseText: "",
- status: 0
-};/*
-* css.js
-*/
-$debug("Initializing Window CSS");
-// returns a CSS2Properties object that represents the style
-// attributes and values used to render the specified element in this
-// window. Any length values are always expressed in pixel, or
-// absolute values.
-$w.getComputedStyle = function(elt, pseudo_elt){
- //TODO
- //this is a naive implementation
- $debug("Getting computed style");
- return elt?elt.style:new CSS2Properties({cssText:""});
-};/*
-* screen.js
-*/
-$debug("Initializing Window Screen.");
-
-var $availHeight = 600,
- $availWidth = 800,
- $colorDepth = 16,
- $height = 600,
- $width = 800;
-
-$w.__defineGetter__("screen", function(){
- return {
- get availHeight(){return $availHeight;},
- get availWidth(){return $availWidth;},
- get colorDepth(){return $colorDepth;},
- get height(){return $height;},
- get width(){return $width;}
- };
-});
-
-
-$w.moveBy = function(dx,dy){
- //TODO
-};
-
-$w.moveTo = function(x,y) {
- //TODO
-};
-
-/*$w.print = function(){
- //TODO
-};*/
-
-$w.resizeBy = function(dw, dh){
- $w.resizeTo($width+dw,$height+dh);
-};
-
-$w.resizeTo = function(width, height){
- $width = (width <= $availWidth) ? width : $availWidth;
- $height = (height <= $availHeight) ? height : $availHeight;
-};
-
-
-$w.scroll = function(x,y){
- //TODO
-};
-$w.scrollBy = function(dx, dy){
- //TODO
-};
-$w.scrollTo = function(x,y){
- //TODO
-};/*
-* dialog.js
-*/
-$debug("Initializing Window Dialogs.");
-$w.alert = function(message){
- $env.warn(message);
-};
-
-$w.confirm = function(question){
- //TODO
-};
-
-$w.prompt = function(message, defaultMsg){
- //TODO
-};/**
-* jQuery AOP - jQuery plugin to add features of aspect-oriented programming (AOP) to jQuery.
-* http://jquery-aop.googlecode.com/
-*
-* Licensed under the MIT license:
-* http://www.opensource.org/licenses/mit-license.php
-*
-* Version: 1.1
-*/
-window.$profiler;
-
-(function() {
-
- var _after = 1;
- var _before = 2;
- var _around = 3;
- var _intro = 4;
- var _regexEnabled = true;
-
- /**
- * Private weaving function.
- */
- var weaveOne = function(source, method, advice) {
-
- var old = source[method];
-
- var aspect;
- if (advice.type == _after)
- aspect = function() {
- var returnValue = old.apply(this, arguments);
- return advice.value.apply(this, [returnValue, method]);
- };
- else if (advice.type == _before)
- aspect = function() {
- advice.value.apply(this, [arguments, method]);
- return old.apply(this, arguments);
- };
- else if (advice.type == _intro)
- aspect = function() {
- return advice.value.apply(this, arguments);
- };
- else if (advice.type == _around) {
- aspect = function() {
- var invocation = { object: this, args: arguments };
- return advice.value.apply(invocation.object, [{ arguments: invocation.args, method: method, proceed :
- function() {
- return old.apply(invocation.object, invocation.args);
- }
- }] );
- };
- }
-
- aspect.unweave = function() {
- source[method] = old;
- pointcut = source = aspect = old = null;
- };
-
- source[method] = aspect;
-
- return aspect;
-
- };
-
-
- /**
- * Private weaver and pointcut parser.
- */
- var weave = function(pointcut, advice)
- {
-
- var source = (typeof(pointcut.target.prototype) != 'undefined') ? pointcut.target.prototype : pointcut.target;
- var advices = [];
-
- // If it's not an introduction and no method was found, try with regex...
- if (advice.type != _intro && typeof(source[pointcut.method]) == 'undefined')
- {
-
- for (var method in source)
- {
- if (source[method] != null && source[method] instanceof Function && method.match(pointcut.method))
- {
- advices[advices.length] = weaveOne(source, method, advice);
- }
- }
-
- if (advices.length == 0)
- throw 'No method: ' + pointcut.method;
-
- }
- else
- {
- // Return as an array of one element
- advices[0] = weaveOne(source, pointcut.method, advice);
- }
-
- return _regexEnabled ? advices : advices[0];
-
- };
-
- window.$profiler =
- {
- /**
- * Creates an advice after the defined point-cut. The advice will be executed after the point-cut method
- * has completed execution successfully, and will receive one parameter with the result of the execution.
- * This function returns an array of weaved aspects (Function).
- *
- * @example jQuery.aop.after( {target: window, method: 'MyGlobalMethod'}, function(result) { alert('Returned: ' + result); } );
- * @result Array<Function>
- *
- * @example jQuery.aop.after( {target: String, method: 'indexOf'}, function(index) { alert('Result found at: ' + index + ' on:' + this); } );
- * @result Array<Function>
- *
- * @name after
- * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
- * @option Object target Target object to be weaved.
- * @option String method Name of the function to be weaved. Regex are supported, but not on built-in objects.
- * @param Function advice Function containing the code that will get called after the execution of the point-cut. It receives one parameter
- * with the result of the point-cut's execution.
- *
- * @type Array<Function>
- * @cat Plugins/General
- */
- after : function(pointcut, advice)
- {
- return weave( pointcut, { type: _after, value: advice } );
- },
-
- /**
- * Creates an advice before the defined point-cut. The advice will be executed before the point-cut method
- * but cannot modify the behavior of the method, or prevent its execution.
- * This function returns an array of weaved aspects (Function).
- *
- * @example jQuery.aop.before( {target: window, method: 'MyGlobalMethod'}, function() { alert('About to execute MyGlobalMethod'); } );
- * @result Array<Function>
- *
- * @example jQuery.aop.before( {target: String, method: 'indexOf'}, function(index) { alert('About to execute String.indexOf on: ' + this); } );
- * @result Array<Function>
- *
- * @name before
- * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
- * @option Object target Target object to be weaved.
- * @option String method Name of the function to be weaved. Regex are supported, but not on built-in objects.
- * @param Function advice Function containing the code that will get called before the execution of the point-cut.
- *
- * @type Array<Function>
- * @cat Plugins/General
- */
- before : function(pointcut, advice)
- {
- return weave( pointcut, { type: _before, value: advice } );
- },
-
-
- /**
- * Creates an advice 'around' the defined point-cut. This type of advice can control the point-cut method execution by calling
- * the functions '.proceed()' on the 'invocation' object, and also, can modify the arguments collection before sending them to the function call.
- * This function returns an array of weaved aspects (Function).
- *
- * @example jQuery.aop.around( {target: window, method: 'MyGlobalMethod'}, function(invocation) {
- * alert('# of Arguments: ' + invocation.arguments.length);
- * return invocation.proceed();
- * } );
- * @result Array<Function>
- *
- * @example jQuery.aop.around( {target: String, method: 'indexOf'}, function(invocation) {
- * alert('Searching: ' + invocation.arguments[0] + ' on: ' + this);
- * return invocation.proceed();
- * } );
- * @result Array<Function>
- *
- * @example jQuery.aop.around( {target: window, method: /Get(\d+)/}, function(invocation) {
- * alert('Executing ' + invocation.method);
- * return invocation.proceed();
- * } );
- * @desc Matches all global methods starting with 'Get' and followed by a number.
- * @result Array<Function>
- *
- *
- * @name around
- * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
- * @option Object target Target object to be weaved.
- * @option String method Name of the function to be weaved. Regex are supported, but not on built-in objects.
- * @param Function advice Function containing the code that will get called around the execution of the point-cut. This advice will be called with one
- * argument containing one function '.proceed()', the collection of arguments '.arguments', and the matched method name '.method'.
- *
- * @type Array<Function>
- * @cat Plugins/General
- */
- around : function(pointcut, advice)
- {
- return weave( pointcut, { type: _around, value: advice } );
- },
-
- /**
- * Creates an introduction on the defined point-cut. This type of advice replaces any existing methods with the same
- * name. To restore them, just unweave it.
- * This function returns an array with only one weaved aspect (Function).
- *
- * @example jQuery.aop.introduction( {target: window, method: 'MyGlobalMethod'}, function(result) { alert('Returned: ' + result); } );
- * @result Array<Function>
- *
- * @example jQuery.aop.introduction( {target: String, method: 'log'}, function() { alert('Console: ' + this); } );
- * @result Array<Function>
- *
- * @name introduction
- * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
- * @option Object target Target object to be weaved.
- * @option String method Name of the function to be weaved.
- * @param Function advice Function containing the code that will be executed on the point-cut.
- *
- * @type Array<Function>
- * @cat Plugins/General
- */
- introduction : function(pointcut, advice)
- {
- return weave( pointcut, { type: _intro, value: advice } );
- },
-
- /**
- * Configures global options.
- *
- * @name setup
- * @param Map settings Configuration options.
- * @option Boolean regexMatch Enables/disables regex matching of method names.
- *
- * @example jQuery.aop.setup( { regexMatch: false } );
- * @desc Disable regex matching.
- *
- * @type Void
- * @cat Plugins/General
- */
- setup: function(settings)
- {
- _regexEnabled = settings.regexMatch;
- }
- };
-
-})();
-
-
-var $profile = window.$profile = {};
-
-
-var __profile__ = function(id, invocation){
- var start = new Date().getTime();
- var retval = invocation.proceed();
- var finish = new Date().getTime();
- $profile[id] = $profile[id] ? $profile[id] : {};
- $profile[id].callCount = $profile[id].callCount !== undefined ?
- $profile[id].callCount+1 : 0;
- $profile[id].times = $profile[id].times ? $profile[id].times : [];
- $profile[id].times[$profile[id].callCount++] = (finish-start);
- return retval;
-};
-
-
-window.$profiler.stats = function(raw){
- var max = 0,
- avg = -1,
- min = 10000000,
- own = 0;
- for(var i = 0;i<raw.length;i++){
- if(raw[i] > 0){
- own += raw[i];
- };
- if(raw[i] > max){
- max = raw[i];
- }
- if(raw[i] < min){
- min = raw[i];
- }
- }
- avg = Math.floor(own/raw.length);
- return {
- min: min,
- max: max,
- avg: avg,
- own: own
- };
-};
-
-if(Envjs.profile){
- /**
- * CSS2Properties
- */
- window.$profiler.around({ target: CSS2Properties, method:"getPropertyCSSValue"}, function(invocation) {
- return __profile__("CSS2Properties.getPropertyCSSValue", invocation);
- });
- window.$profiler.around({ target: CSS2Properties, method:"getPropertyPriority"}, function(invocation) {
- return __profile__("CSS2Properties.getPropertyPriority", invocation);
- });
- window.$profiler.around({ target: CSS2Properties, method:"getPropertyValue"}, function(invocation) {
- return __profile__("CSS2Properties.getPropertyValue", invocation);
- });
- window.$profiler.around({ target: CSS2Properties, method:"item"}, function(invocation) {
- return __profile__("CSS2Properties.item", invocation);
- });
- window.$profiler.around({ target: CSS2Properties, method:"removeProperty"}, function(invocation) {
- return __profile__("CSS2Properties.removeProperty", invocation);
- });
- window.$profiler.around({ target: CSS2Properties, method:"setProperty"}, function(invocation) {
- return __profile__("CSS2Properties.setProperty", invocation);
- });
- window.$profiler.around({ target: CSS2Properties, method:"toString"}, function(invocation) {
- return __profile__("CSS2Properties.toString", invocation);
- });
-
-
- /**
- * DOMNode
- */
-
- window.$profiler.around({ target: DOMNode, method:"hasAttributes"}, function(invocation) {
- return __profile__("DOMNode.hasAttributes", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"insertBefore"}, function(invocation) {
- return __profile__("DOMNode.insertBefore", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"replaceChild"}, function(invocation) {
- return __profile__("DOMNode.replaceChild", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"removeChild"}, function(invocation) {
- return __profile__("DOMNode.removeChild", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"replaceChild"}, function(invocation) {
- return __profile__("DOMNode.replaceChild", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"appendChild"}, function(invocation) {
- return __profile__("DOMNode.appendChild", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"hasChildNodes"}, function(invocation) {
- return __profile__("DOMNode.hasChildNodes", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"cloneNode"}, function(invocation) {
- return __profile__("DOMNode.cloneNode", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"normalize"}, function(invocation) {
- return __profile__("DOMNode.normalize", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"isSupported"}, function(invocation) {
- return __profile__("DOMNode.isSupported", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"getElementsByTagName"}, function(invocation) {
- return __profile__("DOMNode.getElementsByTagName", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"getElementsByTagNameNS"}, function(invocation) {
- return __profile__("DOMNode.getElementsByTagNameNS", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"importNode"}, function(invocation) {
- return __profile__("DOMNode.importNode", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"contains"}, function(invocation) {
- return __profile__("DOMNode.contains", invocation);
- });
- window.$profiler.around({ target: DOMNode, method:"compareDocumentPosition"}, function(invocation) {
- return __profile__("DOMNode.compareDocumentPosition", invocation);
- });
-
-
- /**
- * DOMDocument
- */
- window.$profiler.around({ target: DOMDocument, method:"addEventListener"}, function(invocation) {
- return __profile__("DOMDocument.addEventListener", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"removeEventListener"}, function(invocation) {
- return __profile__("DOMDocument.removeEventListener", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"attachEvent"}, function(invocation) {
- return __profile__("DOMDocument.attachEvent", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"detachEvent"}, function(invocation) {
- return __profile__("DOMDocument.detachEvent", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"dispatchEvent"}, function(invocation) {
- return __profile__("DOMDocument.dispatchEvent", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"loadXML"}, function(invocation) {
- return __profile__("DOMDocument.loadXML", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"load"}, function(invocation) {
- return __profile__("DOMDocument.load", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createEvent"}, function(invocation) {
- return __profile__("DOMDocument.createEvent", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createExpression"}, function(invocation) {
- return __profile__("DOMDocument.createExpression", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createElement"}, function(invocation) {
- return __profile__("DOMDocument.createElement", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createDocumentFragment"}, function(invocation) {
- return __profile__("DOMDocument.createDocumentFragment", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createTextNode"}, function(invocation) {
- return __profile__("DOMDocument.createTextNode", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createComment"}, function(invocation) {
- return __profile__("DOMDocument.createComment", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createCDATASection"}, function(invocation) {
- return __profile__("DOMDocument.createCDATASection", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createProcessingInstruction"}, function(invocation) {
- return __profile__("DOMDocument.createProcessingInstruction", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createAttribute"}, function(invocation) {
- return __profile__("DOMDocument.createAttribute", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createElementNS"}, function(invocation) {
- return __profile__("DOMDocument.createElementNS", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createAttributeNS"}, function(invocation) {
- return __profile__("DOMDocument.createAttributeNS", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"createNamespace"}, function(invocation) {
- return __profile__("DOMDocument.createNamespace", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"getElementById"}, function(invocation) {
- return __profile__("DOMDocument.getElementById", invocation);
- });
- window.$profiler.around({ target: DOMDocument, method:"normalizeDocument"}, function(invocation) {
- return __profile__("DOMDocument.normalizeDocument", invocation);
- });
-
-
- /**
- * HTMLDocument
- */
- window.$profiler.around({ target: HTMLDocument, method:"createElement"}, function(invocation) {
- return __profile__("HTMLDocument.createElement", invocation);
- });
-
- /**
- * DOMParser
- */
- window.$profiler.around({ target: DOMParser, method:"parseFromString"}, function(invocation) {
- return __profile__("DOMParser.parseFromString", invocation);
- });
-
- /**
- * DOMNodeList
- */
- window.$profiler.around({ target: DOMNodeList, method:"item"}, function(invocation) {
- return __profile__("DOMNode.item", invocation);
- });
- window.$profiler.around({ target: DOMNodeList, method:"toString"}, function(invocation) {
- return __profile__("DOMNode.toString", invocation);
- });
-
- /**
- * XMLP
- */
- window.$profiler.around({ target: XMLP, method:"_addAttribute"}, function(invocation) {
- return __profile__("XMLP._addAttribute", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_checkStructure"}, function(invocation) {
- return __profile__("XMLP._checkStructure", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_clearAttributes"}, function(invocation) {
- return __profile__("XMLP._clearAttributes", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_findAttributeIndex"}, function(invocation) {
- return __profile__("XMLP._findAttributeIndex", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"getAttributeCount"}, function(invocation) {
- return __profile__("XMLP.getAttributeCount", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"getAttributeName"}, function(invocation) {
- return __profile__("XMLP.getAttributeName", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"getAttributeValue"}, function(invocation) {
- return __profile__("XMLP.getAttributeValue", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"getAttributeValueByName"}, function(invocation) {
- return __profile__("XMLP.getAttributeValueByName", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"getColumnNumber"}, function(invocation) {
- return __profile__("XMLP.getColumnNumber", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"getContentBegin"}, function(invocation) {
- return __profile__("XMLP.getContentBegin", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"getContentEnd"}, function(invocation) {
- return __profile__("XMLP.getContentEnd", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"getLineNumber"}, function(invocation) {
- return __profile__("XMLP.getLineNumber", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"getName"}, function(invocation) {
- return __profile__("XMLP.getName", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"next"}, function(invocation) {
- return __profile__("XMLP.next", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_parse"}, function(invocation) {
- return __profile__("XMLP._parse", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_parse"}, function(invocation) {
- return __profile__("XMLP._parse", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_parseAttribute"}, function(invocation) {
- return __profile__("XMLP._parseAttribute", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_parseCDATA"}, function(invocation) {
- return __profile__("XMLP._parseCDATA", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_parseComment"}, function(invocation) {
- return __profile__("XMLP._parseComment", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_parseDTD"}, function(invocation) {
- return __profile__("XMLP._parseDTD", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_parseElement"}, function(invocation) {
- return __profile__("XMLP._parseElement", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_parseEntity"}, function(invocation) {
- return __profile__("XMLP._parseEntity", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_parsePI"}, function(invocation) {
- return __profile__("XMLP._parsePI", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_parseText"}, function(invocation) {
- return __profile__("XMLP._parseText", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_replaceEntities"}, function(invocation) {
- return __profile__("XMLP._replaceEntities", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_replaceEntity"}, function(invocation) {
- return __profile__("XMLP._replaceEntity", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_setContent"}, function(invocation) {
- return __profile__("XMLP._setContent", invocation);
- });
- window.$profiler.around({ target: XMLP, method:"_setErr"}, function(invocation) {
- return __profile__("XMLP._setErr", invocation);
- });
-
-
- /**
- * SAXDriver
- */
- window.$profiler.around({ target: SAXDriver, method:"parse"}, function(invocation) {
- return __profile__("SAXDriver.parse", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"setDocumentHandler"}, function(invocation) {
- return __profile__("SAXDriver.setDocumentHandler", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"setErrorHandler"}, function(invocation) {
- return __profile__("SAXDriver.setErrorHandler", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"setLexicalHandler"}, function(invocation) {
- return __profile__("SAXDriver.setLexicalHandler", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"getColumnNumber"}, function(invocation) {
- return __profile__("SAXDriver.getColumnNumber", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"getLineNumber"}, function(invocation) {
- return __profile__("SAXDriver.getLineNumber", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"getMessage"}, function(invocation) {
- return __profile__("SAXDriver.getMessage", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"getPublicId"}, function(invocation) {
- return __profile__("SAXDriver.getPublicId", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"getSystemId"}, function(invocation) {
- return __profile__("SAXDriver.getSystemId", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"getLength"}, function(invocation) {
- return __profile__("SAXDriver.getLength", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"getName"}, function(invocation) {
- return __profile__("SAXDriver.getName", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"getValue"}, function(invocation) {
- return __profile__("SAXDriver.getValue", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"getValueByName"}, function(invocation) {
- return __profile__("SAXDriver.getValueByName", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"_fireError"}, function(invocation) {
- return __profile__("SAXDriver._fireError", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"_fireEvent"}, function(invocation) {
- return __profile__("SAXDriver._fireEvent", invocation);
- });
- window.$profiler.around({ target: SAXDriver, method:"_parseLoop"}, function(invocation) {
- return __profile__("SAXDriver._parseLoop", invocation);
- });
-
- /**
- * SAXStrings
- */
- window.$profiler.around({ target: SAXStrings, method:"getColumnNumber"}, function(invocation) {
- return __profile__("SAXStrings.getColumnNumber", invocation);
- });
- window.$profiler.around({ target: SAXStrings, method:"getLineNumber"}, function(invocation) {
- return __profile__("SAXStrings.getLineNumber", invocation);
- });
- window.$profiler.around({ target: SAXStrings, method:"indexOfNonWhitespace"}, function(invocation) {
- return __profile__("SAXStrings.indexOfNonWhitespace", invocation);
- });
- window.$profiler.around({ target: SAXStrings, method:"indexOfWhitespace"}, function(invocation) {
- return __profile__("SAXStrings.indexOfWhitespace", invocation);
- });
- window.$profiler.around({ target: SAXStrings, method:"isEmpty"}, function(invocation) {
- return __profile__("SAXStrings.isEmpty", invocation);
- });
- window.$profiler.around({ target: SAXStrings, method:"lastIndexOfNonWhitespace"}, function(invocation) {
- return __profile__("SAXStrings.lastIndexOfNonWhitespace", invocation);
- });
- window.$profiler.around({ target: SAXStrings, method:"replace"}, function(invocation) {
- return __profile__("SAXStrings.replace", invocation);
- });
-
- /**
- * Stack - SAX Utility
- window.$profiler.around({ target: Stack, method:"clear"}, function(invocation) {
- return __profile__("Stack.clear", invocation);
- });
- window.$profiler.around({ target: Stack, method:"count"}, function(invocation) {
- return __profile__("Stack.count", invocation);
- });
- window.$profiler.around({ target: Stack, method:"destroy"}, function(invocation) {
- return __profile__("Stack.destroy", invocation);
- });
- window.$profiler.around({ target: Stack, method:"peek"}, function(invocation) {
- return __profile__("Stack.peek", invocation);
- });
- window.$profiler.around({ target: Stack, method:"pop"}, function(invocation) {
- return __profile__("Stack.pop", invocation);
- });
- window.$profiler.around({ target: Stack, method:"push"}, function(invocation) {
- return __profile__("Stack.push", invocation);
- });
- */
-}
-
-/*
-* document.js
-*
-* DOM Level 2 /DOM level 3 (partial)
-*
-* This file adds the document object to the window and allows you
-* you to set the window.document using an html string or dom object.
-*
-*/
-
-// read only reference to the Document object
-
-$debug("Initializing window.document.");
-var $async = false;
-__extend__(HTMLDocument.prototype, {
- get async(){ return $async;},
- set async(async){ $async = async; },
- get baseURI(){ return $env.location('./'); },
- get URL(){ return $w.location.href; }
-});
-
-
-
-var $document = new HTMLDocument($implementation);
-$w.__defineGetter__("document", function(){
- return $document;
-});
-$debug("Defining document.cookie");
-/*
-* cookie.js
-* - requires env
-*/
-
-var $cookies = {
- persistent:{
- //domain - key on domain name {
- //path - key on path {
- //name - key on name {
- //value : cookie value
- //other cookie properties
- //}
- //}
- //}
- //expire - provides a timestamp for expiring the cookie
- //cookie - the cookie!
- },
- temporary:{//transient is a reserved word :(
- //like above
- }
-};
-
-//HTMLDocument cookie
-document.__defineSetter__("cookie", function(cookie){
- var i,name,value,properties = {},attr,attrs = cookie.split(";");
- //for now the strategy is to simply create a json object
- //and post it to a file in the .cookies.js file. I hate parsing
- //dates so I decided not to implement support for 'expires'
- //(which is deprecated) and instead focus on the easier 'max-age'
- //(which succeeds 'expires')
- cookie = {};//keyword properties of the cookie
- for(i=0;i<attrs.length;i++){
- attr = attrs[i].split("=");
- if(attr.length > 0){
- name = trim(attr[0]);
- value = trim(attr[1]);
- if(name=='max-age'){
- //we'll have to set a timer to check these
- //and garbage collect expired cookies
- cookie[name] = parseInt(value, 10);
- } else if(name=='domain'){
- if(domainValid(value)){
- cookie['domain']=value;
- }else{
- cookie['domain']=$w.location.domain;
- }
- } else if(name=='path'){
- //not sure of any special logic for path
- cookie['path'] = value;
- } else {
- //its not a cookie keyword so store it in our array of properties
- //and we'll serialize individually in a moment
- properties[name] = value;
- }
- }else{
- if(attr[0] == 'secure'){
- cookie[attr[0]] = true;
- }
- }
- }
- if(!cookie['max-age']){
- //it's a transient cookie so it only lasts as long as
- //the window.location remains the same
- mergeCookie($cookies.temporary, cookie, properties);
- }else if(cookie['max-age']===0){
- //delete the cookies
- //TODO
- }else{
- //the cookie is persistent
- mergeCookie($cookies.persistent, cookie, properties);
- persistCookies();
- }
-});
-
-document.__defineGetter__("cookie", function(c){
- //The cookies that are returned must belong to the same domain
- //and be at or below the current window.location.path. Also
- //we must check to see if the cookie was set to 'secure' in which
- //case we must check our current location.protocol to make sure it's
- //https:
- var allcookies = [], i;
- //TODO
-});
-
-
-
-var domainValid = function(domain){
- //make sure the domain
- //TODO
-};
-
-var mergeCookie = function(target, cookie, properties){
- var name, now;
- if(!target[cookie.domain]){
- target[cookie.domain] = {};
- }
- if(!target[cookie.domain][cookie.path]){
- target[cookie.domain][cookie.path] = {};
- }
- for(name in properties){
- now = new Date().getTime();
- target[cookie.domain][cookie.path][name] = {
- value:properties[name],
- "@env:secure":cookie.secure,
- "@env:max-age":cookie['max-age'],
- "@env:date-created":now,
- "@env:expiration":now + cookie['max-age']
- };
- }
-};
-
-var persistCookies = function(){
- //TODO
- //I think it should be done via $env so it can be customized
-};
-
-var loadCookies = function(){
- //TODO
- //should also be configurable via $env
-};
-
-//We simply use the default ajax get to load the .cookies.js file
-//if it doesn't exist we create it with a post. Cookies are maintained
-//in memory, but serialized with each set.
-$info("Loading Cookies");
-try{
- //TODO - load cookies
- loadCookies();
-}catch(e){
- //TODO - fail gracefully
-}
- /*
-* outro.js
-*/
-
-})(window, Envjs);
-
-}catch(e){
- Envjs.error("ERROR LOADING ENV : " + e + "\nLINE SOURCE:\n" + Envjs.lineSource(e));
-}