Changeset 792


Ignore:
Timestamp:
03/20/07 13:10:27 (12 years ago)
Author:
ray
Message:
  • Ticket #226 loadPlugins() _loadback() etc design flaw causing endless loops on plugin error.
  • Ticket #985 Modules loaded once per editor instance
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/XinhaCore.js

    r785 r792  
    15431543  var editor = this;  // we'll need "this" in some nested functions 
    15441544   
     1545  this.setLoadingMessage("Generate Xinha object"); 
     1546   
     1547  var url; 
     1548   
    15451549  // Now load a specific browser plugin which will implement the above for us. 
    15461550  if (Xinha.is_ie) 
    15471551  { 
    1548     if ( typeof InternetExplorer == 'undefined' ) 
     1552    url = _editor_url + 'modules/InternetExplorer/InternetExplorer.js'; 
     1553    if ( typeof InternetExplorer == 'undefined' && !document.getElementById(url) ) 
    15491554    {             
    1550       Xinha.loadPlugin("InternetExplorer", function() { editor.generate(); }, _editor_url + 'modules/InternetExplorer/InternetExplorer.js' ); 
     1555      Xinha.loadPlugin("InternetExplorer", function() { editor.generate(); }, url ); 
    15511556      return false; 
    15521557    } 
     
    15551560  else 
    15561561  { 
    1557     if ( typeof Gecko == 'undefined' ) 
     1562    url = _editor_url + 'modules/Gecko/Gecko.js'; 
     1563    if ( typeof Gecko == 'undefined' && !document.getElementById(url) ) 
    15581564    {             
    1559       Xinha.loadPlugin("Gecko", function() { editor.generate(); }, _editor_url + 'modules/Gecko/Gecko.js' ); 
     1565      Xinha.loadPlugin("Gecko", function() { editor.generate(); }, url ); 
    15601566      return false; 
    15611567    } 
     
    15631569  } 
    15641570 
    1565   this.setLoadingMessage('Generate Xinha object'); 
    1566  
    1567   if ( typeof Dialog == 'undefined' ) 
    1568   { 
    1569     Xinha._loadback(_editor_url + 'modules/Dialogs/dialog.js', this.generate, this ); 
     1571  if ( typeof Dialog == 'undefined' && !Xinha._loadback( _editor_url + 'modules/Dialogs/dialog.js', this.generate, this ) ) 
     1572  {     
    15701573    return false; 
    15711574  } 
    15721575 
    1573   if ( typeof Xinha.Dialog == 'undefined' ) 
    1574   { 
    1575     Xinha._loadback(_editor_url + 'modules/Dialogs/inline-dialog.js', this.generate, this ); 
     1576  if ( typeof Xinha.Dialog == 'undefined' &&  !Xinha._loadback( _editor_url + 'modules/Dialogs/inline-dialog.js' , this.generate, this ) ) 
     1577  {     
    15761578    return false; 
    15771579  } 
    15781580   
    1579   if ( typeof FullScreen == "undefined" ) 
    1580   { 
    1581     Xinha.loadPlugin("FullScreen", function() { editor.generate(); }, _editor_url + 'modules/FullScreen/full-screen.js' ); 
     1581  url = _editor_url + 'modules/FullScreen/full-screen.js'; 
     1582  if ( typeof FullScreen == "undefined" && !document.getElementById(url) ) 
     1583  { 
     1584    Xinha.loadPlugin("FullScreen", function() { editor.generate(); }, url ); 
    15821585    return false; 
    15831586  } 
     1587   
     1588  url = _editor_url + 'modules/ColorPicker/ColorPicker.js'; 
     1589  if ( typeof ColorPicker == 'undefined' && !document.getElementById(url) ) 
     1590  { 
     1591    Xinha.loadPlugin("ColorPicker", function() { editor.generate(); } , url ); 
     1592    return false; 
     1593  } 
     1594  else if ( typeof ColorPicker != 'undefined') editor.registerPlugin('ColorPicker'); 
    15841595 
    15851596  var toolbar = editor.config.toolbar; 
     
    15941605        break; 
    15951606        case "insertimage": 
    1596           if ( typeof InsertImage == 'undefined' && typeof Xinha.prototype._insertImage == 'undefined' ) 
     1607          url = _editor_url + 'modules/InsertImage/insert_image.js'; 
     1608          if ( typeof InsertImage == 'undefined' && typeof Xinha.prototype._insertImage == 'undefined' && !document.getElementById(url) ) 
    15971609          { 
    1598             Xinha.loadPlugin("InsertImage", function() { editor.generate(); } , _editor_url + 'modules/InsertImage/insert_image.js'); 
     1610            Xinha.loadPlugin("InsertImage", function() { editor.generate(); } , url ); 
    15991611            return false; 
    16001612          } 
     
    16021614        break; 
    16031615        case "createlink": 
    1604           if ( typeof CreateLink == 'undefined' && typeof Xinha.prototype._createLink == 'undefined' &&  typeof Linker == 'undefined' ) 
     1616          url = _editor_url + 'modules/CreateLink/link.js'; 
     1617          if ( typeof CreateLink == 'undefined' && typeof Xinha.prototype._createLink == 'undefined' &&  typeof Linker == 'undefined' && !document.getElementById(url)) 
    16051618          { 
    1606             Xinha.loadPlugin("CreateLink", function() { editor.generate(); } , _editor_url + 'modules/CreateLink/link.js'); 
     1619            Xinha.loadPlugin("CreateLink", function() { editor.generate(); } , url ); 
    16071620            return false; 
    16081621          } 
     
    16101623        break; 
    16111624        case "inserttable": 
    1612           if ( typeof InsertTable == 'undefined' && typeof Xinha.prototype._insertTable == 'undefined' ) 
     1625          url = _editor_url + 'modules/InsertTable/insert_table.js'; 
     1626          if ( typeof InsertTable == 'undefined' && typeof Xinha.prototype._insertTable == 'undefined' && !document.getElementById(url) ) 
    16131627          { 
    1614             Xinha.loadPlugin("InsertTable", function() { editor.generate(); } , _editor_url + 'modules/InsertTable/insert_table.js'); 
     1628            Xinha.loadPlugin("InsertTable", function() { editor.generate(); } , url ); 
    16151629            return false; 
    16161630          } 
    16171631          else if ( typeof InsertTable != 'undefined') editor.registerPlugin('InsertTable'); 
    16181632        break; 
    1619         case "hilitecolor": 
    1620         case "forecolor": 
    1621           if ( typeof ColorPicker == 'undefined') 
    1622           { 
    1623             Xinha.loadPlugin("ColorPicker", function() { editor.generate(); } , _editor_url + 'modules/ColorPicker/ColorPicker.js'); 
    1624             return false; 
    1625           } 
    1626           else if ( typeof ColorPicker != 'undefined') editor.registerPlugin('ColorPicker'); 
    1627         break; 
    1628          
    16291633      } 
    16301634    } 
     
    16431647      break; 
    16441648    } 
    1645     if ( typeof EnterParagraphs == 'undefined' ) 
     1649    if ( typeof EnterParagraphs == 'undefined'  && !document.getElementById(ParaHandlerPlugin) ) 
    16461650    { 
    16471651      Xinha.loadPlugin("EnterParagraphs", function() { editor.generate(); }, ParaHandlerPlugin ); 
     
    16611665  } 
    16621666   
    1663   if (typeof GetHtmlImplementation == 'undefined') 
     1667  if (typeof GetHtmlImplementation == 'undefined'  && !document.getElementById(getHtmlMethodPlugin)) 
    16641668  { 
    16651669    Xinha.loadPlugin("GetHtmlImplementation", function() { editor.generate(); } , getHtmlMethodPlugin); 
     
    27302734{ 
    27312735  if ( !Xinha.isSupportedBrowser ) return; 
    2732    
     2736 
    27332737  // @todo : try to avoid the use of eval() 
    27342738  // Might already be loaded 
    2735   if ( eval('typeof ' + pluginName) != 'undefined' ) 
     2739  //if ( eval('typeof ' + pluginName) != 'undefined' ) 
     2740  // @todo: try if this works to avoid the use of eval, I've been never getting here when testing 
     2741  if ( typeof window['pluginName'] != 'undefined' ) 
    27362742  { 
    27372743    if ( callback ) 
     
    53845390 */ 
    53855391  
    5386 Xinha._loadback = function(Url, Callback, Scope, Bonus) 
     5392Xinha._loadback = function(url, callback, scope, bonus) 
    53875393 
    5388   var T = !Xinha.is_ie ? "onload" : 'onreadystatechange'; 
    5389   var S = document.createElement("script"); 
    5390   S.type = "text/javascript"; 
    5391   S.src = Url; 
    5392   if ( Callback ) 
    5393   { 
    5394     S[T] = function() 
     5394  if ( document.getElementById(url) ) 
     5395  { 
     5396    return true; 
     5397  } 
     5398  var t = !Xinha.is_ie ? "onload" : 'onreadystatechange'; 
     5399  var s = document.createElement("script"); 
     5400  s.type = "text/javascript"; 
     5401  s.src = url; 
     5402  s.id = url; 
     5403  if ( callback ) 
     5404  { 
     5405    s[t] = function() 
    53955406    {       
    53965407      if ( Xinha.is_ie && ( ! ( /loaded|complete/.test(window.event.srcElement.readyState) ) ) ) 
     
    53995410      } 
    54005411       
    5401       Callback.call(Scope ? Scope : this, Bonus); 
    5402       S[T] = null; 
     5412      callback.call(scope ? scope : this, bonus); 
     5413      s[t] = null; 
    54035414    }; 
    54045415  } 
    5405   document.getElementsByTagName("head")[0].appendChild(S); 
     5416  document.getElementsByTagName("head")[0].appendChild(s); 
     5417  return false; 
    54065418}; 
    54075419 
     
    54745486    { 
    54755487      this.setLoadingMessage('Register plugin $plugin', 'Xinha', {'plugin': plugin_names[i]}); 
    5476       this.registerPlugin(eval(plugin_names[i])); 
     5488      this.registerPlugin(plugin_names[i]); 
    54775489    } 
    54785490  } 
Note: See TracChangeset for help on using the changeset viewer.