From b74a3e67ca01c0874a8d56785b347c3a9fffdd79 Mon Sep 17 00:00:00 2001 From: Manuel Faux Date: Mon, 17 Jan 2022 20:07:59 +0100 Subject: [PATCH 1/7] Store sort order, column selection and row count in browser's local storage (#5) * Store sort order, column selection and row count in browser's local storage * Bugfix when restoring sort order from localStorage with multiSort disabled * Bugfix when restoring row count to pre-select entry in dropdown --- CHANGELOG.md | 4 ++++ bower.json | 2 +- dist/jquery.bootgrid-1.3.5.zip | Bin 29339 -> 0 bytes dist/jquery.bootgrid-1.4.0.zip | Bin 0 -> 30024 bytes dist/jquery.bootgrid.css | 2 +- dist/jquery.bootgrid.fa.js | 2 +- dist/jquery.bootgrid.js | 27 ++++++++++++++++++++++----- dist/jquery.bootgrid.min.css | 2 +- dist/jquery.bootgrid.min.js | 2 +- package.json | 2 +- src/internal.js | 24 ++++++++++++++++++++---- src/public.js | 1 + 12 files changed, 53 insertions(+), 15 deletions(-) delete mode 100644 dist/jquery.bootgrid-1.3.5.zip create mode 100644 dist/jquery.bootgrid-1.4.0.zip diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c35228..26279a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.4.0 +### Enhancements & Features +- Store sort order, column selection and row count in browser's localStorage + ## 1.3.3 ### Enhancements & Features - Update dependencies to 2018 versions, eliminating 72 vulnerabilities. diff --git a/bower.json b/bower.json index 253e8d8..8163658 100644 --- a/bower.json +++ b/bower.json @@ -13,7 +13,7 @@ "accessibility", "bootstrap" ], - "version": "1.3.5", + "version": "1.4.0", "authors": [ { "name": "Rafael Staib", diff --git a/dist/jquery.bootgrid-1.3.5.zip b/dist/jquery.bootgrid-1.3.5.zip deleted file mode 100644 index e0d9fc895443fbdf806a939752355d99744d9600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29339 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

