commit d14c3fcc92e417579a16aee3447e37678b067c41
parent 6d095b50259b37c8b95eb26876add6d86a55530a
Author: Simon Kornblith <simon@simonster.com>
Date: Mon, 18 Feb 2013 21:40:36 -0500
Avoid importing Q into page scope
Diffstat:
1 file changed, 146 insertions(+), 137 deletions(-)
diff --git a/chrome/content/zotero/recognizePDF.js b/chrome/content/zotero/recognizePDF.js
@@ -26,13 +26,13 @@
/**
* @fileOverview Tools for automatically retrieving a citation for the given PDF
*/
-Components.utils.import("resource://zotero/q.js");
/**
* Front end for recognizing PDFs
* @namespace
*/
var Zotero_RecognizePDF = new function() {
+ Components.utils.import("resource://zotero/q.js");
var _progressWindow, _progressIndicator;
/**
@@ -363,148 +363,157 @@ var Zotero_RecognizePDF = new function() {
}
return false;
}
-}
-/**
- * @class Handles UI, etc. for recognizing multiple items
- */
-Zotero_RecognizePDF.ItemRecognizer = function () {
- this._stopped = false;
-}
+ /**
+ * @class Handles UI, etc. for recognizing multiple items
+ */
+ this.ItemRecognizer = function () {
+ this._items = [];
+ }
-/**
- * Retreives metadata for the PDF items passed, displaying a progress dialog during conversion
- * and placing the PDFs as a children of the new items
- * @param {Zotero.Item[]} items
- */
-Zotero_RecognizePDF.ItemRecognizer.prototype.recognizeItems = function(items) {
- var me = this;
- this._items = items.slice();
- this._itemTotal = items.length;
-
- this._progressWindow = window.openDialog("chrome://zotero/content/pdfProgress.xul", "", "chrome,close=yes,resizable=yes,dependent,dialog,centerscreen");
- this._progressWindow.addEventListener("pageshow", function() { me._onWindowLoaded() }, false);
-}
+ this.ItemRecognizer.prototype = {
+ "_stopped": false,
+ "_itemsTotal": 0,
+ "_progressWindow": null,
+ "_progressIndicator": null,
-/**
- * Halts recognition of PDFs
- */
-Zotero_RecognizePDF.ItemRecognizer.prototype.stop = function() {
- this._stopped = true;
-}
+ /**
+ * Retreives metadata for the PDF items passed, displaying a progress dialog during conversion
+ * and placing the PDFs as a children of the new items
+ * @param {Zotero.Item[]} items
+ */
+ "recognizeItems": function(items) {
+ var me = this;
+ this._items = items.slice();
+ this._itemTotal = items.length;
+
+ this._progressWindow = window.openDialog("chrome://zotero/content/pdfProgress.xul", "", "chrome,close=yes,resizable=yes,dependent,dialog,centerscreen");
+ this._progressWindow.addEventListener("pageshow", function() { me._onWindowLoaded() }, false);
+ },
-/**
- * Called when the progress window has been opened; adds items to the tree and begins recognizing
- * @param
- */
-Zotero_RecognizePDF.ItemRecognizer.prototype._onWindowLoaded = function() {
- // populate progress window
- var treechildren = this._progressWindow.document.getElementById("treechildren");
- for(var i in this._items) {
- var treeitem = this._progressWindow.document.createElement('treeitem');
- var treerow = this._progressWindow.document.createElement('treerow');
-
- var treecell = this._progressWindow.document.createElement('treecell');
- treecell.setAttribute("id", "item-"+this._items[i].id+"-icon");
- treerow.appendChild(treecell);
-
- treecell = this._progressWindow.document.createElement('treecell');
- treecell.setAttribute("label", this._items[i].getField("title"));
- treerow.appendChild(treecell);
-
- treecell = this._progressWindow.document.createElement('treecell');
- treecell.setAttribute("id", "item-"+this._items[i].id+"-title");
- treerow.appendChild(treecell);
-
- treeitem.appendChild(treerow);
- treechildren.appendChild(treeitem);
- }
-
- var me = this;
- this._progressIndicator = this._progressWindow.document.getElementById("progress-indicator");
- this._progressWindow.document.getElementById("cancel-button").addEventListener("command", function() {
- me.stop();
- me._progressWindow.close();
- }, false);
- this._progressWindow.addEventListener("close", function() { me.stop() }, false);
- this._recognizeItem();
-}
+ /**
+ * Halts recognition of PDFs
+ */
+ "stop": function() {
+ this._stopped = true;
+ },
-/**
- * Shifts an item off of this._items and recognizes it, then calls itself again if there are more
- * @private
- */
-Zotero_RecognizePDF.ItemRecognizer.prototype._recognizeItem = function() {
- const SUCCESS_IMAGE = "chrome://zotero/skin/tick.png";
- const FAILURE_IMAGE = "chrome://zotero/skin/cross.png";
- const LOADING_IMAGE = "chrome://global/skin/icons/loading_16.png";
+ /**
+ * Called when the progress window has been opened; adds items to the tree and begins recognizing
+ * @param
+ */
+ "_onWindowLoaded": function() {
+ // populate progress window
+ var treechildren = this._progressWindow.document.getElementById("treechildren");
+ for(var i in this._items) {
+ var treeitem = this._progressWindow.document.createElement('treeitem');
+ var treerow = this._progressWindow.document.createElement('treerow');
+
+ var treecell = this._progressWindow.document.createElement('treecell');
+ treecell.setAttribute("id", "item-"+this._items[i].id+"-icon");
+ treerow.appendChild(treecell);
+
+ treecell = this._progressWindow.document.createElement('treecell');
+ treecell.setAttribute("label", this._items[i].getField("title"));
+ treerow.appendChild(treecell);
+
+ treecell = this._progressWindow.document.createElement('treecell');
+ treecell.setAttribute("id", "item-"+this._items[i].id+"-title");
+ treerow.appendChild(treecell);
+
+ treeitem.appendChild(treerow);
+ treechildren.appendChild(treeitem);
+ }
+
+ var me = this;
+ this._progressIndicator = this._progressWindow.document.getElementById("progress-indicator");
+ this._progressWindow.document.getElementById("cancel-button").addEventListener("command", function() {
+ me.stop();
+ me._progressWindow.close();
+ }, false);
+ this._progressWindow.addEventListener("close", function() { me.stop() }, false);
+ this._recognizeItem();
+ },
- if(!this._items.length) {
- this._done();
- return;
- }
-
- this._progressIndicator.value = (this._itemTotal-this._items.length)/this._itemTotal*100;
-
- var item = this._items.shift(),
- itemIcon = this._progressWindow.document.getElementById("item-"+item.id+"-icon"),
- itemTitle = this._progressWindow.document.getElementById("item-"+item.id+"-title");
- itemIcon.setAttribute("src", LOADING_IMAGE);
-
- var file = item.getFile(), me = this;
-
- (file
- ? Zotero_RecognizePDF.recognize(file, item.libraryID)
- : Q.reject(new Zotero.Exception.Alert("recognizePDF.fileNotFound")))
- .then(function(newItem) {
- // If already stopped, delete
- if(me._stopped) {
- Zotero.Items.erase(item.id);
- return;
- }
-
- // put new item in same collections as the old one
- var itemCollections = item.getCollections();
- for(var j=0; j<itemCollections.length; j++) {
- var collection = Zotero.Collections.get(itemCollections[j]);
- collection.addItem(newItem.id);
- }
-
- // put old item as a child of the new item
- item.setSource(newItem.id);
- item.save();
-
- itemTitle.setAttribute("label", newItem.getField("title"));
- itemIcon.setAttribute("src", SUCCESS_IMAGE);
-
- me._recognizeItem();
- }, function(error) {
- Zotero.debug(error);
- Zotero.logError(error);
+ /**
+ * Shifts an item off of this._items and recognizes it, then calls itself again if there are more
+ * @private
+ */
+ "_recognizeItem": function() {
+ Components.utils.import("resource://zotero/q.js");
+
+ const SUCCESS_IMAGE = "chrome://zotero/skin/tick.png";
+ const FAILURE_IMAGE = "chrome://zotero/skin/cross.png";
+ const LOADING_IMAGE = "chrome://global/skin/icons/loading_16.png";
- itemTitle.setAttribute("label", error instanceof Zotero.Exception.Alert ? error.message : Zotero.getString("recognizePDF.error"));
- itemIcon.setAttribute("src", FAILURE_IMAGE);
-
- if(error instanceof Zotero.Exception.Alert && error.name === "recognizePDF.limit") {
- me._done();
- } else {
- me._recognizeItem();
- }
- }).fin(function() {
- // scroll to this item
- me._progressWindow.document.getElementById("tree").treeBoxObject.scrollToRow(Math.max(0, me._itemTotal-me._items.length-5));
- }).done();
-}
+ if(!this._items.length) {
+ this._done();
+ return;
+ }
+
+ this._progressIndicator.value = (this._itemTotal-this._items.length)/this._itemTotal*100;
+
+ var item = this._items.shift(),
+ itemIcon = this._progressWindow.document.getElementById("item-"+item.id+"-icon"),
+ itemTitle = this._progressWindow.document.getElementById("item-"+item.id+"-title");
+ itemIcon.setAttribute("src", LOADING_IMAGE);
+
+ var file = item.getFile(), me = this;
+
+ (file
+ ? Zotero_RecognizePDF.recognize(file, item.libraryID)
+ : Q.reject(new Zotero.Exception.Alert("recognizePDF.fileNotFound")))
+ .then(function(newItem) {
+ // If already stopped, delete
+ if(me._stopped) {
+ Zotero.Items.erase(item.id);
+ return;
+ }
+
+ // put new item in same collections as the old one
+ var itemCollections = item.getCollections();
+ for(var j=0; j<itemCollections.length; j++) {
+ var collection = Zotero.Collections.get(itemCollections[j]);
+ collection.addItem(newItem.id);
+ }
+
+ // put old item as a child of the new item
+ item.setSource(newItem.id);
+ item.save();
+
+ itemTitle.setAttribute("label", newItem.getField("title"));
+ itemIcon.setAttribute("src", SUCCESS_IMAGE);
+
+ me._recognizeItem();
+ }, function(error) {
+ Zotero.debug(error);
+ Zotero.logError(error);
-/**
- * Cleans up after items are recognized, disabling the cancel button and making the progress window
- * close on blur
- */
-Zotero_RecognizePDF.ItemRecognizer.prototype._done = function() {
- this._progressIndicator.value = 100;
- this._progressWindow.document.getElementById("cancel-button").label = Zotero.getString("recognizePDF.close.label");
- var me = this;
- this._progressWindow.addEventListener("blur",
- function() { me._progressWindow.setTimeout(function() { me._progressWindow.close() }, 2000) }, false);
- this._progressWindow.document.getElementById("label").value = Zotero.getString("recognizePDF.complete.label");
+ itemTitle.setAttribute("label", error instanceof Zotero.Exception.Alert ? error.message : Zotero.getString("recognizePDF.error"));
+ itemIcon.setAttribute("src", FAILURE_IMAGE);
+
+ if(error instanceof Zotero.Exception.Alert && error.name === "recognizePDF.limit") {
+ me._done();
+ } else {
+ me._recognizeItem();
+ }
+ }).fin(function() {
+ // scroll to this item
+ me._progressWindow.document.getElementById("tree").treeBoxObject.scrollToRow(Math.max(0, me._itemTotal-me._items.length-5));
+ }).done();
+ },
+
+ /**
+ * Cleans up after items are recognized, disabling the cancel button and making the progress window
+ * close on blur
+ */
+ "_done": function() {
+ this._progressIndicator.value = 100;
+ this._progressWindow.document.getElementById("cancel-button").label = Zotero.getString("recognizePDF.close.label");
+ var me = this;
+ this._progressWindow.addEventListener("blur",
+ function() { me._progressWindow.setTimeout(function() { me._progressWindow.close() }, 2000) }, false);
+ this._progressWindow.document.getElementById("label").value = Zotero.getString("recognizePDF.complete.label");
+ }
+ }
}
\ No newline at end of file