diff --git a/index.html b/index.html new file mode 100644 index 0000000..771c6c8 --- /dev/null +++ b/index.html @@ -0,0 +1,65 @@ + + + + + + jQuery Plugin Month Selector + + + + + + + + + + + Fork me on GitHub +
+
+
+
+
+
+ + diff --git a/mm.itemselector.js b/mm.itemselector.js new file mode 100644 index 0000000..9ce0c3a --- /dev/null +++ b/mm.itemselector.js @@ -0,0 +1,85 @@ +/*! + * Item Selector Widget + * https://github.com/mimaison/jQueryUI-Item-Selector + * + * Depends on: + * jquery.ui.accordion.js + */ +(function($) { +'use strict'; +$.widget('mm.itemselector', { + version: '1.0.0', + + options: { + items: [], + selected: [], + callback: $.noop + }, + + _create: function() { + var self = this; + var items = this.options.items; + for (var i = 0; i < items.length; i++) { + $('

' + items[i][0] + '

').appendTo(this.element); + var div = $('
').appendTo(this.element); + for (var j = 0; j < items[i][1].length; j++) { + var html = $('

' + items[i][1][j] + '

').appendTo(div); + html.mousedown(function() { + self._select(this); + }); + } + } + $(this.element).accordion({ + heightStyle: 'content' + }); + this._setOption('selected', this.options.selected); + }, + + _select: function(element) { + $('#' + this.element.attr('id')).find('.active').each(function() { + $(this).removeClass('active'); + }); + var parts = $(element).attr('id').split('_'); + this.options.selected = [ parts[1] , parts[2] ]; + this._setTab(parseInt(this.options.selected[0], 10)); + $(element).addClass('active'); + this.options.callback(this.element, this.options.selected); + }, + + _setOption: function(key, value) { + if (key === 'selected') { + var rgx = /^\d+$/; + var i = (rgx.test(value[0])) ? value[0] : this._findKeyIndex(value[0]); + var j = (rgx.test(value[1])) ? value[1] : this._findItemIndex(i, value[1]); + var elements = $('#' + this.element.attr('id') + '_' + i + '_' + j); + if (elements.length === 1) { + this._select(elements[0]); + } + } + }, + + _findKeyIndex: function(key) { + var items = this.options.items; + for (var i = 0; i < items.length; i++) { + if (items[i][0] === key) return i; + } + return -1; + }, + + _findItemIndex: function(key, item) { + var items = this.options.items[key][1]; + for (var i = 0; i < items.length; i++) { + if (items[i] === item) return i; + } + return -1; + }, + + _setTab: function(index) { + $(this.element).accordion({ + active: index + }); + } + +}); + +}(jQuery)); \ No newline at end of file diff --git a/mm.monthselector.jquery.json b/mm.monthselector.jquery.json old mode 100644 new mode 100755 diff --git a/mm.monthselector.js b/mm.monthselector.js old mode 100644 new mode 100755 index 3c6cf4d..31be947 --- a/mm.monthselector.js +++ b/mm.monthselector.js @@ -48,8 +48,8 @@ $.widget('mm.monthselector', { _callback: function(element, item) { var callback = element.monthselector('option', 'callback'); - var names = element.monthselector('option', 'names'); if (callback !== null) { + var names = element.monthselector('option', 'names'); var end = element.monthselector('option', 'end'); var months = ((end.getFullYear() - parseInt(item[0])) === end.getFullYear()) ? end.getMonth() : 11; var month = (item[1] > 6) ? months - item[1] : Math.abs(item[1] - months); @@ -68,4 +68,4 @@ $.widget('mm.monthselector', { }); -}(jQuery)); +}(jQuery)); \ No newline at end of file