TiddlyWiki.org

Changeset 1965

Show
Ignore:
Timestamp:
28/03/07 14:16:27 (1 year ago)
Author:
JeremyRuston
Message:

Added ability to control the execution order between interdependent plugins (ticket #54)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Trunk/core/js/main.js

    r1847 r1965  
    107107        if(safeMode) 
    108108                return false; 
    109         var configTiddlers = store.getTaggedTiddlers("systemConfig"); 
     109        var tiddlers = store.getTaggedTiddlers("systemConfig"); 
     110        var i, n, p, toLoad = [], nLoaded = 0, map = {}, nPlugins = tiddlers.length; 
    110111        installedPlugins = []; 
    111         var hadProblem = false; 
    112         for(var t=0; t<configTiddlers.length; t++) { 
    113                 tiddler = configTiddlers[t]; 
    114                 pluginInfo = getPluginInfo(tiddler); 
    115                 var startTime = new Date(); 
    116                 if(isPluginExecutable(pluginInfo)) { 
    117                         pluginInfo.executed = true; 
    118                         pluginInfo.error = false; 
     112        for(i=0; i<nPlugins; i++) { 
     113                p = installedPlugins[i] = getPluginInfo(tiddlers[i]); 
     114                n = p.Name; 
     115                if(n)  
     116                        map[n] = p; 
     117                if(n = p.Source)  
     118                        map[n] = p; 
     119        } 
     120        var visit = function(p) { 
     121                if(!p || p.done) return; 
     122                p.done = 1; 
     123                var reqs = p.Requires; 
     124                if(reqs) { 
     125                        reqs = reqs.readBracketedList(); 
     126                        for(var i=0; i<reqs.length; i++) 
     127                                visit(map[reqs[i]]); 
     128                } 
     129                toLoad.push(p); 
     130        }; 
     131        for(n in map)  
     132                visit(map[n]);   
     133        for(i=0; i<toLoad.length; i++) { 
     134                pluginInfo = p = toLoad[i]; 
     135                tiddler = p.tiddler; 
     136                if(isPluginExecutable(p)) { 
     137                        p.executed = true; 
     138                        var startTime = new Date(); 
    119139                        try { 
    120                                 if(tiddler.text && tiddler.text != ""
     140                                if(tiddler.text
    121141                                        window.eval(tiddler.text); 
     142                                nLoaded++; 
    122143                        } catch(ex) { 
    123                                 pluginInfo.log.push(config.messages.pluginError.format([exceptionText(ex)])); 
    124                                 pluginInfo.error = true; 
    125                                 hadProblem = true; 
     144                                p.log.push(config.messages.pluginError.format([exceptionText(ex)])); 
     145                                p.error = true; 
    126146                        } 
    127                         pluginInfo.startupTime = String((new Date()) - startTime) + "ms"; 
     147                        pluginInfo.startupTime = String((new Date()) - startTime) + "ms";  
    128148                } else { 
    129                         pluginInfo.warning = true; 
     149                        p.warning = true; 
    130150                } 
    131                 installedPlugins.push(pluginInfo); 
    132         } 
    133         return hadProblem; 
     151        } 
     152        return nLoaded != nPlugins; 
    134153} 
    135154 
    136155function getPluginInfo(tiddler) 
    137156{ 
    138         var p = store.getTiddlerSlices(tiddler.title,["Name","Description","Version","CoreVersion","Date","Source","Author","License","Browsers"]); 
     157        var p = store.getTiddlerSlices(tiddler.title,["Name","Description","Version","Requires","CoreVersion","Date","Source","Author","License","Browsers"]); 
    139158        p.tiddler = tiddler; 
    140159        p.title = tiddler.title;