| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434 | /** * @author: Dennis Hernández * @webSite: http://djhvscf.github.io/Blog * @version: v1.2.2 * * @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;        switch(that.options.cookieStorage) {            case 'cookieStorage':                document.cookie = [                        cookieName, '=', cookieValue,                        '; expires=' + that.options.cookieExpire,                        that.options.cookiePath ? '; path=' + that.options.cookiePath : '',                        that.options.cookieDomain ? '; domain=' + that.options.cookieDomain : '',                        that.options.cookieSecure ? '; secure' : ''                    ].join('');            break;            case 'localStorage':                localStorage.setItem(cookieName, cookieValue);            break;            case 'sessionStorage':                sessionStorage.setItem(cookieName, cookieValue);            break;            default:                return false;        }        return true;    };    var getCookie = function (that, tableName, cookieName) {        if (!cookieName) {            return null;        }        if (inArrayCookiesEnabled(cookieName, that.options.cookiesEnabled) === -1) {            return null;        }        cookieName = tableName + '.' + cookieName;        switch(that.options.cookieStorage) {            case 'cookieStorage':                return decodeURIComponent(document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + encodeURIComponent(cookieName).replace(/[\-\.\+\*]/g, '\\$&') + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1')) || null;            case 'localStorage':                return localStorage.getItem(cookieName);            case 'sessionStorage':                return sessionStorage.getItem(cookieName);            default:                return null;        }    };    var deleteCookie = function (that, tableName, cookieName) {        cookieName = tableName + '.' + cookieName;                switch(that.options.cookieStorage) {            case 'cookieStorage':                document.cookie = [                        encodeURIComponent(cookieName), '=',                        '; expires=Thu, 01 Jan 1970 00:00:00 GMT',                        that.options.cookiePath ? '; path=' + that.options.cookiePath : '',                        that.options.cookieDomain ? '; domain=' + that.options.cookieDomain : '',                    ].join('');                break;            case 'localStorage':                localStorage.removeItem(cookieName);            break;            case 'sessionStorage':                sessionStorage.removeItem(cookieName);            break;        }        return true;    };    var calculateExpiration = function(cookieExpire) {        var time = cookieExpire.replace(/[0-9]*/, ''); //s,mi,h,d,m,y        cookieExpire = cookieExpire.replace(/[A-Za-z]{1,2}}/, ''); //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;    };    var initCookieFilters = function (bootstrapTable) {        setTimeout(function () {            var parsedCookieFilters = JSON.parse(getCookie(bootstrapTable, bootstrapTable.options.cookieIdTable, cookieIds.filterControl));            if (!bootstrapTable.options.filterControlValuesLoaded && parsedCookieFilters) {                bootstrapTable.options.filterControlValuesLoaded = true;                var cachedFilters = {},                    header = getCurrentHeader(bootstrapTable),                    searchControls = getCurrentSearchControls(bootstrapTable),                    applyCookieFilters = function (element, filteredCookies) {                        $(filteredCookies).each(function (i, cookie) {                            $(element).val(cookie.text);                            cachedFilters[cookie.field] = cookie.text;                        });                    };                header.find(searchControls).each(function () {                    var field = $(this).closest('[data-field]').data('field'),                        filteredCookies = $.grep(parsedCookieFilters, function (cookie) {                            return cookie.field === field;                        });                    applyCookieFilters(this, filteredCookies);                });                bootstrapTable.initColumnSearch(cachedFilters);            }        }, 250);    };    $.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'        ],        cookieStorage: 'cookieStorage', //localStorage, sessionStorage        //internal variable        filterControls: [],        filterControlValuesLoaded: false    });    $.fn.bootstrapTable.methods.push('getCookies');    $.fn.bootstrapTable.methods.push('deleteCookie');    $.extend($.fn.bootstrapTable.utils, {        setCookie: setCookie,        getCookie: getCookie    });    var BootstrapTable = $.fn.bootstrapTable.Constructor,        _init = BootstrapTable.prototype.init,        _initTable = BootstrapTable.prototype.initTable,        _initServer = BootstrapTable.prototype.initServer,        _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', initCookieFilters(that));        }        _init.apply(this, Array.prototype.slice.apply(arguments));    };    BootstrapTable.prototype.initServer = function () {        var bootstrapTable = this,            selectsWithoutDefaults = [],            columnHasSelectControl = function (column) {                return column.filterControl && column.filterControl === 'select';            },            columnHasDefaultSelectValues = function (column) {                return column.filterData && column.filterData !== 'column';            },            cookiesPresent = function() {                var cookie = JSON.parse(getCookie(bootstrapTable, bootstrapTable.options.cookieIdTable, cookieIds.filterControl));                return bootstrapTable.options.cookie && cookie;            };        selectsWithoutDefaults = $.grep(bootstrapTable.columns, function(column) {            return columnHasSelectControl(column) && !columnHasDefaultSelectValues(column);        });        // reset variable to original initServer function, so that future calls to initServer        // use the original function from this point on.        BootstrapTable.prototype.initServer = _initServer;        // early return if we don't need to populate any select values with cookie values        if (this.options.filterControl && cookiesPresent() && selectsWithoutDefaults.length === 0) {            return;        }        // call BootstrapTable.prototype.initServer        _initServer.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");        }        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.getCookies = function () {        var bootstrapTable = this;        var cookies = {};        $.each(cookieIds, function(key, value) {            cookies[key] = getCookie(bootstrapTable, bootstrapTable.options.cookieIdTable, value);            if (key === 'columns') {                cookies[key] = JSON.parse(cookies[key]);            }        });        return cookies;    };    BootstrapTable.prototype.deleteCookie = function (cookieName) {        if ((cookieName === '') || (!cookieEnabled())) {            return;        }        deleteCookie(this, this.options.cookieIdTable, cookieIds[cookieName]);    };})(jQuery);
 |