qK|0t_>Jz?BQO+;4i9n*Zrjd9 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 P#NQ|J@0Mjd{WJSNA2#)? literal 0 HcmV?d00001 diff --git a/dist/jquery.bootgrid.css b/dist/jquery.bootgrid.css index b308bee..1803491 100644 --- a/dist/jquery.bootgrid.css +++ b/dist/jquery.bootgrid.css @@ -1,5 +1,5 @@ /*! - * jQuery Bootgrid v1.3.5 - 11/17/2021 + * jQuery Bootgrid v1.4.0 - 12/31/2021 * Copyright © 2014-2015 Rafael J. Staib; Copyright © 2018-2021 Deciso B.V. (http://www.jquery-bootgrid.com) * Licensed under the MIT license. See LICENSE.txt for more details. */ diff --git a/dist/jquery.bootgrid.fa.js b/dist/jquery.bootgrid.fa.js index bdf2cf0..2af272b 100644 --- a/dist/jquery.bootgrid.fa.js +++ b/dist/jquery.bootgrid.fa.js @@ -1,5 +1,5 @@ /*! - * jQuery Bootgrid v1.3.5 - 11/17/2021 + * jQuery Bootgrid v1.4.0 - 12/31/2021 * Copyright © 2014-2015 Rafael J. Staib; Copyright © 2018-2021 Deciso B.V. (http://www.jquery-bootgrid.com) * Licensed under the MIT license. See LICENSE.txt for more details. */ diff --git a/dist/jquery.bootgrid.js b/dist/jquery.bootgrid.js index 36d9cea..d8b6e72 100644 --- a/dist/jquery.bootgrid.js +++ b/dist/jquery.bootgrid.js @@ -1,5 +1,5 @@ /*! - * jQuery Bootgrid v1.3.5 - 11/17/2021 + * jQuery Bootgrid v1.4.0 - 12/31/2021 * Copyright © 2014-2015 Rafael J. Staib; Copyright © 2018-2021 Deciso B.V. (http://www.jquery-bootgrid.com) * Licensed under the MIT license. See LICENSE.txt for more details. */ @@ -78,6 +78,7 @@ function init() loadColumns.call(this); // Loads columns from HTML thead tag this.selection = this.options.selection && this.identifier != null; + this.rowCount = localStorage.getItem('rowCount[' + this.uid + ']') || this.rowCount; loadRows.call(this); // Loads rows from HTML tbody tag if ajax is false prepareTable.call(this); renderTableHeader.call(this); @@ -112,6 +113,8 @@ function loadColumns() { var $this = $(this), data = $this.data(), + visibilityStorage = localStorage.getItem('visibleColumns[' + that.uid + '][' + data.columnId + ']'), + sortingStorage = localStorage.getItem('sortColumns[' + that.uid + '][' + data.columnId + ']'), column = { id: data.columnId, identifier: that.identifier == null && data.identifier || false, @@ -122,10 +125,13 @@ function loadColumns() cssClass: data.cssClass || "", headerCssClass: data.headerCssClass || "", formatter: that.options.formatters[data.formatter] || null, - order: (!sorted && (data.order === "asc" || data.order === "desc")) ? data.order : null, + order: !sorted ? + (sortingStorage === null ? (data.order === "asc" || data.order === "desc" ? data.order : null) : + (sortingStorage === "asc" || sortingStorage === "desc" ? sortingStorage : null)) : + null, // If no other column is sorted already (or multiSort is enabled), check if sorting was stored searchable: !(data.searchable === false), // default: true sortable: !(data.sortable === false), // default: true - visible: !(data.visible === false), // default: true + visible: visibilityStorage === null ? !(data.visible === false) : (visibilityStorage === 'true'), // default: true visibleInSelection: !(data.visibleInSelection === false), // default: true width: ($.isNumeric(data.width)) ? data.width + "px" : (typeof(data.width) === "string") ? data.width : null @@ -393,9 +399,10 @@ function renderColumnSelection(actions) var $this = $(this), checkbox = $this.find(checkboxSelector); + localStorage.setItem('visibleColumns[' + that.uid + '][' + column.id + ']', checkbox.prop("checked")); if (!checkbox.prop("disabled")) { - column.visible = checkbox.prop("checked"); + column.visible = localStorage.getItem('visibleColumns[' + that.uid + '][' + column.id + ']') === 'true'; var enable = that.columns.where(isVisible).length > 1; $this.parents(itemsSelector).find(selector + ":has(" + checkboxSelector + ":checked)") ._bgEnableAria(enable).find(checkboxSelector)._bgEnableField(enable); @@ -552,13 +559,14 @@ function renderRowCountSelection(actions) { var item = $(tpl.actionDropDownItem.resolve(getParams.call(that, { text: getText(value), action: value }))) - ._bgSelectAria(value === that.rowCount) + ._bgSelectAria(value.toString() === that.rowCount.toString()) .on("click" + namespace, menuItemSelector, function (e) { e.preventDefault(); var $this = $(this), newRowCount = $this.data("action"); + localStorage.setItem('rowCount[' + that.uid + ']', newRowCount); if (newRowCount !== that.rowCount) { // todo: sophisticated solution needed for calculating which page is selected @@ -843,11 +851,16 @@ function setTableHeaderSortDirection(element) { element.parents("tr").first().find(iconSelector).removeClass(css.iconDown + " " + css.iconUp); this.sortDictionary = {}; + for (var i = 0; i < this.columns.length; i++) + { + localStorage.removeItem('sortColumns[' + this.uid + '][' + this.columns[i].id + ']'); + } } if (sortOrder && sortOrder === "asc") { this.sortDictionary[columnId] = "desc"; + localStorage.setItem('sortColumns[' + this.uid + '][' + columnId + ']', "desc"); icon.removeClass(css.iconUp).addClass(css.iconDown); } else if (sortOrder && sortOrder === "desc") @@ -863,17 +876,20 @@ function setTableHeaderSortDirection(element) } } this.sortDictionary = newSort; + localStorage.removeItem('sortColumns[' + this.uid + '][' + columnId + ']'); icon.removeClass(css.iconDown); } else { this.sortDictionary[columnId] = "asc"; + localStorage.setItem('sortColumns[' + this.uid + '][' + columnId + ']', "asc"); icon.removeClass(css.iconDown).addClass(css.iconUp); } } else { this.sortDictionary[columnId] = "asc"; + localStorage.setItem('sortColumns[' + this.uid + '][' + columnId + ']', "asc"); icon.addClass(css.iconUp); } } @@ -997,6 +1013,7 @@ var Grid = function(element, options) this.header = null; this.footer = null; this.xqr = null; + this.uid = window.location.pathname + "#" + this.element.attr('id'); // todo: implement cache }; diff --git a/dist/jquery.bootgrid.min.css b/dist/jquery.bootgrid.min.css index 2828211..706ed21 100644 --- a/dist/jquery.bootgrid.min.css +++ b/dist/jquery.bootgrid.min.css @@ -1,5 +1,5 @@ /*! - * jQuery Bootgrid v1.3.5 - 11/17/2021 + * jQuery Bootgrid v1.4.0 - 12/31/2021 * Copyright © 2014-2015 Rafael J. Staib; Copyright © 2018-2021 Deciso B.V. (http://www.jquery-bootgrid.com) * Licensed under the MIT license. See LICENSE.txt for more details. */.bootgrid-footer,.bootgrid-header{margin:15px 0}.bootgrid-footer a,.bootgrid-header a{outline:0}.bootgrid-footer .search,.bootgrid-header .search{display:inline-block;margin:0 20px 0 0;vertical-align:middle;width:180px}.bootgrid-footer .search .glyphicon,.bootgrid-header .search .glyphicon{top:0}.bootgrid-footer .search .fa,.bootgrid-header .search .fa{display:table-cell}.bootgrid-footer .search .search-field::-ms-clear,.bootgrid-footer .search.search-field::-ms-clear,.bootgrid-header .search .search-field::-ms-clear,.bootgrid-header .search.search-field::-ms-clear{display:none}.bootgrid-footer .pagination,.bootgrid-header .pagination{margin:0!important}.bootgrid-footer .infoBar,.bootgrid-header .actionBar{text-align:right}.bootgrid-footer .infoBar .btn-group>.btn-group .dropdown-menu,.bootgrid-header .actionBar .btn-group>.btn-group .dropdown-menu{text-align:left}.bootgrid-footer .infoBar .btn-group>.btn-group .dropdown-menu .dropdown-item,.bootgrid-header .actionBar .btn-group>.btn-group .dropdown-menu .dropdown-item{cursor:pointer;display:block;margin:0;padding:3px 20px;white-space:nowrap}.bootgrid-footer .infoBar .btn-group>.btn-group .dropdown-menu .dropdown-item:focus,.bootgrid-footer .infoBar .btn-group>.btn-group .dropdown-menu .dropdown-item:hover,.bootgrid-header .actionBar .btn-group>.btn-group .dropdown-menu .dropdown-item:focus,.bootgrid-header .actionBar .btn-group>.btn-group .dropdown-menu .dropdown-item:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.bootgrid-footer .infoBar .btn-group>.btn-group .dropdown-menu .dropdown-item .dropdown-item-checkbox,.bootgrid-footer .infoBar .btn-group>.btn-group .dropdown-menu .dropdown-item.dropdown-item-checkbox,.bootgrid-header .actionBar .btn-group>.btn-group .dropdown-menu .dropdown-item .dropdown-item-checkbox,.bootgrid-header .actionBar .btn-group>.btn-group .dropdown-menu .dropdown-item.dropdown-item-checkbox{margin:0 2px 4px 0;vertical-align:middle}.bootgrid-footer .infoBar .btn-group>.btn-group .dropdown-menu .dropdown-item.disabled,.bootgrid-header .actionBar .btn-group>.btn-group .dropdown-menu .dropdown-item.disabled{cursor:not-allowed}.bootgrid-table{table-layout:fixed}.bootgrid-table a{outline:0}.bootgrid-table th>.column-header-anchor{color:#333;cursor:not-allowed;display:block;position:relative;text-decoration:none}.bootgrid-table th>.column-header-anchor.sortable{cursor:pointer}.bootgrid-table th>.column-header-anchor>.text{display:block;margin:0 16px 0 0;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.bootgrid-table th>.column-header-anchor>.icon{display:block;position:absolute;right:0;top:2px}.bootgrid-table th:active,.bootgrid-table th:hover{background:#fafafa}.bootgrid-table td{overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.bootgrid-table td.loading,.bootgrid-table td.no-results{background:#fff;text-align:center}.bootgrid-table td.select-cell,.bootgrid-table th.select-cell{text-align:center;width:30px}.bootgrid-table td.select-cell .select-box,.bootgrid-table th.select-cell .select-box{margin:0;outline:0}.table-responsive .bootgrid-table{table-layout:inherit!important}.table-responsive .bootgrid-table th>.column-header-anchor>.text{overflow:inherit!important;-ms-text-overflow:inherit!important;-o-text-overflow:inherit!important;text-overflow:inherit!important;white-space:inherit!important}.table-responsive .bootgrid-table td{overflow:inherit!important;-ms-text-overflow:inherit!important;-o-text-overflow:inherit!important;text-overflow:inherit!important;white-space:inherit!important} \ No newline at end of file diff --git a/dist/jquery.bootgrid.min.js b/dist/jquery.bootgrid.min.js index 77b76a2..21dd490 100644 --- a/dist/jquery.bootgrid.min.js +++ b/dist/jquery.bootgrid.min.js @@ -1 +1 @@ -!function(p,h,t){"use strict";var f=".rs.jquery.bootgrid";function r(e){var i=this;return!this.rows.contains(function(t){return i.identifier&&t[i.identifier]===e[i.identifier]})&&(this.rows.push(e),!0)}function g(t){var e=this.footer?this.footer.find(t):p(),i=this.header?this.header.find(t):p();return p.merge(e,i)}function v(t){return t?p.extend({},this.cachedParams,{ctx:t}):this.cachedParams}function m(t){return"."+p.trim(t).replace(/\s+/gm,".")}function l(){this.element.trigger("initialize"+f),function(){var s=this,t=this.element.find("thead > tr").first(),o=!1;t.children().each(function(){var t=p(this),e=t.data(),i={id:e.columnId,identifier:null==s.identifier&&e.identifier||!1,converter:s.options.converters[e.converter||e.type]||s.options.converters.string,text:t.html(),align:e.align||"left",headerAlign:e.headerAlign||"left",cssClass:e.cssClass||"",headerCssClass:e.headerCssClass||"",formatter:s.options.formatters[e.formatter]||null,order:o||"asc"!==e.order&&"desc"!==e.order?null:e.order,searchable:!(!1===e.searchable),sortable:!(!1===e.sortable),visible:!(!1===e.visible),visibleInSelection:!(!1===e.visibleInSelection),width:p.isNumeric(e.width)?e.width+"px":"string"==typeof e.width?e.width:null};s.columns.push(i),null!=i.order&&(s.sortDictionary[i.id]=i.order),i.identifier&&(s.identifier=i.id,s.converter=i.converter),s.options.multiSort||null===i.order||(o=!0)})}.call(this),this.selection=this.options.selection&&null!=this.identifier,function(){if(!this.options.ajax){var e=this,t=this.element.find("tbody > tr");t.each(function(){var t=p(this),i=t.children("td"),s={};p.each(e.columns,function(t,e){s[e.id]=e.converter.from(i.eq(t).text())}),r.call(e,s)}),a.call(this,this.rows.length),D.call(this)}}.call(this),function(){var t=this.options.templates,e=this.element.parent().hasClass(this.options.css.responsiveTable)?this.element.parent():this.element;this.element.addClass(this.options.css.table),0===this.element.children("tbody").length&&this.element.append(t.body);1&this.options.navigation&&(this.header=p(t.header.resolve(v.call(this,{id:this.element._bgId()+"-header"}))),e.before(this.header));2&this.options.navigation&&(this.footer=p(t.footer.resolve(v.call(this,{id:this.element._bgId()+"-footer"}))),e.after(this.footer))}.call(this),x.call(this),function(){if(0!==this.options.navigation){var t=this.options.css,e=m(t.search),i=g.call(this,e);if(0=s.options.searchSettings.characters)&&(h.clearTimeout(n),n=h.setTimeout(function(){y.call(s,e)},s.options.searchSettings.delay)))}),C.call(this,i,a)}}}.call(this),function(){if(0!==this.options.navigation){var t=this.options.css,e=m(t.actions),i=g.call(this,e);if(0 tr").on("click"+f,"> tr",function(t){t.stopPropagation();var e=p(this),i=null==o.identifier?e.data("row-id"):o.converter.from(e.data("row-id")+""),s=null==o.identifier?o.currentRows[i]:o.currentRows.first(function(t){return t[o.identifier]===i});o.selection&&o.options.rowSelect&&(e.hasClass(o.options.css.selected)?o.deselect([i]):o.select([i])),o.element.trigger("click"+f,[o.columns,s])})}.call(this,e)}else b.call(this)}.call(o,t),function(){if(0!==this.options.navigation){var t=m(this.options.css.infos),e=g.call(this,t);if(0this.total?this.total:i,start:0===this.total?0:i-this.rowCount+1,total:this.total})));C.call(this,e,s)}}}.call(o),function(){if(0!==this.options.navigation){var t=m(this.options.css.pagination),e=g.call(this,t)._bgShowAria(-1!==this.rowCount);if(-1!==this.rowCount&&0=this.options.padding?Math.max(l,1):Math.max(l-this.options.padding+r,1),c=2*this.options.padding+1,h=c<=o?c:o;w.call(this,n,"first","«","first")._bgEnableAria(1 td").first(),o=r.element.height()-e.height()-(s.height()+20),n=r.columns.where(u).length;r.selection&&(n+=1),i.html(t.loading.resolve(v.call(r,{columns:n}))),-1!==r.rowCount&&0 td").css("padding","20px 0 "+o+"px")}},250)}.call(this),this.options.ajax){var t=function(){var t={current:this.current,rowCount:this.rowCount,sort:this.sortDictionary,searchPhrase:this.searchPhrase},e=this.options.post;return e=p.isFunction(e)?e():e,this.options.requestHandler(p.extend(!0,t,e))}.call(this),i=function(){var t=this.options.url;return p.isFunction(t)?t():t}.call(this);if(null==i||"string"!=typeof i||0===i.length)throw new Error("Url setting must be a none empty string or a function that returns one.");this.xqr&&this.xqr.abort();var s={url:i,data:t,success:function(t){o.xqr=null,"string"==typeof t&&(t=p.parseJSON(t)),t=o.options.responseHandler(t),o.current=t.current,e(t.rows,t.total)},error:function(t,e,i){o.xqr=null,"abort"!==e&&(b.call(o),o.element._bgBusyAria(!1).trigger("loaded"+f))}};s=p.extend(this.options.ajaxSettings,s),this.xqr=p.ajax(s)}else{var n=0 tr"),a=this.options.css,c=this.options.templates,h="",u=this.options.sorting;if(this.selection){var e=this.options.multiSelect?c.select.resolve(v.call(l,{type:"checkbox",value:"all"})):"";h+=c.rawHeaderCell.resolve(v.call(l,{content:e,css:a.selectCell}))}if(p.each(this.columns,function(t,e){if(e.visible){var i=l.sortDictionary[e.id],s=u&&i&&"asc"===i?a.iconUp:u&&i&&"desc"===i?a.iconDown:"",o=c.icon.resolve(v.call(l,{iconCss:s})),n=e.headerAlign,r=0i[n.id]?r(1):e[n.id]o?t(e,i,o):0})}}var c=function(t,e){this.element=p(t),this.origin=this.element.clone(),this.options=p.extend(!0,{},c.defaults,this.element.data(),e);var i=this.options.rowCount=this.element.data().rowCount||e.rowCount||this.options.rowCount;this.columns=[],this.current=1,this.currentRows=[],this.identifier=null,this.selection=!1,this.converter=null,this.rowCount=p.isArray(i)?i[0]:i,this.rows=[],this.searchPhrase="",this.selectedRows=[],this.sortDictionary={},this.total=0,this.totalPages=0,this.cachedParams={lbl:this.options.labels,css:this.options.css,ctx:{}},this.header=null,this.footer=null,this.xqr=null};if(c.defaults={navigation:3,padding:2,columnSelection:!0,rowCount:[10,25,50,-1],selection:!1,multiSelect:!1,rowSelect:!1,keepSelection:!1,highlightRows:!1,sorting:!0,multiSort:!1,searchSettings:{delay:250,characters:1},ajax:!1,ajaxSettings:{method:"POST"},post:{},url:"",caseSensitive:!0,requestHandler:function(t){return t},responseHandler:function(t){return t},converters:{numeric:{from:function(t){return+t},to:function(t){return void 0===t?"":t+""}},string:{from:function(t){return t},to:function(t){return t}},datetime:{from:function(t){return t?moment(1e3*parseInt(t)):""},to:function(t){return t?t.format("lll"):""}},memsize:{from:function(t){for(var e=["","K","M","G","T","P","E","Z","Y"],i=parseInt(t),s=t.slice(-1).toUpperCase(),o=e.length-1;0<=o;o--)if(s===e[o]){i*=Math.pow(1024,o);break}return i},to:function(t){for(var e=["","K","M","G","T","P","E","Z","Y"],i=e.length-1;0<=i;i--)if(t>=5*Math.pow(1024,i))return parseInt(t/Math.pow(1024,i))+e[i];return parseInt(t)+""}},notprefixable:{to:function(t){return t.not?' '+t.val:t.val}}},css:{actions:"actions btn-group",center:"text-center",columnHeaderAnchor:"column-header-anchor",columnHeaderText:"text",dropDownItem:"dropdown-item",dropDownItemButton:"dropdown-item-button",dropDownItemCheckbox:"dropdown-item-checkbox",dropDownMenu:"dropdown btn-group",dropDownMenuItems:"dropdown-menu pull-right",dropDownMenuText:"dropdown-text",footer:"bootgrid-footer container-fluid",header:"bootgrid-header container-fluid",icon:"icon glyphicon",iconColumns:"glyphicon-th-list",iconDown:"glyphicon-chevron-down",iconRefresh:"glyphicon-refresh",iconSearch:"glyphicon-search",iconUp:"glyphicon-chevron-up",infos:"infos",left:"text-left",pagination:"pagination",paginationButton:"button",responsiveTable:"table-responsive",right:"text-right",search:"search form-group",searchField:"search-field form-control",selectBox:"select-box",selectCell:"select-cell",selected:"active",sortable:"sortable",table:"bootgrid-table table"},formatters:{},labels:{all:"All",infos:"Showing {{ctx.start}} to {{ctx.end}} of {{ctx.total}} entries",loading:"Loading...",noResults:"No results found!",refresh:"Refresh",search:"Search"},statusMapping:{0:"success",1:"info",2:"warning",3:"danger"},templates:{actionButton:'',actionDropDown:'

