From d9ab0a9ce84000674b3e85ec9ae25f4ef1e1eea7 Mon Sep 17 00:00:00 2001 From: Nathan Gray Date: Tue, 23 Aug 2011 00:12:01 +0000 Subject: [PATCH] - Fix empty label - Add readonly for selectbox --- etemplate/js/et2_selectbox.js | 48 +++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/etemplate/js/et2_selectbox.js b/etemplate/js/et2_selectbox.js index faa5eb1096..492b5b3636 100644 --- a/etemplate/js/et2_selectbox.js +++ b/etemplate/js/et2_selectbox.js @@ -51,12 +51,18 @@ var et2_selectbox = et2_inputWidget.extend({ legacyOptions: ["rows"], - init: function(_parent) { + init: function(_parent, _attrs) { this._super.apply(this, arguments); // Only allow options inside this element this.supportedWidgetClasses = [et2_option]; + // Legacy options could have row count or empty label in first slot + if(typeof _attrs.rows == "string" && isNaN(_attrs.rows)) { + this.options.empty_label = _attrs.rows; + this.options.rows = 1; + } + if(this.options.rows > 1) this.options.multiple = true; this.createInputWidget(); }, @@ -65,7 +71,6 @@ var et2_selectbox = et2_inputWidget.extend({ this.input = null; }, - transformAttributes: function(_attrs) { // Try to find the options inside the "sel-options" array _attrs["select_options"] = this.getArrayMgr("sel_options").getValueForID(this.id); @@ -104,7 +109,7 @@ var et2_selectbox = et2_inputWidget.extend({ if(this.options.empty_label) { this._appendOptionElement("" == this.getValue() ? "selected" : "", - this.empty_label); + this.options.empty_label); } // Set multiple @@ -145,7 +150,6 @@ var et2_selectbox = et2_inputWidget.extend({ new et2_option(root, attrs); } } - }); et2_register_widget(et2_selectbox, ["menupopup", "listbox", "select-cat", @@ -154,6 +158,40 @@ et2_register_widget(et2_selectbox, ["menupopup", "listbox", "select-cat", 'select-day', 'select-dow', 'select-hour', 'date-houronly', 'select-number', 'select-app', 'select-lang', 'select-bool', 'select-timezone' ]); +/** + * et2_selectbox_ro is the readonly implementation of the selectbox. + */ +var et2_selectbox_ro = et2_selectbox.extend({ + + init: function(_parent, _attrs) { + this._super.apply(this, arguments); + + this.supportedWidgetClasses = []; + }, + + createInputWidget: function() { + this.span = $j(document.createElement("span")) + .addClass("et2_selectbox readonly") + .text(this.options.empty_label); + + this.setDOMNode(this.span[0]); + }, + set_select_options: function(_options) { + this.select_options = _options; + }, + + set_value: function(_value) { + this.value = _value; + this.span.text(this.select_options[_value]); + } +}); + +et2_register_widget(et2_selectbox_ro, ["menupopup_ro", "listbox_ro", "select-cat_ro", + "select-account_ro", "select-percent_ro", 'select-priority_ro', 'select-access_ro', + 'select-country_ro', 'select-state_ro', 'select-year_ro', 'select-month_ro', + 'select-day_ro', 'select-dow_ro', 'select-hour_ro', 'date-houronly_ro', 'select-number_ro', 'select-app_ro', + 'select-lang_ro', 'select-bool_ro', 'select-timezone_ro' ]); + /** * Widget class which represents a single option inside a selectbox */ @@ -227,7 +265,7 @@ var et2_menulist = et2_DOMWidget.extend({ init: function() { this._super.apply(this, arguments); - this.supportedWidgetClasses = [et2_selectbox]; + this.supportedWidgetClasses = [et2_selectbox, et2_selectbox_ro]; }, // Just pass the parent DOM node through