Changeset 13657

Show
Ignore:
Timestamp:
05/09/08 18:14:56 (7 months ago)
Author:
peller
Message:

Tolerate IE returning attribute values as Numbers. Refs #6720

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • dijit/trunk/_editor/html.js

    r12972 r13657  
    11dojo.provide("dijit._editor.html"); 
    22 
    3 dijit._editor.escapeXml=function(/*String*/str, /*Boolean*/noSingleQuotes){ 
     3dijit._editor.escapeXml=function(/*String*/str, /*Boolean?*/noSingleQuotes){ 
    44        //summary: 
    55        //              Adds escape sequences for special characters in XML: &<>"' 
     
    1616        switch(node.nodeType){ 
    1717                case 1: //element node 
    18                         output = '<'+node.nodeName.toLowerCase(); 
     18                        output = '<' + node.nodeName.toLowerCase(); 
    1919 
    2020                        //store the list of attributes and sort it to have the 
     
    2323                        if(dojo.isIE && node.outerHTML){ 
    2424                                var s = node.outerHTML; 
    25                                 s = s.substr(0,s.indexOf('>')); 
    26                                 s = s.replace(/(['"])[^"']*\1/g, '');//to make the following regexp safe 
     25                                s = s.substr(0, s.indexOf('>')) 
     26                                        .replace(/(['"])[^"']*\1/g, ''); //to make the following regexp safe 
    2727                                var reg = /([^\s=]+)=/g; 
    2828                                var m, key; 
    2929                                while((m = reg.exec(s))){ 
    30                                         key=m[1]; 
     30                                        key = m[1]; 
    3131                                        if(key.substr(0,3) != '_dj'){ 
    3232                                                if(key == 'src' || key == 'href'){ 
     
    3636                                                        } 
    3737                                                } 
    38                                                 if(key=='style'){ 
    39                                                         attrarray.push([key, node.style.cssText.toLowerCase()]); 
    40                                                 }else{ 
    41                                                         attrarray.push([key, key=='class'?node.className:node.getAttribute(key)]); 
     38                                                var val; 
     39                                                switch(key){ 
     40                                                        case 'style': 
     41                                                                val = node.style.cssText.toLowerCase(); 
     42                                                                break; 
     43                                                        case 'class': 
     44                                                                val = node.className; 
     45                                                                break; 
     46                                                        default: 
     47                                                                val = node.getAttribute(key); 
    4248                                                } 
     49                                                attrarray.push([key, val]); 
    4350                                        } 
    4451                                } 
    4552                        }else{ 
    46                                 var attr, i=0, attrs = node.attributes; 
    47                                 while((attr=attrs[i++])){ 
     53                                var attr, i = 0; 
     54                                while((attr = node.attributes[i++])){ 
    4855                                        //ignore all attributes starting with _dj which are 
    4956                                        //internal temporary attributes used by the editor 
    50                                         var n=attr.name; 
     57                                        var n = attr.name; 
    5158                                        if(n.substr(0,3) != '_dj' /*&& 
    5259                                                (attr.specified == undefined || attr.specified)*/){ 
     
    6471                                return a[0]<b[0]?-1:(a[0]==b[0]?0:1); 
    6572                        }); 
    66                         i=0; 
    67                         while((attr=attrarray[i++])){ 
    68                                 output += ' '+attr[0]+'="'+dijit._editor.escapeXml(attr[1],true)+'"'; 
     73                        var j = 0; 
     74                        while((attr = attrarray[j++])){ 
     75                                output += ' ' + attr[0] + '="' + 
     76                                        (dojo.isString(attr[1]) ? dijit._editor.escapeXml(attr[1], true) : attr[1]) + '"'; 
    6977                        } 
    7078                        if(node.childNodes.length){ 
     
    7684                case 3: //text 
    7785                        // FIXME: 
    78                         output = dijit._editor.escapeXml(node.nodeValue,true); 
     86                        output = dijit._editor.escapeXml(node.nodeValue, true); 
    7987                        break; 
    8088                case 8: //comment 
    8189                        // FIXME: 
    82                         output = '<!--'+dijit._editor.escapeXml(node.nodeValue,true)+'-->'; 
     90                        output = '<!--' + dijit._editor.escapeXml(node.nodeValue, true) + '-->'; 
    8391                        break; 
    8492                default: 
    85                         output = "Element not recognized - Type: " + node.nodeType + " Name: " + node.nodeName; 
     93                        output = "<!-- Element not recognized - Type: " + node.nodeType + " Name: " + node.nodeName + "-->"; 
    8694        } 
    8795        return output; 
     
    92100        var out = ""; 
    93101        if(!dom){ return out; } 
    94         var nodes = dom["childNodes"]||dom; 
    95         var i=0; 
    96         var node; 
    97         while((node=nodes[i++])){ 
     102        var nodes = dom["childNodes"] || dom; 
     103        var node, i = 0; 
     104        while((node = nodes[i++])){ 
    98105                out += dijit._editor.getNodeHtml(node); 
    99106        }