Browse Source

Merge branch 'develop' of https://github.com/wenzhixin/bootstrap-table into provideTypings

Jeff Registre 8 years ago
parent
commit
a0ab8ba023

+ 1 - 1
docs/_i18n/en/faq/faq.md

@@ -56,4 +56,4 @@ onClickRow: function (row, $element) {
 
 
 All your ideas and feedback are very appreciated! Please feel free to open issues on GitHub or send me email.
 All your ideas and feedback are very appreciated! Please feel free to open issues on GitHub or send me email.
 
 
-I'm also grateful for your donations: <a href="donate">{% t pages.donate.title %}</a>
+I'm also grateful for your donations: <a href="/donate">{% t pages.donate.title %}</a>

+ 13 - 0
docs/_i18n/en/getting-started/usage.md

@@ -64,6 +64,19 @@ We can also use remote url data by setting `data-url="data1.json"` on a normal t
     </thead>
     </thead>
 </table>
 </table>
 ```
 ```
+You can also add `pagination`, `search`, and `sorting` to a table like the following table.
+
+```html
+<table data-pagination="true" data-search="true" data-toggle="table" data-url="data1.json">
+    <thead>
+        <tr>
+            <th data-sortable="true" data-field="id">Item ID</th>
+            <th data-field="name">Item Name</th>
+            <th data-field="price">Item Price</th>
+        </tr>
+    </thead>
+</table>
+```
 
 
 ## Via JavaScript
 ## Via JavaScript
 
 

+ 1 - 1
docs/_i18n/es/faq/faq.md

@@ -56,4 +56,4 @@ onClickRow: function (row, $element) {
 
 
 All your ideas and feedback are very appreciated! Please feel free to open issues on GitHub or send me email.
 All your ideas and feedback are very appreciated! Please feel free to open issues on GitHub or send me email.
 
 
-I'm also grateful for your donations: <a href="donate">{% t pages.donate.title %}</a>
+I'm also grateful for your donations: <a href="/donate">{% t pages.donate.title %}</a>

+ 1 - 1
docs/_i18n/zh-cn/faq/faq.md

@@ -54,4 +54,4 @@ onClickRow: function (row, $element) {
 
 
 非常感谢你的想法和建议,你可以到 GitHub 上提 issue 或者发邮件给我。
 非常感谢你的想法和建议,你可以到 GitHub 上提 issue 或者发邮件给我。
 
 
-当然,假如你也可以 <a href="donate">{% t pages.donate.title %}</a> 我们的项目。
+当然,假如你也可以 <a href="/donate">{% t pages.donate.title %}</a> 我们的项目。

+ 4 - 0
package.json

@@ -40,5 +40,9 @@
     "commitizen": {
     "commitizen": {
       "path": "./node_modules/cz-conventional-changelog"
       "path": "./node_modules/cz-conventional-changelog"
     }
     }
+  },
+  "types": "./index.d.ts",
+  "dependencies": {
+    "@types/jquery": "^2.0.46"
   }
   }
 }
 }

+ 36 - 7
src/bootstrap-table.js

@@ -1234,7 +1234,7 @@
 
 
         if (this.options.sidePagination !== 'server') {
         if (this.options.sidePagination !== 'server') {
             if (this.options.customSearch !== $.noop) {
             if (this.options.customSearch !== $.noop) {
-                this.options.customSearch.apply(this, [this.searchText]);
+                window[this.options.customSearch].apply(this, [this.searchText]);
                 return;
                 return;
             }
             }
 
 
@@ -2392,9 +2392,16 @@
     };
     };
 
 
     BootstrapTable.prototype.getData = function (useCurrentPage) {
     BootstrapTable.prototype.getData = function (useCurrentPage) {
-        return (this.searchText || !$.isEmptyObject(this.filterColumns) || !$.isEmptyObject(this.filterColumnsPartial)) ?
-            (useCurrentPage ? this.data.slice(this.pageFrom - 1, this.pageTo) : this.data) :
-            (useCurrentPage ? this.options.data.slice(this.pageFrom - 1, this.pageTo) : this.options.data);
+        var data = this.options.data;
+        if (this.searchText || this.options.sortName || !$.isEmptyObject(this.filterColumns) || !$.isEmptyObject(this.filterColumnsPartial)) {
+            data = this.data;
+        }
+
+        if (useCurrentPage) {
+            return data.slice(this.pageFrom - 1, this.pageTo);
+        }
+
+        return data;
     };
     };
 
 
     BootstrapTable.prototype.load = function (data) {
     BootstrapTable.prototype.load = function (data) {
@@ -2551,6 +2558,26 @@
         this.initBody(true);
         this.initBody(true);
     };
     };
 
 
