djhvscf 7 年 前
コミット
8068b49af2

+ 391 - 397
src/extensions/cookie/bootstrap-table-cookie.js

@@ -1,413 +1,407 @@
 /**
  * @author: Dennis Hernández
  * @webSite: http://djhvscf.github.io/Blog
- * @version: v1.2.3
+ * @version: v1.2.4
  *
  * @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;
+($ => {
+  const UtilsCookie = {
+    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',
+      filterBy: 'bs.table.filterBy'
+    },
+    getCurrentHeader (that) {
+      let header = that.$header
+      if (that.options.height) {
+        header = that.$tableHeader
+      }
+
+      return header
+    },
+    getCurrentSearchControls (that) {
+      let searchControls = 'select, input'
+      if (that.options.height) {
+        searchControls = 'table select, table input'
+      }
+
+      return searchControls
+    },
+    cookieEnabled () {
+      return !!(navigator.cookieEnabled)
+    },
+    inArrayCookiesEnabled (cookieName, cookiesEnabled) {
+      let index = -1
+
+      for (let i = 0; i < cookiesEnabled.length; i++) {
+        if (cookieName.toLowerCase() === cookiesEnabled[i].toLowerCase()) {
+          index = i
+          break
         }
-
-        return header;
-    };
-
-    var getCurrentSearchControls = function (that) {
-        var searchControls = 'select, input';
-        if (that.options.height) {
-            searchControls = 'table select, table input';
+      }
+
+      return index
+    },
+    setCookie (that, cookieName, cookieValue) {
+      if ((!that.options.cookie) || (!UtilsCookie.cookieEnabled()) || (that.options.cookieIdTable === '')) {
+        return
+      }
+
+      if (UtilsCookie.inArrayCookiesEnabled(cookieName, that.options.cookiesEnabled) === -1) {
+        return
+      }
+
+      cookieName = that.options.cookieIdTable + '.' + cookieName
+
+      switch (that.options.cookieStorage) {
+        case 'cookieStorage':
+          document.cookie = [
+            cookieName, '=', cookieValue,
+            '; expires=' + UtilsCookie.calculateExpiration(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
+    },
+    getCookie (that, tableName, cookieName) {
+      if (!cookieName) {
+        return null
+      }
+
+      if (UtilsCookie.inArrayCookiesEnabled(cookieName, that.options.cookiesEnabled) === -1) {
+        return null
+      }
+
+      cookieName = tableName + '.' + cookieName
+
+      switch (that.options.cookieStorage) {
+        case 'cookieStorage':
+          const value = '; ' + document.cookie
+          const parts = value.split('; ' + cookieName + '=')
+          return parts.length === 2 ? parts.pop().split(';').shift() : null
+        case 'localStorage':
+          return localStorage.getItem(cookieName)
+        case 'sessionStorage':
+          return sessionStorage.getItem(cookieName)
+        default:
+          return null
+      }
+    },
+    deleteCookie (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
+        default:
+          return false
+      }
+      return true
+    },
+    calculateExpiration (cookieExpire) {
+      const 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 *= 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
+      }
+      if (!cookieExpire) {
+        return ''
+      }
+      const d = new Date()
+      d.setTime(d.getTime() + cookieExpire * 1000)
+      return d.toGMTString()
+    },
+    initCookieFilters (bootstrapTable) {
+      setTimeout(function () {
+        const parsedCookieFilters = JSON.parse(UtilsCookie.getCookie(bootstrapTable, bootstrapTable.options.cookieIdTable, UtilsCookie.cookieIds.filterControl))
+
+        if (!bootstrapTable.options.filterControlValuesLoaded && parsedCookieFilters) {
+
+          const cachedFilters = {}
+          const header = UtilsCookie.getCurrentHeader(bootstrapTable)
+          const searchControls = UtilsCookie.getCurrentSearchControls(bootstrapTable)
+
+          const applyCookieFilters = function (element, filteredCookies) {
+            $(filteredCookies).each(function (i, cookie) {
+              if (cookie.text !== '') {
+                $(element).val(cookie.text)
+                cachedFilters[cookie.field] = cookie.text
+              }
+            })
+          }
+
+          header.find(searchControls).each(function () {
+            const field = $(this).closest('[data-field]').data('field')
+            const filteredCookies = $.grep(parsedCookieFilters, function (cookie) {
+              return cookie.field === field
+            })
+
+            applyCookieFilters(this, filteredCookies)
+          })
+
+          bootstrapTable.initColumnSearch(cachedFilters)
+          bootstrapTable.options.filterControlValuesLoaded = true
+          bootstrapTable.initServer()
         }
-
-        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;
+      }, 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', 'bs.table.filterBy'
+    ],
+    cookieStorage: 'cookieStorage', // localStorage, sessionStorage
+    // internal variable
+    filterControls: [],
+    filterControlValuesLoaded: false
+  })
+
+  $.fn.bootstrapTable.methods.push('getCookies')
+  $.fn.bootstrapTable.methods.push('deleteCookie')
+
+  $.extend($.fn.bootstrapTable.utils, {
+    setCookie: UtilsCookie.setCookie,
+    getCookie: UtilsCookie.getCookie
+  })
+
+  $.BootstrapTable = class extends $.BootstrapTable {
+    init () {
+      // FilterBy logic
+      const filterByCookie = JSON.parse(UtilsCookie.getCookie(this, this.options.cookieIdTable, UtilsCookie.cookieIds.filterBy))
+      this.filterColumns = filterByCookie ? filterByCookie : {}
+
+      // FilterControl logic
+      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) {
+        const that = this
+        this.$el.on('column-search.bs.table', function (e, field, text) {
+          let isNewField = true
+
+          for (let 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
+            })
+          }
+
+          UtilsCookie.setCookie(that, UtilsCookie.cookieIds.filterControl, JSON.stringify(that.options.filterControls))
+        }).on('created-controls.bs.table', UtilsCookie.initCookieFilters(that))
+      }
+      super.init()
+    }
+
+    initServer () {
+      const bootstrapTable = this
+      if (bootstrapTable.options.cookie && bootstrapTable.options.filterControl && !bootstrapTable.options.filterControlValuesLoaded) {
+        const cookie = JSON.parse(UtilsCookie.getCookie(bootstrapTable, bootstrapTable.options.cookieIdTable, UtilsCookie.cookieIds.filterControl))
+        if (cookie) {
+          return
         }
-
-        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=' + calculateExpiration(that.options.cookieExpire),
-                    that.options.cookiePath ? '; path=' + that.options.cookiePath : '',
-                    that.options.cookieDomain ? '; domain=' + that.options.cookieDomain : '',
-                    that.options.cookieSecure ? '; secure' : ''
-                ].join('');
-            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':
-                var value = '; ' + document.cookie;
-                var parts = value.split('; ' + cookieName + '=');
-                return parts.length === 2 ? parts.pop().split(';').shift() : 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;
+      }
+      super.initServer()
+    }
+
+    initTable () {
+      super.initTable()
+      this.initCookie()
+    }
+
+    onSort () {
+      super.onSort()
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.sortOrder, this.options.sortOrder)
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.sortName, this.options.sortName)
+    }
+
+    onPageNumber () {
+      super.onPageNumber()
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, this.options.pageNumber)
+      return false
+    }
+
+    onPageListChange () {
+      super.onPageListChange()
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageList, this.options.pageSize)
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, this.options.pageNumber)
+      return false
+    }
+
+    onPagePre () {
+      super.onPagePre()
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, this.options.pageNumber)
+      return false
+    }
+
+    onPageNext () {
+      super.onPageNext()
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, this.options.pageNumber)
+      return false
+    }
+
+    toggleColumn () {
+      super.toggleColumn()
+
+      const visibleColumns = []
+
+      $.each(this.columns, function (i, column) {
+        if (column.visible) {
+          visibleColumns.push(column.field)
         }
-        if (!cookieExpire) {
-            return '';
-        }
-        var d = new Date();
-        d.setTime(d.getTime() + cookieExpire * 1000);
-        return d.toGMTString();
-    };
-
-    var initCookieFilters = function (bootstrapTable) {
-        setTimeout(function () {
-            var parsedCookieFilters = JSON.parse(getCookie(bootstrapTable, bootstrapTable.options.cookieIdTable, cookieIds.filterControl));
-
-            if (!bootstrapTable.options.filterControlValuesLoaded && parsedCookieFilters) {
-
-                var cachedFilters = {},
-                    header = getCurrentHeader(bootstrapTable),
-                    searchControls = getCurrentSearchControls(bootstrapTable),
-
-                    applyCookieFilters = function (element, filteredCookies) {
-                        $(filteredCookies).each(function (i, cookie) {
-                            if (cookie.text !== '') {
-                                $(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);
-                bootstrapTable.options.filterControlValuesLoaded = true;
-                bootstrapTable.initServer();
-            }
-        }, 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,
-        _onPagePre = BootstrapTable.prototype.onPagePre,
-        _onPageNext = BootstrapTable.prototype.onPageNext,
-        _toggleColumn = BootstrapTable.prototype.toggleColumn,
-        _selectPage = BootstrapTable.prototype.selectPage,
-        _onSearch = BootstrapTable.prototype.onSearch;
-
-    BootstrapTable.prototype.init = function () {
-        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('created-controls.bs.table', initCookieFilters(that));
-        }
-        _init.apply(this, Array.prototype.slice.apply(arguments));
-    };
-
-    BootstrapTable.prototype.initServer = function () {
-        var bootstrapTable = this;
-        if (bootstrapTable.options.cookie && bootstrapTable.options.filterControl && !bootstrapTable.options.filterControlValuesLoaded) {
-            var cookie = JSON.parse(getCookie(bootstrapTable, bootstrapTable.options.cookieIdTable, cookieIds.filterControl));
-            if (cookie)
-                return;
-        }
-        _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())) {
-            console.error("Configuration error. Please review the cookieIdTable, cookieExpire properties, if those properties are ok, then this browser does not support the cookies");
-            this.options.cookie = false; //Make sure that the cookie extension is disabled
-            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);
-        return false;
-    };
-
-    BootstrapTable.prototype.onPageListChange = function () {
-        _onPageListChange.apply(this, Array.prototype.slice.apply(arguments));
-        setCookie(this, cookieIds.pageList, this.options.pageSize);
-        setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
-        return false;
-    };
-
-    BootstrapTable.prototype.onPagePre = function () {
-        _onPagePre.apply(this, Array.prototype.slice.apply(arguments));
-        setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
-        return false;
-    };
-
-    BootstrapTable.prototype.onPageNext = function () {
-        _onPageNext.apply(this, Array.prototype.slice.apply(arguments));
-        setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
-        return false;
-    };
-
-    BootstrapTable.prototype.toggleColumn = function () {
-        _toggleColumn.apply(this, Array.prototype.slice.apply(arguments));
-
-        var visibleColumns = [];
-
+      })
+
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.columns, JSON.stringify(visibleColumns))
+    }
+
+    selectPage (page) {
+      super.selectPage()
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, page)
+    }
+
+    onSearch () {
+      const target = Array.prototype.slice.apply(arguments)
+      super.onSearch(this, target)
+
+      if ($(target[0].currentTarget).parent().hasClass('search')) {
+        UtilsCookie.setCookie(this, UtilsCookie.cookieIds.searchText, this.searchText)
+      }
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, this.options.pageNumber)
+    }
+
+    filterBy () {
+      super.filterBy()
+      UtilsCookie.setCookie(this, UtilsCookie.cookieIds.filterBy, JSON.stringify(this.filterColumns))
+    }
+
+    initCookie () {
+      if (!this.options.cookie) {
+        return
+      }
+
+      if ((this.options.cookieIdTable === '') || (this.options.cookieExpire === '') || (!UtilsCookie.cookieEnabled())) {
+        console.error('Configuration error. Please review the cookieIdTable and the cookieExpire property. If the properties are correct, then this browser does not support cookies.')
+        this.options.cookie = false // Make sure that the cookie extension is disabled
+        return
+      }
+
+      const sortOrderCookie = UtilsCookie.getCookie(this, this.options.cookieIdTable, UtilsCookie.cookieIds.sortOrder)
+      const sortOrderNameCookie = UtilsCookie.getCookie(this, this.options.cookieIdTable, UtilsCookie.cookieIds.sortName)
+      const pageNumberCookie = UtilsCookie.getCookie(this, this.options.cookieIdTable, UtilsCookie.cookieIds.pageNumber)
+      const pageListCookie = UtilsCookie.getCookie(this, this.options.cookieIdTable, UtilsCookie.cookieIds.pageList)
+      const columnsCookie = JSON.parse(UtilsCookie.getCookie(this, this.options.cookieIdTable, UtilsCookie.cookieIds.columns))
+      const searchTextCookie = UtilsCookie.getCookie(this, this.options.cookieIdTable, UtilsCookie.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) {
-            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);
+          column.visible = $.inArray(column.field, columnsCookie) !== -1
+        })
+      }
+    }
+
+    getCookies () {
+      const bootstrapTable = this
+      const cookies = {}
+      $.each(UtilsCookie.cookieIds, function (key, value) {
+        cookies[key] = UtilsCookie.getCookie(bootstrapTable, bootstrapTable.options.cookieIdTable, value)
+        if (key === 'columns') {
+          cookies[key] = JSON.parse(cookies[key])
         }
-        setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
-    };
-
-    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;
-    };
+      })
+      return cookies
+    }
 
-    BootstrapTable.prototype.deleteCookie = function (cookieName) {
-        if ((cookieName === '') || (!cookieEnabled())) {
-            return;
-        }
+    deleteCookie (cookieName) {
+      if ((cookieName === '') || (!UtilsCookie.cookieEnabled())) {
+        return
+      }
+
+      UtilsCookie.deleteCookie(this, this.options.cookieIdTable, UtilsCookie.cookieIds[cookieName])
+    }
+  }
 
-        deleteCookie(this, this.options.cookieIdTable, cookieIds[cookieName]);
-    };
-})(jQuery);
+})(jQuery)

+ 42 - 42
src/extensions/filter-control/bootstrap-table-filter-control.js

@@ -7,11 +7,11 @@
 ($ => {
   const Utils = $.fn.bootstrapTable.utils
   const UtilsFilterControl = {
-    getOptionsFromSelectControl(selectControl) {
+    getOptionsFromSelectControl (selectControl) {
       return selectControl.get(selectControl.length - 1).options
     },
 
-    hideUnusedSelectOptions(selectControl, uniqueValues) {
+    hideUnusedSelectOptions (selectControl, uniqueValues) {
       const options = UtilsFilterControl.getOptionsFromSelectControl(
         selectControl
       )
@@ -30,7 +30,7 @@
         }
       }
     },
-    addOptionToSelectControl(selectControl, _value, text) {
+    addOptionToSelectControl (selectControl, _value, text) {
       const value = $.trim(_value)
       const $selectControl = $(selectControl.get(selectControl.length - 1))
       if (
@@ -47,7 +47,7 @@
         )
       }
     },
-    sortSelectControl(selectControl) {
+    sortSelectControl (selectControl) {
       const $selectControl = $(selectControl.get(selectControl.length - 1))
       const $opts = $selectControl.find('option:gt(0)')
 
@@ -65,7 +65,7 @@
       $selectControl.find('option:gt(0)').remove()
       $selectControl.append($opts)
     },
-    existOptionInSelectControl(selectControl, value) {
+    existOptionInSelectControl (selectControl, value) {
       const options = UtilsFilterControl.getOptionsFromSelectControl(
         selectControl
       )
@@ -79,10 +79,10 @@
       // If we get here, the value is valid to add
       return false
     },
-    fixHeaderCSS({ $tableHeader }) {
+    fixHeaderCSS ({ $tableHeader }) {
       $tableHeader.css('height', '77px')
     },
-    getCurrentHeader({ $header, options, $tableHeader }) {
+    getCurrentHeader ({ $header, options, $tableHeader }) {
       let header = $header
       if (options.height) {
         header = $tableHeader
@@ -90,7 +90,7 @@
 
       return header
     },
-    getCurrentSearchControls({ options }) {
+    getCurrentSearchControls ({ options }) {
       let searchControls = 'select, input'
       if (options.height) {
         searchControls = 'table select, table input'
@@ -98,7 +98,7 @@
 
       return searchControls
     },
-    getCursorPosition(el) {
+    getCursorPosition (el) {
       if (Utils.isIEBrowser()) {
         if ($(el).is('input[type=text]')) {
           let pos = 0
@@ -118,10 +118,10 @@
       }
       return -1
     },
-    setCursorPosition(el) {
+    setCursorPosition (el) {
       $(el).val(el.value)
     },
-    copyValues(that) {
+    copyValues (that) {
       const header = UtilsFilterControl.getCurrentHeader(that)
       const searchControls = UtilsFilterControl.getCurrentSearchControls(that)
 
@@ -138,7 +138,7 @@
         })
       })
     },
-    setValues(that) {
+    setValues (that) {
       let field = null
       let result = []
       const header = UtilsFilterControl.getCurrentHeader(that)
@@ -175,7 +175,7 @@
         }
       }
     },
-    collectBootstrapCookies() {
+    collectBootstrapCookies () {
       const cookies = []
       const foundCookies = document.cookie.match(/(?:bs.table.)(\w*)/g)
 
@@ -193,22 +193,22 @@
         return cookies
       }
     },
-    escapeID(id) {
+    escapeID (id) {
       return String(id).replace(/(:|\.|\[|\]|,)/g, '\\$1')
     },
-    isColumnSearchableViaSelect({ filterControl, searchable }) {
+    isColumnSearchableViaSelect ({ filterControl, searchable }) {
       return filterControl &&
         filterControl.toLowerCase() === 'select' &&
         searchable
     },
-    isFilterDataNotGiven({ filterData }) {
+    isFilterDataNotGiven ({ filterData }) {
       return filterData === undefined ||
         filterData.toLowerCase() === 'column'
     },
-    hasSelectControlElement(selectControl) {
+    hasSelectControlElement (selectControl) {
       return selectControl && selectControl.length > 0
     },
-    initFilterSelectControls(that) {
+    initFilterSelectControls (that) {
       const data = that.data
       const itemsPerPage = that.pageTo < that.options.data.length ? that.options.data.length : that.pageTo
       const z = that.options.pagination
@@ -255,7 +255,7 @@
 
       that.trigger('created-controls')
     },
-    getFilterDataMethod(objFilterDataMethod, searchTerm) {
+    getFilterDataMethod (objFilterDataMethod, searchTerm) {
       const keys = Object.keys(objFilterDataMethod)
       for (let i = 0; i < keys.length; i++) {
         if (keys[i] === searchTerm) {
@@ -264,7 +264,7 @@
       }
       return null
     },
-    createControls(that, header) {
+    createControls (that, header) {
       let addedFilterControl = false
       let isVisible
       let html
@@ -346,7 +346,7 @@
               $.ajax({
                 url: filterDataSource,
                 dataType: 'json',
-                success(data) {
+                success (data) {
                   // eslint-disable-next-line guard-for-in
                   for (const key in data) {
                     UtilsFilterControl.addOptionToSelectControl(selectControl, key, data[key])
@@ -460,7 +460,7 @@
         header.find('.filterControl').hide()
       }
     },
-    getDirectionOfSelectOptions(_alignment) {
+    getDirectionOfSelectOptions (_alignment) {
       const alignment = _alignment === undefined ? 'left' : _alignment.toLowerCase()
 
       switch (alignment) {
@@ -476,7 +476,7 @@
     }
   }
   const filterDataMethods = {
-    var(filterDataSource, selectControl) {
+    var (filterDataSource, selectControl) {
       const variableValues = window[filterDataSource]
       // eslint-disable-next-line guard-for-in
       for (const key in variableValues) {
@@ -484,11 +484,11 @@
       }
       UtilsFilterControl.sortSelectControl(selectControl)
     },
-    url(filterDataSource, selectControl) {
+    url (filterDataSource, selectControl) {
       $.ajax({
         url: filterDataSource,
         dataType: 'json',
-        success(data) {
+        success (data) {
           // eslint-disable-next-line guard-for-in
           for (const key in data) {
             UtilsFilterControl.addOptionToSelectControl(selectControl, key, data[key])
@@ -497,7 +497,7 @@
         }
       })
     },
-    json(filterDataSource, selectControl) {
+    json (filterDataSource, selectControl) {
       const variableValues = JSON.parse(filterDataSource)
       // eslint-disable-next-line guard-for-in
       for (const key in variableValues) {
@@ -509,16 +509,16 @@
 
   $.extend($.fn.bootstrapTable.defaults, {
     filterControl: false,
-    onColumnSearch(field, text) {
+    onColumnSearch (field, text) {
       return false
     },
-    onCreatedControls() {
+    onCreatedControls () {
       return true
     },
     filterShowClear: false,
     alignmentSelectControlOptions: undefined,
     filterTemplate: {
-      input(that, field, isVisible, placeholder) {
+      input (that, field, isVisible, placeholder) {
         return Utils.sprintf(
           '<input type="text" class="form-control bootstrap-table-filter-control-%s" style="width: 100%; visibility: %s" placeholder="%s">',
           field,
@@ -526,7 +526,7 @@
           placeholder
         )
       },
-      select({ options }, field, isVisible) {
+      select ({ options }, field, isVisible) {
         return Utils.sprintf(
           '<select class="form-control bootstrap-table-filter-control-%s" style="width: 100%; visibility: %s" dir="%s"></select>',
           field,
@@ -536,7 +536,7 @@
           )
         )
       },
-      datepicker(that, field, isVisible) {
+      datepicker (that, field, isVisible) {
         return Utils.sprintf(
           '<input type="text" class="form-control date-filter-control bootstrap-table-filter-control-%s" style="width: 100%; visibility: %s">',
           field,
@@ -569,7 +569,7 @@
   })
 
   $.extend($.fn.bootstrapTable.locales, {
-    formatClearFilters() {
+    formatClearFilters () {
       return 'Clear Filters'
     }
   })
@@ -579,7 +579,7 @@
   $.fn.bootstrapTable.methods.push('triggerSearch')
 
   $.BootstrapTable = class extends $.BootstrapTable {
-    init() {
+    init () {
       // Make sure that the filterControl option is set
       if (this.options.filterControl) {
         const that = this
@@ -626,7 +626,7 @@
       super.init()
     }
 
-    initToolbar() {
+    initToolbar () {
       this.showToolbar =
         this.showToolbar ||
         (this.options.filterControl && this.options.filterShowClear)
@@ -664,7 +664,7 @@
       }
     }
 
-    initHeader() {
+    initHeader () {
       super.initHeader()
 
       if (!this.options.filterControl) {
@@ -672,13 +672,13 @@
       }
       UtilsFilterControl.createControls(this, this.$header)
     }
-    initBody() {
+    initBody () {
       super.initBody()
 
       UtilsFilterControl.initFilterSelectControls(this)
     }
 
-    initSearch() {
+    initSearch () {
       const that = this
       const fp = $.isEmptyObject(that.filterColumnsPartial)
         ? null
@@ -749,7 +749,7 @@
         : that.data
     }
 
-    initColumnSearch(filterColumnsDefaults) {
+    initColumnSearch (filterColumnsDefaults) {
       UtilsFilterControl.copyValues(this)
 
       if (filterColumnsDefaults) {
@@ -763,7 +763,7 @@
       }
     }
 
-    onColumnSearch(event) {
+    onColumnSearch (event) {
       if ($.inArray(event.keyCode, [37, 38, 39, 40]) > -1) {
         return
       }
@@ -796,7 +796,7 @@
       this.trigger('column-search', $field, text)
     }
 
-    clearFilterControl() {
+    clearFilterControl () {
       if (this.options.filterControl && this.options.filterShowClear) {
         const that = this
         const cookies = UtilsFilterControl.collectBootstrapCookies()
@@ -870,7 +870,7 @@
       }
     }
 
-    triggerSearch() {
+    triggerSearch () {
       const header = UtilsFilterControl.getCurrentHeader(this)
       const searchControls = UtilsFilterControl.getCurrentSearchControls(this)
 
@@ -884,7 +884,7 @@
       })
     }
 
-    EnableControls(enable) {
+    EnableControls (enable) {
       if (
         this.options.disableControlWhenSearch &&
         this.options.sidePagination === 'server'