mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-02-15 18:40:03 +00:00
![Jeremy Ruston](/assets/img/avatar_default.png)
The changes in #8555 are needed in order to be able to offer the desired user experience for dark mode changes.
73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
/*\
|
|
title: $:/core/modules/info/mediaquerytracker.js
|
|
type: application/javascript
|
|
module-type: info
|
|
|
|
Initialise $:/info/ tiddlers derived from media queries via
|
|
|
|
\*/
|
|
(function(){
|
|
|
|
/*jslint node: true, browser: true */
|
|
/*global $tw: false */
|
|
"use strict";
|
|
|
|
exports.getInfoTiddlerFields = function(updateInfoTiddlersCallback) {
|
|
if($tw.browser) {
|
|
// Functions to start and stop tracking a particular media query tracker tiddler
|
|
function track(title) {
|
|
var result = {},
|
|
tiddler = $tw.wiki.getTiddler(title);
|
|
if(tiddler) {
|
|
var mediaQuery = tiddler.fields["media-query"],
|
|
infoTiddler = tiddler.fields["info-tiddler"],
|
|
infoTiddlerAlt = tiddler.fields["info-tiddler-alt"];
|
|
if(mediaQuery && infoTiddler) {
|
|
// Evaluate and track the media query
|
|
result.mqList = window.matchMedia(mediaQuery);
|
|
function getResultTiddlers() {
|
|
var value = result.mqList.matches ? "yes" : "no",
|
|
tiddlers = [];
|
|
tiddlers.push({title: infoTiddler, text: value});
|
|
if(infoTiddlerAlt) {
|
|
tiddlers.push({title: infoTiddlerAlt, text: value})
|
|
}
|
|
return tiddlers;
|
|
};
|
|
updateInfoTiddlersCallback(getResultTiddlers());
|
|
result.handler = function(event) {
|
|
updateInfoTiddlersCallback(getResultTiddlers());
|
|
};
|
|
result.mqList.addEventListener("change",result.handler);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function untrack(enterValue) {
|
|
if(enterValue.mqList && enterValue.handler) {
|
|
enterValue.mqList.removeEventListener("change",enterValue.handler);
|
|
}
|
|
}
|
|
// Track media query tracker tiddlers
|
|
function fnEnter(title) {
|
|
return track(title);
|
|
}
|
|
function fnLeave(title,enterValue) {
|
|
untrack(enterValue);
|
|
}
|
|
function fnChange(title,enterValue) {
|
|
untrack(enterValue);
|
|
return track(title);
|
|
}
|
|
$tw.filterTracker.track({
|
|
filterString: "[all[tiddlers+shadows]tag[$:/tags/MediaQueryTracker]!is[draft]]",
|
|
fnEnter: fnEnter,
|
|
fnLeave: fnLeave,
|
|
fnChange: fnChange
|
|
});
|
|
}
|
|
return [];
|
|
};
|
|
|
|
})();
|