/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Keyword Chooser. * * The Initial Developer of the Original Code is America Online, Inc. * Portions created by the Initial Developer are Copyright (C) 2004 * Mozilla Foundation. All Rights Reserved. * * Contributor(s): * Christopher A. Aillon (Original Author) * * ***** END LICENSE BLOCK ***** */ function KeywordChooser(aParent, aChooser, aAvail, aChosen, aValidKeywords) { // Initialization this._parent = aParent; this._chooser = aChooser; this._available = aAvail; this._chosen = aChosen; this._validKeywords = aValidKeywords; this.setInitialStyles(); // Register us, our properties, and our events this._parent.chooser = this; this._chooser.chooserElement = this._parent; } KeywordChooser.prototype = { // chooses the selected items choose: function() { this._swapSelected(this._available, this._chosen); }, unchoose: function() { this._swapSelected(this._chosen, this._available); }, positionChooser: function() { if (this._positioned) return; bz_overlayBelow(this._chooser, this._parent); this._positioned = true; }, setInitialStyles: function() { this._chooser.style.display = "none"; this._chooser.style.position = "absolute"; this._positioned = false; }, open: function() { this._chooser.style.display = ""; this._available.style.display = ""; this._chosen.style.display = ""; this._parent.disabled = true; this.positionChooser(); }, ok: function() { var len = this._chosen.options.length; var text = ""; for (var i = 0; i < len; i++) { text += this._chosen.options[i].text; if (i != len - 1) { text += ", "; } } this._parent.value = text; this._parent.title = text; this.close(); }, cancel: function() { var chosentext = this._parent.value; var chosenArray = new Array(); if (chosentext != ""){ chosenArray = chosentext.split(", "); } var availArray = new Array(); for (var i = 0; i < this._validKeywords.length; i++) { if (!bz_isValueInArray(chosenArray, this._validKeywords[i])) { availArray[availArray.length] = this._validKeywords[i]; } } bz_populateSelectFromArray(this._available, availArray, false, true); bz_populateSelectFromArray(this._chosen, chosenArray, false, true); this.close(); }, close: function() { this._chooser.style.display = "none"; this._parent.disabled = false; }, _swapSelected: function(aSource, aTarget) { var kNothingSelected = -1; while (aSource.selectedIndex != kNothingSelected) { var option = aSource.options[aSource.selectedIndex]; aTarget.appendChild(option); option.selected = false; } } }; function InitializeKeywordChooser(aValidKeywords) { var keywords = document.getElementById("keywords"); var chooser = document.getElementById("keyword-chooser"); var avail = document.getElementById("keyword-list"); var chosen = document.getElementById("bug-keyword-list"); var chooserObj = new KeywordChooser(keywords, chooser, avail, chosen, aValidKeywords); }