www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit e85eaf218acf71205067150b0bc33af9f0144541
parent 540a54515ed3d06360a6ac991187b0425539955a
Author: Dan Stillman <dstillman@zotero.org>
Date:   Fri, 16 Aug 2013 16:27:17 -0400

Update quickCopy.js and preferences_export.js for async getTranslators()

Diffstat:
Mchrome/content/zotero/preferences/preferences_export.js | 131++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Mchrome/content/zotero/xpcom/quickCopy.js | 81++++++++++++++++++++++++++++++++++++++-----------------------------------------
2 files changed, 108 insertions(+), 104 deletions(-)

diff --git a/chrome/content/zotero/preferences/preferences_export.js b/chrome/content/zotero/preferences/preferences_export.js @@ -45,8 +45,8 @@ Zotero_Preferences.Export = { // Initialize default format drop-down var format = Zotero.Prefs.get("export.quickCopy.setting"); var menulist = document.getElementById("zotero-quickCopy-menu"); - this.buildQuickCopyFormatDropDown(menulist, Zotero.QuickCopy.getContentType(format), format); menulist.setAttribute('preference', "pref-quickCopy-setting"); + this.buildQuickCopyFormatDropDown(menulist, Zotero.QuickCopy.getContentType(format), format); this.updateQuickCopyHTMLCheckbox(); if (!Zotero.isStandalone) { @@ -106,30 +106,30 @@ Zotero_Preferences.Export = { // add export formats to list var translation = new Zotero.Translate("export"); - var translators = translation.getTranslators(); - - for (var i=0; i<translators.length; i++) { - // Skip RDF formats - switch (translators[i].translatorID) { - case '6e372642-ed9d-4934-b5d1-c11ac758ebb7': - case '14763d24-8ba0-45df-8f52-b8d1108e7ac9': - continue; + translation.getTranslators() + .then(function (translators) { + for (var i=0; i<translators.length; i++) { + // Skip RDF formats + switch (translators[i].translatorID) { + case '6e372642-ed9d-4934-b5d1-c11ac758ebb7': + case '14763d24-8ba0-45df-8f52-b8d1108e7ac9': + continue; + } + var val = 'export=' + translators[i].translatorID; + var itemNode = document.createElement("menuitem"); + itemNode.setAttribute("value", val); + itemNode.setAttribute("label", translators[i].label); + itemNode.setAttribute("oncommand", 'Zotero_Preferences.Export.updateQuickCopyHTMLCheckbox()'); + popup.appendChild(itemNode); + + if (val == currentFormat) { + menulist.selectedItem = itemNode; + } } - var val = 'export=' + translators[i].translatorID; - var itemNode = document.createElement("menuitem"); - itemNode.setAttribute("value", val); - itemNode.setAttribute("label", translators[i].label); - itemNode.setAttribute("oncommand", 'Zotero_Preferences.Export.updateQuickCopyHTMLCheckbox()'); - popup.appendChild(itemNode); - if (val == currentFormat) { - menulist.selectedItem = itemNode; - } - } - - menulist.click(); - - return popup; + menulist.click(); + }) + .done(); }, @@ -156,25 +156,28 @@ Zotero_Preferences.Export = { var asHTML = treerow.childNodes[2].getAttribute('label') != ''; } - var format = Zotero.QuickCopy.getSettingFromFormattedName(format); - if (asHTML) { - format = format.replace('bibliography=', 'bibliography/html='); - } - - var io = {domain: domain, format: format, ok: false}; - window.openDialog('chrome://zotero/content/preferences/quickCopySiteEditor.xul', "zotero-preferences-quickCopySiteEditor", "chrome, modal", io); - - if (!io.ok) { - return; - } - - if (domain && domain != io.domain) { - Zotero.DB.query("DELETE FROM settings WHERE setting='quickCopySite' AND key=?", [domain]); - } - - Zotero.DB.query("REPLACE INTO settings VALUES ('quickCopySite', ?, ?)", [io.domain, io.format]); - - this.refreshQuickCopySiteList(); + Zotero.QuickCopy.getSettingFromFormattedName(format) + .then(function (format) { + if (asHTML) { + format = format.replace('bibliography=', 'bibliography/html='); + } + + var io = {domain: domain, format: format, ok: false}; + window.openDialog('chrome://zotero/content/preferences/quickCopySiteEditor.xul', "zotero-preferences-quickCopySiteEditor", "chrome, modal", io); + + if (!io.ok) { + return; + } + + if (domain && domain != io.domain) { + Zotero.DB.query("DELETE FROM settings WHERE setting='quickCopySite' AND key=?", [domain]); + } + + Zotero.DB.query("REPLACE INTO settings VALUES ('quickCopySite', ?, ?)", [io.domain, io.format]); + + this.refreshQuickCopySiteList(); + }.bind(this)) + .done(); }, @@ -192,26 +195,30 @@ Zotero_Preferences.Export = { return; } - for (var i=0; i<siteData.length; i++) { - var treeitem = document.createElement('treeitem'); - var treerow = document.createElement('treerow'); - var domainCell = document.createElement('treecell'); - var formatCell = document.createElement('treecell'); - var HTMLCell = document.createElement('treecell'); - - domainCell.setAttribute('label', siteData[i].domainPath); - - var formatted = Zotero.QuickCopy.getFormattedNameFromSetting(siteData[i].format); - formatCell.setAttribute('label', formatted); - var copyAsHTML = Zotero.QuickCopy.getContentType(siteData[i].format) == 'html'; - HTMLCell.setAttribute('label', copyAsHTML ? ' ✓ ' : ''); - - treerow.appendChild(domainCell); - treerow.appendChild(formatCell); - treerow.appendChild(HTMLCell); - treeitem.appendChild(treerow); - treechildren.appendChild(treeitem); - } + Q.async(function () { + for (var i=0; i<siteData.length; i++) { + let treeitem = document.createElement('treeitem'); + let treerow = document.createElement('treerow'); + let domainCell = document.createElement('treecell'); + let formatCell = document.createElement('treecell'); + let HTMLCell = document.createElement('treecell'); + + domainCell.setAttribute('label', siteData[i].domainPath); + + yield Zotero.QuickCopy.getFormattedNameFromSetting(siteData[i].format) + .then(function (formatted) { + formatCell.setAttribute('label', formatted); + var copyAsHTML = Zotero.QuickCopy.getContentType(siteData[i].format) == 'html'; + HTMLCell.setAttribute('label', copyAsHTML ? ' ✓ ' : ''); + + treerow.appendChild(domainCell); + treerow.appendChild(formatCell); + treerow.appendChild(HTMLCell); + treeitem.appendChild(treerow); + treechildren.appendChild(treeitem); + }); + } + })().done(); }, diff --git a/chrome/content/zotero/xpcom/quickCopy.js b/chrome/content/zotero/xpcom/quickCopy.js @@ -25,38 +25,57 @@ Zotero.QuickCopy = new function() { - this.getFormattedNameFromSetting = getFormattedNameFromSetting; - this.getSettingFromFormattedName = getSettingFromFormattedName; this.getContentType = getContentType; this.stripContentType = stripContentType; this.getFormatFromURL = getFormatFromURL; this.getContentFromItems = getContentFromItems; - var _initialized = false; var _formattedNames = {}; - function getFormattedNameFromSetting(setting) { - if (!_initialized) { - _init(); - } + var _init = Zotero.lazy(function () { + Zotero.debug("Initializing Quick Copy"); - var name = _formattedNames[this.stripContentType(setting)]; - return name ? name : ''; + var translation = new Zotero.Translate.Export; + return translation.getTranslators() + .then(function (translators) { + // add styles to list + var styles = Zotero.Styles.getVisible(); + for each(var style in styles) { + _formattedNames['bibliography=' + style.styleID] = style.title; + } + + for (var i=0; i<translators.length; i++) { + // Skip RDF formats + switch (translators[i].translatorID) { + case '6e372642-ed9d-4934-b5d1-c11ac758ebb7': + case '14763d24-8ba0-45df-8f52-b8d1108e7ac9': + continue; + } + _formattedNames['export=' + translators[i].translatorID] = translators[i].label; + } + }); + }); + + + this.getFormattedNameFromSetting = function (setting) { + return _init() + .then(function () { + var name = _formattedNames[this.stripContentType(setting)]; + return name ? name : ''; + }.bind(this)); } - function getSettingFromFormattedName(name) { - if (!_initialized) { - _init(); - } - - for (var setting in _formattedNames) { - if (_formattedNames[setting] == name) { - return setting; + this.getSettingFromFormattedName = function (name) { + return _init() + .then(function () { + for (var setting in _formattedNames) { + if (_formattedNames[setting] == name) { + return setting; + } } - } - - return ''; + return ''; + }); } @@ -346,26 +365,4 @@ Zotero.QuickCopy = new function() { throw ("Invalid mode '" + mode + "' in Zotero.QuickCopy.getContentFromItems()"); } - - - function _init() { - var translation = new Zotero.Translate.Export; - var translators = translation.getTranslators(); - - // add styles to list - var styles = Zotero.Styles.getVisible(); - for each(var style in styles) { - _formattedNames['bibliography=' + style.styleID] = style.title; - } - - for (var i=0; i<translators.length; i++) { - // Skip RDF formats - switch (translators[i].translatorID) { - case '6e372642-ed9d-4934-b5d1-c11ac758ebb7': - case '14763d24-8ba0-45df-8f52-b8d1108e7ac9': - continue; - } - _formattedNames['export=' + translators[i].translatorID] = translators[i].label; - } - } }