Changeset 1384 for trunk


Ignore:
Timestamp:
02/08/18 09:00:39 (21 months ago)
Author:
gogo
Message:

Add FancySelects? plugin to resolve #1365, along the way move jQuery and MooTools? into libraries/ improve AssetLoader? and add Xinha.loadLibrary.

The loadScript and loadStyle functions of Asset Loaders have been changed to load the given script/style only once, this was the most common situation. loadScriptAlways and loadStyleAlways have been added with which you can force one to be reloaded.

loadLibrary presently just accepts a library name, jquery or mootools and loads the latest version in the libraries folder (hard coded), eventually we may need to have some sort of version-requesting, but cross that bridge if we come to it.

Location:
trunk
Files:
69 added
3 edited
7 moved

Legend:

Unmodified
Added
Removed
  • trunk/XinhaCore.js

    r1380 r1384  
    10191019   *  "Times New Roman"      : 'times new roman,times,serif', 
    10201020   *  "Verdana"              : 'verdana,arial,helvetica,sans-serif', 
    1021    *  "impact"               : 'impact', 
     1021   *  "Impact"               : 'impact', 
    10221022   *  "WingDings"            : 'wingdings' 
    10231023   *}; 
     
    10341034    "Times New Roman" : 'times new roman,times,serif', 
    10351035    "Verdana"         : 'verdana,arial,helvetica,sans-serif', 
    1036     "impact"          : 'impact', 
     1036    "Impact"          : 'impact', 
    10371037    "WingDings"       : 'wingdings'  
    10381038  }; 
     
    16731673}; 
    16741674/** FIXME: How can this be used?? 
     1675 * The only thing that used this seems to have been PersistentStorage, which is DOA 
    16751676* @private 
    16761677*/ 
     
    42724273 *   var myAssetLoader = Xinha.includeAssets(); 
    42734274 *       myAssetLoader.loadScript('foo.js', 'MyPlugin') 
    4274  *                    .loadStyle('foo.css', 'MyPlugin');                         
     4275 *                    .loadStyle('foo.css', 'MyPlugin') 
     4276 *                    .loadScriptOnce('bar.js', 'MyPlugin') 
     4277 *                    .loadScriptIf( true, 'narf.js', 'MyPlugin') 
     4278 *                    .loadScriptOnceIf( false, 'zort.js', 'MyPlugin') 
     4279 *                    .loadStyleIf( 1 > 0, 'flurp.css', 'MyPlugin') 
     4280 *                    .whenReady(function(){ doSomethingCool(); }); 
    42754281 *  
    42764282 */ 
     
    42784284Xinha.includeAssets = function() 
    42794285{ 
    4280   var assetLoader = { pendingAssets: [ ], loaderRunning: false, loadedScripts: [ ] }; 
     4286  var assetLoader = { pendingAssets: [ ], loaderRunning: false, loadedAssets: [ ] }; 
    42814287   
    42824288  assetLoader.callbacks = [ ]; 
     4289   
     4290  assetLoader.isAlreadyLoaded = function(url, plugin) 
     4291  { 
     4292    for(var i = 0; i < this.loadedAssets.length; i++) 
     4293    { 
     4294      if(this.loadedAssets[i].url == url && this.loadedAssets[i].plugin == plugin) 
     4295      { 
     4296        if(!this.loaderRunning) this.loadNext(); 
     4297        return this; // Already done (or in process) 
     4298      } 
     4299    } 
     4300     
     4301    for(var i = 0; i < this.pendingAssets.length; i++) 
     4302    { 
     4303      if(this.pendingAssets[i].url == url && this.pendingAssets[i].plugin == plugin) 
     4304      { 
     4305        if(!this.loaderRunning) this.loadNext(); 
     4306        return this; // Already pending 
     4307      } 
     4308    } 
     4309     
     4310    return false; 
     4311  }; 
    42834312   
    42844313  assetLoader.loadNext = function() 
     
    42944323      { 
    42954324        case 'text/css': 
     4325          this.loadedAssets.push(nxt); 
    42964326          Xinha.loadStyle(nxt.url, nxt.plugin); 
    42974327          return this.loadNext(); 
    42984328         
    42994329        case 'text/javascript':           
    4300           this.loadedScripts.push(nxt); 
     4330          this.loadedAssets.push(nxt); 
    43014331          Xinha.loadScript(nxt.url, nxt.plugin, function() { self.loadNext(); }); 
    43024332      } 
     
    43094339  }; 
    43104340   
    4311   assetLoader.loadScript = function(url, plugin) 
    4312   { 
     4341  assetLoader.loadScriptAlways = function(url, plugin) 
     4342  { 
     4343    if(!url) return this; 
     4344     
    43134345    var self = this; 
    43144346     
     
    43214353  assetLoader.loadScriptOnce = function(url, plugin) 
    43224354  { 
    4323     for(var i = 0; i < this.loadedScripts.length; i++) 
    4324     { 
    4325       if(this.loadedScripts[i].url == url && this.loadedScripts[i].plugin == plugin) 
    4326       { 
    4327         if(!this.loaderRunning) this.loadNext(); 
    4328         return this; // Already done (or in process) 
    4329       } 
    4330     } 
    4331      
    4332     for(var i = 0; i < this.pendingAssets.length; i++) 
    4333     { 
    4334       if(this.pendingAssets[i].url == url && this.pendingAssets[i].plugin == plugin) 
    4335       { 
    4336         if(!this.loaderRunning) this.loadNext(); 
    4337         return this; // Already pending 
    4338       } 
     4355    if(this.isAlreadyLoaded(url, plugin))  
     4356    { 
     4357      return this; 
    43394358    } 
    43404359         
    4341     return this.loadScript(url, plugin); 
    4342   } 
    4343    
    4344   assetLoader.loadStyle = function(url, plugin) 
     4360    return this.loadScriptAlways(url, plugin); 
     4361  } 
     4362   
     4363  assetLoader.loadScript = function(url, plugin) 
     4364  { 
     4365    return this.loadScriptOnce(url, plugin); 
     4366  }; 
     4367   
     4368  assetLoader.loadStyleAlways = function(url, plugin) 
    43454369  { 
    43464370    var self = this; 
     
    43524376  }; 
    43534377   
     4378  assetLoader.loadStyleOnce = function(url, plugin) 
     4379  { 
     4380    if(this.isAlreadyLoaded(url, plugin))  
     4381    { 
     4382      return this; 
     4383    } 
     4384         
     4385    return this.loadStyleAlways(url, plugin); 
     4386  }; 
     4387   
     4388  assetLoader.loadStyle = function(url, plugin) 
     4389  { 
     4390    return this.loadStyleOnce(url, plugin); 
     4391  }; 
     4392   
    43544393  assetLoader.whenReady = function(callback)  
    43554394  { 
     
    43694408    } 
    43704409    return this; 
    4371   } 
     4410  }; 
     4411   
     4412  assetLoader.loadScriptIf = function(condition, url, plugin) 
     4413  { 
     4414    if(condition) this.loadScript(url, plugin); 
     4415    return this; 
     4416  }; 
     4417   
     4418  assetLoader.loadScriptOnceIf = function(condition, url, plugin) 
     4419  { 
     4420    if(condition) this.loadScriptOnce(url, plugin); 
     4421    return this; 
     4422  }; 
     4423   
     4424  assetLoader.loadStyleIf = function(condition, url, plugin) 
     4425  { 
     4426    if(condition) this.loadStyle(url, plugin); 
     4427    return this; 
     4428  }; 
    43724429   
    43734430  for(var i = 0 ; i < arguments.length; i++) 
     
    44094466   
    44104467  return assetLoader; 
     4468} 
     4469 
     4470Xinha._libraryAssetLoader = Xinha.includeAssets(); 
     4471Xinha.loadLibrary = function(libraryName, minVersion, maxVersion) 
     4472{ 
     4473  switch(libraryName.toLowerCase()) 
     4474  { 
     4475    case 'jquery': 
     4476      if(typeof jQuery == 'undefined') 
     4477      { 
     4478        Xinha._libraryAssetLoader.loadScriptOnce('libraries/jquery-3.3.1.js'); 
     4479      } 
     4480      break; 
     4481       
     4482    case 'mootools': 
     4483      if(typeof MooTools == 'undefined') 
     4484      { 
     4485        Xinha._libraryAssetLoader.loadScriptOnce('libraries/MooTools-Core-1.6.0.js') 
     4486                                 .loadScriptOnce('libraries/MooTools-More-1.6.0.js'); 
     4487      } 
     4488      break; 
     4489       
     4490    default: 
     4491      Xinha.debugMsg("Unknown library "+libraryName+", libraries need to be handled by Xinha.loadLibrary, add code there.", 'warn');  
     4492      break; 
     4493  } 
     4494   
     4495  // We return the loader so that the callee can do whenReady() on it 
     4496  //  if they want. 
     4497  return Xinha._libraryAssetLoader; 
    44114498} 
    44124499 
     
    50175104            { 
    50185105            // FIXME: the following line is scary. 
     5106              // console.log(j + ': ' + options[j].replace(/,\s*/g, ', ').substr(0, value.length).toLowerCase() + ' =? ' + value); 
     5107               
    50195108              if ( ( j.toLowerCase() == value ) || ( options[j].substr(0, value.length).toLowerCase() == value ) ) 
    50205109              { 
     
    50225111                throw "ok"; 
    50235112              } 
     5113               
     5114              // The fontname is troublesome, 'foo,bar' may become 'foo, bar' in the element 
     5115              // and 'foo bar, foobar' may become '"foo bar", foobar' 
     5116               
     5117              if(cmd == 'fontname') 
     5118              { 
     5119                var fixedOpt = options[j].replace(/,\s*/g, ', '); 
     5120                fixedOpt= fixedOpt.replace(/(^|,\s)([a-z]+(\s[a-z]+)+)(,|$)/, '$1"$2"$4'); 
     5121                 
     5122                // Debugging to work out why things are not matching! 
     5123                // console.log(fixedOpt.substr(0, value.length).toLowerCase() + '=?' + value ); 
     5124                 
     5125                if ( ( fixedOpt.substr(0, value.length).toLowerCase() == value ) ) 
     5126                { 
     5127                  btn.element.selectedIndex = sIndex; 
     5128                  throw "ok"; 
     5129                } 
     5130              } 
     5131               
    50245132              ++sIndex; 
    50255133            } 
  • trunk/plugins/MootoolsFileManager/MootoolsFileManager.js

    r1371 r1384  
    3535}; 
    3636 
    37 MootoolsFileManager.AssetLoader = Xinha.includeAssets(); 
    38  
    3937// In case you want to use your own version of Mootools, you can load it first. 
    40 if(typeof MooTools == 'undefined') 
    41 { 
    42   MootoolsFileManager.AssetLoader 
    43     .loadScript('MooTools-Core-1.6.0.js', 'MootoolsFileManager') 
    44     .loadScript('MooTools-More-1.6.0.js', 'MootoolsFileManager'); 
    45 } 
     38MootoolsFileManager.AssetLoader = Xinha.loadLibrary('MooTools'); 
    4639 
    4740// In case you want to use your own version of FileManager, you can load it first. 
     
    142135  if (phpcfg.files_dir)  
    143136  { 
    144     MootoolsFileManager.AssetLoader.loadScriptOnce('MootoolsFileManager.FileManager.js', 'MootoolsFileManager'); 
     137    MootoolsFileManager.AssetLoader.loadScript('MootoolsFileManager.FileManager.js', 'MootoolsFileManager'); 
    145138     
    146139    this.editor.config.registerButton({ 
     
    157150  if(phpcfg.images_dir) 
    158151  {      
    159     MootoolsFileManager.AssetLoader.loadScriptOnce('MootoolsFileManager.ImageManager.js', 'MootoolsFileManager'); 
     152    MootoolsFileManager.AssetLoader.loadScript('MootoolsFileManager.ImageManager.js', 'MootoolsFileManager'); 
    160153     
    161154    // Override our Editors insert image button action.   
  • trunk/plugins/WebKitResize/WebKitResize.js

    r1379 r1384  
    4141}; 
    4242 
    43 WebKitResize.AssetLoader = Xinha.includeAssets(); 
    44  
    4543if(Xinha.is_webkit) 
    4644{ 
    47   // In case you want to use your own version of jQuery, you can load it first 
    48   if(typeof jQuery == 'undefined') 
    49   { 
    50     // We seem to be able to use jQuery 3.3.1 with no issue which is the latest 
    51     // version at time of writing, so make that the defauilt. 
    52     WebKitResize.AssetLoader 
    53       //.loadScript('jquery-1.12.4.js', 'WebKitResize') 
    54       //.loadScript('jquery-2.2.4.js', 'WebKitResize') 
    55       .loadScript('jquery-3.3.1.js', 'WebKitResize') 
    56       .loadScript('jquery.mb.browser.min.js', 'WebKitResize'); 
    57   } 
    58  
    59   WebKitResize.AssetLoader 
    60     .loadScript('jquery.webkitresize.js', 'WebKitResize'); 
     45  Xinha.loadLibrary('jQuery') 
     46       .loadScriptOnce('jquery.mb.browser.min.js', 'WebKitResize') 
     47       .loadScriptOnce('jquery.webkitresize.js',   'WebKitResize'); 
    6148} 
    6249 
     
    6855WebKitResize.prototype.onGenerateOnce = function() 
    6956{ 
     57  // jQuery not loaded yet? 
     58  if(!(jQuery && jQuery.fn && jQuery.fn.webkitimageresize)) 
     59  { 
     60    var self = this; 
     61    window.setTimeout(function(){self.onGenerateOnce()}, 500); 
     62    return; 
     63  } 
     64   
    7065  if(Xinha.is_webkit) 
    7166  { 
     
    8176WebKitResize.prototype.onBeforeMode = function(mode) 
    8277{ 
    83   console.log("B CHANGE"); 
    8478  if(Xinha.is_webkit) 
    8579  { 
     
    10094WebKitResize.prototype.onMode = function(mode) 
    10195{ 
    102   console.log("CHANGE"); 
    10396  if(Xinha.is_webkit) 
    10497  { 
Note: See TracChangeset for help on using the changeset viewer.