kopia lustrzana https://github.com/miklobit/TiddlyWiki5
				
				
				
			
		
			
				
	
	
		
			78 wiersze
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			78 wiersze
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
| /*\
 | |
| title: $:/core/modules/pluginswitcher.js
 | |
| type: application/javascript
 | |
| module-type: global
 | |
| 
 | |
| Manages switching plugins for themes and languages.
 | |
| 
 | |
| \*/
 | |
| (function(){
 | |
| 
 | |
| /*jslint node: true, browser: true */
 | |
| /*global $tw: false */
 | |
| "use strict";
 | |
| 
 | |
| /*
 | |
| options:
 | |
| wiki: wiki store to be used
 | |
| pluginType: type of plugin to be switched
 | |
| controllerTitle: title of tiddler used to control switching of this resource
 | |
| defaultPlugins: array of default plugins to be used if nominated plugin isn't found
 | |
| onSwitch: callback when plugin is switched (single parameter is array of plugin titles)
 | |
| */
 | |
| function PluginSwitcher(options) {
 | |
| 	this.wiki = options.wiki;
 | |
| 	this.pluginType = options.pluginType;
 | |
| 	this.controllerTitle = options.controllerTitle;
 | |
| 	this.defaultPlugins = options.defaultPlugins || [];
 | |
| 	this.onSwitch = options.onSwitch;
 | |
| 	// Switch to the current plugin
 | |
| 	this.switchPlugins();
 | |
| 	// Listen for changes to the selected plugin
 | |
| 	var self = this;
 | |
| 	this.wiki.addEventListener("change",function(changes) {
 | |
| 		if($tw.utils.hop(changes,self.controllerTitle)) {
 | |
| 			self.switchPlugins();
 | |
| 		}
 | |
| 	});
 | |
| }
 | |
| 
 | |
| PluginSwitcher.prototype.switchPlugins = function() {
 | |
| 	// Get the name of the current theme
 | |
| 	var selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);
 | |
| 	// If it doesn't exist, then fallback to one of the default themes
 | |
| 	var index = 0;
 | |
| 	while(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {
 | |
| 		selectedPluginTitle = this.defaultPlugins[index++];
 | |
| 	}
 | |
| 	// Accumulate the titles of the plugins that we need to load
 | |
| 	var plugins = [],
 | |
| 		self = this,
 | |
| 		accumulatePlugin = function(title) {
 | |
| 			var tiddler = self.wiki.getTiddler(title);
 | |
| 			if(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {
 | |
| 				plugins.push(title);
 | |
| 				var pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),
 | |
| 					dependents = $tw.utils.parseStringArray(tiddler.fields.dependents || "");
 | |
| 				$tw.utils.each(dependents,function(title) {
 | |
| 					accumulatePlugin(title);
 | |
| 				});
 | |
| 			}
 | |
| 		};
 | |
| 	accumulatePlugin(selectedPluginTitle);
 | |
| 	// Unregister any existing theme tiddlers
 | |
| 	var unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);
 | |
| 	// Register any new theme tiddlers
 | |
| 	var registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);
 | |
| 	// Unpack the current theme tiddlers
 | |
| 	$tw.wiki.unpackPluginTiddlers();
 | |
| 	// Call the switch handler
 | |
| 	if(this.onSwitch) {
 | |
| 		this.onSwitch(plugins);
 | |
| 	}
 | |
| };
 | |
| 
 | |
| exports.PluginSwitcher = PluginSwitcher;
 | |
| 
 | |
| })();
 |