diff --git a/CHANGELOG.md b/CHANGELOG.md
index 928c580..3a7d587 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,17 @@
# Changelog
+## 1.2.0
+
+### Enhancements & Features
+- Fixed table headers
+- Fixed table column
+- Sorted header column CSS class
+- Improved ajax request settings [#27](http://github.com/rstaib/jquery-bootgrid/issues/27)
+- Nested object support [#46](http://github.com/rstaib/jquery-bootgrid/issues/46)
+
+### Bug Fixes
+- ...
+
## 1.1.1
### Bug Fixes
diff --git a/README.md b/README.md
index 082e03d..53535ac 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-jQuery Bootgrid Plugin [](https://travis-ci.org/rstaib/jquery-bootgrid) [](http://badge.fury.io/bo/jquery.bootgrid) [](http://badge.fury.io/nu/jquery.bootgrid)
+jQuery Bootgrid Plugin [](https://travis-ci.org/rstaib/jquery-bootgrid)   
============
Nice, sleek and intuitive. A grid control especially designed for bootstrap.
diff --git a/bootgrid.jquery.json b/bootgrid.jquery.json
index 130089c..d3a203e 100644
--- a/bootgrid.jquery.json
+++ b/bootgrid.jquery.json
@@ -14,7 +14,7 @@
"accessibility",
"bootstrap"
],
- "version": "1.1.1",
+ "version": "1.2.0",
"author": {
"name": "Rafael Staib",
"email": "me@rafaelstaib.com",
diff --git a/bower.json b/bower.json
index 20d0bad..42e0c35 100644
--- a/bower.json
+++ b/bower.json
@@ -13,7 +13,7 @@
"accessibility",
"bootstrap"
],
- "version": "1.1.1",
+ "version": "1.2.0",
"authors": [
{ "name": "Rafael Staib", "email": "me@rafaelstaib.com", "url": "http://www.rafaelstaib.com" }
],
diff --git a/build/jQuery.Bootgrid.1.1.1.nupkg b/build/jQuery.Bootgrid.1.1.1.nupkg
deleted file mode 100644
index 39b36bf..0000000
Binary files a/build/jQuery.Bootgrid.1.1.1.nupkg and /dev/null differ
diff --git a/build/jQuery.Bootgrid.1.2.0.nupkg b/build/jQuery.Bootgrid.1.2.0.nupkg
new file mode 100644
index 0000000..79ec814
Binary files /dev/null and b/build/jQuery.Bootgrid.1.2.0.nupkg differ
diff --git a/build/jquery.bootgrid-1.1.1.zip b/build/jquery.bootgrid-1.1.1.zip
deleted file mode 100644
index 1e90486..0000000
Binary files a/build/jquery.bootgrid-1.1.1.zip and /dev/null differ
diff --git a/build/jquery.bootgrid-1.2.0.zip b/build/jquery.bootgrid-1.2.0.zip
new file mode 100644
index 0000000..f1fdd8c
Binary files /dev/null and b/build/jquery.bootgrid-1.2.0.zip differ
diff --git a/build/jquery.bootgrid.css b/build/jquery.bootgrid.css
index 652d291..ba75f66 100644
--- a/build/jquery.bootgrid.css
+++ b/build/jquery.bootgrid.css
@@ -94,8 +94,9 @@
top: 2px;
}
.bootgrid-table th:hover,
-.bootgrid-table th:active {
- background: #fafafa;
+.bootgrid-table th:active,
+.bootgrid-table th.active {
+ background: #fafafa !important;
}
.bootgrid-table td {
overflow: hidden;
diff --git a/build/jquery.bootgrid.js b/build/jquery.bootgrid.js
index e3a4190..77d6a73 100644
--- a/build/jquery.bootgrid.js
+++ b/build/jquery.bootgrid.js
@@ -1,5 +1,5 @@
/*!
- * jQuery Bootgrid v1.1.1 - 09/24/2014
+ * jQuery Bootgrid v1.2.0 - 09/24/2014
* Copyright (c) 2014 Rafael Staib (http://www.jquery-bootgrid.com)
* Licensed under MIT http://www.opensource.org/licenses/MIT
*/
@@ -133,7 +133,7 @@
}
// ensures that only the first order will be applied in case of multi sorting is disabled
- if (!that.options.multiSort && column.order !== null)
+ if (!that.options.multiSort && column.order != null)
{
sorted = true;
}
@@ -751,7 +751,8 @@
(sorting && sortOrder && sortOrder === "desc") ? css.iconDown : ""),
icon = tpl.icon.resolve(getParams.call(that, { iconCss: iconCss })),
align = column.headerAlign,
- cssClass = (column.headerCssClass.length > 0) ? " " + column.headerCssClass : "";
+ cssClass = ((column.headerCssClass.length > 0) ? " " + column.headerCssClass : "") +
+ ((that.options.highlightColumns && column.order != null) ? " " + that.options.css.active : "");
html += tpl.headerCell.resolve(getParams.call(that, {
column: column, icon: icon, sortable: sorting && column.sortable && css.sortable || "",
css: ((align === "right") ? css.right : (align === "center") ?
@@ -764,7 +765,8 @@
// todo: create a own function for that piece of code
if (sorting)
{
- var sortingSelector = getCssSelector(css.sortable),
+ var activeSelector = getCssSelector(css.active),
+ sortingSelector = getCssSelector(css.sortable),
iconSelector = getCssSelector(css.icon);
headerRow.off("click" + namespace, sortingSelector)
.on("click" + namespace, sortingSelector, function (e)
@@ -772,19 +774,20 @@
e.preventDefault();
var $this = $(this),
columnId = $this.data("column-id") || $this.parents("th").first().data("column-id"),
- sortOrder = that.sort[columnId],
- icon = $this.find(iconSelector);
+ sortOrder = that.sort[columnId];
if (!that.options.multiSort)
{
- $this.parents("tr").first().find(iconSelector).removeClass(css.iconDown + " " + css.iconUp);
+ $this.parents("tr:first").find(iconSelector).removeClass(css.iconDown + " " + css.iconUp)
+ .end().find(activeSelector).removeClass(css.active);
that.sort = {};
}
if (sortOrder && sortOrder === "asc")
{
that.sort[columnId] = "desc";
- icon.removeClass(css.iconUp).addClass(css.iconDown);
+ $this.parent().addClass(css.active).find(iconSelector)
+ .removeClass(css.iconUp).addClass(css.iconDown);
}
else if (sortOrder && sortOrder === "desc")
{
@@ -799,18 +802,21 @@
}
}
that.sort = newSort;
- icon.removeClass(css.iconDown);
+ $this.parent().removeClass(css.active).find(iconSelector)
+ .removeClass(css.iconDown);
}
else
{
that.sort[columnId] = "asc";
- icon.removeClass(css.iconDown).addClass(css.iconUp);
+ $this.parent().addClass(css.active).find(iconSelector)
+ .removeClass(css.iconDown).addClass(css.iconUp);
}
}
else
{
that.sort[columnId] = "asc";
- icon.addClass(css.iconUp);
+ $this.parent().addClass(css.active).find(iconSelector)
+ .addClass(css.iconUp);
}
sortRows.call(that);
@@ -951,6 +957,7 @@
this.header = null;
this.footer = null;
this.xqr = null;
+ this.original = this.element.clone();
// todo: implement cache
};
@@ -1021,6 +1028,17 @@
**/
keepSelection: false,
+ /**
+ * Defines whether the columns which are filtered or sorted should be highlighted or not.
+ *
+ * @property highlightColumns
+ * @type Boolean
+ * @default false
+ * @for defaults
+ * @since 1.2.0
+ **/
+ highlightColumns: false,
+
highlightRows: false, // highlights new rows (find the page of the first new row)
sorting: true,
multiSort: false,
@@ -1113,6 +1131,18 @@
**/
css: {
actions: "actions btn-group", // must be a unique class name or constellation of class names within the header and footer
+
+ /**
+ * CSS class to highlight active parts like sorted or filtered columns.
+ *
+ * @property active
+ * @type String
+ * @default "active"
+ * @for css
+ * @since 1.2.0
+ **/
+ active: "active",
+
center: "text-center",
columnHeaderAnchor: "column-header-anchor", // must be a unique class name or constellation of class names within the column header cell
columnHeaderText: "text",
@@ -1234,7 +1264,7 @@
{
if (this.options.ajax)
{
- // todo: implement ajax DELETE
+ // todo: implement ajax POST
}
else
{
@@ -1298,7 +1328,7 @@
{
this.footer.remove();
}
- this.element.remove("tbody").off(namespace).removeData(namespace);
+ this.element.before(this.original).remove();
return this;
};
diff --git a/build/jquery.bootgrid.min.js b/build/jquery.bootgrid.min.js
index 4daf3f1..f59047f 100644
--- a/build/jquery.bootgrid.min.js
+++ b/build/jquery.bootgrid.min.js
@@ -1,6 +1,6 @@
/*!
- * jQuery Bootgrid v1.1.1 - 09/24/2014
+ * jQuery Bootgrid v1.2.0 - 09/24/2014
* Copyright (c) 2014 Rafael Staib (http://www.jquery-bootgrid.com)
* Licensed under MIT http://www.opensource.org/licenses/MIT
*/
-!function(a,b){"use strict";function c(a){function b(b){return c.identifier&&b[c.identifier]===a[c.identifier]}var c=this;return this.rows.contains(b)?!1:(this.rows.push(a),!0)}function d(b){return b?a.extend({},this.cachedParams,{ctx:b}):this.cachedParams}function e(){var b={current:this.current,rowCount:this.rowCount,sort:this.sort,searchPhrase:this.searchPhrase},c=this.options.post;return c=a.isFunction(c)?c():c,this.options.requestHandler(a.extend(!0,b,c))}function f(b){return"."+a.trim(b).replace(/\s+/gm,".")}function g(){var b=this.options.url;return a.isFunction(b)?b():b}function h(){this.element.trigger("initialize"+C),k.call(this),m.call(this),n.call(this),y.call(this),x.call(this),o.call(this),l.call(this),this.element.trigger("initialized"+C)}function i(){this.options.highlightRows}function j(a){return a.visible}function k(){var b=this,c=this.element.find("thead > tr").first(),d=!1;c.children().each(function(){var c=a(this),e=c.data(),f={id:e.columnId,identifier:null==b.identifier&&e.identifier||!1,converter:b.options.converters[e.converter||e.type]||b.options.converters.string,text:c.text(),align:e.align||"left",headerAlign:e.headerAlign||"left",cssClass:e.cssClass||"",headerCssClass:e.headerCssClass||"",formatter:b.options.formatters[e.formatter]||null,order:d||"asc"!==e.order&&"desc"!==e.order?null:e.order,searchable:!(e.searchable===!1),sortable:!(e.sortable===!1),visible:!(e.visible===!1)};b.columns.push(f),null!=f.order&&(b.sort[f.id]=f.order),f.identifier&&(b.identifier=f.id,b.converter=f.converter),b.options.multiSort||null===f.order||(d=!0)})}function l(){function c(a){for(var b,c=new RegExp(f.searchPhrase,f.options.caseSensitive?"g":"gi"),d=0;d-1)return!0;return!1}function d(a,b){f.currentRows=a,f.total=b,f.totalPages=Math.ceil(b/f.rowCount),f.options.keepSelection||(f.selectedRows=[]),v.call(f,a),q.call(f),s.call(f),f.element._bgBusyAria(!1).trigger("loaded"+C)}var f=this,h=e.call(this),i=g.call(this);if(this.options.ajax&&(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.");if(this.element._bgBusyAria(!0).trigger("load"+C),A.call(this),this.options.ajax)f.xqr&&f.xqr.abort(),f.xqr=a.post(i,h,function(b){f.xqr=null,"string"==typeof b&&(b=a.parseJSON(b)),b=f.options.responseHandler(b),f.current=b.current,d(b.rows,b.total)}).fail(function(a,b){f.xqr=null,"abort"!==b&&(r.call(f),f.element._bgBusyAria(!1).trigger("loaded"+C))});else{var j=this.searchPhrase.length>0?this.rows.where(c):this.rows,k=j.length;-1!==this.rowCount&&(j=j.page(this.current,this.rowCount)),b.setTimeout(function(){d(j,k)},10)}}function m(){if(!this.options.ajax){var b=this,d=this.element.find("tbody > tr");d.each(function(){var d=a(this),e=d.children("td"),f={};a.each(b.columns,function(a,b){f[b.id]=b.converter.from(e.eq(a).text())}),c.call(b,f)}),this.total=this.rows.length,this.totalPages=-1===this.rowCount?1:Math.ceil(this.total/this.rowCount),B.call(this)}}function n(){var b=this.options.templates,c=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(b.body),1&this.options.navigation&&(this.header=a(b.header.resolve(d.call(this,{id:this.element._bgId()+"-header"}))),c.before(this.header)),2&this.options.navigation&&(this.footer=a(b.footer.resolve(d.call(this,{id:this.element._bgId()+"-footer"}))),c.after(this.footer))}function o(){if(0!==this.options.navigation){var b=this.options.css,c=f(b.actions),e=this.header.find(c),g=this.footer.find(c);if(e.length+g.length>0){var h=this,i=this.options.templates,j=a(i.actions.resolve(d.call(this)));if(this.options.ajax){var k=i.icon.resolve(d.call(this,{iconCss:b.iconRefresh})),m=a(i.actionButton.resolve(d.call(this,{content:k,text:this.options.labels.refresh}))).on("click"+C,function(a){a.stopPropagation(),h.current=1,l.call(h)});j.append(m)}u.call(this,j),p.call(this,j),z.call(this,e,j,1),z.call(this,g,j,2)}}}function p(b){if(this.options.columnSelection&&this.columns.length>1){var c=this,e=this.options.css,g=this.options.templates,h=g.icon.resolve(d.call(this,{iconCss:e.iconColumns})),i=a(g.actionDropDown.resolve(d.call(this,{content:h}))),k=f(e.dropDownItem),m=f(e.dropDownItemCheckbox),n=f(e.dropDownMenuItems);a.each(this.columns,function(b,h){var o=a(g.actionDropDownCheckboxItem.resolve(d.call(c,{name:h.id,label:h.text,checked:h.visible}))).on("click"+C,k,function(b){b.stopPropagation();var d=a(this),e=d.find(m);if(!e.prop("disabled")){h.visible=e.prop("checked");var f=c.columns.where(j).length>1;d.parents(n).find(k+":has("+m+":checked)")._bgEnableAria(f).find(m)._bgEnableField(f),c.element.find("tbody").empty(),y.call(c),l.call(c)}});i.find(f(e.dropDownMenuItems)).append(o)}),b.append(i)}}function q(){if(0!==this.options.navigation){var b=f(this.options.css.infos),c=this.header.find(b),e=this.footer.find(b);if(c.length+e.length>0){var g=this.current*this.rowCount,h=a(this.options.templates.infos.resolve(d.call(this,{end:0===this.total||-1===g||g>this.total?this.total:g,start:0===this.total?0:g-this.rowCount+1,total:this.total})));z.call(this,c,h,1),z.call(this,e,h,2)}}}function r(){var a=this.element.children("tbody").first(),b=this.options.templates,c=this.columns.where(j).length;this.options.selection&&null!=this.identifier&&(c+=1),a.html(b.noResults.resolve(d.call(this,{columns:c})))}function s(){if(0!==this.options.navigation){var b=f(this.options.css.pagination),c=this.header.find(b)._bgShowAria(-1!==this.rowCount),e=this.footer.find(b)._bgShowAria(-1!==this.rowCount);if(-1!==this.rowCount&&c.length+e.length>0){var g=this.options.templates,h=this.current,i=this.totalPages,j=a(g.pagination.resolve(d.call(this))),k=i-h,l=-1*(this.options.padding-h),m=k>=this.options.padding?Math.max(l,1):Math.max(l-this.options.padding+k,1),n=2*this.options.padding+1,o=i>=n?n:i;t.call(this,j,"first","«","first")._bgEnableAria(h>1),t.call(this,j,"prev","<","prev")._bgEnableAria(h>1);for(var p=0;o>p;p++){var q=p+m;t.call(this,j,q,q,"page-"+q)._bgEnableAria()._bgSelectAria(q===h)}0===o&&t.call(this,j,1,1,"page-1")._bgEnableAria(!1)._bgSelectAria(),t.call(this,j,"next",">","next")._bgEnableAria(i>h),t.call(this,j,"last","»","last")._bgEnableAria(i>h),z.call(this,c,j,1),z.call(this,e,j,2)}}}function t(b,c,e,g){var h=this,i=this.options.templates,j=this.options.css,k=d.call(this,{css:g,text:e,uri:"#"+c}),m=a(i.paginationItem.resolve(k)).on("click"+C,f(j.paginationButton),function(b){b.stopPropagation();var c=a(this),d=c.parent();if(!d.hasClass("active")&&!d.hasClass("disabled")){var e={first:1,prev:h.current-1,next:h.current+1,last:h.totalPages},f=c.attr("href").substr(1);h.current=e[f]||+f,l.call(h)}c.trigger("blur")});return b.append(m),m}function u(b){function c(a){return-1===a?e.options.labels.all:a}var e=this,g=this.options.rowCount;if(a.isArray(g)){var h=this.options.css,i=this.options.templates,j=a(i.actionDropDown.resolve(d.call(this,{content:this.rowCount}))),k=f(h.dropDownMenu),m=f(h.dropDownMenuText),n=f(h.dropDownMenuItems),o=f(h.dropDownItemButton);a.each(g,function(b,f){var g=a(i.actionDropDownItem.resolve(d.call(e,{text:c(f),uri:"#"+f})))._bgSelectAria(f===e.rowCount).on("click"+C,o,function(b){b.preventDefault();var d=a(this),f=+d.attr("href").substr(1);f!==e.rowCount&&(e.current=1,e.rowCount=f,d.parents(n).children().each(function(){var b=a(this),c=+b.find(o).attr("href").substr(1);b._bgSelectAria(c===f)}),d.parents(k).find(m).text(c(f)),l.call(e))});j.find(n).append(g)}),b.append(j)}}function v(b){if(b.length>0){var c=this,e=this.options.css,g=this.options.templates,h=this.element.children("tbody").first(),i=this.options.selection&&null!=this.identifier,j=!0,k="",l="",m="",n="";a.each(b,function(b,f){if(l="",m=' data-row-id="'+(null==c.identifier?b:f[c.identifier])+'"',n="",i){var h=-1!==a.inArray(f[c.identifier],c.selectedRows),o=g.select.resolve(d.call(c,{type:"checkbox",value:f[c.identifier],checked:h}));l+=g.cell.resolve(d.call(c,{content:o,css:e.selectCell})),j=j&&h,h&&(n+=e.selected,m+=' aria-selected="true"')}a.each(c.columns,function(b,h){if(h.visible){var i=a.isFunction(h.formatter)?h.formatter.call(c,h,f):h.converter.to(f[h.id]),j=h.cssClass.length>0?" "+h.cssClass:"";l+=g.cell.resolve(d.call(c,{content:null==i||""===i?" ":i,css:("right"===h.align?e.right:"center"===h.align?e.center:e.left)+j}))}}),n.length>0&&(m+=' class="'+n+'"'),k+=g.row.resolve(d.call(c,{attr:m,cells:l}))}),c.element.find("thead "+f(c.options.css.selectBox)).prop("checked",j),h.html(k),w.call(this,h)}else r.call(this)}function w(b){var c=this,d=this.options.selection&&null!=this.identifier,e=f(this.options.css.selectBox);d&&b.off("click"+C,e).on("click"+C,e,function(b){b.stopPropagation();var d=a(this),e=c.converter.from(d.val());d.prop("checked")?c.select([e]):c.deselect([e])}),b.off("click"+C,"> tr").on("click"+C,"> tr",function(b){b.stopPropagation();var e=a(this),f=c.converter.from(e.data("row-id")),g=null==this.identifier?c.currentRows[f]:c.currentRows.first(function(a){return a[c.identifier]===f});d&&c.options.rowSelect&&(e.hasClass(c.options.css.selected)?c.deselect([f]):c.select([f])),c.element.trigger("click"+C,[c.columns,g])})}function x(){if(0!==this.options.navigation){var c=this.options.css,e=f(c.search),g=this.header.find(e),h=this.footer.find(e);if(g.length+h.length>0){var i=this,j=this.options.templates,k=null,l="",m=f(c.searchField),n=a(j.search.resolve(d.call(this))),o=n.is(m)?n:n.find(m);o.on("keyup"+C,function(c){c.stopPropagation();var d=a(this).val();l!==d&&(l=d,b.clearTimeout(k),k=b.setTimeout(function(){i.search(d)},250))}),z.call(this,g,n,1),z.call(this,h,n,2)}}}function y(){var b=this,c=this.element.find("thead > tr"),e=this.options.css,g=this.options.templates,h="",i=this.options.sorting,j=this.options.selection&&null!=this.identifier;if(j){var k=this.options.multiSelect?g.select.resolve(d.call(b,{type:"checkbox",value:"all"})):"";h+=g.rawHeaderCell.resolve(d.call(b,{content:k,css:e.selectCell}))}if(a.each(this.columns,function(a,c){if(c.visible){var f=b.sort[c.id],j=i&&f&&"asc"===f?e.iconUp:i&&f&&"desc"===f?e.iconDown:"",k=g.icon.resolve(d.call(b,{iconCss:j})),l=c.headerAlign,m=c.headerCssClass.length>0?" "+c.headerCssClass:"";h+=g.headerCell.resolve(d.call(b,{column:c,icon:k,sortable:i&&c.sortable&&e.sortable||"",css:("right"===l?e.right:"center"===l?e.center:e.left)+m}))}}),c.html(h),i){var m=f(e.sortable),n=f(e.icon);c.off("click"+C,m).on("click"+C,m,function(c){c.preventDefault();var d=a(this),f=d.data("column-id")||d.parents("th").first().data("column-id"),g=b.sort[f],h=d.find(n);if(b.options.multiSort||(d.parents("tr").first().find(n).removeClass(e.iconDown+" "+e.iconUp),b.sort={}),g&&"asc"===g)b.sort[f]="desc",h.removeClass(e.iconUp).addClass(e.iconDown);else if(g&&"desc"===g)if(b.options.multiSort){var i={};for(var j in b.sort)j!==f&&(i[j]=b.sort[j]);b.sort=i,h.removeClass(e.iconDown)}else b.sort[f]="asc",h.removeClass(e.iconDown).addClass(e.iconUp);else b.sort[f]="asc",h.addClass(e.iconUp);B.call(b),l.call(b)})}if(j&&this.options.multiSelect){var o=f(e.selectBox);c.off("click"+C,o).on("click"+C,o,function(c){c.stopPropagation(),a(this).prop("checked")?b.select():b.deselect()})}}function z(b,c,d){this.options.navigation&d&&b.each(function(b,d){a(d).before(c.clone(!0)).remove()})}function A(){var a=this.options.templates,b=this.element.children("thead").first(),c=this.element.children("tbody").first(),e=c.find("tr > td").first(),f=this.element.height()-b.height()-(e.height()+20),g=this.columns.where(j).length;this.options.selection&&null!=this.identifier&&(g+=1),c.html(a.loading.resolve(d.call(this,{columns:g}))),-1!==this.rowCount&&f>0&&c.find("tr > td").css("padding","20px 0 "+f+"px")}function B(){function a(c,d,e){function f(a){return"asc"===h.order?a:-1*a}e=e||0;var g=e+1,h=b[e];return c[h.id]>d[h.id]?f(1):c[h.id]g?a(c,d,g):0}var b=[];if(!this.options.ajax){for(var c in this.sort)(this.options.multiSort||0===b.length)&&b.push({id:c,order:this.sort[c]});b.length>0&&this.rows.sort(a)}}var C=".rs.jquery.bootgrid",D=function(b,c){this.element=a(b),this.options=a.extend(!0,{},D.defaults,this.element.data(),c);var d=this.options.rowCount=this.element.data().rowCount||c.rowCount||this.options.rowCount;this.columns=[],this.current=1,this.currentRows=[],this.identifier=null,this.converter=null,this.rowCount=a.isArray(d)?d[0]:d,this.rows=[],this.searchPhrase="",this.selectedRows=[],this.sort={},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(D.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,ajax:!1,post:{},url:"",caseSensitive:!0,requestHandler:function(a){return a},responseHandler:function(a){return a},converters:{numeric:{from:function(a){return+a},to:function(a){return a+""}},string:{from:function(a){return a},to:function(a){return a}}},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",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"},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:'',rawHeaderCell:'{{ctx.content}} | ',row:"{{ctx.cells}}
",search:'',select:''}},D.prototype.append=function(a){if(this.options.ajax);else{for(var b=[],d=0;d0&&(this.options.multiSelect||1!==e.length);)if(c=b.pop(),-1===a.inArray(c,this.selectedRows))for(d=0;d0){var g=f(this.options.css.selectBox),h=this.selectedRows.length>=this.currentRows.length;for(d=0;!this.options.keepSelection&&h&&d tr "+g+":checked").trigger("click"+C),d=0;d tr[data-row-id="'+this.selectedRows[d]+'"]').addClass(this.options.css.selected)._bgAria("selected","true").find(g).prop("checked",!0);this.element.trigger("selected"+C,[e])}}return this},D.prototype.deselect=function(b){if(this.options.selection&&null!=this.identifier){b=b||this.currentRows.propValues(this.identifier);for(var c,d,e,g=[];b.length>0;)if(c=b.pop(),e=a.inArray(c,this.selectedRows),-1!==e)for(d=0;d0){var h=f(this.options.css.selectBox);for(this.element.find("thead "+h).prop("checked",!1),d=0;d tr[data-row-id="'+g[d][this.identifier]+'"]').removeClass(this.options.css.selected)._bgAria("selected","false").find(h).prop("checked",!1);this.element.trigger("deselected"+C,[g])}}return this},D.prototype.sort=function(b){var c=b?a.extend({},b):{};return c===this.sort?this:(this.sort=c,y.call(this),B.call(this),l.call(this),this)},a.fn.extend({_bgAria:function(a,b){return this.attr("aria-"+a,b)},_bgBusyAria:function(a){return null==a||a?this._bgAria("busy","true"):this._bgAria("busy","false")},_bgRemoveAria:function(a){return this.removeAttr("aria-"+a)},_bgEnableAria:function(a){return null==a||a?this.removeClass("disabled")._bgAria("disabled","false"):this.addClass("disabled")._bgAria("disabled","true")},_bgEnableField:function(a){return null==a||a?this.removeAttr("disabled"):this.attr("disabled","disable")},_bgShowAria:function(a){return null==a||a?this.show()._bgAria("hidden","false"):this.hide()._bgAria("hidden","true")},_bgSelectAria:function(a){return null==a||a?this.addClass("active")._bgAria("selected","true"):this.removeClass("active")._bgAria("selected","false")},_bgId:function(a){return a?this.attr("id",a):this.attr("id")}}),!String.prototype.resolve){var E={checked:function(a){return"boolean"==typeof a?a?'checked="checked"':"":a}};String.prototype.resolve=function(b,c){var d=this;return a.each(b,function(b,e){if(null!=e&&"function"!=typeof e)if("object"==typeof e){var f=c?a.extend([],c):[];f.push(b),d=d.resolve(e,f)+""}else{E&&E[b]&&"function"==typeof E[b]&&(e=E[b](e)),b=c?c.join(".")+"."+b:b;var g=new RegExp("\\{\\{"+b+"\\}\\}","gm");d=d.replace(g,e.replace?e.replace(/\$/gi,"$"):e)}}),d}}Array.prototype.first||(Array.prototype.first=function(a){for(var b=0;bc?this.length>d?this.slice(c,d):this.slice(c):[]}),Array.prototype.where||(Array.prototype.where=function(a){for(var b=[],c=0;c tr").first(),d=!1;c.children().each(function(){var c=a(this),e=c.data(),f={id:e.columnId,identifier:null==b.identifier&&e.identifier||!1,converter:b.options.converters[e.converter||e.type]||b.options.converters.string,text:c.text(),align:e.align||"left",headerAlign:e.headerAlign||"left",cssClass:e.cssClass||"",headerCssClass:e.headerCssClass||"",formatter:b.options.formatters[e.formatter]||null,order:d||"asc"!==e.order&&"desc"!==e.order?null:e.order,searchable:!(e.searchable===!1),sortable:!(e.sortable===!1),visible:!(e.visible===!1)};b.columns.push(f),null!=f.order&&(b.sort[f.id]=f.order),f.identifier&&(b.identifier=f.id,b.converter=f.converter),b.options.multiSort||null==f.order||(d=!0)})}function l(){function c(a){for(var b,c=new RegExp(f.searchPhrase,f.options.caseSensitive?"g":"gi"),d=0;d-1)return!0;return!1}function d(a,b){f.currentRows=a,f.total=b,f.totalPages=Math.ceil(b/f.rowCount),f.options.keepSelection||(f.selectedRows=[]),v.call(f,a),q.call(f),s.call(f),f.element._bgBusyAria(!1).trigger("loaded"+C)}var f=this,h=e.call(this),i=g.call(this);if(this.options.ajax&&(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.");if(this.element._bgBusyAria(!0).trigger("load"+C),A.call(this),this.options.ajax)f.xqr&&f.xqr.abort(),f.xqr=a.post(i,h,function(b){f.xqr=null,"string"==typeof b&&(b=a.parseJSON(b)),b=f.options.responseHandler(b),f.current=b.current,d(b.rows,b.total)}).fail(function(a,b){f.xqr=null,"abort"!==b&&(r.call(f),f.element._bgBusyAria(!1).trigger("loaded"+C))});else{var j=this.searchPhrase.length>0?this.rows.where(c):this.rows,k=j.length;-1!==this.rowCount&&(j=j.page(this.current,this.rowCount)),b.setTimeout(function(){d(j,k)},10)}}function m(){if(!this.options.ajax){var b=this,d=this.element.find("tbody > tr");d.each(function(){var d=a(this),e=d.children("td"),f={};a.each(b.columns,function(a,b){f[b.id]=b.converter.from(e.eq(a).text())}),c.call(b,f)}),this.total=this.rows.length,this.totalPages=-1===this.rowCount?1:Math.ceil(this.total/this.rowCount),B.call(this)}}function n(){var b=this.options.templates,c=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(b.body),1&this.options.navigation&&(this.header=a(b.header.resolve(d.call(this,{id:this.element._bgId()+"-header"}))),c.before(this.header)),2&this.options.navigation&&(this.footer=a(b.footer.resolve(d.call(this,{id:this.element._bgId()+"-footer"}))),c.after(this.footer))}function o(){if(0!==this.options.navigation){var b=this.options.css,c=f(b.actions),e=this.header.find(c),g=this.footer.find(c);if(e.length+g.length>0){var h=this,i=this.options.templates,j=a(i.actions.resolve(d.call(this)));if(this.options.ajax){var k=i.icon.resolve(d.call(this,{iconCss:b.iconRefresh})),m=a(i.actionButton.resolve(d.call(this,{content:k,text:this.options.labels.refresh}))).on("click"+C,function(a){a.stopPropagation(),h.current=1,l.call(h)});j.append(m)}u.call(this,j),p.call(this,j),z.call(this,e,j,1),z.call(this,g,j,2)}}}function p(b){if(this.options.columnSelection&&this.columns.length>1){var c=this,e=this.options.css,g=this.options.templates,h=g.icon.resolve(d.call(this,{iconCss:e.iconColumns})),i=a(g.actionDropDown.resolve(d.call(this,{content:h}))),k=f(e.dropDownItem),m=f(e.dropDownItemCheckbox),n=f(e.dropDownMenuItems);a.each(this.columns,function(b,h){var o=a(g.actionDropDownCheckboxItem.resolve(d.call(c,{name:h.id,label:h.text,checked:h.visible}))).on("click"+C,k,function(b){b.stopPropagation();var d=a(this),e=d.find(m);if(!e.prop("disabled")){h.visible=e.prop("checked");var f=c.columns.where(j).length>1;d.parents(n).find(k+":has("+m+":checked)")._bgEnableAria(f).find(m)._bgEnableField(f),c.element.find("tbody").empty(),y.call(c),l.call(c)}});i.find(f(e.dropDownMenuItems)).append(o)}),b.append(i)}}function q(){if(0!==this.options.navigation){var b=f(this.options.css.infos),c=this.header.find(b),e=this.footer.find(b);if(c.length+e.length>0){var g=this.current*this.rowCount,h=a(this.options.templates.infos.resolve(d.call(this,{end:0===this.total||-1===g||g>this.total?this.total:g,start:0===this.total?0:g-this.rowCount+1,total:this.total})));z.call(this,c,h,1),z.call(this,e,h,2)}}}function r(){var a=this.element.children("tbody").first(),b=this.options.templates,c=this.columns.where(j).length;this.options.selection&&null!=this.identifier&&(c+=1),a.html(b.noResults.resolve(d.call(this,{columns:c})))}function s(){if(0!==this.options.navigation){var b=f(this.options.css.pagination),c=this.header.find(b)._bgShowAria(-1!==this.rowCount),e=this.footer.find(b)._bgShowAria(-1!==this.rowCount);if(-1!==this.rowCount&&c.length+e.length>0){var g=this.options.templates,h=this.current,i=this.totalPages,j=a(g.pagination.resolve(d.call(this))),k=i-h,l=-1*(this.options.padding-h),m=k>=this.options.padding?Math.max(l,1):Math.max(l-this.options.padding+k,1),n=2*this.options.padding+1,o=i>=n?n:i;t.call(this,j,"first","«","first")._bgEnableAria(h>1),t.call(this,j,"prev","<","prev")._bgEnableAria(h>1);for(var p=0;o>p;p++){var q=p+m;t.call(this,j,q,q,"page-"+q)._bgEnableAria()._bgSelectAria(q===h)}0===o&&t.call(this,j,1,1,"page-1")._bgEnableAria(!1)._bgSelectAria(),t.call(this,j,"next",">","next")._bgEnableAria(i>h),t.call(this,j,"last","»","last")._bgEnableAria(i>h),z.call(this,c,j,1),z.call(this,e,j,2)}}}function t(b,c,e,g){var h=this,i=this.options.templates,j=this.options.css,k=d.call(this,{css:g,text:e,uri:"#"+c}),m=a(i.paginationItem.resolve(k)).on("click"+C,f(j.paginationButton),function(b){b.stopPropagation();var c=a(this),d=c.parent();if(!d.hasClass("active")&&!d.hasClass("disabled")){var e={first:1,prev:h.current-1,next:h.current+1,last:h.totalPages},f=c.attr("href").substr(1);h.current=e[f]||+f,l.call(h)}c.trigger("blur")});return b.append(m),m}function u(b){function c(a){return-1===a?e.options.labels.all:a}var e=this,g=this.options.rowCount;if(a.isArray(g)){var h=this.options.css,i=this.options.templates,j=a(i.actionDropDown.resolve(d.call(this,{content:this.rowCount}))),k=f(h.dropDownMenu),m=f(h.dropDownMenuText),n=f(h.dropDownMenuItems),o=f(h.dropDownItemButton);a.each(g,function(b,f){var g=a(i.actionDropDownItem.resolve(d.call(e,{text:c(f),uri:"#"+f})))._bgSelectAria(f===e.rowCount).on("click"+C,o,function(b){b.preventDefault();var d=a(this),f=+d.attr("href").substr(1);f!==e.rowCount&&(e.current=1,e.rowCount=f,d.parents(n).children().each(function(){var b=a(this),c=+b.find(o).attr("href").substr(1);b._bgSelectAria(c===f)}),d.parents(k).find(m).text(c(f)),l.call(e))});j.find(n).append(g)}),b.append(j)}}function v(b){if(b.length>0){var c=this,e=this.options.css,g=this.options.templates,h=this.element.children("tbody").first(),i=this.options.selection&&null!=this.identifier,j=!0,k="",l="",m="",n="";a.each(b,function(b,f){if(l="",m=' data-row-id="'+(null==c.identifier?b:f[c.identifier])+'"',n="",i){var h=-1!==a.inArray(f[c.identifier],c.selectedRows),o=g.select.resolve(d.call(c,{type:"checkbox",value:f[c.identifier],checked:h}));l+=g.cell.resolve(d.call(c,{content:o,css:e.selectCell})),j=j&&h,h&&(n+=e.selected,m+=' aria-selected="true"')}a.each(c.columns,function(b,h){if(h.visible){var i=a.isFunction(h.formatter)?h.formatter.call(c,h,f):h.converter.to(f[h.id]),j=h.cssClass.length>0?" "+h.cssClass:"";l+=g.cell.resolve(d.call(c,{content:null==i||""===i?" ":i,css:("right"===h.align?e.right:"center"===h.align?e.center:e.left)+j}))}}),n.length>0&&(m+=' class="'+n+'"'),k+=g.row.resolve(d.call(c,{attr:m,cells:l}))}),c.element.find("thead "+f(c.options.css.selectBox)).prop("checked",j),h.html(k),w.call(this,h)}else r.call(this)}function w(b){var c=this,d=this.options.selection&&null!=this.identifier,e=f(this.options.css.selectBox);d&&b.off("click"+C,e).on("click"+C,e,function(b){b.stopPropagation();var d=a(this),e=c.converter.from(d.val());d.prop("checked")?c.select([e]):c.deselect([e])}),b.off("click"+C,"> tr").on("click"+C,"> tr",function(b){b.stopPropagation();var e=a(this),f=c.converter.from(e.data("row-id")),g=null==this.identifier?c.currentRows[f]:c.currentRows.first(function(a){return a[c.identifier]===f});d&&c.options.rowSelect&&(e.hasClass(c.options.css.selected)?c.deselect([f]):c.select([f])),c.element.trigger("click"+C,[c.columns,g])})}function x(){if(0!==this.options.navigation){var c=this.options.css,e=f(c.search),g=this.header.find(e),h=this.footer.find(e);if(g.length+h.length>0){var i=this,j=this.options.templates,k=null,l="",m=f(c.searchField),n=a(j.search.resolve(d.call(this))),o=n.is(m)?n:n.find(m);o.on("keyup"+C,function(c){c.stopPropagation();var d=a(this).val();l!==d&&(l=d,b.clearTimeout(k),k=b.setTimeout(function(){i.search(d)},250))}),z.call(this,g,n,1),z.call(this,h,n,2)}}}function y(){var b=this,c=this.element.find("thead > tr"),e=this.options.css,g=this.options.templates,h="",i=this.options.sorting,j=this.options.selection&&null!=this.identifier;if(j){var k=this.options.multiSelect?g.select.resolve(d.call(b,{type:"checkbox",value:"all"})):"";h+=g.rawHeaderCell.resolve(d.call(b,{content:k,css:e.selectCell}))}if(a.each(this.columns,function(a,c){if(c.visible){var f=b.sort[c.id],j=i&&f&&"asc"===f?e.iconUp:i&&f&&"desc"===f?e.iconDown:"",k=g.icon.resolve(d.call(b,{iconCss:j})),l=c.headerAlign,m=(c.headerCssClass.length>0?" "+c.headerCssClass:"")+(b.options.highlightColumns&&null!=c.order?" "+b.options.css.active:"");h+=g.headerCell.resolve(d.call(b,{column:c,icon:k,sortable:i&&c.sortable&&e.sortable||"",css:("right"===l?e.right:"center"===l?e.center:e.left)+m}))}}),c.html(h),i){var m=f(e.active),n=f(e.sortable),o=f(e.icon);c.off("click"+C,n).on("click"+C,n,function(c){c.preventDefault();var d=a(this),f=d.data("column-id")||d.parents("th").first().data("column-id"),g=b.sort[f];if(b.options.multiSort||(d.parents("tr:first").find(o).removeClass(e.iconDown+" "+e.iconUp).end().find(m).removeClass(e.active),b.sort={}),g&&"asc"===g)b.sort[f]="desc",d.parent().addClass(e.active).find(o).removeClass(e.iconUp).addClass(e.iconDown);else if(g&&"desc"===g)if(b.options.multiSort){var h={};for(var i in b.sort)i!==f&&(h[i]=b.sort[i]);b.sort=h,d.parent().removeClass(e.active).find(o).removeClass(e.iconDown)}else b.sort[f]="asc",d.parent().addClass(e.active).find(o).removeClass(e.iconDown).addClass(e.iconUp);else b.sort[f]="asc",d.parent().addClass(e.active).find(o).addClass(e.iconUp);B.call(b),l.call(b)})}if(j&&this.options.multiSelect){var p=f(e.selectBox);c.off("click"+C,p).on("click"+C,p,function(c){c.stopPropagation(),a(this).prop("checked")?b.select():b.deselect()})}}function z(b,c,d){this.options.navigation&d&&b.each(function(b,d){a(d).before(c.clone(!0)).remove()})}function A(){var a=this.options.templates,b=this.element.children("thead").first(),c=this.element.children("tbody").first(),e=c.find("tr > td").first(),f=this.element.height()-b.height()-(e.height()+20),g=this.columns.where(j).length;this.options.selection&&null!=this.identifier&&(g+=1),c.html(a.loading.resolve(d.call(this,{columns:g}))),-1!==this.rowCount&&f>0&&c.find("tr > td").css("padding","20px 0 "+f+"px")}function B(){function a(c,d,e){function f(a){return"asc"===h.order?a:-1*a}e=e||0;var g=e+1,h=b[e];return c[h.id]>d[h.id]?f(1):c[h.id]g?a(c,d,g):0}var b=[];if(!this.options.ajax){for(var c in this.sort)(this.options.multiSort||0===b.length)&&b.push({id:c,order:this.sort[c]});b.length>0&&this.rows.sort(a)}}var C=".rs.jquery.bootgrid",D=function(b,c){this.element=a(b),this.options=a.extend(!0,{},D.defaults,this.element.data(),c);var d=this.options.rowCount=this.element.data().rowCount||c.rowCount||this.options.rowCount;this.columns=[],this.current=1,this.currentRows=[],this.identifier=null,this.converter=null,this.rowCount=a.isArray(d)?d[0]:d,this.rows=[],this.searchPhrase="",this.selectedRows=[],this.sort={},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.original=this.element.clone()};if(D.defaults={navigation:3,padding:2,columnSelection:!0,rowCount:[10,25,50,-1],selection:!1,multiSelect:!1,rowSelect:!1,keepSelection:!1,highlightColumns:!1,highlightRows:!1,sorting:!0,multiSort:!1,ajax:!1,post:{},url:"",caseSensitive:!0,requestHandler:function(a){return a},responseHandler:function(a){return a},converters:{numeric:{from:function(a){return+a},to:function(a){return a+""}},string:{from:function(a){return a},to:function(a){return a}}},css:{actions:"actions btn-group",active:"active",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",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"},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:'',rawHeaderCell:'{{ctx.content}} | ',row:"{{ctx.cells}}
",search:'',select:''}},D.prototype.append=function(a){if(this.options.ajax);else{for(var b=[],d=0;d0&&(this.options.multiSelect||1!==e.length);)if(c=b.pop(),-1===a.inArray(c,this.selectedRows))for(d=0;d0){var g=f(this.options.css.selectBox),h=this.selectedRows.length>=this.currentRows.length;for(d=0;!this.options.keepSelection&&h&&d tr "+g+":checked").trigger("click"+C),d=0;d tr[data-row-id="'+this.selectedRows[d]+'"]').addClass(this.options.css.selected)._bgAria("selected","true").find(g).prop("checked",!0);this.element.trigger("selected"+C,[e])}}return this},D.prototype.deselect=function(b){if(this.options.selection&&null!=this.identifier){b=b||this.currentRows.propValues(this.identifier);for(var c,d,e,g=[];b.length>0;)if(c=b.pop(),e=a.inArray(c,this.selectedRows),-1!==e)for(d=0;d0){var h=f(this.options.css.selectBox);for(this.element.find("thead "+h).prop("checked",!1),d=0;d tr[data-row-id="'+g[d][this.identifier]+'"]').removeClass(this.options.css.selected)._bgAria("selected","false").find(h).prop("checked",!1);this.element.trigger("deselected"+C,[g])}}return this},D.prototype.sort=function(b){var c=b?a.extend({},b):{};return c===this.sort?this:(this.sort=c,y.call(this),B.call(this),l.call(this),this)},a.fn.extend({_bgAria:function(a,b){return this.attr("aria-"+a,b)},_bgBusyAria:function(a){return null==a||a?this._bgAria("busy","true"):this._bgAria("busy","false")},_bgRemoveAria:function(a){return this.removeAttr("aria-"+a)},_bgEnableAria:function(a){return null==a||a?this.removeClass("disabled")._bgAria("disabled","false"):this.addClass("disabled")._bgAria("disabled","true")},_bgEnableField:function(a){return null==a||a?this.removeAttr("disabled"):this.attr("disabled","disable")},_bgShowAria:function(a){return null==a||a?this.show()._bgAria("hidden","false"):this.hide()._bgAria("hidden","true")},_bgSelectAria:function(a){return null==a||a?this.addClass("active")._bgAria("selected","true"):this.removeClass("active")._bgAria("selected","false")},_bgId:function(a){return a?this.attr("id",a):this.attr("id")}}),!String.prototype.resolve){var E={checked:function(a){return"boolean"==typeof a?a?'checked="checked"':"":a}};String.prototype.resolve=function(b,c){var d=this;return a.each(b,function(b,e){if(null!=e&&"function"!=typeof e)if("object"==typeof e){var f=c?a.extend([],c):[];f.push(b),d=d.resolve(e,f)+""}else{E&&E[b]&&"function"==typeof E[b]&&(e=E[b](e)),b=c?c.join(".")+"."+b:b;var g=new RegExp("\\{\\{"+b+"\\}\\}","gm");d=d.replace(g,e.replace?e.replace(/\$/gi,"$"):e)}}),d}}Array.prototype.first||(Array.prototype.first=function(a){for(var b=0;bc?this.length>d?this.slice(c,d):this.slice(c):[]}),Array.prototype.where||(Array.prototype.where=function(a){for(var b=[],c=0;c
-
+
- | ID |
- Sender |
+ ID |
+ Sender |
Received |
Link |
@@ -66,7 +66,7 @@
| 1 |
me@rafaelstaib.com |
- 11.12.2014 |
+ $0.00 |
Link |
diff --git a/package.json b/package.json
index 7c9b894..5b5be85 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "jquery-bootgrid",
"namespace": "jquery.bootgrid",
"title": "jQuery Bootgrid",
- "version": "1.1.1",
+ "version": "1.2.0",
"description": "Nice, sleek and intuitive. A grid control especially designed for bootstrap.",
"homepage": "http://www.jquery-bootgrid.com",
"author": {
diff --git a/src/internal.js b/src/internal.js
index 26c8202..61bc6fd 100644
--- a/src/internal.js
+++ b/src/internal.js
@@ -123,7 +123,7 @@ function loadColumns()
}
// ensures that only the first order will be applied in case of multi sorting is disabled
- if (!that.options.multiSort && column.order !== null)
+ if (!that.options.multiSort && column.order != null)
{
sorted = true;
}
@@ -741,7 +741,8 @@ function renderTableHeader()
(sorting && sortOrder && sortOrder === "desc") ? css.iconDown : ""),
icon = tpl.icon.resolve(getParams.call(that, { iconCss: iconCss })),
align = column.headerAlign,
- cssClass = (column.headerCssClass.length > 0) ? " " + column.headerCssClass : "";
+ cssClass = ((column.headerCssClass.length > 0) ? " " + column.headerCssClass : "") +
+ ((that.options.highlightColumns && column.order != null) ? " " + that.options.css.active : "");
html += tpl.headerCell.resolve(getParams.call(that, {
column: column, icon: icon, sortable: sorting && column.sortable && css.sortable || "",
css: ((align === "right") ? css.right : (align === "center") ?
@@ -754,7 +755,8 @@ function renderTableHeader()
// todo: create a own function for that piece of code
if (sorting)
{
- var sortingSelector = getCssSelector(css.sortable),
+ var activeSelector = getCssSelector(css.active),
+ sortingSelector = getCssSelector(css.sortable),
iconSelector = getCssSelector(css.icon);
headerRow.off("click" + namespace, sortingSelector)
.on("click" + namespace, sortingSelector, function (e)
@@ -762,19 +764,20 @@ function renderTableHeader()
e.preventDefault();
var $this = $(this),
columnId = $this.data("column-id") || $this.parents("th").first().data("column-id"),
- sortOrder = that.sort[columnId],
- icon = $this.find(iconSelector);
+ sortOrder = that.sort[columnId];
if (!that.options.multiSort)
{
- $this.parents("tr").first().find(iconSelector).removeClass(css.iconDown + " " + css.iconUp);
+ $this.parents("tr:first").find(iconSelector).removeClass(css.iconDown + " " + css.iconUp)
+ .end().find(activeSelector).removeClass(css.active);
that.sort = {};
}
if (sortOrder && sortOrder === "asc")
{
that.sort[columnId] = "desc";
- icon.removeClass(css.iconUp).addClass(css.iconDown);
+ $this.parent().addClass(css.active).find(iconSelector)
+ .removeClass(css.iconUp).addClass(css.iconDown);
}
else if (sortOrder && sortOrder === "desc")
{
@@ -789,18 +792,21 @@ function renderTableHeader()
}
}
that.sort = newSort;
- icon.removeClass(css.iconDown);
+ $this.parent().removeClass(css.active).find(iconSelector)
+ .removeClass(css.iconDown);
}
else
{
that.sort[columnId] = "asc";
- icon.removeClass(css.iconDown).addClass(css.iconUp);
+ $this.parent().addClass(css.active).find(iconSelector)
+ .removeClass(css.iconDown).addClass(css.iconUp);
}
}
else
{
that.sort[columnId] = "asc";
- icon.addClass(css.iconUp);
+ $this.parent().addClass(css.active).find(iconSelector)
+ .addClass(css.iconUp);
}
sortRows.call(that);
diff --git a/src/jquery.bootgrid.less b/src/jquery.bootgrid.less
index c516f17..bd3f7d0 100644
--- a/src/jquery.bootgrid.less
+++ b/src/jquery.bootgrid.less
@@ -36,7 +36,7 @@
vertical-align: middle;
width: 180px;
- .glyphicon { top: 0; }
+ .icon { top: 0; }
&.search-field, .search-field
{
@@ -123,7 +123,7 @@
}
}
- &:hover, &:active { background: #fafafa; }
+ &:hover, &:active, &.active { background: #fafafa !important; }
}
td
diff --git a/src/public.js b/src/public.js
index 5bce9cb..c970123 100644
--- a/src/public.js
+++ b/src/public.js
@@ -36,6 +36,7 @@ var Grid = function(element, options)
this.header = null;
this.footer = null;
this.xqr = null;
+ this.original = this.element.clone();
// todo: implement cache
};
@@ -106,6 +107,17 @@ Grid.defaults = {
**/
keepSelection: false,
+ /**
+ * Defines whether the columns which are filtered or sorted should be highlighted or not.
+ *
+ * @property highlightColumns
+ * @type Boolean
+ * @default false
+ * @for defaults
+ * @since 1.2.0
+ **/
+ highlightColumns: false,
+
highlightRows: false, // highlights new rows (find the page of the first new row)
sorting: true,
multiSort: false,
@@ -198,6 +210,18 @@ Grid.defaults = {
**/
css: {
actions: "actions btn-group", // must be a unique class name or constellation of class names within the header and footer
+
+ /**
+ * CSS class to highlight active parts like sorted or filtered columns.
+ *
+ * @property active
+ * @type String
+ * @default "active"
+ * @for css
+ * @since 1.2.0
+ **/
+ active: "active",
+
center: "text-center",
columnHeaderAnchor: "column-header-anchor", // must be a unique class name or constellation of class names within the column header cell
columnHeaderText: "text",
@@ -319,7 +343,7 @@ Grid.prototype.append = function(rows)
{
if (this.options.ajax)
{
- // todo: implement ajax DELETE
+ // todo: implement ajax POST
}
else
{
@@ -383,7 +407,7 @@ Grid.prototype.destroy = function()
{
this.footer.remove();
}
- this.element.remove("tbody").off(namespace).removeData(namespace);
+ this.element.before(this.original).remove();
return this;
};