ソースを参照

Improve some methods and added the search text functionality

Dennis Hernández 10 年 前
コミット
6138d10534
1 ファイル変更71 行追加63 行削除
  1. 71 63
      src/extensions/cookie/bootstrap-table-cookie.js

+ 71 - 63
src/extensions/cookie/bootstrap-table-cookie.js

@@ -1,7 +1,7 @@
 /**
 * @author: Dennis Hernández
 * @webSite: http://djhvscf.github.io/Blog
-* @version: v1.0.0
+* @version: v1.1.0
 *
 * @update zhixin wen <wenzhixin2010@gmail.com>
 */
@@ -10,55 +10,32 @@
     'use strict';
 
     var idsStateSaveList = {
-            sortOrder: 'bs.table.sortOrder',
-            sortName: 'bs.table.sortName',
-            pageNumber: 'bs.table.pageNumber',
-            pageList: 'bs.table.pageList',
-            columns: 'bs.table.columns'
+        sortOrder: 'bs.table.sortOrder',
+        sortName: 'bs.table.sortName',
+        pageNumber: 'bs.table.pageNumber',
+        pageList: 'bs.table.pageList',
+        columns: 'bs.table.columns',
+        searchText: 'bs.table.searchText'
     };
 
     var cookieEnabled = function () {
         return (navigator.cookieEnabled) ? true : false;
     };
 
-    var setCookie = function (tableName, cookieName, sValue, vEnd, sPath, sDomain, bSecure) {
-        cookieName = tableName + '.' + cookieName;
-        if (!cookieName || /^(?:expires|max\-age|path|domain|secure)$/i.test(cookieName)) {
-            return false;
+    var setCookie = function (that, cookieName, sValue, sPath, sDomain, bSecure) {
+        if ((!that.options.stateSave) || (!cookieEnabled()) || (that.options.stateSaveIdTable === '')) {
+            return;
         }
-        var sExpires = '',
-            time = '';
 
-        time = vEnd.replace(/[0-9]/, ''); //s,mi,h,d,m,y
-        vEnd = vEnd.replace(/[A-Za-z]/, ''); //number
+        var tableName = that.options.stateSaveIdTable,
+            vEnd = that.options.stateSaveExpire;
 
-        switch (time.toLowerCase()) {
-            case 's':
-                vEnd = +vEnd;
-                break;
-            case 'mi':
-                vEnd = vEnd * 60;
-                break;
-            case 'h':
-                vEnd = vEnd * 60 * 60;
-                break;
-            case 'd':
-                vEnd = vEnd * 24 * 60 * 60;
-                break;
-            case 'm':
-                vEnd = vEnd * 30 * 24 * 60 * 60;
-                break;
-            case 'y':
-                vEnd = vEnd * 365 * 30 * 24 * 60 * 60;
-                break;
-            default:
-                vEnd = undefined;
-                break;
+        cookieName = tableName + '.' + cookieName;
+        if (!cookieName || /^(?:expires|max\-age|path|domain|secure)$/i.test(cookieName)) {
+            return false;
         }
 
-        sExpires = vEnd === undefined ? '' : '; max-age=' + vEnd;
-
-        document.cookie = encodeURIComponent(cookieName) + '=' + encodeURIComponent(sValue) + sExpires + (sDomain ? '; domain=' + sDomain : '') + (sPath ? '; path=' + sPath : '') + (bSecure ? '; secure' : '');
+        document.cookie = encodeURIComponent(cookieName) + '=' + encodeURIComponent(sValue) + calculateExpiration(vEnd) + (sDomain ? '; domain=' + sDomain : '') + (sPath ? '; path=' + sPath : '') + (bSecure ? '; secure' : '');
         return true;
     };
 
@@ -86,6 +63,37 @@
         return true;
     };
 
+    var calculateExpiration = function(vEnd) {
+        var time = vEnd.replace(/[0-9]/, ''); //s,mi,h,d,m,y
+        vEnd = vEnd.replace(/[A-Za-z]/, ''); //number
+
+        switch (time.toLowerCase()) {
+            case 's':
+                vEnd = +vEnd;
+                break;
+            case 'mi':
+                vEnd = vEnd * 60;
+                break;
+            case 'h':
+                vEnd = vEnd * 60 * 60;
+                break;
+            case 'd':
+                vEnd = vEnd * 24 * 60 * 60;
+                break;
+            case 'm':
+                vEnd = vEnd * 30 * 24 * 60 * 60;
+                break;
+            case 'y':
+                vEnd = vEnd * 365 * 30 * 24 * 60 * 60;
+                break;
+            default:
+                vEnd = undefined;
+                break;
+        }
+
+        return vEnd === undefined ? '' : '; max-age=' + vEnd;
+    }
+
     $.extend($.fn.bootstrapTable.defaults, {
         stateSave: false,
         stateSaveExpire: '2h',
@@ -99,7 +107,8 @@
         _onSort = BootstrapTable.prototype.onSort,
         _onPageNumber = BootstrapTable.prototype.onPageNumber,
         _onPageListChange = BootstrapTable.prototype.onPageListChange,
-        _toggleColumn = BootstrapTable.prototype.toggleColumn;
+        _toggleColumn = BootstrapTable.prototype.toggleColumn,
+        _onSearch = BootstrapTable.prototype.onSearch;
 
     // init save data after initTable function
     BootstrapTable.prototype.initTable = function () {
@@ -125,52 +134,51 @@
             sortOrderStateName = getCookie(this.options.stateSaveIdTable, idsStateSaveList.sortName),
             pageNumberStateSave = getCookie(this.options.stateSaveIdTable, idsStateSaveList.pageNumber),
             pageListStateSave = getCookie(this.options.stateSaveIdTable, idsStateSaveList.pageList),
-            columnsStateSave = JSON.parse(getCookie(this.options.stateSaveIdTable, idsStateSaveList.columns));
+            columnsStateSave = JSON.parse(getCookie(this.options.stateSaveIdTable, idsStateSaveList.columns)),
+            searchStateSave = getCookie(this.options.stateSaveIdTable, idsStateSaveList.searchText);
 
-        if (sortOrderStateSave !== undefined && sortOrderStateSave !== null) {
+        if (sortOrderStateSave) {
             this.options.sortOrder = sortOrderStateSave;
             this.options.sortName = sortOrderStateName;
         }
 
-        if (pageNumberStateSave !== undefined && pageNumberStateSave !== null) {
+        if (pageNumberStateSave) {
             this.options.pageNumber = +pageNumberStateSave;
         }
 
-        if (pageListStateSave !== undefined && pageListStateSave !== null) {
+        if (pageListStateSave) {
             this.options.pageSize = pageListStateSave ===
                 this.options.formatAllRows() ? pageListStateSave : +pageListStateSave;
         }
 
-        if (columnsStateSave !== undefined && columnsStateSave !== null) {
+        if (columnsStateSave) {
             $.each(this.options.columns, function (i, column) {
                 column.visible = columnsStateSave.indexOf(i) !== -1;
             });
         }
+
+        if (searchStateSave) {
+            this.options.searchText = searchStateSave;
+        }
     };
 
     BootstrapTable.prototype.onSort = function () {
         _onSort.apply(this, Array.prototype.slice.apply(arguments));
 
-        if (this.options.stateSave && cookieEnabled() && (this.options.stateSaveIdTable !== '')) {
-            setCookie(this.options.stateSaveIdTable, idsStateSaveList.sortOrder, this.options.sortOrder, this.options.stateSaveExpire);
-            setCookie(this.options.stateSaveIdTable, idsStateSaveList.sortName, this.options.sortName, this.options.stateSaveExpire);
-        }
+        setCookie(this, idsStateSaveList.sortOrder, this.options.sortOrder);
+        setCookie(this, idsStateSaveList.sortName, this.options.sortName);
     };
 
     BootstrapTable.prototype.onPageNumber = function () {
         _onPageNumber.apply(this, Array.prototype.slice.apply(arguments));
 
-        if (this.options.stateSave && cookieEnabled() && this.options.stateSaveIdTable !== '') {
-            setCookie(this.options.stateSaveIdTable, idsStateSaveList.pageNumber, this.options.pageNumber, this.options.stateSaveExpire);
-        }
+        setCookie(this, idsStateSaveList.pageNumber, this.options.pageNumber);
     };
 
     BootstrapTable.prototype.onPageListChange = function () {
         _onPageListChange.apply(this, Array.prototype.slice.apply(arguments));
 
-        if (this.options.stateSave && cookieEnabled() && this.options.stateSaveIdTable !== '') {
-            setCookie(this.options.stateSaveIdTable, idsStateSaveList.pageList, this.options.pageSize, this.options.stateSaveExpire);
-        }
+        setCookie(this, idsStateSaveList.pageList, this.options.pageSize);
     };
 
     BootstrapTable.prototype.toggleColumn = function () {
@@ -184,17 +192,17 @@
             }
         });
 
-        if (this.options.stateSave && cookieEnabled()) {
-            setCookie(this.options.stateSaveIdTable, idsStateSaveList.columns, JSON.stringify(visibleColumns), this.options.stateSaveExpire);
-        }
+        setCookie(this, idsStateSaveList.columns, JSON.stringify(visibleColumns));
     };
 
-    BootstrapTable.prototype.deleteCookie = function (cookieName) {
-        if (cookieName === '') {
-            return;
-        }
+    BootstrapTable.prototype.onSearch = function () {
+        _onSearch.apply(this, Array.prototype.slice.apply(arguments));
 
-        if (!cookieEnabled()) {
+        setCookie(this, idsStateSaveList.searchText, this.searchText);
+    }
+
+    BootstrapTable.prototype.deleteCookie = function (cookieName) {
+        if ((cookieName === '') || (!cookieEnabled())) {
             return;
         }