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 @@
+