/** List of checkboxes. Internally value stored as javascript array of values. @class checklist @extends list @final @example **/ (function ($) { var Checklist = function (options) { this.init('checklist', options, Checklist.defaults); }; $.fn.editableform.utils.inherit(Checklist, $.fn.editableform.types.list); $.extend(Checklist.prototype, { renderList: function() { var $label, $div; if(!$.isArray(this.sourceData)) { return; } for(var i=0; i').append($('', { type: 'checkbox', value: this.sourceData[i].value, name: this.options.name })) .append($('').text(' '+this.sourceData[i].text)); $('
').append($label).appendTo(this.$input); } }, value2str: function(value) { return $.isArray(value) ? value.join($.trim(this.options.separator)) : ''; //it is also possible to sent as array //return value; }, //parse separated string str2value: function(str) { var reg, value = null; if(typeof str === 'string' && str.length) { reg = new RegExp('\\s*'+$.trim(this.options.separator)+'\\s*'); value = str.split(reg); } else if($.isArray(str)) { value = str; } return value; }, //set checked on required checkboxes value2input: function(value) { var $checks = this.$input.find('input[type="checkbox"]'); $checks.removeAttr('checked'); if($.isArray(value) && value.length) { $checks.each(function(i, el) { var $el = $(el); // cannot use $.inArray as it performs strict comparison $.each(value, function(j, val){ /*jslint eqeq: true*/ if($el.val() == val) { /*jslint eqeq: false*/ $el.attr('checked', 'checked'); } }); }); } }, input2value: function() { var checked = []; this.$input.find('input:checked').each(function(i, el) { checked.push($(el).val()); }); return checked; }, //collect text of checked boxes value2htmlFinal: function(value, element) { var selected = [], item, i, html = ''; if($.isArray(value) && value.length <= this.options.limit) { for(i=0; i').text(item.text).html()); } } html = selected.join(this.options.viewseparator); } else { html = this.options.limitText.replace('{checked}', $.isArray(value) ? value.length : 0).replace('{count}', this.sourceData.length); } $(element).html(html); }, activate: function() { this.$input.find('input[type="checkbox"]').first().focus(); } }); Checklist.defaults = $.extend({}, $.fn.editableform.types.list.defaults, { /** @property tpl @default
**/ tpl:'
', /** @property inputclass @type string @default span2 editable-checklist **/ inputclass: 'span2 editable-checklist', /** Separator of values in string when sending to server @property separator @type string @default ', ' **/ separator: ',', /** Separator of text when display as element content. @property viewseparator @type string @default '
' **/ viewseparator: '
', /** Maximum number of items shown as element content. If checked more items - limitText will be shown. @property limit @type integer @default 4 **/ limit: 4, /** Text shown when count of checked items is greater than limit parameter. You can use {checked} and {count} placeholders. @property limitText @type string @default 'Selected {checked} of {count}' **/ limitText: 'Selected {checked} of {count}' }); $.fn.editableform.types.checklist = Checklist; }(window.jQuery));