/** 
 | 
 * @author: Dennis Hernández 
 | 
 * @webSite: http://djhvscf.github.io/Blog 
 | 
 * @version: v1.2.0 
 | 
 * 
 | 
 * @update zhixin wen <wenzhixin2010@gmail.com> 
 | 
 */ 
 | 
  
 | 
(function ($) { 
 | 
    'use strict'; 
 | 
  
 | 
    var cookieIds = { 
 | 
        sortOrder: 'bs.table.sortOrder', 
 | 
        sortName: 'bs.table.sortName', 
 | 
        pageNumber: 'bs.table.pageNumber', 
 | 
        pageList: 'bs.table.pageList', 
 | 
        columns: 'bs.table.columns', 
 | 
        searchText: 'bs.table.searchText', 
 | 
        filterControl: 'bs.table.filterControl' 
 | 
    }; 
 | 
  
 | 
    var getCurrentHeader = function (that) { 
 | 
        var header = that.$header; 
 | 
        if (that.options.height) { 
 | 
            header = that.$tableHeader; 
 | 
        } 
 | 
  
 | 
        return header; 
 | 
    }; 
 | 
  
 | 
    var getCurrentSearchControls = function (that) { 
 | 
        var searchControls = 'select, input'; 
 | 
        if (that.options.height) { 
 | 
            searchControls = 'table select, table input'; 
 | 
        } 
 | 
  
 | 
        return searchControls; 
 | 
    }; 
 | 
  
 | 
    var cookieEnabled = function () { 
 | 
        return !!(navigator.cookieEnabled); 
 | 
    }; 
 | 
  
 | 
    var inArrayCookiesEnabled = function (cookieName, cookiesEnabled) { 
 | 
        var index = -1; 
 | 
  
 | 
        for (var i = 0; i < cookiesEnabled.length; i++) { 
 | 
            if (cookieName.toLowerCase() === cookiesEnabled[i].toLowerCase()) { 
 | 
                index = i; 
 | 
                break; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return index; 
 | 
    }; 
 | 
  
 | 
    var setCookie = function (that, cookieName, cookieValue) { 
 | 
        if ((!that.options.cookie) || (!cookieEnabled()) || (that.options.cookieIdTable === '')) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        if (inArrayCookiesEnabled(cookieName, that.options.cookiesEnabled) === -1) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        cookieName = that.options.cookieIdTable + '.' + cookieName; 
 | 
        if (!cookieName || /^(?:expires|max\-age|path|domain|secure)$/i.test(cookieName)) { 
 | 
            return false; 
 | 
        } 
 | 
  
 | 
        document.cookie = encodeURIComponent(cookieName) + '=' + encodeURIComponent(cookieValue) + calculateExpiration(that.options.cookieExpire) + (that.options.cookieDomain ? '; domain=' + that.options.cookieDomain : '') + (that.options.cookiePath ? '; path=' + that.options.cookiePath : '') + (that.cookieSecure ? '; secure' : ''); 
 | 
        return true; 
 | 
    }; 
 | 
  
 | 
    var getCookie = function (that, tableName, cookieName) { 
 | 
        if (!cookieName) { 
 | 
            return null; 
 | 
        } 
 | 
  
 | 
        if (inArrayCookiesEnabled(cookieName, that.options.cookiesEnabled) === -1) { 
 | 
            return null; 
 | 
        } 
 | 
  
 | 
        cookieName = tableName + '.' + cookieName; 
 | 
  
 | 
        return decodeURIComponent(document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + encodeURIComponent(cookieName).replace(/[\-\.\+\*]/g, '\\$&') + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1')) || null; 
 | 
    }; 
 | 
  
 | 
    var hasCookie = function (cookieName) { 
 | 
        if (!cookieName) { 
 | 
            return false; 
 | 
        } 
 | 
        return (new RegExp('(?:^|;\\s*)' + encodeURIComponent(cookieName).replace(/[\-\.\+\*]/g, '\\$&') + '\\s*\\=')).test(document.cookie); 
 | 
    }; 
 | 
  
 | 
    var deleteCookie = function (tableName, cookieName, sPath, sDomain) { 
 | 
        cookieName = tableName + '.' + cookieName; 
 | 
        if (!hasCookie(cookieName)) { 
 | 
            return false; 
 | 
        } 
 | 
        document.cookie = encodeURIComponent(cookieName) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' + (sDomain ? '; domain=' + sDomain : '') + (sPath ? '; path=' + sPath : ''); 
 | 
        return true; 
 | 
    }; 
 | 
  
 | 
    var calculateExpiration = function(cookieExpire) { 
 | 
        var time = cookieExpire.replace(/[0-9]*/, ''); //s,mi,h,d,m,y 
 | 
        cookieExpire = cookieExpire.replace(/[A-Za-z]/, ''); //number 
 | 
  
 | 
        switch (time.toLowerCase()) { 
 | 
            case 's': 
 | 
                cookieExpire = +cookieExpire; 
 | 
                break; 
 | 
            case 'mi': 
 | 
                cookieExpire = cookieExpire * 60; 
 | 
                break; 
 | 
            case 'h': 
 | 
                cookieExpire = cookieExpire * 60 * 60; 
 | 
                break; 
 | 
            case 'd': 
 | 
                cookieExpire = cookieExpire * 24 * 60 * 60; 
 | 
                break; 
 | 
            case 'm': 
 | 
                cookieExpire = cookieExpire * 30 * 24 * 60 * 60; 
 | 
                break; 
 | 
            case 'y': 
 | 
                cookieExpire = cookieExpire * 365 * 24 * 60 * 60; 
 | 
                break; 
 | 
            default: 
 | 
                cookieExpire = undefined; 
 | 
                break; 
 | 
        } 
 | 
  
 | 
        return cookieExpire === undefined ? '' : '; max-age=' + cookieExpire; 
 | 
    }; 
 | 
  
 | 
    $.extend($.fn.bootstrapTable.defaults, { 
 | 
        cookie: false, 
 | 
        cookieExpire: '2h', 
 | 
        cookiePath: null, 
 | 
        cookieDomain: null, 
 | 
        cookieSecure: null, 
 | 
        cookieIdTable: '', 
 | 
        cookiesEnabled: ['bs.table.sortOrder', 'bs.table.sortName', 'bs.table.pageNumber', 'bs.table.pageList', 'bs.table.columns', 'bs.table.searchText', 'bs.table.filterControl'], 
 | 
        //internal variable 
 | 
        filterControls: [], 
 | 
        filterControlValuesLoaded: false 
 | 
    }); 
 | 
  
 | 
    $.fn.bootstrapTable.methods.push('deleteCookie'); 
 | 
  
 | 
    var BootstrapTable = $.fn.bootstrapTable.Constructor, 
 | 
        _init = BootstrapTable.prototype.init, 
 | 
        _initTable = BootstrapTable.prototype.initTable, 
 | 
        _onSort = BootstrapTable.prototype.onSort, 
 | 
        _onPageNumber = BootstrapTable.prototype.onPageNumber, 
 | 
        _onPageListChange = BootstrapTable.prototype.onPageListChange, 
 | 
        _onPageFirst = BootstrapTable.prototype.onPageFirst, 
 | 
        _onPagePre = BootstrapTable.prototype.onPagePre, 
 | 
        _onPageNext = BootstrapTable.prototype.onPageNext, 
 | 
        _onPageLast = BootstrapTable.prototype.onPageLast, 
 | 
        _toggleColumn = BootstrapTable.prototype.toggleColumn, 
 | 
        _selectPage = BootstrapTable.prototype.selectPage, 
 | 
        _onSearch = BootstrapTable.prototype.onSearch; 
 | 
  
 | 
    BootstrapTable.prototype.init = function () { 
 | 
        var timeoutId = 0; 
 | 
        this.options.filterControls = []; 
 | 
        this.options.filterControlValuesLoaded = false; 
 | 
  
 | 
  
 | 
        this.options.cookiesEnabled = typeof this.options.cookiesEnabled === 'string' ? 
 | 
            this.options.cookiesEnabled.replace('[', '').replace(']', '').replace(/ /g, '').toLowerCase().split(',') : this.options.cookiesEnabled; 
 | 
  
 | 
        if (this.options.filterControl) { 
 | 
            var that = this; 
 | 
            this.$el.on('column-search.bs.table', function (e, field, text) { 
 | 
                var isNewField = true; 
 | 
  
 | 
                for (var i = 0; i < that.options.filterControls.length; i++) { 
 | 
                    if (that.options.filterControls[i].field === field) { 
 | 
                        that.options.filterControls[i].text = text; 
 | 
                        isNewField = false; 
 | 
                        break; 
 | 
                    } 
 | 
                } 
 | 
                if (isNewField) { 
 | 
                    that.options.filterControls.push({ 
 | 
                        field: field, 
 | 
                        text: text 
 | 
                    }); 
 | 
                } 
 | 
  
 | 
                setCookie(that, cookieIds.filterControl, JSON.stringify(that.options.filterControls)); 
 | 
            }).on('post-body.bs.table', function () { 
 | 
                setTimeout(function () { 
 | 
                    if (!that.options.filterControlValuesLoaded) { 
 | 
                        that.options.filterControlValuesLoaded = true; 
 | 
                        var filterControl = JSON.parse(getCookie(that, that.options.cookieIdTable, cookieIds.filterControl)); 
 | 
                        if (filterControl) { 
 | 
                            var field = null, 
 | 
                                result = [], 
 | 
                                header = getCurrentHeader(that), 
 | 
                                searchControls = getCurrentSearchControls(that); 
 | 
  
 | 
                            header.find(searchControls).each(function (index, ele) { 
 | 
                                field = $(this).closest('[data-field]').data('field'); 
 | 
                                result = $.grep(filterControl, function (valueObj) { 
 | 
                                    return valueObj.field === field; 
 | 
                                }); 
 | 
  
 | 
                                if (result.length > 0) { 
 | 
                                    $(this).val(result[0].text); 
 | 
                                    that.onColumnSearch({currentTarget: $(this)}); 
 | 
                                } 
 | 
                            }); 
 | 
                        } 
 | 
                    } 
 | 
                }, 250); 
 | 
            }); 
 | 
        } 
 | 
        _init.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.initTable = function () { 
 | 
        _initTable.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
        this.initCookie(); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.initCookie = function () { 
 | 
        if (!this.options.cookie) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        if ((this.options.cookieIdTable === '') || (this.options.cookieExpire === '') || (!cookieEnabled())) { 
 | 
            throw new Error("Configuration error. Please review the cookieIdTable, cookieExpire properties, if those properties are ok, then this browser does not support the cookies"); 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        var sortOrderCookie = getCookie(this, this.options.cookieIdTable, cookieIds.sortOrder), 
 | 
            sortOrderNameCookie = getCookie(this, this.options.cookieIdTable, cookieIds.sortName), 
 | 
            pageNumberCookie = getCookie(this, this.options.cookieIdTable, cookieIds.pageNumber), 
 | 
            pageListCookie = getCookie(this, this.options.cookieIdTable, cookieIds.pageList), 
 | 
            columnsCookie = JSON.parse(getCookie(this, this.options.cookieIdTable, cookieIds.columns)), 
 | 
            searchTextCookie = getCookie(this, this.options.cookieIdTable, cookieIds.searchText); 
 | 
  
 | 
        //sortOrder 
 | 
        this.options.sortOrder = sortOrderCookie ? sortOrderCookie : this.options.sortOrder; 
 | 
        //sortName 
 | 
        this.options.sortName = sortOrderNameCookie ? sortOrderNameCookie : this.options.sortName; 
 | 
        //pageNumber 
 | 
        this.options.pageNumber = pageNumberCookie ? +pageNumberCookie : this.options.pageNumber; 
 | 
        //pageSize 
 | 
        this.options.pageSize = pageListCookie ? pageListCookie === this.options.formatAllRows() ? pageListCookie : +pageListCookie : this.options.pageSize; 
 | 
        //searchText 
 | 
        this.options.searchText = searchTextCookie ? searchTextCookie : ''; 
 | 
  
 | 
        if (columnsCookie) { 
 | 
            $.each(this.columns, function (i, column) { 
 | 
                column.visible = $.inArray(column.field, columnsCookie) !== -1; 
 | 
            }); 
 | 
        } 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.onSort = function () { 
 | 
        _onSort.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
        setCookie(this, cookieIds.sortOrder, this.options.sortOrder); 
 | 
        setCookie(this, cookieIds.sortName, this.options.sortName); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.onPageNumber = function () { 
 | 
        _onPageNumber.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
        setCookie(this, cookieIds.pageNumber, this.options.pageNumber); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.onPageListChange = function () { 
 | 
        _onPageListChange.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
        setCookie(this, cookieIds.pageList, this.options.pageSize); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.onPageFirst = function () { 
 | 
        _onPageFirst.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
        setCookie(this, cookieIds.pageNumber, this.options.pageNumber); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.onPagePre = function () { 
 | 
        _onPagePre.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
        setCookie(this, cookieIds.pageNumber, this.options.pageNumber); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.onPageNext = function () { 
 | 
        _onPageNext.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
        setCookie(this, cookieIds.pageNumber, this.options.pageNumber); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.onPageLast = function () { 
 | 
        _onPageLast.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
        setCookie(this, cookieIds.pageNumber, this.options.pageNumber); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.toggleColumn = function () { 
 | 
        _toggleColumn.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
  
 | 
        var visibleColumns = []; 
 | 
  
 | 
        $.each(this.columns, function (i, column) { 
 | 
            if (column.visible) { 
 | 
                visibleColumns.push(column.field); 
 | 
            } 
 | 
        }); 
 | 
  
 | 
        setCookie(this, cookieIds.columns, JSON.stringify(visibleColumns)); 
 | 
    }; 
 | 
     
 | 
    BootstrapTable.prototype.selectPage = function (page) { 
 | 
        _selectPage.apply(this, Array.prototype.slice.apply(arguments)); 
 | 
        setCookie(this, cookieIds.pageNumber, page); 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.onSearch = function () { 
 | 
        var target = Array.prototype.slice.apply(arguments); 
 | 
        _onSearch.apply(this, target); 
 | 
  
 | 
        if ($(target[0].currentTarget).parent().hasClass('search')) { 
 | 
          setCookie(this, cookieIds.searchText, this.searchText); 
 | 
        } 
 | 
    }; 
 | 
  
 | 
    BootstrapTable.prototype.deleteCookie = function (cookieName) { 
 | 
        if ((cookieName === '') || (!cookieEnabled())) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        deleteCookie(this.options.cookieIdTable, cookieIds[cookieName], this.options.cookiePath, this.options.cookieDomain); 
 | 
    }; 
 | 
})(jQuery); 
 |