Add-on discovery support for Zotero Standalone, part 1
This commit is contained in:
parent
beefefd016
commit
aae77c6015
5 changed files with 114 additions and 3 deletions
77
chrome/content/zotero/standalone/extensionsOverlay.js
Normal file
77
chrome/content/zotero/standalone/extensionsOverlay.js
Normal file
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
***** BEGIN LICENSE BLOCK *****
|
||||
|
||||
Copyright © 2011 Center for History and New Media
|
||||
George Mason University, Fairfax, Virginia, USA
|
||||
http://zotero.org
|
||||
|
||||
This file is part of Zotero.
|
||||
|
||||
Zotero is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Zotero is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with Zotero. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
The Original Code is the Extension Manager UI.
|
||||
|
||||
The Initial Developer of the Original Code is the Mozilla Foundation.
|
||||
Portions created by the Initial Developer are Copyright (C) 2010
|
||||
the Initial Developer. All Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Blair McBride <bmcbride@mozilla.com>
|
||||
Simon Kornblith <simon@zotero.org</a>
|
||||
|
||||
***** END LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
gDiscoverView.onLocationChange = function(aWebProgress, aRequest, aLocation) {
|
||||
// Ignore the about:blank load
|
||||
if (aLocation.spec == "about:blank")
|
||||
return;
|
||||
|
||||
// When using the real session history the inner-frame will update the
|
||||
// session history automatically, if using the fake history though it must
|
||||
// be manually updated
|
||||
if (gHistory == FakeHistory) {
|
||||
var docshell = aWebProgress.QueryInterface(Ci.nsIDocShell);
|
||||
|
||||
var state = {
|
||||
view: "addons://discover/",
|
||||
url: aLocation.spec
|
||||
};
|
||||
|
||||
var replaceHistory = Ci.nsIWebNavigation.LOAD_FLAGS_REPLACE_HISTORY << 16;
|
||||
if (docshell.loadType & replaceHistory)
|
||||
gHistory.replaceState(state);
|
||||
else
|
||||
gHistory.pushState(state);
|
||||
gViewController.lastHistoryIndex = gHistory.index;
|
||||
}
|
||||
|
||||
gViewController.updateCommands();
|
||||
|
||||
// In Zotero, we override the behavior below to allow pages on other sites
|
||||
|
||||
/*// If the hostname is the same as the new location's host and either the
|
||||
// default scheme is insecure or the new location is secure then continue
|
||||
// with the load
|
||||
if (aLocation.host == this.homepageURL.host &&
|
||||
(!this.homepageURL.schemeIs("https") || aLocation.schemeIs("https")))
|
||||
return;
|
||||
|
||||
// Canceling the request will send an error to onStateChange which will show
|
||||
// the error page
|
||||
aRequest.cancel(Components.results.NS_BINDING_ABORTED);*/
|
||||
}
|
||||
|
||||
// Don't care about http/https
|
||||
gDiscoverView.onSecurityChange = function() {};
|
8
chrome/content/zotero/standalone/extensionsOverlay.xul
Normal file
8
chrome/content/zotero/standalone/extensionsOverlay.xul
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0"?>
|
||||
<overlay id="zotero-addons"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<page id="addons-page">
|
||||
<script type="application/javascript" src="chrome://zotero/content/standalone/extensionsOverlay.js"/>
|
||||
</page>
|
||||
</overlay>
|
|
@ -28,8 +28,7 @@ Components.utils.import("resource://gre/modules/Services.jsm");
|
|||
/**
|
||||
* This object contains the various functions for the interface
|
||||
*/
|
||||
var ZoteroStandalone = new function()
|
||||
{
|
||||
const ZoteroStandalone = new function() {
|
||||
/**
|
||||
* Run when standalone window first opens
|
||||
*/
|
||||
|
@ -65,6 +64,12 @@ var ZoteroStandalone = new function()
|
|||
handlerInfo.alwaysAskBeforeHandling = false;
|
||||
hs.store(handlerInfo);
|
||||
}
|
||||
|
||||
// Add add-on listeners (not yet hooked up)Services.obs.addObserver(gXPInstallObserver, "addon-install-disabled", false);
|
||||
Services.obs.addObserver(gXPInstallObserver, "addon-install-started", false);
|
||||
Services.obs.addObserver(gXPInstallObserver, "addon-install-blocked", false);
|
||||
Services.obs.addObserver(gXPInstallObserver, "addon-install-failed", false);
|
||||
Services.obs.addObserver(gXPInstallObserver, "addon-install-complete", false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -171,5 +176,24 @@ function toOpenWindowByType(inType, uri, features)
|
|||
}
|
||||
}
|
||||
|
||||
const gXPInstallObserver = {
|
||||
observe: function (aSubject, aTopic, aData) {
|
||||
var installInfo = aSubject.QueryInterface(Components.interfaces.amIWebInstallInfo);
|
||||
var win = installInfo.originatingWindow;
|
||||
switch (aTopic) {
|
||||
case "addon-install-disabled":
|
||||
case "addon-install-blocked":
|
||||
case "addon-install-failed":
|
||||
var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
|
||||
.getService(Components.interfaces.nsIPromptService);
|
||||
promptService.alert(win, Zotero.getString("standalone.addonInstallationFailed.title"),
|
||||
Zotero.getString("standalone.addonInstallationFailed.body", installInfo.installs[0].name));
|
||||
break;
|
||||
/*case "addon-install-started":
|
||||
case "addon-install-complete":*/
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener("load", function(e) { ZoteroStandalone.onLoad(e); }, false);
|
||||
window.addEventListener("unload", function(e) { ZoteroStandalone.onUnload(e); }, false);
|
|
@ -170,7 +170,7 @@
|
|||
command="cmd_zotero_rtfScan"/>
|
||||
<menuseparator/>
|
||||
<menuitem id="menu_addons" label="&addons.label;"
|
||||
oncommand="ZoteroStandalone.openInViewer('about:addons')"/>
|
||||
oncommand="ZoteroStandalone.openInViewer('chrome://mozapps/content/extensions/extensions.xul')"/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
|
||||
|
|
|
@ -738,6 +738,8 @@ locate.libraryLookup.tooltip = Look up this item using the selected OpenURL res
|
|||
locate.manageLocateEngines = Manage Lookup Engines…
|
||||
|
||||
standalone.corruptInstallation = Your Zotero Standalone installation appears to be corrupted due to a failed auto-update. While Zotero may continue to function, to avoid potential bugs, please download the latest version of Zotero Standalone from http://zotero.org/support/standalone as soon as possible.
|
||||
standalone.addonInstallationFailed.title = Add-on Installation Failed
|
||||
standalone.addonInstallationFailed.body = The add-on "%S" could not be installed. It may be incompatible with this version of Zotero Standalone.
|
||||
|
||||
connector.error.title = Zotero Connector Error
|
||||
connector.standaloneOpen = Your database cannot be accessed because Zotero Standalone is currently open. Please view your items in Zotero Standalone.
|
Loading…
Reference in a new issue