+    BootstrapTable.prototype.refreshColumnTitle = function (params) {
+        if (!params.hasOwnProperty('field') || !params.hasOwnProperty('title')) {
+            return;
+        }
+
+        this.columns[this.fieldsColumnsIndex[params.field]].title = this.options.escape 
+                                                                    ? escapeHTML(params.title) 
+                                                                    : params.title;
+        
+        if (this.columns[this.fieldsColumnsIndex[params.field]].visible) {
+            var header = this.options.height !== undefined ? this.$tableHeader : this.$header; 
+            header.find('th[data-field]').each(function (i) {
+                if ($(this).data('field') === params.field) {
+                    $($(this).find(".th-inner")[0]).text(params.title);
+                    return false;
+                }
+            });
+        }
+    };
+
     BootstrapTable.prototype.insertRow = function (params) {
     BootstrapTable.prototype.insertRow = function (params) {
         if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) {
         if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) {
             return;
             return;
@@ -2672,7 +2699,8 @@
     };
     };
 
 
     BootstrapTable.prototype.getOptions = function () {
     BootstrapTable.prototype.getOptions = function () {
-        return this.options;
+        //Deep copy
+        return $.extend(true, {}, this.options);
     };
     };
 
 
     BootstrapTable.prototype.getSelections = function () {
     BootstrapTable.prototype.getSelections = function () {
@@ -2848,8 +2876,9 @@
     };
     };
 
 
     BootstrapTable.prototype.toggleAllColumns = function (visible) {
     BootstrapTable.prototype.toggleAllColumns = function (visible) {
+        var that = this;
         $.each(this.columns, function (i, column) {
         $.each(this.columns, function (i, column) {
-            this.columns[i].visible = visible;
+            that.columns[i].visible = visible;
         });
         });
 
 
         this.initHeader();
         this.initHeader();
@@ -3031,7 +3060,7 @@
         'load', 'append', 'prepend', 'remove', 'removeAll',
         'load', 'append', 'prepend', 'remove', 'removeAll',
         'insertRow', 'updateRow', 'updateCell', 'updateByUniqueId', 'removeByUniqueId',
         'insertRow', 'updateRow', 'updateCell', 'updateByUniqueId', 'removeByUniqueId',
         'getRowByUniqueId', 'showRow', 'hideRow', 'getHiddenRows',
         'getRowByUniqueId', 'showRow', 'hideRow', 'getHiddenRows',
-        'mergeCells',
+        'mergeCells', 'refreshColumnTitle',
         'checkAll', 'uncheckAll', 'checkInvert',
         'checkAll', 'uncheckAll', 'checkInvert',
         'check', 'uncheck',
         'check', 'uncheck',
         'checkBy', 'uncheckBy',
         'checkBy', 'uncheckBy',

+ 13 - 31
src/extensions/cookie/bootstrap-table-cookie.js

@@ -170,7 +170,6 @@
             var parsedCookieFilters = JSON.parse(getCookie(bootstrapTable, bootstrapTable.options.cookieIdTable, cookieIds.filterControl));
             var parsedCookieFilters = JSON.parse(getCookie(bootstrapTable, bootstrapTable.options.cookieIdTable, cookieIds.filterControl));
 
 
             if (!bootstrapTable.options.filterControlValuesLoaded && parsedCookieFilters) {
             if (!bootstrapTable.options.filterControlValuesLoaded && parsedCookieFilters) {
-                bootstrapTable.options.filterControlValuesLoaded = true;
 
 
                 var cachedFilters = {},
                 var cachedFilters = {},
                     header = getCurrentHeader(bootstrapTable),
                     header = getCurrentHeader(bootstrapTable),
@@ -193,6 +192,8 @@
                 });
                 });
 
 
                 bootstrapTable.initColumnSearch(cachedFilters);
                 bootstrapTable.initColumnSearch(cachedFilters);
+                bootstrapTable.options.filterControlValuesLoaded = true;
+                bootstrapTable.initServer();
             }
             }
         }, 250);
         }, 250);
     };
     };
