diff options
Diffstat (limited to 'lib/dijit/_editor/html.js')
-rw-r--r-- | lib/dijit/_editor/html.js | 195 |
1 files changed, 2 insertions, 193 deletions
diff --git a/lib/dijit/_editor/html.js b/lib/dijit/_editor/html.js index 196c8a309..45becc4b0 100644 --- a/lib/dijit/_editor/html.js +++ b/lib/dijit/_editor/html.js @@ -1,193 +1,2 @@ -/* - Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -if(!dojo._hasResource["dijit._editor.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dijit._editor.html"] = true; -dojo.provide("dijit._editor.html"); - -dojo.getObject("_editor", true, dijit); - -dijit._editor.escapeXml=function(/*String*/str, /*Boolean?*/noSingleQuotes){ - // summary: - // Adds escape sequences for special characters in XML: &<>"' - // Optionally skips escapes for single quotes - str = str.replace(/&/gm, "&").replace(/</gm, "<").replace(/>/gm, ">").replace(/"/gm, """); - if(!noSingleQuotes){ - str = str.replace(/'/gm, "'"); - } - return str; // string -}; - -dijit._editor.getNodeHtml=function(/* DomNode */node){ - var output; - switch(node.nodeType){ - case 1: //element node - var lName = node.nodeName.toLowerCase(); - if(!lName || lName.charAt(0) == "/"){ - // IE does some strange things with malformed HTML input, like - // treating a close tag </span> without an open tag <span>, as - // a new tag with tagName of /span. Corrupts output HTML, remove - // them. Other browsers don't prefix tags that way, so will - // never show up. - return ""; - } - output = '<' + lName; - - //store the list of attributes and sort it to have the - //attributes appear in the dictionary order - var attrarray = []; - var attr; - if(dojo.isIE && node.outerHTML){ - var s = node.outerHTML; - s = s.substr(0, s.indexOf('>')) - .replace(/(['"])[^"']*\1/g, ''); //to make the following regexp safe - var reg = /(\b\w+)\s?=/g; - var m, key; - while((m = reg.exec(s))){ - key = m[1]; - if(key.substr(0,3) != '_dj'){ - if(key == 'src' || key == 'href'){ - if(node.getAttribute('_djrealurl')){ - attrarray.push([key,node.getAttribute('_djrealurl')]); - continue; - } - } - var val, match; - switch(key){ - case 'style': - val = node.style.cssText.toLowerCase(); - break; - case 'class': - val = node.className; - break; - case 'width': - if(lName === "img"){ - // This somehow gets lost on IE for IMG tags and the like - // and we have to find it in outerHTML, known IE oddity. - match=/width=(\S+)/i.exec(s); - if(match){ - val = match[1]; - } - break; - } - case 'height': - if(lName === "img"){ - // This somehow gets lost on IE for IMG tags and the like - // and we have to find it in outerHTML, known IE oddity. - match=/height=(\S+)/i.exec(s); - if(match){ - val = match[1]; - } - break; - } - default: - val = node.getAttribute(key); - } - if(val != null){ - attrarray.push([key, val.toString()]); - } - } - } - }else{ - var i = 0; - while((attr = node.attributes[i++])){ - //ignore all attributes starting with _dj which are - //internal temporary attributes used by the editor - var n = attr.name; - if(n.substr(0,3) != '_dj' /*&& - (attr.specified == undefined || attr.specified)*/){ - var v = attr.value; - if(n == 'src' || n == 'href'){ - if(node.getAttribute('_djrealurl')){ - v = node.getAttribute('_djrealurl'); - } - } - attrarray.push([n,v]); - } - } - } - attrarray.sort(function(a,b){ - return a[0] < b[0] ? -1 : (a[0] == b[0] ? 0 : 1); - }); - var j = 0; - while((attr = attrarray[j++])){ - output += ' ' + attr[0] + '="' + - (dojo.isString(attr[1]) ? dijit._editor.escapeXml(attr[1], true) : attr[1]) + '"'; - } - if(lName === "script"){ - // Browsers handle script tags differently in how you get content, - // but innerHTML always seems to work, so insert its content that way - // Yes, it's bad to allow script tags in the editor code, but some people - // seem to want to do it, so we need to at least return them right. - // other plugins/filters can strip them. - output += '>' + node.innerHTML +'</' + lName + '>'; - }else{ - if(node.childNodes.length){ - output += '>' + dijit._editor.getChildrenHtml(node)+'</' + lName +'>'; - }else{ - switch(lName){ - case 'br': - case 'hr': - case 'img': - case 'input': - case 'base': - case 'meta': - case 'area': - case 'basefont': - // These should all be singly closed - output += ' />'; - break; - default: - // Assume XML style separate closure for everything else. - output += '></' + lName + '>'; - } - } - } - break; - case 4: // cdata - case 3: // text - // FIXME: - output = dijit._editor.escapeXml(node.nodeValue, true); - break; - case 8: //comment - // FIXME: - output = '<!--' + dijit._editor.escapeXml(node.nodeValue, true) + '-->'; - break; - default: - output = "<!-- Element not recognized - Type: " + node.nodeType + " Name: " + node.nodeName + "-->"; - } - return output; -}; - -dijit._editor.getChildrenHtml = function(/* DomNode */dom){ - // summary: - // Returns the html content of a DomNode and children - var out = ""; - if(!dom){ return out; } - var nodes = dom["childNodes"] || dom; - - //IE issue. - //If we have an actual node we can check parent relationships on for IE, - //We should check, as IE sometimes builds invalid DOMS. If no parent, we can't check - //And should just process it and hope for the best. - var checkParent = !dojo.isIE || nodes !== dom; - - var node, i = 0; - while((node = nodes[i++])){ - //IE is broken. DOMs are supposed to be a tree. But in the case of malformed HTML, IE generates a graph - //meaning one node ends up with multiple references (multiple parents). This is totally wrong and invalid, but - //such is what it is. We have to keep track and check for this because otherise the source output HTML will have dups. - //No other browser generates a graph. Leave it to IE to break a fundamental DOM rule. So, we check the parent if we can - //If we can't, nothing more we can do other than walk it. - if(!checkParent || node.parentNode == dom){ - out += dijit._editor.getNodeHtml(node); - } - } - return out; // String -}; - -} +//>>built +define("dijit/_editor/html",["dojo/_base/lang","dojo/_base/sniff",".."],function(_1,_2,_3){_1.getObject("_editor",true,_3);_3._editor.escapeXml=function(_4,_5){_4=_4.replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">").replace(/"/gm,""");if(!_5){_4=_4.replace(/'/gm,"'");}return _4;};_3._editor.getNodeHtml=function(_6){var _7;switch(_6.nodeType){case 1:var _8=_6.nodeName.toLowerCase();if(!_8||_8.charAt(0)=="/"){return "";}_7="<"+_8;var _9=[];var _a;if(_2("ie")&&_6.outerHTML){var s=_6.outerHTML;s=s.substr(0,s.indexOf(">")).replace(/(['"])[^"']*\1/g,"");var _b=/(\b\w+)\s?=/g;var m,_c;while((m=_b.exec(s))){_c=m[1];if(_c.substr(0,3)!="_dj"){if(_c=="src"||_c=="href"){if(_6.getAttribute("_djrealurl")){_9.push([_c,_6.getAttribute("_djrealurl")]);continue;}}var _d,_e;switch(_c){case "style":_d=_6.style.cssText.toLowerCase();break;case "class":_d=_6.className;break;case "width":if(_8==="img"){_e=/width=(\S+)/i.exec(s);if(_e){_d=_e[1];}break;}case "height":if(_8==="img"){_e=/height=(\S+)/i.exec(s);if(_e){_d=_e[1];}break;}default:_d=_6.getAttribute(_c);}if(_d!=null){_9.push([_c,_d.toString()]);}}}}else{var i=0;while((_a=_6.attributes[i++])){var n=_a.name;if(n.substr(0,3)!="_dj"){var v=_a.value;if(n=="src"||n=="href"){if(_6.getAttribute("_djrealurl")){v=_6.getAttribute("_djrealurl");}}_9.push([n,v]);}}}_9.sort(function(a,b){return a[0]<b[0]?-1:(a[0]==b[0]?0:1);});var j=0;while((_a=_9[j++])){_7+=" "+_a[0]+"=\""+(_1.isString(_a[1])?_3._editor.escapeXml(_a[1],true):_a[1])+"\"";}if(_8==="script"){_7+=">"+_6.innerHTML+"</"+_8+">";}else{if(_6.childNodes.length){_7+=">"+_3._editor.getChildrenHtml(_6)+"</"+_8+">";}else{switch(_8){case "br":case "hr":case "img":case "input":case "base":case "meta":case "area":case "basefont":_7+=" />";break;default:_7+="></"+_8+">";}}}break;case 4:case 3:_7=_3._editor.escapeXml(_6.nodeValue,true);break;case 8:_7="<!--"+_3._editor.escapeXml(_6.nodeValue,true)+"-->";break;default:_7="<!-- Element not recognized - Type: "+_6.nodeType+" Name: "+_6.nodeName+"-->";}return _7;};_3._editor.getChildrenHtml=function(_f){var out="";if(!_f){return out;}var _10=_f["childNodes"]||_f;var _11=!_2("ie")||_10!==_f;var _12,i=0;while((_12=_10[i++])){if(!_11||_12.parentNode==_f){out+=_3._editor.getNodeHtml(_12);}}return out;};return _3._editor;});
\ No newline at end of file |