123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- /**
- * @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);
|