commit ff5631d9ec27f338e9867a58e918cd1b18598b70
parent 313bbd246d9fb4d54567c294bd25623b9765a227
Author: Dan Stillman <dstillman@zotero.org>
Date: Tue, 31 Mar 2009 09:12:24 +0000
Addresses #1239, Add options to Locate button
When an item has a URL, turn Locate button into a menu and allow lookup via Wayback Machine
Support for additional user-configurable providers is forthcoming
Diffstat:
2 files changed, 66 insertions(+), 12 deletions(-)
diff --git a/chrome/content/zotero/bindings/itembox.xml b/chrome/content/zotero/bindings/itembox.xml
@@ -282,9 +282,8 @@
}
viewButton.setAttribute('disabled', !validURI);
- // Enable/disable "Locate =>" (OpenURL) button
- switch (this.item.itemTypeID)
- {
+ // Enable/disable "Locate =>" button
+ switch (this.item.itemTypeID) {
// DEBUG: handle descendents of these types as well?
case Zotero.ItemTypes.getID('book'):
case Zotero.ItemTypes.getID('bookSection'):
@@ -296,7 +295,20 @@
default:
var openURL = false;
}
- document.getElementById('openurl-button').setAttribute('disabled', !openURL);
+
+ var locateButton = document.getElementById('locate-button');
+
+ // TODO: move Locate service logic to separate interface
+ var wayback = this._itemHasURL();
+ if (wayback) {
+ locateButton.setAttribute('type', 'menu');
+ locateButton.setAttribute('disabled', false);
+ document.getElementById('locate-service-openurl').disabled = !openURL;
+ }
+ else {
+ locateButton.removeAttribute('type');
+ locateButton.disabled = !openURL;
+ }
this._id('go-buttons').hidden = false;
}
@@ -515,6 +527,16 @@
</method>
+ <method name="_itemHasURL">
+ <body>
+ <![CDATA[
+ var url = this.item.getField('url');
+ return url && !url.match(/^file:|^zotero:/);
+ ]]>
+ </body>
+ </method>
+
+
<method name="addDynamicRow">
<parameter name="label"/>
<parameter name="value"/>
@@ -943,13 +965,34 @@
</method>
- <method name="onOpenURLClick">
+ <method name="onLocateClick">
<parameter name="event"/>
<body>
<![CDATA[
- var url = Zotero.OpenURL.resolve(this.item);
- if (url) {
- ZoteroPane.loadURI(url, event);
+ // Default OpenURL button
+ if (event.originalTarget.id == 'locate-button') {
+ var url = Zotero.OpenURL.resolve(this.item);
+ if (url) {
+ ZoteroPane.loadURI(url, event);
+ }
+ return;
+ }
+
+ // Menu options
+ switch (event.originalTarget.id) {
+ case 'locate-service-openurl':
+ var url = Zotero.OpenURL.resolve(this.item);
+ if (url) {
+ ZoteroPane.loadURI(url, event);
+ }
+ break;
+
+ case 'locate-service-wayback':
+ var prefix = "http://web.archive.org/web/*/";
+ var url = this.item.getField('url');
+ url = prefix + url;
+ ZoteroPane.loadURI(url, event);
+ break;
}
]]>
</body>
@@ -2073,10 +2116,15 @@
<button id="view-button"
onfocus="document.getBindingParent(this).ensureElementIsVisible(this)"
oncommand="document.getBindingParent(this).onViewClick(this, event)" disabled="false"/>
- <button id="openurl-button" label="&zotero.toolbar.openURL.label;"
- tooltiptext="&zotero.toolbar.openURL.tooltip;"
- onfocus="document.getBindingParent(this).ensureElementIsVisible(this)"
- oncommand="document.getBindingParent(this).onOpenURLClick(event);"/>
+ <button id="locate-button" label="&zotero.toolbar.openURL.label;"
+ onfocus="document.getBindingParent(this).ensureElementIsVisible(this)"
+ type="menu"
+ oncommand="document.getBindingParent(this).onLocateClick(event)">
+ <menupopup>
+ <menuitem id="locate-service-openurl" label="Library Lookup" tooltiptext="&zotero.toolbar.openURL.tooltip;"/>
+ <menuitem id="locate-service-wayback" label="Wayback Machine"/>
+ </menupopup>
+ </button>
</hbox>
<hbox align="center" hidden="true">
<menulist id="item-type-menu" oncommand="document.getBindingParent(this).changeTypeTo(this.value, this)" flex="1"
diff --git a/chrome/skin/default/zotero/bindings/itembox.css b/chrome/skin/default/zotero/bindings/itembox.css
@@ -22,6 +22,12 @@ textbox, tagsbox textbox
-moz-box-flex: 1;
}
+#go-buttons button#locate-button
+{
+ -moz-box-direction: normal;
+}
+
+
#go-buttons button[disabled=true]
{
list-style-image: url('chrome://zotero/skin/toolbar-go-arrow-disabled.png');