add option to recognize PDF to download dialog, and only whitelist some MIME types

This commit is contained in:
Simon Kornblith 2011-03-15 18:50:48 +00:00
parent f74440902b
commit f25aadb7ad
2 changed files with 77 additions and 4 deletions

View file

@ -23,6 +23,27 @@
***** END LICENSE BLOCK ***** ***** END LICENSE BLOCK *****
*/ */
var Zotero_DownloadOverlay = new function() { var Zotero_DownloadOverlay = new function() {
const PDF_MIME_TYPE = "application/pdf";
const ALLOW_LIST = [
"application/pdf",
"application/postscript",
"application/xhtml+xml",
"text/html",
"text/plain",
/^audio\//,
/^image\//,
/^video\//,
/^application\/vnd\.oasis\.opendocument\./,
/^application\/vnd\.ms-/,
/^application\/vnd\.openxmlformats-officedocument/,
/^application\/vnd\.lotus-/,
/^application\/vnd\.wolfram\./,
"application/vnd.wordperfect",
"application/wordperfect5.1",
"application/msword",
"application/x-latex"
];
/** /**
* Saves this item, if we are supposed to save it. * Saves this item, if we are supposed to save it.
* *
@ -31,8 +52,10 @@ var Zotero_DownloadOverlay = new function() {
this.handleSave = function() { this.handleSave = function() {
if(!document.getElementById('zotero-radio').selected) return false; if(!document.getElementById('zotero-radio').selected) return false;
var retrieveMetadata = document.getElementById('zotero-recognizePDF').selected;
var url = dialog.mLauncher.source.spec; var url = dialog.mLauncher.source.spec;
Zotero.debug("Downloading from "+url); Zotero.debug("Zotero_DownloadOverlay: Downloading from "+url);
// set up progress window // set up progress window
var win = Components.classes["@mozilla.org/appshell/window-mediator;1"] var win = Components.classes["@mozilla.org/appshell/window-mediator;1"]
@ -41,12 +64,29 @@ var Zotero_DownloadOverlay = new function() {
var libraryID = (win ? win.ZoteroPane.getSelectedLibraryID() : false); var libraryID = (win ? win.ZoteroPane.getSelectedLibraryID() : false);
var collection = (win ? win.ZoteroPane.getSelectedCollection() : false); var collection = (win ? win.ZoteroPane.getSelectedCollection() : false);
var recognizePDF = document.getElementById('zotero-recognizePDF').checked
&& !document.getElementById('zotero-recognizePDF').hidden;
// set up callback // set up callback
var callback = function(item) { var callback = function(item) {
if(!win) return; if(!win) return;
if(item) win.Zotero_Browser.itemDone(null, item); if(item) win.Zotero_Browser.itemDone(null, item);
win.Zotero_Browser.finishScraping(null, !!item); win.Zotero_Browser.finishScraping(null, !!item);
if(recognizePDF) {
var timer = Components.classes["@mozilla.org/timer;1"]
.createInstance(Components.interfaces.nsITimer);
timer.init(function() {
try {
if(item.getFile()) {
timer.cancel();
var recognizer = new win.Zotero_RecognizePDF.ItemRecognizer();
recognizer.recognizeItems([item]);
}
} catch(e) { dump(e.toSource()) };
}, 1000, Components.interfaces.nsITimer.TYPE_REPEATING_SLACK);
}
}; };
// show progress dialog // show progress dialog
@ -67,14 +107,36 @@ var Zotero_DownloadOverlay = new function() {
* Called when mode in dialog has been changed * Called when mode in dialog has been changed
*/ */
this.modeChanged = function() { this.modeChanged = function() {
Zotero.debug("rememberChoice"); var zoteroSelected = document.getElementById('zotero-radio').selected;
document.getElementById('rememberChoice').disabled = document.getElementById('zotero-radio').selected;
// don't allow user to remember Zotero option for file type; i'm not sure anyone wants this
// to happen automatically
if(zoteroSelected) document.getElementById('rememberChoice').selected = false;
document.getElementById('rememberChoice').disabled = zoteroSelected;
// disable recognizePDF checkbox as necessary
document.getElementById('zotero-recognizePDF').disabled = !zoteroSelected;
}; };
/** /**
* Called when the save dialog is opened * Called when the save dialog is opened
*/ */
this.init = function() { this.init = function() {
// Disable for filetypes people probably don't want to save
var show = false;
var mimeType = dialog.mLauncher.MIMEInfo.MIMEType.toLowerCase();
for each(var elem in ALLOW_LIST) {
if(typeof elem === "string") {
if(elem === mimeType) {
document.getElementById('zotero-container').hidden = false;
break;
}
} else if(elem.test(mimeType)) {
document.getElementById('zotero-container').hidden = false;
break;
}
}
// Hook in event listener to ondialogaccept // Hook in event listener to ondialogaccept
document.documentElement.setAttribute('ondialogaccept', document.documentElement.setAttribute('ondialogaccept',
'if(!Zotero_DownloadOverlay.handleSave()) { ' 'if(!Zotero_DownloadOverlay.handleSave()) { '
@ -84,6 +146,14 @@ var Zotero_DownloadOverlay = new function() {
// Hook in event listener for mode change // Hook in event listener for mode change
var radios = document.getElementById('mode'). var radios = document.getElementById('mode').
addEventListener("command", Zotero_DownloadOverlay.modeChanged, false); addEventListener("command", Zotero_DownloadOverlay.modeChanged, false);
// Set label on retrieve PDF option
if(mimeType === PDF_MIME_TYPE) {
var recognizePDF = document.getElementById('zotero-recognizePDF');
recognizePDF.label = Zotero.getString("pane.items.menu.recognizePDF");
recognizePDF.hidden = false;
recognizePDF.disabled = true;
}
}; };
} }

View file

@ -38,8 +38,11 @@
<script type="application/x-javascript" src="include.js"/> <script type="application/x-javascript" src="include.js"/>
<script type="application/x-javascript" src="downloadOverlay.js"/> <script type="application/x-javascript" src="downloadOverlay.js"/>
<radiogroup id="mode"> <radiogroup id="mode">
<vbox insertbefore="save" id="zotero-container" flex="1"> <vbox insertbefore="save" id="zotero-container" flex="1" hidden="true">
<radio id="zotero-radio" label="&zotero.downloadManager.label;"/> <radio id="zotero-radio" label="&zotero.downloadManager.label;"/>
<vbox style="margin-left: 10px">
<checkbox id="zotero-recognizePDF" hidden="true" persist="checked"/>
</vbox>
</vbox> </vbox>
</radiogroup> </radiogroup>
</overlay> </overlay>