',actionDropDownItem:'
  • {{ctx.text}}
  • ',actionDropDownCheckboxItem:'
  • ',actions:'
    ',body:"",cell:'{{ctx.content}}',footer:'

    ',header:'

    ',headerCell:'{{ctx.column.text}}{{ctx.icon}}',icon:'',infos:'
    {{lbl.infos}}
    ',loading:'{{lbl.loading}}',noResults:'{{lbl.noResults}}',pagination:'
      ',paginationItem:'
    • {{ctx.text}}
    • ',rawHeaderCell:'{{ctx.content}}',row:"{{ctx.cells}}",search:'
      ',select:''}},c.prototype.append=function(t){if(this.options.ajax);else{for(var e=[],i=0;i=this.currentRows.length;for(i=0;!this.options.keepSelection&&n&&i tr "+o+":checked").trigger("click"+f),i=0;i tr[data-row-id="'+this.selectedRows[i]+'"]').addClass(this.options.css.selected)._bgAria("selected","true").find(o).prop("checked",!0);this.element.trigger("selected"+f,[s])}}return this},c.prototype.deselect=function(t){if(this.selection){t=t||this.currentRows.propValues(this.identifier);for(var e,i,s,o=[];0 tr[data-row-id="'+o[i][this.identifier]+'"]').removeClass(this.options.css.selected)._bgAria("selected","false").find(n).prop("checked",!1);this.element.trigger("deselected"+f,[o])}}return this},c.prototype.sort=function(t){var e=t?p.extend({},t):{};return e===this.sortDictionary||(this.sortDictionary=e,x.call(this),D.call(this),d.call(this)),this},c.prototype.getColumnSettings=function(){return p.merge([],this.columns)},c.prototype.getCurrentPage=function(){return this.current},c.prototype.getCurrentRows=function(){return p.merge([],this.currentRows)},c.prototype.getRowCount=function(){return this.rowCount},c.prototype.getSearchPhrase=function(){return this.searchPhrase},c.prototype.getSelectedRows=function(){return p.merge([],this.selectedRows)},c.prototype.getSortDictionary=function(){return p.extend({},this.sortDictionary)},c.prototype.getTotalPageCount=function(){return this.totalPages},c.prototype.getTotalRowCount=function(){return this.total},p.fn.extend({_bgAria:function(t,e){return e?this.attr("aria-"+t,e):this.attr("aria-"+t)},_bgBusyAria:function(t){return null==t||t?this._bgAria("busy","true"):this._bgAria("busy","false")},_bgRemoveAria:function(t){return this.removeAttr("aria-"+t)},_bgEnableAria:function(t){return null==t||t?this.removeClass("disabled")._bgAria("disabled","false"):this.addClass("disabled")._bgAria("disabled","true")},_bgEnableField:function(t){return null==t||t?this.removeAttr("disabled"):this.attr("disabled","disable")},_bgShowAria:function(t){return null==t||t?this.show()._bgAria("hidden","false"):this.hide()._bgAria("hidden","true")},_bgSelectAria:function(t){return null==t||t?this.addClass("active")._bgAria("selected","true"):this.removeClass("active")._bgAria("selected","false")},_bgId:function(t){return t?this.attr("id",t):this.attr("id")}}),!String.prototype.resolve){var A={checked:function(t){return"boolean"==typeof t?t?'checked="checked"':"":t}};String.prototype.resolve=function(t,o){var n=this;return p.each(t,function(t,e){if(null!=e&&"function"!=typeof e)if("object"==typeof e){var i=o?p.extend([],o):[];i.push(t),n=n.resolve(e,i)+""}else{A&&A[t]&&"function"==typeof A[t]&&(e=A[t](e)),t=o?o.join(".")+"."+t:t;var s=new RegExp("\\{\\{"+t+"\\}\\}","gm");n=n.replace(s,e.replace?e.replace(/\$/gi,"$"):e)}}),n}}Array.prototype.first||(Array.prototype.first=function(t){for(var e=0;ei?this.length>s?this.slice(i,s):this.slice(i):[]}),Array.prototype.where||(Array.prototype.where=function(t){for(var e=[],i=0;i tr").first(),r=!1;t.children().each(function(){var t=p(this),e=t.data(),i=localStorage.getItem("visibleColumns["+n.uid+"]["+e.columnId+"]"),s=localStorage.getItem("sortColumns["+n.uid+"]["+e.columnId+"]"),o={id:e.columnId,identifier:null==n.identifier&&e.identifier||!1,converter:n.options.converters[e.converter||e.type]||n.options.converters.string,text:t.html(),align:e.align||"left",headerAlign:e.headerAlign||"left",cssClass:e.cssClass||"",headerCssClass:e.headerCssClass||"",formatter:n.options.formatters[e.formatter]||null,order:r?null:null===s?"asc"===e.order||"desc"===e.order?e.order:null:"asc"===s||"desc"===s?s:null,searchable:!(!1===e.searchable),sortable:!(!1===e.sortable),visible:null===i?!(!1===e.visible):"true"===i,visibleInSelection:!(!1===e.visibleInSelection),width:p.isNumeric(e.width)?e.width+"px":"string"==typeof e.width?e.width:null};n.columns.push(o),null!=o.order&&(n.sortDictionary[o.id]=o.order),o.identifier&&(n.identifier=o.id,n.converter=o.converter),n.options.multiSort||null===o.order||(r=!0)})}.call(this),this.selection=this.options.selection&&null!=this.identifier,this.rowCount=localStorage.getItem("rowCount["+this.uid+"]")||this.rowCount,function(){if(!this.options.ajax){var e=this,t=this.element.find("tbody > tr");t.each(function(){var t=p(this),i=t.children("td"),s={};p.each(e.columns,function(t,e){s[e.id]=e.converter.from(i.eq(t).text())}),r.call(e,s)}),a.call(this,this.rows.length),D.call(this)}}.call(this),function(){var t=this.options.templates,e=this.element.parent().hasClass(this.options.css.responsiveTable)?this.element.parent():this.element;this.element.addClass(this.options.css.table),0===this.element.children("tbody").length&&this.element.append(t.body);1&this.options.navigation&&(this.header=p(t.header.resolve(v.call(this,{id:this.element._bgId()+"-header"}))),e.before(this.header));2&this.options.navigation&&(this.footer=p(t.footer.resolve(v.call(this,{id:this.element._bgId()+"-footer"}))),e.after(this.footer))}.call(this),x.call(this),function(){if(0!==this.options.navigation){var t=this.options.css,e=m(t.search),i=g.call(this,e);if(0=s.options.searchSettings.characters)&&(h.clearTimeout(n),n=h.setTimeout(function(){y.call(s,e)},s.options.searchSettings.delay)))}),C.call(this,i,a)}}}.call(this),function(){if(0!==this.options.navigation){var t=this.options.css,e=m(t.actions),i=g.call(this,e);if(0 tr").on("click"+f,"> tr",function(t){t.stopPropagation();var e=p(this),i=null==o.identifier?e.data("row-id"):o.converter.from(e.data("row-id")+""),s=null==o.identifier?o.currentRows[i]:o.currentRows.first(function(t){return t[o.identifier]===i});o.selection&&o.options.rowSelect&&(e.hasClass(o.options.css.selected)?o.deselect([i]):o.select([i])),o.element.trigger("click"+f,[o.columns,s])})}.call(this,e)}else b.call(this)}.call(o,t),function(){if(0!==this.options.navigation){var t=m(this.options.css.infos),e=g.call(this,t);if(0this.total?this.total:i,start:0===this.total?0:i-this.rowCount+1,total:this.total})));C.call(this,e,s)}}}.call(o),function(){if(0!==this.options.navigation){var t=m(this.options.css.pagination),e=g.call(this,t)._bgShowAria(-1!==this.rowCount);if(-1!==this.rowCount&&0=this.options.padding?Math.max(l,1):Math.max(l-this.options.padding+r,1),c=2*this.options.padding+1,h=c<=o?c:o;w.call(this,n,"first","«","first")._bgEnableAria(1 td").first(),o=r.element.height()-e.height()-(s.height()+20),n=r.columns.where(u).length;r.selection&&(n+=1),i.html(t.loading.resolve(v.call(r,{columns:n}))),-1!==r.rowCount&&0 td").css("padding","20px 0 "+o+"px")}},250)}.call(this),this.options.ajax){var t=function(){var t={current:this.current,rowCount:this.rowCount,sort:this.sortDictionary,searchPhrase:this.searchPhrase},e=this.options.post;return e=p.isFunction(e)?e():e,this.options.requestHandler(p.extend(!0,t,e))}.call(this),i=function(){var t=this.options.url;return p.isFunction(t)?t():t}.call(this);if(null==i||"string"!=typeof i||0===i.length)throw new Error("Url setting must be a none empty string or a function that returns one.");this.xqr&&this.xqr.abort();var s={url:i,data:t,success:function(t){o.xqr=null,"string"==typeof t&&(t=p.parseJSON(t)),t=o.options.responseHandler(t),o.current=t.current,e(t.rows,t.total)},error:function(t,e,i){o.xqr=null,"abort"!==e&&(b.call(o),o.element._bgBusyAria(!1).trigger("loaded"+f))}};s=p.extend(this.options.ajaxSettings,s),this.xqr=p.ajax(s)}else{var n=0 tr"),a=this.options.css,c=this.options.templates,h="",u=this.options.sorting;if(this.selection){var e=this.options.multiSelect?c.select.resolve(v.call(l,{type:"checkbox",value:"all"})):"";h+=c.rawHeaderCell.resolve(v.call(l,{content:e,css:a.selectCell}))}if(p.each(this.columns,function(t,e){if(e.visible){var i=l.sortDictionary[e.id],s=u&&i&&"asc"===i?a.iconUp:u&&i&&"desc"===i?a.iconDown:"",o=c.icon.resolve(v.call(l,{iconCss:s})),n=e.headerAlign,r=0i[n.id]?r(1):e[n.id]o?t(e,i,o):0})}}var c=function(t,e){this.element=p(t),this.origin=this.element.clone(),this.options=p.extend(!0,{},c.defaults,this.element.data(),e);var i=this.options.rowCount=this.element.data().rowCount||e.rowCount||this.options.rowCount;this.columns=[],this.current=1,this.currentRows=[],this.identifier=null,this.selection=!1,this.converter=null,this.rowCount=p.isArray(i)?i[0]:i,this.rows=[],this.searchPhrase="",this.selectedRows=[],this.sortDictionary={},this.total=0,this.totalPages=0,this.cachedParams={lbl:this.options.labels,css:this.options.css,ctx:{}},this.header=null,this.footer=null,this.xqr=null,this.uid=h.location.pathname+"#"+this.element.attr("id")};if(c.defaults={navigation:3,padding:2,columnSelection:!0,rowCount:[10,25,50,-1],selection:!1,multiSelect:!1,rowSelect:!1,keepSelection:!1,highlightRows:!1,sorting:!0,multiSort:!1,searchSettings:{delay:250,characters:1},ajax:!1,ajaxSettings:{method:"POST"},post:{},url:"",caseSensitive:!0,requestHandler:function(t){return t},responseHandler:function(t){return t},converters:{numeric:{from:function(t){return+t},to:function(t){return void 0===t?"":t+""}},string:{from:function(t){return t},to:function(t){return t}},datetime:{from:function(t){return t?moment(1e3*parseInt(t)):""},to:function(t){return t?t.format("lll"):""}},memsize:{from:function(t){for(var e=["","K","M","G","T","P","E","Z","Y"],i=parseInt(t),s=t.slice(-1).toUpperCase(),o=e.length-1;0<=o;o--)if(s===e[o]){i*=Math.pow(1024,o);break}return i},to:function(t){for(var e=["","K","M","G","T","P","E","Z","Y"],i=e.length-1;0<=i;i--)if(t>=5*Math.pow(1024,i))return parseInt(t/Math.pow(1024,i))+e[i];return parseInt(t)+""}},notprefixable:{to:function(t){return t.not?' '+t.val:t.val}}},css:{actions:"actions btn-group",center:"text-center",columnHeaderAnchor:"column-header-anchor",columnHeaderText:"text",dropDownItem:"dropdown-item",dropDownItemButton:"dropdown-item-button",dropDownItemCheckbox:"dropdown-item-checkbox",dropDownMenu:"dropdown btn-group",dropDownMenuItems:"dropdown-menu pull-right",dropDownMenuText:"dropdown-text",footer:"bootgrid-footer container-fluid",header:"bootgrid-header container-fluid",icon:"icon glyphicon",iconColumns:"glyphicon-th-list",iconDown:"glyphicon-chevron-down",iconRefresh:"glyphicon-refresh",iconSearch:"glyphicon-search",iconUp:"glyphicon-chevron-up",infos:"infos",left:"text-left",pagination:"pagination",paginationButton:"button",responsiveTable:"table-responsive",right:"text-right",search:"search form-group",searchField:"search-field form-control",selectBox:"select-box",selectCell:"select-cell",selected:"active",sortable:"sortable",table:"bootgrid-table table"},formatters:{},labels:{all:"All",infos:"Showing {{ctx.start}} to {{ctx.end}} of {{ctx.total}} entries",loading:"Loading...",noResults:"No results found!",refresh:"Refresh",search:"Search"},statusMapping:{0:"success",1:"info",2:"warning",3:"danger"},templates:{actionButton:'',actionDropDown:'
      ',actionDropDownItem:'
    • {{ctx.text}}
    • ',actionDropDownCheckboxItem:'
    • ',actions:'
      ',body:"",cell:'{{ctx.content}}',footer:'

      ',header:'

      ',headerCell:'{{ctx.column.text}}{{ctx.icon}}',icon:'',infos:'
      {{lbl.infos}}
      ',loading:'{{lbl.loading}}',noResults:'{{lbl.noResults}}',pagination:'
        ',paginationItem:'
      • {{ctx.text}}
      • ',rawHeaderCell:'{{ctx.content}}',row:"{{ctx.cells}}",search:'
        ',select:''}},c.prototype.append=function(t){if(this.options.ajax);else{for(var e=[],i=0;i=this.currentRows.length;for(i=0;!this.options.keepSelection&&n&&i tr "+o+":checked").trigger("click"+f),i=0;i tr[data-row-id="'+this.selectedRows[i]+'"]').addClass(this.options.css.selected)._bgAria("selected","true").find(o).prop("checked",!0);this.element.trigger("selected"+f,[s])}}return this},c.prototype.deselect=function(t){if(this.selection){t=t||this.currentRows.propValues(this.identifier);for(var e,i,s,o=[];0 tr[data-row-id="'+o[i][this.identifier]+'"]').removeClass(this.options.css.selected)._bgAria("selected","false").find(n).prop("checked",!1);this.element.trigger("deselected"+f,[o])}}return this},c.prototype.sort=function(t){var e=t?p.extend({},t):{};return e===this.sortDictionary||(this.sortDictionary=e,x.call(this),D.call(this),d.call(this)),this},c.prototype.getColumnSettings=function(){return p.merge([],this.columns)},c.prototype.getCurrentPage=function(){return this.current},c.prototype.getCurrentRows=function(){return p.merge([],this.currentRows)},c.prototype.getRowCount=function(){return this.rowCount},c.prototype.getSearchPhrase=function(){return this.searchPhrase},c.prototype.getSelectedRows=function(){return p.merge([],this.selectedRows)},c.prototype.getSortDictionary=function(){return p.extend({},this.sortDictionary)},c.prototype.getTotalPageCount=function(){return this.totalPages},c.prototype.getTotalRowCount=function(){return this.total},p.fn.extend({_bgAria:function(t,e){return e?this.attr("aria-"+t,e):this.attr("aria-"+t)},_bgBusyAria:function(t){return null==t||t?this._bgAria("busy","true"):this._bgAria("busy","false")},_bgRemoveAria:function(t){return this.removeAttr("aria-"+t)},_bgEnableAria:function(t){return null==t||t?this.removeClass("disabled")._bgAria("disabled","false"):this.addClass("disabled")._bgAria("disabled","true")},_bgEnableField:function(t){return null==t||t?this.removeAttr("disabled"):this.attr("disabled","disable")},_bgShowAria:function(t){return null==t||t?this.show()._bgAria("hidden","false"):this.hide()._bgAria("hidden","true")},_bgSelectAria:function(t){return null==t||t?this.addClass("active")._bgAria("selected","true"):this.removeClass("active")._bgAria("selected","false")},_bgId:function(t){return t?this.attr("id",t):this.attr("id")}}),!String.prototype.resolve){var S={checked:function(t){return"boolean"==typeof t?t?'checked="checked"':"":t}};String.prototype.resolve=function(t,o){var n=this;return p.each(t,function(t,e){if(null!=e&&"function"!=typeof e)if("object"==typeof e){var i=o?p.extend([],o):[];i.push(t),n=n.resolve(e,i)+""}else{S&&S[t]&&"function"==typeof S[t]&&(e=S[t](e)),t=o?o.join(".")+"."+t:t;var s=new RegExp("\\{\\{"+t+"\\}\\}","gm");n=n.replace(s,e.replace?e.replace(/\$/gi,"$"):e)}}),n}}Array.prototype.first||(Array.prototype.first=function(t){for(var e=0;ei?this.length>s?this.slice(i,s):this.slice(i):[]}),Array.prototype.where||(Array.prototype.where=function(t){for(var e=[],i=0;i 1; $this.parents(itemsSelector).find(selector + ":has(" + checkboxSelector + ":checked)") ._bgEnableAria(enable).find(checkboxSelector)._bgEnableField(enable); @@ -542,13 +549,14 @@ function renderRowCountSelection(actions) { var item = $(tpl.actionDropDownItem.resolve(getParams.call(that, { text: getText(value), action: value }))) - ._bgSelectAria(value === that.rowCount) + ._bgSelectAria(value.toString() === that.rowCount.toString()) .on("click" + namespace, menuItemSelector, function (e) { e.preventDefault(); var $this = $(this), newRowCount = $this.data("action"); + localStorage.setItem('rowCount[' + that.uid + ']', newRowCount); if (newRowCount !== that.rowCount) { // todo: sophisticated solution needed for calculating which page is selected @@ -833,11 +841,16 @@ function setTableHeaderSortDirection(element) { element.parents("tr").first().find(iconSelector).removeClass(css.iconDown + " " + css.iconUp); this.sortDictionary = {}; + for (var i = 0; i < this.columns.length; i++) + { + localStorage.removeItem('sortColumns[' + this.uid + '][' + this.columns[i].id + ']'); + } } if (sortOrder && sortOrder === "asc") { this.sortDictionary[columnId] = "desc"; + localStorage.setItem('sortColumns[' + this.uid + '][' + columnId + ']', "desc"); icon.removeClass(css.iconUp).addClass(css.iconDown); } else if (sortOrder && sortOrder === "desc") @@ -853,17 +866,20 @@ function setTableHeaderSortDirection(element) } } this.sortDictionary = newSort; + localStorage.removeItem('sortColumns[' + this.uid + '][' + columnId + ']'); icon.removeClass(css.iconDown); } else { this.sortDictionary[columnId] = "asc"; + localStorage.setItem('sortColumns[' + this.uid + '][' + columnId + ']', "asc"); icon.removeClass(css.iconDown).addClass(css.iconUp); } } else { this.sortDictionary[columnId] = "asc"; + localStorage.setItem('sortColumns[' + this.uid + '][' + columnId + ']', "asc"); icon.addClass(css.iconUp); } } diff --git a/src/public.js b/src/public.js index 9589b29..b5b3e88 100644 --- a/src/public.js +++ b/src/public.js @@ -38,6 +38,7 @@ var Grid = function(element, options) this.header = null; this.footer = null; this.xqr = null; + this.uid = window.location.pathname + "#" + this.element.attr('id'); // todo: implement cache }; From 7b8da26bb89f7697e49b1b714f5eb87f4627637f Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Wed, 17 Aug 2022 11:11:25 +0200 Subject: [PATCH 2/7] Minor bugfix in localstorage usage for rowCount rowCount should be an int, but localStorage items are saved as strings. parse --- src/internal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/internal.js b/src/internal.js index 736e77c..0cebaf7 100644 --- a/src/internal.js +++ b/src/internal.js @@ -68,7 +68,7 @@ function init() loadColumns.call(this); // Loads columns from HTML thead tag this.selection = this.options.selection && this.identifier != null; - this.rowCount = localStorage.getItem('rowCount[' + this.uid + ']') || this.rowCount; + this.rowCount = parseInt(localStorage.getItem('rowCount[' + this.uid + ']')) || this.rowCount; loadRows.call(this); // Loads rows from HTML tbody tag if ajax is false prepareTable.call(this); renderTableHeader.call(this); From 292cfdf74930c79018af8110caf4fa4e5b5a8e1e Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Mon, 26 Feb 2024 20:40:35 +0100 Subject: [PATCH 3/7] converters / datetime - when an epoch is offered as number, make sure to convert to moment() before sending it to the client. Adds support for datetime fields as integer/float data. --- src/public.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/public.js b/src/public.js index b5b3e88..7015126 100644 --- a/src/public.js +++ b/src/public.js @@ -264,6 +264,9 @@ Grid.defaults = { return value ? moment(parseInt(value)*1000) : ""; }, to: function (value) { + if (!Object.is(value)) { + value = moment(parseInt(value)*1000); + } return value ? value.format("lll") : ""; } }, From 96d071b1f19316c6a706a509eb593d83c7d13868 Mon Sep 17 00:00:00 2001 From: Stephan de Wit Date: Wed, 17 Apr 2024 16:32:34 +0200 Subject: [PATCH 4/7] converters / datetime - fix object check (#7) Object.is() checks equality between two parameters, not whether the variable is an object, better to use the built-in moment method for this. --- src/public.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/public.js b/src/public.js index 7015126..02256f2 100644 --- a/src/public.js +++ b/src/public.js @@ -264,7 +264,7 @@ Grid.defaults = { return value ? moment(parseInt(value)*1000) : ""; }, to: function (value) { - if (!Object.is(value)) { + if (!moment.isMoment(value)) { value = moment(parseInt(value)*1000); } return value ? value.format("lll") : ""; From c12ecbbf684b1cee75292a367ba50579d146f97f Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Wed, 17 Apr 2024 16:35:28 +0200 Subject: [PATCH 5/7] dist: sync with https://github.com/opnsense/jquery-bootgrid/pull/7 --- dist/jquery.bootgrid.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dist/jquery.bootgrid.js b/dist/jquery.bootgrid.js index d8b6e72..6d2a001 100644 --- a/dist/jquery.bootgrid.js +++ b/dist/jquery.bootgrid.js @@ -1239,6 +1239,9 @@ Grid.defaults = { return value ? moment(parseInt(value)*1000) : ""; }, to: function (value) { + if (!moment.isMoment(value)) { + value = moment(parseInt(value)*1000); + } return value ? value.format("lll") : ""; } }, From 6a7d7284a233fc2ae5ee3fef17debc9a48c05999 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Mon, 2 Dec 2024 16:55:20 +0100 Subject: [PATCH 6/7] use fontawesome 6 icons --- dist/jquery.bootgrid.css | 8 +++++--- src/public.js | 12 ++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/dist/jquery.bootgrid.css b/dist/jquery.bootgrid.css index 1803491..18111da 100644 --- a/dist/jquery.bootgrid.css +++ b/dist/jquery.bootgrid.css @@ -18,12 +18,14 @@ vertical-align: middle; width: 180px; } -.bootgrid-header .search .glyphicon, -.bootgrid-footer .search .glyphicon { +.bootgrid-header .search .fa-solid, +.bootgrid-footer .search .fa-solid { top: 0; } .bootgrid-header .search .fa, -.bootgrid-footer .search .fa { +.bootgrid-header .search .fa-solid, +.bootgrid-footer .search .fa, +.bootgrid-footer .search .fa-solid { display: table-cell; } .bootgrid-header .search.search-field::-ms-clear, diff --git a/src/public.js b/src/public.js index 02256f2..2d143c4 100644 --- a/src/public.js +++ b/src/public.js @@ -327,12 +327,12 @@ Grid.defaults = { dropDownMenuText: "dropdown-text", // must be a unique class name or constellation of class names within the actionDropDown footer: "bootgrid-footer container-fluid", header: "bootgrid-header container-fluid", - icon: "icon glyphicon", - iconColumns: "glyphicon-th-list", - iconDown: "glyphicon-chevron-down", - iconRefresh: "glyphicon-refresh", - iconSearch: "glyphicon-search", - iconUp: "glyphicon-chevron-up", + icon: "icon fa-solid", + iconColumns: "fa-list", + iconDown: "fa-chevron-down", + iconRefresh: "fa-arrows-rotate", + iconSearch: "fa-magnifying-glass", + iconUp: "fa-chevron-up", infos: "infos", // must be a unique class name or constellation of class names within the header and footer, left: "text-left", pagination: "pagination", // must be a unique class name or constellation of class names within the header and footer From 747890a640e859adc0e1e10f54a0f0e502e96962 Mon Sep 17 00:00:00 2001 From: Stephan de Wit Date: Wed, 19 Mar 2025 09:08:40 +0100 Subject: [PATCH 7/7] provide option for initial search phrase (#8) --- dist/jquery.bootgrid.js | 7 +++++-- src/internal.js | 5 ++++- src/public.js | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/dist/jquery.bootgrid.js b/dist/jquery.bootgrid.js index 6d2a001..5b3769d 100644 --- a/dist/jquery.bootgrid.js +++ b/dist/jquery.bootgrid.js @@ -728,12 +728,15 @@ function renderSearchField() var that = this, tpl = this.options.templates, timer = null, // fast keyup detection - currentValue = "", + currentValue = this.searchPhrase, searchFieldSelector = getCssSelector(css.searchField), search = $(tpl.search.resolve(getParams.call(this))), searchField = (search.is(searchFieldSelector)) ? search : search.find(searchFieldSelector); + // populate search field if initial search phrase provided + $(searchField).val(currentValue); + searchField.on("keyup" + namespace, function (e) { e.stopPropagation(); @@ -1000,7 +1003,7 @@ var Grid = function(element, options) this.converter = null; // The converter for the column that is marked as identifier this.rowCount = ($.isArray(rowCount)) ? rowCount[0] : rowCount; this.rows = []; - this.searchPhrase = ""; + this.searchPhrase = this.options.initialSearchPhrase || ""; this.selectedRows = []; this.sortDictionary = {}; this.total = 0; diff --git a/src/internal.js b/src/internal.js index 0cebaf7..98a648e 100644 --- a/src/internal.js +++ b/src/internal.js @@ -718,12 +718,15 @@ function renderSearchField() var that = this, tpl = this.options.templates, timer = null, // fast keyup detection - currentValue = "", + currentValue = this.searchPhrase, searchFieldSelector = getCssSelector(css.searchField), search = $(tpl.search.resolve(getParams.call(this))), searchField = (search.is(searchFieldSelector)) ? search : search.find(searchFieldSelector); + // populate search field if initial search phrase provided + $(searchField).val(currentValue); + searchField.on("keyup" + namespace, function (e) { e.stopPropagation(); diff --git a/src/public.js b/src/public.js index 2d143c4..62bd50a 100644 --- a/src/public.js +++ b/src/public.js @@ -25,7 +25,7 @@ var Grid = function(element, options) this.converter = null; // The converter for the column that is marked as identifier this.rowCount = ($.isArray(rowCount)) ? rowCount[0] : rowCount; this.rows = []; - this.searchPhrase = ""; + this.searchPhrase = this.options.initialSearchPhrase || ""; this.selectedRows = []; this.sortDictionary = {}; this.total = 0;