diff options
-rw-r--r-- | common/chrome.manifest | 22 | ||||
-rw-r--r-- | common/content/bookmarks.js | 89 | ||||
-rw-r--r-- | common/modules/config.jsm | 2 | ||||
-rw-r--r-- | common/modules/contexts.jsm | 6 | ||||
-rw-r--r-- | common/modules/overlay.jsm | 3 | ||||
l---------[-rw-r--r--] | melodactyl/chrome.manifest | 37 | ||||
-rw-r--r-- | melodactyl/content/config.js | 280 | ||||
-rw-r--r-- | melodactyl/content/melodactyl.xul | 52 | ||||
-rw-r--r-- | melodactyl/content/player.js | 34 | ||||
l---------[-rw-r--r--] | pentadactyl/chrome.manifest | 23 | ||||
-rw-r--r-- | pentadactyl/content/config.js | 4 | ||||
l---------[-rw-r--r--] | teledactyl/chrome.manifest | 23 | ||||
-rw-r--r-- | teledactyl/content/teledactyl.xul | 20 |
13 files changed, 258 insertions, 337 deletions
diff --git a/common/chrome.manifest b/common/chrome.manifest new file mode 100644 index 00000000..4995b0e8 --- /dev/null +++ b/common/chrome.manifest @@ -0,0 +1,22 @@ +resource dactyl-local-content content/ +resource dactyl-local-skin skin/ +resource dactyl-local-locale locale/ + +resource dactyl ../common/modules/ +resource dactyl-content ../common/content/ +resource dactyl-skin ../common/skin/ +resource dactyl-locale ../common/locale/ + +content dactyl ../common/content/ + +component {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} components/commandline-handler.js +contract @mozilla.org/commandlinehandler/general-startup;1?type=dactyl {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} +category command-line-handler m-dactyl @mozilla.org/commandlinehandler/general-startup;1?type=dactyl + +component {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} components/protocols.js +contract @mozilla.org/network/protocol;1?name=chrome-data {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} +component {9c8f2530-51c8-4d41-b356-319e0b155c44} components/protocols.js +contract @mozilla.org/network/protocol;1?name=dactyl {9c8f2530-51c8-4d41-b356-319e0b155c44} +component {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} components/protocols.js +contract @dactyl.googlecode.com/base/xpc-interface-shim {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} + diff --git a/common/content/bookmarks.js b/common/content/bookmarks.js index cb411ba9..1e2c3138 100644 --- a/common/content/bookmarks.js +++ b/common/content/bookmarks.js @@ -263,63 +263,56 @@ var Bookmarks = Module("bookmarks", { * @returns {[string, string | null] | null} */ getSearchURL: function getSearchURL(text, useDefsearch) { - let searchString = (useDefsearch ? options["defsearch"] + " " : "") + text; + let query = (useDefsearch ? options["defsearch"] + " " : "") + text; // ripped from Firefox - function getShortcutOrURI(url) { - var keyword = url; - var param = ""; - var offset = url.indexOf(" "); - if (offset > 0) { - keyword = url.substr(0, offset); - param = url.substr(offset + 1); - } + var keyword = query; + var param = ""; + var offset = query.indexOf(" "); + if (offset > 0) { + keyword = query.substr(0, offset); + param = query.substr(offset + 1); + } - var engine = bookmarks.searchEngines[keyword]; - if (engine) { - if (engine.searchForm && !param) - return [engine.searchForm, null]; - let submission = engine.getSubmission(param, null); - return [submission.uri.spec, submission.postData]; - } + var engine = bookmarks.searchEngines[keyword]; + if (engine) { + if (engine.searchForm && !param) + return engine.searchForm; + let submission = engine.getSubmission(param, null); + return [submission.uri.spec, submission.postData]; + } - let [shortcutURL, postData] = PlacesUtils.getURLAndPostDataForKeyword(keyword); - if (!shortcutURL) - return [url, null]; - let bmark = bookmarkcache.keywords[keyword]; - - let data = window.unescape(postData || ""); - if (/%s/i.test(shortcutURL) || /%s/i.test(data)) { - var charset = ""; - var matches = shortcutURL.match(/^(.*)\&mozcharset=([a-zA-Z][_\-a-zA-Z0-9]+)\s*$/); - if (matches) - [, shortcutURL, charset] = matches; - else - try { - charset = services.history.getCharsetForURI(util.newURI(shortcutURL)); - } - catch (e) {} - if (charset) - var encodedParam = escape(window.convertFromUnicode(charset, param)); - else - encodedParam = bmark.encodeURIComponent(param); + let [url, postData] = PlacesUtils.getURLAndPostDataForKeyword(keyword); + if (!url) + return null; - shortcutURL = shortcutURL.replace(/%s/g, encodedParam).replace(/%S/g, param); - if (/%s/i.test(data)) - postData = window.getPostDataStream(data, param, encodedParam, "application/x-www-form-urlencoded"); - } - else if (param) - return [shortcutURL, null]; - return [shortcutURL, postData]; - } + let data = window.unescape(postData || ""); + if (/%s/i.test(url) || /%s/i.test(data)) { + var charset = ""; + var matches = url.match(/^(.*)\&mozcharset=([a-zA-Z][_\-a-zA-Z0-9]+)\s*$/); + if (matches) + [, url, charset] = matches; + else + try { + charset = services.history.getCharsetForURI(util.newURI(url)); + } + catch (e) {} - let [url, postData] = getShortcutOrURI(searchString); + if (charset) + var encodedParam = escape(window.convertFromUnicode(charset, param)); + else + encodedParam = bookmarkcache.keywords[keyword].encodeURIComponent(param); + + url = url.replace(/%s/g, encodedParam).replace(/%S/g, param); + if (/%s/i.test(data)) + postData = window.getPostDataStream(data, param, encodedParam, "application/x-www-form-urlencoded"); + } + else if (param) + postData = null; - if (url == searchString) - return null; if (postData) return [url, postData]; - return url; // can be null + return url; }, /** diff --git a/common/modules/config.jsm b/common/modules/config.jsm index f348ffc9..9743df7c 100644 --- a/common/modules/config.jsm +++ b/common/modules/config.jsm @@ -13,7 +13,7 @@ Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("config", { exports: ["ConfigBase", "Config", "config"], require: ["services", "storage", "util", "template"], - use: ["io"] + use: ["io", "prefs"] }, this); var ConfigBase = Class("ConfigBase", { diff --git a/common/modules/contexts.jsm b/common/modules/contexts.jsm index f9457e9d..8d2dd98e 100644 --- a/common/modules/contexts.jsm +++ b/common/modules/contexts.jsm @@ -47,11 +47,13 @@ var Group = Class("Group", { get builtin() this.modules.contexts.builtinGroups.indexOf(this) >= 0, }, { - compileFilter: function (patterns) { + compileFilter: function (patterns, default_) { + if (arguments.length < 2) + default_ = false; function siteFilter(uri) let (match = array.nth(siteFilter.filters, function (f) f(uri), 0)) - match && match.result; + match ? match.result : default_; return update(siteFilter, { toString: function () this.filters.join(","), diff --git a/common/modules/overlay.jsm b/common/modules/overlay.jsm index 4428690f..518dbc29 100644 --- a/common/modules/overlay.jsm +++ b/common/modules/overlay.jsm @@ -166,6 +166,7 @@ var Overlay = Module("Overlay", { "options", "overlay", "prefs", + "sanitizer", "services", "storage", "styles", @@ -276,7 +277,7 @@ var Overlay = Module("Overlay", { modules.config.scripts.forEach(modules.load); frobModules(); - defineModule.modules.forEach(function ({ lazyInit, constructor: { className } }) { + defineModule.modules.forEach(function defModule({ lazyInit, constructor: { className } }) { if (!lazyInit) { frob(className); modules[className] = modules[className]; diff --git a/melodactyl/chrome.manifest b/melodactyl/chrome.manifest index 71f4cf77..40321439 100644..120000 --- a/melodactyl/chrome.manifest +++ b/melodactyl/chrome.manifest @@ -1,36 +1 @@ -# Songbird -content melodactyl content/ -skin melodactyl classic/1.0 skin/ -locale melodactyl en-US locale/en-US/ -locale dactyl en-US ../common/locale/en-US/ - -content dactyl ../common/content/ -resource dactyl ../common/modules/ -skin dactyl classic/1.0 ../common/skin/ - -override chrome://dactyl/content/dactyl.dtd chrome://melodactyl/content/dactyl.dtd - -overlay chrome://songbird/content/xul/layoutBaseOverlay.xul chrome://melodactyl/content/melodactyl.xul -overlay chrome://songbird/content/xul/layoutBaseOverlay.xul chrome://dactyl/content/dactyl.xul - -#component {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} components/commandline-handler.js -#contract @mozilla.org/commandlinehandler/general-startup;1?type=dactyl {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} -#category command-line-handler m-dactyl @mozilla.org/commandlinehandler/general-startup;1?type=dactyl -# -#component {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} components/protocols.js -#contract @mozilla.org/network/protocol;1?name=chrome-data {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} -#component {9c8f2530-51c8-4d41-b356-319e0b155c44} components/protocols.js -#contract @mozilla.org/network/protocol;1?name=dactyl {9c8f2530-51c8-4d41-b356-319e0b155c44} -#component {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} components/protocols.js -#contract @dactyl.googlecode.com/base/xpc-interface-shim {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} -#component {81495d80-89ee-4c36-a88d-ea7c4e5ac63f} components/protocols.js -#contract @mozilla.org/network/protocol/about;1?what=melodactyl {81495d80-89ee-4c36-a88d-ea7c4e5ac63f} - -#overlay chrome://songbird/content/xul/layoutWithBrowserOverlay.xul chrome://melodactyl/content/melodactyl.xul -#overlay chrome://songbird/content/xul/layoutWithBrowserOverlay.xul chrome://dactyl/content/dactyl.xul - -#overlay chrome://songbird/content/xul/layoutWithoutBrowserOverlay.xul chrome://melodactyl/content/melodactyl.xul -#overlay chrome://songbird/content/xul/layoutWithoutBrowserOverlay.xul chrome://dactyl/content/dactyl.xul - -#overlay windowtype:Songbird:Main chrome://dactyl/content/dactyl.xul -#overlay windowtype:Songbird:Main chrome://melodactyl/content/melodactyl.xul +../common/chrome.manifest
\ No newline at end of file diff --git a/melodactyl/content/config.js b/melodactyl/content/config.js index 10b77de5..7614bda9 100644 --- a/melodactyl/content/config.js +++ b/melodactyl/content/config.js @@ -10,20 +10,134 @@ Components.utils.import("resource://gre/modules/utils.js"); // XXX: PlacesUtils const Config = Module("config", ConfigBase, { - init: function init() { - init.supercall(this); + name: "melodactyl", + appName: "Melodactyl", + idName: "MELODACTYL", + host: "Songbird", + hostbin: "songbird", - // TODO: mention this to SB devs, they seem keen to provide these - // functions to make porting from FF as simple as possible. - window.toJavaScriptConsole = function () { - toOpenWindowByType("global:console", "chrome://global/content/console.xul"); - }; + commandContainer: "mainplayer", + + Local: function Local(dactyl, modules, window) let ({ config } = modules, { document } = window) { + init: function init() { + init.supercall(this); + + // TODO: mention this to SB devs, they seem keen to provide these + // functions to make porting from FF as simple as possible. + window.toJavaScriptConsole = function () { + toOpenWindowByType("global:console", "chrome://global/content/console.xul"); + }; + }, + + // FIXME: unless I'm seeing double in in the wee small hours gBrowser is + // first set from getBrowser which they've deprecated in FF. + get browser() window.getBrowser(), + get tabbrowser() window.getBrowser(), + + dialogs: { + about: ["About Songbird", + function () { window.openDialog("chrome://songbird/content/xul/about.xul", "_blank", "chrome,dialog,modal,centerscreen"); }], + addons: ["Manage Add-ons", + function () { window.SBOpenPreferences("paneAddons"); }], + checkupdates: ["Check for updates", + function () { window.checkForUpdates(); }], + cookies: ["List your cookies", + function () { window.toOpenWindowByType("Browser:Cookies", "chrome://browser/content/preferences/cookies.xul", "chrome,dialog=no,resizable"); }], + console: ["JavaScript console", + function () { window.toJavaScriptConsole(); }], + dominspector: ["DOM Inspector", + function () { window.inspectDOMDocument(window.content.document); }, + function () "inspectDOMDocument" in window], + downloads: ["Manage Downloads", + function () { window.toOpenWindowByType("Download:Manager", "chrome://mozapps/content/downloads/downloads.xul", "chrome,dialog=no,resizable"); }], + newsmartplaylist: ["Open the file selector dialog", + function () { window.SBNewSmartPlaylist(); }], + openfile: ["Open the file selector dialog", + function () { window.SBFileOpen(); }], + pagesource: ["View page source", + function () { window.BrowserViewSourceOfDocument(window.content.document); }], + preferences: ["Show Songbird preferences dialog", + function () { window.openPreferences(); }], + printsetup: ["Setup the page size and orientation before printing", + function () { window.PrintUtils.showPageSetup(); }], + print: ["Show print dialog", + function () { window.PrintUtils.print(); }], + saveframe: ["Save frame to disk", + function () { window.saveFrameDocument(); }], + savepage: ["Save page to disk", + function () { window.saveDocument(window.content.document); }], + searchengines: ["Manage installed search engines", + function () { window.openDialog("chrome://browser/content/search/engineManager.xul", "_blank", "chrome,dialog,modal,centerscreen"); }], + selectionsource: ["View selection source", + function () { modules.buffer.viewSelectionSource(); }], + subscribe: ["Add a new subscription", + function () { window.SBSubscribe(); }] + }, + + // TODO: clean this up + focusChange: function (win) { + const { modes } = modules; + + // Switch to -- PLAYER -- mode for Songbird Media Player. + if (this.isPlayerWindow) + modes.set(modes.PLAYER); + else + if (modes.main == modes.PLAYER) + modes.pop(); + }, + + get isPlayerWindow() SBGetBrowser().mCurrentTab == SBGetBrowser().mediaTab, + + /** + * Shows or hides the main service pane. + * + * @param {boolean} value Show the service pane if true, hide it if false. + */ + showServicePane: function (value) { + const key = "splitter.servicepane_splitter.was_collapsed"; + window.gServicePane.open = value; + window.SBDataSetBoolValue(key, window.gServicePane.open); + }, + + /** + * Opens the display panel with the specified *id*. + * + * @param {string} id The ID of the display pane. + */ + openDisplayPane: function (id) { + if (id == "servicepane") + this.showServicePane(true); + else { + let pane = document.getElementById(id); + let manager = services.displayPaneManager; + let paneinfo = manager.getPaneInfo(pane._lastURL.stringValue); + + if (!paneinfo) + paneinfo = manager.defaultPaneInfo; + + pane.loadContent(paneinfo); + } + }, + + /** + * Closes the display panel with the specified *id* + * + * @param {string} id The ID of the display pane. + */ + closeDisplayPane: function (id) { + if (id == "servicepane") + this.showServicePane(false); + else + document.getElementById(id).hide(); + } }, + /*** optional options, there are checked for existence and a fallback provided ***/ - features: ["bookmarks", "hints", "marks", "history", "quickmarks", "session", "tabs", "player"], + features: set(["bookmarks", "hints", "marks", "history", "quickmarks", "session", "tabs", "player"]), + defaults: { - guioptions: "smprb", + guioptions: "bCmprs", showtabline: 2, get titlestring() config.name }, @@ -34,9 +148,7 @@ const Config = Module("config", ConfigBase, { p: ["Player controls", ["player_wrapper"]] }, - get isPlayerWindow() SBGetBrowser().mCurrentTab == SBGetBrowser().mediaTab, - // focusContent() focuses this widget gSongbirdWindowController takes care of the focus. - get visualbellWindow() document.getElementById(this.mainWindowId), + overlayChrome: ["chrome://purplerain/content/xul/mainplayer.xul"], styleableChrome: ["chrome://purplerain/content/xul/mainplayer.xul"], @@ -71,64 +183,7 @@ const Config = Module("config", ConfigBase, { song: "song" }, this.__proto__.completers)), - dialogs: { - about: ["About Songbird", - function () { window.openDialog("chrome://songbird/content/xul/about.xul", "_blank", "chrome,dialog,modal,centerscreen"); }], - addons: ["Manage Add-ons", - function () { SBOpenPreferences("paneAddons"); }], - checkupdates: ["Check for updates", - function () { window.checkForUpdates(); }], - cleardata: ["Clear private data", - function () { Sanitizer.showUI(); }], - cookies: ["List your cookies", - function () { window.toOpenWindowByType("Browser:Cookies", "chrome://browser/content/preferences/cookies.xul", "chrome,dialog=no,resizable"); }], - console: ["JavaScript console", - function () { window.toJavaScriptConsole(); }], - dominspector: ["DOM Inspector", - function () { try { window.inspectDOMDocument(content.document); } catch (e) { dactyl.echoerr("DOM Inspector extension not installed"); } }], - downloads: ["Manage Downloads", - function () { window.toOpenWindowByType("Download:Manager", "chrome://mozapps/content/downloads/downloads.xul", "chrome,dialog=no,resizable"); }], - newsmartplaylist: ["Open the file selector dialog", - function () { SBNewSmartPlaylist(); }], - openfile: ["Open the file selector dialog", - function () { SBFileOpen(); }], - pagesource: ["View page source", - function () { window.BrowserViewSourceOfDocument(content.document); }], - preferences: ["Show Songbird preferences dialog", - function () { window.openPreferences(); }], - printsetup: ["Setup the page size and orientation before printing", - function () { PrintUtils.showPageSetup(); }], - print: ["Show print dialog", - function () { PrintUtils.print(); }], - saveframe: ["Save frame to disk", - function () { window.saveFrameDocument(); }], - savepage: ["Save page to disk", - function () { window.saveDocument(window.content.document); }], - searchengines: ["Manage installed search engines", - function () { window.openDialog("chrome://browser/content/search/engineManager.xul", "_blank", "chrome,dialog,modal,centerscreen"); }], - selectionsource: ["View selection source", - function () { buffer.viewSelectionSource(); }], - subscribe: ["Add a new subscription", - function () { SBSubscribe(); }] - }, - - // TODO: clean this up - focusChange: function (win) { - // Switch to -- PLAYER -- mode for Songbird Media Player. - if (config.isPlayerWindow) - modes.set(modes.PLAYER); - else - if (modes.main == modes.PLAYER) - modes.pop(); - }, - hasTabbrowser: true, - // FIXME: unless I'm seeing double in in the wee small hours gBrowser is - // first set from getBrowser which they've deprecated in FF. - get tabbrowser() window.getBrowser(), - get browser() window.getBrowser(), - - modes: [["PLAYER", { char: "p" }]], removeTab: function (tab) { if (config.tabbrowser.mTabs.length > 1) @@ -153,55 +208,18 @@ const Config = Module("config", ConfigBase, { "library" ], + sidebars: { + viewAddons: ["Add-ons", "A", "chrome://mozapps/content/extensions/extensions.xul"], + viewConsole: ["Console", "C", "chrome://global/content/console.xul"], + viewDownloads: ["Downloads", "D", "chrome://mozapps/content/downloads/downloads.xul"], + viewPreferences: ["Preferences", "P", "about:config"] + }, + // FIXME: tab arg and media tab exception? stop: function (tab) { SBGetBrowser().mCurrentBrowser.stop(); } }, { - - /** - * Shows or hides the main service pane. - * - * @param {boolean} value Show the service pane if true, hide it if false. - */ - showServicePane: function (value) { - const key = "splitter.servicepane_splitter.was_collapsed"; - gServicePane.open = value; - SBDataSetBoolValue(key, gServicePane.open); - }, - - /** - * Opens the display panel with the specified *id*. - * - * @param {string} id The ID of the display pane. - */ - openDisplayPane: function (id) { - if (id == "servicepane") - this.showServicePane(true); - else { - let pane = document.getElementById(id); - let manager = services.displayPaneManager; - let paneinfo = manager.getPaneInfo(pane._lastURL.stringValue); - - if (!paneinfo) - paneinfo = manager.defaultPaneInfo; - - pane.loadContent(paneinfo); - } - }, - - /** - * Closes the display panel with the specified *id* - * - * @param {string} id The ID of the display pane. - */ - closeDisplayPane: function (id) { - if (id == "servicepane") - this.showServicePane(false); - else - document.getElementById(id).hide(); - }, - /** * @property {object} A map of display pane command argument strings to * panel element IDs. @@ -213,13 +231,15 @@ const Config = Module("config", ConfigBase, { "rightsidebar" : "displaypane_right_sidebar" } }, { - commands: function () { + commands: function initCommands(dactyl, modules, window) { + const { commands, completion, options } = modules; + commands.add(["dpcl[ose]"], "Close a display pane", function (args) { let arg = args.literalArg; dactyl.assert(arg in Config.displayPanes, "E475: Invalid argument: " + arg); - Config.closeDisplayPane(Config.displayPanes[arg]); + config.closeDisplayPane(Config.displayPanes[arg]); }, { argCount: "1", @@ -234,7 +254,7 @@ const Config = Module("config", ConfigBase, { let arg = args.literalArg; dactyl.assert(arg in Config.displayPanes, "E475: Invalid argument: " + arg); // TODO: focus when we have better key handling of these extended modes - Config.openDisplayPane(Config.displayPanes[arg]); + config.openDisplayPane(Config.displayPanes[arg]); }, { argCount: "1", @@ -258,22 +278,31 @@ const Config = Module("config", ConfigBase, { bang: true }); }, - completion: function () { + completion: function initCompletion(dactyl, modules, window) { + const completion = require("completion"); + completion.displayPane = function (context) { context.title = ["Display Pane"]; context.completions = Config.displayPanes; // FIXME: useful description etc }; }, - modes: function () { + modes: function initModes(dactyl, modules, window) { + const { modes } = modules; + this.ignoreKeys = { "<Return>": modes.NORMAL | modes.INSERT, "<Space>": modes.NORMAL | modes.INSERT, "<Up>": modes.NORMAL | modes.INSERT, "<Down>": modes.NORMAL | modes.INSERT }; - config.modes.forEach(function (mode) { modes.addMode.apply(modes, mode); }); // XXX + + modes.addMode("PLAYER", { + char: "p" + }); }, - options: function () { + options: function initOptions(dactyl, modules, window) { + const { options } = modules; + // TODO: SB doesn't explicitly support an offline mode. Should we? --djk options.add(["online"], "Set the 'work offline' option", @@ -288,12 +317,13 @@ const Config = Module("config", ConfigBase, { getter: function () !services.io.offline }); }, - services: function () { - services.add("displayPaneManager", "@songbirdnest.com/Songbird/DisplayPane/Manager;1", Ci.sbIDisplayPaneManager); - services.add("mediaPageManager", "@songbirdnest.com/Songbird/MediaPageManager;1", Ci.sbIMediaPageManager); - services.add("propertyManager","@songbirdnest.com/Songbird/Properties/PropertyManager;1", Ci.sbIPropertyManager); + services: function initServices(dactyl, modules, window) { + services.add("displayPaneManager", "@songbirdnest.com/Songbird/DisplayPane/Manager;1", Ci.sbIDisplayPaneManager); + services.add("mediaPageManager", "@songbirdnest.com/Songbird/MediaPageManager;1", Ci.sbIMediaPageManager); + services.add("propertyManager", "@songbirdnest.com/Songbird/Properties/PropertyManager;1", Ci.sbIPropertyManager); + services.addClass("mutablePropertyArray", "@songbirdnest.com/Songbird/Properties/MutablePropertyArray;1", - Ci.sbIMutablePropertyArray); + Ci.sbIMutablePropertyArray); } }); diff --git a/melodactyl/content/melodactyl.xul b/melodactyl/content/melodactyl.xul deleted file mode 100644 index 44100c63..00000000 --- a/melodactyl/content/melodactyl.xul +++ /dev/null @@ -1,52 +0,0 @@ -<?xml version="1.0"?> - -<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?> -<?xml-stylesheet href="chrome://melodactyl/skin/melodactyl.css" type="text/css"?> - -<overlay id="melodactyl" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:nc="http://home.netscape.com/NC-rdf#" - xmlns:html="http://www.w3.org/1999/xhtml" - xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> - - <menupopup id="viewSidebarMenu"> - <menuitem observes="melodactyl-viewAddonsSidebar" label="Add-ons" accesskey="A"/> - <menuitem observes="melodactyl-viewConsoleSidebar" label="Console" accesskey="C"/> - <menuitem observes="melodactyl-viewDownloadsSidebar" label="Downloads" accesskey="D"/> - <menuitem observes="melodactyl-viewPreferencesSidebar" label="Preferences" accesskey="P"/> - </menupopup> - - <broadcasterset id="mainBroadcasterSet"> - <broadcaster id="melodactyl-viewAddonsSidebar" - autoCheck="false" - type="checkbox" - group="sidebar" - sidebarurl="chrome://mozapps/content/extensions/extensions.xul" - sidebartitle="Add-ons" - oncommand="toggleSidebar('melodactyl-viewAddonsSidebar');"/> - <broadcaster id="melodactyl-viewConsoleSidebar" - autoCheck="false" - type="checkbox" - group="sidebar" - sidebarurl="chrome://global/content/console.xul" - sidebartitle="Console" - oncommand="toggleSidebar('melodactyl-viewConsoleSidebar');"/> - <broadcaster id="melodactyl-viewDownloadsSidebar" - autoCheck="false" - type="checkbox" - group="sidebar" - sidebarurl="chrome://mozapps/content/downloads/downloads.xul" - sidebartitle="Downloads" - oncommand="toggleSidebar('melodactyl-viewDownloadsSidebar');"/> - <broadcaster id="melodactyl-viewPreferencesSidebar" - autoCheck="false" - type="checkbox" - group="sidebar" - sidebarurl="about:config" - sidebartitle="Preferences" - oncommand="toggleSidebar('melodactyl-viewPreferencesSidebar');"/> - </broadcasterset> - -</overlay> - -<!-- vim: set fdm=marker sw=4 ts=4 et: --> diff --git a/melodactyl/content/player.js b/melodactyl/content/player.js index 89f7c2ee..009d5b41 100644 --- a/melodactyl/content/player.js +++ b/melodactyl/content/player.js @@ -440,10 +440,36 @@ const Player = Module("player", { } }, { }, { + modes: function initModes(dactyl, modules, window) { + modes.addMode("SEARCH_VIEW", { + description: "Search View mode", + bases: [modes.COMMAND_LINE], + }); + modes.addMode("SEARCH_VIEW_FORWARD", { + description: "Forward Search View mode", + bases: [modes.SEARCH_VIEW] + }); + modes.addMode("SEARCH_VIEW_BACKWARD", { + description: "Backward Search View mode", + bases: [modes.SEARCH_VIEW] + }); + + }, commandline: function () { - commandline.registerCallback("change", modes.SEARCH_VIEW_FORWARD, this.closure.onSearchKeyPress); - commandline.registerCallback("submit", modes.SEARCH_VIEW_FORWARD, this.closure.onSearchSubmit); - commandline.registerCallback("cancel", modes.SEARCH_VIEW_FORWARD, this.closure.onSearchCancel); + player.CommandMode = Class("CommandSearchViewMode", modules.CommandMode, { + init: function init(mode) { + this.mode = mode; + init.supercall(this); + }, + + historyKey: "search-view", + + get prompt() this.mode === modules.modes.SEARCH_VIEW_BACKWARD ? "?" : "/", + + get onCancel() player.closure.onSearchCancel, + get onChange() player.closure.onSearchKeyPress, + get onSubmit() player.closure.onSearchSubmit + }); }, commands: function () { commands.add(["f[ilter]"], @@ -754,7 +780,7 @@ const Player = Module("player", { mappings.add([modes.PLAYER], ["/"], "Search forward for a track", - function () { commandline.open("/", "", modes.SEARCH_VIEW_FORWARD); }); + function () { player.CommandMode(modes.SEARCH_VIEW_FORWARD).open(); }); mappings.add([modes.PLAYER], ["n"], "Find the next track", diff --git a/pentadactyl/chrome.manifest b/pentadactyl/chrome.manifest index 4995b0e8..40321439 100644..120000 --- a/pentadactyl/chrome.manifest +++ b/pentadactyl/chrome.manifest @@ -1,22 +1 @@ -resource dactyl-local-content content/ -resource dactyl-local-skin skin/ -resource dactyl-local-locale locale/ - -resource dactyl ../common/modules/ -resource dactyl-content ../common/content/ -resource dactyl-skin ../common/skin/ -resource dactyl-locale ../common/locale/ - -content dactyl ../common/content/ - -component {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} components/commandline-handler.js -contract @mozilla.org/commandlinehandler/general-startup;1?type=dactyl {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} -category command-line-handler m-dactyl @mozilla.org/commandlinehandler/general-startup;1?type=dactyl - -component {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} components/protocols.js -contract @mozilla.org/network/protocol;1?name=chrome-data {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} -component {9c8f2530-51c8-4d41-b356-319e0b155c44} components/protocols.js -contract @mozilla.org/network/protocol;1?name=dactyl {9c8f2530-51c8-4d41-b356-319e0b155c44} -component {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} components/protocols.js -contract @dactyl.googlecode.com/base/xpc-interface-shim {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} - +../common/chrome.manifest
\ No newline at end of file diff --git a/pentadactyl/content/config.js b/pentadactyl/content/config.js index bd4768a8..749d34d9 100644 --- a/pentadactyl/content/config.js +++ b/pentadactyl/content/config.js @@ -32,8 +32,6 @@ var Config = Module("config", ConfigBase, { checkupdates: ["Check for updates", function () { window.checkForUpdates(); }, function () "checkForUpdates" in window], - cleardata: ["Clear private data", - function () { Cc["@mozilla.org/browser/browserglue;1"].getService(Ci.nsIBrowserGlue).sanitize(window || null); }], cookies: ["List your cookies", function () { window.toOpenWindowByType("Browser:Cookies", "chrome://browser/content/preferences/cookies.xul", "chrome,dialog=no,resizable"); }], console: ["JavaScript console", @@ -80,8 +78,6 @@ var Config = Module("config", ConfigBase, { function () "start_venkman" in window] }, - get visualbellWindow() this.browser.mPanelContainer, - removeTab: function removeTab(tab) { if (this.tabbrowser.mTabs.length > 1) this.tabbrowser.removeTab(tab); diff --git a/teledactyl/chrome.manifest b/teledactyl/chrome.manifest index 4995b0e8..40321439 100644..120000 --- a/teledactyl/chrome.manifest +++ b/teledactyl/chrome.manifest @@ -1,22 +1 @@ -resource dactyl-local-content content/ -resource dactyl-local-skin skin/ -resource dactyl-local-locale locale/ - -resource dactyl ../common/modules/ -resource dactyl-content ../common/content/ -resource dactyl-skin ../common/skin/ -resource dactyl-locale ../common/locale/ - -content dactyl ../common/content/ - -component {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} components/commandline-handler.js -contract @mozilla.org/commandlinehandler/general-startup;1?type=dactyl {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} -category command-line-handler m-dactyl @mozilla.org/commandlinehandler/general-startup;1?type=dactyl - -component {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} components/protocols.js -contract @mozilla.org/network/protocol;1?name=chrome-data {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} -component {9c8f2530-51c8-4d41-b356-319e0b155c44} components/protocols.js -contract @mozilla.org/network/protocol;1?name=dactyl {9c8f2530-51c8-4d41-b356-319e0b155c44} -component {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} components/protocols.js -contract @dactyl.googlecode.com/base/xpc-interface-shim {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} - +../common/chrome.manifest
\ No newline at end of file diff --git a/teledactyl/content/teledactyl.xul b/teledactyl/content/teledactyl.xul deleted file mode 100644 index dff68d5a..00000000 --- a/teledactyl/content/teledactyl.xul +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0"?> - -<!-- ***** BEGIN LICENSE BLOCK ***** {{{ - Copyright (c) 2006-2009 by Martin Stubenschrott <stubenschrott@vimperator.org> - - This work is licensed for reuse under an MIT license. Details are - given in the LICENSE.txt file included with this file. -}}} ***** END LICENSE BLOCK ***** --> - -<!--?xml-stylesheet href="chrome://browser/skin/" type="text/css"?--> - -<overlay id="teledactyl" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:nc="http://home.netscape.com/NC-rdf#" - xmlns:html="http://www.w3.org/1999/xhtml" - xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> - -</overlay> - -<!-- vim: set fdm=marker sw=4 ts=4 et: --> |