TiddlyWiki5/plugins/tiddlywiki/dynannotate/modules/startup.js

63 lines
2.1 KiB
JavaScript

const { ElementSpotlight } = require("./element-spotlight");
/*\
title: $:/plugins/tiddlywiki/dynannotate/startup.js
type: application/javascript
module-type: startup
Startup the dyannotate background daemon to track the selection
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
// Export name and synchronous status
exports.name = "dyannotate-startup";
exports.platforms = ["browser"];
exports.after = ["render"];
exports.synchronous = true;
var CONFIG_SELECTION_TRACKER_TITLE = "$:/config/Dynannotate/SelectionTracker/Enable",
CONFIG_LEGACY_SELECTION_TRACKER_TITLE = "$:/config/Dynannotate/LegacySelectionTracker/Enable";
var SelectionTracker = require("$:/plugins/tiddlywiki/dynannotate/selection-tracker.js").SelectionTracker,
LegacySelectionTracker = require("$:/plugins/tiddlywiki/dynannotate/legacy-selection-tracker.js").LegacySelectionTracker,
ElementSpotlight = require("$:/plugins/tiddlywiki/dynannotate/element-spotlight.js").ElementSpotlight;
exports.startup = function() {
$tw.dynannotate = {};
// Setup selection tracker
if($tw.wiki.getTiddlerText(CONFIG_SELECTION_TRACKER_TITLE,"yes") === "yes") {
$tw.dynannotate.selectionTracker = new SelectionTracker($tw.wiki);
}
// Setup legacy selection tracker
if($tw.wiki.getTiddlerText(CONFIG_LEGACY_SELECTION_TRACKER_TITLE,"yes") === "yes") {
$tw.dynannotate.legacySelectionTracker = new LegacySelectionTracker($tw.wiki,{
allowBlankSelectionPopup: true
});
}
// Set up the element spotlight
$tw.dynannotate.elementSpotlight = new ElementSpotlight();
$tw.rootWidget.addEventListener("tm-spotlight-element",function(event) {
var selectors = [];
if(event.paramObject.selector) {
selectors.push(event.paramObject.selector);
}
$tw.utils.each(Object.keys(event.paramObject).sort(),function(name) {
var SELECTOR_PROPERTY_PREFIX = "selector-";
if($tw.utils.startsWith(name,SELECTOR_PROPERTY_PREFIX)) {
selectors.push(event.paramObject[name]);
}
});
if(event.paramObject["selector-fallback"]) {
selectors.push(event.paramObject["selector-fallback"]);
}
$tw.dynannotate.elementSpotlight.shineSpotlight(selectors);
});
};
})();