opoa-example
Advanced tools
Sorry, the diff of this file is not supported yet
| { | ||
| "name": "test", | ||
| "main": "./test1.js" | ||
| } |
| require('./test2'); | ||
| console.log(__filename) |
| alert(123) |
+1817
| ~function(){ | ||
| var impls = arguments; | ||
| var cached = {}; | ||
| function internal_require(i,o){ | ||
| if(typeof i=='number'){ | ||
| var exports = cached[i]; | ||
| if(!exports){ | ||
| cached[i] = exports = {}; | ||
| var id = './'+i; | ||
| var module = {exports:exports,id:id} | ||
| impls[i](cached[i],internal_require,module,id); | ||
| cached[i] = exports = module.exports; | ||
| } | ||
| if(o){ | ||
| for(i in exports){ | ||
| o[i] = exports[i]; | ||
| } | ||
| } | ||
| return o || exports; | ||
| }else{ | ||
| return this.require ? require(i) : {} | ||
| } | ||
| } | ||
| return internal_require(0,this); | ||
| }(function(exports,require){function DOMParser(options){ | ||
| this.options = options ||{locator:{}}; | ||
| } | ||
| DOMParser.prototype.parseFromString = function(source,mimeType){ | ||
| var options = this.options; | ||
| var sax = new XMLReader(); | ||
| var domBuilder = options.domBuilder || new DOMHandler(); | ||
| var errorHandler = options.errorHandler; | ||
| var locator = options.locator; | ||
| var defaultNSMap = options.xmlns||{}; | ||
| var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"} | ||
| if(locator){ | ||
| domBuilder.setDocumentLocator(locator) | ||
| } | ||
| sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); | ||
| sax.domBuilder = options.domBuilder || domBuilder; | ||
| if(/\/x?html?$/.test(mimeType)){ | ||
| entityMap.nbsp = '\xa0'; | ||
| entityMap.copy = '\xa9'; | ||
| defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; | ||
| } | ||
| if(source){ | ||
| sax.parse(source,defaultNSMap,entityMap); | ||
| }else{ | ||
| sax.errorHandler.error("invalid document source"); | ||
| } | ||
| return domBuilder.document; | ||
| } | ||
| function buildErrorHandler(errorImpl,domBuilder,locator){ | ||
| if(!errorImpl){ | ||
| if(domBuilder instanceof DOMHandler){ | ||
| return domBuilder; | ||
| } | ||
| errorImpl = domBuilder ; | ||
| } | ||
| var errorHandler = {} | ||
| var isCallback = errorImpl instanceof Function; | ||
| locator = locator||{} | ||
| function build(key){ | ||
| var fn = errorImpl[key]; | ||
| if(!fn){ | ||
| if(isCallback){ | ||
| fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; | ||
| }else{ | ||
| var i=arguments.length; | ||
| while(--i){ | ||
| if(fn = errorImpl[arguments[i]]){ | ||
| break; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| errorHandler[key] = fn && function(msg){ | ||
| fn(msg+_locator(locator)); | ||
| }||function(){}; | ||
| } | ||
| build('warning','warn'); | ||
| build('error','warn','warning'); | ||
| build('fatalError','warn','warning','error'); | ||
| return errorHandler; | ||
| } | ||
| function DOMHandler() { | ||
| this.cdata = false; | ||
| } | ||
| function position(locator,node){ | ||
| node.lineNumber = locator.lineNumber; | ||
| node.columnNumber = locator.columnNumber; | ||
| } | ||
| DOMHandler.prototype = { | ||
| startDocument : function() { | ||
| this.document = new DOMImplementation().createDocument(null, null, null); | ||
| if (this.locator) { | ||
| this.document.documentURI = this.locator.systemId; | ||
| } | ||
| }, | ||
| startElement:function(namespaceURI, localName, qName, attrs) { | ||
| var doc = this.document; | ||
| var el = doc.createElementNS(namespaceURI, qName||localName); | ||
| var len = attrs.length; | ||
| appendElement(this, el); | ||
| this.currentElement = el; | ||
| this.locator && position(this.locator,el) | ||
| for (var i = 0 ; i < len; i++) { | ||
| var namespaceURI = attrs.getURI(i); | ||
| var value = attrs.getValue(i); | ||
| var qName = attrs.getQName(i); | ||
| var attr = doc.createAttributeNS(namespaceURI, qName); | ||
| if( attr.getOffset){ | ||
| position(attr.getOffset(1),attr) | ||
| } | ||
| attr.value = attr.nodeValue = value; | ||
| el.setAttributeNode(attr) | ||
| } | ||
| }, | ||
| endElement:function(namespaceURI, localName, qName) { | ||
| var current = this.currentElement | ||
| var tagName = current.tagName; | ||
| this.currentElement = current.parentNode; | ||
| }, | ||
| startPrefixMapping:function(prefix, uri) { | ||
| }, | ||
| endPrefixMapping:function(prefix) { | ||
| }, | ||
| processingInstruction:function(target, data) { | ||
| var ins = this.document.createProcessingInstruction(target, data); | ||
| this.locator && position(this.locator,ins) | ||
| appendElement(this, ins); | ||
| }, | ||
| ignorableWhitespace:function(ch, start, length) { | ||
| }, | ||
| characters:function(chars, start, length) { | ||
| chars = _toString.apply(this,arguments) | ||
| if(this.currentElement && chars){ | ||
| if (this.cdata) { | ||
| var charNode = this.document.createCDATASection(chars); | ||
| this.currentElement.appendChild(charNode); | ||
| } else { | ||
| var charNode = this.document.createTextNode(chars); | ||
| this.currentElement.appendChild(charNode); | ||
| } | ||
| this.locator && position(this.locator,charNode) | ||
| } | ||
| }, | ||
| skippedEntity:function(name) { | ||
| }, | ||
| endDocument:function() { | ||
| this.document.normalize(); | ||
| }, | ||
| setDocumentLocator:function (locator) { | ||
| if(this.locator = locator){ | ||
| locator.lineNumber = 0; | ||
| } | ||
| }, | ||
| comment:function(chars, start, length) { | ||
| chars = _toString.apply(this,arguments) | ||
| var comm = this.document.createComment(chars); | ||
| this.locator && position(this.locator,comm) | ||
| appendElement(this, comm); | ||
| }, | ||
| startCDATA:function() { | ||
| this.cdata = true; | ||
| }, | ||
| endCDATA:function() { | ||
| this.cdata = false; | ||
| }, | ||
| startDTD:function(name, publicId, systemId) { | ||
| var impl = this.document.implementation; | ||
| if (impl && impl.createDocumentType) { | ||
| var dt = impl.createDocumentType(name, publicId, systemId); | ||
| this.locator && position(this.locator,dt) | ||
| appendElement(this, dt); | ||
| } | ||
| }, | ||
| warning:function(error) { | ||
| console.warn(error,_locator(this.locator)); | ||
| }, | ||
| error:function(error) { | ||
| console.error(error,_locator(this.locator)); | ||
| }, | ||
| fatalError:function(error) { | ||
| console.error(error,_locator(this.locator)); | ||
| throw error; | ||
| } | ||
| } | ||
| function _locator(l){ | ||
| if(l){ | ||
| return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' | ||
| } | ||
| } | ||
| function _toString(chars,start,length){ | ||
| if(typeof chars == 'string'){ | ||
| return chars.substr(start,length) | ||
| }else{ | ||
| if(chars.length >= start+length || start){ | ||
| return new java.lang.String(chars,start,length)+''; | ||
| } | ||
| return chars; | ||
| } | ||
| } | ||
| "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ | ||
| DOMHandler.prototype[key] = function(){return null} | ||
| }) | ||
| function appendElement (hander,node) { | ||
| if (!hander.currentElement) { | ||
| hander.document.appendChild(node); | ||
| } else { | ||
| hander.currentElement.appendChild(node); | ||
| } | ||
| } | ||
| if(typeof require == 'function'){ | ||
| var XMLReader = require(1).XMLReader; | ||
| var DOMImplementation = exports.DOMImplementation = require(2).DOMImplementation; | ||
| exports.XMLSerializer = require(2).XMLSerializer ; | ||
| exports.DOMParser = DOMParser; | ||
| } | ||
| },function(exports,require){ | ||
| var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ | ||
| var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\ux203F-\u2040]"); | ||
| var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$'); | ||
| var S_TAG = 0; | ||
| var S_ATTR = 1; | ||
| var S_ATTR_S=2; | ||
| var S_EQ = 3; | ||
| var S_V = 4; | ||
| var S_E = 5; | ||
| var S_S = 6; | ||
| var S_C = 7; | ||
| function XMLReader(){ | ||
| } | ||
| XMLReader.prototype = { | ||
| parse:function(source,defaultNSMap,entityMap){ | ||
| var domBuilder = this.domBuilder; | ||
| domBuilder.startDocument(); | ||
| _copy(defaultNSMap ,defaultNSMap = {}) | ||
| parse(source,defaultNSMap,entityMap, | ||
| domBuilder,this.errorHandler); | ||
| domBuilder.endDocument(); | ||
| } | ||
| } | ||
| function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ | ||
| function fixedFromCharCode(code) { | ||
| if (code > 0xffff) { | ||
| code -= 0x10000; | ||
| var surrogate1 = 0xd800 + (code >> 10) | ||
| , surrogate2 = 0xdc00 + (code & 0x3ff); | ||
| return String.fromCharCode(surrogate1, surrogate2); | ||
| } else { | ||
| return String.fromCharCode(code); | ||
| } | ||
| } | ||
| function entityReplacer(a){ | ||
| var k = a.slice(1,-1); | ||
| if(k in entityMap){ | ||
| return entityMap[k]; | ||
| }else if(k.charAt(0) === '#'){ | ||
| return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) | ||
| }else{ | ||
| errorHandler.error('entity not found:'+a); | ||
| return a; | ||
| } | ||
| } | ||
| function appendText(end){ | ||
| var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); | ||
| locator&&position(start); | ||
| domBuilder.characters(xt,0,end-start); | ||
| start = end | ||
| } | ||
| function position(start,m){ | ||
| while(start>=endPos && (m = linePattern.exec(source))){ | ||
| startPos = m.index; | ||
| endPos = startPos + m[0].length; | ||
| locator.lineNumber++; | ||
| } | ||
| locator.columnNumber = start-startPos+1; | ||
| } | ||
| var startPos = 0; | ||
| var endPos = 0; | ||
| var linePattern = /.+(?:\r\n?|\n)|.*$/g | ||
| var locator = domBuilder.locator; | ||
| var parseStack = [{currentNSMap:defaultNSMapCopy}] | ||
| var closeMap = {}; | ||
| var start = 0; | ||
| while(true){ | ||
| var i = source.indexOf('<',start); | ||
| if(i<0){ | ||
| if(!source.substr(start).match(/^\s*$/)){ | ||
| var doc = domBuilder.document; | ||
| var text = doc.createTextNode(source.substr(start)); | ||
| doc.appendChild(text); | ||
| domBuilder.currentElement = text; | ||
| } | ||
| return; | ||
| } | ||
| if(i>start){ | ||
| appendText(i); | ||
| } | ||
| switch(source.charAt(i+1)){ | ||
| case '/': | ||
| var end = source.indexOf('>',i+3); | ||
| var tagName = source.substring(i+2,end); | ||
| var config = parseStack.pop(); | ||
| var localNSMap = config.localNSMap; | ||
| if(config.tagName != tagName){ | ||
| errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName ); | ||
| } | ||
| domBuilder.endElement(config.uri,config.localName,tagName); | ||
| if(localNSMap){ | ||
| for(var prefix in localNSMap){ | ||
| domBuilder.endPrefixMapping(prefix) ; | ||
| } | ||
| } | ||
| end++; | ||
| break; | ||
| case '?': | ||
| locator&&position(i); | ||
| end = parseInstruction(source,i,domBuilder); | ||
| break; | ||
| case '!': | ||
| locator&&position(i); | ||
| end = parseDCC(source,i,domBuilder,errorHandler); | ||
| break; | ||
| default: | ||
| try{ | ||
| locator&&position(i); | ||
| var el = new ElementAttributes(); | ||
| var end = parseElementStartPart(source,i,el,entityReplacer,errorHandler); | ||
| var len = el.length; | ||
| if(len && locator){ | ||
| var backup = copyLocator(locator,{}); | ||
| for(var i = 0;i<len;i++){ | ||
| var a = el[i]; | ||
| position(a.offset); | ||
| a.offset = copyLocator(locator,{}); | ||
| } | ||
| copyLocator(backup,locator); | ||
| } | ||
| if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){ | ||
| el.closed = true; | ||
| if(!entityMap.nbsp){ | ||
| errorHandler.warning('unclosed xml attribute'); | ||
| } | ||
| } | ||
| appendElement(el,domBuilder,parseStack); | ||
| if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){ | ||
| end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder) | ||
| }else{ | ||
| end++; | ||
| } | ||
| }catch(e){ | ||
| errorHandler.error('element parse error: '+e); | ||
| end = -1; | ||
| } | ||
| } | ||
| if(end<0){ | ||
| appendText(i+1); | ||
| }else{ | ||
| start = end; | ||
| } | ||
| } | ||
| } | ||
| function copyLocator(f,t){ | ||
| t.lineNumber = f.lineNumber; | ||
| t.columnNumber = f.columnNumber; | ||
| return t; | ||
| } | ||
| function parseElementStartPart(source,start,el,entityReplacer,errorHandler){ | ||
| var attrName; | ||
| var value; | ||
| var p = ++start; | ||
| var s = S_TAG; | ||
| while(true){ | ||
| var c = source.charAt(p); | ||
| switch(c){ | ||
| case '=': | ||
| if(s === S_ATTR){ | ||
| attrName = source.slice(start,p); | ||
| s = S_EQ; | ||
| }else if(s === S_ATTR_S){ | ||
| s = S_EQ; | ||
| }else{ | ||
| throw new Error('attribute equal must after attrName'); | ||
| } | ||
| break; | ||
| case '\'': | ||
| case '"': | ||
| if(s === S_EQ){ | ||
| start = p+1; | ||
| p = source.indexOf(c,start) | ||
| if(p>0){ | ||
| value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); | ||
| el.add(attrName,value,start-1); | ||
| s = S_E; | ||
| }else{ | ||
| throw new Error('attribute value no end \''+c+'\' match'); | ||
| } | ||
| }else if(s == S_V){ | ||
| value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); | ||
| el.add(attrName,value,start); | ||
| errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); | ||
| start = p+1; | ||
| s = S_E | ||
| }else{ | ||
| throw new Error('attribute value must after "="'); | ||
| } | ||
| break; | ||
| case '/': | ||
| switch(s){ | ||
| case S_TAG: | ||
| el.setTagName(source.slice(start,p)); | ||
| case S_E: | ||
| case S_S: | ||
| case S_C: | ||
| s = S_C; | ||
| el.closed = true; | ||
| case S_V: | ||
| case S_ATTR: | ||
| case S_ATTR_S: | ||
| break; | ||
| default: | ||
| throw new Error("attribute invalid close char('/')") | ||
| } | ||
| break; | ||
| case '': | ||
| errorHandler.error('unexpected end of input'); | ||
| case '>': | ||
| switch(s){ | ||
| case S_TAG: | ||
| el.setTagName(source.slice(start,p)); | ||
| case S_E: | ||
| case S_S: | ||
| case S_C: | ||
| break; | ||
| case S_V: | ||
| case S_ATTR: | ||
| value = source.slice(start,p); | ||
| if(value.slice(-1) === '/'){ | ||
| el.closed = true; | ||
| value = value.slice(0,-1) | ||
| } | ||
| case S_ATTR_S: | ||
| if(s === S_ATTR_S){ | ||
| value = attrName; | ||
| } | ||
| if(s == S_V){ | ||
| errorHandler.warning('attribute "'+value+'" missed quot(")!!'); | ||
| el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start) | ||
| }else{ | ||
| errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') | ||
| el.add(value,value,start) | ||
| } | ||
| break; | ||
| case S_EQ: | ||
| throw new Error('attribute value missed!!'); | ||
| } | ||
| return p; | ||
| case '\u0080': | ||
| c = ' '; | ||
| default: | ||
| if(c<= ' '){ | ||
| switch(s){ | ||
| case S_TAG: | ||
| el.setTagName(source.slice(start,p)); | ||
| s = S_S; | ||
| break; | ||
| case S_ATTR: | ||
| attrName = source.slice(start,p) | ||
| s = S_ATTR_S; | ||
| break; | ||
| case S_V: | ||
| var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); | ||
| errorHandler.warning('attribute "'+value+'" missed quot(")!!'); | ||
| el.add(attrName,value,start) | ||
| case S_E: | ||
| s = S_S; | ||
| break; | ||
| } | ||
| }else{ | ||
| switch(s){ | ||
| case S_ATTR_S: | ||
| errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!') | ||
| el.add(attrName,attrName,start); | ||
| start = p; | ||
| s = S_ATTR; | ||
| break; | ||
| case S_E: | ||
| errorHandler.warning('attribute space is required"'+attrName+'"!!') | ||
| case S_S: | ||
| s = S_ATTR; | ||
| start = p; | ||
| break; | ||
| case S_EQ: | ||
| s = S_V; | ||
| start = p; | ||
| break; | ||
| case S_C: | ||
| throw new Error("elements closed character '/' and '>' must be connected to"); | ||
| } | ||
| } | ||
| } | ||
| p++; | ||
| } | ||
| } | ||
| function appendElement(el,domBuilder,parseStack){ | ||
| var tagName = el.tagName; | ||
| var localNSMap = null; | ||
| var currentNSMap = parseStack[parseStack.length-1].currentNSMap; | ||
| var i = el.length; | ||
| while(i--){ | ||
| var a = el[i]; | ||
| var qName = a.qName; | ||
| var value = a.value; | ||
| var nsp = qName.indexOf(':'); | ||
| if(nsp>0){ | ||
| var prefix = a.prefix = qName.slice(0,nsp); | ||
| var localName = qName.slice(nsp+1); | ||
| var nsPrefix = prefix === 'xmlns' && localName | ||
| }else{ | ||
| localName = qName; | ||
| prefix = null | ||
| nsPrefix = qName === 'xmlns' && '' | ||
| } | ||
| a.localName = localName ; | ||
| if(nsPrefix !== false){ | ||
| if(localNSMap == null){ | ||
| localNSMap = {} | ||
| _copy(currentNSMap,currentNSMap={}) | ||
| } | ||
| currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; | ||
| a.uri = 'http://www.w3.org/2000/xmlns/' | ||
| domBuilder.startPrefixMapping(nsPrefix, value) | ||
| } | ||
| } | ||
| var i = el.length; | ||
| while(i--){ | ||
| a = el[i]; | ||
| var prefix = a.prefix; | ||
| if(prefix){ | ||
| if(prefix === 'xml'){ | ||
| a.uri = 'http://www.w3.org/XML/1998/namespace'; | ||
| }if(prefix !== 'xmlns'){ | ||
| a.uri = currentNSMap[prefix] | ||
| } | ||
| } | ||
| } | ||
| var nsp = tagName.indexOf(':'); | ||
| if(nsp>0){ | ||
| prefix = el.prefix = tagName.slice(0,nsp); | ||
| localName = el.localName = tagName.slice(nsp+1); | ||
| }else{ | ||
| prefix = null; | ||
| localName = el.localName = tagName; | ||
| } | ||
| var ns = el.uri = currentNSMap[prefix || '']; | ||
| domBuilder.startElement(ns,localName,tagName,el); | ||
| if(el.closed){ | ||
| domBuilder.endElement(ns,localName,tagName); | ||
| if(localNSMap){ | ||
| for(prefix in localNSMap){ | ||
| domBuilder.endPrefixMapping(prefix) | ||
| } | ||
| } | ||
| }else{ | ||
| el.currentNSMap = currentNSMap; | ||
| el.localNSMap = localNSMap; | ||
| parseStack.push(el); | ||
| } | ||
| } | ||
| function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ | ||
| if(/^(?:script|textarea)$/i.test(tagName)){ | ||
| var elEndStart = source.indexOf('</'+tagName+'>',elStartEnd); | ||
| var text = source.substring(elStartEnd+1,elEndStart); | ||
| if(/[&<]/.test(text)){ | ||
| if(/^script$/i.test(tagName)){ | ||
| domBuilder.characters(text,0,text.length); | ||
| return elEndStart; | ||
| } | ||
| text = text.replace(/&#?\w+;/g,entityReplacer); | ||
| domBuilder.characters(text,0,text.length); | ||
| return elEndStart; | ||
| } | ||
| } | ||
| return elStartEnd+1; | ||
| } | ||
| function fixSelfClosed(source,elStartEnd,tagName,closeMap){ | ||
| var pos = closeMap[tagName]; | ||
| if(pos == null){ | ||
| pos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>') | ||
| } | ||
| return pos<elStartEnd; | ||
| } | ||
| function _copy(source,target){ | ||
| for(var n in source){target[n] = source[n]} | ||
| } | ||
| function parseDCC(source,start,domBuilder,errorHandler){ | ||
| var next= source.charAt(start+2) | ||
| switch(next){ | ||
| case '-': | ||
| if(source.charAt(start + 3) === '-'){ | ||
| var end = source.indexOf('-->',start+4); | ||
| if(end>start){ | ||
| domBuilder.comment(source,start+4,end-start-4); | ||
| return end+3; | ||
| }else{ | ||
| errorHandler.error("Unclosed comment"); | ||
| return -1; | ||
| } | ||
| }else{ | ||
| return -1; | ||
| } | ||
| default: | ||
| if(source.substr(start+3,6) == 'CDATA['){ | ||
| var end = source.indexOf(']]>',start+9); | ||
| domBuilder.startCDATA(); | ||
| domBuilder.characters(source,start+9,end-start-9); | ||
| domBuilder.endCDATA() | ||
| return end+3; | ||
| } | ||
| var matchs = split(source,start); | ||
| var len = matchs.length; | ||
| if(len>1 && /!doctype/i.test(matchs[0][0])){ | ||
| var name = matchs[1][0]; | ||
| var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0] | ||
| var sysid = len>4 && matchs[4][0]; | ||
| var lastMatch = matchs[len-1] | ||
| domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'), | ||
| sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2')); | ||
| domBuilder.endDTD(); | ||
| return lastMatch.index+lastMatch[0].length | ||
| } | ||
| } | ||
| return -1; | ||
| } | ||
| function parseInstruction(source,start,domBuilder){ | ||
| var end = source.indexOf('?>',start); | ||
| if(end){ | ||
| var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/); | ||
| if(match){ | ||
| var len = match[0].length; | ||
| domBuilder.processingInstruction(match[1], match[2]) ; | ||
| return end+2; | ||
| }else{ | ||
| return -1; | ||
| } | ||
| } | ||
| return -1; | ||
| } | ||
| function ElementAttributes(source){ | ||
| } | ||
| ElementAttributes.prototype = { | ||
| setTagName:function(tagName){ | ||
| if(!tagNamePattern.test(tagName)){ | ||
| throw new Error('invalid tagName:'+tagName) | ||
| } | ||
| this.tagName = tagName | ||
| }, | ||
| add:function(qName,value,offset){ | ||
| if(!tagNamePattern.test(qName)){ | ||
| throw new Error('invalid attribute:'+qName) | ||
| } | ||
| this[this.length++] = {qName:qName,value:value,offset:offset} | ||
| }, | ||
| length:0, | ||
| getLocalName:function(i){return this[i].localName}, | ||
| getOffset:function(i){return this[i].offset}, | ||
| getQName:function(i){return this[i].qName}, | ||
| getURI:function(i){return this[i].uri}, | ||
| getValue:function(i){return this[i].value} | ||
| } | ||
| function _set_proto_(thiz,parent){ | ||
| thiz.__proto__ = parent; | ||
| return thiz; | ||
| } | ||
| if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){ | ||
| _set_proto_ = function(thiz,parent){ | ||
| function p(){}; | ||
| p.prototype = parent; | ||
| p = new p(); | ||
| for(parent in thiz){ | ||
| p[parent] = thiz[parent]; | ||
| } | ||
| return p; | ||
| } | ||
| } | ||
| function split(source,start){ | ||
| var match; | ||
| var buf = []; | ||
| var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g; | ||
| reg.lastIndex = start; | ||
| reg.exec(source); | ||
| while(match = reg.exec(source)){ | ||
| buf.push(match); | ||
| if(match[1])return buf; | ||
| } | ||
| } | ||
| if(typeof require == 'function'){ | ||
| exports.XMLReader = XMLReader; | ||
| } | ||
| },function(exports,require){ | ||
| function copy(src,dest){ | ||
| for(var p in src){ | ||
| dest[p] = src[p]; | ||
| } | ||
| } | ||
| function _extends(Class,Super){ | ||
| var pt = Class.prototype; | ||
| if(Object.create){ | ||
| var ppt = Object.create(Super.prototype) | ||
| pt.__proto__ = ppt; | ||
| } | ||
| if(!(pt instanceof Super)){ | ||
| function t(){}; | ||
| t.prototype = Super.prototype; | ||
| t = new t(); | ||
| copy(pt,t); | ||
| Class.prototype = pt = t; | ||
| } | ||
| if(pt.constructor != Class){ | ||
| if(typeof Class != 'function'){ | ||
| console.error("unknow Class:"+Class) | ||
| } | ||
| pt.constructor = Class | ||
| } | ||
| } | ||
| var htmlns = 'http://www.w3.org/1999/xhtml' ; | ||
| var NodeType = {} | ||
| var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; | ||
| var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; | ||
| var TEXT_NODE = NodeType.TEXT_NODE = 3; | ||
| var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; | ||
| var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; | ||
| var ENTITY_NODE = NodeType.ENTITY_NODE = 6; | ||
| var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; | ||
| var COMMENT_NODE = NodeType.COMMENT_NODE = 8; | ||
| var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; | ||
| var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; | ||
| var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; | ||
| var NOTATION_NODE = NodeType.NOTATION_NODE = 12; | ||
| var ExceptionCode = {} | ||
| var ExceptionMessage = {}; | ||
| var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); | ||
| var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); | ||
| var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); | ||
| var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); | ||
| var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); | ||
| var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); | ||
| var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); | ||
| var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); | ||
| var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); | ||
| var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); | ||
| var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); | ||
| var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); | ||
| var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); | ||
| var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); | ||
| var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); | ||
| function DOMException(code, message) { | ||
| if(message instanceof Error){ | ||
| var error = message; | ||
| }else{ | ||
| error = this; | ||
| Error.call(this, ExceptionMessage[code]); | ||
| this.message = ExceptionMessage[code]; | ||
| if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); | ||
| } | ||
| error.code = code; | ||
| if(message) this.message = this.message + ": " + message; | ||
| return error; | ||
| }; | ||
| DOMException.prototype = Error.prototype; | ||
| copy(ExceptionCode,DOMException) | ||
| function NodeList() { | ||
| }; | ||
| NodeList.prototype = { | ||
| length:0, | ||
| item: function(index) { | ||
| return this[index] || null; | ||
| } | ||
| }; | ||
| function LiveNodeList(node,refresh){ | ||
| this._node = node; | ||
| this._refresh = refresh | ||
| _updateLiveList(this); | ||
| } | ||
| function _updateLiveList(list){ | ||
| var inc = list._node._inc || list._node.ownerDocument._inc; | ||
| if(list._inc != inc){ | ||
| var ls = list._refresh(list._node); | ||
| __set__(list,'length',ls.length); | ||
| copy(ls,list); | ||
| list._inc = inc; | ||
| } | ||
| } | ||
| LiveNodeList.prototype.item = function(i){ | ||
| _updateLiveList(this); | ||
| return this[i]; | ||
| } | ||
| _extends(LiveNodeList,NodeList); | ||
| function NamedNodeMap() { | ||
| }; | ||
| function _findNodeIndex(list,node){ | ||
| var i = list.length; | ||
| while(i--){ | ||
| if(list[i] === node){return i} | ||
| } | ||
| } | ||
| function _addNamedNode(el,list,newAttr,oldAttr){ | ||
| if(oldAttr){ | ||
| list[_findNodeIndex(list,oldAttr)] = newAttr; | ||
| }else{ | ||
| list[list.length++] = newAttr; | ||
| } | ||
| if(el){ | ||
| newAttr.ownerElement = el; | ||
| var doc = el.ownerDocument; | ||
| if(doc){ | ||
| oldAttr && _onRemoveAttribute(doc,el,oldAttr); | ||
| _onAddAttribute(doc,el,newAttr); | ||
| } | ||
| } | ||
| } | ||
| function _removeNamedNode(el,list,attr){ | ||
| var i = _findNodeIndex(list,attr); | ||
| if(i>=0){ | ||
| var lastIndex = list.length-1 | ||
| while(i<lastIndex){ | ||
| list[i] = list[++i] | ||
| } | ||
| list.length = lastIndex; | ||
| if(el){ | ||
| var doc = el.ownerDocument; | ||
| if(doc){ | ||
| _onRemoveAttribute(doc,el,attr); | ||
| attr.ownerElement = null; | ||
| } | ||
| } | ||
| }else{ | ||
| throw DOMException(NOT_FOUND_ERR,new Error()) | ||
| } | ||
| } | ||
| NamedNodeMap.prototype = { | ||
| length:0, | ||
| item:NodeList.prototype.item, | ||
| getNamedItem: function(key) { | ||
| var i = this.length; | ||
| while(i--){ | ||
| var attr = this[i]; | ||
| if(attr.nodeName == key){ | ||
| return attr; | ||
| } | ||
| } | ||
| }, | ||
| setNamedItem: function(attr) { | ||
| var el = attr.ownerElement; | ||
| if(el && el!=this._ownerElement){ | ||
| throw new DOMException(INUSE_ATTRIBUTE_ERR); | ||
| } | ||
| var oldAttr = this.getNamedItem(attr.nodeName); | ||
| _addNamedNode(this._ownerElement,this,attr,oldAttr); | ||
| return oldAttr; | ||
| }, | ||
| setNamedItemNS: function(attr) { | ||
| var el = attr.ownerElement, oldAttr; | ||
| if(el && el!=this._ownerElement){ | ||
| throw new DOMException(INUSE_ATTRIBUTE_ERR); | ||
| } | ||
| oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); | ||
| _addNamedNode(this._ownerElement,this,attr,oldAttr); | ||
| return oldAttr; | ||
| }, | ||
| removeNamedItem: function(key) { | ||
| var attr = this.getNamedItem(key); | ||
| _removeNamedNode(this._ownerElement,this,attr); | ||
| return attr; | ||
| }, | ||
| removeNamedItemNS:function(namespaceURI,localName){ | ||
| var attr = this.getNamedItemNS(namespaceURI,localName); | ||
| _removeNamedNode(this._ownerElement,this,attr); | ||
| return attr; | ||
| }, | ||
| getNamedItemNS: function(namespaceURI, localName) { | ||
| var i = this.length; | ||
| while(i--){ | ||
| var node = this[i]; | ||
| if(node.localName == localName && node.namespaceURI == namespaceURI){ | ||
| return node; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| }; | ||
| function DOMImplementation( features) { | ||
| this._features = {}; | ||
| if (features) { | ||
| for (var feature in features) { | ||
| this._features = features[feature]; | ||
| } | ||
| } | ||
| }; | ||
| DOMImplementation.prototype = { | ||
| hasFeature: function( feature, version) { | ||
| var versions = this._features[feature.toLowerCase()]; | ||
| if (versions && (!version || version in versions)) { | ||
| return true; | ||
| } else { | ||
| return false; | ||
| } | ||
| }, | ||
| createDocument:function(namespaceURI, qualifiedName, doctype){ | ||
| var doc = new Document(); | ||
| doc.implementation = this; | ||
| doc.childNodes = new NodeList(); | ||
| doc.doctype = doctype; | ||
| if(doctype){ | ||
| doc.appendChild(doctype); | ||
| } | ||
| if(qualifiedName){ | ||
| var root = doc.createElementNS(namespaceURI,qualifiedName); | ||
| doc.appendChild(root); | ||
| } | ||
| return doc; | ||
| }, | ||
| createDocumentType:function(qualifiedName, publicId, systemId){ | ||
| var node = new DocumentType(); | ||
| node.name = qualifiedName; | ||
| node.nodeName = qualifiedName; | ||
| node.publicId = publicId; | ||
| node.systemId = systemId; | ||
| return node; | ||
| } | ||
| }; | ||
| function Node() { | ||
| }; | ||
| Node.prototype = { | ||
| firstChild : null, | ||
| lastChild : null, | ||
| previousSibling : null, | ||
| nextSibling : null, | ||
| attributes : null, | ||
| parentNode : null, | ||
| childNodes : null, | ||
| ownerDocument : null, | ||
| nodeValue : null, | ||
| namespaceURI : null, | ||
| prefix : null, | ||
| localName : null, | ||
| insertBefore:function(newChild, refChild){ | ||
| return _insertBefore(this,newChild,refChild); | ||
| }, | ||
| replaceChild:function(newChild, oldChild){ | ||
| this.insertBefore(newChild,oldChild); | ||
| if(oldChild){ | ||
| this.removeChild(oldChild); | ||
| } | ||
| }, | ||
| removeChild:function(oldChild){ | ||
| return _removeChild(this,oldChild); | ||
| }, | ||
| appendChild:function(newChild){ | ||
| return this.insertBefore(newChild,null); | ||
| }, | ||
| hasChildNodes:function(){ | ||
| return this.firstChild != null; | ||
| }, | ||
| cloneNode:function(deep){ | ||
| return cloneNode(this.ownerDocument||this,this,deep); | ||
| }, | ||
| normalize:function(){ | ||
| var child = this.firstChild; | ||
| while(child){ | ||
| var next = child.nextSibling; | ||
| if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ | ||
| this.removeChild(next); | ||
| child.appendData(next.data); | ||
| }else{ | ||
| child.normalize(); | ||
| child = next; | ||
| } | ||
| } | ||
| }, | ||
| isSupported:function(feature, version){ | ||
| return this.ownerDocument.implementation.hasFeature(feature,version); | ||
| }, | ||
| hasAttributes:function(){ | ||
| return this.attributes.length>0; | ||
| }, | ||
| lookupPrefix:function(namespaceURI){ | ||
| var el = this; | ||
| while(el){ | ||
| var map = el._nsMap; | ||
| if(map){ | ||
| for(var n in map){ | ||
| if(map[n] == namespaceURI){ | ||
| return n; | ||
| } | ||
| } | ||
| } | ||
| el = el.nodeType == 2?el.ownerDocument : el.parentNode; | ||
| } | ||
| return null; | ||
| }, | ||
| lookupNamespaceURI:function(prefix){ | ||
| var el = this; | ||
| while(el){ | ||
| var map = el._nsMap; | ||
| if(map){ | ||
| if(prefix in map){ | ||
| return map[prefix] ; | ||
| } | ||
| } | ||
| el = el.nodeType == 2?el.ownerDocument : el.parentNode; | ||
| } | ||
| return null; | ||
| }, | ||
| isDefaultNamespace:function(namespaceURI){ | ||
| var prefix = this.lookupPrefix(namespaceURI); | ||
| return prefix == null; | ||
| } | ||
| }; | ||
| function _xmlEncoder(c){ | ||
| return c == '<' && '<' || | ||
| c == '>' && '>' || | ||
| c == '&' && '&' || | ||
| c == '"' && '"' || | ||
| '&#'+c.charCodeAt()+';' | ||
| } | ||
| copy(NodeType,Node); | ||
| copy(NodeType,Node.prototype); | ||
| function _visitNode(node,callback){ | ||
| if(callback(node)){ | ||
| return true; | ||
| } | ||
| if(node = node.firstChild){ | ||
| do{ | ||
| if(_visitNode(node,callback)){return true} | ||
| }while(node=node.nextSibling) | ||
| } | ||
| } | ||
| function Document(){ | ||
| } | ||
| function _onAddAttribute(doc,el,newAttr){ | ||
| doc && doc._inc++; | ||
| var ns = newAttr.namespaceURI ; | ||
| if(ns == 'http://www.w3.org/2000/xmlns/'){ | ||
| el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value | ||
| } | ||
| } | ||
| function _onRemoveAttribute(doc,el,newAttr,remove){ | ||
| doc && doc._inc++; | ||
| var ns = newAttr.namespaceURI ; | ||
| if(ns == 'http://www.w3.org/2000/xmlns/'){ | ||
| delete el._nsMap[newAttr.prefix?newAttr.localName:''] | ||
| } | ||
| } | ||
| function _onUpdateChild(doc,el,newChild){ | ||
| if(doc && doc._inc){ | ||
| doc._inc++; | ||
| var cs = el.childNodes; | ||
| if(newChild){ | ||
| cs[cs.length++] = newChild; | ||
| }else{ | ||
| var child = el.firstChild; | ||
| var i = 0; | ||
| while(child){ | ||
| cs[i++] = child; | ||
| child =child.nextSibling; | ||
| } | ||
| cs.length = i; | ||
| } | ||
| } | ||
| } | ||
| function _removeChild(parentNode,child){ | ||
| var previous = child.previousSibling; | ||
| var next = child.nextSibling; | ||
| if(previous){ | ||
| previous.nextSibling = next; | ||
| }else{ | ||
| parentNode.firstChild = next | ||
| } | ||
| if(next){ | ||
| next.previousSibling = previous; | ||
| }else{ | ||
| parentNode.lastChild = previous; | ||
| } | ||
| _onUpdateChild(parentNode.ownerDocument,parentNode); | ||
| return child; | ||
| } | ||
| function _insertBefore(parentNode,newChild,nextChild){ | ||
| var cp = newChild.parentNode; | ||
| if(cp){ | ||
| cp.removeChild(newChild); | ||
| } | ||
| if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ | ||
| var newFirst = newChild.firstChild; | ||
| if (newFirst == null) { | ||
| return newChild; | ||
| } | ||
| var newLast = newChild.lastChild; | ||
| }else{ | ||
| newFirst = newLast = newChild; | ||
| } | ||
| var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; | ||
| newFirst.previousSibling = pre; | ||
| newLast.nextSibling = nextChild; | ||
| if(pre){ | ||
| pre.nextSibling = newFirst; | ||
| }else{ | ||
| parentNode.firstChild = newFirst; | ||
| } | ||
| if(nextChild == null){ | ||
| parentNode.lastChild = newLast; | ||
| }else{ | ||
| nextChild.previousSibling = newLast; | ||
| } | ||
| do{ | ||
| newFirst.parentNode = parentNode; | ||
| }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) | ||
| _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); | ||
| if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { | ||
| newChild.firstChild = newChild.lastChild = null; | ||
| } | ||
| return newChild; | ||
| } | ||
| function _appendSingleChild(parentNode,newChild){ | ||
| var cp = newChild.parentNode; | ||
| if(cp){ | ||
| var pre = parentNode.lastChild; | ||
| cp.removeChild(newChild); | ||
| var pre = parentNode.lastChild; | ||
| } | ||
| var pre = parentNode.lastChild; | ||
| newChild.parentNode = parentNode; | ||
| newChild.previousSibling = pre; | ||
| newChild.nextSibling = null; | ||
| if(pre){ | ||
| pre.nextSibling = newChild; | ||
| }else{ | ||
| parentNode.firstChild = newChild; | ||
| } | ||
| parentNode.lastChild = newChild; | ||
| _onUpdateChild(parentNode.ownerDocument,parentNode,newChild); | ||
| return newChild; | ||
| } | ||
| Document.prototype = { | ||
| nodeName : '#document', | ||
| nodeType : DOCUMENT_NODE, | ||
| doctype : null, | ||
| documentElement : null, | ||
| _inc : 1, | ||
| insertBefore : function(newChild, refChild){ | ||
| if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ | ||
| var child = newChild.firstChild; | ||
| while(child){ | ||
| var next = child.nextSibling; | ||
| this.insertBefore(child,refChild); | ||
| child = next; | ||
| } | ||
| return newChild; | ||
| } | ||
| if(this.documentElement == null && newChild.nodeType == 1){ | ||
| this.documentElement = newChild; | ||
| } | ||
| return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; | ||
| }, | ||
| removeChild : function(oldChild){ | ||
| if(this.documentElement == oldChild){ | ||
| this.documentElement = null; | ||
| } | ||
| return _removeChild(this,oldChild); | ||
| }, | ||
| importNode : function(importedNode,deep){ | ||
| return importNode(this,importedNode,deep); | ||
| }, | ||
| getElementById : function(id){ | ||
| var rtv = null; | ||
| _visitNode(this.documentElement,function(node){ | ||
| if(node.nodeType == 1){ | ||
| if(node.getAttribute('id') == id){ | ||
| rtv = node; | ||
| return true; | ||
| } | ||
| } | ||
| }) | ||
| return rtv; | ||
| }, | ||
| createElement : function(tagName){ | ||
| var node = new Element(); | ||
| node.ownerDocument = this; | ||
| node.nodeName = tagName; | ||
| node.tagName = tagName; | ||
| node.childNodes = new NodeList(); | ||
| var attrs = node.attributes = new NamedNodeMap(); | ||
| attrs._ownerElement = node; | ||
| return node; | ||
| }, | ||
| createDocumentFragment : function(){ | ||
| var node = new DocumentFragment(); | ||
| node.ownerDocument = this; | ||
| node.childNodes = new NodeList(); | ||
| return node; | ||
| }, | ||
| createTextNode : function(data){ | ||
| var node = new Text(); | ||
| node.ownerDocument = this; | ||
| node.appendData(data) | ||
| return node; | ||
| }, | ||
| createComment : function(data){ | ||
| var node = new Comment(); | ||
| node.ownerDocument = this; | ||
| node.appendData(data) | ||
| return node; | ||
| }, | ||
| createCDATASection : function(data){ | ||
| var node = new CDATASection(); | ||
| node.ownerDocument = this; | ||
| node.appendData(data) | ||
| return node; | ||
| }, | ||
| createProcessingInstruction : function(target,data){ | ||
| var node = new ProcessingInstruction(); | ||
| node.ownerDocument = this; | ||
| node.tagName = node.target = target; | ||
| node.nodeValue= node.data = data; | ||
| return node; | ||
| }, | ||
| createAttribute : function(name){ | ||
| var node = new Attr(); | ||
| node.ownerDocument = this; | ||
| node.name = name; | ||
| node.nodeName = name; | ||
| node.localName = name; | ||
| node.specified = true; | ||
| return node; | ||
| }, | ||
| createEntityReference : function(name){ | ||
| var node = new EntityReference(); | ||
| node.ownerDocument = this; | ||
| node.nodeName = name; | ||
| return node; | ||
| }, | ||
| createElementNS : function(namespaceURI,qualifiedName){ | ||
| var node = new Element(); | ||
| var pl = qualifiedName.split(':'); | ||
| var attrs = node.attributes = new NamedNodeMap(); | ||
| node.childNodes = new NodeList(); | ||
| node.ownerDocument = this; | ||
| node.nodeName = qualifiedName; | ||
| node.tagName = qualifiedName; | ||
| node.namespaceURI = namespaceURI; | ||
| if(pl.length == 2){ | ||
| node.prefix = pl[0]; | ||
| node.localName = pl[1]; | ||
| }else{ | ||
| node.localName = qualifiedName; | ||
| } | ||
| attrs._ownerElement = node; | ||
| return node; | ||
| }, | ||
| createAttributeNS : function(namespaceURI,qualifiedName){ | ||
| var node = new Attr(); | ||
| var pl = qualifiedName.split(':'); | ||
| node.ownerDocument = this; | ||
| node.nodeName = qualifiedName; | ||
| node.name = qualifiedName; | ||
| node.namespaceURI = namespaceURI; | ||
| node.specified = true; | ||
| if(pl.length == 2){ | ||
| node.prefix = pl[0]; | ||
| node.localName = pl[1]; | ||
| }else{ | ||
| node.localName = qualifiedName; | ||
| } | ||
| return node; | ||
| } | ||
| }; | ||
| _extends(Document,Node); | ||
| function Element() { | ||
| this._nsMap = {}; | ||
| }; | ||
| Element.prototype = { | ||
| nodeType : ELEMENT_NODE, | ||
| hasAttribute : function(name){ | ||
| return this.getAttributeNode(name)!=null; | ||
| }, | ||
| getAttribute : function(name){ | ||
| var attr = this.getAttributeNode(name); | ||
| return attr && attr.value || ''; | ||
| }, | ||
| getAttributeNode : function(name){ | ||
| return this.attributes.getNamedItem(name); | ||
| }, | ||
| setAttribute : function(name, value){ | ||
| var attr = this.ownerDocument.createAttribute(name); | ||
| attr.value = attr.nodeValue = "" + value; | ||
| this.setAttributeNode(attr) | ||
| }, | ||
| removeAttribute : function(name){ | ||
| var attr = this.getAttributeNode(name) | ||
| attr && this.removeAttributeNode(attr); | ||
| }, | ||
| appendChild:function(newChild){ | ||
| if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ | ||
| return this.insertBefore(newChild,null); | ||
| }else{ | ||
| return _appendSingleChild(this,newChild); | ||
| } | ||
| }, | ||
| setAttributeNode : function(newAttr){ | ||
| return this.attributes.setNamedItem(newAttr); | ||
| }, | ||
| setAttributeNodeNS : function(newAttr){ | ||
| return this.attributes.setNamedItemNS(newAttr); | ||
| }, | ||
| removeAttributeNode : function(oldAttr){ | ||
| return this.attributes.removeNamedItem(oldAttr.nodeName); | ||
| }, | ||
| removeAttributeNS : function(namespaceURI, localName){ | ||
| var old = this.getAttributeNodeNS(namespaceURI, localName); | ||
| old && this.removeAttributeNode(old); | ||
| }, | ||
| hasAttributeNS : function(namespaceURI, localName){ | ||
| return this.getAttributeNodeNS(namespaceURI, localName)!=null; | ||
| }, | ||
| getAttributeNS : function(namespaceURI, localName){ | ||
| var attr = this.getAttributeNodeNS(namespaceURI, localName); | ||
| return attr && attr.value || ''; | ||
| }, | ||
| setAttributeNS : function(namespaceURI, qualifiedName, value){ | ||
| var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); | ||
| attr.value = attr.nodeValue = "" + value; | ||
| this.setAttributeNode(attr) | ||
| }, | ||
| getAttributeNodeNS : function(namespaceURI, localName){ | ||
| return this.attributes.getNamedItemNS(namespaceURI, localName); | ||
| }, | ||
| getElementsByTagName : function(tagName){ | ||
| return new LiveNodeList(this,function(base){ | ||
| var ls = []; | ||
| _visitNode(base,function(node){ | ||
| if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ | ||
| ls.push(node); | ||
| } | ||
| }); | ||
| return ls; | ||
| }); | ||
| }, | ||
| getElementsByTagNameNS : function(namespaceURI, localName){ | ||
| return new LiveNodeList(this,function(base){ | ||
| var ls = []; | ||
| _visitNode(base,function(node){ | ||
| if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){ | ||
| ls.push(node); | ||
| } | ||
| }); | ||
| return ls; | ||
| }); | ||
| } | ||
| }; | ||
| Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; | ||
| Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; | ||
| _extends(Element,Node); | ||
| function Attr() { | ||
| }; | ||
| Attr.prototype.nodeType = ATTRIBUTE_NODE; | ||
| _extends(Attr,Node); | ||
| function CharacterData() { | ||
| }; | ||
| CharacterData.prototype = { | ||
| data : '', | ||
| substringData : function(offset, count) { | ||
| return this.data.substring(offset, offset+count); | ||
| }, | ||
| appendData: function(text) { | ||
| text = this.data+text; | ||
| this.nodeValue = this.data = text; | ||
| this.length = text.length; | ||
| }, | ||
| insertData: function(offset,text) { | ||
| this.replaceData(offset,0,text); | ||
| }, | ||
| appendChild:function(newChild){ | ||
| throw new Error(ExceptionMessage[3]) | ||
| return Node.prototype.appendChild.apply(this,arguments) | ||
| }, | ||
| deleteData: function(offset, count) { | ||
| this.replaceData(offset,count,""); | ||
| }, | ||
| replaceData: function(offset, count, text) { | ||
| var start = this.data.substring(0,offset); | ||
| var end = this.data.substring(offset+count); | ||
| text = start + text + end; | ||
| this.nodeValue = this.data = text; | ||
| this.length = text.length; | ||
| } | ||
| } | ||
| _extends(CharacterData,Node); | ||
| function Text() { | ||
| }; | ||
| Text.prototype = { | ||
| nodeName : "#text", | ||
| nodeType : TEXT_NODE, | ||
| splitText : function(offset) { | ||
| var text = this.data; | ||
| var newText = text.substring(offset); | ||
| text = text.substring(0, offset); | ||
| this.data = this.nodeValue = text; | ||
| this.length = text.length; | ||
| var newNode = this.ownerDocument.createTextNode(newText); | ||
| if(this.parentNode){ | ||
| this.parentNode.insertBefore(newNode, this.nextSibling); | ||
| } | ||
| return newNode; | ||
| } | ||
| } | ||
| _extends(Text,CharacterData); | ||
| function Comment() { | ||
| }; | ||
| Comment.prototype = { | ||
| nodeName : "#comment", | ||
| nodeType : COMMENT_NODE | ||
| } | ||
| _extends(Comment,CharacterData); | ||
| function CDATASection() { | ||
| }; | ||
| CDATASection.prototype = { | ||
| nodeName : "#cdata-section", | ||
| nodeType : CDATA_SECTION_NODE | ||
| } | ||
| _extends(CDATASection,CharacterData); | ||
| function DocumentType() { | ||
| }; | ||
| DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; | ||
| _extends(DocumentType,Node); | ||
| function Notation() { | ||
| }; | ||
| Notation.prototype.nodeType = NOTATION_NODE; | ||
| _extends(Notation,Node); | ||
| function Entity() { | ||
| }; | ||
| Entity.prototype.nodeType = ENTITY_NODE; | ||
| _extends(Entity,Node); | ||
| function EntityReference() { | ||
| }; | ||
| EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; | ||
| _extends(EntityReference,Node); | ||
| function DocumentFragment() { | ||
| }; | ||
| DocumentFragment.prototype.nodeName = "#document-fragment"; | ||
| DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; | ||
| _extends(DocumentFragment,Node); | ||
| function ProcessingInstruction() { | ||
| } | ||
| ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; | ||
| _extends(ProcessingInstruction,Node); | ||
| function XMLSerializer(){} | ||
| XMLSerializer.prototype.serializeToString = function(node){ | ||
| var buf = []; | ||
| serializeToString(node,buf); | ||
| return buf.join(''); | ||
| } | ||
| Node.prototype.toString =function(){ | ||
| return XMLSerializer.prototype.serializeToString(this); | ||
| } | ||
| function serializeToString(node,buf){ | ||
| switch(node.nodeType){ | ||
| case ELEMENT_NODE: | ||
| var attrs = node.attributes; | ||
| var len = attrs.length; | ||
| var child = node.firstChild; | ||
| var nodeName = node.tagName; | ||
| var isHTML = htmlns === node.namespaceURI | ||
| buf.push('<',nodeName); | ||
| for(var i=0;i<len;i++){ | ||
| serializeToString(attrs.item(i),buf,isHTML); | ||
| } | ||
| if(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){ | ||
| buf.push('>'); | ||
| if(isHTML && /^script$/i.test(nodeName)){ | ||
| if(child){ | ||
| buf.push(child.data); | ||
| } | ||
| }else{ | ||
| while(child){ | ||
| serializeToString(child,buf); | ||
| child = child.nextSibling; | ||
| } | ||
| } | ||
| buf.push('</',nodeName,'>'); | ||
| }else{ | ||
| buf.push('/>'); | ||
| } | ||
| return; | ||
| case DOCUMENT_NODE: | ||
| case DOCUMENT_FRAGMENT_NODE: | ||
| var child = node.firstChild; | ||
| while(child){ | ||
| serializeToString(child,buf); | ||
| child = child.nextSibling; | ||
| } | ||
| return; | ||
| case ATTRIBUTE_NODE: | ||
| return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"'); | ||
| case TEXT_NODE: | ||
| return buf.push(node.data.replace(/[<&]/g,_xmlEncoder)); | ||
| case CDATA_SECTION_NODE: | ||
| return buf.push( '<![CDATA[',node.data,']]>'); | ||
| case COMMENT_NODE: | ||
| return buf.push( "<!--",node.data,"-->"); | ||
| case DOCUMENT_TYPE_NODE: | ||
| var pubid = node.publicId; | ||
| var sysid = node.systemId; | ||
| buf.push('<!DOCTYPE ',node.name); | ||
| if(pubid){ | ||
| buf.push(' PUBLIC "',pubid); | ||
| if (sysid && sysid!='.') { | ||
| buf.push( '" "',sysid); | ||
| } | ||
| buf.push('">'); | ||
| }else if(sysid && sysid!='.'){ | ||
| buf.push(' SYSTEM "',sysid,'">'); | ||
| }else{ | ||
| var sub = node.internalSubset; | ||
| if(sub){ | ||
| buf.push(" [",sub,"]"); | ||
| } | ||
| buf.push(">"); | ||
| } | ||
| return; | ||
| case PROCESSING_INSTRUCTION_NODE: | ||
| return buf.push( "<?",node.target," ",node.data,"?>"); | ||
| case ENTITY_REFERENCE_NODE: | ||
| return buf.push( '&',node.nodeName,';'); | ||
| default: | ||
| buf.push('??',node.nodeName); | ||
| } | ||
| } | ||
| function importNode(doc,node,deep){ | ||
| var node2; | ||
| switch (node.nodeType) { | ||
| case ELEMENT_NODE: | ||
| node2 = node.cloneNode(false); | ||
| node2.ownerDocument = doc; | ||
| case DOCUMENT_FRAGMENT_NODE: | ||
| break; | ||
| case ATTRIBUTE_NODE: | ||
| deep = true; | ||
| break; | ||
| } | ||
| if(!node2){ | ||
| node2 = node.cloneNode(false); | ||
| } | ||
| node2.ownerDocument = doc; | ||
| node2.parentNode = null; | ||
| if(deep){ | ||
| var child = node.firstChild; | ||
| while(child){ | ||
| node2.appendChild(importNode(doc,child,deep)); | ||
| child = child.nextSibling; | ||
| } | ||
| } | ||
| return node2; | ||
| } | ||
| function cloneNode(doc,node,deep){ | ||
| var node2 = new node.constructor(); | ||
| for(var n in node){ | ||
| var v = node[n]; | ||
| if(typeof v != 'object' ){ | ||
| if(v != node2[n]){ | ||
| node2[n] = v; | ||
| } | ||
| } | ||
| } | ||
| if(node.childNodes){ | ||
| node2.childNodes = new NodeList(); | ||
| } | ||
| node2.ownerDocument = doc; | ||
| switch (node2.nodeType) { | ||
| case ELEMENT_NODE: | ||
| var attrs = node.attributes; | ||
| var attrs2 = node2.attributes = new NamedNodeMap(); | ||
| var len = attrs.length | ||
| attrs2._ownerElement = node2; | ||
| for(var i=0;i<len;i++){ | ||
| node2.setAttributeNode(cloneNode(doc,attrs.item(i),true)); | ||
| } | ||
| break;; | ||
| case ATTRIBUTE_NODE: | ||
| deep = true; | ||
| } | ||
| if(deep){ | ||
| var child = node.firstChild; | ||
| while(child){ | ||
| node2.appendChild(cloneNode(doc,child,deep)); | ||
| child = child.nextSibling; | ||
| } | ||
| } | ||
| return node2; | ||
| } | ||
| function __set__(object,key,value){ | ||
| object[key] = value | ||
| } | ||
| try{ | ||
| if(Object.defineProperty){ | ||
| Object.defineProperty(LiveNodeList.prototype,'length',{ | ||
| get:function(){ | ||
| _updateLiveList(this); | ||
| return this.$$length; | ||
| } | ||
| }); | ||
| Object.defineProperty(Node.prototype,'textContent',{ | ||
| get:function(){ | ||
| return getTextContent(this); | ||
| }, | ||
| set:function(data){ | ||
| switch(this.nodeType){ | ||
| case 1: | ||
| case 11: | ||
| while(this.firstChild){ | ||
| this.removeChild(this.firstChild); | ||
| } | ||
| if(data || String(data)){ | ||
| this.appendChild(this.ownerDocument.createTextNode(data)); | ||
| } | ||
| break; | ||
| default: | ||
| this.data = data; | ||
| this.value = value; | ||
| this.nodeValue = data; | ||
| } | ||
| } | ||
| }) | ||
| function getTextContent(node){ | ||
| switch(node.nodeType){ | ||
| case 1: | ||
| case 11: | ||
| var buf = []; | ||
| node = node.firstChild; | ||
| while(node){ | ||
| if(node.nodeType!==7 && node.nodeType !==8){ | ||
| buf.push(getTextContent(node)); | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| return buf.join(''); | ||
| default: | ||
| return node.nodeValue; | ||
| } | ||
| } | ||
| __set__ = function(object,key,value){ | ||
| object['$$'+key] = value | ||
| } | ||
| } | ||
| }catch(e){ | ||
| } | ||
| if(typeof require == 'function'){ | ||
| exports.DOMImplementation = DOMImplementation; | ||
| exports.XMLSerializer = XMLSerializer; | ||
| } | ||
| }) |
+1817
| ~function(){ | ||
| var impls = arguments; | ||
| var cached = {}; | ||
| function internal_require(i,o){ | ||
| if(typeof i=='number'){ | ||
| var exports = cached[i]; | ||
| if(!exports){ | ||
| cached[i] = exports = {}; | ||
| var id = './'+i; | ||
| var module = {exports:exports,id:id} | ||
| impls[i](cached[i],internal_require,module,id); | ||
| cached[i] = exports = module.exports; | ||
| } | ||
| if(o){ | ||
| for(i in exports){ | ||
| o[i] = exports[i]; | ||
| } | ||
| } | ||
| return o || exports; | ||
| }else{ | ||
| return this.require ? require(i) : {} | ||
| } | ||
| } | ||
| return internal_require(0,this); | ||
| }(function(exports,require){function DOMParser(options){ | ||
| this.options = options ||{locator:{}}; | ||
| } | ||
| DOMParser.prototype.parseFromString = function(source,mimeType){ | ||
| var options = this.options; | ||
| var sax = new XMLReader(); | ||
| var domBuilder = options.domBuilder || new DOMHandler(); | ||
| var errorHandler = options.errorHandler; | ||
| var locator = options.locator; | ||
| var defaultNSMap = options.xmlns||{}; | ||
| var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"} | ||
| if(locator){ | ||
| domBuilder.setDocumentLocator(locator) | ||
| } | ||
| sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); | ||
| sax.domBuilder = options.domBuilder || domBuilder; | ||
| if(/\/x?html?$/.test(mimeType)){ | ||
| entityMap.nbsp = '\xa0'; | ||
| entityMap.copy = '\xa9'; | ||
| defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; | ||
| } | ||
| if(source){ | ||
| sax.parse(source,defaultNSMap,entityMap); | ||
| }else{ | ||
| sax.errorHandler.error("invalid document source"); | ||
| } | ||
| return domBuilder.document; | ||
| } | ||
| function buildErrorHandler(errorImpl,domBuilder,locator){ | ||
| if(!errorImpl){ | ||
| if(domBuilder instanceof DOMHandler){ | ||
| return domBuilder; | ||
| } | ||
| errorImpl = domBuilder ; | ||
| } | ||
| var errorHandler = {} | ||
| var isCallback = errorImpl instanceof Function; | ||
| locator = locator||{} | ||
| function build(key){ | ||
| var fn = errorImpl[key]; | ||
| if(!fn){ | ||
| if(isCallback){ | ||
| fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; | ||
| }else{ | ||
| var i=arguments.length; | ||
| while(--i){ | ||
| if(fn = errorImpl[arguments[i]]){ | ||
| break; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| errorHandler[key] = fn && function(msg){ | ||
| fn(msg+_locator(locator)); | ||
| }||function(){}; | ||
| } | ||
| build('warning','warn'); | ||
| build('error','warn','warning'); | ||
| build('fatalError','warn','warning','error'); | ||
| return errorHandler; | ||
| } | ||
| function DOMHandler() { | ||
| this.cdata = false; | ||
| } | ||
| function position(locator,node){ | ||
| node.lineNumber = locator.lineNumber; | ||
| node.columnNumber = locator.columnNumber; | ||
| } | ||
| DOMHandler.prototype = { | ||
| startDocument : function() { | ||
| this.document = new DOMImplementation().createDocument(null, null, null); | ||
| if (this.locator) { | ||
| this.document.documentURI = this.locator.systemId; | ||
| } | ||
| }, | ||
| startElement:function(namespaceURI, localName, qName, attrs) { | ||
| var doc = this.document; | ||
| var el = doc.createElementNS(namespaceURI, qName||localName); | ||
| var len = attrs.length; | ||
| appendElement(this, el); | ||
| this.currentElement = el; | ||
| this.locator && position(this.locator,el) | ||
| for (var i = 0 ; i < len; i++) { | ||
| var namespaceURI = attrs.getURI(i); | ||
| var value = attrs.getValue(i); | ||
| var qName = attrs.getQName(i); | ||
| var attr = doc.createAttributeNS(namespaceURI, qName); | ||
| if( attr.getOffset){ | ||
| position(attr.getOffset(1),attr) | ||
| } | ||
| attr.value = attr.nodeValue = value; | ||
| el.setAttributeNode(attr) | ||
| } | ||
| }, | ||
| endElement:function(namespaceURI, localName, qName) { | ||
| var current = this.currentElement | ||
| var tagName = current.tagName; | ||
| this.currentElement = current.parentNode; | ||
| }, | ||
| startPrefixMapping:function(prefix, uri) { | ||
| }, | ||
| endPrefixMapping:function(prefix) { | ||
| }, | ||
| processingInstruction:function(target, data) { | ||
| var ins = this.document.createProcessingInstruction(target, data); | ||
| this.locator && position(this.locator,ins) | ||
| appendElement(this, ins); | ||
| }, | ||
| ignorableWhitespace:function(ch, start, length) { | ||
| }, | ||
| characters:function(chars, start, length) { | ||
| chars = _toString.apply(this,arguments) | ||
| if(this.currentElement && chars){ | ||
| if (this.cdata) { | ||
| var charNode = this.document.createCDATASection(chars); | ||
| this.currentElement.appendChild(charNode); | ||
| } else { | ||
| var charNode = this.document.createTextNode(chars); | ||
| this.currentElement.appendChild(charNode); | ||
| } | ||
| this.locator && position(this.locator,charNode) | ||
| } | ||
| }, | ||
| skippedEntity:function(name) { | ||
| }, | ||
| endDocument:function() { | ||
| this.document.normalize(); | ||
| }, | ||
| setDocumentLocator:function (locator) { | ||
| if(this.locator = locator){ | ||
| locator.lineNumber = 0; | ||
| } | ||
| }, | ||
| comment:function(chars, start, length) { | ||
| chars = _toString.apply(this,arguments) | ||
| var comm = this.document.createComment(chars); | ||
| this.locator && position(this.locator,comm) | ||
| appendElement(this, comm); | ||
| }, | ||
| startCDATA:function() { | ||
| this.cdata = true; | ||
| }, | ||
| endCDATA:function() { | ||
| this.cdata = false; | ||
| }, | ||
| startDTD:function(name, publicId, systemId) { | ||
| var impl = this.document.implementation; | ||
| if (impl && impl.createDocumentType) { | ||
| var dt = impl.createDocumentType(name, publicId, systemId); | ||
| this.locator && position(this.locator,dt) | ||
| appendElement(this, dt); | ||
| } | ||
| }, | ||
| warning:function(error) { | ||
| console.warn(error,_locator(this.locator)); | ||
| }, | ||
| error:function(error) { | ||
| console.error(error,_locator(this.locator)); | ||
| }, | ||
| fatalError:function(error) { | ||
| console.error(error,_locator(this.locator)); | ||
| throw error; | ||
| } | ||
| } | ||
| function _locator(l){ | ||
| if(l){ | ||
| return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' | ||
| } | ||
| } | ||
| function _toString(chars,start,length){ | ||
| if(typeof chars == 'string'){ | ||
| return chars.substr(start,length) | ||
| }else{ | ||
| if(chars.length >= start+length || start){ | ||
| return new java.lang.String(chars,start,length)+''; | ||
| } | ||
| return chars; | ||
| } | ||
| } | ||
| "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ | ||
| DOMHandler.prototype[key] = function(){return null} | ||
| }) | ||
| function appendElement (hander,node) { | ||
| if (!hander.currentElement) { | ||
| hander.document.appendChild(node); | ||
| } else { | ||
| hander.currentElement.appendChild(node); | ||
| } | ||
| } | ||
| if(typeof require == 'function'){ | ||
| var XMLReader = require(1).XMLReader; | ||
| var DOMImplementation = exports.DOMImplementation = require(2).DOMImplementation; | ||
| exports.XMLSerializer = require(2).XMLSerializer ; | ||
| exports.DOMParser = DOMParser; | ||
| } | ||
| },function(exports,require){ | ||
| var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ | ||
| var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\ux203F-\u2040]"); | ||
| var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$'); | ||
| var S_TAG = 0; | ||
| var S_ATTR = 1; | ||
| var S_ATTR_S=2; | ||
| var S_EQ = 3; | ||
| var S_V = 4; | ||
| var S_E = 5; | ||
| var S_S = 6; | ||
| var S_C = 7; | ||
| function XMLReader(){ | ||
| } | ||
| XMLReader.prototype = { | ||
| parse:function(source,defaultNSMap,entityMap){ | ||
| var domBuilder = this.domBuilder; | ||
| domBuilder.startDocument(); | ||
| _copy(defaultNSMap ,defaultNSMap = {}) | ||
| parse(source,defaultNSMap,entityMap, | ||
| domBuilder,this.errorHandler); | ||
| domBuilder.endDocument(); | ||
| } | ||
| } | ||
| function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ | ||
| function fixedFromCharCode(code) { | ||
| if (code > 0xffff) { | ||
| code -= 0x10000; | ||
| var surrogate1 = 0xd800 + (code >> 10) | ||
| , surrogate2 = 0xdc00 + (code & 0x3ff); | ||
| return String.fromCharCode(surrogate1, surrogate2); | ||
| } else { | ||
| return String.fromCharCode(code); | ||
| } | ||
| } | ||
| function entityReplacer(a){ | ||
| var k = a.slice(1,-1); | ||
| if(k in entityMap){ | ||
| return entityMap[k]; | ||
| }else if(k.charAt(0) === '#'){ | ||
| return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) | ||
| }else{ | ||
| errorHandler.error('entity not found:'+a); | ||
| return a; | ||
| } | ||
| } | ||
| function appendText(end){ | ||
| var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); | ||
| locator&&position(start); | ||
| domBuilder.characters(xt,0,end-start); | ||
| start = end | ||
| } | ||
| function position(start,m){ | ||
| while(start>=endPos && (m = linePattern.exec(source))){ | ||
| startPos = m.index; | ||
| endPos = startPos + m[0].length; | ||
| locator.lineNumber++; | ||
| } | ||
| locator.columnNumber = start-startPos+1; | ||
| } | ||
| var startPos = 0; | ||
| var endPos = 0; | ||
| var linePattern = /.+(?:\r\n?|\n)|.*$/g | ||
| var locator = domBuilder.locator; | ||
| var parseStack = [{currentNSMap:defaultNSMapCopy}] | ||
| var closeMap = {}; | ||
| var start = 0; | ||
| while(true){ | ||
| var i = source.indexOf('<',start); | ||
| if(i<0){ | ||
| if(!source.substr(start).match(/^\s*$/)){ | ||
| var doc = domBuilder.document; | ||
| var text = doc.createTextNode(source.substr(start)); | ||
| doc.appendChild(text); | ||
| domBuilder.currentElement = text; | ||
| } | ||
| return; | ||
| } | ||
| if(i>start){ | ||
| appendText(i); | ||
| } | ||
| switch(source.charAt(i+1)){ | ||
| case '/': | ||
| var end = source.indexOf('>',i+3); | ||
| var tagName = source.substring(i+2,end); | ||
| var config = parseStack.pop(); | ||
| var localNSMap = config.localNSMap; | ||
| if(config.tagName != tagName){ | ||
| errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName ); | ||
| } | ||
| domBuilder.endElement(config.uri,config.localName,tagName); | ||
| if(localNSMap){ | ||
| for(var prefix in localNSMap){ | ||
| domBuilder.endPrefixMapping(prefix) ; | ||
| } | ||
| } | ||
| end++; | ||
| break; | ||
| case '?': | ||
| locator&&position(i); | ||
| end = parseInstruction(source,i,domBuilder); | ||
| break; | ||
| case '!': | ||
| locator&&position(i); | ||
| end = parseDCC(source,i,domBuilder,errorHandler); | ||
| break; | ||
| default: | ||
| try{ | ||
| locator&&position(i); | ||
| var el = new ElementAttributes(); | ||
| var end = parseElementStartPart(source,i,el,entityReplacer,errorHandler); | ||
| var len = el.length; | ||
| if(len && locator){ | ||
| var backup = copyLocator(locator,{}); | ||
| for(var i = 0;i<len;i++){ | ||
| var a = el[i]; | ||
| position(a.offset); | ||
| a.offset = copyLocator(locator,{}); | ||
| } | ||
| copyLocator(backup,locator); | ||
| } | ||
| if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){ | ||
| el.closed = true; | ||
| if(!entityMap.nbsp){ | ||
| errorHandler.warning('unclosed xml attribute'); | ||
| } | ||
| } | ||
| appendElement(el,domBuilder,parseStack); | ||
| if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){ | ||
| end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder) | ||
| }else{ | ||
| end++; | ||
| } | ||
| }catch(e){ | ||
| errorHandler.error('element parse error: '+e); | ||
| end = -1; | ||
| } | ||
| } | ||
| if(end<0){ | ||
| appendText(i+1); | ||
| }else{ | ||
| start = end; | ||
| } | ||
| } | ||
| } | ||
| function copyLocator(f,t){ | ||
| t.lineNumber = f.lineNumber; | ||
| t.columnNumber = f.columnNumber; | ||
| return t; | ||
| } | ||
| function parseElementStartPart(source,start,el,entityReplacer,errorHandler){ | ||
| var attrName; | ||
| var value; | ||
| var p = ++start; | ||
| var s = S_TAG; | ||
| while(true){ | ||
| var c = source.charAt(p); | ||
| switch(c){ | ||
| case '=': | ||
| if(s === S_ATTR){ | ||
| attrName = source.slice(start,p); | ||
| s = S_EQ; | ||
| }else if(s === S_ATTR_S){ | ||
| s = S_EQ; | ||
| }else{ | ||
| throw new Error('attribute equal must after attrName'); | ||
| } | ||
| break; | ||
| case '\'': | ||
| case '"': | ||
| if(s === S_EQ){ | ||
| start = p+1; | ||
| p = source.indexOf(c,start) | ||
| if(p>0){ | ||
| value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); | ||
| el.add(attrName,value,start-1); | ||
| s = S_E; | ||
| }else{ | ||
| throw new Error('attribute value no end \''+c+'\' match'); | ||
| } | ||
| }else if(s == S_V){ | ||
| value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); | ||
| el.add(attrName,value,start); | ||
| errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); | ||
| start = p+1; | ||
| s = S_E | ||
| }else{ | ||
| throw new Error('attribute value must after "="'); | ||
| } | ||
| break; | ||
| case '/': | ||
| switch(s){ | ||
| case S_TAG: | ||
| el.setTagName(source.slice(start,p)); | ||
| case S_E: | ||
| case S_S: | ||
| case S_C: | ||
| s = S_C; | ||
| el.closed = true; | ||
| case S_V: | ||
| case S_ATTR: | ||
| case S_ATTR_S: | ||
| break; | ||
| default: | ||
| throw new Error("attribute invalid close char('/')") | ||
| } | ||
| break; | ||
| case '': | ||
| errorHandler.error('unexpected end of input'); | ||
| case '>': | ||
| switch(s){ | ||
| case S_TAG: | ||
| el.setTagName(source.slice(start,p)); | ||
| case S_E: | ||
| case S_S: | ||
| case S_C: | ||
| break; | ||
| case S_V: | ||
| case S_ATTR: | ||
| value = source.slice(start,p); | ||
| if(value.slice(-1) === '/'){ | ||
| el.closed = true; | ||
| value = value.slice(0,-1) | ||
| } | ||
| case S_ATTR_S: | ||
| if(s === S_ATTR_S){ | ||
| value = attrName; | ||
| } | ||
| if(s == S_V){ | ||
| errorHandler.warning('attribute "'+value+'" missed quot(")!!'); | ||
| el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start) | ||
| }else{ | ||
| errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') | ||
| el.add(value,value,start) | ||
| } | ||
| break; | ||
| case S_EQ: | ||
| throw new Error('attribute value missed!!'); | ||
| } | ||
| return p; | ||
| case '\u0080': | ||
| c = ' '; | ||
| default: | ||
| if(c<= ' '){ | ||
| switch(s){ | ||
| case S_TAG: | ||
| el.setTagName(source.slice(start,p)); | ||
| s = S_S; | ||
| break; | ||
| case S_ATTR: | ||
| attrName = source.slice(start,p) | ||
| s = S_ATTR_S; | ||
| break; | ||
| case S_V: | ||
| var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); | ||
| errorHandler.warning('attribute "'+value+'" missed quot(")!!'); | ||
| el.add(attrName,value,start) | ||
| case S_E: | ||
| s = S_S; | ||
| break; | ||
| } | ||
| }else{ | ||
| switch(s){ | ||
| case S_ATTR_S: | ||
| errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!') | ||
| el.add(attrName,attrName,start); | ||
| start = p; | ||
| s = S_ATTR; | ||
| break; | ||
| case S_E: | ||
| errorHandler.warning('attribute space is required"'+attrName+'"!!') | ||
| case S_S: | ||
| s = S_ATTR; | ||
| start = p; | ||
| break; | ||
| case S_EQ: | ||
| s = S_V; | ||
| start = p; | ||
| break; | ||
| case S_C: | ||
| throw new Error("elements closed character '/' and '>' must be connected to"); | ||
| } | ||
| } | ||
| } | ||
| p++; | ||
| } | ||
| } | ||
| function appendElement(el,domBuilder,parseStack){ | ||
| var tagName = el.tagName; | ||
| var localNSMap = null; | ||
| var currentNSMap = parseStack[parseStack.length-1].currentNSMap; | ||
| var i = el.length; | ||
| while(i--){ | ||
| var a = el[i]; | ||
| var qName = a.qName; | ||
| var value = a.value; | ||
| var nsp = qName.indexOf(':'); | ||
| if(nsp>0){ | ||
| var prefix = a.prefix = qName.slice(0,nsp); | ||
| var localName = qName.slice(nsp+1); | ||
| var nsPrefix = prefix === 'xmlns' && localName | ||
| }else{ | ||
| localName = qName; | ||
| prefix = null | ||
| nsPrefix = qName === 'xmlns' && '' | ||
| } | ||
| a.localName = localName ; | ||
| if(nsPrefix !== false){ | ||
| if(localNSMap == null){ | ||
| localNSMap = {} | ||
| _copy(currentNSMap,currentNSMap={}) | ||
| } | ||
| currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; | ||
| a.uri = 'http://www.w3.org/2000/xmlns/' | ||
| domBuilder.startPrefixMapping(nsPrefix, value) | ||
| } | ||
| } | ||
| var i = el.length; | ||
| while(i--){ | ||
| a = el[i]; | ||
| var prefix = a.prefix; | ||
| if(prefix){ | ||
| if(prefix === 'xml'){ | ||
| a.uri = 'http://www.w3.org/XML/1998/namespace'; | ||
| }if(prefix !== 'xmlns'){ | ||
| a.uri = currentNSMap[prefix] | ||
| } | ||
| } | ||
| } | ||
| var nsp = tagName.indexOf(':'); | ||
| if(nsp>0){ | ||
| prefix = el.prefix = tagName.slice(0,nsp); | ||
| localName = el.localName = tagName.slice(nsp+1); | ||
| }else{ | ||
| prefix = null; | ||
| localName = el.localName = tagName; | ||
| } | ||
| var ns = el.uri = currentNSMap[prefix || '']; | ||
| domBuilder.startElement(ns,localName,tagName,el); | ||
| if(el.closed){ | ||
| domBuilder.endElement(ns,localName,tagName); | ||
| if(localNSMap){ | ||
| for(prefix in localNSMap){ | ||
| domBuilder.endPrefixMapping(prefix) | ||
| } | ||
| } | ||
| }else{ | ||
| el.currentNSMap = currentNSMap; | ||
| el.localNSMap = localNSMap; | ||
| parseStack.push(el); | ||
| } | ||
| } | ||
| function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ | ||
| if(/^(?:script|textarea)$/i.test(tagName)){ | ||
| var elEndStart = source.indexOf('</'+tagName+'>',elStartEnd); | ||
| var text = source.substring(elStartEnd+1,elEndStart); | ||
| if(/[&<]/.test(text)){ | ||
| if(/^script$/i.test(tagName)){ | ||
| domBuilder.characters(text,0,text.length); | ||
| return elEndStart; | ||
| } | ||
| text = text.replace(/&#?\w+;/g,entityReplacer); | ||
| domBuilder.characters(text,0,text.length); | ||
| return elEndStart; | ||
| } | ||
| } | ||
| return elStartEnd+1; | ||
| } | ||
| function fixSelfClosed(source,elStartEnd,tagName,closeMap){ | ||
| var pos = closeMap[tagName]; | ||
| if(pos == null){ | ||
| pos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>') | ||
| } | ||
| return pos<elStartEnd; | ||
| } | ||
| function _copy(source,target){ | ||
| for(var n in source){target[n] = source[n]} | ||
| } | ||
| function parseDCC(source,start,domBuilder,errorHandler){ | ||
| var next= source.charAt(start+2) | ||
| switch(next){ | ||
| case '-': | ||
| if(source.charAt(start + 3) === '-'){ | ||
| var end = source.indexOf('-->',start+4); | ||
| if(end>start){ | ||
| domBuilder.comment(source,start+4,end-start-4); | ||
| return end+3; | ||
| }else{ | ||
| errorHandler.error("Unclosed comment"); | ||
| return -1; | ||
| } | ||
| }else{ | ||
| return -1; | ||
| } | ||
| default: | ||
| if(source.substr(start+3,6) == 'CDATA['){ | ||
| var end = source.indexOf(']]>',start+9); | ||
| domBuilder.startCDATA(); | ||
| domBuilder.characters(source,start+9,end-start-9); | ||
| domBuilder.endCDATA() | ||
| return end+3; | ||
| } | ||
| var matchs = split(source,start); | ||
| var len = matchs.length; | ||
| if(len>1 && /!doctype/i.test(matchs[0][0])){ | ||
| var name = matchs[1][0]; | ||
| var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0] | ||
| var sysid = len>4 && matchs[4][0]; | ||
| var lastMatch = matchs[len-1] | ||
| domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'), | ||
| sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2')); | ||
| domBuilder.endDTD(); | ||
| return lastMatch.index+lastMatch[0].length | ||
| } | ||
| } | ||
| return -1; | ||
| } | ||
| function parseInstruction(source,start,domBuilder){ | ||
| var end = source.indexOf('?>',start); | ||
| if(end){ | ||
| var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/); | ||
| if(match){ | ||
| var len = match[0].length; | ||
| domBuilder.processingInstruction(match[1], match[2]) ; | ||
| return end+2; | ||
| }else{ | ||
| return -1; | ||
| } | ||
| } | ||
| return -1; | ||
| } | ||
| function ElementAttributes(source){ | ||
| } | ||
| ElementAttributes.prototype = { | ||
| setTagName:function(tagName){ | ||
| if(!tagNamePattern.test(tagName)){ | ||
| throw new Error('invalid tagName:'+tagName) | ||
| } | ||
| this.tagName = tagName | ||
| }, | ||
| add:function(qName,value,offset){ | ||
| if(!tagNamePattern.test(qName)){ | ||
| throw new Error('invalid attribute:'+qName) | ||
| } | ||
| this[this.length++] = {qName:qName,value:value,offset:offset} | ||
| }, | ||
| length:0, | ||
| getLocalName:function(i){return this[i].localName}, | ||
| getOffset:function(i){return this[i].offset}, | ||
| getQName:function(i){return this[i].qName}, | ||
| getURI:function(i){return this[i].uri}, | ||
| getValue:function(i){return this[i].value} | ||
| } | ||
| function _set_proto_(thiz,parent){ | ||
| thiz.__proto__ = parent; | ||
| return thiz; | ||
| } | ||
| if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){ | ||
| _set_proto_ = function(thiz,parent){ | ||
| function p(){}; | ||
| p.prototype = parent; | ||
| p = new p(); | ||
| for(parent in thiz){ | ||
| p[parent] = thiz[parent]; | ||
| } | ||
| return p; | ||
| } | ||
| } | ||
| function split(source,start){ | ||
| var match; | ||
| var buf = []; | ||
| var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g; | ||
| reg.lastIndex = start; | ||
| reg.exec(source); | ||
| while(match = reg.exec(source)){ | ||
| buf.push(match); | ||
| if(match[1])return buf; | ||
| } | ||
| } | ||
| if(typeof require == 'function'){ | ||
| exports.XMLReader = XMLReader; | ||
| } | ||
| },function(exports,require){ | ||
| function copy(src,dest){ | ||
| for(var p in src){ | ||
| dest[p] = src[p]; | ||
| } | ||
| } | ||
| function _extends(Class,Super){ | ||
| var pt = Class.prototype; | ||
| if(Object.create){ | ||
| var ppt = Object.create(Super.prototype) | ||
| pt.__proto__ = ppt; | ||
| } | ||
| if(!(pt instanceof Super)){ | ||
| function t(){}; | ||
| t.prototype = Super.prototype; | ||
| t = new t(); | ||
| copy(pt,t); | ||
| Class.prototype = pt = t; | ||
| } | ||
| if(pt.constructor != Class){ | ||
| if(typeof Class != 'function'){ | ||
| console.error("unknow Class:"+Class) | ||
| } | ||
| pt.constructor = Class | ||
| } | ||
| } | ||
| var htmlns = 'http://www.w3.org/1999/xhtml' ; | ||
| var NodeType = {} | ||
| var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; | ||
| var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; | ||
| var TEXT_NODE = NodeType.TEXT_NODE = 3; | ||
| var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; | ||
| var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; | ||
| var ENTITY_NODE = NodeType.ENTITY_NODE = 6; | ||
| var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; | ||
| var COMMENT_NODE = NodeType.COMMENT_NODE = 8; | ||
| var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; | ||
| var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; | ||
| var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; | ||
| var NOTATION_NODE = NodeType.NOTATION_NODE = 12; | ||
| var ExceptionCode = {} | ||
| var ExceptionMessage = {}; | ||
| var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); | ||
| var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); | ||
| var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); | ||
| var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); | ||
| var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); | ||
| var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); | ||
| var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); | ||
| var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); | ||
| var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); | ||
| var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); | ||
| var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); | ||
| var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); | ||
| var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); | ||
| var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); | ||
| var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); | ||
| function DOMException(code, message) { | ||
| if(message instanceof Error){ | ||
| var error = message; | ||
| }else{ | ||
| error = this; | ||
| Error.call(this, ExceptionMessage[code]); | ||
| this.message = ExceptionMessage[code]; | ||
| if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); | ||
| } | ||
| error.code = code; | ||
| if(message) this.message = this.message + ": " + message; | ||
| return error; | ||
| }; | ||
| DOMException.prototype = Error.prototype; | ||
| copy(ExceptionCode,DOMException) | ||
| function NodeList() { | ||
| }; | ||
| NodeList.prototype = { | ||
| length:0, | ||
| item: function(index) { | ||
| return this[index] || null; | ||
| } | ||
| }; | ||
| function LiveNodeList(node,refresh){ | ||
| this._node = node; | ||
| this._refresh = refresh | ||
| _updateLiveList(this); | ||
| } | ||
| function _updateLiveList(list){ | ||
| var inc = list._node._inc || list._node.ownerDocument._inc; | ||
| if(list._inc != inc){ | ||
| var ls = list._refresh(list._node); | ||
| __set__(list,'length',ls.length); | ||
| copy(ls,list); | ||
| list._inc = inc; | ||
| } | ||
| } | ||
| LiveNodeList.prototype.item = function(i){ | ||
| _updateLiveList(this); | ||
| return this[i]; | ||
| } | ||
| _extends(LiveNodeList,NodeList); | ||
| function NamedNodeMap() { | ||
| }; | ||
| function _findNodeIndex(list,node){ | ||
| var i = list.length; | ||
| while(i--){ | ||
| if(list[i] === node){return i} | ||
| } | ||
| } | ||
| function _addNamedNode(el,list,newAttr,oldAttr){ | ||
| if(oldAttr){ | ||
| list[_findNodeIndex(list,oldAttr)] = newAttr; | ||
| }else{ | ||
| list[list.length++] = newAttr; | ||
| } | ||
| if(el){ | ||
| newAttr.ownerElement = el; | ||
| var doc = el.ownerDocument; | ||
| if(doc){ | ||
| oldAttr && _onRemoveAttribute(doc,el,oldAttr); | ||
| _onAddAttribute(doc,el,newAttr); | ||
| } | ||
| } | ||
| } | ||
| function _removeNamedNode(el,list,attr){ | ||
| var i = _findNodeIndex(list,attr); | ||
| if(i>=0){ | ||
| var lastIndex = list.length-1 | ||
| while(i<lastIndex){ | ||
| list[i] = list[++i] | ||
| } | ||
| list.length = lastIndex; | ||
| if(el){ | ||
| var doc = el.ownerDocument; | ||
| if(doc){ | ||
| _onRemoveAttribute(doc,el,attr); | ||
| attr.ownerElement = null; | ||
| } | ||
| } | ||
| }else{ | ||
| throw DOMException(NOT_FOUND_ERR,new Error()) | ||
| } | ||
| } | ||
| NamedNodeMap.prototype = { | ||
| length:0, | ||
| item:NodeList.prototype.item, | ||
| getNamedItem: function(key) { | ||
| var i = this.length; | ||
| while(i--){ | ||
| var attr = this[i]; | ||
| if(attr.nodeName == key){ | ||
| return attr; | ||
| } | ||
| } | ||
| }, | ||
| setNamedItem: function(attr) { | ||
| var el = attr.ownerElement; | ||
| if(el && el!=this._ownerElement){ | ||
| throw new DOMException(INUSE_ATTRIBUTE_ERR); | ||
| } | ||
| var oldAttr = this.getNamedItem(attr.nodeName); | ||
| _addNamedNode(this._ownerElement,this,attr,oldAttr); | ||
| return oldAttr; | ||
| }, | ||
| setNamedItemNS: function(attr) { | ||
| var el = attr.ownerElement, oldAttr; | ||
| if(el && el!=this._ownerElement){ | ||
| throw new DOMException(INUSE_ATTRIBUTE_ERR); | ||
| } | ||
| oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); | ||
| _addNamedNode(this._ownerElement,this,attr,oldAttr); | ||
| return oldAttr; | ||
| }, | ||
| removeNamedItem: function(key) { | ||
| var attr = this.getNamedItem(key); | ||
| _removeNamedNode(this._ownerElement,this,attr); | ||
| return attr; | ||
| }, | ||
| removeNamedItemNS:function(namespaceURI,localName){ | ||
| var attr = this.getNamedItemNS(namespaceURI,localName); | ||
| _removeNamedNode(this._ownerElement,this,attr); | ||
| return attr; | ||
| }, | ||
| getNamedItemNS: function(namespaceURI, localName) { | ||
| var i = this.length; | ||
| while(i--){ | ||
| var node = this[i]; | ||
| if(node.localName == localName && node.namespaceURI == namespaceURI){ | ||
| return node; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| }; | ||
| function DOMImplementation( features) { | ||
| this._features = {}; | ||
| if (features) { | ||
| for (var feature in features) { | ||
| this._features = features[feature]; | ||
| } | ||
| } | ||
| }; | ||
| DOMImplementation.prototype = { | ||
| hasFeature: function( feature, version) { | ||
| var versions = this._features[feature.toLowerCase()]; | ||
| if (versions && (!version || version in versions)) { | ||
| return true; | ||
| } else { | ||
| return false; | ||
| } | ||
| }, | ||
| createDocument:function(namespaceURI, qualifiedName, doctype){ | ||
| var doc = new Document(); | ||
| doc.implementation = this; | ||
| doc.childNodes = new NodeList(); | ||
| doc.doctype = doctype; | ||
| if(doctype){ | ||
| doc.appendChild(doctype); | ||
| } | ||
| if(qualifiedName){ | ||
| var root = doc.createElementNS(namespaceURI,qualifiedName); | ||
| doc.appendChild(root); | ||
| } | ||
| return doc; | ||
| }, | ||
| createDocumentType:function(qualifiedName, publicId, systemId){ | ||
| var node = new DocumentType(); | ||
| node.name = qualifiedName; | ||
| node.nodeName = qualifiedName; | ||
| node.publicId = publicId; | ||
| node.systemId = systemId; | ||
| return node; | ||
| } | ||
| }; | ||
| function Node() { | ||
| }; | ||
| Node.prototype = { | ||
| firstChild : null, | ||
| lastChild : null, | ||
| previousSibling : null, | ||
| nextSibling : null, | ||
| attributes : null, | ||
| parentNode : null, | ||
| childNodes : null, | ||
| ownerDocument : null, | ||
| nodeValue : null, | ||
| namespaceURI : null, | ||
| prefix : null, | ||
| localName : null, | ||
| insertBefore:function(newChild, refChild){ | ||
| return _insertBefore(this,newChild,refChild); | ||
| }, | ||
| replaceChild:function(newChild, oldChild){ | ||
| this.insertBefore(newChild,oldChild); | ||
| if(oldChild){ | ||
| this.removeChild(oldChild); | ||
| } | ||
| }, | ||
| removeChild:function(oldChild){ | ||
| return _removeChild(this,oldChild); | ||
| }, | ||
| appendChild:function(newChild){ | ||
| return this.insertBefore(newChild,null); | ||
| }, | ||
| hasChildNodes:function(){ | ||
| return this.firstChild != null; | ||
| }, | ||
| cloneNode:function(deep){ | ||
| return cloneNode(this.ownerDocument||this,this,deep); | ||
| }, | ||
| normalize:function(){ | ||
| var child = this.firstChild; | ||
| while(child){ | ||
| var next = child.nextSibling; | ||
| if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ | ||
| this.removeChild(next); | ||
| child.appendData(next.data); | ||
| }else{ | ||
| child.normalize(); | ||
| child = next; | ||
| } | ||
| } | ||
| }, | ||
| isSupported:function(feature, version){ | ||
| return this.ownerDocument.implementation.hasFeature(feature,version); | ||
| }, | ||
| hasAttributes:function(){ | ||
| return this.attributes.length>0; | ||
| }, | ||
| lookupPrefix:function(namespaceURI){ | ||
| var el = this; | ||
| while(el){ | ||
| var map = el._nsMap; | ||
| if(map){ | ||
| for(var n in map){ | ||
| if(map[n] == namespaceURI){ | ||
| return n; | ||
| } | ||
| } | ||
| } | ||
| el = el.nodeType == 2?el.ownerDocument : el.parentNode; | ||
| } | ||
| return null; | ||
| }, | ||
| lookupNamespaceURI:function(prefix){ | ||
| var el = this; | ||
| while(el){ | ||
| var map = el._nsMap; | ||
| if(map){ | ||
| if(prefix in map){ | ||
| return map[prefix] ; | ||
| } | ||
| } | ||
| el = el.nodeType == 2?el.ownerDocument : el.parentNode; | ||
| } | ||
| return null; | ||
| }, | ||
| isDefaultNamespace:function(namespaceURI){ | ||
| var prefix = this.lookupPrefix(namespaceURI); | ||
| return prefix == null; | ||
| } | ||
| }; | ||
| function _xmlEncoder(c){ | ||
| return c == '<' && '<' || | ||
| c == '>' && '>' || | ||
| c == '&' && '&' || | ||
| c == '"' && '"' || | ||
| '&#'+c.charCodeAt()+';' | ||
| } | ||
| copy(NodeType,Node); | ||
| copy(NodeType,Node.prototype); | ||
| function _visitNode(node,callback){ | ||
| if(callback(node)){ | ||
| return true; | ||
| } | ||
| if(node = node.firstChild){ | ||
| do{ | ||
| if(_visitNode(node,callback)){return true} | ||
| }while(node=node.nextSibling) | ||
| } | ||
| } | ||
| function Document(){ | ||
| } | ||
| function _onAddAttribute(doc,el,newAttr){ | ||
| doc && doc._inc++; | ||
| var ns = newAttr.namespaceURI ; | ||
| if(ns == 'http://www.w3.org/2000/xmlns/'){ | ||
| el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value | ||
| } | ||
| } | ||
| function _onRemoveAttribute(doc,el,newAttr,remove){ | ||
| doc && doc._inc++; | ||
| var ns = newAttr.namespaceURI ; | ||
| if(ns == 'http://www.w3.org/2000/xmlns/'){ | ||
| delete el._nsMap[newAttr.prefix?newAttr.localName:''] | ||
| } | ||
| } | ||
| function _onUpdateChild(doc,el,newChild){ | ||
| if(doc && doc._inc){ | ||
| doc._inc++; | ||
| var cs = el.childNodes; | ||
| if(newChild){ | ||
| cs[cs.length++] = newChild; | ||
| }else{ | ||
| var child = el.firstChild; | ||
| var i = 0; | ||
| while(child){ | ||
| cs[i++] = child; | ||
| child =child.nextSibling; | ||
| } | ||
| cs.length = i; | ||
| } | ||
| } | ||
| } | ||
| function _removeChild(parentNode,child){ | ||
| var previous = child.previousSibling; | ||
| var next = child.nextSibling; | ||
| if(previous){ | ||
| previous.nextSibling = next; | ||
| }else{ | ||
| parentNode.firstChild = next | ||
| } | ||
| if(next){ | ||
| next.previousSibling = previous; | ||
| }else{ | ||
| parentNode.lastChild = previous; | ||
| } | ||
| _onUpdateChild(parentNode.ownerDocument,parentNode); | ||
| return child; | ||
| } | ||
| function _insertBefore(parentNode,newChild,nextChild){ | ||
| var cp = newChild.parentNode; | ||
| if(cp){ | ||
| cp.removeChild(newChild); | ||
| } | ||
| if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ | ||
| var newFirst = newChild.firstChild; | ||
| if (newFirst == null) { | ||
| return newChild; | ||
| } | ||
| var newLast = newChild.lastChild; | ||
| }else{ | ||
| newFirst = newLast = newChild; | ||
| } | ||
| var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; | ||
| newFirst.previousSibling = pre; | ||
| newLast.nextSibling = nextChild; | ||
| if(pre){ | ||
| pre.nextSibling = newFirst; | ||
| }else{ | ||
| parentNode.firstChild = newFirst; | ||
| } | ||
| if(nextChild == null){ | ||
| parentNode.lastChild = newLast; | ||
| }else{ | ||
| nextChild.previousSibling = newLast; | ||
| } | ||
| do{ | ||
| newFirst.parentNode = parentNode; | ||
| }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) | ||
| _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); | ||
| if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { | ||
| newChild.firstChild = newChild.lastChild = null; | ||
| } | ||
| return newChild; | ||
| } | ||
| function _appendSingleChild(parentNode,newChild){ | ||
| var cp = newChild.parentNode; | ||
| if(cp){ | ||
| var pre = parentNode.lastChild; | ||
| cp.removeChild(newChild); | ||
| var pre = parentNode.lastChild; | ||
| } | ||
| var pre = parentNode.lastChild; | ||
| newChild.parentNode = parentNode; | ||
| newChild.previousSibling = pre; | ||
| newChild.nextSibling = null; | ||
| if(pre){ | ||
| pre.nextSibling = newChild; | ||
| }else{ | ||
| parentNode.firstChild = newChild; | ||
| } | ||
| parentNode.lastChild = newChild; | ||
| _onUpdateChild(parentNode.ownerDocument,parentNode,newChild); | ||
| return newChild; | ||
| } | ||
| Document.prototype = { | ||
| nodeName : '#document', | ||
| nodeType : DOCUMENT_NODE, | ||
| doctype : null, | ||
| documentElement : null, | ||
| _inc : 1, | ||
| insertBefore : function(newChild, refChild){ | ||
| if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ | ||
| var child = newChild.firstChild; | ||
| while(child){ | ||
| var next = child.nextSibling; | ||
| this.insertBefore(child,refChild); | ||
| child = next; | ||
| } | ||
| return newChild; | ||
| } | ||
| if(this.documentElement == null && newChild.nodeType == 1){ | ||
| this.documentElement = newChild; | ||
| } | ||
| return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; | ||
| }, | ||
| removeChild : function(oldChild){ | ||
| if(this.documentElement == oldChild){ | ||
| this.documentElement = null; | ||
| } | ||
| return _removeChild(this,oldChild); | ||
| }, | ||
| importNode : function(importedNode,deep){ | ||
| return importNode(this,importedNode,deep); | ||
| }, | ||
| getElementById : function(id){ | ||
| var rtv = null; | ||
| _visitNode(this.documentElement,function(node){ | ||
| if(node.nodeType == 1){ | ||
| if(node.getAttribute('id') == id){ | ||
| rtv = node; | ||
| return true; | ||
| } | ||
| } | ||
| }) | ||
| return rtv; | ||
| }, | ||
| createElement : function(tagName){ | ||
| var node = new Element(); | ||
| node.ownerDocument = this; | ||
| node.nodeName = tagName; | ||
| node.tagName = tagName; | ||
| node.childNodes = new NodeList(); | ||
| var attrs = node.attributes = new NamedNodeMap(); | ||
| attrs._ownerElement = node; | ||
| return node; | ||
| }, | ||
| createDocumentFragment : function(){ | ||
| var node = new DocumentFragment(); | ||
| node.ownerDocument = this; | ||
| node.childNodes = new NodeList(); | ||
| return node; | ||
| }, | ||
| createTextNode : function(data){ | ||
| var node = new Text(); | ||
| node.ownerDocument = this; | ||
| node.appendData(data) | ||
| return node; | ||
| }, | ||
| createComment : function(data){ | ||
| var node = new Comment(); | ||
| node.ownerDocument = this; | ||
| node.appendData(data) | ||
| return node; | ||
| }, | ||
| createCDATASection : function(data){ | ||
| var node = new CDATASection(); | ||
| node.ownerDocument = this; | ||
| node.appendData(data) | ||
| return node; | ||
| }, | ||
| createProcessingInstruction : function(target,data){ | ||
| var node = new ProcessingInstruction(); | ||
| node.ownerDocument = this; | ||
| node.tagName = node.target = target; | ||
| node.nodeValue= node.data = data; | ||
| return node; | ||
| }, | ||
| createAttribute : function(name){ | ||
| var node = new Attr(); | ||
| node.ownerDocument = this; | ||
| node.name = name; | ||
| node.nodeName = name; | ||
| node.localName = name; | ||
| node.specified = true; | ||
| return node; | ||
| }, | ||
| createEntityReference : function(name){ | ||
| var node = new EntityReference(); | ||
| node.ownerDocument = this; | ||
| node.nodeName = name; | ||
| return node; | ||
| }, | ||
| createElementNS : function(namespaceURI,qualifiedName){ | ||
| var node = new Element(); | ||
| var pl = qualifiedName.split(':'); | ||
| var attrs = node.attributes = new NamedNodeMap(); | ||
| node.childNodes = new NodeList(); | ||
| node.ownerDocument = this; | ||
| node.nodeName = qualifiedName; | ||
| node.tagName = qualifiedName; | ||
| node.namespaceURI = namespaceURI; | ||
| if(pl.length == 2){ | ||
| node.prefix = pl[0]; | ||
| node.localName = pl[1]; | ||
| }else{ | ||
| node.localName = qualifiedName; | ||
| } | ||
| attrs._ownerElement = node; | ||
| return node; | ||
| }, | ||
| createAttributeNS : function(namespaceURI,qualifiedName){ | ||
| var node = new Attr(); | ||
| var pl = qualifiedName.split(':'); | ||
| node.ownerDocument = this; | ||
| node.nodeName = qualifiedName; | ||
| node.name = qualifiedName; | ||
| node.namespaceURI = namespaceURI; | ||
| node.specified = true; | ||
| if(pl.length == 2){ | ||
| node.prefix = pl[0]; | ||
| node.localName = pl[1]; | ||
| }else{ | ||
| node.localName = qualifiedName; | ||
| } | ||
| return node; | ||
| } | ||
| }; | ||
| _extends(Document,Node); | ||
| function Element() { | ||
| this._nsMap = {}; | ||
| }; | ||
| Element.prototype = { | ||
| nodeType : ELEMENT_NODE, | ||
| hasAttribute : function(name){ | ||
| return this.getAttributeNode(name)!=null; | ||
| }, | ||
| getAttribute : function(name){ | ||
| var attr = this.getAttributeNode(name); | ||
| return attr && attr.value || ''; | ||
| }, | ||
| getAttributeNode : function(name){ | ||
| return this.attributes.getNamedItem(name); | ||
| }, | ||
| setAttribute : function(name, value){ | ||
| var attr = this.ownerDocument.createAttribute(name); | ||
| attr.value = attr.nodeValue = "" + value; | ||
| this.setAttributeNode(attr) | ||
| }, | ||
| removeAttribute : function(name){ | ||
| var attr = this.getAttributeNode(name) | ||
| attr && this.removeAttributeNode(attr); | ||
| }, | ||
| appendChild:function(newChild){ | ||
| if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ | ||
| return this.insertBefore(newChild,null); | ||
| }else{ | ||
| return _appendSingleChild(this,newChild); | ||
| } | ||
| }, | ||
| setAttributeNode : function(newAttr){ | ||
| return this.attributes.setNamedItem(newAttr); | ||
| }, | ||
| setAttributeNodeNS : function(newAttr){ | ||
| return this.attributes.setNamedItemNS(newAttr); | ||
| }, | ||
| removeAttributeNode : function(oldAttr){ | ||
| return this.attributes.removeNamedItem(oldAttr.nodeName); | ||
| }, | ||
| removeAttributeNS : function(namespaceURI, localName){ | ||
| var old = this.getAttributeNodeNS(namespaceURI, localName); | ||
| old && this.removeAttributeNode(old); | ||
| }, | ||
| hasAttributeNS : function(namespaceURI, localName){ | ||
| return this.getAttributeNodeNS(namespaceURI, localName)!=null; | ||
| }, | ||
| getAttributeNS : function(namespaceURI, localName){ | ||
| var attr = this.getAttributeNodeNS(namespaceURI, localName); | ||
| return attr && attr.value || ''; | ||
| }, | ||
| setAttributeNS : function(namespaceURI, qualifiedName, value){ | ||
| var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); | ||
| attr.value = attr.nodeValue = "" + value; | ||
| this.setAttributeNode(attr) | ||
| }, | ||
| getAttributeNodeNS : function(namespaceURI, localName){ | ||
| return this.attributes.getNamedItemNS(namespaceURI, localName); | ||
| }, | ||
| getElementsByTagName : function(tagName){ | ||
| return new LiveNodeList(this,function(base){ | ||
| var ls = []; | ||
| _visitNode(base,function(node){ | ||
| if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ | ||
| ls.push(node); | ||
| } | ||
| }); | ||
| return ls; | ||
| }); | ||
| }, | ||
| getElementsByTagNameNS : function(namespaceURI, localName){ | ||
| return new LiveNodeList(this,function(base){ | ||
| var ls = []; | ||
| _visitNode(base,function(node){ | ||
| if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){ | ||
| ls.push(node); | ||
| } | ||
| }); | ||
| return ls; | ||
| }); | ||
| } | ||
| }; | ||
| Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; | ||
| Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; | ||
| _extends(Element,Node); | ||
| function Attr() { | ||
| }; | ||
| Attr.prototype.nodeType = ATTRIBUTE_NODE; | ||
| _extends(Attr,Node); | ||
| function CharacterData() { | ||
| }; | ||
| CharacterData.prototype = { | ||
| data : '', | ||
| substringData : function(offset, count) { | ||
| return this.data.substring(offset, offset+count); | ||
| }, | ||
| appendData: function(text) { | ||
| text = this.data+text; | ||
| this.nodeValue = this.data = text; | ||
| this.length = text.length; | ||
| }, | ||
| insertData: function(offset,text) { | ||
| this.replaceData(offset,0,text); | ||
| }, | ||
| appendChild:function(newChild){ | ||
| throw new Error(ExceptionMessage[3]) | ||
| return Node.prototype.appendChild.apply(this,arguments) | ||
| }, | ||
| deleteData: function(offset, count) { | ||
| this.replaceData(offset,count,""); | ||
| }, | ||
| replaceData: function(offset, count, text) { | ||
| var start = this.data.substring(0,offset); | ||
| var end = this.data.substring(offset+count); | ||
| text = start + text + end; | ||
| this.nodeValue = this.data = text; | ||
| this.length = text.length; | ||
| } | ||
| } | ||
| _extends(CharacterData,Node); | ||
| function Text() { | ||
| }; | ||
| Text.prototype = { | ||
| nodeName : "#text", | ||
| nodeType : TEXT_NODE, | ||
| splitText : function(offset) { | ||
| var text = this.data; | ||
| var newText = text.substring(offset); | ||
| text = text.substring(0, offset); | ||
| this.data = this.nodeValue = text; | ||
| this.length = text.length; | ||
| var newNode = this.ownerDocument.createTextNode(newText); | ||
| if(this.parentNode){ | ||
| this.parentNode.insertBefore(newNode, this.nextSibling); | ||
| } | ||
| return newNode; | ||
| } | ||
| } | ||
| _extends(Text,CharacterData); | ||
| function Comment() { | ||
| }; | ||
| Comment.prototype = { | ||
| nodeName : "#comment", | ||
| nodeType : COMMENT_NODE | ||
| } | ||
| _extends(Comment,CharacterData); | ||
| function CDATASection() { | ||
| }; | ||
| CDATASection.prototype = { | ||
| nodeName : "#cdata-section", | ||
| nodeType : CDATA_SECTION_NODE | ||
| } | ||
| _extends(CDATASection,CharacterData); | ||
| function DocumentType() { | ||
| }; | ||
| DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; | ||
| _extends(DocumentType,Node); | ||
| function Notation() { | ||
| }; | ||
| Notation.prototype.nodeType = NOTATION_NODE; | ||
| _extends(Notation,Node); | ||
| function Entity() { | ||
| }; | ||
| Entity.prototype.nodeType = ENTITY_NODE; | ||
| _extends(Entity,Node); | ||
| function EntityReference() { | ||
| }; | ||
| EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; | ||
| _extends(EntityReference,Node); | ||
| function DocumentFragment() { | ||
| }; | ||
| DocumentFragment.prototype.nodeName = "#document-fragment"; | ||
| DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; | ||
| _extends(DocumentFragment,Node); | ||
| function ProcessingInstruction() { | ||
| } | ||
| ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; | ||
| _extends(ProcessingInstruction,Node); | ||
| function XMLSerializer(){} | ||
| XMLSerializer.prototype.serializeToString = function(node){ | ||
| var buf = []; | ||
| serializeToString(node,buf); | ||
| return buf.join(''); | ||
| } | ||
| Node.prototype.toString =function(){ | ||
| return XMLSerializer.prototype.serializeToString(this); | ||
| } | ||
| function serializeToString(node,buf){ | ||
| switch(node.nodeType){ | ||
| case ELEMENT_NODE: | ||
| var attrs = node.attributes; | ||
| var len = attrs.length; | ||
| var child = node.firstChild; | ||
| var nodeName = node.tagName; | ||
| var isHTML = htmlns === node.namespaceURI | ||
| buf.push('<',nodeName); | ||
| for(var i=0;i<len;i++){ | ||
| serializeToString(attrs.item(i),buf,isHTML); | ||
| } | ||
| if(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){ | ||
| buf.push('>'); | ||
| if(isHTML && /^script$/i.test(nodeName)){ | ||
| if(child){ | ||
| buf.push(child.data); | ||
| } | ||
| }else{ | ||
| while(child){ | ||
| serializeToString(child,buf); | ||
| child = child.nextSibling; | ||
| } | ||
| } | ||
| buf.push('</',nodeName,'>'); | ||
| }else{ | ||
| buf.push('/>'); | ||
| } | ||
| return; | ||
| case DOCUMENT_NODE: | ||
| case DOCUMENT_FRAGMENT_NODE: | ||
| var child = node.firstChild; | ||
| while(child){ | ||
| serializeToString(child,buf); | ||
| child = child.nextSibling; | ||
| } | ||
| return; | ||
| case ATTRIBUTE_NODE: | ||
| return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"'); | ||
| case TEXT_NODE: | ||
| return buf.push(node.data.replace(/[<&]/g,_xmlEncoder)); | ||
| case CDATA_SECTION_NODE: | ||
| return buf.push( '<![CDATA[',node.data,']]>'); | ||
| case COMMENT_NODE: | ||
| return buf.push( "<!--",node.data,"-->"); | ||
| case DOCUMENT_TYPE_NODE: | ||
| var pubid = node.publicId; | ||
| var sysid = node.systemId; | ||
| buf.push('<!DOCTYPE ',node.name); | ||
| if(pubid){ | ||
| buf.push(' PUBLIC "',pubid); | ||
| if (sysid && sysid!='.') { | ||
| buf.push( '" "',sysid); | ||
| } | ||
| buf.push('">'); | ||
| }else if(sysid && sysid!='.'){ | ||
| buf.push(' SYSTEM "',sysid,'">'); | ||
| }else{ | ||
| var sub = node.internalSubset; | ||
| if(sub){ | ||
| buf.push(" [",sub,"]"); | ||
| } | ||
| buf.push(">"); | ||
| } | ||
| return; | ||
| case PROCESSING_INSTRUCTION_NODE: | ||
| return buf.push( "<?",node.target," ",node.data,"?>"); | ||
| case ENTITY_REFERENCE_NODE: | ||
| return buf.push( '&',node.nodeName,';'); | ||
| default: | ||
| buf.push('??',node.nodeName); | ||
| } | ||
| } | ||
| function importNode(doc,node,deep){ | ||
| var node2; | ||
| switch (node.nodeType) { | ||
| case ELEMENT_NODE: | ||
| node2 = node.cloneNode(false); | ||
| node2.ownerDocument = doc; | ||
| case DOCUMENT_FRAGMENT_NODE: | ||
| break; | ||
| case ATTRIBUTE_NODE: | ||
| deep = true; | ||
| break; | ||
| } | ||
| if(!node2){ | ||
| node2 = node.cloneNode(false); | ||
| } | ||
| node2.ownerDocument = doc; | ||
| node2.parentNode = null; | ||
| if(deep){ | ||
| var child = node.firstChild; | ||
| while(child){ | ||
| node2.appendChild(importNode(doc,child,deep)); | ||
| child = child.nextSibling; | ||
| } | ||
| } | ||
| return node2; | ||
| } | ||
| function cloneNode(doc,node,deep){ | ||
| var node2 = new node.constructor(); | ||
| for(var n in node){ | ||
| var v = node[n]; | ||
| if(typeof v != 'object' ){ | ||
| if(v != node2[n]){ | ||
| node2[n] = v; | ||
| } | ||
| } | ||
| } | ||
| if(node.childNodes){ | ||
| node2.childNodes = new NodeList(); | ||
| } | ||
| node2.ownerDocument = doc; | ||
| switch (node2.nodeType) { | ||
| case ELEMENT_NODE: | ||
| var attrs = node.attributes; | ||
| var attrs2 = node2.attributes = new NamedNodeMap(); | ||
| var len = attrs.length | ||
| attrs2._ownerElement = node2; | ||
| for(var i=0;i<len;i++){ | ||
| node2.setAttributeNode(cloneNode(doc,attrs.item(i),true)); | ||
| } | ||
| break;; | ||
| case ATTRIBUTE_NODE: | ||
| deep = true; | ||
| } | ||
| if(deep){ | ||
| var child = node.firstChild; | ||
| while(child){ | ||
| node2.appendChild(cloneNode(doc,child,deep)); | ||
| child = child.nextSibling; | ||
| } | ||
| } | ||
| return node2; | ||
| } | ||
| function __set__(object,key,value){ | ||
| object[key] = value | ||
| } | ||
| try{ | ||
| if(Object.defineProperty){ | ||
| Object.defineProperty(LiveNodeList.prototype,'length',{ | ||
| get:function(){ | ||
| _updateLiveList(this); | ||
| return this.$$length; | ||
| } | ||
| }); | ||
| Object.defineProperty(Node.prototype,'textContent',{ | ||
| get:function(){ | ||
| return getTextContent(this); | ||
| }, | ||
| set:function(data){ | ||
| switch(this.nodeType){ | ||
| case 1: | ||
| case 11: | ||
| while(this.firstChild){ | ||
| this.removeChild(this.firstChild); | ||
| } | ||
| if(data || String(data)){ | ||
| this.appendChild(this.ownerDocument.createTextNode(data)); | ||
| } | ||
| break; | ||
| default: | ||
| this.data = data; | ||
| this.value = value; | ||
| this.nodeValue = data; | ||
| } | ||
| } | ||
| }) | ||
| function getTextContent(node){ | ||
| switch(node.nodeType){ | ||
| case 1: | ||
| case 11: | ||
| var buf = []; | ||
| node = node.firstChild; | ||
| while(node){ | ||
| if(node.nodeType!==7 && node.nodeType !==8){ | ||
| buf.push(getTextContent(node)); | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| return buf.join(''); | ||
| default: | ||
| return node.nodeValue; | ||
| } | ||
| } | ||
| __set__ = function(object,key,value){ | ||
| object['$$'+key] = value | ||
| } | ||
| } | ||
| }catch(e){ | ||
| } | ||
| if(typeof require == 'function'){ | ||
| exports.DOMImplementation = DOMImplementation; | ||
| exports.XMLSerializer = XMLSerializer; | ||
| } | ||
| }) |
+1817
| ~function(){ | ||
| var impls = arguments; | ||
| var cached = {}; | ||
| function internal_require(i,o){ | ||
| if(typeof i=='number'){ | ||
| var exports = cached[i]; | ||
| if(!exports){ | ||
| cached[i] = exports = {}; | ||
| var id = './'+i; | ||
| var module = {exports:exports,id:id} | ||
| impls[i](cached[i],internal_require,module,id); | ||
| cached[i] = exports = module.exports; | ||
| } | ||
| if(o){ | ||
| for(i in exports){ | ||
| o[i] = exports[i]; | ||
| } | ||
| } | ||
| return o || exports; | ||
| }else{ | ||
| return this.require ? require(i) : {} | ||
| } | ||
| } | ||
| return internal_require(0,this); | ||
| }(function(exports,require){function DOMParser(options){ | ||
| this.options = options ||{locator:{}}; | ||
| } | ||
| DOMParser.prototype.parseFromString = function(source,mimeType){ | ||
| var options = this.options; | ||
| var sax = new XMLReader(); | ||
| var domBuilder = options.domBuilder || new DOMHandler(); | ||
| var errorHandler = options.errorHandler; | ||
| var locator = options.locator; | ||
| var defaultNSMap = options.xmlns||{}; | ||
| var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"} | ||
| if(locator){ | ||
| domBuilder.setDocumentLocator(locator) | ||
| } | ||
| sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); | ||
| sax.domBuilder = options.domBuilder || domBuilder; | ||
| if(/\/x?html?$/.test(mimeType)){ | ||
| entityMap.nbsp = '\xa0'; | ||
| entityMap.copy = '\xa9'; | ||
| defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; | ||
| } | ||
| if(source){ | ||
| sax.parse(source,defaultNSMap,entityMap); | ||
| }else{ | ||
| sax.errorHandler.error("invalid document source"); | ||
| } | ||
| return domBuilder.document; | ||
| } | ||
| function buildErrorHandler(errorImpl,domBuilder,locator){ | ||
| if(!errorImpl){ | ||
| if(domBuilder instanceof DOMHandler){ | ||
| return domBuilder; | ||
| } | ||
| errorImpl = domBuilder ; | ||
| } | ||
| var errorHandler = {} | ||
| var isCallback = errorImpl instanceof Function; | ||
| locator = locator||{} | ||
| function build(key){ | ||
| var fn = errorImpl[key]; | ||
| if(!fn){ | ||
| if(isCallback){ | ||
| fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; | ||
| }else{ | ||
| var i=arguments.length; | ||
| while(--i){ | ||
| if(fn = errorImpl[arguments[i]]){ | ||
| break; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| errorHandler[key] = fn && function(msg){ | ||
| fn(msg+_locator(locator)); | ||
| }||function(){}; | ||
| } | ||
| build('warning','warn'); | ||
| build('error','warn','warning'); | ||
| build('fatalError','warn','warning','error'); | ||
| return errorHandler; | ||
| } | ||
| function DOMHandler() { | ||
| this.cdata = false; | ||
| } | ||
| function position(locator,node){ | ||
| node.lineNumber = locator.lineNumber; | ||
| node.columnNumber = locator.columnNumber; | ||
| } | ||
| DOMHandler.prototype = { | ||
| startDocument : function() { | ||
| this.document = new DOMImplementation().createDocument(null, null, null); | ||
| if (this.locator) { | ||
| this.document.documentURI = this.locator.systemId; | ||
| } | ||
| }, | ||
| startElement:function(namespaceURI, localName, qName, attrs) { | ||
| var doc = this.document; | ||
| var el = doc.createElementNS(namespaceURI, qName||localName); | ||
| var len = attrs.length; | ||
| appendElement(this, el); | ||
| this.currentElement = el; | ||
| this.locator && position(this.locator,el) | ||
| for (var i = 0 ; i < len; i++) { | ||
| var namespaceURI = attrs.getURI(i); | ||
| var value = attrs.getValue(i); | ||
| var qName = attrs.getQName(i); | ||
| var attr = doc.createAttributeNS(namespaceURI, qName); | ||
| if( attr.getOffset){ | ||
| position(attr.getOffset(1),attr) | ||
| } | ||
| attr.value = attr.nodeValue = value; | ||
| el.setAttributeNode(attr) | ||
| } | ||
| }, | ||
| endElement:function(namespaceURI, localName, qName) { | ||
| var current = this.currentElement | ||
| var tagName = current.tagName; | ||
| this.currentElement = current.parentNode; | ||
| }, | ||
| startPrefixMapping:function(prefix, uri) { | ||
| }, | ||
| endPrefixMapping:function(prefix) { | ||
| }, | ||
| processingInstruction:function(target, data) { | ||
| var ins = this.document.createProcessingInstruction(target, data); | ||
| this.locator && position(this.locator,ins) | ||
| appendElement(this, ins); | ||
| }, | ||
| ignorableWhitespace:function(ch, start, length) { | ||
| }, | ||
| characters:function(chars, start, length) { | ||
| chars = _toString.apply(this,arguments) | ||
| if(this.currentElement && chars){ | ||
| if (this.cdata) { | ||
| var charNode = this.document.createCDATASection(chars); | ||
| this.currentElement.appendChild(charNode); | ||
| } else { | ||
| var charNode = this.document.createTextNode(chars); | ||
| this.currentElement.appendChild(charNode); | ||
| } | ||
| this.locator && position(this.locator,charNode) | ||
| } | ||
| }, | ||
| skippedEntity:function(name) { | ||
| }, | ||
| endDocument:function() { | ||
| this.document.normalize(); | ||
| }, | ||
| setDocumentLocator:function (locator) { | ||
| if(this.locator = locator){ | ||
| locator.lineNumber = 0; | ||
| } | ||
| }, | ||
| comment:function(chars, start, length) { | ||
| chars = _toString.apply(this,arguments) | ||
| var comm = this.document.createComment(chars); | ||
| this.locator && position(this.locator,comm) | ||
| appendElement(this, comm); | ||
| }, | ||
| startCDATA:function() { | ||
| this.cdata = true; | ||
| }, | ||
| endCDATA:function() { | ||
| this.cdata = false; | ||
| }, | ||
| startDTD:function(name, publicId, systemId) { | ||
| var impl = this.document.implementation; | ||
| if (impl && impl.createDocumentType) { | ||
| var dt = impl.createDocumentType(name, publicId, systemId); | ||
| this.locator && position(this.locator,dt) | ||
| appendElement(this, dt); | ||
| } | ||
| }, | ||
| warning:function(error) { | ||
| console.warn(error,_locator(this.locator)); | ||
| }, | ||
| error:function(error) { | ||
| console.error(error,_locator(this.locator)); | ||
| }, | ||
| fatalError:function(error) { | ||
| console.error(error,_locator(this.locator)); | ||
| throw error; | ||
| } | ||
| } | ||
| function _locator(l){ | ||
| if(l){ | ||
| return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' | ||
| } | ||
| } | ||
| function _toString(chars,start,length){ | ||
| if(typeof chars == 'string'){ | ||
| return chars.substr(start,length) | ||
| }else{ | ||
| if(chars.length >= start+length || start){ | ||
| return new java.lang.String(chars,start,length)+''; | ||
| } | ||
| return chars; | ||
| } | ||
| } | ||
| "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ | ||
| DOMHandler.prototype[key] = function(){return null} | ||
| }) | ||
| function appendElement (hander,node) { | ||
| if (!hander.currentElement) { | ||
| hander.document.appendChild(node); | ||
| } else { | ||
| hander.currentElement.appendChild(node); | ||
| } | ||
| } | ||
| if(typeof require == 'function'){ | ||
| var XMLReader = require(1).XMLReader; | ||
| var DOMImplementation = exports.DOMImplementation = require(2).DOMImplementation; | ||
| exports.XMLSerializer = require(2).XMLSerializer ; | ||
| exports.DOMParser = DOMParser; | ||
| } | ||
| },function(exports,require){ | ||
| var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ | ||
| var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\ux203F-\u2040]"); | ||
| var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$'); | ||
| var S_TAG = 0; | ||
| var S_ATTR = 1; | ||
| var S_ATTR_S=2; | ||
| var S_EQ = 3; | ||
| var S_V = 4; | ||
| var S_E = 5; | ||
| var S_S = 6; | ||
| var S_C = 7; | ||
| function XMLReader(){ | ||
| } | ||
| XMLReader.prototype = { | ||
| parse:function(source,defaultNSMap,entityMap){ | ||
| var domBuilder = this.domBuilder; | ||
| domBuilder.startDocument(); | ||
| _copy(defaultNSMap ,defaultNSMap = {}) | ||
| parse(source,defaultNSMap,entityMap, | ||
| domBuilder,this.errorHandler); | ||
| domBuilder.endDocument(); | ||
| } | ||
| } | ||
| function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ | ||
| function fixedFromCharCode(code) { | ||
| if (code > 0xffff) { | ||
| code -= 0x10000; | ||
| var surrogate1 = 0xd800 + (code >> 10) | ||
| , surrogate2 = 0xdc00 + (code & 0x3ff); | ||
| return String.fromCharCode(surrogate1, surrogate2); | ||
| } else { | ||
| return String.fromCharCode(code); | ||
| } | ||
| } | ||
| function entityReplacer(a){ | ||
| var k = a.slice(1,-1); | ||
| if(k in entityMap){ | ||
| return entityMap[k]; | ||
| }else if(k.charAt(0) === '#'){ | ||
| return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) | ||
| }else{ | ||
| errorHandler.error('entity not found:'+a); | ||
| return a; | ||
| } | ||
| } | ||
| function appendText(end){ | ||
| var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); | ||
| locator&&position(start); | ||
| domBuilder.characters(xt,0,end-start); | ||
| start = end | ||
| } | ||
| function position(start,m){ | ||
| while(start>=endPos && (m = linePattern.exec(source))){ | ||
| startPos = m.index; | ||
| endPos = startPos + m[0].length; | ||
| locator.lineNumber++; | ||
| } | ||
| locator.columnNumber = start-startPos+1; | ||
| } | ||
| var startPos = 0; | ||
| var endPos = 0; | ||
| var linePattern = /.+(?:\r\n?|\n)|.*$/g | ||
| var locator = domBuilder.locator; | ||
| var parseStack = [{currentNSMap:defaultNSMapCopy}] | ||
| var closeMap = {}; | ||
| var start = 0; | ||
| while(true){ | ||
| var i = source.indexOf('<',start); | ||
| if(i<0){ | ||
| if(!source.substr(start).match(/^\s*$/)){ | ||
| var doc = domBuilder.document; | ||
| var text = doc.createTextNode(source.substr(start)); | ||
| doc.appendChild(text); | ||
| domBuilder.currentElement = text; | ||
| } | ||
| return; | ||
| } | ||
| if(i>start){ | ||
| appendText(i); | ||
| } | ||
| switch(source.charAt(i+1)){ | ||
| case '/': | ||
| var end = source.indexOf('>',i+3); | ||
| var tagName = source.substring(i+2,end); | ||
| var config = parseStack.pop(); | ||
| var localNSMap = config.localNSMap; | ||
| if(config.tagName != tagName){ | ||
| errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName ); | ||
| } | ||
| domBuilder.endElement(config.uri,config.localName,tagName); | ||
| if(localNSMap){ | ||
| for(var prefix in localNSMap){ | ||
| domBuilder.endPrefixMapping(prefix) ; | ||
| } | ||
| } | ||
| end++; | ||
| break; | ||
| case '?': | ||
| locator&&position(i); | ||
| end = parseInstruction(source,i,domBuilder); | ||
| break; | ||
| case '!': | ||
| locator&&position(i); | ||
| end = parseDCC(source,i,domBuilder,errorHandler); | ||
| break; | ||
| default: | ||
| try{ | ||
| locator&&position(i); | ||
| var el = new ElementAttributes(); | ||
| var end = parseElementStartPart(source,i,el,entityReplacer,errorHandler); | ||
| var len = el.length; | ||
| if(len && locator){ | ||
| var backup = copyLocator(locator,{}); | ||
| for(var i = 0;i<len;i++){ | ||
| var a = el[i]; | ||
| position(a.offset); | ||
| a.offset = copyLocator(locator,{}); | ||
| } | ||
| copyLocator(backup,locator); | ||
| } | ||
| if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){ | ||
| el.closed = true; | ||
| if(!entityMap.nbsp){ | ||
| errorHandler.warning('unclosed xml attribute'); | ||
| } | ||
| } | ||
| appendElement(el,domBuilder,parseStack); | ||
| if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){ | ||
| end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder) | ||
| }else{ | ||
| end++; | ||
| } | ||
| }catch(e){ | ||
| errorHandler.error('element parse error: '+e); | ||
| end = -1; | ||
| } | ||
| } | ||
| if(end<0){ | ||
| appendText(i+1); | ||
| }else{ | ||
| start = end; | ||
| } | ||
| } | ||
| } | ||
| function copyLocator(f,t){ | ||
| t.lineNumber = f.lineNumber; | ||
| t.columnNumber = f.columnNumber; | ||
| return t; | ||
| } | ||
| function parseElementStartPart(source,start,el,entityReplacer,errorHandler){ | ||
| var attrName; | ||
| var value; | ||
| var p = ++start; | ||
| var s = S_TAG; | ||
| while(true){ | ||
| var c = source.charAt(p); | ||
| switch(c){ | ||
| case '=': | ||
| if(s === S_ATTR){ | ||
| attrName = source.slice(start,p); | ||
| s = S_EQ; | ||
| }else if(s === S_ATTR_S){ | ||
| s = S_EQ; | ||
| }else{ | ||
| throw new Error('attribute equal must after attrName'); | ||
| } | ||
| break; | ||
| case '\'': | ||
| case '"': | ||
| if(s === S_EQ){ | ||
| start = p+1; | ||
| p = source.indexOf(c,start) | ||
| if(p>0){ | ||
| value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); | ||
| el.add(attrName,value,start-1); | ||
| s = S_E; | ||
| }else{ | ||
| throw new Error('attribute value no end \''+c+'\' match'); | ||
| } | ||
| }else if(s == S_V){ | ||
| value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); | ||
| el.add(attrName,value,start); | ||
| errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); | ||
| start = p+1; | ||
| s = S_E | ||
| }else{ | ||
| throw new Error('attribute value must after "="'); | ||
| } | ||
| break; | ||
| case '/': | ||
| switch(s){ | ||
| case S_TAG: | ||
| el.setTagName(source.slice(start,p)); | ||
| case S_E: | ||
| case S_S: | ||
| case S_C: | ||
| s = S_C; | ||
| el.closed = true; | ||
| case S_V: | ||
| case S_ATTR: | ||
| case S_ATTR_S: | ||
| break; | ||
| default: | ||
| throw new Error("attribute invalid close char('/')") | ||
| } | ||
| break; | ||
| case '': | ||
| errorHandler.error('unexpected end of input'); | ||
| case '>': | ||
| switch(s){ | ||
| case S_TAG: | ||
| el.setTagName(source.slice(start,p)); | ||
| case S_E: | ||
| case S_S: | ||
| case S_C: | ||
| break; | ||
| case S_V: | ||
| case S_ATTR: | ||
| value = source.slice(start,p); | ||
| if(value.slice(-1) === '/'){ | ||
| el.closed = true; | ||
| value = value.slice(0,-1) | ||
| } | ||
| case S_ATTR_S: | ||
| if(s === S_ATTR_S){ | ||
| value = attrName; | ||
| } | ||
| if(s == S_V){ | ||
| errorHandler.warning('attribute "'+value+'" missed quot(")!!'); | ||
| el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start) | ||
| }else{ | ||
| errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') | ||
| el.add(value,value,start) | ||
| } | ||
| break; | ||
| case S_EQ: | ||
| throw new Error('attribute value missed!!'); | ||
| } | ||
| return p; | ||
| case '\u0080': | ||
| c = ' '; | ||
| default: | ||
| if(c<= ' '){ | ||
| switch(s){ | ||
| case S_TAG: | ||
| el.setTagName(source.slice(start,p)); | ||
| s = S_S; | ||
| break; | ||
| case S_ATTR: | ||
| attrName = source.slice(start,p) | ||
| s = S_ATTR_S; | ||
| break; | ||
| case S_V: | ||
| var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); | ||
| errorHandler.warning('attribute "'+value+'" missed quot(")!!'); | ||
| el.add(attrName,value,start) | ||
| case S_E: | ||
| s = S_S; | ||
| break; | ||
| } | ||
| }else{ | ||
| switch(s){ | ||
| case S_ATTR_S: | ||
| errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!') | ||
| el.add(attrName,attrName,start); | ||
| start = p; | ||
| s = S_ATTR; | ||
| break; | ||
| case S_E: | ||
| errorHandler.warning('attribute space is required"'+attrName+'"!!') | ||
| case S_S: | ||
| s = S_ATTR; | ||
| start = p; | ||
| break; | ||
| case S_EQ: | ||
| s = S_V; | ||
| start = p; | ||
| break; | ||
| case S_C: | ||
| throw new Error("elements closed character '/' and '>' must be connected to"); | ||
| } | ||
| } | ||
| } | ||
| p++; | ||
| } | ||
| } | ||
| function appendElement(el,domBuilder,parseStack){ | ||
| var tagName = el.tagName; | ||
| var localNSMap = null; | ||
| var currentNSMap = parseStack[parseStack.length-1].currentNSMap; | ||
| var i = el.length; | ||
| while(i--){ | ||
| var a = el[i]; | ||
| var qName = a.qName; | ||
| var value = a.value; | ||
| var nsp = qName.indexOf(':'); | ||
| if(nsp>0){ | ||
| var prefix = a.prefix = qName.slice(0,nsp); | ||
| var localName = qName.slice(nsp+1); | ||
| var nsPrefix = prefix === 'xmlns' && localName | ||
| }else{ | ||
| localName = qName; | ||
| prefix = null | ||
| nsPrefix = qName === 'xmlns' && '' | ||
| } | ||
| a.localName = localName ; | ||
| if(nsPrefix !== false){ | ||
| if(localNSMap == null){ | ||
| localNSMap = {} | ||
| _copy(currentNSMap,currentNSMap={}) | ||
| } | ||
| currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; | ||
| a.uri = 'http://www.w3.org/2000/xmlns/' | ||
| domBuilder.startPrefixMapping(nsPrefix, value) | ||
| } | ||
| } | ||
| var i = el.length; | ||
| while(i--){ | ||
| a = el[i]; | ||
| var prefix = a.prefix; | ||
| if(prefix){ | ||
| if(prefix === 'xml'){ | ||
| a.uri = 'http://www.w3.org/XML/1998/namespace'; | ||
| }if(prefix !== 'xmlns'){ | ||
| a.uri = currentNSMap[prefix] | ||
| } | ||
| } | ||
| } | ||
| var nsp = tagName.indexOf(':'); | ||
| if(nsp>0){ | ||
| prefix = el.prefix = tagName.slice(0,nsp); | ||
| localName = el.localName = tagName.slice(nsp+1); | ||
| }else{ | ||
| prefix = null; | ||
| localName = el.localName = tagName; | ||
| } | ||
| var ns = el.uri = currentNSMap[prefix || '']; | ||
| domBuilder.startElement(ns,localName,tagName,el); | ||
| if(el.closed){ | ||
| domBuilder.endElement(ns,localName,tagName); | ||
| if(localNSMap){ | ||
| for(prefix in localNSMap){ | ||
| domBuilder.endPrefixMapping(prefix) | ||
| } | ||
| } | ||
| }else{ | ||
| el.currentNSMap = currentNSMap; | ||
| el.localNSMap = localNSMap; | ||
| parseStack.push(el); | ||
| } | ||
| } | ||
| function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ | ||
| if(/^(?:script|textarea)$/i.test(tagName)){ | ||
| var elEndStart = source.indexOf('</'+tagName+'>',elStartEnd); | ||
| var text = source.substring(elStartEnd+1,elEndStart); | ||
| if(/[&<]/.test(text)){ | ||
| if(/^script$/i.test(tagName)){ | ||
| domBuilder.characters(text,0,text.length); | ||
| return elEndStart; | ||
| } | ||
| text = text.replace(/&#?\w+;/g,entityReplacer); | ||
| domBuilder.characters(text,0,text.length); | ||
| return elEndStart; | ||
| } | ||
| } | ||
| return elStartEnd+1; | ||
| } | ||
| function fixSelfClosed(source,elStartEnd,tagName,closeMap){ | ||
| var pos = closeMap[tagName]; | ||
| if(pos == null){ | ||
| pos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>') | ||
| } | ||
| return pos<elStartEnd; | ||
| } | ||
| function _copy(source,target){ | ||
| for(var n in source){target[n] = source[n]} | ||
| } | ||
| function parseDCC(source,start,domBuilder,errorHandler){ | ||
| var next= source.charAt(start+2) | ||
| switch(next){ | ||
| case '-': | ||
| if(source.charAt(start + 3) === '-'){ | ||
| var end = source.indexOf('-->',start+4); | ||
| if(end>start){ | ||
| domBuilder.comment(source,start+4,end-start-4); | ||
| return end+3; | ||
| }else{ | ||
| errorHandler.error("Unclosed comment"); | ||
| return -1; | ||
| } | ||
| }else{ | ||
| return -1; | ||
| } | ||
| default: | ||
| if(source.substr(start+3,6) == 'CDATA['){ | ||
| var end = source.indexOf(']]>',start+9); | ||
| domBuilder.startCDATA(); | ||
| domBuilder.characters(source,start+9,end-start-9); | ||
| domBuilder.endCDATA() | ||
| return end+3; | ||
| } | ||
| var matchs = split(source,start); | ||
| var len = matchs.length; | ||
| if(len>1 && /!doctype/i.test(matchs[0][0])){ | ||
| var name = matchs[1][0]; | ||
| var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0] | ||
| var sysid = len>4 && matchs[4][0]; | ||
| var lastMatch = matchs[len-1] | ||
| domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'), | ||
| sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2')); | ||
| domBuilder.endDTD(); | ||
| return lastMatch.index+lastMatch[0].length | ||
| } | ||
| } | ||
| return -1; | ||
| } | ||
| function parseInstruction(source,start,domBuilder){ | ||
| var end = source.indexOf('?>',start); | ||
| if(end){ | ||
| var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/); | ||
| if(match){ | ||
| var len = match[0].length; | ||
| domBuilder.processingInstruction(match[1], match[2]) ; | ||
| return end+2; | ||
| }else{ | ||
| return -1; | ||
| } | ||
| } | ||
| return -1; | ||
| } | ||
| function ElementAttributes(source){ | ||
| } | ||
| ElementAttributes.prototype = { | ||
| setTagName:function(tagName){ | ||
| if(!tagNamePattern.test(tagName)){ | ||
| throw new Error('invalid tagName:'+tagName) | ||
| } | ||
| this.tagName = tagName | ||
| }, | ||
| add:function(qName,value,offset){ | ||
| if(!tagNamePattern.test(qName)){ | ||
| throw new Error('invalid attribute:'+qName) | ||
| } | ||
| this[this.length++] = {qName:qName,value:value,offset:offset} | ||
| }, | ||
| length:0, | ||
| getLocalName:function(i){return this[i].localName}, | ||
| getOffset:function(i){return this[i].offset}, | ||
| getQName:function(i){return this[i].qName}, | ||
| getURI:function(i){return this[i].uri}, | ||
| getValue:function(i){return this[i].value} | ||
| } | ||
| function _set_proto_(thiz,parent){ | ||
| thiz.__proto__ = parent; | ||
| return thiz; | ||
| } | ||
| if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){ | ||
| _set_proto_ = function(thiz,parent){ | ||
| function p(){}; | ||
| p.prototype = parent; | ||
| p = new p(); | ||
| for(parent in thiz){ | ||
| p[parent] = thiz[parent]; | ||
| } | ||
| return p; | ||
| } | ||
| } | ||
| function split(source,start){ | ||
| var match; | ||
| var buf = []; | ||
| var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g; | ||
| reg.lastIndex = start; | ||
| reg.exec(source); | ||
| while(match = reg.exec(source)){ | ||
| buf.push(match); | ||
| if(match[1])return buf; | ||
| } | ||
| } | ||
| if(typeof require == 'function'){ | ||
| exports.XMLReader = XMLReader; | ||
| } | ||
| },function(exports,require){ | ||
| function copy(src,dest){ | ||
| for(var p in src){ | ||
| dest[p] = src[p]; | ||
| } | ||
| } | ||
| function _extends(Class,Super){ | ||
| var pt = Class.prototype; | ||
| if(Object.create){ | ||
| var ppt = Object.create(Super.prototype) | ||
| pt.__proto__ = ppt; | ||
| } | ||
| if(!(pt instanceof Super)){ | ||
| function t(){}; | ||
| t.prototype = Super.prototype; | ||
| t = new t(); | ||
| copy(pt,t); | ||
| Class.prototype = pt = t; | ||
| } | ||
| if(pt.constructor != Class){ | ||
| if(typeof Class != 'function'){ | ||
| console.error("unknow Class:"+Class) | ||
| } | ||
| pt.constructor = Class | ||
| } | ||
| } | ||
| var htmlns = 'http://www.w3.org/1999/xhtml' ; | ||
| var NodeType = {} | ||
| var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; | ||
| var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; | ||
| var TEXT_NODE = NodeType.TEXT_NODE = 3; | ||
| var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; | ||
| var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; | ||
| var ENTITY_NODE = NodeType.ENTITY_NODE = 6; | ||
| var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; | ||
| var COMMENT_NODE = NodeType.COMMENT_NODE = 8; | ||
| var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; | ||
| var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; | ||
| var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; | ||
| var NOTATION_NODE = NodeType.NOTATION_NODE = 12; | ||
| var ExceptionCode = {} | ||
| var ExceptionMessage = {}; | ||
| var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); | ||
| var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); | ||
| var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); | ||
| var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); | ||
| var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); | ||
| var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); | ||
| var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); | ||
| var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); | ||
| var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); | ||
| var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); | ||
| var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); | ||
| var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); | ||
| var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); | ||
| var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); | ||
| var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); | ||
| function DOMException(code, message) { | ||
| if(message instanceof Error){ | ||
| var error = message; | ||
| }else{ | ||
| error = this; | ||
| Error.call(this, ExceptionMessage[code]); | ||
| this.message = ExceptionMessage[code]; | ||
| if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); | ||
| } | ||
| error.code = code; | ||
| if(message) this.message = this.message + ": " + message; | ||
| return error; | ||
| }; | ||
| DOMException.prototype = Error.prototype; | ||
| copy(ExceptionCode,DOMException) | ||
| function NodeList() { | ||
| }; | ||
| NodeList.prototype = { | ||
| length:0, | ||
| item: function(index) { | ||
| return this[index] || null; | ||
| } | ||
| }; | ||
| function LiveNodeList(node,refresh){ | ||
| this._node = node; | ||
| this._refresh = refresh | ||
| _updateLiveList(this); | ||
| } | ||
| function _updateLiveList(list){ | ||
| var inc = list._node._inc || list._node.ownerDocument._inc; | ||
| if(list._inc != inc){ | ||
| var ls = list._refresh(list._node); | ||
| __set__(list,'length',ls.length); | ||
| copy(ls,list); | ||
| list._inc = inc; | ||
| } | ||
| } | ||
| LiveNodeList.prototype.item = function(i){ | ||
| _updateLiveList(this); | ||
| return this[i]; | ||
| } | ||
| _extends(LiveNodeList,NodeList); | ||
| function NamedNodeMap() { | ||
| }; | ||
| function _findNodeIndex(list,node){ | ||
| var i = list.length; | ||
| while(i--){ | ||
| if(list[i] === node){return i} | ||
| } | ||
| } | ||
| function _addNamedNode(el,list,newAttr,oldAttr){ | ||
| if(oldAttr){ | ||
| list[_findNodeIndex(list,oldAttr)] = newAttr; | ||
| }else{ | ||
| list[list.length++] = newAttr; | ||
| } | ||
| if(el){ | ||
| newAttr.ownerElement = el; | ||
| var doc = el.ownerDocument; | ||
| if(doc){ | ||
| oldAttr && _onRemoveAttribute(doc,el,oldAttr); | ||
| _onAddAttribute(doc,el,newAttr); | ||
| } | ||
| } | ||
| } | ||
| function _removeNamedNode(el,list,attr){ | ||
| var i = _findNodeIndex(list,attr); | ||
| if(i>=0){ | ||
| var lastIndex = list.length-1 | ||
| while(i<lastIndex){ | ||
| list[i] = list[++i] | ||
| } | ||
| list.length = lastIndex; | ||
| if(el){ | ||
| var doc = el.ownerDocument; | ||
| if(doc){ | ||
| _onRemoveAttribute(doc,el,attr); | ||
| attr.ownerElement = null; | ||
| } | ||
| } | ||
| }else{ | ||
| throw DOMException(NOT_FOUND_ERR,new Error()) | ||
| } | ||
| } | ||
| NamedNodeMap.prototype = { | ||
| length:0, | ||
| item:NodeList.prototype.item, | ||
| getNamedItem: function(key) { | ||
| var i = this.length; | ||
| while(i--){ | ||
| var attr = this[i]; | ||
| if(attr.nodeName == key){ | ||
| return attr; | ||
| } | ||
| } | ||
| }, | ||
| setNamedItem: function(attr) { | ||
| var el = attr.ownerElement; | ||
| if(el && el!=this._ownerElement){ | ||
| throw new DOMException(INUSE_ATTRIBUTE_ERR); | ||
| } | ||
| var oldAttr = this.getNamedItem(attr.nodeName); | ||
| _addNamedNode(this._ownerElement,this,attr,oldAttr); | ||
| return oldAttr; | ||
| }, | ||
| setNamedItemNS: function(attr) { | ||
| var el = attr.ownerElement, oldAttr; | ||
| if(el && el!=this._ownerElement){ | ||
| throw new DOMException(INUSE_ATTRIBUTE_ERR); | ||
| } | ||
| oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); | ||
| _addNamedNode(this._ownerElement,this,attr,oldAttr); | ||
| return oldAttr; | ||
| }, | ||
| removeNamedItem: function(key) { | ||
| var attr = this.getNamedItem(key); | ||
| _removeNamedNode(this._ownerElement,this,attr); | ||
| return attr; | ||
| }, | ||
| removeNamedItemNS:function(namespaceURI,localName){ | ||
| var attr = this.getNamedItemNS(namespaceURI,localName); | ||
| _removeNamedNode(this._ownerElement,this,attr); | ||
| return attr; | ||
| }, | ||
| getNamedItemNS: function(namespaceURI, localName) { | ||
| var i = this.length; | ||
| while(i--){ | ||
| var node = this[i]; | ||
| if(node.localName == localName && node.namespaceURI == namespaceURI){ | ||
| return node; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| }; | ||
| function DOMImplementation( features) { | ||
| this._features = {}; | ||
| if (features) { | ||
| for (var feature in features) { | ||
| this._features = features[feature]; | ||
| } | ||
| } | ||
| }; | ||
| DOMImplementation.prototype = { | ||
| hasFeature: function( feature, version) { | ||
| var versions = this._features[feature.toLowerCase()]; | ||
| if (versions && (!version || version in versions)) { | ||
| return true; | ||
| } else { | ||
| return false; | ||
| } | ||
| }, | ||
| createDocument:function(namespaceURI, qualifiedName, doctype){ | ||
| var doc = new Document(); | ||
| doc.implementation = this; | ||
| doc.childNodes = new NodeList(); | ||
| doc.doctype = doctype; | ||
| if(doctype){ | ||
| doc.appendChild(doctype); | ||
| } | ||
| if(qualifiedName){ | ||
| var root = doc.createElementNS(namespaceURI,qualifiedName); | ||
| doc.appendChild(root); | ||
| } | ||
| return doc; | ||
| }, | ||
| createDocumentType:function(qualifiedName, publicId, systemId){ | ||
| var node = new DocumentType(); | ||
| node.name = qualifiedName; | ||
| node.nodeName = qualifiedName; | ||
| node.publicId = publicId; | ||
| node.systemId = systemId; | ||
| return node; | ||
| } | ||
| }; | ||
| function Node() { | ||
| }; | ||
| Node.prototype = { | ||
| firstChild : null, | ||
| lastChild : null, | ||
| previousSibling : null, | ||
| nextSibling : null, | ||
| attributes : null, | ||
| parentNode : null, | ||
| childNodes : null, | ||
| ownerDocument : null, | ||
| nodeValue : null, | ||
| namespaceURI : null, | ||
| prefix : null, | ||
| localName : null, | ||
| insertBefore:function(newChild, refChild){ | ||
| return _insertBefore(this,newChild,refChild); | ||
| }, | ||
| replaceChild:function(newChild, oldChild){ | ||
| this.insertBefore(newChild,oldChild); | ||
| if(oldChild){ | ||
| this.removeChild(oldChild); | ||
| } | ||
| }, | ||
| removeChild:function(oldChild){ | ||
| return _removeChild(this,oldChild); | ||
| }, | ||
| appendChild:function(newChild){ | ||
| return this.insertBefore(newChild,null); | ||
| }, | ||
| hasChildNodes:function(){ | ||
| return this.firstChild != null; | ||
| }, | ||
| cloneNode:function(deep){ | ||
| return cloneNode(this.ownerDocument||this,this,deep); | ||
| }, | ||
| normalize:function(){ | ||
| var child = this.firstChild; | ||
| while(child){ | ||
| var next = child.nextSibling; | ||
| if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ | ||
| this.removeChild(next); | ||
| child.appendData(next.data); | ||
| }else{ | ||
| child.normalize(); | ||
| child = next; | ||
| } | ||
| } | ||
| }, | ||
| isSupported:function(feature, version){ | ||
| return this.ownerDocument.implementation.hasFeature(feature,version); | ||
| }, | ||
| hasAttributes:function(){ | ||
| return this.attributes.length>0; | ||
| }, | ||
| lookupPrefix:function(namespaceURI){ | ||
| var el = this; | ||
| while(el){ | ||
| var map = el._nsMap; | ||
| if(map){ | ||
| for(var n in map){ | ||
| if(map[n] == namespaceURI){ | ||
| return n; | ||
| } | ||
| } | ||
| } | ||
| el = el.nodeType == 2?el.ownerDocument : el.parentNode; | ||
| } | ||
| return null; | ||
| }, | ||
| lookupNamespaceURI:function(prefix){ | ||
| var el = this; | ||
| while(el){ | ||
| var map = el._nsMap; | ||
| if(map){ | ||
| if(prefix in map){ | ||
| return map[prefix] ; | ||
| } | ||
| } | ||
| el = el.nodeType == 2?el.ownerDocument : el.parentNode; | ||
| } | ||
| return null; | ||
| }, | ||
| isDefaultNamespace:function(namespaceURI){ | ||
| var prefix = this.lookupPrefix(namespaceURI); | ||
| return prefix == null; | ||
| } | ||
| }; | ||
| function _xmlEncoder(c){ | ||
| return c == '<' && '<' || | ||
| c == '>' && '>' || | ||
| c == '&' && '&' || | ||
| c == '"' && '"' || | ||
| '&#'+c.charCodeAt()+';' | ||
| } | ||
| copy(NodeType,Node); | ||
| copy(NodeType,Node.prototype); | ||
| function _visitNode(node,callback){ | ||
| if(callback(node)){ | ||
| return true; | ||
| } | ||
| if(node = node.firstChild){ | ||
| do{ | ||
| if(_visitNode(node,callback)){return true} | ||
| }while(node=node.nextSibling) | ||
| } | ||
| } | ||
| function Document(){ | ||
| } | ||
| function _onAddAttribute(doc,el,newAttr){ | ||
| doc && doc._inc++; | ||
| var ns = newAttr.namespaceURI ; | ||
| if(ns == 'http://www.w3.org/2000/xmlns/'){ | ||
| el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value | ||
| } | ||
| } | ||
| function _onRemoveAttribute(doc,el,newAttr,remove){ | ||
| doc && doc._inc++; | ||
| var ns = newAttr.namespaceURI ; | ||
| if(ns == 'http://www.w3.org/2000/xmlns/'){ | ||
| delete el._nsMap[newAttr.prefix?newAttr.localName:''] | ||
| } | ||
| } | ||
| function _onUpdateChild(doc,el,newChild){ | ||
| if(doc && doc._inc){ | ||
| doc._inc++; | ||
| var cs = el.childNodes; | ||
| if(newChild){ | ||
| cs[cs.length++] = newChild; | ||
| }else{ | ||
| var child = el.firstChild; | ||
| var i = 0; | ||
| while(child){ | ||
| cs[i++] = child; | ||
| child =child.nextSibling; | ||
| } | ||
| cs.length = i; | ||
| } | ||
| } | ||
| } | ||
| function _removeChild(parentNode,child){ | ||
| var previous = child.previousSibling; | ||
| var next = child.nextSibling; | ||
| if(previous){ | ||
| previous.nextSibling = next; | ||
| }else{ | ||
| parentNode.firstChild = next | ||
| } | ||
| if(next){ | ||
| next.previousSibling = previous; | ||
| }else{ | ||
| parentNode.lastChild = previous; | ||
| } | ||
| _onUpdateChild(parentNode.ownerDocument,parentNode); | ||
| return child; | ||
| } | ||
| function _insertBefore(parentNode,newChild,nextChild){ | ||
| var cp = newChild.parentNode; | ||
| if(cp){ | ||
| cp.removeChild(newChild); | ||
| } | ||
| if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ | ||
| var newFirst = newChild.firstChild; | ||
| if (newFirst == null) { | ||
| return newChild; | ||
| } | ||
| var newLast = newChild.lastChild; | ||
| }else{ | ||
| newFirst = newLast = newChild; | ||
| } | ||
| var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; | ||
| newFirst.previousSibling = pre; | ||
| newLast.nextSibling = nextChild; | ||
| if(pre){ | ||
| pre.nextSibling = newFirst; | ||
| }else{ | ||
| parentNode.firstChild = newFirst; | ||
| } | ||
| if(nextChild == null){ | ||
| parentNode.lastChild = newLast; | ||
| }else{ | ||
| nextChild.previousSibling = newLast; | ||
| } | ||
| do{ | ||
| newFirst.parentNode = parentNode; | ||
| }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) | ||
| _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); | ||
| if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { | ||
| newChild.firstChild = newChild.lastChild = null; | ||
| } | ||
| return newChild; | ||
| } | ||
| function _appendSingleChild(parentNode,newChild){ | ||
| var cp = newChild.parentNode; | ||
| if(cp){ | ||
| var pre = parentNode.lastChild; | ||
| cp.removeChild(newChild); | ||
| var pre = parentNode.lastChild; | ||
| } | ||
| var pre = parentNode.lastChild; | ||
| newChild.parentNode = parentNode; | ||
| newChild.previousSibling = pre; | ||
| newChild.nextSibling = null; | ||
| if(pre){ | ||
| pre.nextSibling = newChild; | ||
| }else{ | ||
| parentNode.firstChild = newChild; | ||
| } | ||
| parentNode.lastChild = newChild; | ||
| _onUpdateChild(parentNode.ownerDocument,parentNode,newChild); | ||
| return newChild; | ||
| } | ||
| Document.prototype = { | ||
| nodeName : '#document', | ||
| nodeType : DOCUMENT_NODE, | ||
| doctype : null, | ||
| documentElement : null, | ||
| _inc : 1, | ||
| insertBefore : function(newChild, refChild){ | ||
| if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ | ||
| var child = newChild.firstChild; | ||
| while(child){ | ||
| var next = child.nextSibling; | ||
| this.insertBefore(child,refChild); | ||
| child = next; | ||
| } | ||
| return newChild; | ||
| } | ||
| if(this.documentElement == null && newChild.nodeType == 1){ | ||
| this.documentElement = newChild; | ||
| } | ||
| return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; | ||
| }, | ||
| removeChild : function(oldChild){ | ||
| if(this.documentElement == oldChild){ | ||
| this.documentElement = null; | ||
| } | ||
| return _removeChild(this,oldChild); | ||
| }, | ||
| importNode : function(importedNode,deep){ | ||
| return importNode(this,importedNode,deep); | ||
| }, | ||
| getElementById : function(id){ | ||
| var rtv = null; | ||
| _visitNode(this.documentElement,function(node){ | ||
| if(node.nodeType == 1){ | ||
| if(node.getAttribute('id') == id){ | ||
| rtv = node; | ||
| return true; | ||
| } | ||
| } | ||
| }) | ||
| return rtv; | ||
| }, | ||
| createElement : function(tagName){ | ||
| var node = new Element(); | ||
| node.ownerDocument = this; | ||
| node.nodeName = tagName; | ||
| node.tagName = tagName; | ||
| node.childNodes = new NodeList(); | ||
| var attrs = node.attributes = new NamedNodeMap(); | ||
| attrs._ownerElement = node; | ||
| return node; | ||
| }, | ||
| createDocumentFragment : function(){ | ||
| var node = new DocumentFragment(); | ||
| node.ownerDocument = this; | ||
| node.childNodes = new NodeList(); | ||
| return node; | ||
| }, | ||
| createTextNode : function(data){ | ||
| var node = new Text(); | ||
| node.ownerDocument = this; | ||
| node.appendData(data) | ||
| return node; | ||
| }, | ||
| createComment : function(data){ | ||
| var node = new Comment(); | ||
| node.ownerDocument = this; | ||
| node.appendData(data) | ||
| return node; | ||
| }, | ||
| createCDATASection : function(data){ | ||
| var node = new CDATASection(); | ||
| node.ownerDocument = this; | ||
| node.appendData(data) | ||
| return node; | ||
| }, | ||
| createProcessingInstruction : function(target,data){ | ||
| var node = new ProcessingInstruction(); | ||
| node.ownerDocument = this; | ||
| node.tagName = node.target = target; | ||
| node.nodeValue= node.data = data; | ||
| return node; | ||
| }, | ||
| createAttribute : function(name){ | ||
| var node = new Attr(); | ||
| node.ownerDocument = this; | ||
| node.name = name; | ||
| node.nodeName = name; | ||
| node.localName = name; | ||
| node.specified = true; | ||
| return node; | ||
| }, | ||
| createEntityReference : function(name){ | ||
| var node = new EntityReference(); | ||
| node.ownerDocument = this; | ||
| node.nodeName = name; | ||
| return node; | ||
| }, | ||
| createElementNS : function(namespaceURI,qualifiedName){ | ||
| var node = new Element(); | ||
| var pl = qualifiedName.split(':'); | ||
| var attrs = node.attributes = new NamedNodeMap(); | ||
| node.childNodes = new NodeList(); | ||
| node.ownerDocument = this; | ||
| node.nodeName = qualifiedName; | ||
| node.tagName = qualifiedName; | ||
| node.namespaceURI = namespaceURI; | ||
| if(pl.length == 2){ | ||
| node.prefix = pl[0]; | ||
| node.localName = pl[1]; | ||
| }else{ | ||
| node.localName = qualifiedName; | ||
| } | ||
| attrs._ownerElement = node; | ||
| return node; | ||
| }, | ||
| createAttributeNS : function(namespaceURI,qualifiedName){ | ||
| var node = new Attr(); | ||
| var pl = qualifiedName.split(':'); | ||
| node.ownerDocument = this; | ||
| node.nodeName = qualifiedName; | ||
| node.name = qualifiedName; | ||
| node.namespaceURI = namespaceURI; | ||
| node.specified = true; | ||
| if(pl.length == 2){ | ||
| node.prefix = pl[0]; | ||
| node.localName = pl[1]; | ||
| }else{ | ||
| node.localName = qualifiedName; | ||
| } | ||
| return node; | ||
| } | ||
| }; | ||
| _extends(Document,Node); | ||
| function Element() { | ||
| this._nsMap = {}; | ||
| }; | ||
| Element.prototype = { | ||
| nodeType : ELEMENT_NODE, | ||
| hasAttribute : function(name){ | ||
| return this.getAttributeNode(name)!=null; | ||
| }, | ||
| getAttribute : function(name){ | ||
| var attr = this.getAttributeNode(name); | ||
| return attr && attr.value || ''; | ||
| }, | ||
| getAttributeNode : function(name){ | ||
| return this.attributes.getNamedItem(name); | ||
| }, | ||
| setAttribute : function(name, value){ | ||
| var attr = this.ownerDocument.createAttribute(name); | ||
| attr.value = attr.nodeValue = "" + value; | ||
| this.setAttributeNode(attr) | ||
| }, | ||
| removeAttribute : function(name){ | ||
| var attr = this.getAttributeNode(name) | ||
| attr && this.removeAttributeNode(attr); | ||
| }, | ||
| appendChild:function(newChild){ | ||
| if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ | ||
| return this.insertBefore(newChild,null); | ||
| }else{ | ||
| return _appendSingleChild(this,newChild); | ||
| } | ||
| }, | ||
| setAttributeNode : function(newAttr){ | ||
| return this.attributes.setNamedItem(newAttr); | ||
| }, | ||
| setAttributeNodeNS : function(newAttr){ | ||
| return this.attributes.setNamedItemNS(newAttr); | ||
| }, | ||
| removeAttributeNode : function(oldAttr){ | ||
| return this.attributes.removeNamedItem(oldAttr.nodeName); | ||
| }, | ||
| removeAttributeNS : function(namespaceURI, localName){ | ||
| var old = this.getAttributeNodeNS(namespaceURI, localName); | ||
| old && this.removeAttributeNode(old); | ||
| }, | ||
| hasAttributeNS : function(namespaceURI, localName){ | ||
| return this.getAttributeNodeNS(namespaceURI, localName)!=null; | ||
| }, | ||
| getAttributeNS : function(namespaceURI, localName){ | ||
| var attr = this.getAttributeNodeNS(namespaceURI, localName); | ||
| return attr && attr.value || ''; | ||
| }, | ||
| setAttributeNS : function(namespaceURI, qualifiedName, value){ | ||
| var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); | ||
| attr.value = attr.nodeValue = "" + value; | ||
| this.setAttributeNode(attr) | ||
| }, | ||
| getAttributeNodeNS : function(namespaceURI, localName){ | ||
| return this.attributes.getNamedItemNS(namespaceURI, localName); | ||
| }, | ||
| getElementsByTagName : function(tagName){ | ||
| return new LiveNodeList(this,function(base){ | ||
| var ls = []; | ||
| _visitNode(base,function(node){ | ||
| if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ | ||
| ls.push(node); | ||
| } | ||
| }); | ||
| return ls; | ||
| }); | ||
| }, | ||
| getElementsByTagNameNS : function(namespaceURI, localName){ | ||
| return new LiveNodeList(this,function(base){ | ||
| var ls = []; | ||
| _visitNode(base,function(node){ | ||
| if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){ | ||
| ls.push(node); | ||
| } | ||
| }); | ||
| return ls; | ||
| }); | ||
| } | ||
| }; | ||
| Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; | ||
| Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; | ||
| _extends(Element,Node); | ||
| function Attr() { | ||
| }; | ||
| Attr.prototype.nodeType = ATTRIBUTE_NODE; | ||
| _extends(Attr,Node); | ||
| function CharacterData() { | ||
| }; | ||
| CharacterData.prototype = { | ||
| data : '', | ||
| substringData : function(offset, count) { | ||
| return this.data.substring(offset, offset+count); | ||
| }, | ||
| appendData: function(text) { | ||
| text = this.data+text; | ||
| this.nodeValue = this.data = text; | ||
| this.length = text.length; | ||
| }, | ||
| insertData: function(offset,text) { | ||
| this.replaceData(offset,0,text); | ||
| }, | ||
| appendChild:function(newChild){ | ||
| throw new Error(ExceptionMessage[3]) | ||
| return Node.prototype.appendChild.apply(this,arguments) | ||
| }, | ||
| deleteData: function(offset, count) { | ||
| this.replaceData(offset,count,""); | ||
| }, | ||
| replaceData: function(offset, count, text) { | ||
| var start = this.data.substring(0,offset); | ||
| var end = this.data.substring(offset+count); | ||
| text = start + text + end; | ||
| this.nodeValue = this.data = text; | ||
| this.length = text.length; | ||
| } | ||
| } | ||
| _extends(CharacterData,Node); | ||
| function Text() { | ||
| }; | ||
| Text.prototype = { | ||
| nodeName : "#text", | ||
| nodeType : TEXT_NODE, | ||
| splitText : function(offset) { | ||
| var text = this.data; | ||
| var newText = text.substring(offset); | ||
| text = text.substring(0, offset); | ||
| this.data = this.nodeValue = text; | ||
| this.length = text.length; | ||
| var newNode = this.ownerDocument.createTextNode(newText); | ||
| if(this.parentNode){ | ||
| this.parentNode.insertBefore(newNode, this.nextSibling); | ||
| } | ||
| return newNode; | ||
| } | ||
| } | ||
| _extends(Text,CharacterData); | ||
| function Comment() { | ||
| }; | ||
| Comment.prototype = { | ||
| nodeName : "#comment", | ||
| nodeType : COMMENT_NODE | ||
| } | ||
| _extends(Comment,CharacterData); | ||
| function CDATASection() { | ||
| }; | ||
| CDATASection.prototype = { | ||
| nodeName : "#cdata-section", | ||
| nodeType : CDATA_SECTION_NODE | ||
| } | ||
| _extends(CDATASection,CharacterData); | ||
| function DocumentType() { | ||
| }; | ||
| DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; | ||
| _extends(DocumentType,Node); | ||
| function Notation() { | ||
| }; | ||
| Notation.prototype.nodeType = NOTATION_NODE; | ||
| _extends(Notation,Node); | ||
| function Entity() { | ||
| }; | ||
| Entity.prototype.nodeType = ENTITY_NODE; | ||
| _extends(Entity,Node); | ||
| function EntityReference() { | ||
| }; | ||
| EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; | ||
| _extends(EntityReference,Node); | ||
| function DocumentFragment() { | ||
| }; | ||
| DocumentFragment.prototype.nodeName = "#document-fragment"; | ||
| DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; | ||
| _extends(DocumentFragment,Node); | ||
| function ProcessingInstruction() { | ||
| } | ||
| ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; | ||
| _extends(ProcessingInstruction,Node); | ||
| function XMLSerializer(){} | ||
| XMLSerializer.prototype.serializeToString = function(node){ | ||
| var buf = []; | ||
| serializeToString(node,buf); | ||
| return buf.join(''); | ||
| } | ||
| Node.prototype.toString =function(){ | ||
| return XMLSerializer.prototype.serializeToString(this); | ||
| } | ||
| function serializeToString(node,buf){ | ||
| switch(node.nodeType){ | ||
| case ELEMENT_NODE: | ||
| var attrs = node.attributes; | ||
| var len = attrs.length; | ||
| var child = node.firstChild; | ||
| var nodeName = node.tagName; | ||
| var isHTML = htmlns === node.namespaceURI | ||
| buf.push('<',nodeName); | ||
| for(var i=0;i<len;i++){ | ||
| serializeToString(attrs.item(i),buf,isHTML); | ||
| } | ||
| if(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){ | ||
| buf.push('>'); | ||
| if(isHTML && /^script$/i.test(nodeName)){ | ||
| if(child){ | ||
| buf.push(child.data); | ||
| } | ||
| }else{ | ||
| while(child){ | ||
| serializeToString(child,buf); | ||
| child = child.nextSibling; | ||
| } | ||
| } | ||
| buf.push('</',nodeName,'>'); | ||
| }else{ | ||
| buf.push('/>'); | ||
| } | ||
| return; | ||
| case DOCUMENT_NODE: | ||
| case DOCUMENT_FRAGMENT_NODE: | ||
| var child = node.firstChild; | ||
| while(child){ | ||
| serializeToString(child,buf); | ||
| child = child.nextSibling; | ||
| } | ||
| return; | ||
| case ATTRIBUTE_NODE: | ||
| return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"'); | ||
| case TEXT_NODE: | ||
| return buf.push(node.data.replace(/[<&]/g,_xmlEncoder)); | ||
| case CDATA_SECTION_NODE: | ||
| return buf.push( '<![CDATA[',node.data,']]>'); | ||
| case COMMENT_NODE: | ||
| return buf.push( "<!--",node.data,"-->"); | ||
| case DOCUMENT_TYPE_NODE: | ||
| var pubid = node.publicId; | ||
| var sysid = node.systemId; | ||
| buf.push('<!DOCTYPE ',node.name); | ||
| if(pubid){ | ||
| buf.push(' PUBLIC "',pubid); | ||
| if (sysid && sysid!='.') { | ||
| buf.push( '" "',sysid); | ||
| } | ||
| buf.push('">'); | ||
| }else if(sysid && sysid!='.'){ | ||
| buf.push(' SYSTEM "',sysid,'">'); | ||
| }else{ | ||
| var sub = node.internalSubset; | ||
| if(sub){ | ||
| buf.push(" [",sub,"]"); | ||
| } | ||
| buf.push(">"); | ||
| } | ||
| return; | ||
| case PROCESSING_INSTRUCTION_NODE: | ||
| return buf.push( "<?",node.target," ",node.data,"?>"); | ||
| case ENTITY_REFERENCE_NODE: | ||
| return buf.push( '&',node.nodeName,';'); | ||
| default: | ||
| buf.push('??',node.nodeName); | ||
| } | ||
| } | ||
| function importNode(doc,node,deep){ | ||
| var node2; | ||
| switch (node.nodeType) { | ||
| case ELEMENT_NODE: | ||
| node2 = node.cloneNode(false); | ||
| node2.ownerDocument = doc; | ||
| case DOCUMENT_FRAGMENT_NODE: | ||
| break; | ||
| case ATTRIBUTE_NODE: | ||
| deep = true; | ||
| break; | ||
| } | ||
| if(!node2){ | ||
| node2 = node.cloneNode(false); | ||
| } | ||
| node2.ownerDocument = doc; | ||
| node2.parentNode = null; | ||
| if(deep){ | ||
| var child = node.firstChild; | ||
| while(child){ | ||
| node2.appendChild(importNode(doc,child,deep)); | ||
| child = child.nextSibling; | ||
| } | ||
| } | ||
| return node2; | ||
| } | ||
| function cloneNode(doc,node,deep){ | ||
| var node2 = new node.constructor(); | ||
| for(var n in node){ | ||
| var v = node[n]; | ||
| if(typeof v != 'object' ){ | ||
| if(v != node2[n]){ | ||
| node2[n] = v; | ||
| } | ||
| } | ||
| } | ||
| if(node.childNodes){ | ||
| node2.childNodes = new NodeList(); | ||
| } | ||
| node2.ownerDocument = doc; | ||
| switch (node2.nodeType) { | ||
| case ELEMENT_NODE: | ||
| var attrs = node.attributes; | ||
| var attrs2 = node2.attributes = new NamedNodeMap(); | ||
| var len = attrs.length | ||
| attrs2._ownerElement = node2; | ||
| for(var i=0;i<len;i++){ | ||
| node2.setAttributeNode(cloneNode(doc,attrs.item(i),true)); | ||
| } | ||
| break;; | ||
| case ATTRIBUTE_NODE: | ||
| deep = true; | ||
| } | ||
| if(deep){ | ||
| var child = node.firstChild; | ||
| while(child){ | ||
| node2.appendChild(cloneNode(doc,child,deep)); | ||
| child = child.nextSibling; | ||
| } | ||
| } | ||
| return node2; | ||
| } | ||
| function __set__(object,key,value){ | ||
| object[key] = value | ||
| } | ||
| try{ | ||
| if(Object.defineProperty){ | ||
| Object.defineProperty(LiveNodeList.prototype,'length',{ | ||
| get:function(){ | ||
| _updateLiveList(this); | ||
| return this.$$length; | ||
| } | ||
| }); | ||
| Object.defineProperty(Node.prototype,'textContent',{ | ||
| get:function(){ | ||
| return getTextContent(this); | ||
| }, | ||
| set:function(data){ | ||
| switch(this.nodeType){ | ||
| case 1: | ||
| case 11: | ||
| while(this.firstChild){ | ||
| this.removeChild(this.firstChild); | ||
| } | ||
| if(data || String(data)){ | ||
| this.appendChild(this.ownerDocument.createTextNode(data)); | ||
| } | ||
| break; | ||
| default: | ||
| this.data = data; | ||
| this.value = value; | ||
| this.nodeValue = data; | ||
| } | ||
| } | ||
| }) | ||
| function getTextContent(node){ | ||
| switch(node.nodeType){ | ||
| case 1: | ||
| case 11: | ||
| var buf = []; | ||
| node = node.firstChild; | ||
| while(node){ | ||
| if(node.nodeType!==7 && node.nodeType !==8){ | ||
| buf.push(getTextContent(node)); | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| return buf.join(''); | ||
| default: | ||
| return node.nodeValue; | ||
| } | ||
| } | ||
| __set__ = function(object,key,value){ | ||
| object['$$'+key] = value | ||
| } | ||
| } | ||
| }catch(e){ | ||
| } | ||
| if(typeof require == 'function'){ | ||
| exports.DOMImplementation = DOMImplementation; | ||
| exports.XMLSerializer = XMLSerializer; | ||
| } | ||
| }) |
@@ -5,3 +5,3 @@ function content(content){ | ||
| } | ||
| var echarts = require('thirdparty/echarts') | ||
| var echarts = require('./thirdparty/echarts') | ||
| function initChart(data){ | ||
@@ -29,3 +29,5 @@ // 基于准备好的dom,初始化echarts图表 | ||
| var contentTpl =<div> | ||
| var contentTpl = //liteXML('test.tpl#p'); | ||
| <div> | ||
| <c:include path="test.tpl" selector="*[id='content']"/> | ||
| <c:for var="term" list="${reports}"> | ||
@@ -32,0 +34,0 @@ <div class="term"> |
| function index(menuData){ | ||
| menuData.current = currentMenu || menuData.subjects[0].code; | ||
| myScroll = myScroll||new IScroll('#wrapper',{ scrollX: true, scrollY: false, mouseWheel: true ,click:true}); | ||
| return menuTpl(menuData); | ||
| //return menuTpl(menuData); | ||
| return{ | ||
| html:menuTpl(menuData), | ||
| onload:function(container){ | ||
| //alert(container) | ||
| } | ||
| } | ||
| } | ||
@@ -19,3 +26,3 @@ | ||
| var IScroll = require('thirdparty/iscroll'); | ||
| var IScroll = require('./thirdparty/iscroll'); | ||
| exports.index = index; | ||
@@ -22,0 +29,0 @@ exports.gotoMenu = gotoMenu; |
+22
-12
@@ -1,2 +0,5 @@ | ||
| document.write('<script src="assets/boot.js"></script>') | ||
| //#include('./console.js') | ||
| //#include('./lite-buildin.js') | ||
| //#include('./require.js') | ||
| window.onload = window.onhashchange = function(){ | ||
@@ -30,3 +33,3 @@ var hash = location.hash; | ||
| var inc = end; | ||
| var result = []; | ||
| var data = []; | ||
| var isFirst = true; | ||
@@ -43,4 +46,8 @@ function dec(){ | ||
| var cmd = m[method]; | ||
| el.innerHTML = cmd.apply(this,result); | ||
| var result = cmd.apply(this,data); | ||
| el.innerHTML = result.html || result; | ||
| el.className = el.className.replace(/\s*loaded|\s*loading|$/," loaded") | ||
| if(result.onload){ | ||
| result.onload(el) | ||
| } | ||
| } | ||
@@ -50,8 +57,8 @@ } | ||
| //console.log('load:',urls[end]) | ||
| loadURL(urls[end],dec,result,end) | ||
| loadURL(urls[end],dec,data,end) | ||
| } | ||
| $JSI.require(dec,options.module); | ||
| require(dec,options.module); | ||
| } | ||
| function loadURL(url,callback,result,index){ | ||
| function loadURL(url,callback,data,index){ | ||
| var xhr = new XMLHttpRequest(); | ||
@@ -66,11 +73,11 @@ var headers = { | ||
| console.log('complete url:',url) | ||
| var data = xhr.responseText; | ||
| var status = data!=null && xhr.status; | ||
| var content = xhr.responseText; | ||
| var status = content!=null && xhr.status; | ||
| var success = status ?status >= 200 && status < 300 : null; | ||
| if(success){ | ||
| result[index] = JSON.parse(data) | ||
| data[index] = JSON.parse(content) | ||
| }else{ | ||
| result[index] = {error:data}; | ||
| data[index] = {error:content}; | ||
| } | ||
| console.log(result); | ||
| //console.log(data); | ||
| callback(); | ||
@@ -85,2 +92,5 @@ xhr.onreadystatechange = Function.prototype; | ||
| xhr.send(''); | ||
| } | ||
| } | ||
| //#preload('./example-menu','./example-content') |
+3
-1
@@ -29,4 +29,6 @@ <!DOCTYPE html> | ||
| <script src="assets/main.js"></script> | ||
| <script src="assets/main.js"> | ||
| require('test'); | ||
| </script> | ||
| </body> | ||
| </html> |
+1
-1
| { | ||
| "name": "opoa-example", | ||
| "version": "0.1.0", | ||
| "version": "0.1.1", | ||
| "description": "OPOA example.", | ||
@@ -5,0 +5,0 @@ "keywords": ["javascript","commonjs","lite","jsi" ], |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
1054217
13.42%26
36.84%8582
139.52%53
562.5%