UserpicSelect = new Class (LJ_IPPU, { init: function () { if ( UserpicSelect.superClass.init ) UserpicSelect.superClass.init.apply(this, ["Choose Icon"]); this.setDimensions("560px", "441px"); this.selectedPicid = null; this.displayPics = null; this.dataLoaded = false; this.imgScale = 1; this.picSelectedCallback = null; var template = new Template( UserpicSelect.top ); var templates = { body: template }; this.setContent(template.exec( new Template.Context( {}, templates ) )); this.setHiddenCallback(this.hidden.bind(this)); }, show: function() { UserpicSelect.superClass.show.apply(this, []); if (!this.dataLoaded) { this.setStatus("Loading..."); this.loadPics(); this.dataLoaded = true; } else { this.redraw(); } }, // hide the hourglass when window is closed hidden: function () { if (this.hourglass) this.hourglass.hide(); }, // set a callback to be called when the "select" button is clicked setPicSelectedCallback: function (callback) { this.picSelectedCallback = callback; }, // called when the "select" button is clicked closeButtonClicked: function (evt) { if (this.picSelectedCallback) { var selectedKws = []; if (this.selectedPicid) { var kws = this.pics.pics[this.selectedPicid+""].keywords; if (kws && kws.length) selectedKws = kws; } this.picSelectedCallback(this.selectedPicid, selectedKws); } this.hide(); }, setStatus: function(status) { this.setField({'status': status}); }, setField: function(vars) { var template = new Template( UserpicSelect.dynamic ); var userpics_template = new Template( UserpicSelect.userpics ); var templates = { body: template, userpics: userpics_template }; if (!vars.pics) vars.pics = this.pics || {}; if (!vars.status) vars.status = ""; vars.imgScale = this.imgScale; $("ups_dynamic").innerHTML = (template.exec( new Template.Context( vars, templates ) )); if (!vars.pics.ids) return; // we redrew the window so reselect the current selection, if any if (this.selectedPicid) this.selectPic(this.selectedPicid); var ST = new SelectableTable(); ST.init({ "table": $("ups_userpics_t"), "selectedClass": "ups_selected_cell", "selectableClass": "ups_cell", "multiple": false, "selectableItem": "cell" }); var self = this; ST.addWatcher(function (data) { var selectedCell = data[0]; if (!selectedCell) { // clear selection self.selectPic(null); } else { // find picid and select it var parentCell = DOM.getFirstAncestorByClassName(selectedCell, "ups_cell", true); if (!parentCell) return; var picid = parentCell.getAttribute("lj_ups:picid"); if (!picid) return; self.selectPic(picid); } }); DOM.addEventListener($("ups_closebutton"), "click", this.closeButtonClicked.bindEventListener(this)); // set up image scaling buttons var scalingSizes = [3,2,1]; var baseSize = 25; var scalingBtns = $("ups_scaling_buttons"); this.scalingBtns = []; if (scalingBtns) { scalingSizes.forEach(function (scaleSize) { var scaleBtn = document.createElement("img"); scaleBtn.style.width = scaleBtn.width = scaleBtn.style.height = scaleBtn.height = baseSize - scaleSize * 5; scaleBtn.src = Site.imgprefix + "/imgscale.png"; DOM.addClassName(scaleBtn, "ups_scalebtn"); self.scalingBtns.push(scaleBtn); DOM.addEventListener(scaleBtn, "click", function (evt) { Event.stop(evt); self.imgScale = scaleSize; self.scalingBtns.forEach(function (otherBtn) { DOM.removeClassName(otherBtn, "ups_scalebtn_selected"); }); DOM.addClassName(scaleBtn, "ups_scalebtn_selected"); self.redraw(); }); scalingBtns.appendChild(scaleBtn); if (self.imgScale == scaleSize) DOM.addClassName(scaleBtn, "ups_scalebtn_selected"); }); } }, kwmenuChange: function(evt) { this.selectPic($("ups_kwmenu").value); }, selectPic: function(picid) { if (this.selectedPicid) { DOM.removeClassName($("ups_upicimg" + this.selectedPicid), "ups_selected"); DOM.removeClassName($("ups_cell" + this.selectedPicid), "ups_selected_cell"); } this.selectedPicid = picid; if (picid) { // find the current pic and cell var picimg = $("ups_upicimg" + picid); var cell = $("ups_cell" + picid); if (!picimg || !cell) return; // hilight the userpic DOM.addClassName(picimg, "ups_selected"); // hilight the cell DOM.addClassName(cell, "ups_selected_cell"); // enable the select button $("ups_closebutton").disabled = false; // select the current selectedPicid in the dropdown this.setDropdown(); } else { $("ups_closebutton").disabled = true; } }, // filter by keyword/comment filterPics: function(evt) { var searchbox = $("ups_search"); if (!searchbox) return; var filter = searchbox.value.toLocaleUpperCase(); var pics = this.pics; if (!filter) { this.setPics(pics); return; } // if there is a filter and there is selected text in the field assume that it's // inputcomplete text and ignore the rest of the selection. if (searchbox.selectionStart && searchbox.selectionStart > 0) filter = searchbox.value.substr(0, searchbox.selectionStart).toLocaleUpperCase(); var newpics = { "pics": [], "ids": [] }; for (var i=0; i