@@ -240,7 +241,6 @@
         _onSearch = BootstrapTable.prototype.onSearch;
         _onSearch = BootstrapTable.prototype.onSearch;
 
 
     BootstrapTable.prototype.init = function () {
     BootstrapTable.prototype.init = function () {
-        var timeoutId = 0;
         this.options.filterControls = [];
         this.options.filterControls = [];
         this.options.filterControlValuesLoaded = false;
         this.options.filterControlValuesLoaded = false;
 
 
@@ -275,36 +275,12 @@
     };
     };
 
 
     BootstrapTable.prototype.initServer = function () {
     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;
+        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;
         }
         }
-
-        // call BootstrapTable.prototype.initServer
         _initServer.apply(this, Array.prototype.slice.apply(arguments));
         _initServer.apply(this, Array.prototype.slice.apply(arguments));
     };
     };
 
 
@@ -359,31 +335,37 @@
     BootstrapTable.prototype.onPageNumber = function () {
     BootstrapTable.prototype.onPageNumber = function () {
         _onPageNumber.apply(this, Array.prototype.slice.apply(arguments));
         _onPageNumber.apply(this, Array.prototype.slice.apply(arguments));
         setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
         setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
+        return false;
     };
     };
 
 
     BootstrapTable.prototype.onPageListChange = function () {
     BootstrapTable.prototype.onPageListChange = function () {
         _onPageListChange.apply(this, Array.prototype.slice.apply(arguments));
         _onPageListChange.apply(this, Array.prototype.slice.apply(arguments));
         setCookie(this, cookieIds.pageList, this.options.pageSize);
         setCookie(this, cookieIds.pageList, this.options.pageSize);
+        return false;
     };
     };
 
 
     BootstrapTable.prototype.onPageFirst = function () {
     BootstrapTable.prototype.onPageFirst = function () {
         _onPageFirst.apply(this, Array.prototype.slice.apply(arguments));
         _onPageFirst.apply(this, Array.prototype.slice.apply(arguments));
         setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
         setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
+        return false;
     };
     };
 
 
     BootstrapTable.prototype.onPagePre = function () {
     BootstrapTable.prototype.onPagePre = function () {
         _onPagePre.apply(this, Array.prototype.slice.apply(arguments));
         _onPagePre.apply(this, Array.prototype.slice.apply(arguments));
         setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
         setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
+        return false;
     };
     };
 
 
     BootstrapTable.prototype.onPageNext = function () {
     BootstrapTable.prototype.onPageNext = function () {
         _onPageNext.apply(this, Array.prototype.slice.apply(arguments));
         _onPageNext.apply(this, Array.prototype.slice.apply(arguments));
         setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
         setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
+        return false;
     };
     };
 
 
     BootstrapTable.prototype.onPageLast = function () {
     BootstrapTable.prototype.onPageLast = function () {
         _onPageLast.apply(this, Array.prototype.slice.apply(arguments));
         _onPageLast.apply(this, Array.prototype.slice.apply(arguments));
         setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
         setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
+        return false;
     };
     };
 
 
     BootstrapTable.prototype.toggleColumn = function () {
     BootstrapTable.prototype.toggleColumn = function () {

+ 6 - 0
src/extensions/filter-control/README.md

@@ -42,6 +42,12 @@ Dependence if you use the datepicker option: [bootstrap-datepicker](https://gith
 * description: Set to true if you want to disable the control while the server is responding the data. This options will work if the sidePagination is 'server'.
 * description: Set to true if you want to disable the control while the server is responding the data. This options will work if the sidePagination is 'server'.
 * default: `false`
 * default: `false`
 
 
+### searchOnEnterKey
+
+* type: Boolean
+* description: Set to true to fire the search action when the user press the enter key.
+* default: `false`
+
 ## Column options
 ## Column options
 
 
 ### filterControl
 ### filterControl

+ 38 - 24
src/extensions/filter-control/bootstrap-table-filter-control.js

@@ -317,6 +317,14 @@
 
 
         if (addedFilterControl) {
         if (addedFilterControl) {
             header.off('keyup', 'input').on('keyup', 'input', function (event) {
             header.off('keyup', 'input').on('keyup', 'input', function (event) {
+                if (that.options.searchOnEnterKey && event.keyCode !== 13) {
+                    return;
+                }
+
+                if ($.inArray(event.keyCode, [37, 38, 39, 40]) > -1) {
+                    return;
+                }
+
                 clearTimeout(timeoutId);
                 clearTimeout(timeoutId);
                 timeoutId = setTimeout(function () {
                 timeoutId = setTimeout(function () {
                     that.onColumnSearch(event);
                     that.onColumnSearch(event);
@@ -324,6 +332,14 @@
             });
             });
 
 
             header.off('change', 'select').on('change', 'select', function (event) {
             header.off('change', 'select').on('change', 'select', function (event) {
+                if (that.options.searchOnEnterKey && event.keyCode !== 13) {
+                    return;
+                }
+
+                if ($.inArray(event.keyCode, [37, 38, 39, 40]) > -1) {
+                    return;
+                }
+                
                 clearTimeout(timeoutId);
                 clearTimeout(timeoutId);
                 timeoutId = setTimeout(function () {
                 timeoutId = setTimeout(function () {
                     that.onColumnSearch(event);
                     that.onColumnSearch(event);
@@ -442,6 +458,7 @@
             }
             }
         },
         },
         disableControlWhenSearch: false,
         disableControlWhenSearch: false,
+        searchOnEnterKey: false,
         //internal variables
         //internal variables
         valuesFilterControl: []
         valuesFilterControl: []
     });
     });
@@ -471,9 +488,7 @@
 
 
     $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
     $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
 
 
-    $.extend($.fn.bootstrapTable.methods, [
-        'triggerSearch'
-    ]);
+    $.fn.bootstrapTable.methods.push('triggerSearch');
 
 
     var BootstrapTable = $.fn.bootstrapTable.Constructor,
     var BootstrapTable = $.fn.bootstrapTable.Constructor,
         _init = BootstrapTable.prototype.init,
         _init = BootstrapTable.prototype.init,
@@ -569,10 +584,10 @@
         }
         }
 
 
         var that = this;
         var that = this;
-        var fp = $.isEmptyObject(this.filterColumnsPartial) ? null : this.filterColumnsPartial;
+        var fp = $.isEmptyObject(that.filterColumnsPartial) ? null : that.filterColumnsPartial;
 
 
         //Check partial column filter
         //Check partial column filter
-        this.data = fp ? $.grep(this.data, function (item, i) {
+        that.data = fp ? $.grep(that.data, function (item, i) {
             for (var key in fp) {
             for (var key in fp) {
                 var thisColumn = that.columns[that.fieldsColumnsIndex[key]];
                 var thisColumn = that.columns[that.fieldsColumnsIndex[key]];
                 var fval = fp[key].toLowerCase();
                 var fval = fp[key].toLowerCase();
@@ -585,28 +600,27 @@
                     [value, item, i], value);
                     [value, item, i], value);
                 }
                 }
 
 
-                if (thisColumn.filterStrictSearch) {
-                    if (!($.inArray(key, that.header.fields) !== -1 &&
-                        (typeof value === 'string' || typeof value === 'number') &&
-                        value.toString().toLowerCase() === fval.toString().toLowerCase())) {
-                        return false;
-                    }
-                } else if (thisColumn.filterStartsWithSearch) {
-                  if (!($.inArray(key, that.header.fields) !== -1 &&
-                      (typeof value === 'string' || typeof value === 'number') &&
-                      (value + '').toLowerCase().indexOf(fval) === 0)) {
-                      return false;
-                  }
-                } else {
-                    if (!($.inArray(key, that.header.fields) !== -1 &&
-                        (typeof value === 'string' || typeof value === 'number') &&
-                        (value + '').toLowerCase().indexOf(fval) !== -1)) {
-                        return false;
+                if($.inArray(key, that.header.fields) !== -1 ) {
+                    if(typeof value === 'string' || typeof value === 'number') {
+                        if (thisColumn.filterStrictSearch) {
+                            if(value.toString().toLowerCase() === fval.toString().toLowerCase()) {
+                                return true;
+                            }
+                        } else if (thisColumn.filterStartsWithSearch) {
+                            if((value + '').toLowerCase().indexOf(fval) === 0) {
+                                return true;
+                            }
+                        } else {
+                            if((value + '').toLowerCase().indexOf(fval) !== -1) {
+                                return true;
+                            }
+                        }
                     }
                     }
                 }
                 }
             }
             }
-            return true;
-        }) : this.data;
+
+            return false;
+        }) : that.data;
     };
     };
 
 
     BootstrapTable.prototype.initColumnSearch = function(filterColumnsDefaults) {
     BootstrapTable.prototype.initColumnSearch = function(filterColumnsDefaults) {