From bf8529d97578b432538ee0cff4c33900f671a06c Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Fri, 17 Jul 2009 23:01:16 +1000 Subject: [PATCH] Bump {max,min}version requirements for Muttator. --- common/content/tabs.js | 22 +- muttator/content/config.js | 440 ++++++++++++++++++++----------------- muttator/install.rdf | 4 +- 3 files changed, 237 insertions(+), 229 deletions(-) diff --git a/common/content/tabs.js b/common/content/tabs.js index 4a4de4e0..4121c869 100644 --- a/common/content/tabs.js +++ b/common/content/tabs.js @@ -39,27 +39,7 @@ function Tabs() //{{{ ////////////////////// PRIVATE SECTION ///////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////{{{ - var tabmail; - // FIXME: doesn't belong here - var getBrowser = (function () { - if (config.hostApplication == "Thunderbird") - { - return function () { - if (!tabmail) - { - tabmail = document.getElementById("tabmail"); - tabmail.__defineGetter__("mTabContainer", function () this.tabContainer); - tabmail.__defineGetter__("mTabs", function () this.tabContainer.childNodes); - tabmail.__defineGetter__("mCurrentTab", function () this.tabContainer.selectedItem); - tabmail.__defineGetter__("mStrip", function () this.tabStrip); - tabmail.__defineGetter__("browsers", function () [browser for (browser in Iterator(this.mTabs))]); - } - return tabmail; - }; - } - else - return window.getBrowser; - })(); + var getBrowser = config.getBrowser || window.getBrowser; var alternates = [getBrowser().mCurrentTab, null]; diff --git a/muttator/content/config.js b/muttator/content/config.js index 04e9f1a4..cc911a37 100644 --- a/muttator/content/config.js +++ b/muttator/content/config.js @@ -26,220 +26,248 @@ the provisions above, a recipient may use your version of this file under the terms of any one of the MPL, the GPL or the LGPL. }}} ***** END LICENSE BLOCK *****/ -const config = { //{{{ - /*** required options, no checks done if they really exist, so be careful ***/ - name: "Muttator", - hostApplication: "Thunderbird", // TODO: can this be found out otherwise? gBrandBundle.getString("brandShortName"); - // Yes, but it will be localized unlike all other strings. So, it's best left until we i18n liberator. --djk - get mainWindowID() this.isComposeWindow ? "msgcomposeWindow" : "messengerWindow", +const config = (function () //{{{ +{ + //////////////////////////////////////////////////////////////////////////////// + ////////////////////// PRIVATE SECTION ///////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////{{{ - /*** optional options, there are checked for existence and a fallback provided ***/ - features: ["hints", "mail", "marks", "addressbook", "tabs"], - defaults: { - guioptions: "frb", - showtabline: 1, - titlestring: "Muttator" - }, + var name = "Muttator"; + var host = "Thunderbird"; + var tabmail; - guioptions: { - m: ["MenuBar", ["mail-toolbar-menubar2"]], - T: ["Toolbar" , ["mail-bar2"]], - f: ["Folder list", ["folderPaneBox", "folderpane_splitter"]], - F: ["Folder list header", ["folderPaneHeader"]] - }, + /////////////////////////////////////////////////////////////////////////////}}} + ////////////////////// PUBLIC SECTION ////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////{{{ - get isComposeWindow() window.wintype == "msgcompose", - get browserModes() [modes.MESSAGE], - get mailModes() [modes.NORMAL], - // focusContent() focuses this widget - get mainWidget() this.isComposeWindow ? document.getElementById("content-frame") : GetThreadTree(), - get visualbellWindow() document.getElementById(this.mainWindowID), - styleableChrome: "chrome://messenger/content/messenger.xul,chrome://messenger/content/messengercompose/messengercompose.xul", + return { + /*** required options, no checks done if they really exist, so be careful ***/ + name: name, + hostApplication: host, // TODO: can this be found out otherwise? gBrandBundle.getString("brandShortName"); + // Yes, but it will be localized unlike all other strings. So, it's best left until we i18n liberator. --djk + get mainWindowID() this.isComposeWindow ? "msgcomposeWindow" : "messengerWindow", - autocommands: [["DOMLoad", "Triggered when a page's DOM content has fully loaded"], - ["FolderLoad", "Triggered after switching folders in Thunderbird"], - ["PageLoadPre", "Triggered after a page load is initiated"], - ["PageLoad", "Triggered when a page gets (re)loaded/opened"], - ["MuttatorEnter", "Triggered after Thunderbird starts"], - ["MuttatorLeave", "Triggered before exiting Thunderbird"], - ["MuttatorLeavePre", "Triggered before exiting Thunderbird"]], + /*** optional options, there are checked for existence and a fallback provided ***/ + features: ["hints", "mail", "marks", "addressbook", "tabs"], + defaults: { + guioptions: "frb", + showtabline: 1, + titlestring: name + }, - dialogs: [ - ["about", "About Thunderbird", - function () { window.openAboutDialog(); }], - ["addons", "Manage Add-ons", - function () { window.openAddonsMgr(); }], - ["addressbook", "Address book", - function () { window.toAddressBook(); }], - ["checkupdates", "Check for updates", - function () { window.checkForUpdates(); }], - /*["cleardata", "Clear private data", - function () { Cc[GLUE_CID].getService(Ci.nsIBrowserGlue).sanitize(window || null); }],*/ - ["console", "JavaScript console", - function () { window.toJavaScriptConsole(); }], - /*["customizetoolbar", "Customize the Toolbar", - function () { BrowserCustomizeToolbar(); }],*/ - ["dominspector", "DOM Inspector", - function () { window.inspectDOMDocument(content.document); }], - ["downloads", "Manage Downloads", - function () { window.toOpenWindowByType('Download:Manager', 'chrome://mozapps/content/downloads/downloads.xul', 'chrome,dialog=no,resizable'); }], - /*["import", "Import Preferences, Bookmarks, History, etc. from other browsers", - function () { BrowserImport(); }], - ["openfile", "Open the file selector dialog", - function () { BrowserOpenFileWindow(); }], - ["pageinfo", "Show information about the current page", - function () { BrowserPageInfo(); }], - ["pagesource", "View page source", - function () { BrowserViewSourceOfDocument(content.document); }],*/ - ["preferences", "Show Thunderbird preferences dialog", - function () { openOptionsDialog(); }], - /*["printpreview", "Preview the page before printing", - function () { PrintUtils.printPreview(onEnterPrintPreview, onExitPrintPreview); }],*/ - ["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 () { openDialog("chrome://browser/content/search/engineManager.xul", "_blank", "chrome,dialog,modal,centerscreen"); }], - ["selectionsource", "View selection source", - function () { buffer.viewSelectionSource(); }]*/ - ], + guioptions: { + m: ["MenuBar", ["mail-toolbar-menubar2"]], + T: ["Toolbar" , ["mail-bar2"]], + f: ["Folder list", ["folderPaneBox", "folderpane_splitter"]], + F: ["Folder list header", ["folderPaneHeader"]] + }, - focusChange: function (win) - { - // we switch to -- MESSAGE -- mode for Muttator, when the main HTML widget gets focus - if (win && win.document instanceof HTMLDocument || liberator.focus instanceof HTMLAnchorElement) + get isComposeWindow() window.wintype == "msgcompose", + get browserModes() [modes.MESSAGE], + get mailModes() [modes.NORMAL], + // focusContent() focuses this widget + get mainWidget() this.isComposeWindow ? document.getElementById("content-frame") : GetThreadTree(), + get visualbellWindow() document.getElementById(this.mainWindowID), + styleableChrome: "chrome://messenger/content/messenger.xul,chrome://messenger/content/messengercompose/messengercompose.xul", + + autocommands: [["DOMLoad", "Triggered when a page's DOM content has fully loaded"], + ["FolderLoad", "Triggered after switching folders in " + host], + ["PageLoadPre", "Triggered after a page load is initiated"], + ["PageLoad", "Triggered when a page gets (re)loaded/opened"], + [name + "Enter", "Triggered after " + host + " starts"], + [name + "Leave", "Triggered before exiting " + host], + [name + "LeavePre", "Triggered before exiting " + host]], + + dialogs: [ + ["about", "About " + host, + function () { window.openAboutDialog(); }], + ["addons", "Manage Add-ons", + function () { window.openAddonsMgr(); }], + ["addressbook", "Address book", + function () { window.toAddressBook(); }], + ["checkupdates", "Check for updates", + function () { window.checkForUpdates(); }], + /*["cleardata", "Clear private data", + function () { Cc[GLUE_CID].getService(Ci.nsIBrowserGlue).sanitize(window || null); }],*/ + ["console", "JavaScript console", + function () { window.toJavaScriptConsole(); }], + /*["customizetoolbar", "Customize the Toolbar", + function () { BrowserCustomizeToolbar(); }],*/ + ["dominspector", "DOM Inspector", + function () { window.inspectDOMDocument(content.document); }], + ["downloads", "Manage Downloads", + function () { window.toOpenWindowByType('Download:Manager', 'chrome://mozapps/content/downloads/downloads.xul', 'chrome,dialog=no,resizable'); }], + /*["import", "Import Preferences, Bookmarks, History, etc. from other browsers", + function () { BrowserImport(); }], + ["openfile", "Open the file selector dialog", + function () { BrowserOpenFileWindow(); }], + ["pageinfo", "Show information about the current page", + function () { BrowserPageInfo(); }], + ["pagesource", "View page source", + function () { BrowserViewSourceOfDocument(content.document); }],*/ + ["preferences", "Show " + host + " preferences dialog", + function () { openOptionsDialog(); }], + /*["printpreview", "Preview the page before printing", + function () { PrintUtils.printPreview(onEnterPrintPreview, onExitPrintPreview); }],*/ + ["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 () { openDialog("chrome://browser/content/search/engineManager.xul", "_blank", "chrome,dialog,modal,centerscreen"); }], + ["selectionsource", "View selection source", + function () { buffer.viewSelectionSource(); }]*/ + ], + + focusChange: function (win) { - if (config.isComposeWindow) - modes.set(modes.INSERT, modes.TEXTAREA); - else if (liberator.mode != modes.MESSAGE) - liberator.mode = modes.MESSAGE; - } - }, - - // they are sorted by relevance, not alphabetically - helpFiles: ["intro.html", "version.html"], - - get ignoreKeys() { - delete this.ignoreKeys; - return this.ignoreKeys = { - "": modes.NORMAL | modes.INSERT, - "": modes.NORMAL | modes.INSERT, - "": modes.NORMAL | modes.INSERT, - "": modes.NORMAL | modes.INSERT - } - }, - - modes: [ - ["MESSAGE", { char: "m" }], - ["COMPOSE"] - ], - - // NOTE: as I don't use TB I have no idea how robust this is. --djk - get outputHeight() - { - if (!this.isComposeWindow) - { - let container = document.getElementById("tabpanelcontainer").boxObject; - let deck = document.getElementById("displayDeck"); - let box = document.getElementById("messagepanebox"); - let splitter = document.getElementById("threadpane-splitter").boxObject; - - if (splitter.width > splitter.height) - return container.height - deck.minHeight - box.minHeight- splitter.height; - else - return container.height - Math.max(deck.minHeight, box.minHeight); - } - else - return document.getElementById("appcontent").boxObject.height; - }, - - scripts: [ - "addressbook.js", - "compose/compose.js", - "mail.js", - "tabs.js" - ], - - // to allow Vim to :set ft=mail automatically - tempFile: "mutt-ator-mail", - - init: function () - { - // don't wait too long when selecting new messages - // GetThreadTree()._selectDelay = 300; // TODO: make configurable - - // load Muttator specific modules - if (this.isComposeWindow) - // TODO: this should probably be "composer" - liberator.loadModule("compose", Compose); - else - { - liberator.loadModule("mail", Mail); - liberator.loadModule("addressbook", Addressbook); - liberator.loadModule("tabs", Tabs); - liberator.loadModule("marks", Marks); - liberator.loadModule("hints", Hints); - } - - //////////////////////////////////////////////////////////////////////////////// - ////////////////////// STYLES ////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////{{{ - - let img = Image(); - img.src = "chrome://muttator/content/logo.png"; - img.onload = function () { - styles.addSheet(true, "logo", "chrome://liberator/locale/*", - ".muttator-logo {" + <> - display: inline-block; - background: url({img.src}); - width: {img.width}px; - height: {img.height}px; - + "}", - true); - delete img; - }; - - /////////////////////////////////////////////////////////////////////////////}}} - ////////////////////// COMMANDS //////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////{{{ - - commands.add(["pref[erences]", "prefs"], - "Show " + config.hostApplication + " preferences", - function () { window.openOptionsDialog(); }, - { argCount: "0" }); - - /////////////////////////////////////////////////////////////////////////////}}} - ////////////////////// OPTIONS ///////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////{{{ - - // FIXME: comment obviously incorrect - // 0: never automatically edit externally - // 1: automatically edit externally when message window is shown the first time - // 2: automatically edit externally, once the message text gets focus (not working currently) - options.add(["autoexternal", "ae"], - "Edit message with external editor by default", - "boolean", false); - - options.add(["online"], - "Set the 'work offline' option", - "boolean", true, + // we switch to -- MESSAGE -- mode for Muttator, when the main HTML widget gets focus + if (win && win.document instanceof HTMLDocument || liberator.focus instanceof HTMLAnchorElement) { - setter: function (value) - { - if (MailOfflineMgr.isOnline() != value) - MailOfflineMgr.toggleOfflineStatus(); - return value; - }, - getter: function () MailOfflineMgr.isOnline() - }); + if (config.isComposeWindow) + modes.set(modes.INSERT, modes.TEXTAREA); + else if (liberator.mode != modes.MESSAGE) + liberator.mode = modes.MESSAGE; + } + }, - //}}} - } -}; //}}} + getBrowser: function () { + if (!tabmail) + { + tabmail = { __proto__: document.getElementById("tabmail") }; + tabmail.__defineGetter__("mTabContainer", function () this.tabContainer); + tabmail.__defineGetter__("mTabs", function () this.tabContainer.childNodes); + tabmail.__defineGetter__("mCurrentTab", function () this.tabContainer.selectedItem); + tabmail.__defineGetter__("mStrip", function () this.tabStrip); + tabmail.__defineGetter__("browsers", function () [browser for (browser in Iterator(this.mTabs))]); + } + return tabmail; + }, + + // they are sorted by relevance, not alphabetically + helpFiles: ["intro.html", "version.html"], + + get ignoreKeys() { + delete this.ignoreKeys; + return this.ignoreKeys = { + "": modes.NORMAL | modes.INSERT, + "": modes.NORMAL | modes.INSERT, + "": modes.NORMAL | modes.INSERT, + "": modes.NORMAL | modes.INSERT + } + }, + + modes: [ + ["MESSAGE", { char: "m" }], + ["COMPOSE"] + ], + + // NOTE: as I don't use TB I have no idea how robust this is. --djk + get outputHeight() + { + if (!this.isComposeWindow) + { + let container = document.getElementById("tabpanelcontainer").boxObject; + let deck = document.getElementById("displayDeck"); + let box = document.getElementById("messagepanebox"); + let splitter = document.getElementById("threadpane-splitter").boxObject; + + if (splitter.width > splitter.height) + return container.height - deck.minHeight - box.minHeight- splitter.height; + else + return container.height - Math.max(deck.minHeight, box.minHeight); + } + else + return document.getElementById("appcontent").boxObject.height; + }, + + scripts: [ + "addressbook.js", + "compose/compose.js", + "mail.js", + "tabs.js" + ], + + // to allow Vim to :set ft=mail automatically + tempFile: "mutt-ator-mail", + + init: function () + { + // don't wait too long when selecting new messages + // GetThreadTree()._selectDelay = 300; // TODO: make configurable + + // load Muttator specific modules + if (this.isComposeWindow) + // TODO: this should probably be "composer" + liberator.loadModule("compose", Compose); + else + { + liberator.loadModule("mail", Mail); + liberator.loadModule("addressbook", Addressbook); + liberator.loadModule("tabs", Tabs); + liberator.loadModule("marks", Marks); + liberator.loadModule("hints", Hints); + } + + //////////////////////////////////////////////////////////////////////////////// + ////////////////////// STYLES ////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////{{{ + + let img = Image(); + img.src = "chrome://muttator/content/logo.png"; + img.onload = function () { + styles.addSheet(true, "logo", "chrome://liberator/locale/*", + ".muttator-logo {" + <> + display: inline-block; + background: url({img.src}); + width: {img.width}px; + height: {img.height}px; + + "}", + true); + delete img; + }; + + /////////////////////////////////////////////////////////////////////////////}}} + ////////////////////// COMMANDS //////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////{{{ + + commands.add(["pref[erences]", "prefs"], + "Show " + config.hostApplication + " preferences", + function () { window.openOptionsDialog(); }, + { argCount: "0" }); + + /////////////////////////////////////////////////////////////////////////////}}} + ////////////////////// OPTIONS ///////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////{{{ + + // FIXME: comment obviously incorrect + // 0: never automatically edit externally + // 1: automatically edit externally when message window is shown the first time + // 2: automatically edit externally, once the message text gets focus (not working currently) + options.add(["autoexternal", "ae"], + "Edit message with external editor by default", + "boolean", false); + + options.add(["online"], + "Set the 'work offline' option", + "boolean", true, + { + setter: function (value) + { + if (MailOfflineMgr.isOnline() != value) + MailOfflineMgr.toggleOfflineStatus(); + return value; + }, + getter: function () MailOfflineMgr.isOnline() + }); + + //}}} + } + }; //}}} +})(); //}}} // vim: set fdm=marker sw=4 ts=4 et: diff --git a/muttator/install.rdf b/muttator/install.rdf index ae0e7b9f..d8e17438 100644 --- a/muttator/install.rdf +++ b/muttator/install.rdf @@ -18,8 +18,8 @@ {3550f703-e582-4d05-9a08-453d09bdfdc6} - 3.0b3pre - 3.0b3 + 3.0b4pre + 3.0b4