diff --git a/chrome.manifest b/chrome.manifest index 0d966d314..92368369e 100644 --- a/chrome.manifest +++ b/chrome.manifest @@ -6,10 +6,14 @@ content greasemonkey content/ skin greasemonkey classic/1.0 skin/ overlay chrome://browser/content/browser.xul chrome://greasemonkey/content/browser.xul +# SeaMonkey +overlay chrome://navigator/content/navigator.xul chrome://greasemonkey/content/browser.xul style chrome://global/content/customizeToolbar.xul chrome://greasemonkey/skin/browser.css content greasemonkey-modules modules/ overlay chrome://browser/content/browser.xul chrome://greasemonkey/content/addons4.xul +# SeaMonkey +overlay chrome://navigator/content/navigator.xul chrome://greasemonkey/content/addons4.xul overlay about:addons chrome://greasemonkey/content/addons4-overlay.xul overlay chrome://greasemonkey/content/install.xul chrome://greasemonkey/content/closewindow.xul @@ -17,5 +21,9 @@ overlay chrome://greasemonkey/content/options.xul chrome://greasemonkey/conte overlay chrome://greasemonkey/content/newscript.xul chrome://greasemonkey/content/closewindow.xul overlay chrome://browser/content/devtools/scratchpad.xul chrome://greasemonkey/content/scratchpad-overlay.xul appversion<44.0a1 overlay chrome://devtools/content/scratchpad/scratchpad.xul chrome://greasemonkey/content/scratchpad-overlay.xul appversion>=44.0a1 +# SeaMonkey +overlay chrome://devtools/content/scratchpad/scratchpad.xul chrome://greasemonkey/content/scratchpad-overlay.xul application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} +# PaleMoon +overlay chrome://global/content/devtools/scratchpad.xul chrome://greasemonkey/content/scratchpad-overlay.xul application={8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4} appversion>=27.0 locale greasemonkey en-US locale/en-US/ diff --git a/components/greasemonkey.js b/components/greasemonkey.js index 752a16c9c..0b1a82343 100644 --- a/components/greasemonkey.js +++ b/components/greasemonkey.js @@ -31,6 +31,9 @@ var gTmpDir = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("TmpD", Components.interfaces.nsIFile); +// PaleMoon +var _sm_pm_gPalemoonId = "{8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4}"; + /////////////////////// Component-global Helper Functions ////////////////////// function shutdown(aService) { @@ -73,6 +76,10 @@ function startup(aService) { 'greasemonkey:broadcast-script-updates', function (message) { return aService.broadcastScriptUpdates(); }); + // PaleMoon + if (Services.appinfo.ID == _sm_pm_gPalemoonId) { + parentMessageManager = globalMessageManager; + } parentMessageManager.addMessageListener( 'greasemonkey:script-install', aService.scriptInstall.bind(aService)); parentMessageManager.addMessageListener( @@ -222,7 +229,13 @@ service.prototype.handleScriptValMsg = function(aMessage) { }; service.prototype.scriptInstall = function(aMessage) { - GM_util.showInstallDialog(aMessage.data.url); + // PaleMoon + if (Services.appinfo.ID != _sm_pm_gPalemoonId) { + GM_util.showInstallDialog(aMessage.data.url); + } else { + GM_util.showInstallDialog( + aMessage.data.url, aMessage.target, aMessage.data.referer); + } }; service.prototype.urlIsTempFile = function(aMessage) { @@ -231,7 +244,13 @@ service.prototype.urlIsTempFile = function(aMessage) { } catch (e) { return false; } - return gTmpDir.contains(file); + // Firefox < 32 (i.e. PaleMoon) + // https://bugzilla.mozilla.org/show_bug.cgi?id=997141 + try { + return gTmpDir.contains(file); + } catch (e) { + return gTmpDir.contains(file, true); + } }; //////////////////////////// Component Registration //////////////////////////// diff --git a/content/addons4.xul b/content/addons4.xul index ecc540093..e92effbe7 100755 --- a/content/addons4.xul +++ b/content/addons4.xul @@ -12,12 +12,25 @@ addons.GM_addonsStartup(); // Open the scripts manager in Firefox >= 4.0 function GM_OpenScriptsMgr() { - BrowserOpenAddonsMgr('addons://list/greasemonkey-user-script'); + // SeaMonkey + var _sm_pm_browserWin = Services.wm.getMostRecentWindow("navigator:browser"); + if (_sm_pm_browserWin.BrowserOpenAddonsMgr) { + _sm_pm_browserWin + .BrowserOpenAddonsMgr("addons://list/greasemonkey-user-script"); + } else if (_sm_pm_browserWin.toEM) { + _sm_pm_browserWin.toEM("addons://list/greasemonkey-user-script"); + } } // Open the updates manager in Firefox >= 4.0 function GM_OpenUpdatesMgr() { - BrowserOpenAddonsMgr('addons://updates/available'); + // SeaMonkey + var _sm_pm_browserWin = Services.wm.getMostRecentWindow("navigator:browser"); + if (_sm_pm_browserWin.BrowserOpenAddonsMgr) { + _sm_pm_browserWin.BrowserOpenAddonsMgr("addons://updates/available"); + } else if (_sm_pm_browserWin.toEM) { + _sm_pm_browserWin.toEM("addons://updates/available"); + } } ]]> diff --git a/content/browser.js b/content/browser.js index 11ef8a0c5..77abb4ce3 100644 --- a/content/browser.js +++ b/content/browser.js @@ -78,29 +78,56 @@ GM_BrowserUI.openTab = function(url) { GM_BrowserUI.openInTab = function(aMessage) { var browser = aMessage.target; var tabBrowser = browser.getTabBrowser(); - var scriptTab = tabBrowser.getTabForBrowser(browser); + // PaleMoon + var scriptTab = null; + if (tabBrowser.getTabForBrowser) { + scriptTab = tabBrowser.getTabForBrowser(browser); + } else if (tabBrowser._getTabForBrowser) { + // Firefox >= 23, Firefox < 35 (i.e. PaleMoon) + // https://bugzilla.mozilla.org/show_bug.cgi?id=662008 + scriptTab = tabBrowser._getTabForBrowser(browser); + } + // SeaMonkey + // https://bugzilla.mozilla.org/show_bug.cgi?id=1149775 + if (!scriptTab || !scriptTab._tPos) { + var _sm_pm_windowTabs = browser.ownerDocument.defaultView.getBrowser().tabs; + var _sm_pm_windowTab = null; + for (var _sm_pm_tabIndex = 0, + _sm_pm_windowTabsLength = _sm_pm_windowTabs.length; + _sm_pm_tabIndex < _sm_pm_windowTabsLength; _sm_pm_tabIndex++) { + _sm_pm_windowTab = _sm_pm_windowTabs[_sm_pm_tabIndex]; + if (_sm_pm_windowTab.linkedBrowser == browser) { + scriptTab = _sm_pm_windowTab; + scriptTab._tPos = _sm_pm_tabIndex; + break; + } + } + } var scriptTabIsCurrentTab = scriptTab == tabBrowser.mCurrentTab; // Work around a race condition in Firefox code with E10S disabled. // See #2107 and #2234 // Todo: Remove timeout when http://bugzil.la/1200334 is resolved. GM_util.timeout(function () { - var newTab = tabBrowser.addTab( - aMessage.data.url, - { - 'ownerTab': scriptTab, - 'relatedToCurrent': scriptTabIsCurrentTab, - }); - var getBool = Services.prefs.getBoolPref; var prefBg = (aMessage.data.inBackground === null) ? getBool("browser.tabs.loadInBackground") : aMessage.data.inBackground; - if (scriptTabIsCurrentTab && !prefBg) tabBrowser.selectedTab = newTab; - var prefRel = (aMessage.data.afterCurrent === null) ? getBool("browser.tabs.insertRelatedAfterCurrent") : aMessage.data.afterCurrent; + + var newTab = tabBrowser.addTab( + aMessage.data.url, + { + 'ownerTab': prefBg ? null : tabBrowser.selectedTab, + 'relatedToCurrent': scriptTabIsCurrentTab, + }); + + if (scriptTabIsCurrentTab && !prefBg) { + tabBrowser.selectedTab = newTab; + } + if (prefRel) { tabBrowser.moveTabTo(newTab, scriptTab._tPos + 1); } else { @@ -150,8 +177,19 @@ GM_BrowserUI.getUserScriptUrlUnderPointer = function(callback) { }; mm.addMessageListener("greasemonkey:context-menu-end", messageHandler); + // Firefox < 25 (i.e. PaleMoon) + // https://bugzilla.mozilla.org/show_bug.cgi?id=870180 + var _sm_pm_href = ""; + if (document.popupNode) { + while (culprit && culprit.tagName + && culprit.tagName.toLowerCase() != "a") { + culprit = culprit.parentNode; + } + _sm_pm_href = culprit.href; + } mm.sendAsyncMessage( - "greasemonkey:context-menu-start", {}, {"culprit": culprit}); + "greasemonkey:context-menu-start", + {"href": _sm_pm_href}, {"culprit": culprit}); }; GM_BrowserUI.refreshStatus = function() { diff --git a/content/browser.xul b/content/browser.xul index ac908946f..885646f46 100644 --- a/content/browser.xul +++ b/content/browser.xul @@ -53,6 +53,11 @@ + + + + + diff --git a/content/framescript.js b/content/framescript.js index 7a1ade6eb..93fe2e0a4 100644 --- a/content/framescript.js +++ b/content/framescript.js @@ -5,6 +5,8 @@ var Cc = Components.classes; var Ci = Components.interfaces; var Cu = Components.utils; +// PaleMoon +Cu.import("resource://gre/modules/Services.jsm"); Cu.import('resource://gre/modules/XPCOMUtils.jsm'); Cu.import('chrome://greasemonkey-modules/content/documentObserver.js'); @@ -18,6 +20,11 @@ Cu.import('chrome://greasemonkey-modules/content/util.js'); Cu.import('chrome://greasemonkey-modules/content/processScript.js', {}) .addFrame(this); +// PaleMoon +var _sm_pm_gPalemoonId = "{8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4}"; +if (Services.appinfo.ID == _sm_pm_gPalemoonId) { + Cu.import("chrome://greasemonkey-modules/content/installPolicy.js"); +} // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // @@ -43,6 +50,8 @@ function contentObserver(win) { // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // function browserLoad(aEvent) { + if (!GM_util.getEnabled()) return; + var contentWin = aEvent.target.defaultView; var href = contentWin.location.href; @@ -121,11 +130,33 @@ function injectScripts(aScripts, aContentWin) { } +// PaleMoon +function _sm_pm_loadFailedScript(aMessage) { + var url = aMessage.data.url; + var loadFlags = Ci.nsIWebNavigation.LOAD_FLAGS_NONE; + var referer = aMessage.data.referer + && GM_util.uriFromUrl(aMessage.data.referer); + var postData = null; + var headers = null; + + var webNav = docShell.QueryInterface(Ci.nsIWebNavigation); + + _sm_pm_passNextScript(); + webNav.loadURI(url, loadFlags, referer, postData, headers); +} + + function contextMenuStart(aMessage) { - var culprit = aMessage.objects.culprit; + // Firefox < 25 (i.e. PaleMoon) + if (Object.keys(aMessage.objects).length > 0) { + var culprit = aMessage.objects.culprit; - while (culprit && culprit.tagName && culprit.tagName.toLowerCase() != "a") { - culprit = culprit.parentNode; + while (culprit && culprit.tagName && culprit.tagName.toLowerCase() != "a") { + culprit = culprit.parentNode; + } + } else { + var culprit = {}; + culprit.href = aMessage.data.href; } aMessage.target.sendAsyncMessage( @@ -194,6 +225,8 @@ addEventListener('DOMWindowCreated', windowCreated); if (content) windowCreated(); addMessageListener('greasemonkey:inject-delayed-script', injectDelayedScript); +// PaleMoon +addMessageListener('greasemonkey:_sm_pm_load-failed-script', _sm_pm_loadFailedScript); addMessageListener('greasemonkey:menu-command-list', function(aMessage) { MenuCommandListRequest(content, aMessage); }); diff --git a/content/options.js b/content/options.js index 34cfe3b09..97157ab25 100644 --- a/content/options.js +++ b/content/options.js @@ -1,3 +1,9 @@ +// SeaMonkey +// PaleMoon +Components.utils.import("resource://gre/modules/Services.jsm"); +var _sm_pm_gSeamonkeyId = "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}"; +var _sm_pm_gPalemoonId = "{8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4}"; + Components.utils.import('chrome://greasemonkey-modules/content/prefmanager.js'); Components.utils.import('chrome://greasemonkey-modules/content/util.js'); @@ -6,6 +12,18 @@ var cpmm = Components.classes["@mozilla.org/childprocessmessagemanager;1"] function GM_loadOptions() { + // SeaMonkey + // PaleMoon + document.getElementById("check-sync") + .setAttribute("label", document.getElementById("check-sync") + .getAttribute("label") + .replace(/Firefox/i, ( + (Services.appinfo.ID == _sm_pm_gSeamonkeyId) + ? "SeaMonkey" + : ((Services.appinfo.ID == _sm_pm_gPalemoonId) + ? "Pale Moon" + : "$&") + ))); document.getElementById('check-sync') .checked = GM_prefRoot.getValue('sync.enabled'); document.getElementById('secure-update') diff --git a/content/options.xul b/content/options.xul index 5b3873c67..5cec53455 100644 --- a/content/options.xul +++ b/content/options.xul @@ -2,7 +2,8 @@ - + + %greasemonkeyDTD; %preferencesDTD; ]> @@ -10,8 +11,9 @@ +