Skip to content

Commit

Permalink
Add SeaMonkey and PaleMoon compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
janekptacijarabaci committed Dec 5, 2016
1 parent 3f462ac commit c2159da
Show file tree
Hide file tree
Showing 26 changed files with 857 additions and 167 deletions.
8 changes: 8 additions & 0 deletions chrome.manifest
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,24 @@ 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
overlay chrome://greasemonkey/content/options.xul chrome://greasemonkey/content/closewindow.xul
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/
23 changes: 21 additions & 2 deletions components/greasemonkey.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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) {
Expand All @@ -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 ////////////////////////////
Expand Down
17 changes: 15 additions & 2 deletions content/addons4.xul
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
}
]]></script>
</overlay>
60 changes: 49 additions & 11 deletions content/browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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() {
Expand Down
5 changes: 5 additions & 0 deletions content/browser.xul
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@
<menu id="gm_general_menu" insertafter="devToolsSeparator" />
</menupopup>

<!-- SeaMonkey -->
<menupopup id="taskPopup">
<menu id="gm_general_menu" insertbefore="downloadMgr" />
</menupopup>

<!--
NOTE: Unlocalized accesskey & label in menu tags; possibly unaccessible
-->
Expand Down
39 changes: 36 additions & 3 deletions content/framescript.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand All @@ -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");
}

// \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ //

Expand All @@ -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;

Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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);
});
Expand Down
18 changes: 18 additions & 0 deletions content/options.js
Original file line number Diff line number Diff line change
@@ -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');

Expand All @@ -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')
Expand Down
12 changes: 8 additions & 4 deletions content/options.xul
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@

<!DOCTYPE prefwindow [
<!ENTITY % greasemonkeyDTD SYSTEM "chrome://greasemonkey/locale/greasemonkey.dtd">
<!ENTITY % preferencesDTD SYSTEM "chrome://browser/locale/preferences/preferences.dtd">
<!-- SeaMonkey -->
<!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
%greasemonkeyDTD;
%preferencesDTD;
]>

<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
<?xml-stylesheet href="chrome://greasemonkey/skin/bindings.css" type="text/css"?>
<?xml-stylesheet href="chrome://greasemonkey/skin/options.css" type="text/css"?>
<!-- SeaMonkey -->
<dialog
title="Greasemonkey - &prefWindow.titleWin;"
title="Greasemonkey - &preferencesDefaultTitleWin.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
buttons="accept,cancel"
flex="1"
Expand All @@ -24,11 +26,13 @@
>
<script type="application/x-javascript" src="chrome://greasemonkey/content/options.js" />

<dialogheader title="Greasemonkey" description="&prefWindow.titleWin;"/>
<!-- SeaMonkey -->
<dialogheader title="Greasemonkey" description="&preferencesDefaultTitleWin.title;"/>

<vbox flex="1">
<groupbox>
<caption label="&prefWindow.titleWin;" />
<!-- SeaMonkey -->
<caption label="&preferencesDefaultTitleWin.title;" />
<checkbox id="secure-update" label="&RequireSecureUpdates;" />
<checkbox id="submit-stats" label="&SubmitStats;" />
<checkbox id="check-sync" label="&EnableFirefoxSync;" />
Expand Down
3 changes: 2 additions & 1 deletion content/scratchpad-overlay.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
window.addEventListener('load', function() {
var args = window.arguments;
if (!args) return;
if (!(args[0] instanceof Ci.nsIDialogParamBlock)) return;
// SeaMonkey
if (!(args[0] instanceof Components.interfaces.nsIDialogParamBlock)) return;
args = args[0].GetString(1);
if (!args) return;
args = JSON.parse(args);
Expand Down
15 changes: 12 additions & 3 deletions install.rdf
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Description about="urn:mozilla:install-manifest">

<em:id>{e4a8a97b-f2ed-450b-b12d-ee082ba24781}</em:id>
<em:version>3.9</em:version>
<em:version>3.9.2</em:version>
<em:creator>Aaron Boodman; http://youngpup.net/</em:creator>
<em:homepageURL>http://www.greasespot.net/</em:homepageURL>
<em:optionsURL>chrome://greasemonkey/content/options.xul</em:optionsURL>
Expand Down Expand Up @@ -51,12 +51,21 @@
</Description>
</em:targetApplication>

<!-- Pale Moon -->
<!-- SeaMonkey -->
<em:targetApplication>
<Description>
<em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id>
<em:minVersion>2.32</em:minVersion>
<em:maxVersion>3.*</em:maxVersion>
</Description>
</em:targetApplication>

<!-- PaleMoon -->
<em:targetApplication>
<Description>
<em:id>{8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4}</em:id>
<em:minVersion>25.0</em:minVersion>
<em:maxVersion>25.*</em:maxVersion>
<em:maxVersion>27.*</em:maxVersion>
</Description>
</em:targetApplication>

Expand Down
Loading

0 comments on commit c2159da

Please sign in to comment.