/* * Copyright (C) 2005-2007 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Prerequisites: common.js * mootools.v1.11.js */ // Picker class definition var AlfPicker = new Class( { /* id of the picker */ id: null, /* variable name being used */ varName: null, /* form Id to submit when selection complete */ formClientId: null, /* the item the picker will start with */ startId: null, /* list of items currently selected */ selected: null, /* the current parent being shown */ parent: null, /* the list of items currently displayed */ items: [], /* parent stack for the Navigate Up action*/ stack: [], /* row type toggle */ oddRow: true, /* ajax service call to retrieve data */ service: null, /* default icon to use if not provided by the associated service */ defaultIcon: null, /* single selection mode flag */ singleSelect: false, /* initial display style of the outer div */ initialDisplayStyle: null, initialize: function(id, varName, service, formClientId, singleSelect) { this.id = id; this.varName = varName; this.service = service; this.formClientId = formClientId; if (singleSelect != undefined) { this.singleSelect = singleSelect; } }, setDefaultIcon: function(icon) { this.defaultIcon = icon; }, setStartId: function(id) { this.startId = id; }, showSelector: function() { // init selector state this.selected = []; this.stack = []; this.initialDisplayStyle = $(this.id + "-noitems").getStyle("display"); $(this.id + "-selector").setStyle("display", "block"); $(this.id + "-selected").empty(); $(this.id + "-selected").setStyle("display", "block"); $(this.id + "-noitems").setStyle("display", "none"); if (this.singleSelect) { $(this.id + "-finish").setStyle("display", "none"); } // first ajax request for the children of the start item this.getChildData(this.startId, this.populateChildren); }, childClicked: function(index) { this.hidePanels(); var item = this.items[index]; // add an extra property to record the scroll position for this item item.scrollpos = $(this.id + "-results-list").scrollTop; this.stack.push(item); // ready for the breadcrumb redraw after the child data request this.getChildData(item.id, this.populateChildren) }, upClicked: function() { this.hidePanels(); // pop the parent off - peek for the grandparent var parent = this.stack.pop(); var grandParent = this.stack[this.stack.length-1]; this.getChildData(grandParent != null ? grandParent.id : null, this.populateChildren, parent.scrollpos); }, addItem: function(index) { var item; if (index != -1) { item = this.items[index]; } else { item = this.parent; } // add item to list of selected items this.selected.push(item); if (this.singleSelect) { this.doneClicked(); } else { // add the item to list above the selector var itemId = this.id + "-sel-" + item.id; var itemDiv = new Element("div", {"id": itemId, "class": "pickerSelectedItem"}); var itemSpan = new Element("span", {"class": "pickerSelectedItemText"}); itemSpan.appendText(item.name); itemSpan.injectInside(itemDiv); var actionSpan = new Element("span", {"class": "pickerSelectedItemAction"}); var actionScript = "javascript:" + this.varName + ".delItem('" + item.id + "');"; var actionLink = new Element("a", {"href": actionScript}); var deleteIcon = new Element("img", {"src": getContextPath() + "/images/icons/minus.gif", "class": "pickerSelectedIcon", "border": 0, "title": "Remove", "alt": "Remove"}); deleteIcon.injectInside(actionLink); actionLink.injectInside(actionSpan); actionSpan.injectInside(itemDiv); // add mouse enter/leave enter to toggle delete icon (and toggle margin on outer div) itemDiv.addEvent('mouseenter', function(e) { $E('.pickerSelectedIcon', itemDiv).setStyle("opacity", 1); }); itemDiv.addEvent('mouseleave', function(e) { $E('.pickerSelectedIcon', itemDiv).setStyle("opacity", 0); }); // add the item to the main selected item div itemDiv.injectInside($(this.id + "-selected")); // set the background image now the itemdiv has been added to the DOM (for IE) itemDiv.setStyle("background-image", "url(" + getContextPath() + item.icon + ")"); // set opacity the style now the item has been added to the DOM (for IE) $E('.pickerSelectedIcon', itemDiv).setStyle("opacity", 0); // apply the effect var fx = new Fx.Styles(itemDiv, {duration: 1000, wait: false, transition: Fx.Transitions.Quad.easeOut}); fx.start({'background-color': ['#faf7ce', '#ffffff']}); // hide the Add button as this item is now added $(this.id + "-add-" + item.id).setStyle("display", "none"); } }, delItem: function(itemId) { // remove item from the selected items list for (i=0; i b.name) ? 1 : 0)); } });