mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-12-25 09:46:03 +00:00
1. Pass params as an options object 2. Add fnProcess which is called during processing after enter, leave and change have been called
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 [];
|
|
};
|
|
|
|
})();
|