mirror of
				https://github.com/Jermolene/TiddlyWiki5
				synced 2025-10-30 23:23:02 +00:00 
			
		
		
		
	Add support for $:/info/darkmode (and for dynamic info tiddlers)
This commit is contained in:
		| @@ -12,7 +12,7 @@ Initialise basic platform $:/info/ tiddlers | ||||
| /*global $tw: false */ | ||||
| "use strict"; | ||||
|  | ||||
| exports.getInfoTiddlerFields = function() { | ||||
| exports.getInfoTiddlerFields = function(updateInfoTiddlersCallback) { | ||||
| 	var mapBoolean = function(value) {return value ? "yes" : "no";}, | ||||
| 		infoTiddlerFields = []; | ||||
| 	// Basics | ||||
| @@ -36,6 +36,13 @@ exports.getInfoTiddlerFields = function() { | ||||
| 		// Screen size | ||||
| 		infoTiddlerFields.push({title: "$:/info/browser/screen/width", text: window.screen.width.toString()}); | ||||
| 		infoTiddlerFields.push({title: "$:/info/browser/screen/height", text: window.screen.height.toString()}); | ||||
|  		// Dark mode through event listener on MediaQueryList | ||||
|  		var mqList = window.matchMedia("(prefers-color-scheme: dark)"), | ||||
|  			getDarkModeTiddler = function() {return {title: "$:/info/darkmode", text: mqList.matches ? "yes" : "no"};}; | ||||
|  		infoTiddlerFields.push(getDarkModeTiddler()); | ||||
|  		mqList.addEventListener("change", function(event) { | ||||
|  			updateInfoTiddlersCallback([getDarkModeTiddler()]); | ||||
|  		}); | ||||
| 		// Language | ||||
| 		infoTiddlerFields.push({title: "$:/info/browser/language", text: navigator.language || ""}); | ||||
| 	} | ||||
|   | ||||
| @@ -21,17 +21,14 @@ exports.synchronous = true; | ||||
| var TITLE_INFO_PLUGIN = "$:/temp/info-plugin"; | ||||
|  | ||||
| exports.startup = function() { | ||||
| 	// Collect up the info tiddlers | ||||
| 	var infoTiddlerFields = {}; | ||||
| 	// Give each info module a chance to fill in as many info tiddlers as they want | ||||
| 	$tw.modules.forEachModuleOfType("info",function(title,moduleExports) { | ||||
| 		if(moduleExports && moduleExports.getInfoTiddlerFields) { | ||||
| 			var tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields); | ||||
| 	// Function to bake the info plugin with new tiddlers | ||||
| 	var updateInfoPlugin = function(tiddlerFieldsArray) { | ||||
| 		// Get the existing tiddlers | ||||
| 		var json = $tw.wiki.getTiddlerData(TITLE_INFO_PLUGIN,{tiddlers: {}}); | ||||
| 		// Add the new ones | ||||
| 		$tw.utils.each(tiddlerFieldsArray,function(fields) { | ||||
| 				if(fields) { | ||||
| 					infoTiddlerFields[fields.title] = fields; | ||||
| 				} | ||||
| 			}); | ||||
| 			if(fields && fields.title) { | ||||
| 				json.tiddlers[fields.title] = fields; | ||||
| 			} | ||||
| 		}); | ||||
| 		// Bake the info tiddlers into a plugin. We use the non-standard plugin-type "info" because ordinary plugins are only registered asynchronously after being loaded dynamically | ||||
| @@ -39,11 +36,22 @@ exports.startup = function() { | ||||
| 			title: TITLE_INFO_PLUGIN, | ||||
| 			type: "application/json", | ||||
| 			"plugin-type": "info", | ||||
| 		text: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces) | ||||
| 			text: JSON.stringify(json,null,$tw.config.preferences.jsonSpaces) | ||||
| 		}; | ||||
| 		$tw.wiki.addTiddler(new $tw.Tiddler(fields)); | ||||
| 	$tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]); | ||||
| 	$tw.wiki.registerPluginTiddlers("info"); | ||||
|  | ||||
| 	}; | ||||
| 	// Collect up the info tiddlers | ||||
| 	var tiddlerFieldsArray = []; | ||||
| 	// Give each info module a chance to provide as many info tiddlers as they want as an array, and give them a callback for dynamically updating them | ||||
| 	$tw.modules.forEachModuleOfType("info",function(title,moduleExports) { | ||||
| 		if(moduleExports && moduleExports.getInfoTiddlerFields) { | ||||
| 			Array.prototype.push.apply(tiddlerFieldsArray,moduleExports.getInfoTiddlerFields(updateInfoPlugin)); | ||||
| 		} | ||||
| 	}); | ||||
| 	updateInfoPlugin(tiddlerFieldsArray); | ||||
| 	var changes = $tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]); | ||||
| 	$tw.wiki.registerPluginTiddlers("info",[TITLE_INFO_PLUGIN]); | ||||
| 	$tw.wiki.unpackPluginTiddlers(); | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| created: 20140720164948099 | ||||
| modified: 20200506110435897 | ||||
| modified: 20201124185829706 | ||||
| tags: Mechanisms | ||||
| title: InfoMechanism | ||||
| type: text/vnd.tiddlywiki | ||||
| @@ -27,3 +27,4 @@ System tiddlers in the namespace `$:/info/` are used to expose information about | ||||
| |[[$:/info/url/port]] |<<.from-version "5.1.14">> Port portion of URL of wiki (eg, ''<<example port>>'') | | ||||
| |[[$:/info/url/protocol]] |<<.from-version "5.1.14">> Protocol portion of URL of wiki (eg, ''<<example protocol>>'') | | ||||
| |[[$:/info/url/search]] |<<.from-version "5.1.14">> Search portion of URL of wiki (eg, ''<<example search>>'') | | ||||
| |[[$:/info/darkmode]] |<<.from-version "5.1.23">> Is dark mode enabled? ("yes" or "no") | | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 jeremy@jermolene.com
					jeremy@jermolene.com