| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 | 
							- /**
 
-  * @author: Yura Knoxville
 
-  * @version: v1.0.0
 
-  */
 
- !function ($) {
 
-     'use strict';
 
-     var initBodyCaller,
 
-         tableGroups;
 
-     // it only does '%s', and return '' when arguments are undefined
 
-     var sprintf = function (str) {
 
-         var args = arguments,
 
-             flag = true,
 
-             i = 1;
 
-         str = str.replace(/%s/g, function () {
 
-             var arg = args[i++];
 
-             if (typeof arg === 'undefined') {
 
-                 flag = false;
 
-                 return '';
 
-             }
 
-             return arg;
 
-         });
 
-         return flag ? str : '';
 
-     };
 
-     var groupBy = function (array , f) {
 
-         var groups = {};
 
-         array.forEach(function(o) {
 
-             var group = f(o);
 
-             groups[group] = groups[group] || [];
 
-             groups[group].push(o);
 
-         });
 
-         return groups;
 
-     };
 
-     $.extend($.fn.bootstrapTable.defaults, {
 
-         groupBy: false,
 
-         groupByField: ''
 
-     });
 
-     var BootstrapTable = $.fn.bootstrapTable.Constructor,
 
-         _initSort = BootstrapTable.prototype.initSort,
 
-         _initBody = BootstrapTable.prototype.initBody,
 
-         _updateSelected = BootstrapTable.prototype.updateSelected;
 
-     BootstrapTable.prototype.initSort = function () {
 
-         _initSort.apply(this, Array.prototype.slice.apply(arguments));
 
-         var that = this;
 
-         tableGroups = [];
 
-         if ((this.options.groupBy) && (this.options.groupByField !== '')) {
 
-             if ((this.options.sortName != this.options.groupByField)) {
 
-                 this.data.sort(function(a, b) {
 
-                     return a[that.options.groupByField].localeCompare(b[that.options.groupByField]);
 
-                 });
 
-             }
 
-             var that = this;
 
-             var groups = groupBy(that.data, function (item) {
 
-                 return [item[that.options.groupByField]];
 
-             });
 
-             var index = 0;
 
-             $.each(groups, function(key, value) {
 
-                 tableGroups.push({
 
-                     id: index,
 
-                     name: key
 
-                 });
 
-                 value.forEach(function(item) {
 
-                     if (!item._data) {
 
-                         item._data = {};
 
-                     }
 
-                     item._data['parent-index'] = index;
 
-                 });
 
-                 index++;
 
-             });
 
-         }
 
-     }
 
-     BootstrapTable.prototype.initBody = function () {
 
-         initBodyCaller = true;
 
-         _initBody.apply(this, Array.prototype.slice.apply(arguments));
 
-         if ((this.options.groupBy) && (this.options.groupByField !== '')) {
 
-             var that = this,
 
-                 checkBox = false,
 
-                 visibleColumns = 0;
 
-             this.columns.forEach(function(column) {
 
-                 if (column.checkbox) {
 
-                     checkBox = true;
 
-                 } else {
 
-                     if (column.visible) {
 
-                         visibleColumns += 1;
 
-                     }
 
-                 }
 
-             });
 
-             if (this.options.detailView && !this.options.cardView) {
 
-                 visibleColumns += 1;
 
-             }
 
-             tableGroups.forEach(function(item){
 
-                 var html = [];
 
-                 html.push(sprintf('<tr class="info groupBy expanded" data-group-index="%s">', item.id));
 
-                 if (that.options.detailView && !that.options.cardView) {
 
-                     html.push('<td class="detail"></td>');
 
-                 }
 
-                 if (checkBox) {
 
-                     html.push('<td class="bs-checkbox">',
 
-                         '<input name="btSelectGroup" type="checkbox" />',
 
-                         '</td>'
 
-                     );
 
-                 }
 
-                 html.push('<td',
 
-                     sprintf(' colspan="%s"', visibleColumns),
 
-                     '>', item.name, '</td>'
 
-                 );
 
-                 html.push('</tr>');
 
-                 that.$body.find('tr[data-parent-index='+item.id+']:first').before($(html.join('')));
 
-             });
 
-             this.$selectGroup = [];
 
-             this.$body.find('[name="btSelectGroup"]').each(function() {
 
-                 var self = $(this);
 
-                 that.$selectGroup.push({
 
-                     group: self,
 
-                     item: that.$selectItem.filter(function () {
 
-                         return ($(this).closest('tr').data('parent-index') ===
 
-                         self.closest('tr').data('group-index'));
 
-                     })
 
-                 });
 
-             });
 
-             this.$container.off('click', '.groupBy')
 
-                 .on('click', '.groupBy', function() {
 
-                     $(this).toggleClass('expanded');
 
-                     that.$body.find('tr[data-parent-index='+$(this).closest('tr').data('group-index')+']').toggleClass('hidden');
 
-                 });
 
-             this.$container.off('click', '[name="btSelectGroup"]')
 
-                 .on('click', '[name="btSelectGroup"]', function (event) {
 
-                     event.stopImmediatePropagation();
 
-                     var self = $(this);
 
-                     var checked = self.prop('checked');
 
-                     that[checked ? 'checkGroup' : 'uncheckGroup']($(this).closest('tr').data('group-index'));
 
-                 });
 
-         }
 
-         initBodyCaller = false;
 
-         this.updateSelected();
 
-     };
 
-     BootstrapTable.prototype.updateSelected = function () {
 
-         if (!initBodyCaller) {
 
-             _updateSelected.apply(this, Array.prototype.slice.apply(arguments));
 
-             if ((this.options.groupBy) && (this.options.groupByField !== '')) {
 
-                 this.$selectGroup.forEach(function (item) {
 
-                     var checkGroup = item.item.filter(':enabled').length ===
 
-                         item.item.filter(':enabled').filter(':checked').length;
 
-                     item.group.prop('checked', checkGroup);
 
-                 });
 
-             }
 
-         }
 
-     };
 
-     BootstrapTable.prototype.getGroupSelections = function (index) {
 
-         var that = this;
 
-         return $.grep(this.data, function (row) {
 
-             return (row[that.header.stateField] && (row._data['parent-index'] === index));
 
-         });
 
-     };
 
-     BootstrapTable.prototype.checkGroup = function (index) {
 
-         this.checkGroup_(index, true);
 
-     };
 
-     BootstrapTable.prototype.uncheckGroup = function (index) {
 
-         this.checkGroup_(index, false);
 
-     };
 
-     BootstrapTable.prototype.checkGroup_ = function (index, checked) {
 
-         var rows;
 
-         var filter = function() {
 
-             return ($(this).closest('tr').data('parent-index') === index);
 
-         };
 
-         if (!checked) {
 
-             rows = this.getGroupSelections(index);
 
-         }
 
-         this.$selectItem.filter(filter).prop('checked', checked);
 
-         this.updateRows();
 
-         this.updateSelected();
 
-         if (checked) {
 
-             rows = this.getGroupSelections(index);
 
-         }
 
-         this.trigger(checked ? 'check-all' : 'uncheck-all', rows);
 
-     };
 
- }(jQuery);
 
 
  |