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);
|