Update update_deps.js for xmldom
This commit is contained in:
parent
3b703dad56
commit
fb41c6ce4e
4 changed files with 60 additions and 127 deletions
|
|
@ -1,8 +1,8 @@
|
|||
define(function(require, exports, module) {
|
||||
'use strict';
|
||||
'use strict';
|
||||
|
||||
var XMLReader = require('./sax'),
|
||||
DOMImplementation = require('./dom');
|
||||
var XMLReader = require('./sax'),
|
||||
DOMImplementation = require('./dom');
|
||||
|
||||
function DOMParser(options){
|
||||
this.options = options ||{locator:{}};
|
||||
|
|
@ -89,7 +89,7 @@ function position(locator,node){
|
|||
*/
|
||||
DOMHandler.prototype = {
|
||||
startDocument : function() {
|
||||
this.document = DOMImplementation.createDocument(null, null, null);
|
||||
this.document = new DOMImplementation().createDocument(null, null, null);
|
||||
if (this.locator) {
|
||||
this.document.documentURI = this.locator.systemId;
|
||||
}
|
||||
|
|
@ -111,9 +111,6 @@ DOMHandler.prototype = {
|
|||
position(attr.getOffset(1),attr)
|
||||
}
|
||||
attr.value = attr.nodeValue = value;
|
||||
// Fork : сохраняем тип кавычки (" или ')
|
||||
if (attrs[i].quotSymbol){ attr.quotSymbol = attrs[i].quotSymbol; }
|
||||
// endFork
|
||||
el.setAttributeNode(attr)
|
||||
}
|
||||
},
|
||||
|
|
@ -257,6 +254,7 @@ function appendElement (hander,node) {
|
|||
}//appendChild and setAttributeNS are preformance key
|
||||
|
||||
return {
|
||||
DOMParser: DOMParser
|
||||
};
|
||||
});
|
||||
DOMParser: DOMParser
|
||||
};
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -269,12 +269,12 @@ DOMImplementation.prototype = {
|
|||
// Introduced in DOM Level 2:
|
||||
createDocument:function(namespaceURI, qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
|
||||
var doc = new Document();
|
||||
doc.implementation = this;
|
||||
doc.childNodes = new NodeList();
|
||||
doc.doctype = doctype;
|
||||
if(doctype){
|
||||
doc.appendChild(doctype);
|
||||
}
|
||||
doc.implementation = this;
|
||||
doc.childNodes = new NodeList();
|
||||
if(qualifiedName){
|
||||
var root = doc.createElementNS(namespaceURI,qualifiedName);
|
||||
doc.appendChild(root);
|
||||
|
|
@ -407,25 +407,9 @@ function _xmlEncoder(c){
|
|||
c == '>' && '>' ||
|
||||
c == '&' && '&' ||
|
||||
c == '"' && '"' ||
|
||||
// Fork : сохраняем тип кавычки (" или ')
|
||||
c == '\'' && ''' ||
|
||||
// endFork
|
||||
'&#'+c.charCodeAt()+';'
|
||||
}
|
||||
|
||||
// Fork : не реплейсим символьные коды
|
||||
function replaceSpecialSymbols(string, symbolRegExp){
|
||||
var newString = string.replace(symbolRegExp,_xmlEncoder);
|
||||
// нужно заменить & на & кроме случаев, когда & - начало символьного кода (напр., " или  )
|
||||
// заменяем в несколько этапов, сначала заменяем символьные коды на спец. конструкцию
|
||||
newString = newString.replace(/&(\w+|#\d+);/g,'~HtmlCode::$1::endHtmlCode~');
|
||||
// после заменяем все &, которые не являются началом символьного кода
|
||||
newString = newString.replace(/&/g,'&');
|
||||
// меняем спец. конструкции обратно на символьные коды
|
||||
newString = newString.replace(/~HtmlCode::(\w+|#\d+)::endHtmlCode~/g,'&$1;');
|
||||
return newString;
|
||||
}
|
||||
// endFork
|
||||
|
||||
copy(NodeType,Node);
|
||||
copy(NodeType,Node.prototype);
|
||||
|
|
@ -777,7 +761,7 @@ Element.prototype = {
|
|||
},
|
||||
setAttributeNS : function(namespaceURI, qualifiedName, value){
|
||||
var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
|
||||
attr.value = attr.nodeValue = value;
|
||||
attr.value = attr.nodeValue = "" + value;
|
||||
this.setAttributeNode(attr)
|
||||
},
|
||||
getAttributeNodeNS : function(namespaceURI, localName){
|
||||
|
|
@ -799,7 +783,7 @@ Element.prototype = {
|
|||
return new LiveNodeList(this,function(base){
|
||||
var ls = [];
|
||||
_visitNode(base,function(node){
|
||||
if(node !== base && node.nodeType === ELEMENT_NODE && node.namespaceURI === namespaceURI && (localName === '*' || node.localName == localName)){
|
||||
if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
|
||||
ls.push(node);
|
||||
}
|
||||
});
|
||||
|
|
@ -935,14 +919,12 @@ function serializeToString(node,buf){
|
|||
var len = attrs.length;
|
||||
var child = node.firstChild;
|
||||
var nodeName = node.tagName;
|
||||
// Fork : считаем, что у нас HTML-документ
|
||||
var isHTML = true;//htmlns === node.namespaceURI
|
||||
// endFork
|
||||
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)$/i.test(nodeName)){
|
||||
if(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){
|
||||
buf.push('>');
|
||||
//if is cdata child node
|
||||
if(isHTML && /^script$/i.test(nodeName)){
|
||||
|
|
@ -969,18 +951,9 @@ function serializeToString(node,buf){
|
|||
}
|
||||
return;
|
||||
case ATTRIBUTE_NODE:
|
||||
// Fork : сохраняем тип кавычки (" или ') + аттрибут config всегда должен сохранять значение в одинарных кавычках ( config='{"caption":"Кнопка"}' )
|
||||
if (node.name === 'config' || (node.quotSymbol === '\'')){
|
||||
return buf.push(' ', node.name, '=\'', replaceSpecialSymbols(node.value + '', /[<']/g), '\'');
|
||||
}
|
||||
// endFork
|
||||
// Fork : не реплейсим символьные коды
|
||||
return buf.push(' ',node.name,'="',replaceSpecialSymbols(node.value + '', /[<"]/g),'"');
|
||||
// endFork
|
||||
return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
|
||||
case TEXT_NODE:
|
||||
// Fork : не реплейсим символьные коды
|
||||
return buf.push(replaceSpecialSymbols(node.data,/[<]/g));
|
||||
// endFork
|
||||
return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
|
||||
case CDATA_SECTION_NODE:
|
||||
return buf.push( '<![CDATA[',node.data,']]>');
|
||||
case COMMENT_NODE:
|
||||
|
|
@ -1106,45 +1079,6 @@ function __set__(object,key,value){
|
|||
//do dynamic
|
||||
try{
|
||||
if(Object.defineProperty){
|
||||
// Fork : добавлены проперти innerHTML и outerHTML
|
||||
Object.defineProperty(Element.prototype, 'innerHTML', {
|
||||
get: function () {
|
||||
var res = [],
|
||||
child = this.firstChild;
|
||||
while(child){
|
||||
res.push(child.toString());
|
||||
child = child.nextSibling;
|
||||
}
|
||||
return res.join('');
|
||||
},
|
||||
set: function (value) {
|
||||
var
|
||||
parser = require('js!genie.DocumentParser/resources/xmldom/dom-parser'),
|
||||
doc, ownNode;
|
||||
|
||||
try {
|
||||
doc = parser.parseFromString("<div>" + value + "</div>", 'text/html');
|
||||
} catch (e) {
|
||||
console.log("Error while parsing innerHTML " + e);
|
||||
}
|
||||
if (doc) {
|
||||
ownNode = this.ownerDocument.importNode(doc.documentElement, true);
|
||||
|
||||
while (this.firstChild) {
|
||||
this.removeChild(this.firstChild);
|
||||
}
|
||||
while (ownNode.firstChild) {
|
||||
this.appendChild(ownNode.firstChild);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
Object.defineProperty(Element.prototype, 'outerHTML', {
|
||||
get: function () {
|
||||
return this.toString();
|
||||
}
|
||||
});
|
||||
// endFork
|
||||
Object.defineProperty(LiveNodeList.prototype,'length',{
|
||||
get:function(){
|
||||
_updateLiveList(this);
|
||||
|
|
@ -1200,5 +1134,5 @@ try{
|
|||
}catch(e){//ie8
|
||||
}
|
||||
|
||||
return new DOMImplementation();
|
||||
});
|
||||
return DOMImplementation;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
define(function(require, exports, module) {
|
||||
'use strict';
|
||||
|
||||
//[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
|
||||
//[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
|
||||
|
|
@ -61,9 +60,7 @@ function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
|
|||
}
|
||||
}
|
||||
function appendText(end){//has some bugs
|
||||
// Fork : не реплейсим символьные коды
|
||||
var xt = source.substring(start,end);//.replace(/&#?\w+;/g,entityReplacer);
|
||||
// endFork
|
||||
var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
|
||||
locator&&position(start);
|
||||
domBuilder.characters(xt,0,end-start);
|
||||
start = end
|
||||
|
|
@ -103,18 +100,19 @@ function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
|
|||
case '/':
|
||||
var end = source.indexOf('>',i+3);
|
||||
var tagName = source.substring(i+2,end);
|
||||
if (parseStack.length > 1) {
|
||||
var config = parseStack.pop();
|
||||
} else {
|
||||
errorHandler.fatalError("end tag name not found for: "+tagName);
|
||||
break;
|
||||
}
|
||||
var config;
|
||||
if (parseStack.length > 1) {
|
||||
config = parseStack.pop();
|
||||
} else {
|
||||
errorHandler.fatalError("end tag name not found for: "+tagName);
|
||||
break;
|
||||
}
|
||||
var localNSMap = config.localNSMap;
|
||||
|
||||
if(config.tagName != tagName){
|
||||
errorHandler.fatalError("end tag name: "+tagName+" does not match the current start tagName:"+config.tagName);
|
||||
}
|
||||
domBuilder.endElement(config.uri,config.localName,tagName);
|
||||
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) ;
|
||||
|
|
@ -214,25 +212,17 @@ function parseElementStartPart(source,start,el,entityReplacer,errorHandler){
|
|||
start = p+1;
|
||||
p = source.indexOf(c,start)
|
||||
if(p>0){
|
||||
// Fork : не реплейсим символьные коды
|
||||
value = source.slice(start,p);//.replace(/&#?\w+;/g,entityReplacer);
|
||||
// endFork
|
||||
// Fork : сохраняем тип кавычки (" или ')
|
||||
el.add(attrName,value,start-1, c);
|
||||
// endFork
|
||||
value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
|
||||
el.add(attrName,value,start-1);
|
||||
s = S_E;
|
||||
}else{
|
||||
//fatalError: no end quot match
|
||||
throw new Error('attribute value no end \''+c+'\' match');
|
||||
}
|
||||
}else if(s == S_V){
|
||||
// Fork : не реплейсим символьные коды
|
||||
value = source.slice(start,p);//.replace(/&#?\w+;/g,entityReplacer);
|
||||
// endFork
|
||||
value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
|
||||
//console.log(attrName,value,start,p)
|
||||
// Fork : сохраняем тип кавычки (" или ')
|
||||
el.add(attrName,value,start, c);
|
||||
// endFork
|
||||
el.add(attrName,value,start);
|
||||
//console.dir(el)
|
||||
errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
|
||||
start = p+1;
|
||||
|
|
@ -284,9 +274,7 @@ function parseElementStartPart(source,start,el,entityReplacer,errorHandler){
|
|||
}
|
||||
if(s == S_V){
|
||||
errorHandler.warning('attribute "'+value+'" missed quot(")!!');
|
||||
// Fork : не реплейсим символьные коды
|
||||
el.add(attrName,value/*.replace(/&#?\w+;/g,entityReplacer)*/,start)
|
||||
// endFork
|
||||
el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start)
|
||||
}else{
|
||||
errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!')
|
||||
el.add(value,value,start)
|
||||
|
|
@ -312,9 +300,7 @@ function parseElementStartPart(source,start,el,entityReplacer,errorHandler){
|
|||
s = S_ATTR_S;
|
||||
break;
|
||||
case S_V:
|
||||
// Fork : не реплейсим символьные коды
|
||||
var value = source.slice(start,p);//.replace(/&#?\w+;/g,entityReplacer);
|
||||
// endFork
|
||||
var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
|
||||
errorHandler.warning('attribute "'+value+'" missed quot(")!!');
|
||||
el.add(attrName,value,start)
|
||||
case S_E:
|
||||
|
|
@ -448,9 +434,7 @@ function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBui
|
|||
return elEndStart;
|
||||
//}
|
||||
}//}else{//text area
|
||||
// Fork : не реплейсим символьные коды
|
||||
// text = text.replace(/&#?\w+;/g,entityReplacer);
|
||||
// endFork
|
||||
text = text.replace(/&#?\w+;/g,entityReplacer);
|
||||
domBuilder.characters(text,0,text.length);
|
||||
return elEndStart;
|
||||
//}
|
||||
|
|
@ -547,14 +531,12 @@ ElementAttributes.prototype = {
|
|||
}
|
||||
this.tagName = tagName
|
||||
},
|
||||
// Fork : сохраняем тип кавычки (" или ')
|
||||
add:function(qName,value,offset, quotSymbol){
|
||||
add:function(qName,value,offset){
|
||||
if(!tagNamePattern.test(qName)){
|
||||
throw new Error('invalid attribute:'+qName)
|
||||
}
|
||||
this[this.length++] = {qName:qName,value:value,offset:offset,quotSymbol:quotSymbol}
|
||||
this[this.length++] = {qName:qName,value:value,offset:offset}
|
||||
},
|
||||
// endFork
|
||||
length:0,
|
||||
getLocalName:function(i){return this[i].localName},
|
||||
getOffset:function(i){return this[i].offset},
|
||||
|
|
@ -605,4 +587,6 @@ function split(source,start){
|
|||
}
|
||||
|
||||
return XMLReader;
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -204,7 +204,24 @@ var deps = {
|
|||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
xmldom: {
|
||||
fetch: function() {
|
||||
var rootHref = "https://raw.githubusercontent.com/iDeBugger/xmldom/master/"
|
||||
var fileMap = {
|
||||
"sax.js": "mode/xml/sax.js",
|
||||
"dom-parser.js": "mode/xml/dom-parser.js",
|
||||
"dom.js": "mode/xml/dom.js"
|
||||
};
|
||||
async.forEach(Object.keys(fileMap), function(x, next) {
|
||||
download(rootHref + x, function(e, d) {
|
||||
fs.writeFile(rootDir + fileMap[x], d, next)
|
||||
})
|
||||
}, function() {
|
||||
console.log("XmlDOM updating done")
|
||||
});
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
var download = function(href, callback) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue