Changeset 688


Ignore:
Timestamp:
01/22/07 20:22:22 (13 years ago)
Author:
ray
Message:

This is a grand scale sorting and structuring action, see #10

Location:
trunk
Files:
35 added
17 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/XinhaCore.js

    r685 r688  
    279279                                //   plugin from "hipikat", rolled in to be part of the core code 
    280280 
     281   
     282  // possible values  
     283  //    'DOMwalk' (the "original") 
     284  //    'TransformInnerHTML' (this used to be the GetHtml plugin) 
     285  this.getHtmlMethod = 'DOMwalk'; 
     286   
    281287  // maximum size of the undo queue 
    282288  this.undoSteps = 20; 
     
    459465  { 
    460466   "blank": "popups/blank.html", 
    461    "link": "link.html", 
    462    "insert_image": "insert_image.html", 
    463    "insert_table": "insert_table.html", 
     467   "link":  _editor_url + "modules/CreateLink/link.html", 
     468   "insert_image": _editor_url + "modules/InsertImage/insert_image.html", 
     469   "insert_table":  _editor_url + "modules/InsertTable/insert_table.html", 
    464470   "select_color": "select_color.html", 
    465471   "about": "about.html", 
     
    14451451{ 
    14461452  var i; 
    1447   var editor = this;    // we'll need "this" in some nested functions 
     1453  var editor = this;  // we'll need "this" in some nested functions 
    14481454   
    14491455  // Now load a specific browser plugin which will implement the above for us. 
     
    14521458    if ( typeof InternetExplorer == 'undefined' ) 
    14531459    {             
    1454       Xinha.loadPlugin("InternetExplorer", function() { editor.generate(); }, _editor_url + 'functionsIE.js' ); 
     1460      Xinha.loadPlugin("InternetExplorer", function() { editor.generate(); }, _editor_url + 'modules/InternetExplorer/InternetExplorer.js' ); 
    14551461      return false; 
    14561462    } 
     
    14611467    if ( typeof Gecko == 'undefined' ) 
    14621468    {             
    1463       Xinha.loadPlugin("Gecko", function() { editor.generate(); }, _editor_url + 'functionsMozilla.js' ); 
     1469      Xinha.loadPlugin("Gecko", function() { editor.generate(); }, _editor_url + 'modules/Gecko/Gecko.js' ); 
    14641470      return false; 
    14651471    } 
     
    14711477  if ( typeof Dialog == 'undefined' ) 
    14721478  { 
    1473     Xinha._loadback(_editor_url + 'dialog.js', this.generate, this ); 
     1479    Xinha._loadback(_editor_url + 'modules/Dialogs/dialog.js', this.generate, this ); 
    14741480    return false; 
    14751481  } 
     
    14771483  if ( typeof Xinha.Dialog == 'undefined' ) 
    14781484  { 
    1479     Xinha._loadback(_editor_url + 'inline-dialog.js', this.generate, this ); 
     1485    Xinha._loadback(_editor_url + 'modules/Dialogs/inline-dialog.js', this.generate, this ); 
    14801486    return false; 
    14811487  } 
    14821488 
    1483   if ( typeof PopupWin == 'undefined' ) 
    1484   { 
    1485     Xinha._loadback(_editor_url + 'popupwin.js', this.generate, this ); 
    1486     return false; 
    1487   } 
     1489  var toolbar = editor.config.toolbar; 
     1490  for ( i = toolbar.length; --i >= 0; ) 
     1491  { 
     1492    for ( var j = toolbar[i].length; --j >= 0; ) 
     1493    { 
     1494      switch (toolbar[i][j]) 
     1495      { 
     1496        case "popupeditor": 
     1497          if ( typeof FullScreen == "undefined" ) 
     1498          { 
     1499            Xinha.loadPlugin("FullScreen", function() { editor.generate(); }, _editor_url + 'modules/FullScreen/full-screen.js' ); 
     1500            return false; 
     1501          } 
     1502          editor.registerPlugin('FullScreen'); 
     1503        break; 
     1504        case "insertimage": 
     1505          if ( typeof InsertImage == 'undefined' && typeof Xinha.prototype._insertImage == 'undefined' ) 
     1506          { 
     1507            Xinha.loadPlugin("InsertImage", function() { editor.generate(); } , _editor_url + 'modules/InsertImage/insert_image.js'); 
     1508            return false; 
     1509          } 
     1510          else if ( typeof InsertImage != 'undefined') editor.registerPlugin('InsertImage'); 
     1511        break; 
     1512        case "createlink": 
     1513          if ( typeof CreateLink == 'undefined' && typeof Xinha.prototype._createLink == 'undefined' &&  typeof Linker == 'undefined' ) 
     1514          { 
     1515            Xinha.loadPlugin("CreateLink", function() { editor.generate(); } , _editor_url + 'modules/CreateLink/link.js'); 
     1516            return false; 
     1517          } 
     1518          else if ( typeof CreateLink != 'undefined') editor.registerPlugin('CreateLink'); 
     1519        break; 
     1520        case "inserttable": 
     1521          if ( typeof InsertTable == 'undefined' && typeof Xinha.prototype._insertTable == 'undefined' ) 
     1522          { 
     1523            Xinha.loadPlugin("InsertTable", function() { editor.generate(); } , _editor_url + 'modules/InsertTable/insert_table.js'); 
     1524            return false; 
     1525          } 
     1526          else if ( typeof InsertTable != 'undefined') editor.registerPlugin('InsertTable'); 
     1527        break; 
     1528      } 
     1529    } 
     1530  } 
     1531 
     1532  // If this is gecko, set up the paragraph handling now 
     1533  if ( Xinha.is_gecko && ( editor.config.mozParaHandler == 'best' || editor.config.mozParaHandler == 'dirty' ) ) 
     1534  { 
     1535    switch (this.config.mozParaHandler) 
     1536    { 
     1537      case 'dirty': 
     1538        var ParaHandlerPlugin = _editor_url + 'modules/Gecko/paraHandlerDirty.js'; 
     1539      break; 
     1540      default: 
     1541        var ParaHandlerPlugin = _editor_url + 'modules/Gecko/paraHandlerBest.js'; 
     1542      break; 
     1543    } 
     1544    if ( typeof EnterParagraphs == 'undefined' ) 
     1545    { 
     1546      Xinha.loadPlugin("EnterParagraphs", function() { editor.generate(); }, ParaHandlerPlugin ); 
     1547      return false; 
     1548    } 
     1549    editor.registerPlugin('EnterParagraphs'); 
     1550  } 
     1551 
     1552  switch (this.config.getHtmlMethod) 
     1553  { 
     1554    case 'TransformInnerHTML': 
     1555      var getHtmlMethodPlugin = _editor_url + 'modules/GetHtml/TransformInnerHTML.js'; 
     1556    break; 
     1557    default: 
     1558      var getHtmlMethodPlugin = _editor_url + 'modules/GetHtml/DOMwalk.js'; 
     1559    break; 
     1560  } 
     1561   
     1562  if (typeof GetHtmlImplementation == 'undefined') 
     1563  { 
     1564    Xinha.loadPlugin("GetHtmlImplementation", function() { editor.generate(); } , getHtmlMethodPlugin); 
     1565    return false;         
     1566  } 
     1567  else editor.registerPlugin('GetHtmlImplementation'); 
     1568   
    14881569 
    14891570  if ( _editor_skin !== "" ) 
     
    15081589    } 
    15091590  } 
    1510  
    1511   //backwards-compatibility: load FullScreen-Plugin if we find a "popupeditor"-button in the toolbar 
    1512   // @todo: remove the backward compatibility in release 2.0 
    1513   var toolbar = editor.config.toolbar; 
    1514   for ( i = toolbar.length; --i >= 0; ) 
    1515   { 
    1516     for ( var j = toolbar[i].length; --j >= 0; ) 
    1517     { 
    1518       if ( toolbar[i][j]=="popupeditor" ) 
    1519       { 
    1520         if ( typeof FullScreen == "undefined" ) 
    1521         { 
    1522           // why can't we use the following line instead ? 
    1523 //          Xinha.loadPlugin("FullScreen", this.generate ); 
    1524           Xinha.loadPlugin("FullScreen", function() { editor.generate(); } ); 
    1525           return false; 
    1526         } 
    1527         editor.registerPlugin('FullScreen'); 
    1528       } 
    1529     } 
    1530   } 
    1531  
    1532   // If this is gecko, set up the paragraph handling now 
    1533   if ( Xinha.is_gecko && editor.config.mozParaHandler == 'best' ) 
    1534   { 
    1535     if ( typeof EnterParagraphs == 'undefined' ) 
    1536     { 
    1537       // why can't we use the following line instead ? 
    1538 //      Xinha.loadPlugin("EnterParagraphs", this.generate ); 
    1539       Xinha.loadPlugin("EnterParagraphs", function() { editor.generate(); } ); 
    1540       return false; 
    1541     } 
    1542     editor.registerPlugin('EnterParagraphs'); 
    1543   } 
    1544  
    1545   if ( typeof Xinha.getHTML == 'undefined' ) 
    1546   { 
    1547       Xinha._loadback(_editor_url + "getHTML.js", function() { editor.generate(); } ); 
    1548           return false; 
    1549   } 
    15501591   
    1551   if ( typeof Xinha.prototype._insertImage == 'undefined' ) 
    1552   { 
    1553       Xinha._loadback(_editor_url + "popups/insert_image.js", function() { editor.generate(); } ); 
    1554           return false; 
    1555   } 
    1556  
    1557   if ( typeof Xinha.prototype._createLink == 'undefined' &&  typeof Linker == 'undefined' ) 
    1558   { 
    1559       Xinha._loadback(_editor_url + "popups/link.js", function() { editor.generate(); } ); 
    1560           return false; 
    1561   } 
    1562  
    15631592  // create the editor framework, yah, table layout I know, but much easier 
    15641593  // to get it working correctly this way, sorry about that, patches welcome. 
     
    35993628 
    36003629// Called when the user clicks the Insert Table button 
    3601 Xinha.prototype._insertTable = function() 
    3602 { 
    3603   var sel = this.getSelection(); 
    3604   var range = this.createRange(sel); 
    3605   var editor = this;    // for nested functions 
    3606   this._popupDialog( 
    3607     editor.config.URIs.insert_table, 
    3608     function(param) 
    3609     { 
    3610       // user must have pressed Cancel 
    3611       if ( !param ) 
    3612       { 
    3613         return false; 
    3614       } 
    3615       var doc = editor._doc; 
    3616       // create the table element 
    3617       var table = doc.createElement("table"); 
    3618       // assign the given arguments 
    3619  
    3620       for ( var field in param ) 
    3621       { 
    3622         var value = param[field]; 
    3623         if ( !value ) 
    3624         { 
    3625           continue; 
    3626         } 
    3627         switch (field) 
    3628         { 
    3629           case "f_width": 
    3630             table.style.width = value + param.f_unit; 
    3631           break; 
    3632           case "f_align": 
    3633             table.align = value; 
    3634           break; 
    3635           case "f_border": 
    3636             table.border = parseInt(value, 10); 
    3637           break; 
    3638           case "f_spacing": 
    3639             table.cellSpacing = parseInt(value, 10); 
    3640           break; 
    3641           case "f_padding": 
    3642             table.cellPadding = parseInt(value, 10); 
    3643           break; 
    3644         } 
    3645       } 
    3646       var cellwidth = 0; 
    3647       if ( param.f_fixed ) 
    3648       { 
    3649         cellwidth = Math.floor(100 / parseInt(param.f_cols, 10)); 
    3650       } 
    3651       var tbody = doc.createElement("tbody"); 
    3652       table.appendChild(tbody); 
    3653       for ( var i = 0; i < param.f_rows; ++i ) 
    3654       { 
    3655         var tr = doc.createElement("tr"); 
    3656         tbody.appendChild(tr); 
    3657         for ( var j = 0; j < param.f_cols; ++j ) 
    3658         { 
    3659           var td = doc.createElement("td"); 
    3660           // @todo : check if this line doesnt stop us to use pixel width in cells 
    3661           if (cellwidth) 
    3662           { 
    3663             td.style.width = cellwidth + "%"; 
    3664           } 
    3665           tr.appendChild(td); 
    3666           // Browsers like to see something inside the cell (&nbsp;). 
    3667           td.appendChild(doc.createTextNode('\u00a0')); 
    3668         } 
    3669       } 
    3670       if ( Xinha.is_ie ) 
    3671       { 
    3672         range.pasteHTML(table.outerHTML); 
    3673       } 
    3674       else 
    3675       { 
    3676         // insert the table 
    3677         editor.insertNodeAtSelection(table); 
    3678       } 
    3679       return true; 
    3680     }, 
    3681     null 
    3682   ); 
    3683 }; 
     3630 
    36843631 
    36853632/*************************************************** 
     
    37393686  if ( typeof colorPicker == 'undefined' ) 
    37403687  { 
    3741     Xinha._loadback(_editor_url + 'popups/color_picker.js', function () {editor._colorSelector(cmdID)}); 
     3688    Xinha._loadback(_editor_url + 'modules/ColorPicker/ColorPicker.js', function () {editor._colorSelector(cmdID)}); 
    37423689    return false; 
    37433690  } 
  • trunk/plugins/GetHtml/get-html.js

    r677 r688  
    11/** 
    2   * Based on XML_Utility functions submitted by troels_kn. 
    3   * credit also to adios, who helped with reg exps: 
    4   * http://www.sitepoint.com/forums/showthread.php?t=201052 
    5   *  
    6   * A replacement for HTMLArea.getHTML 
    7   * 
    8   * Features: 
    9   *   - Generates XHTML code 
    10   *   - Much faster than HTMLArea.getHTML 
    11   *   - Eliminates the hacks to accomodate browser quirks 
    12   *   - Returns correct code for Flash objects and scripts 
    13   *   - Formats html in an indented, readable format in html mode 
    14   *   - Preserves script and pre formatting 
    15   *   - Preserves formatting in comments 
    16   *   - Removes contenteditable from body tag in full-page mode 
    17   *   - Supports only7BitPrintablesInURLs config option 
    18   *   - Supports htmlRemoveTags config option 
     2 Implemented now as GetHtmlImplementation plugin in modules/GetHtml/TransformInnerHTML.js 
    193  */ 
    204   
    215function GetHtml(editor) { 
    22     this.editor = editor; 
     6    editor.config.getHtmlMethod = "TransformInnerHTML"; 
    237} 
    248 
     
    2812        developer     : "Nelson Bright", 
    2913        developer_url : "http://www.brightworkweb.com/", 
     14        sponsor       : "", 
     15    sponsor_url   : "", 
    3016        license       : "htmlArea" 
    3117}; 
    32  
    33 HTMLArea.RegExpCache = [ 
    34 /*00*/  new RegExp().compile(/<\s*\/?([^\s\/>]+)[\s*\/>]/gi),//lowercase tags 
    35 /*01*/  new RegExp().compile(/(\s+)_moz[^=>]*=[^\s>]*/gi),//strip _moz attributes 
    36 /*02*/  new RegExp().compile(/\s*=\s*(([^'"][^>\s]*)([>\s])|"([^"]+)"|'([^']+)')/g),// find attributes 
    37 /*03*/  new RegExp().compile(/\/>/g),//strip singlet terminators 
    38 /*04*/  new RegExp().compile(/<(br|hr|img|input|link|meta|param|embed|area)((\s*\S*="[^"]*")*)>/g),//terminate singlet tags 
    39 /*05*/  new RegExp().compile(/(checked|compact|declare|defer|disabled|ismap|multiple|no(href|resize|shade|wrap)|readonly|selected)([\s>])/gi),//expand singlet attributes 
    40 /*06*/  new RegExp().compile(/(="[^']*)'([^'"]*")/),//check quote nesting 
    41 /*07*/  new RegExp().compile(/&(?=[^<]*>)/g),//expand query ampersands 
    42 /*08*/  new RegExp().compile(/<\s+/g),//strip tagstart whitespace 
    43 /*09*/  new RegExp().compile(/\s+(\/)?>/g),//trim whitespace 
    44 /*10*/  new RegExp().compile(/\s{2,}/g),//trim extra whitespace 
    45 /*11*/  new RegExp().compile(/\s+([^=\s]+)((="[^"]+")|([\s>]))/g),// lowercase attribute names 
    46 /*12*/  new RegExp().compile(/\s+contenteditable(=[^>\s\/]*)?/gi),//strip contenteditable 
    47 /*13*/  new RegExp().compile(/((href|src)=")([^\s]*)"/g), //find href and src for stripBaseHref() 
    48 /*14*/  new RegExp().compile(/<\/?(div|p|h[1-6]|table|tr|td|th|ul|ol|li|blockquote|object|br|hr|img|embed|param|pre|script|html|head|body|meta|link|title|area|input|form|textarea|select|option)[^>]*>/g), 
    49 /*15*/  new RegExp().compile(/<\/(div|p|h[1-6]|table|tr|ul|ol|blockquote|object|html|head|body|script|form|select)( [^>]*)?>/g),//blocklevel closing tag 
    50 /*16*/  new RegExp().compile(/<(div|p|h[1-6]|table|tr|ul|ol|blockquote|object|html|head|body|script|form|select)( [^>]*)?>/g),//blocklevel opening tag 
    51 /*17*/  new RegExp().compile(/<(td|th|li|option|br|hr|embed|param|pre|meta|link|title|area|input|textarea)[^>]*>/g),//singlet tag or output on 1 line 
    52 /*18*/  new RegExp().compile(/(^|<\/(pre|script)>)(\s|[^\s])*?(<(pre|script)[^>]*>|$)/g),//find content NOT inside pre and script tags 
    53 /*19*/  new RegExp().compile(/(<pre[^>]*>)([\s\S])*?(<\/pre>)/g),//find content inside pre tags 
    54 /*20*/  new RegExp().compile(/(^|<!--[\s\S]*?-->)([\s\S]*?)(?=<!--[\s\S]*?-->|$)/g),//find content NOT inside comments 
    55 /*21*/  new RegExp().compile(/\S*=""/g), //find empty attributes 
    56 /*22*/  new RegExp().compile(/<!--[\s\S]*?-->|<\?[\s\S]*?\?>|<\/?\w[^>]*>/g), //find all tags, including comments and php 
    57 /*23*/  new RegExp().compile(/(^|<\/script>)[\s\S]*?(<script[^>]*>|$)/g) //find content NOT inside script tags 
    58 ]; 
    59  
    60 /**  
    61   * Cleans HTML into wellformed xhtml 
    62   */ 
    63 HTMLArea.prototype.cleanHTML = function(sHtml) { 
    64         var c = HTMLArea.RegExpCache; 
    65         sHtml = sHtml. 
    66                 replace(c[0], function(str) { return str.toLowerCase(); } ).//lowercase tags/attribute names 
    67                 replace(c[1], ' ').//strip _moz attributes 
    68                 replace(c[12], ' ').//strip contenteditable 
    69                 replace(c[2], '="$2$4$5"$3').//add attribute quotes 
    70                 replace(c[21], ' ').//strip empty attributes 
    71                 replace(c[11], function(str, p1, p2) { return ' '+p1.toLowerCase()+p2; }).//lowercase attribute names 
    72                 replace(c[3], '>').//strip singlet terminators 
    73                 replace(c[9], '$1>').//trim whitespace 
    74                 replace(c[5], '$1="$1"$3').//expand singlet attributes 
    75                 replace(c[4], '<$1$2 />').//terminate singlet tags 
    76                 replace(c[6], '$1$2').//check quote nesting 
    77         //      replace(c[7], '&amp;').//expand query ampersands 
    78                 replace(c[8], '<').//strip tagstart whitespace 
    79                 replace(c[10], ' ');//trim extra whitespace 
    80         if(HTMLArea.is_ie && c[13].test(sHtml)) { 
    81                 sHtml = sHtml.replace(c[13],'$1'+this.stripBaseURL(RegExp.$3)+'"'); 
    82         } 
    83         if(this.config.only7BitPrintablesInURLs) { 
    84                 if (HTMLArea.is_ie) c[13].test(sHtml); // oddly the test below only triggers when we call this once before (IE6), in Moz it fails if tested twice 
    85                 if ( c[13].test(sHtml)) { 
    86                         try { //Mozilla returns an incorrectly encoded value with innerHTML 
    87                                 sHtml = sHtml.replace(c[13], '$1'+decodeURIComponent(RegExp.$3).replace(/([^!-~]+)/g,function(chr){return escape(chr);})+'"'); 
    88                         } catch (e) { // once the URL is escape()ed, you can't decodeURIComponent() it anymore 
    89                                 sHtml = sHtml.replace(c[13], '$1'+RegExp.$3.replace(/([^!-~]+)/g,function(chr){return escape(chr);})+'"'); 
    90                         } 
    91                 } 
    92         } 
    93         return sHtml; 
    94 }; 
    95  
    96 /** 
    97   * Prettyfies html by inserting linebreaks before tags, and indenting blocklevel tags 
    98   */ 
    99 HTMLArea.indent = function(s, sindentChar) { 
    100         HTMLArea.__nindent = 0; 
    101         HTMLArea.__sindent = ""; 
    102         HTMLArea.__sindentChar = (typeof sindentChar == "undefined") ? "  " : sindentChar; 
    103         var c = HTMLArea.RegExpCache; 
    104         if(HTMLArea.is_gecko) { //moz changes returns into <br> inside <pre> tags 
    105                 s = s.replace(c[19], function(str){return str.replace(/<br \/>/g,"\n")}); 
    106         } 
    107         s = s.replace(c[18], function(strn) { //skip pre and script tags 
    108           strn = strn.replace(c[20], function(st,$1,$2) { //exclude comments 
    109                 string = $2.replace(/[\n\r]/gi, " ").replace(/\s+/gi," ").replace(c[14], function(str) { 
    110                         if (str.match(c[16])) { 
    111                                 var s = "\n" + HTMLArea.__sindent + str; 
    112                                 // blocklevel openingtag - increase indent 
    113                                 HTMLArea.__sindent += HTMLArea.__sindentChar; 
    114                                 ++HTMLArea.__nindent; 
    115                                 return s; 
    116                         } else if (str.match(c[15])) { 
    117                                 // blocklevel closingtag - decrease indent 
    118                                 --HTMLArea.__nindent; 
    119                                 HTMLArea.__sindent = ""; 
    120                                 for (var i=HTMLArea.__nindent;i>0;--i) { 
    121                                         HTMLArea.__sindent += HTMLArea.__sindentChar; 
    122                                 } 
    123                                 return "\n" + HTMLArea.__sindent + str; 
    124                         } else if (str.match(c[17])) { 
    125                                 // singlet tag 
    126                                 return "\n" + HTMLArea.__sindent + str; 
    127                         } 
    128                         return str; // this won't actually happen 
    129                 }); 
    130                 return $1 + string; 
    131           });return strn; 
    132     }); 
    133     //final cleanup 
    134     s = s.replace(/^\s*/,'').//strip leading whitespace 
    135         replace(/ +\n/g,'\n').//strip spaces at end of lines 
    136         replace(/[\r\n]+<\/script>/g,'\n</script>');//strip returns added into scripts 
    137     return s; 
    138 }; 
    139  
    140 HTMLArea.getHTML = function(root, outputRoot, editor) { 
    141         var html = ""; 
    142         var c = HTMLArea.RegExpCache; 
    143  
    144         if(root.nodeType == 11) {//document fragment 
    145             //we can't get innerHTML from the root (type 11) node, so we  
    146             //copy all the child nodes into a new div and get innerHTML from the div 
    147             var div = document.createElement("div"); 
    148             var temp = root.insertBefore(div,root.firstChild); 
    149             for (j = temp.nextSibling; j; j = j.nextSibling) {  
    150                         temp.appendChild(j.cloneNode(true)); 
    151             } 
    152                 html += temp.innerHTML.replace(c[23], function(strn) { //skip content inside script tags 
    153                         strn = strn.replace(c[22], function(tag){ 
    154                                 if(/^<[!\?]/.test(tag)) return tag; //skip comments and php tags 
    155                                 else return editor.cleanHTML(tag)}); 
    156                         return strn; 
    157                 }); 
    158  
    159         } else { 
    160  
    161                 var root_tag = (root.nodeType == 1) ? root.tagName.toLowerCase() : '';  
    162                 if (outputRoot) { //only happens with <html> tag in fullpage mode 
    163                         html += "<" + root_tag; 
    164                         var attrs = root.attributes; // strangely, this doesn't work in moz 
    165                         for (i = 0; i < attrs.length; ++i) { 
    166                                 var a = attrs.item(i); 
    167                                 if (!a.specified) { 
    168                                   continue; 
    169                                 } 
    170                                 var name = a.nodeName.toLowerCase(); 
    171                                 var value = a.nodeValue; 
    172                                 html += " " + name + '="' + value + '"'; 
    173                         } 
    174                         html += ">"; 
    175                 } 
    176                 if(root_tag == "html") { 
    177                         innerhtml = editor._doc.documentElement.innerHTML; 
    178                 } else { 
    179                         innerhtml = root.innerHTML; 
    180                 } 
    181                 //pass tags to cleanHTML() one at a time 
    182                 //includes support for htmlRemoveTags config option 
    183                 html += innerhtml.replace(c[23], function(strn) { //skip content inside script tags 
    184                         strn = strn.replace(c[22], function(tag){ 
    185                                 if(/^<[!\?]/.test(tag)) return tag; //skip comments and php tags 
    186                                 else if(!(editor.config.htmlRemoveTags && editor.config.htmlRemoveTags.test(tag.replace(/<([^\s>\/]+)/,'$1')))) 
    187                                         return editor.cleanHTML(tag); 
    188                                 else return ''}); 
    189                         return strn; 
    190                 }); 
    191                 //IE drops  all </li> tags in a list except the last one 
    192                 if(HTMLArea.is_ie) { 
    193                         html = html.replace(/<li( [^>]*)?>/g,'</li><li$1>'). 
    194                                 replace(/(<(ul|ol)[^>]*>)[\s\n]*<\/li>/g, '$1'). 
    195                                 replace(/<\/li>([\s\n]*<\/li>)+/g, '<\/li>'); 
    196                 } 
    197                 if(HTMLArea.is_gecko) 
    198                         html = html.replace(/<br \/>\n$/, ''); //strip trailing <br> added by moz 
    199                 if (outputRoot) { 
    200                         html += "</" + root_tag + ">"; 
    201                 } 
    202                 html = HTMLArea.indent(html); 
    203         }; 
    204 //      html = HTMLArea.htmlEncode(html); 
    205  
    206         return html; 
    207 }; 
    208  
    209 //overload outwardHtml() to handle onclick suppression 
    210 HTMLArea.prototype._origOutwardHtml = HTMLArea.prototype.outwardHtml; 
    211 HTMLArea.prototype.outwardHtml = function(html) { 
    212         html = html.replace("onclick=\"try{if(document.designMode && document.designMode == 'on') return false;}catch(e){} window.open(", "onclick=\"window.open("); 
    213         html = this._origOutwardHtml(html); 
    214         return html; 
    215 }; 
  • trunk/plugins/TableOperations/table-operations.js

    r675 r688  
    4646        // add a new line in the toolbar 
    4747        cfg.toolbar.push(toolbar); 
     48         
     49  if ( typeof PopupWin == 'undefined' ) 
     50  { 
     51    Xinha._loadback(_editor_url + 'modules/Dialogs/popupwin.js'); 
     52  } 
    4853} 
    4954 
Note: See TracChangeset for help on using the changeset viewer.