/** 
 | 
 * @author: Dennis Hernández 
 | 
 * @webSite: http://djhvscf.github.io/Blog 
 | 
 * @version: v1.1.0 
 | 
 */ 
 | 
  
 | 
!function ($) { 
 | 
  
 | 
    'use strict'; 
 | 
  
 | 
    $.extend($.fn.bootstrapTable.defaults, { 
 | 
        reorderableColumns: false, 
 | 
        maxMovingRows: 10, 
 | 
        onReorderColumn: function (headerFields) { 
 | 
            return false; 
 | 
        }, 
 | 
        dragaccept: null 
 | 
    }); 
 | 
  
 | 
    $.extend($.fn.bootstrapTable.Constructor.EVENTS, { 
 | 
        'reorder-column.bs.table': 'onReorderColumn' 
 | 
    }); 
 | 
  
 | 
    var BootstrapTable = $.fn.bootstrapTable.Constructor, 
 | 
        _initHeader = BootstrapTable.prototype.initHeader, 
 | 
        _toggleColumn = BootstrapTable.prototype.toggleColumn, 
 | 
        _toggleView = BootstrapTable.prototype.toggleView, 
 | 
        _resetView = BootstrapTable.prototype.resetView; 
 | 
  
 | 
    BootstrapTable.prototype.initHeader = function () { 
 | 
        _initHeader.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
  
 | 
        if (!this.options.reorderableColumns) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        this.makeRowsReorderable(); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.toggleColumn = function () { 
 | 
        _toggleColumn.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
  
 | 
        if (!this.options.reorderableColumns) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        this.makeRowsReorderable(); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.toggleView = function () { 
 | 
        _toggleView.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
  
 | 
        if (!this.options.reorderableColumns) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        if (this.options.cardView) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        this.makeRowsReorderable(); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.resetView = function () { 
 | 
        _resetView.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
  
 | 
        if (!this.options.reorderableColumns) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        this.makeRowsReorderable(); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.makeRowsReorderable = function () { 
 | 
        var that = this; 
 | 
        try { 
 | 
            $(this.$el).dragtable('destroy'); 
 | 
        } catch (e) {} 
 | 
        $(this.$el).dragtable({ 
 | 
            maxMovingRows: that.options.maxMovingRows, 
 | 
            dragaccept: that.options.dragaccept, 
 | 
            clickDelay:200, 
 | 
            beforeStop: function() { 
 | 
                var ths = [], 
 | 
                    formatters = [], 
 | 
                    columns = [], 
 | 
                    columnsHidden = [], 
 | 
                    columnIndex = -1; 
 | 
                that.$header.find('th').each(function (i) { 
 | 
                    ths.push($(this).data('field')); 
 | 
                    formatters.push($(this).data('formatter')); 
 | 
                }); 
 | 
  
 | 
                //Exist columns not shown 
 | 
                if (ths.length < that.columns.length) { 
 | 
                    columnsHidden = $.grep(that.columns, function (column) { 
 | 
                       return !column.visible; 
 | 
                    }); 
 | 
                    for (var i = 0; i < columnsHidden.length; i++) { 
 | 
                        ths.push(columnsHidden[i].field); 
 | 
                        formatters.push(columnsHidden[i].formatter); 
 | 
                    } 
 | 
                } 
 | 
  
 | 
                for (var i = 0; i < ths.length; i++ ) { 
 | 
                    columnIndex = $.fn.bootstrapTable.utils.getFieldIndex(that.columns, ths[i]); 
 | 
                    if (columnIndex !== -1) { 
 | 
                        columns.push(that.columns[columnIndex]); 
 | 
                        that.columns.splice(columnIndex, 1); 
 | 
                    } 
 | 
                } 
 | 
  
 | 
                that.columns = that.columns.concat(columns); 
 | 
                that.header.fields = ths; 
 | 
                that.header.formatters = formatters; 
 | 
                that.resetView(); 
 | 
                that.trigger('reorder-column', ths); 
 | 
            } 
 | 
        }); 
 | 
    }; 
 | 
}(jQuery); 
 |