diff options
author | Ca-Phun Ung <pazu2k@gmail.com> | 2008-09-20 19:04:01 +0000 |
---|---|---|
committer | Ca-Phun Ung <pazu2k@gmail.com> | 2008-09-20 19:04:01 +0000 |
commit | dcb341e7f8a5ddc3dc94b00f9d9fc7e3867958b3 (patch) | |
tree | f963bf9921b8de00e0ec7d074e67952bf791b065 | |
parent | 77cea8f36476e4195fac38bd57fecd70d642b24d (diff) | |
download | jquery-ui-dcb341e7f8a5ddc3dc94b00f9d9fc7e3867958b3.tar.gz jquery-ui-dcb341e7f8a5ddc3dc94b00f9d9fc7e3867958b3.zip |
Spinner: new options: format, items & decimals (r728).
items: accepts a array of objects which will be converted to a list of items by the spinner.
format: printf style formatting of each item - accepts named arguments.
-rw-r--r-- | tests/visual/spinner.html | 12 | ||||
-rw-r--r-- | ui/ui.spinner.js | 36 |
2 files changed, 44 insertions, 4 deletions
diff --git a/tests/visual/spinner.html b/tests/visual/spinner.html index de05b6d25..f5b441e26 100644 --- a/tests/visual/spinner.html +++ b/tests/visual/spinner.html @@ -32,11 +32,19 @@ $(function(){ 's3': {currency: '$'}, 's4': {}, 's5': { + // + // Two methods of adding external items to the spinner + // + // method 1: on initalisation call the add method directly and format html manually init: function(ui) { for (var i=0; i<itemList.length; i++) { - ui.add(itemList[i].title +' <a href="'+ itemList[i].url +'" target="_blank">»</a>'); + ui.add('<a href="'+ itemList[i].url +'" target="_blank">'+ itemList[i].title +'</a>'); } - } + }, + + // method 2: use the format and items options in combination + format: '%(title) <a href="%(url)" target="_blank">»</a>', + items: itemList } }; diff --git a/ui/ui.spinner.js b/ui/ui.spinner.js index 98d10811d..572611b5d 100644 --- a/ui/ui.spinner.js +++ b/ui/ui.spinner.js @@ -22,6 +22,14 @@ $.widget('ui.spinner', { this.options.init(this.ui(null)); } + // perform data bind on generic objects + if (typeof this.options.items[0] == 'object' && !this.element.is('input')) { + var data = this.options.items; + for (var i=0; i<data.length; i++) { + this._addItem(data[i]); + } + } + // check for decimals in steppinng and set _decimals as internal this._decimals = parseInt(this.options.decimals); if (this.options.stepping.toString().indexOf('.') != -1) { @@ -127,6 +135,8 @@ $.widget('ui.spinner', { .css('height', this.element.outerHeight()/this._items) .children() .addClass('ui-spinner-listitem') + .css('height', this.element.outerHeight()) + .css('overflow', 'hidden') .end() .parent() .css('height', this.element.outerHeight()) @@ -234,12 +244,31 @@ $.widget('ui.spinner', { }); } }, - _addItem: function(html) { + _addItem: function(obj, fmt) { if (!this.element.is('input')) { var wrapper = 'div'; if (this.element.is('ol') || this.element.is('ul')) { wrapper = 'li'; } + var html = obj; // string or object set it to html first + + if (typeof obj == 'object') { + var format = (fmt != undefined) ? fmt : this.options.format; + + html = format.replace(/%(\(([^)]+)\))?/g, + (function(data){ + return function(match, a, lbl) { + if (!lbl) { + for (var itm in data) { + return data[itm]; // return the first item only + } + } else { + return data[lbl]; + } + } + })(obj) + ); + } this.element.append('<'+ wrapper +' class="ui-spinner-dyn">'+ html + '</'+ wrapper +'>'); } }, @@ -307,7 +336,9 @@ $.extend($.ui.spinner, { stepping: 1, start: 0, incremental: true, - currency: false + currency: false, + format: '%', + items: [] }, format: { number: function(num, dec) { @@ -329,4 +360,5 @@ $.extend($.ui.spinner, { } }); + })(jQuery); |