2017-02-06 12:40:24 +00:00

135 lines
3.7 KiB
JavaScript

define(function(require, exports, module) {
main.consumes = [
"Plugin", "remote"
];
main.provides = ["JSDocument"];
return main;
function main(options, imports, register) {
var Plugin = imports.Plugin;
var remote = imports.remote;
function JSDocument(path) {
var exists = remote.findDocument(path);
if (exists) return exists;
/***** Initialization *****/
var plugin = new Plugin("Ajax.org", main.consumes);
// var emit = plugin.getEmitter();
var transports = [];
var tab;
var loaded = false;
function load() {
if (loaded) return false;
loaded = true;
remote.register(plugin);
}
/***** Methods *****/
function addTransport(transport) {
if (transports.indexOf(transport) == -1) {
transports.push(transport);
transport.addOther(function() {
var idx = transports.indexOf(transport);
if (~idx) {
transports.splice(idx, 1);
if (transports.length === 0)
plugin.unload();
}
});
}
return plugin;
}
function initTab(t) {
tab = t;
if (!tab) return;
var undo = t.document.undoManager;
undo.on("change", function() {
if (undo.isAtBookmark()) {
transports.forEach(function(transport) {
transport.reload();
});
}
}, tab);
}
function remove() {
transports.forEach(function(transport) {
transport.deleteStyleSheet(path);
});
}
/***** Lifecycle *****/
plugin.on("load", function() {
load();
});
plugin.on("enable", function() {
});
plugin.on("disable", function() {
});
plugin.on("unload", function() {
loaded = false;
});
/***** Register and define API *****/
/**
*
**/
plugin.freezePublicAPI({
/**
*
*/
get path() { return path; },
/**
*
*/
get tab() { return tab; },
/**
*
*/
set tab(tab) { initTab(tab); },
_events: [
/**
* @event draw
*/
"draw"
],
/**
*
*/
addTransport: addTransport,
/**
*
*/
remove: remove
});
plugin.load(null, "jsdocument");
return plugin;
}
register(null, {
JSDocument: JSDocument
});
}
});