summaryrefslogtreecommitdiff
path: root/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem')
-rw-r--r--data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/.npmignore7
-rw-r--r--data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/.travis.yml22
-rw-r--r--data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/README.md28
-rw-r--r--data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/index.js218
-rw-r--r--data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/package.json82
-rw-r--r--data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/test/test-menuitems.js169
6 files changed, 526 insertions, 0 deletions
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/.npmignore b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/.npmignore
new file mode 100644
index 0000000..d15926f
--- /dev/null
+++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/.npmignore
@@ -0,0 +1,7 @@
+.DS_Store
+*.xpi
+.project
+.settings
+*.zip
+node_modules
+
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/.travis.yml b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/.travis.yml
new file mode 100644
index 0000000..c9fefad
--- /dev/null
+++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/.travis.yml
@@ -0,0 +1,22 @@
+language: node_js
+node_js:
+- "0.10"
+
+before_install:
+- "export DISPLAY=:99.0"
+- "sh -e /etc/init.d/xvfb start"
+- "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16 -extension RANDR"
+
+before_script:
+- npm install jpm -g
+- rm -r node_modules/addon-pathfinder/test
+- cd ..
+- url="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/firefox-36.0a1.en-US.linux-x86_64.tar.bz2"
+- wget -O firefox.tar.bz2 "$url"
+- bzip2 -cd firefox.tar.bz2 | tar xvf -
+- cd $TRAVIS_BUILD_DIR
+
+script:
+- export JPM_FIREFOX_BINARY=$TRAVIS_BUILD_DIR/../firefox/firefox
+- jpm test -v
+
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/README.md b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/README.md
new file mode 100644
index 0000000..140ad26
--- /dev/null
+++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/README.md
@@ -0,0 +1,28 @@
+# Menuitem
+
+[![Build Status](https://travis-ci.org/jetpack-labs/menuitem.png)](https://travis-ci.org/jetpack-labs/menuitem)
+
+[![NPM](https://nodei.co/npm/menuitem.png?stars&downloads)](https://nodei.co/npm/menuitem/)
+[![NPM](https://nodei.co/npm-dl/menuitem.png)](https://nodei.co/npm/menuitem)
+
+The menuitems API is a simple way to create a menuitem,
+which can perform an action when clicked, and display state.
+
+## Example
+
+ // create menuitem for the File menu,
+ // and insert it before the 'Quit' menuitem
+ require("menuitem").Menuitem({
+ id: "myextprefix-some-mi-id",
+ menuid: "menu_FilePopup",
+ insertbefore: "menu_FileQuitItem",
+ "label": _("label"),
+ "accesskey": _("label.ak"),
+ image: self.data.url("icon.png"),
+ className: 'pizazz',
+ disabled: false,
+ checked: false,
+ onCommand: function() {
+ // do something
+ }
+ });
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/index.js b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/index.js
new file mode 100644
index 0000000..e5f79dc
--- /dev/null
+++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/index.js
@@ -0,0 +1,218 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+const windowUtils = require("sdk/deprecated/window-utils");
+const { Class } = require("sdk/core/heritage");
+const { validateOptions } = require("sdk/deprecated/api-utils");
+const { on, emit, once, off } = require("sdk/event/core");
+const { isBrowser } = require("sdk/window/utils");
+const { EventTarget } = require('sdk/event/target');
+const menuitemNS = require("sdk/core/namespace").ns();
+
+const { unload } = require('pathfinder/lib/addon/unload');
+
+const NS_XUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+
+function MenuitemOptions(options) {
+ return validateOptions(options, {
+ id: { is: ['string'] },
+ menuid: { is: ['undefined', 'string'] },
+ insertbefore: { is: ['undefined', 'string', 'object', 'number'] },
+ label: { is: ["string"] },
+ include: { is: ['string', 'undefined'] },
+ disabled: { is: ["undefined", "boolean"], map: function(v) !!v},
+ accesskey: { is: ["undefined", "string"] },
+ key: { is: ["undefined", "string"] },
+ checked: { is: ['undefined', 'boolean'] },
+ className: { is: ["undefined", "string"] },
+ onCommand: { is: ['undefined', 'function'] },
+ useChrome: { map: function(v) !!v }
+ });
+}
+
+let Menuitem = Class({
+ extends: EventTarget,
+ initialize: function(options) {
+ options = menuitemNS(this).options = MenuitemOptions(options);
+ EventTarget.prototype.initialize.call(this, options);
+
+ menuitemNS(this).destroyed = false;
+ menuitemNS(this).unloaders = [];
+ menuitemNS(this).menuitems = addMenuitems(this, options).menuitems;
+ },
+ get id() menuitemNS(this).options.id,
+ get label() menuitemNS(this).options.label,
+ set label(val) updateProperty(this, 'label', val),
+ get checked() menuitemNS(this).options.checked,
+ set checked(val) updateProperty(this, 'checked', !!val),
+ get disabled() menuitemNS(this).options.disabled,
+ set disabled(val) updateProperty(this, 'disabled', !!val),
+ get key() menuitemNS(this).options.key,
+ set key(val) updateProperty(this, 'key', val),
+ clone: function (overwrites) {
+ let opts = Object.clone(menuitemNS(this).options);
+ for (let key in overwrites) {
+ opts[key] = overwrites[key];
+ }
+ return Menuitem(opts);
+ },
+ get menuid() menuitemNS(this).options.menuid,
+ set menuid(val) {
+ let options = menuitemNS(this).options;
+ options.menuid = val;
+
+ forEachMI(function(menuitem, i, $) {
+ updateMenuitemParent(menuitem, options, $);
+ });
+ },
+ destroy: function() {
+ if (!menuitemNS(this).destroyed) {
+ menuitemNS(this).destroyed = true;
+ menuitemNS(this).unloaders.forEach(function(u) u());
+ menuitemNS(this).unloaders = null;
+ menuitemNS(this).menuitems = null;
+ }
+ return true;
+ }
+});
+
+function addMenuitems(self, options) {
+ let menuitems = [];
+
+ // setup window tracker
+ windowUtils.WindowTracker({
+ onTrack: function (window) {
+ if (menuitemNS(self).destroyed) return;
+ if (options.include) {
+ if (options.include != window.location) return;
+ }
+ else if (!isBrowser(window)) {
+ return;
+ }
+
+ // add the new menuitem to a menu
+ var menuitem = updateMenuitemAttributes(
+ window.document.createElementNS(NS_XUL, "menuitem"), options);
+ var menuitems_i = menuitems.push(menuitem) - 1;
+
+ // add the menutiem to the ui
+ let added = updateMenuitemParent(menuitem, options, function(id) window.document.getElementById(id));
+
+ menuitem.addEventListener("command", function() {
+ if (!self.disabled)
+ emit(self, 'command', options.useChrome ? window : null);
+ }, true);
+
+ // add unloader
+ let unloader = function unloader() {
+ menuitem.parentNode && menuitem.parentNode.removeChild(menuitem);
+ menuitems[menuitems_i] = null;
+ };
+
+ menuitemNS(self).unloaders.push(function() {
+ remover();
+ unloader();
+ });
+
+ let remover = unload(unloader, window);
+ }
+
+ });
+
+ return { menuitems: menuitems };
+}
+
+function updateMenuitemParent(menuitem, options, $) {
+ // add the menutiem to the ui
+ if (Array.isArray(options.menuid)) {
+ let ids = options.menuid;
+ for (var len = ids.length, i = 0; i < len; i++) {
+ if (tryParent($(ids[i]), menuitem, options.insertbefore))
+ return true;
+ }
+ }
+ else {
+ return tryParent($(options.menuid), menuitem, options.insertbefore);
+ }
+
+ return false;
+}
+
+function updateMenuitemAttributes(menuitem, options) {
+ menuitem.setAttribute("id", options.id);
+ menuitem.setAttribute("label", options.label);
+
+ if (options.accesskey)
+ menuitem.setAttribute("accesskey", options.accesskey);
+
+ if (options.key)
+ menuitem.setAttribute("key", options.key);
+
+ menuitem.setAttribute("disabled", !!options.disabled);
+
+ if (options.image) {
+ menuitem.classList.add("menuitem-iconic");
+ menuitem.style.listStyleImage = "url('" + options.image + "')";
+ }
+
+ if (options.checked)
+ menuitem.setAttribute('checked', options.checked);
+
+ if (options.className)
+ options.className.split(/\s+/).forEach(function(name) menuitem.classList.add(name));
+
+ return menuitem;
+}
+
+function updateProperty(menuitem, key, val) {
+ menuitemNS(menuitem).options[key] = val;
+
+ forEachMI(function(menuitem) {
+ menuitem.setAttribute(key, val);
+ }, menuitem);
+ return val;
+}
+
+function forEachMI(callback, menuitem) {
+ menuitemNS(menuitem).menuitems.forEach(function(mi, i) {
+ if (!mi) return;
+ callback(mi, i, function(id) mi.ownerDocument.getElementById(id));
+ });
+}
+
+function tryParent(parent, menuitem, before) {
+ if (parent) {
+ if (!before) {
+ parent.appendChild(menuitem);
+ return true;
+ }
+
+ parent.insertBefore(menuitem, insertBefore(parent, before));
+ return true;
+ }
+
+ return false;
+}
+
+function insertBefore(parent, insertBefore) {
+ if (typeof insertBefore == "number") {
+ switch (insertBefore) {
+ case MenuitemExport.FIRST_CHILD:
+ return parent.firstChild;
+ }
+ return null;
+ }
+ else if (typeof insertBefore == "string") {
+ return parent.querySelector("#" + insertBefore);
+ }
+ return insertBefore;
+}
+
+function MenuitemExport(options) {
+ return Menuitem(options);
+}
+MenuitemExport.FIRST_CHILD = 1;
+
+exports.Menuitem = MenuitemExport;
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/package.json b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/package.json
new file mode 100644
index 0000000..b8798a5
--- /dev/null
+++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/package.json
@@ -0,0 +1,82 @@
+{
+ "_args": [
+ [
+ "menuitem@0.0.5",
+ "/home/nik/src/librejs"
+ ]
+ ],
+ "_from": "menuitem@0.0.5",
+ "_id": "menuitem@0.0.5",
+ "_inCache": true,
+ "_location": "/menuitem",
+ "_nodeVersion": "4.0.0",
+ "_npmUser": {
+ "email": "accounts.npm@overbythere.co.uk",
+ "name": "overbythere"
+ },
+ "_npmVersion": "2.14.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "menuitem",
+ "raw": "menuitem@0.0.5",
+ "rawSpec": "0.0.5",
+ "scope": null,
+ "spec": "0.0.5",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/menuitem/-/menuitem-0.0.5.tgz",
+ "_shasum": "c170347dcc0cc7195af645f300acd8f99522f896",
+ "_shrinkwrap": null,
+ "_spec": "menuitem@0.0.5",
+ "_where": "/home/nik/src/librejs",
+ "author": {
+ "name": "Erik Vold"
+ },
+ "bugs": {
+ "url": "https://github.com/OverByThere/menuitem/issues"
+ },
+ "dependencies": {
+ "pathfinder": "git+https://github.com/OverByThere/addon-pathfinder.git"
+ },
+ "description": "[![Build Status](https://travis-ci.org/jetpack-labs/menuitem.png)](https://travis-ci.org/jetpack-labs/menuitem)",
+ "devDependencies": {},
+ "directories": {
+ "test": "test"
+ },
+ "dist": {
+ "shasum": "c170347dcc0cc7195af645f300acd8f99522f896",
+ "tarball": "http://registry.npmjs.org/menuitem/-/menuitem-0.0.5.tgz"
+ },
+ "gitHead": "bb3f05ea29164bf673a4cdd076fc620266028e53",
+ "homepage": "https://github.com/OverByThere/menuitem#readme",
+ "installable": true,
+ "keywords": [
+ "firefox",
+ "gecko",
+ "jetpack",
+ "menu",
+ "menuitem",
+ "ui"
+ ],
+ "license": "MPL-2.0",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "overbythere",
+ "email": "accounts.npm@overbythere.co.uk"
+ }
+ ],
+ "name": "menuitem",
+ "optionalDependencies": {},
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/OverByThere/menuitem.git"
+ },
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "version": "0.0.5"
+}
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/test/test-menuitems.js b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/test/test-menuitems.js
new file mode 100644
index 0000000..52f911d
--- /dev/null
+++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/menuitem/test/test-menuitems.js
@@ -0,0 +1,169 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict'
+
+const windowUtils = require('sdk/deprecated/window-utils');
+const menuitems = require('../index');
+
+let window = windowUtils.activeBrowserWindow;
+let document = window.document;
+function $(id) document.getElementById(id);
+
+function createMI(options, test) {
+ test.equal(!$(options.id), true);
+ var mi = new menuitems.Menuitem(options);
+ return mi;
+}
+
+exports.testMIDoesNotExist = function(assert) {
+ var options = {
+ id: "test-mi-dne",
+ label: "test"
+ };
+ createMI(options, assert);
+ assert.equal(!!$(options.id), false, 'menuitem does not exists');
+};
+
+exports.testMIDoesExist = function(assert) {
+ var options = {
+ id: "test-mi-exists",
+ label: "test",
+ menuid: 'menu_FilePopup'
+ };
+ let mi = createMI(options, assert);
+ let menuitem = $(options.id);
+ assert.equal(!!menuitem, true, 'menuitem exists');
+ assert.equal(menuitem.id, options.id, 'menuitem id is ok');
+ assert.equal(menuitem.getAttribute('label'), options.label, 'menuitem label is ok');
+ assert.equal(menuitem.parentNode.id, options.menuid, 'in the file menu');
+ assert.equal(menuitem.getAttribute('disabled'), 'false', 'menuitem not disabled');
+ assert.equal(menuitem.getAttribute('accesskey'), '', 'menuitem accesskey is ok');
+ assert.equal(menuitem.getAttribute('class'), '', 'menuitem class is ok');
+ assert.equal(menuitem.nextSibling, undefined, 'menuitem is last');
+ assert.equal(menuitem.hasAttribute("checked"), false, 'menuitem not checked');
+ mi.destroy();
+ assert.ok(!$(options.id), 'menuitem is gone');
+ assert.equal(menuitem.parentNode, null, 'menuitem has no parent');
+};
+
+exports.testMIOnClick = function(assert, done) {
+ let options = {
+ id: "test-mi-onclick",
+ label: "test",
+ menuid: 'menu_FilePopup',
+ onCommand: function() {
+ mi.destroy();
+ assert.pass('onCommand worked!');
+ done();
+ }
+ };
+
+ let e = document.createEvent("UIEvents");
+ e.initUIEvent("command", true, true, window, 1);
+
+ var mi = createMI(options, assert);
+ let menuitem = $(options.id);
+ assert.equal(!!menuitem, true, 'menuitem exists');
+ menuitem.dispatchEvent(e);
+};
+
+exports.testMIDisabled = function(assert, done) {
+ let commandIsOK = false;
+ let count = 0;
+ let options = {
+ id: "test-mi-disabled",
+ label: "test",
+ disabled: true,
+ menuid: 'menu_FilePopup',
+ onCommand: function() {
+ count++;
+ if (!commandIsOK) {
+ assert.fail('onCommand was called, that is not ok');
+ return;
+ }
+
+ mi.destroy();
+ assert.equal(count, 1, 'onCommand was called the correct number of times!');
+ done();
+ }
+ };
+
+ let e = document.createEvent("UIEvents");
+ e.initUIEvent("command", true, true, window, 1);
+
+ var mi = createMI(options, assert);
+ let menuitem = $(options.id);
+ assert.equal(!!menuitem, true, 'menuitem exists');
+ assert.equal(menuitem.getAttribute('disabled'), 'true', 'menuitem not disabled');
+ menuitem.dispatchEvent(e);
+ mi.disabled = false;
+ assert.equal(menuitem.getAttribute('disabled'), 'false', 'menuitem not disabled');
+ commandIsOK = true;
+ menuitem.dispatchEvent(e);
+};
+
+exports.testMIChecked = function(assert) {
+ let options = {
+ id: "test-mi-checked",
+ label: "test",
+ disabled: true,
+ menuid: 'menu_FilePopup',
+ checked: true
+ };
+
+ let mi = createMI(options, assert);
+ let menuitem = $(options.id);
+ assert.equal(!!menuitem, true, 'menuitem exists');
+ assert.equal(menuitem.getAttribute("checked"), "true", 'menuitem checked');
+ mi.checked = false;
+ assert.equal(menuitem.getAttribute("checked"), "false", 'menuitem checked');
+ mi.destroy();
+};
+
+exports.testMIClass = function(assert) {
+ let options = {
+ id: "test-mi-class",
+ label: "pizazz",
+ className: "pizazz",
+ menuid: 'menu_FilePopup',
+ };
+
+ var mi = createMI(options, assert);
+ let menuitem = $(options.id);
+ assert.equal(!!menuitem, true, 'menuitem exists');
+ assert.equal(menuitem.getAttribute('class'), 'pizazz', 'menuitem not disabled');
+ mi.destroy();
+};
+
+exports.testInsertBeforeExists = function(assert) {
+ let options = {
+ id: 'test-mi-insertbefore',
+ label: 'insertbefore',
+ insertbefore:'menu_FileQuitItem',
+ menuid: 'menu_FilePopup',
+ };
+
+ var mi = createMI(options, assert);
+ let menuitem = $(options.id);
+ assert.equal(!!menuitem, true, 'menuitem exists');
+ assert.equal(menuitem.nextSibling, $('menu_FileQuitItem'), 'menuitem not disabled');
+ mi.destroy();
+};
+
+exports.testInsertBeforeDoesNotExist = function(assert) {
+ let options = {
+ id: 'test-mi-insertbefore',
+ label: 'insertbefore',
+ insertbefore:'menu_ZZZDNE',
+ menuid: 'menu_FilePopup',
+ };
+
+ var mi = createMI(options, assert);
+ let menuitem = $(options.id);
+ assert.equal(!!menuitem, true, 'menuitem exists');
+ assert.equal(menuitem.nextSibling, null, 'menuitem not disabled');
+ mi.destroy();
+};
+
+require('sdk/test').run(exports);