Changeset 689 for branches


Ignore:
Timestamp:
01/23/07 13:15:11 (13 years ago)
Author:
gogo
Message:

Trying to fix history on 688

Location:
branches/688-fixup
Files:
11 added
3 edited
28 copied

Legend:

Unmodified
Added
Removed
  • branches/688-fixup/XinhaCore.js

    r688 r689  
    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    
    287281  // maximum size of the undo queue 
    288282  this.undoSteps = 20; 
     
    465459  { 
    466460   "blank": "popups/blank.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", 
     461   "link": "link.html", 
     462   "insert_image": "insert_image.html", 
     463   "insert_table": "insert_table.html", 
    470464   "select_color": "select_color.html", 
    471465   "about": "about.html", 
     
    14511445{ 
    14521446  var i; 
    1453   var editor = this;  // we'll need "this" in some nested functions 
     1447  var editor = this;    // we'll need "this" in some nested functions 
    14541448   
    14551449  // Now load a specific browser plugin which will implement the above for us. 
     
    14581452    if ( typeof InternetExplorer == 'undefined' ) 
    14591453    {             
    1460       Xinha.loadPlugin("InternetExplorer", function() { editor.generate(); }, _editor_url + 'modules/InternetExplorer/InternetExplorer.js' ); 
     1454      Xinha.loadPlugin("InternetExplorer", function() { editor.generate(); }, _editor_url + 'functionsIE.js' ); 
    14611455      return false; 
    14621456    } 
     
    14671461    if ( typeof Gecko == 'undefined' ) 
    14681462    {             
    1469       Xinha.loadPlugin("Gecko", function() { editor.generate(); }, _editor_url + 'modules/Gecko/Gecko.js' ); 
     1463      Xinha.loadPlugin("Gecko", function() { editor.generate(); }, _editor_url + 'functionsMozilla.js' ); 
    14701464      return false; 
    14711465    } 
     
    14771471  if ( typeof Dialog == 'undefined' ) 
    14781472  { 
    1479     Xinha._loadback(_editor_url + 'modules/Dialogs/dialog.js', this.generate, this ); 
     1473    Xinha._loadback(_editor_url + 'dialog.js', this.generate, this ); 
    14801474    return false; 
    14811475  } 
     
    14831477  if ( typeof Xinha.Dialog == 'undefined' ) 
    14841478  { 
    1485     Xinha._loadback(_editor_url + 'modules/Dialogs/inline-dialog.js', this.generate, this ); 
     1479    Xinha._loadback(_editor_url + 'inline-dialog.js', this.generate, this ); 
    14861480    return false; 
    14871481  } 
    14881482 
    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    
     1483  if ( typeof PopupWin == 'undefined' ) 
     1484  { 
     1485    Xinha._loadback(_editor_url + 'popupwin.js', this.generate, this ); 
     1486    return false; 
     1487  } 
    15691488 
    15701489  if ( _editor_skin !== "" ) 
     
    15891508    } 
    15901509  } 
     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  } 
    15911550   
     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 
    15921563  // create the editor framework, yah, table layout I know, but much easier 
    15931564  // to get it working correctly this way, sorry about that, patches welcome. 
     
    36283599 
    36293600// Called when the user clicks the Insert Table button 
    3630  
     3601Xinha.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}; 
    36313684 
    36323685/*************************************************** 
     
    36863739  if ( typeof colorPicker == 'undefined' ) 
    36873740  { 
    3688     Xinha._loadback(_editor_url + 'modules/ColorPicker/ColorPicker.js', function () {editor._colorSelector(cmdID)}); 
     3741    Xinha._loadback(_editor_url + 'popups/color_picker.js', function () {editor._colorSelector(cmdID)}); 
    36893742    return false; 
    36903743  } 
  • branches/688-fixup/plugins/GetHtml/get-html.js

    r688 r689  
    11/** 
    2  Implemented now as GetHtmlImplementation plugin in modules/GetHtml/TransformInnerHTML.js 
     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 
    319  */ 
    420   
    521function GetHtml(editor) { 
    6     editor.config.getHtmlMethod = "TransformInnerHTML"; 
     22    this.editor = editor; 
    723} 
    824 
     
    1228        developer     : "Nelson Bright", 
    1329        developer_url : "http://www.brightworkweb.com/", 
    14         sponsor       : "", 
    15     sponsor_url   : "", 
    1630        license       : "htmlArea" 
    1731}; 
     32 
     33HTMLArea.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  */ 
     63HTMLArea.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  */ 
     99HTMLArea.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 
     140HTMLArea.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 
     210HTMLArea.prototype._origOutwardHtml = HTMLArea.prototype.outwardHtml; 
     211HTMLArea.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}; 
  • branches/688-fixup/plugins/TableOperations/table-operations.js

    r688 r689  
    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   } 
    5348} 
    5449 
Note: See TracChangeset for help on using the changeset viewer.