diff --git a/chrome/content/zotero/longTagFixer.js b/chrome/content/zotero/longTagFixer.js new file mode 100644 index 000000000..8113de980 --- /dev/null +++ b/chrome/content/zotero/longTagFixer.js @@ -0,0 +1,185 @@ +var Zotero_Long_Tag_Fixer = new function () { + var _oldTag = window.arguments[0]; + var _callback = window.arguments[1]; + + this.init = function () { + document.getElementById('zotero-old-tag').value = _oldTag; + + var lastMode = Zotero.Prefs.get('lastLongTagMode'); + if (!lastMode) { + lastMode = 0; + } + this.switchMode(lastMode); + } + + this.switchMode = function (index) { + var dialog = document.getElementById('zotero-long-tag-fixer'); + + document.getElementById('zotero-new-tag-actions').selectedIndex = index; + + // TODO: localize + switch (index) { + case 0: + var buttonLabel = "Save Tags"; + this.updateTagList(); + break; + + case 1: + var buttonLabel = "Save Tag"; + document.getElementById('zotero-new-tag-editor').value = _oldTag; + this.updateEditLength(_oldTag.length) + break; + + case 2: + var buttonLabel = "Delete Tag"; + dialog.getButton('accept').disabled = false; + break; + } + + document.getElementById('zotero-long-tag-fixer').getButton('accept').label = buttonLabel; + + Zotero.Prefs.set('lastLongTagMode', index); + } + + + /** + * Split tags and populate list + */ + this.updateTagList = function () { + var listbox = document.getElementById('zotero-new-tag-list'); + while (listbox.childNodes.length) { + listbox.removeChild(listbox.lastChild); + } + + var delimiter = document.getElementById('zotero-old-tag-delimiter').value; + if (delimiter) { + var re = new RegExp("\\s*" + delimiter + "\\s*"); + var tags = _oldTag.split(re); + } + + var acceptButton = document.getElementById('zotero-long-tag-fixer').getButton('accept'); + if (!delimiter || tags.length < 2) { + acceptButton.disabled = true; + return; + } + else { + acceptButton.disabled = false; + } + + tags.sort(); + for (var i=0; i 255; + document.getElementById('zotero-new-tag-characters').setAttribute('invalid', invalid); + document.getElementById('zotero-long-tag-fixer').getButton('accept').disabled = invalid; + } + + + this.cancel = function () { + if (_callback) { + _callback(false); + } + } + + + this.save = function () { + try { + + var index = document.getElementById('zotero-new-tag-actions').selectedIndex; + + // Search for all matching tags across all libraries + var sql = "SELECT tagID FROM tags WHERE name=?"; + var oldTagIDs = Zotero.DB.columnQuery(sql, _oldTag); + + switch (index) { + // Split + case 0: + // Get checked tags + var listbox = document.getElementById('zotero-new-tag-list'); + var len = Zotero.isFx3 ? listbox.childNodes.length : listbox.childElementCount; + var newTags = []; + for (var i=0; i + + + + + +