diff --git a/CHANGELOG.md b/CHANGELOG.md
index 26279a2..b315d7a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 1.4.1
+### Enhancements & Features
+- Add Reset button to clear browser's localStorage and refresh page
+### Bug fixes
+- Minor bugfix in localstorage usage for rowCount
+
## 1.4.0
### Enhancements & Features
- Store sort order, column selection and row count in browser's localStorage
diff --git a/Gruntfile.js b/Gruntfile.js
index 60cacbb..ba08cd1 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -7,7 +7,7 @@ module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
fontawesome: 'fa',
- banner: '/*! <%= "\\r\\n * " + pkg.title %> v<%= pkg.version %> - <%= grunt.template.today("mm/dd/yyyy") + "\\r\\n" %>' +
+ banner: '/*!<%= "\\r\\n * " + pkg.title %> v<%= pkg.version %> - <%= grunt.template.today("mm/dd/yyyy") + "\\r\\n" %>' +
' * Copyright © 2014-2015 Rafael J. Staib; Copyright © 2018-<%= grunt.template.today("yyyy") %> <%= pkg.author.name %> <%= (pkg.homepage ? "(" + pkg.homepage + ")" : "") + "\\r\\n" %>' +
' * Licensed under the <%= pkg.license + " license. See LICENSE.txt for more details." + "\\r\\n */\\r\\n" %>',
folders: {
@@ -55,7 +55,7 @@ module.exports = function (grunt) {
options: {
separator: '\r\n\r\n',
banner: '<%= banner %>;(function ($, window, undefined)\r\n{\r\n /*jshint validthis: true */\r\n "use strict";\r\n\r\n',
- footer: '\r\n})(jQuery, window);',
+ footer: '\r\n})(jQuery, window);\r\n',
process: function (src, filepath) {
var result = src.trim().replace(/(.+?\r\n)/gm, ' $1'),
end = [0, ""],
diff --git a/LICENSE.txt b/LICENSE.txt
index 12bcaaa..0784736 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,7 +1,7 @@
The MIT License (MIT)
Copyright © 2014-2015 Rafael J. Staib
-Copyright © 2018 Deciso
+Copyright © 2018-2023 Deciso
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/bower.json b/bower.json
index 8163658..5e3bd77 100644
--- a/bower.json
+++ b/bower.json
@@ -13,7 +13,7 @@
"accessibility",
"bootstrap"
],
- "version": "1.4.0",
+ "version": "1.4.1",
"authors": [
{
"name": "Rafael Staib",
diff --git a/dist/jquery.bootgrid-1.4.0.zip b/dist/jquery.bootgrid-1.4.0.zip
deleted file mode 100644
index 7f1c63d..0000000
Binary files a/dist/jquery.bootgrid-1.4.0.zip and /dev/null differ
diff --git a/dist/jquery.bootgrid-1.4.1.zip b/dist/jquery.bootgrid-1.4.1.zip
new file mode 100644
index 0000000..7420e8a
Binary files /dev/null and b/dist/jquery.bootgrid-1.4.1.zip differ
diff --git a/dist/jquery.bootgrid.css b/dist/jquery.bootgrid.css
index 1803491..57e1bf5 100644
--- a/dist/jquery.bootgrid.css
+++ b/dist/jquery.bootgrid.css
@@ -1,6 +1,6 @@
-/*!
- * 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)
+/*!
+ * jQuery Bootgrid v1.4.1 - 03/05/2023
+ * Copyright © 2014-2015 Rafael J. Staib; Copyright © 2018-2023 Deciso B.V. (http://www.jquery-bootgrid.com)
* Licensed under the MIT license. See LICENSE.txt for more details.
*/
.bootgrid-header,
diff --git a/dist/jquery.bootgrid.fa.js b/dist/jquery.bootgrid.fa.js
index 2af272b..f26e5da 100644
--- a/dist/jquery.bootgrid.fa.js
+++ b/dist/jquery.bootgrid.fa.js
@@ -1,6 +1,6 @@
-/*!
- * 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)
+/*!
+ * jQuery Bootgrid v1.4.1 - 03/05/2023
+ * Copyright © 2014-2015 Rafael J. Staib; Copyright © 2018-2023 Deciso B.V. (http://www.jquery-bootgrid.com)
* Licensed under the MIT license. See LICENSE.txt for more details.
*/
;(function ($, window, undefined)
@@ -8,12 +8,12 @@
/*jshint validthis: true */
"use strict";
-$.extend($.fn.bootgrid.Constructor.defaults.css, {
- icon: "icon fa",
- iconColumns: "fa-th-list",
- iconDown: "fa-sort-desc",
- iconRefresh: "fa-refresh",
- iconSearch: "fa-search",
- iconUp: "fa-sort-asc"
+ $.extend($.fn.bootgrid.Constructor.defaults.css, {
+ icon: "icon fa",
+ iconColumns: "fa-th-list",
+ iconDown: "fa-sort-desc",
+ iconRefresh: "fa-refresh",
+ iconSearch: "fa-search",
+ iconUp: "fa-sort-asc"
});
-})(jQuery, window);
\ No newline at end of file
+})(jQuery, window);
diff --git a/dist/jquery.bootgrid.js b/dist/jquery.bootgrid.js
index d8b6e72..9c7eebe 100644
--- a/dist/jquery.bootgrid.js
+++ b/dist/jquery.bootgrid.js
@@ -1,6 +1,6 @@
-/*!
- * 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)
+/*!
+ * jQuery Bootgrid v1.4.1 - 03/05/2023
+ * Copyright © 2014-2015 Rafael J. Staib; Copyright © 2018-2023 Deciso B.V. (http://www.jquery-bootgrid.com)
* Licensed under the MIT license. See LICENSE.txt for more details.
*/
;(function ($, window, undefined)
@@ -8,2108 +8,2131 @@
/*jshint validthis: true */
"use strict";
-// GRID INTERNAL FIELDS
-// ====================
+ // GRID INTERNAL FIELDS
+ // ====================
-var namespace = ".rs.jquery.bootgrid";
+ var namespace = ".rs.jquery.bootgrid";
-// GRID INTERNAL FUNCTIONS
-// =====================
+ // GRID INTERNAL FUNCTIONS
+ // =====================
-function appendRow(row)
-{
- var that = this;
-
- function exists(item)
- {
- return that.identifier && item[that.identifier] === row[that.identifier];
- }
-
- if (!this.rows.contains(exists))
+ function appendRow(row)
{
- this.rows.push(row);
- return true;
- }
+ var that = this;
- return false;
-}
+ function exists(item)
+ {
+ return that.identifier && item[that.identifier] === row[that.identifier];
+ }
-function findFooterAndHeaderItems(selector)
-{
- var footer = (this.footer) ? this.footer.find(selector) : $(),
- header = (this.header) ? this.header.find(selector) : $();
- return $.merge(footer, header);
-}
+ if (!this.rows.contains(exists))
+ {
+ this.rows.push(row);
+ return true;
+ }
-function getParams(context)
-{
- return (context) ? $.extend({}, this.cachedParams, { ctx: context }) :
- this.cachedParams;
-}
+ return false;
+ }
-function getRequest()
-{
- var request = {
- current: this.current,
- rowCount: this.rowCount,
- sort: this.sortDictionary,
- searchPhrase: this.searchPhrase
- },
- post = this.options.post;
+ function findFooterAndHeaderItems(selector)
+ {
+ var footer = (this.footer) ? this.footer.find(selector) : $(),
+ header = (this.header) ? this.header.find(selector) : $();
+ return $.merge(footer, header);
+ }
- post = ($.isFunction(post)) ? post() : post;
- return this.options.requestHandler($.extend(true, request, post));
-}
+ function getParams(context)
+ {
+ return (context) ? $.extend({}, this.cachedParams, { ctx: context }) :
+ this.cachedParams;
+ }
-function getCssSelector(css)
-{
- return "." + $.trim(css).replace(/\s+/gm, ".");
-}
+ function getRequest()
+ {
+ var request = {
+ current: this.current,
+ rowCount: this.rowCount,
+ sort: this.sortDictionary,
+ searchPhrase: this.searchPhrase
+ },
+ post = this.options.post;
-function getUrl()
-{
- var url = this.options.url;
- return ($.isFunction(url)) ? url() : url;
-}
+ post = ($.isFunction(post)) ? post() : post;
+ return this.options.requestHandler($.extend(true, request, post));
+ }
-function init()
-{
- this.element.trigger("initialize" + namespace);
-
- 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);
- renderSearchField.call(this);
- renderActions.call(this);
- loadData.call(this);
-
- this.element.trigger("initialized" + namespace);
-}
-
-function highlightAppendedRows(rows)
-{
- if (this.options.highlightRows)
+ function getCssSelector(css)
{
- // todo: implement
+ return "." + $.trim(css).replace(/\s+/gm, ".");
}
-}
-function isVisible(column)
-{
- return column.visible;
-}
-
-function loadColumns()
-{
- var that = this,
- firstHeadRow = this.element.find("thead > tr").first(),
- sorted = false;
+ function getUrl()
+ {
+ var url = this.options.url;
+ return ($.isFunction(url)) ? url() : url;
+ }
- /*jshint -W018*/
- firstHeadRow.children().each(function ()
+ function init()
{
- 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,
- converter: that.options.converters[data.converter || data.type] || that.options.converters["string"],
- text: $this.html(),
- align: data.align || "left",
- headerAlign: data.headerAlign || "left",
- cssClass: data.cssClass || "",
- headerCssClass: data.headerCssClass || "",
- formatter: that.options.formatters[data.formatter] || 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: 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
- };
- that.columns.push(column);
- if (column.order != null)
- {
- that.sortDictionary[column.id] = column.order;
- }
+ this.element.trigger("initialize" + namespace);
+
+ loadColumns.call(this); // Loads columns from HTML thead tag
+ this.selection = this.options.selection && this.identifier != null;
+ 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);
+ renderSearchField.call(this);
+ renderActions.call(this);
+ loadData.call(this);
- // Prevents multiple identifiers
- if (column.identifier)
- {
- that.identifier = column.id;
- that.converter = column.converter;
- }
+ this.element.trigger("initialized" + namespace);
+ }
- // ensures that only the first order will be applied in case of multi sorting is disabled
- if (!that.options.multiSort && column.order !== null)
+ function highlightAppendedRows(rows)
+ {
+ if (this.options.highlightRows)
{
- sorted = true;
+ // todo: implement
}
- });
- /*jshint +W018*/
-}
-
-/*
-response = {
- current: 1,
- rowCount: 10,
- rows: [{}, {}],
- sort: [{ "columnId": "asc" }],
- total: 101
-}
-*/
-
-function loadData()
-{
- var that = this;
+ }
- this.element._bgBusyAria(true).trigger("load" + namespace);
- showLoading.call(this);
+ function isVisible(column)
+ {
+ return column.visible;
+ }
- function containsPhrase(row)
+ function loadColumns()
{
- var column,
- searchPattern = new RegExp(that.searchPhrase, (that.options.caseSensitive) ? "g" : "gi");
+ var that = this,
+ firstHeadRow = this.element.find("thead > tr").first(),
+ sorted = false;
- for (var i = 0; i < that.columns.length; i++)
+ /*jshint -W018*/
+ firstHeadRow.children().each(function ()
{
- column = that.columns[i];
- if (column.searchable && column.visible &&
- column.converter.to(row[column.id]).search(searchPattern) > -1)
+ 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,
+ converter: that.options.converters[data.converter || data.type] || that.options.converters["string"],
+ text: $this.html(),
+ align: data.align || "left",
+ headerAlign: data.headerAlign || "left",
+ cssClass: data.cssClass || "",
+ headerCssClass: data.headerCssClass || "",
+ formatter: that.options.formatters[data.formatter] || 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: 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
+ };
+ that.columns.push(column);
+ if (column.order != null)
{
- return true;
+ that.sortDictionary[column.id] = column.order;
}
- }
- return false;
+ // Prevents multiple identifiers
+ if (column.identifier)
+ {
+ that.identifier = column.id;
+ that.converter = column.converter;
+ }
+
+ // ensures that only the first order will be applied in case of multi sorting is disabled
+ if (!that.options.multiSort && column.order !== null)
+ {
+ sorted = true;
+ }
+ });
+ /*jshint +W018*/
}
- function update(rows, total)
+ /*
+ response = {
+ current: 1,
+ rowCount: 10,
+ rows: [{}, {}],
+ sort: [{ "columnId": "asc" }],
+ total: 101
+ }
+ */
+
+ function loadData()
{
- that.currentRows = rows;
- setTotals.call(that, total);
+ var that = this;
+
+ this.element._bgBusyAria(true).trigger("load" + namespace);
+ showLoading.call(this);
- if (!that.options.keepSelection)
+ function containsPhrase(row)
{
- that.selectedRows = [];
+ var column,
+ searchPattern = new RegExp(that.searchPhrase, (that.options.caseSensitive) ? "g" : "gi");
+
+ for (var i = 0; i < that.columns.length; i++)
+ {
+ column = that.columns[i];
+ if (column.searchable && column.visible &&
+ column.converter.to(row[column.id]).search(searchPattern) > -1)
+ {
+ return true;
+ }
+ }
+
+ return false;
}
- renderRows.call(that, rows);
- renderInfos.call(that);
- renderPagination.call(that);
+ function update(rows, total)
+ {
+ that.currentRows = rows;
+ setTotals.call(that, total);
- that.element._bgBusyAria(false).trigger("loaded" + namespace);
- }
+ if (!that.options.keepSelection)
+ {
+ that.selectedRows = [];
+ }
- if (this.options.ajax)
- {
- var request = getRequest.call(this),
- url = getUrl.call(this);
+ renderRows.call(that, rows);
+ renderInfos.call(that);
+ renderPagination.call(that);
- if (url == null || typeof url !== "string" || url.length === 0)
- {
- throw new Error("Url setting must be a none empty string or a function that returns one.");
+ that.element._bgBusyAria(false).trigger("loaded" + namespace);
}
- // aborts the previous ajax request if not already finished or failed
- if (this.xqr)
+ if (this.options.ajax)
{
- this.xqr.abort();
- }
+ var request = getRequest.call(this),
+ url = getUrl.call(this);
+
+ if (url == null || typeof url !== "string" || url.length === 0)
+ {
+ throw new Error("Url setting must be a none empty string or a function that returns one.");
+ }
- var settings = {
- url: url,
- data: request,
- success: function(response)
+ // aborts the previous ajax request if not already finished or failed
+ if (this.xqr)
{
- that.xqr = null;
+ this.xqr.abort();
+ }
- if (typeof (response) === "string")
+ var settings = {
+ url: url,
+ data: request,
+ success: function(response)
{
- response = $.parseJSON(response);
- }
+ that.xqr = null;
- response = that.options.responseHandler(response);
+ if (typeof (response) === "string")
+ {
+ response = $.parseJSON(response);
+ }
- that.current = response.current;
- update(response.rows, response.total);
- },
- error: function (jqXHR, textStatus, errorThrown)
- {
- that.xqr = null;
+ response = that.options.responseHandler(response);
- if (textStatus !== "abort")
+ that.current = response.current;
+ update(response.rows, response.total);
+ },
+ error: function (jqXHR, textStatus, errorThrown)
{
- renderNoResultsRow.call(that); // overrides loading mask
- that.element._bgBusyAria(false).trigger("loaded" + namespace);
+ that.xqr = null;
+
+ if (textStatus !== "abort")
+ {
+ renderNoResultsRow.call(that); // overrides loading mask
+ that.element._bgBusyAria(false).trigger("loaded" + namespace);
+ }
}
- }
- };
- settings = $.extend(this.options.ajaxSettings, settings);
+ };
+ settings = $.extend(this.options.ajaxSettings, settings);
- this.xqr = $.ajax(settings);
- }
- else
- {
- var rows = (this.searchPhrase.length > 0) ? this.rows.where(containsPhrase) : this.rows,
- total = rows.length;
- if (this.rowCount !== -1)
- {
- rows = rows.page(this.current, this.rowCount);
+ this.xqr = $.ajax(settings);
}
+ else
+ {
+ var rows = (this.searchPhrase.length > 0) ? this.rows.where(containsPhrase) : this.rows,
+ total = rows.length;
+ if (this.rowCount !== -1)
+ {
+ rows = rows.page(this.current, this.rowCount);
+ }
- // todo: improve the following comment
- // setTimeout decouples the initialization so that adding event handlers happens before
- window.setTimeout(function () { update(rows, total); }, 10);
+ // todo: improve the following comment
+ // setTimeout decouples the initialization so that adding event handlers happens before
+ window.setTimeout(function () { update(rows, total); }, 10);
+ }
}
-}
-function loadRows()
-{
- if (!this.options.ajax)
+ function loadRows()
{
- var that = this,
- rows = this.element.find("tbody > tr");
-
- rows.each(function ()
+ if (!this.options.ajax)
{
- var $this = $(this),
- cells = $this.children("td"),
- row = {};
+ var that = this,
+ rows = this.element.find("tbody > tr");
- $.each(that.columns, function (i, column)
+ rows.each(function ()
{
- row[column.id] = column.converter.from(cells.eq(i).text());
- });
-
- appendRow.call(that, row);
- });
-
- setTotals.call(this, this.rows.length);
- sortRows.call(this);
- }
-}
-
-function setTotals(total)
-{
- this.total = total;
- this.totalPages = (this.rowCount === -1) ? 1 :
- Math.ceil(this.total / this.rowCount);
-}
+ var $this = $(this),
+ cells = $this.children("td"),
+ row = {};
-function prepareTable()
-{
- var tpl = this.options.templates,
- wrapper = (this.element.parent().hasClass(this.options.css.responsiveTable)) ?
- this.element.parent() : this.element;
+ $.each(that.columns, function (i, column)
+ {
+ row[column.id] = column.converter.from(cells.eq(i).text());
+ });
- this.element.addClass(this.options.css.table);
+ appendRow.call(that, row);
+ });
- // checks whether there is an tbody element; otherwise creates one
- if (this.element.children("tbody").length === 0)
- {
- this.element.append(tpl.body);
+ setTotals.call(this, this.rows.length);
+ sortRows.call(this);
+ }
}
- if (this.options.navigation & 1)
+ function setTotals(total)
{
- this.header = $(tpl.header.resolve(getParams.call(this, { id: this.element._bgId() + "-header" })));
- wrapper.before(this.header);
+ this.total = total;
+ this.totalPages = (this.rowCount === -1) ? 1 :
+ Math.ceil(this.total / this.rowCount);
}
- if (this.options.navigation & 2)
+ function prepareTable()
{
- this.footer = $(tpl.footer.resolve(getParams.call(this, { id: this.element._bgId() + "-footer" })));
- wrapper.after(this.footer);
- }
-}
+ var tpl = this.options.templates,
+ wrapper = (this.element.parent().hasClass(this.options.css.responsiveTable)) ?
+ this.element.parent() : this.element;
-function renderActions()
-{
- if (this.options.navigation !== 0)
- {
- var css = this.options.css,
- selector = getCssSelector(css.actions),
- actionItems = findFooterAndHeaderItems.call(this, selector);
+ this.element.addClass(this.options.css.table);
- if (actionItems.length > 0)
+ // checks whether there is an tbody element; otherwise creates one
+ if (this.element.children("tbody").length === 0)
{
- var that = this,
- tpl = this.options.templates,
- actions = $(tpl.actions.resolve(getParams.call(this)));
-
- // Refresh Button
- if (this.options.ajax)
- {
- var refreshIcon = tpl.icon.resolve(getParams.call(this, { iconCss: css.iconRefresh })),
- refresh = $(tpl.actionButton.resolve(getParams.call(this,
- { content: refreshIcon, text: this.options.labels.refresh })))
- .on("click" + namespace, function (e)
- {
- // todo: prevent multiple fast clicks (fast click detection)
- e.stopPropagation();
- that.current = 1;
- loadData.call(that);
- });
- actions.append(refresh);
- }
-
- // Row count selection
- renderRowCountSelection.call(this, actions);
+ this.element.append(tpl.body);
+ }
- // Column selection
- renderColumnSelection.call(this, actions);
+ if (this.options.navigation & 1)
+ {
+ this.header = $(tpl.header.resolve(getParams.call(this, { id: this.element._bgId() + "-header" })));
+ wrapper.before(this.header);
+ }
- replacePlaceHolder.call(this, actionItems, actions);
+ if (this.options.navigation & 2)
+ {
+ this.footer = $(tpl.footer.resolve(getParams.call(this, { id: this.element._bgId() + "-footer" })));
+ wrapper.after(this.footer);
}
}
-}
-function renderColumnSelection(actions)
-{
- if (this.options.columnSelection && this.columns.length > 1)
+ function renderActions()
{
- var that = this,
- css = this.options.css,
- tpl = this.options.templates,
- icon = tpl.icon.resolve(getParams.call(this, { iconCss: css.iconColumns })),
- dropDown = $(tpl.actionDropDown.resolve(getParams.call(this, { content: icon }))),
- selector = getCssSelector(css.dropDownItem),
- checkboxSelector = getCssSelector(css.dropDownItemCheckbox),
- itemsSelector = getCssSelector(css.dropDownMenuItems);
-
- $.each(this.columns, function (i, column)
+ if (this.options.navigation !== 0)
{
- if (column.visibleInSelection)
+ var css = this.options.css,
+ selector = getCssSelector(css.actions),
+ actionItems = findFooterAndHeaderItems.call(this, selector);
+
+ if (actionItems.length > 0)
{
- var item = $(tpl.actionDropDownCheckboxItem.resolve(getParams.call(that,
- { name: column.id, label: column.text, checked: column.visible })))
- .on("click" + namespace, selector, function (e)
- {
- e.stopPropagation();
+ var that = this,
+ tpl = this.options.templates,
+ actions = $(tpl.actions.resolve(getParams.call(this)));
- var $this = $(this),
- checkbox = $this.find(checkboxSelector);
- localStorage.setItem('visibleColumns[' + that.uid + '][' + column.id + ']', checkbox.prop("checked"));
- if (!checkbox.prop("disabled"))
+ // Refresh Button
+ if (this.options.ajax)
+ {
+ var refreshIcon = tpl.icon.resolve(getParams.call(this, { iconCss: css.iconRefresh })),
+ refresh = $(tpl.actionButton.resolve(getParams.call(this,
+ { content: refreshIcon, text: this.options.labels.refresh })))
+ .on("click" + namespace, function (e)
{
- 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);
-
- that.element.find("tbody").empty(); // Fixes an column visualization bug
- renderTableHeader.call(that);
+ // todo: prevent multiple fast clicks (fast click detection)
+ e.stopPropagation();
+ that.current = 1;
loadData.call(that);
- }
- });
- dropDown.find(getCssSelector(css.dropDownMenuItems)).append(item);
- }
- });
- actions.append(dropDown);
- }
-}
+ });
+ actions.append(refresh);
+ }
-function renderInfos()
-{
- if (this.options.navigation !== 0)
- {
- var selector = getCssSelector(this.options.css.infos),
- infoItems = findFooterAndHeaderItems.call(this, selector);
+ // Reset Button
+ if (this.options.resetButton)
+ {
+ var resetIcon = tpl.icon.resolve(getParams.call(this, { iconCss: css.iconReset })),
+ reset = $(tpl.actionButton.resolve(getParams.call(this,
+ { content: resetIcon, text: this.options.labels.reset })))
+ .on("click" + namespace, function (e)
+ {
+ e.stopPropagation();
+ for (var i = 0; i < that.columns.length; i++)
+ {
+ localStorage.removeItem('sortColumns[' + that.uid + '][' + that.columns[i].id + ']');
+ localStorage.removeItem('visibleColumns[' + that.uid + '][' + that.columns[i].id + ']');
+ }
+ localStorage.removeItem('rowCount[' + that.uid + ']');
+ location.reload();
+ });
+ actions.append(reset);
+ }
- if (infoItems.length > 0)
- {
- var end = (this.current * this.rowCount),
- infos = $(this.options.templates.infos.resolve(getParams.call(this, {
- end: (this.total === 0 || end === -1 || end > this.total) ? this.total : end,
- start: (this.total === 0) ? 0 : (end - this.rowCount + 1),
- total: this.total
- })));
-
- replacePlaceHolder.call(this, infoItems, infos);
+ // Row count selection
+ renderRowCountSelection.call(this, actions);
+
+ // Column selection
+ renderColumnSelection.call(this, actions);
+
+ replacePlaceHolder.call(this, actionItems, actions);
+ }
}
}
-}
-
-function renderNoResultsRow()
-{
- var tbody = this.element.children("tbody").first(),
- tpl = this.options.templates,
- count = this.columns.where(isVisible).length;
- if (this.selection)
+ function renderColumnSelection(actions)
{
- count = count + 1;
+ if (this.options.columnSelection && this.columns.length > 1)
+ {
+ var that = this,
+ css = this.options.css,
+ tpl = this.options.templates,
+ icon = tpl.icon.resolve(getParams.call(this, { iconCss: css.iconColumns })),
+ dropDown = $(tpl.actionDropDown.resolve(getParams.call(this, { content: icon }))),
+ selector = getCssSelector(css.dropDownItem),
+ checkboxSelector = getCssSelector(css.dropDownItemCheckbox),
+ itemsSelector = getCssSelector(css.dropDownMenuItems);
+
+ $.each(this.columns, function (i, column)
+ {
+ if (column.visibleInSelection)
+ {
+ var item = $(tpl.actionDropDownCheckboxItem.resolve(getParams.call(that,
+ { name: column.id, label: column.text, checked: column.visible })))
+ .on("click" + namespace, selector, function (e)
+ {
+ e.stopPropagation();
+
+ var $this = $(this),
+ checkbox = $this.find(checkboxSelector);
+ localStorage.setItem('visibleColumns[' + that.uid + '][' + column.id + ']', checkbox.prop("checked"));
+ if (!checkbox.prop("disabled"))
+ {
+ 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);
+
+ that.element.find("tbody").empty(); // Fixes an column visualization bug
+ renderTableHeader.call(that);
+ loadData.call(that);
+ }
+ });
+ dropDown.find(getCssSelector(css.dropDownMenuItems)).append(item);
+ }
+ });
+ actions.append(dropDown);
+ }
}
- tbody.html(tpl.noResults.resolve(getParams.call(this, { columns: count })));
-}
-function renderPagination()
-{
- if (this.options.navigation !== 0)
+ function renderInfos()
{
- var selector = getCssSelector(this.options.css.pagination),
- paginationItems = findFooterAndHeaderItems.call(this, selector)._bgShowAria(this.rowCount !== -1);
-
- if (this.rowCount !== -1 && paginationItems.length > 0)
+ if (this.options.navigation !== 0)
{
- var tpl = this.options.templates,
- current = this.current,
- totalPages = this.totalPages,
- pagination = $(tpl.pagination.resolve(getParams.call(this))),
- offsetRight = totalPages - current,
- offsetLeft = (this.options.padding - current) * -1,
- startWith = ((offsetRight >= this.options.padding) ?
- Math.max(offsetLeft, 1) :
- Math.max((offsetLeft - this.options.padding + offsetRight), 1)),
- maxCount = this.options.padding * 2 + 1,
- count = (totalPages >= maxCount) ? maxCount : totalPages;
-
- renderPaginationItem.call(this, pagination, "first", "«", "first")
- ._bgEnableAria(current > 1);
- renderPaginationItem.call(this, pagination, "prev", "‹", "prev")
- ._bgEnableAria(current > 1);
-
- for (var i = 0; i < count; i++)
- {
- var pos = i + startWith;
- renderPaginationItem.call(this, pagination, pos, pos, "page-" + pos)
- ._bgEnableAria()._bgSelectAria(pos === current);
- }
+ var selector = getCssSelector(this.options.css.infos),
+ infoItems = findFooterAndHeaderItems.call(this, selector);
- if (count === 0)
+ if (infoItems.length > 0)
{
- renderPaginationItem.call(this, pagination, 1, 1, "page-" + 1)
- ._bgEnableAria(false)._bgSelectAria();
+ var end = (this.current * this.rowCount),
+ infos = $(this.options.templates.infos.resolve(getParams.call(this, {
+ end: (this.total === 0 || end === -1 || end > this.total) ? this.total : end,
+ start: (this.total === 0) ? 0 : (end - this.rowCount + 1),
+ total: this.total
+ })));
+
+ replacePlaceHolder.call(this, infoItems, infos);
}
+ }
+ }
- renderPaginationItem.call(this, pagination, "next", "›", "next")
- ._bgEnableAria(totalPages > current);
- renderPaginationItem.call(this, pagination, "last", "»", "last")
- ._bgEnableAria(totalPages > current);
+ function renderNoResultsRow()
+ {
+ var tbody = this.element.children("tbody").first(),
+ tpl = this.options.templates,
+ count = this.columns.where(isVisible).length;
- replacePlaceHolder.call(this, paginationItems, pagination);
+ if (this.selection)
+ {
+ count = count + 1;
}
+ tbody.html(tpl.noResults.resolve(getParams.call(this, { columns: count })));
}
-}
-function renderPaginationItem(list, page, text, markerCss)
-{
- var that = this,
- tpl = this.options.templates,
- css = this.options.css,
- values = getParams.call(this, { css: markerCss, text: text, page: page }),
- item = $(tpl.paginationItem.resolve(values))
- .on("click" + namespace, getCssSelector(css.paginationButton), function (e)
- {
- e.stopPropagation();
- e.preventDefault();
+ function renderPagination()
+ {
+ if (this.options.navigation !== 0)
+ {
+ var selector = getCssSelector(this.options.css.pagination),
+ paginationItems = findFooterAndHeaderItems.call(this, selector)._bgShowAria(this.rowCount !== -1);
- var $this = $(this),
- parent = $this.parent();
- if (!parent.hasClass("active") && !parent.hasClass("disabled"))
+ if (this.rowCount !== -1 && paginationItems.length > 0)
+ {
+ var tpl = this.options.templates,
+ current = this.current,
+ totalPages = this.totalPages,
+ pagination = $(tpl.pagination.resolve(getParams.call(this))),
+ offsetRight = totalPages - current,
+ offsetLeft = (this.options.padding - current) * -1,
+ startWith = ((offsetRight >= this.options.padding) ?
+ Math.max(offsetLeft, 1) :
+ Math.max((offsetLeft - this.options.padding + offsetRight), 1)),
+ maxCount = this.options.padding * 2 + 1,
+ count = (totalPages >= maxCount) ? maxCount : totalPages;
+
+ renderPaginationItem.call(this, pagination, "first", "«", "first")
+ ._bgEnableAria(current > 1);
+ renderPaginationItem.call(this, pagination, "prev", "‹", "prev")
+ ._bgEnableAria(current > 1);
+
+ for (var i = 0; i < count; i++)
{
- var commandList = {
- first: 1,
- prev: that.current - 1,
- next: that.current + 1,
- last: that.totalPages
- };
- var command = $this.data("page");
- that.current = commandList[command] || command;
- loadData.call(that);
+ var pos = i + startWith;
+ renderPaginationItem.call(this, pagination, pos, pos, "page-" + pos)
+ ._bgEnableAria()._bgSelectAria(pos === current);
}
- $this.trigger("blur");
- });
- list.append(item);
- return item;
-}
+ if (count === 0)
+ {
+ renderPaginationItem.call(this, pagination, 1, 1, "page-" + 1)
+ ._bgEnableAria(false)._bgSelectAria();
+ }
-function renderRowCountSelection(actions)
-{
- var that = this,
- rowCountList = this.options.rowCount;
+ renderPaginationItem.call(this, pagination, "next", "›", "next")
+ ._bgEnableAria(totalPages > current);
+ renderPaginationItem.call(this, pagination, "last", "»", "last")
+ ._bgEnableAria(totalPages > current);
- function getText(value)
- {
- return (value === -1) ? that.options.labels.all : value;
+ replacePlaceHolder.call(this, paginationItems, pagination);
+ }
+ }
}
- if ($.isArray(rowCountList))
+ function renderPaginationItem(list, page, text, markerCss)
{
- var css = this.options.css,
+ var that = this,
tpl = this.options.templates,
- dropDown = $(tpl.actionDropDown.resolve(getParams.call(this, { content: getText(this.rowCount) }))),
- menuSelector = getCssSelector(css.dropDownMenu),
- menuTextSelector = getCssSelector(css.dropDownMenuText),
- menuItemsSelector = getCssSelector(css.dropDownMenuItems),
- menuItemSelector = getCssSelector(css.dropDownItemButton);
+ css = this.options.css,
+ values = getParams.call(this, { css: markerCss, text: text, page: page }),
+ item = $(tpl.paginationItem.resolve(values))
+ .on("click" + namespace, getCssSelector(css.paginationButton), function (e)
+ {
+ e.stopPropagation();
+ e.preventDefault();
- $.each(rowCountList, function (index, value)
- {
- var item = $(tpl.actionDropDownItem.resolve(getParams.call(that,
- { text: getText(value), action: value })))
- ._bgSelectAria(value.toString() === that.rowCount.toString())
- .on("click" + namespace, menuItemSelector, function (e)
+ var $this = $(this),
+ parent = $this.parent();
+ if (!parent.hasClass("active") && !parent.hasClass("disabled"))
{
- e.preventDefault();
+ var commandList = {
+ first: 1,
+ prev: that.current - 1,
+ next: that.current + 1,
+ last: that.totalPages
+ };
+ var command = $this.data("page");
+ that.current = commandList[command] || command;
+ loadData.call(that);
+ }
+ $this.trigger("blur");
+ });
- 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
- that.current = 1; // that.rowCount === -1 ---> All
- that.rowCount = newRowCount;
- $this.parents(menuItemsSelector).children().each(function ()
- {
- var $item = $(this),
- currentRowCount = $item.find(menuItemSelector).data("action");
- $item._bgSelectAria(currentRowCount === newRowCount);
- });
- $this.parents(menuSelector).find(menuTextSelector).text(getText(newRowCount));
- loadData.call(that);
- }
- });
- dropDown.find(menuItemsSelector).append(item);
- });
- actions.append(dropDown);
+ list.append(item);
+ return item;
}
-}
-function renderRows(rows)
-{
- if (rows.length > 0)
+ function renderRowCountSelection(actions)
{
var that = this,
- css = this.options.css,
- tpl = this.options.templates,
- tbody = this.element.children("tbody").first(),
- allRowsSelected = true,
- html = "";
+ rowCountList = this.options.rowCount;
- $.each(rows, function (index, row)
+ function getText(value)
{
- var cells = "",
- rowAttr = " data-row-id=\"" + ((that.identifier == null) ? index : row[that.identifier]) + "\"",
- rowCss = "";
+ return (value === -1) ? that.options.labels.all : value;
+ }
- if (that.selection)
- {
- var selected = ($.inArray(row[that.identifier], that.selectedRows) !== -1),
- selectBox = tpl.select.resolve(getParams.call(that,
- { type: "checkbox", value: row[that.identifier], checked: selected }));
- cells += tpl.cell.resolve(getParams.call(that, { content: selectBox, css: css.selectCell }));
- allRowsSelected = (allRowsSelected && selected);
- if (selected)
- {
- rowCss += css.selected;
- rowAttr += " aria-selected=\"true\"";
- }
- }
+ if ($.isArray(rowCountList))
+ {
+ var css = this.options.css,
+ tpl = this.options.templates,
+ dropDown = $(tpl.actionDropDown.resolve(getParams.call(this, { content: getText(this.rowCount) }))),
+ menuSelector = getCssSelector(css.dropDownMenu),
+ menuTextSelector = getCssSelector(css.dropDownMenuText),
+ menuItemsSelector = getCssSelector(css.dropDownMenuItems),
+ menuItemSelector = getCssSelector(css.dropDownItemButton);
- var status = row.status != null && that.options.statusMapping[row.status];
- if (status)
+ $.each(rowCountList, function (index, value)
{
- rowCss += status;
- }
+ var item = $(tpl.actionDropDownItem.resolve(getParams.call(that,
+ { text: getText(value), action: value })))
+ ._bgSelectAria(value.toString() === that.rowCount.toString())
+ .on("click" + namespace, menuItemSelector, function (e)
+ {
+ e.preventDefault();
- $.each(that.columns, function (j, column)
- {
- if (column.visible)
- {
- var value = ($.isFunction(column.formatter)) ?
- column.formatter.call(that, column, row) :
- column.converter.to(row[column.id]),
- cssClass = (column.cssClass.length > 0) ? " " + column.cssClass : "";
- cells += tpl.cell.resolve(getParams.call(that, {
- content: (value == null || value === "") ? " " : value,
- css: ((column.align === "right") ? css.right : (column.align === "center") ?
- css.center : css.left) + cssClass,
- style: (column.width == null) ? "" : "width:" + column.width + ";" }));
- }
+ 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
+ that.current = 1; // that.rowCount === -1 ---> All
+ that.rowCount = newRowCount;
+ $this.parents(menuItemsSelector).children().each(function ()
+ {
+ var $item = $(this),
+ currentRowCount = $item.find(menuItemSelector).data("action");
+ $item._bgSelectAria(currentRowCount === newRowCount);
+ });
+ $this.parents(menuSelector).find(menuTextSelector).text(getText(newRowCount));
+ loadData.call(that);
+ }
+ });
+ dropDown.find(menuItemsSelector).append(item);
});
-
- if (rowCss.length > 0)
- {
- rowAttr += " class=\"" + rowCss + "\"";
- }
- html += tpl.row.resolve(getParams.call(that, { attr: rowAttr, cells: cells }));
- });
-
- // sets or clears multi selectbox state
- that.element.find("thead " + getCssSelector(that.options.css.selectBox))
- .prop("checked", allRowsSelected);
-
- tbody.html(html);
-
- registerRowEvents.call(this, tbody);
- }
- else
- {
- renderNoResultsRow.call(this);
+ actions.append(dropDown);
+ }
}
-}
-
-function registerRowEvents(tbody)
-{
- var that = this,
- selectBoxSelector = getCssSelector(this.options.css.selectBox);
- if (this.selection && !this.options.rowSelect)
+ function renderRows(rows)
{
- tbody.off("click" + namespace, selectBoxSelector)
- .on("click" + namespace, selectBoxSelector, function(e)
- {
- e.stopPropagation();
+ if (rows.length > 0)
+ {
+ var that = this,
+ css = this.options.css,
+ tpl = this.options.templates,
+ tbody = this.element.children("tbody").first(),
+ allRowsSelected = true,
+ html = "";
- var $this = $(this),
- id = that.converter.from($this.val());
+ $.each(rows, function (index, row)
+ {
+ var cells = "",
+ rowAttr = " data-row-id=\"" + ((that.identifier == null) ? index : row[that.identifier]) + "\"",
+ rowCss = "";
- if ($this.prop("checked"))
+ if (that.selection)
{
- that.select([id]);
+ var selected = ($.inArray(row[that.identifier], that.selectedRows) !== -1),
+ selectBox = tpl.select.resolve(getParams.call(that,
+ { type: "checkbox", value: row[that.identifier], checked: selected }));
+ cells += tpl.cell.resolve(getParams.call(that, { content: selectBox, css: css.selectCell }));
+ allRowsSelected = (allRowsSelected && selected);
+ if (selected)
+ {
+ rowCss += css.selected;
+ rowAttr += " aria-selected=\"true\"";
+ }
}
- else
+
+ var status = row.status != null && that.options.statusMapping[row.status];
+ if (status)
{
- that.deselect([id]);
+ rowCss += status;
}
- });
- }
- tbody.off("click" + namespace, "> tr")
- .on("click" + namespace, "> tr", function(e)
- {
- e.stopPropagation();
-
- var $this = $(this),
- id = (that.identifier == null) ? $this.data("row-id") :
- that.converter.from($this.data("row-id") + ""),
- row = (that.identifier == null) ? that.currentRows[id] :
- that.currentRows.first(function (item) { return item[that.identifier] === id; });
-
- if (that.selection && that.options.rowSelect)
- {
- if ($this.hasClass(that.options.css.selected))
+ $.each(that.columns, function (j, column)
{
- that.deselect([id]);
- }
- else
+ if (column.visible)
+ {
+ var value = ($.isFunction(column.formatter)) ?
+ column.formatter.call(that, column, row) :
+ column.converter.to(row[column.id]),
+ cssClass = (column.cssClass.length > 0) ? " " + column.cssClass : "";
+ cells += tpl.cell.resolve(getParams.call(that, {
+ content: (value == null || value === "") ? " " : value,
+ css: ((column.align === "right") ? css.right : (column.align === "center") ?
+ css.center : css.left) + cssClass,
+ style: (column.width == null) ? "" : "width:" + column.width + ";" }));
+ }
+ });
+
+ if (rowCss.length > 0)
{
- that.select([id]);
+ rowAttr += " class=\"" + rowCss + "\"";
}
- }
+ html += tpl.row.resolve(getParams.call(that, { attr: rowAttr, cells: cells }));
+ });
- that.element.trigger("click" + namespace, [that.columns, row]);
- });
-}
+ // sets or clears multi selectbox state
+ that.element.find("thead " + getCssSelector(that.options.css.selectBox))
+ .prop("checked", allRowsSelected);
-function renderSearchField()
-{
- if (this.options.navigation !== 0)
+ tbody.html(html);
+
+ registerRowEvents.call(this, tbody);
+ }
+ else
+ {
+ renderNoResultsRow.call(this);
+ }
+ }
+
+ function registerRowEvents(tbody)
{
- var css = this.options.css,
- selector = getCssSelector(css.search),
- searchItems = findFooterAndHeaderItems.call(this, selector);
+ var that = this,
+ selectBoxSelector = getCssSelector(this.options.css.selectBox);
- if (searchItems.length > 0)
+ if (this.selection && !this.options.rowSelect)
{
- var that = this,
- tpl = this.options.templates,
- timer = null, // fast keyup detection
- currentValue = "",
- searchFieldSelector = getCssSelector(css.searchField),
- search = $(tpl.search.resolve(getParams.call(this))),
- searchField = (search.is(searchFieldSelector)) ? search :
- search.find(searchFieldSelector);
-
- searchField.on("keyup" + namespace, function (e)
+ tbody.off("click" + namespace, selectBoxSelector)
+ .on("click" + namespace, selectBoxSelector, function(e)
+ {
+ e.stopPropagation();
+
+ var $this = $(this),
+ id = that.converter.from($this.val());
+
+ if ($this.prop("checked"))
+ {
+ that.select([id]);
+ }
+ else
+ {
+ that.deselect([id]);
+ }
+ });
+ }
+
+ tbody.off("click" + namespace, "> tr")
+ .on("click" + namespace, "> tr", function(e)
{
e.stopPropagation();
- var newValue = $(this).val();
- if (currentValue !== newValue || (e.which === 13 && newValue !== ""))
+
+ var $this = $(this),
+ id = (that.identifier == null) ? $this.data("row-id") :
+ that.converter.from($this.data("row-id") + ""),
+ row = (that.identifier == null) ? that.currentRows[id] :
+ that.currentRows.first(function (item) { return item[that.identifier] === id; });
+
+ if (that.selection && that.options.rowSelect)
{
- currentValue = newValue;
- if (e.which === 13 || newValue.length === 0 || newValue.length >= that.options.searchSettings.characters)
+ if ($this.hasClass(that.options.css.selected))
{
- window.clearTimeout(timer);
- timer = window.setTimeout(function ()
- {
- executeSearch.call(that, newValue);
- }, that.options.searchSettings.delay);
+ that.deselect([id]);
+ }
+ else
+ {
+ that.select([id]);
}
}
- });
- replacePlaceHolder.call(this, searchItems, search);
- }
+ that.element.trigger("click" + namespace, [that.columns, row]);
+ });
}
-}
-function executeSearch(phrase)
-{
- if (this.searchPhrase !== phrase)
+ function renderSearchField()
{
- this.current = 1;
- this.searchPhrase = phrase;
- loadData.call(this);
- }
-}
+ if (this.options.navigation !== 0)
+ {
+ var css = this.options.css,
+ selector = getCssSelector(css.search),
+ searchItems = findFooterAndHeaderItems.call(this, selector);
-function renderTableHeader()
-{
- var that = this,
- headerRow = this.element.find("thead > tr"),
- css = this.options.css,
- tpl = this.options.templates,
- html = "",
- sorting = this.options.sorting;
-
- if (this.selection)
- {
- var selectBox = (this.options.multiSelect) ?
- tpl.select.resolve(getParams.call(that, { type: "checkbox", value: "all" })) : "";
- html += tpl.rawHeaderCell.resolve(getParams.call(that, { content: selectBox,
- css: css.selectCell }));
+ if (searchItems.length > 0)
+ {
+ var that = this,
+ tpl = this.options.templates,
+ timer = null, // fast keyup detection
+ currentValue = "",
+ searchFieldSelector = getCssSelector(css.searchField),
+ search = $(tpl.search.resolve(getParams.call(this))),
+ searchField = (search.is(searchFieldSelector)) ? search :
+ search.find(searchFieldSelector);
+
+ searchField.on("keyup" + namespace, function (e)
+ {
+ e.stopPropagation();
+ var newValue = $(this).val();
+ if (currentValue !== newValue || (e.which === 13 && newValue !== ""))
+ {
+ currentValue = newValue;
+ if (e.which === 13 || newValue.length === 0 || newValue.length >= that.options.searchSettings.characters)
+ {
+ window.clearTimeout(timer);
+ timer = window.setTimeout(function ()
+ {
+ executeSearch.call(that, newValue);
+ }, that.options.searchSettings.delay);
+ }
+ }
+ });
+
+ replacePlaceHolder.call(this, searchItems, search);
+ }
+ }
}
- $.each(this.columns, function (index, column)
+ function executeSearch(phrase)
{
- if (column.visible)
+ if (this.searchPhrase !== phrase)
{
- var sortOrder = that.sortDictionary[column.id],
- iconCss = ((sorting && sortOrder && sortOrder === "asc") ? css.iconUp :
- (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 : "";
- html += tpl.headerCell.resolve(getParams.call(that, {
- column: column, icon: icon, sortable: sorting && column.sortable && css.sortable || "",
- css: ((align === "right") ? css.right : (align === "center") ?
- css.center : css.left) + cssClass,
- style: (column.width == null) ? "" : "width:" + column.width + ";" }));
+ this.current = 1;
+ this.searchPhrase = phrase;
+ loadData.call(this);
}
- });
-
- headerRow.html(html);
+ }
- if (sorting)
+ function renderTableHeader()
{
- var sortingSelector = getCssSelector(css.sortable);
- headerRow.off("click" + namespace, sortingSelector)
- .on("click" + namespace, sortingSelector, function (e)
- {
- e.preventDefault();
+ var that = this,
+ headerRow = this.element.find("thead > tr"),
+ css = this.options.css,
+ tpl = this.options.templates,
+ html = "",
+ sorting = this.options.sorting;
- setTableHeaderSortDirection.call(that, $(this));
- sortRows.call(that);
- loadData.call(that);
- });
- }
+ if (this.selection)
+ {
+ var selectBox = (this.options.multiSelect) ?
+ tpl.select.resolve(getParams.call(that, { type: "checkbox", value: "all" })) : "";
+ html += tpl.rawHeaderCell.resolve(getParams.call(that, { content: selectBox,
+ css: css.selectCell }));
+ }
- // todo: create a own function for that piece of code
- if (this.selection && this.options.multiSelect)
- {
- var selectBoxSelector = getCssSelector(css.selectBox);
- headerRow.off("click" + namespace, selectBoxSelector)
- .on("click" + namespace, selectBoxSelector, function(e)
+ $.each(this.columns, function (index, column)
+ {
+ if (column.visible)
{
- e.stopPropagation();
+ var sortOrder = that.sortDictionary[column.id],
+ iconCss = ((sorting && sortOrder && sortOrder === "asc") ? css.iconUp :
+ (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 : "";
+ html += tpl.headerCell.resolve(getParams.call(that, {
+ column: column, icon: icon, sortable: sorting && column.sortable && css.sortable || "",
+ css: ((align === "right") ? css.right : (align === "center") ?
+ css.center : css.left) + cssClass,
+ style: (column.width == null) ? "" : "width:" + column.width + ";" }));
+ }
+ });
- if ($(this).prop("checked"))
- {
- that.select();
- }
- else
+ headerRow.html(html);
+
+ if (sorting)
+ {
+ var sortingSelector = getCssSelector(css.sortable);
+ headerRow.off("click" + namespace, sortingSelector)
+ .on("click" + namespace, sortingSelector, function (e)
{
- that.deselect();
- }
- });
- }
-}
+ e.preventDefault();
-function setTableHeaderSortDirection(element)
-{
- var css = this.options.css,
- iconSelector = getCssSelector(css.icon),
- columnId = element.data("column-id") || element.parents("th").first().data("column-id"),
- sortOrder = this.sortDictionary[columnId],
- icon = element.find(iconSelector);
+ setTableHeaderSortDirection.call(that, $(this));
+ sortRows.call(that);
+ loadData.call(that);
+ });
+ }
- if (!this.options.multiSort)
- {
- element.parents("tr").first().find(iconSelector).removeClass(css.iconDown + " " + css.iconUp);
- this.sortDictionary = {};
- for (var i = 0; i < this.columns.length; i++)
+ // todo: create a own function for that piece of code
+ if (this.selection && this.options.multiSelect)
{
- localStorage.removeItem('sortColumns[' + this.uid + '][' + this.columns[i].id + ']');
+ var selectBoxSelector = getCssSelector(css.selectBox);
+ headerRow.off("click" + namespace, selectBoxSelector)
+ .on("click" + namespace, selectBoxSelector, function(e)
+ {
+ e.stopPropagation();
+
+ if ($(this).prop("checked"))
+ {
+ that.select();
+ }
+ else
+ {
+ that.deselect();
+ }
+ });
}
}
- 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")
+ function setTableHeaderSortDirection(element)
{
- if (this.options.multiSort)
+ var css = this.options.css,
+ iconSelector = getCssSelector(css.icon),
+ columnId = element.data("column-id") || element.parents("th").first().data("column-id"),
+ sortOrder = this.sortDictionary[columnId],
+ icon = element.find(iconSelector);
+
+ if (!this.options.multiSort)
{
- var newSort = {};
- for (var key in this.sortDictionary)
+ 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")
+ {
+ if (this.options.multiSort)
{
- if (key !== columnId)
+ var newSort = {};
+ for (var key in this.sortDictionary)
{
- newSort[key] = this.sortDictionary[key];
+ if (key !== columnId)
+ {
+ newSort[key] = this.sortDictionary[key];
+ }
}
+ 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);
}
- 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);
+ icon.addClass(css.iconUp);
}
}
- else
+
+ function replacePlaceHolder(placeholder, element)
{
- this.sortDictionary[columnId] = "asc";
- localStorage.setItem('sortColumns[' + this.uid + '][' + columnId + ']', "asc");
- icon.addClass(css.iconUp);
+ placeholder.each(function (index, item)
+ {
+ // todo: check how append is implemented. Perhaps cloning here is superfluous.
+ $(item).before(element.clone(true)).remove();
+ });
}
-}
-function replacePlaceHolder(placeholder, element)
-{
- placeholder.each(function (index, item)
+ function showLoading()
{
- // todo: check how append is implemented. Perhaps cloning here is superfluous.
- $(item).before(element.clone(true)).remove();
- });
-}
-
-function showLoading()
-{
- var that = this;
+ var that = this;
- window.setTimeout(function()
- {
- if (that.element._bgAria("busy") === "true")
+ window.setTimeout(function()
{
- var tpl = that.options.templates,
- thead = that.element.children("thead").first(),
- tbody = that.element.children("tbody").first(),
- firstCell = tbody.find("tr > td").first(),
- padding = (that.element.height() - thead.height()) - (firstCell.height() + 20),
- count = that.columns.where(isVisible).length;
-
- if (that.selection)
- {
- count = count + 1;
- }
- tbody.html(tpl.loading.resolve(getParams.call(that, { columns: count })));
- if (that.rowCount !== -1 && padding > 0)
+ if (that.element._bgAria("busy") === "true")
{
- tbody.find("tr > td").css("padding", "20px 0 " + padding + "px");
+ var tpl = that.options.templates,
+ thead = that.element.children("thead").first(),
+ tbody = that.element.children("tbody").first(),
+ firstCell = tbody.find("tr > td").first(),
+ padding = (that.element.height() - thead.height()) - (firstCell.height() + 20),
+ count = that.columns.where(isVisible).length;
+
+ if (that.selection)
+ {
+ count = count + 1;
+ }
+ tbody.html(tpl.loading.resolve(getParams.call(that, { columns: count })));
+ if (that.rowCount !== -1 && padding > 0)
+ {
+ tbody.find("tr > td").css("padding", "20px 0 " + padding + "px");
+ }
}
- }
- }, 250);
-}
-
-function sortRows()
-{
- var sortArray = [];
+ }, 250);
+ }
- function sort(x, y, current)
+ function sortRows()
{
- current = current || 0;
- var next = current + 1,
- item = sortArray[current];
+ var sortArray = [];
- function sortOrder(value)
+ function sort(x, y, current)
{
- return (item.order === "asc") ? value : value * -1;
- }
+ current = current || 0;
+ var next = current + 1,
+ item = sortArray[current];
- return (x[item.id] > y[item.id]) ? sortOrder(1) :
- (x[item.id] < y[item.id]) ? sortOrder(-1) :
- (sortArray.length > next) ? sort(x, y, next) : 0;
- }
+ function sortOrder(value)
+ {
+ return (item.order === "asc") ? value : value * -1;
+ }
- if (!this.options.ajax)
- {
- var that = this;
+ return (x[item.id] > y[item.id]) ? sortOrder(1) :
+ (x[item.id] < y[item.id]) ? sortOrder(-1) :
+ (sortArray.length > next) ? sort(x, y, next) : 0;
+ }
- for (var key in this.sortDictionary)
+ if (!this.options.ajax)
{
- if (this.options.multiSort || sortArray.length === 0)
+ var that = this;
+
+ for (var key in this.sortDictionary)
{
- sortArray.push({
- id: key,
- order: this.sortDictionary[key]
- });
+ if (this.options.multiSort || sortArray.length === 0)
+ {
+ sortArray.push({
+ id: key,
+ order: this.sortDictionary[key]
+ });
+ }
}
- }
- if (sortArray.length > 0)
- {
- this.rows.sort(sort);
+ if (sortArray.length > 0)
+ {
+ this.rows.sort(sort);
+ }
}
}
- }
-
-// GRID PUBLIC CLASS DEFINITION
-// ====================
-
-/**
- * Represents the jQuery Bootgrid plugin.
- *
- * @class Grid
- * @constructor
- * @param element {Object} The corresponding DOM element.
- * @param options {Object} The options to override default settings.
- * @chainable
- **/
-var Grid = function(element, options)
-{
- this.element = $(element);
- this.origin = this.element.clone();
- this.options = $.extend(true, {}, Grid.defaults, this.element.data(), options);
- // overrides rowCount explicitly because deep copy ($.extend) leads to strange behaviour
- var rowCount = this.options.rowCount = this.element.data().rowCount || options.rowCount || this.options.rowCount;
- this.columns = [];
- this.current = 1;
- this.currentRows = [];
- this.identifier = null; // The first column ID that is marked as identifier
- this.selection = false;
- 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.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 = window.location.pathname + "#" + this.element.attr('id');
-
- // todo: implement cache
-};
-
-/**
- * An object that represents the default settings.
- *
- * @static
- * @class defaults
- * @for Grid
- * @example
- * // Global approach
- * $.bootgrid.defaults.selection = true;
- * @example
- * // Initialization approach
- * $("#bootgrid").bootgrid({ selection = true });
- **/
-Grid.defaults = {
- navigation: 3, // it's a flag: 0 = none, 1 = top, 2 = bottom, 3 = both (top and bottom)
- padding: 2, // page padding (pagination)
- columnSelection: true,
- rowCount: [10, 25, 50, -1], // rows per page int or array of int (-1 represents "All")
- /**
- * Enables row selection (to enable multi selection see also `multiSelect`). Default value is `false`.
- *
- * @property selection
- * @type Boolean
- * @default false
- * @for defaults
- * @since 1.0.0
- **/
- selection: false,
+ // GRID PUBLIC CLASS DEFINITION
+ // ====================
/**
- * Enables multi selection (`selection` must be set to `true` as well). Default value is `false`.
+ * Represents the jQuery Bootgrid plugin.
*
- * @property multiSelect
- * @type Boolean
- * @default false
- * @for defaults
- * @since 1.0.0
+ * @class Grid
+ * @constructor
+ * @param element {Object} The corresponding DOM element.
+ * @param options {Object} The options to override default settings.
+ * @chainable
**/
- multiSelect: false,
+ var Grid = function(element, options)
+ {
+ this.element = $(element);
+ this.origin = this.element.clone();
+ this.options = $.extend(true, {}, Grid.defaults, this.element.data(), options);
+ // overrides rowCount explicitly because deep copy ($.extend) leads to strange behaviour
+ var rowCount = this.options.rowCount = this.element.data().rowCount || options.rowCount || this.options.rowCount;
+ this.columns = [];
+ this.current = 1;
+ this.currentRows = [];
+ this.identifier = null; // The first column ID that is marked as identifier
+ this.selection = false;
+ 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.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 = window.location.pathname + "#" + this.element.attr('id');
- /**
- * Enables entire row click selection (`selection` must be set to `true` as well). Default value is `false`.
- *
- * @property rowSelect
- * @type Boolean
- * @default false
- * @for defaults
- * @since 1.1.0
- **/
- rowSelect: false,
+ // todo: implement cache
+ };
/**
- * Defines whether the row selection is saved internally on filtering, paging and sorting
- * (even if the selected rows are not visible).
+ * An object that represents the default settings.
*
- * @property keepSelection
- * @type Boolean
- * @default false
- * @for defaults
- * @since 1.1.0
+ * @static
+ * @class defaults
+ * @for Grid
+ * @example
+ * // Global approach
+ * $.bootgrid.defaults.selection = true;
+ * @example
+ * // Initialization approach
+ * $("#bootgrid").bootgrid({ selection = true });
**/
- keepSelection: false,
-
- highlightRows: false, // highlights new rows (find the page of the first new row)
- sorting: true,
- multiSort: false,
+ Grid.defaults = {
+ navigation: 3, // it's a flag: 0 = none, 1 = top, 2 = bottom, 3 = both (top and bottom)
+ padding: 2, // page padding (pagination)
+ columnSelection: true,
+ rowCount: [10, 25, 50, -1], // rows per page int or array of int (-1 represents "All")
- /**
- * General search settings to configure the search field behaviour.
- *
- * @property searchSettings
- * @type Object
- * @for defaults
- * @since 1.2.0
- **/
- searchSettings: {
/**
- * The time in milliseconds to wait before search gets executed.
+ * Enables row selection (to enable multi selection see also `multiSelect`). Default value is `false`.
*
- * @property delay
- * @type Number
- * @default 250
- * @for searchSettings
+ * @property selection
+ * @type Boolean
+ * @default false
+ * @for defaults
+ * @since 1.0.0
**/
- delay: 250,
+ selection: false,
/**
- * The characters to type before the search gets executed.
+ * Enables multi selection (`selection` must be set to `true` as well). Default value is `false`.
*
- * @property characters
- * @type Number
- * @default 1
- * @for searchSettings
+ * @property multiSelect
+ * @type Boolean
+ * @default false
+ * @for defaults
+ * @since 1.0.0
**/
- characters: 1
- },
-
- /**
- * Defines whether the data shall be loaded via an asynchronous HTTP (Ajax) request.
- *
- * @property ajax
- * @type Boolean
- * @default false
- * @for defaults
- **/
- ajax: false,
+ multiSelect: false,
- /**
- * Ajax request settings that shall be used for server-side communication.
- * All setting except data, error, success and url can be overridden.
- * For the full list of settings go to http://api.jquery.com/jQuery.ajax/.
- *
- * @property ajaxSettings
- * @type Object
- * @for defaults
- * @since 1.2.0
- **/
- ajaxSettings: {
/**
- * Specifies the HTTP method which shall be used when sending data to the server.
- * Go to http://api.jquery.com/jQuery.ajax/ for more details.
- * This setting is overriden for backward compatibility.
+ * Enables entire row click selection (`selection` must be set to `true` as well). Default value is `false`.
*
- * @property method
- * @type String
- * @default "POST"
- * @for ajaxSettings
+ * @property rowSelect
+ * @type Boolean
+ * @default false
+ * @for defaults
+ * @since 1.1.0
**/
- method: "POST"
- },
-
- /**
- * Enriches the request object with additional properties. Either a `PlainObject` or a `Function`
- * that returns a `PlainObject` can be passed. Default value is `{}`.
- *
- * @property post
- * @type Object|Function
- * @default function (request) { return request; }
- * @for defaults
- * @deprecated Use instead `requestHandler`
- **/
- post: {}, // or use function () { return {}; } (reserved properties are "current", "rowCount", "sort" and "searchPhrase")
-
- /**
- * Sets the data URL to a data service (e.g. a REST service). Either a `String` or a `Function`
- * that returns a `String` can be passed. Default value is `""`.
- *
- * @property url
- * @type String|Function
- * @default ""
- * @for defaults
- **/
- url: "", // or use function () { return ""; }
-
- /**
- * Defines whether the search is case sensitive or insensitive.
- *
- * @property caseSensitive
- * @type Boolean
- * @default true
- * @for defaults
- * @since 1.1.0
- **/
- caseSensitive: true,
-
- // note: The following properties should not be used via data-api attributes
-
- /**
- * Transforms the JSON request object in what ever is needed on the server-side implementation.
- *
- * @property requestHandler
- * @type Function
- * @default function (request) { return request; }
- * @for defaults
- * @since 1.1.0
- **/
- requestHandler: function (request) { return request; },
-
- /**
- * Transforms the response object into the expected JSON response object.
- *
- * @property responseHandler
- * @type Function
- * @default function (response) { return response; }
- * @for defaults
- * @since 1.1.0
- **/
- responseHandler: function (response) { return response; },
-
- /**
- * A list of converters.
- *
- * @property converters
- * @type Object
- * @for defaults
- * @since 1.0.0
- **/
- converters: {
- numeric: {
- from: function (value) { return +value; }, // converts from string to numeric
- to: function (value) {
- // converts from numeric to string
- if (value === undefined) {
- return "";
- } else {
- return value + "";
- }
- }
- },
- string: {
- // default converter
- from: function (value) { return value; },
- to: function (value) { return value; }
- },
- datetime: {
- // convert datetime type fields from unix timestamp to readable format
- from: function (value) {
- return value ? moment(parseInt(value)*1000) : "";
- },
- to: function (value) {
- return value ? value.format("lll") : "";
- }
- },
- memsize: {
- from: function (value) {
- var modifiers = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
-
- var ret = parseInt(value);
- var modifier = value.slice(-1).toUpperCase();
- for (var exponent = modifiers.length - 1; exponent >= 0; exponent--) {
- if (modifier === modifiers[exponent]) {
- ret *= Math.pow(1024, exponent);
- break;
- }
- }
- return ret;
- },
- to: function (value) {
- var modifiers = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
-
- for (var exponent = modifiers.length - 1; exponent >= 0; exponent--) {
- if (value >= (5 * Math.pow(1024, exponent))) {
- return parseInt(value / Math.pow(1024, exponent)) + modifiers[exponent];
- }
- }
- return parseInt(value) + '';
- }
- },
- notprefixable: {
- to: function (value) {
- if (value.not) {
- return ' ' + value.val;
- } else {
- return value.val;
- }
- }
- }
-
- },
-
- /**
- * Contains all css classes.
- *
- * @property css
- * @type Object
- * @for defaults
- **/
- css: {
- actions: "actions btn-group", // must be a unique class name or constellation of class names within the header and footer
- 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",
- dropDownItem: "dropdown-item", // must be a unique class name or constellation of class names within the actionDropDown,
- dropDownItemButton: "dropdown-item-button", // must be a unique class name or constellation of class names within the actionDropDown
- dropDownItemCheckbox: "dropdown-item-checkbox", // must be a unique class name or constellation of class names within the actionDropDown
- dropDownMenu: "dropdown btn-group", // must be a unique class name or constellation of class names within the actionDropDown
- dropDownMenuItems: "dropdown-menu pull-right", // must be a unique class name or constellation of class names within the actionDropDown
- 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",
- 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
- paginationButton: "button", // must be a unique class name or constellation of class names within the pagination
+ rowSelect: false,
/**
- * CSS class to select the parent div which activates responsive mode.
+ * Defines whether the row selection is saved internally on filtering, paging and sorting
+ * (even if the selected rows are not visible).
*
- * @property responsiveTable
- * @type String
- * @default "table-responsive"
- * @for css
+ * @property keepSelection
+ * @type Boolean
+ * @default false
+ * @for defaults
* @since 1.1.0
**/
- responsiveTable: "table-responsive",
+ keepSelection: false,
- right: "text-right",
- search: "search form-group", // must be a unique class name or constellation of class names within the header and footer
- searchField: "search-field form-control",
- selectBox: "select-box", // must be a unique class name or constellation of class names within the entire table
- selectCell: "select-cell", // must be a unique class name or constellation of class names within the entire table
+ highlightRows: false, // highlights new rows (find the page of the first new row)
+ sorting: true,
+ multiSort: false,
+ resetButton: false,
/**
- * CSS class to highlight selected rows.
+ * General search settings to configure the search field behaviour.
*
- * @property selected
- * @type String
- * @default "active"
- * @for css
- * @since 1.1.0
+ * @property searchSettings
+ * @type Object
+ * @for defaults
+ * @since 1.2.0
**/
- selected: "active",
+ searchSettings: {
+ /**
+ * The time in milliseconds to wait before search gets executed.
+ *
+ * @property delay
+ * @type Number
+ * @default 250
+ * @for searchSettings
+ **/
+ delay: 250,
+
+ /**
+ * The characters to type before the search gets executed.
+ *
+ * @property characters
+ * @type Number
+ * @default 1
+ * @for searchSettings
+ **/
+ characters: 1
+ },
- sortable: "sortable",
- table: "bootgrid-table table"
- },
+ /**
+ * Defines whether the data shall be loaded via an asynchronous HTTP (Ajax) request.
+ *
+ * @property ajax
+ * @type Boolean
+ * @default false
+ * @for defaults
+ **/
+ ajax: false,
- /**
- * A dictionary of formatters.
- *
- * @property formatters
- * @type Object
- * @for defaults
- * @since 1.0.0
- **/
- formatters: {},
+ /**
+ * Ajax request settings that shall be used for server-side communication.
+ * All setting except data, error, success and url can be overridden.
+ * For the full list of settings go to http://api.jquery.com/jQuery.ajax/.
+ *
+ * @property ajaxSettings
+ * @type Object
+ * @for defaults
+ * @since 1.2.0
+ **/
+ ajaxSettings: {
+ /**
+ * Specifies the HTTP method which shall be used when sending data to the server.
+ * Go to http://api.jquery.com/jQuery.ajax/ for more details.
+ * This setting is overriden for backward compatibility.
+ *
+ * @property method
+ * @type String
+ * @default "POST"
+ * @for ajaxSettings
+ **/
+ method: "POST"
+ },
- /**
- * Contains all labels.
- *
- * @property labels
- * @type Object
- * @for defaults
- **/
- labels: {
- all: "All",
- infos: "Showing {{ctx.start}} to {{ctx.end}} of {{ctx.total}} entries",
- loading: "Loading...",
- noResults: "No results found!",
- refresh: "Refresh",
- search: "Search"
- },
+ /**
+ * Enriches the request object with additional properties. Either a `PlainObject` or a `Function`
+ * that returns a `PlainObject` can be passed. Default value is `{}`.
+ *
+ * @property post
+ * @type Object|Function
+ * @default function (request) { return request; }
+ * @for defaults
+ * @deprecated Use instead `requestHandler`
+ **/
+ post: {}, // or use function () { return {}; } (reserved properties are "current", "rowCount", "sort" and "searchPhrase")
- /**
- * Specifies the mapping between status and contextual classes to color rows.
- *
- * @property statusMapping
- * @type Object
- * @for defaults
- * @since 1.2.0
- **/
- statusMapping: {
/**
- * Specifies a successful or positive action.
+ * Sets the data URL to a data service (e.g. a REST service). Either a `String` or a `Function`
+ * that returns a `String` can be passed. Default value is `""`.
*
- * @property 0
- * @type String
- * @for statusMapping
+ * @property url
+ * @type String|Function
+ * @default ""
+ * @for defaults
**/
- 0: "success",
+ url: "", // or use function () { return ""; }
/**
- * Specifies a neutral informative change or action.
+ * Defines whether the search is case sensitive or insensitive.
*
- * @property 1
- * @type String
- * @for statusMapping
+ * @property caseSensitive
+ * @type Boolean
+ * @default true
+ * @for defaults
+ * @since 1.1.0
**/
- 1: "info",
+ caseSensitive: true,
+
+ // note: The following properties should not be used via data-api attributes
/**
- * Specifies a warning that might need attention.
+ * Transforms the JSON request object in what ever is needed on the server-side implementation.
*
- * @property 2
- * @type String
- * @for statusMapping
+ * @property requestHandler
+ * @type Function
+ * @default function (request) { return request; }
+ * @for defaults
+ * @since 1.1.0
**/
- 2: "warning",
+ requestHandler: function (request) { return request; },
/**
- * Specifies a dangerous or potentially negative action.
+ * Transforms the response object into the expected JSON response object.
*
- * @property 3
- * @type String
- * @for statusMapping
+ * @property responseHandler
+ * @type Function
+ * @default function (response) { return response; }
+ * @for defaults
+ * @since 1.1.0
**/
- 3: "danger"
- },
+ responseHandler: function (response) { return response; },
- /**
- * Contains all templates.
- *
- * @property templates
- * @type Object
- * @for defaults
- **/
- 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}} | ", // Used for the multi select box
- row: "{{ctx.cells}}
",
- search: "",
- select: ""
- }
-};
-
-/**
- * Appends rows.
- *
- * @method append
- * @param rows {Array} An array of rows to append
- * @chainable
- **/
-Grid.prototype.append = function(rows)
-{
- if (this.options.ajax)
- {
- // todo: implement ajax PUT
- }
- else
- {
- var appendedRows = [];
- for (var i = 0; i < rows.length; i++)
- {
- var row = rows[i];
- for (var j = 0; j < this.columns.length; j++) {
- var column = this.columns[j];
- row[column.id] = column.converter.from(row[column.id]);
- }
- if (appendRow.call(this, row))
- {
- appendedRows.push(row);
+ /**
+ * A list of converters.
+ *
+ * @property converters
+ * @type Object
+ * @for defaults
+ * @since 1.0.0
+ **/
+ converters: {
+ numeric: {
+ from: function (value) { return +value; }, // converts from string to numeric
+ to: function (value) {
+ // converts from numeric to string
+ if (value === undefined) {
+ return "";
+ } else {
+ return value + "";
+ }
+ }
+ },
+ string: {
+ // default converter
+ from: function (value) { return value; },
+ to: function (value) { return value; }
+ },
+ datetime: {
+ // convert datetime type fields from unix timestamp to readable format
+ from: function (value) {
+ return value ? moment(parseInt(value)*1000) : "";
+ },
+ to: function (value) {
+ return value ? value.format("lll") : "";
+ }
+ },
+ memsize: {
+ from: function (value) {
+ var modifiers = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
+
+ var ret = parseInt(value);
+ var modifier = value.slice(-1).toUpperCase();
+ for (var exponent = modifiers.length - 1; exponent >= 0; exponent--) {
+ if (modifier === modifiers[exponent]) {
+ ret *= Math.pow(1024, exponent);
+ break;
+ }
+ }
+ return ret;
+ },
+ to: function (value) {
+ var modifiers = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
+
+ for (var exponent = modifiers.length - 1; exponent >= 0; exponent--) {
+ if (value >= (5 * Math.pow(1024, exponent))) {
+ return parseInt(value / Math.pow(1024, exponent)) + modifiers[exponent];
+ }
+ }
+ return parseInt(value) + '';
+ }
+ },
+ notprefixable: {
+ to: function (value) {
+ if (value.not) {
+ return ' ' + value.val;
+ } else {
+ return value.val;
+ }
+ }
}
- }
- sortRows.call(this);
- highlightAppendedRows.call(this, appendedRows);
- loadData.call(this);
- this.element.trigger("appended" + namespace, [appendedRows]);
- }
- return this;
-};
+ },
-/**
- * Removes all rows.
- *
- * @method clear
- * @chainable
- **/
-Grid.prototype.clear = function()
-{
- if (this.options.ajax)
- {
- // todo: implement ajax POST
- }
- else
- {
- var removedRows = $.extend([], this.rows);
- this.rows = [];
- this.current = 1;
- this.total = 0;
- loadData.call(this);
- this.element.trigger("cleared" + namespace, [removedRows]);
- }
+ /**
+ * Contains all css classes.
+ *
+ * @property css
+ * @type Object
+ * @for defaults
+ **/
+ css: {
+ actions: "actions btn-group", // must be a unique class name or constellation of class names within the header and footer
+ 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",
+ dropDownItem: "dropdown-item", // must be a unique class name or constellation of class names within the actionDropDown,
+ dropDownItemButton: "dropdown-item-button", // must be a unique class name or constellation of class names within the actionDropDown
+ dropDownItemCheckbox: "dropdown-item-checkbox", // must be a unique class name or constellation of class names within the actionDropDown
+ dropDownMenu: "dropdown btn-group", // must be a unique class name or constellation of class names within the actionDropDown
+ dropDownMenuItems: "dropdown-menu pull-right", // must be a unique class name or constellation of class names within the actionDropDown
+ 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",
+ iconReset: "glyphicon-random",
+ 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
+ paginationButton: "button", // must be a unique class name or constellation of class names within the pagination
+
+ /**
+ * CSS class to select the parent div which activates responsive mode.
+ *
+ * @property responsiveTable
+ * @type String
+ * @default "table-responsive"
+ * @for css
+ * @since 1.1.0
+ **/
+ responsiveTable: "table-responsive",
+
+ right: "text-right",
+ search: "search form-group", // must be a unique class name or constellation of class names within the header and footer
+ searchField: "search-field form-control",
+ selectBox: "select-box", // must be a unique class name or constellation of class names within the entire table
+ selectCell: "select-cell", // must be a unique class name or constellation of class names within the entire table
+
+ /**
+ * CSS class to highlight selected rows.
+ *
+ * @property selected
+ * @type String
+ * @default "active"
+ * @for css
+ * @since 1.1.0
+ **/
+ selected: "active",
+
+ sortable: "sortable",
+ table: "bootgrid-table table"
+ },
+
+ /**
+ * A dictionary of formatters.
+ *
+ * @property formatters
+ * @type Object
+ * @for defaults
+ * @since 1.0.0
+ **/
+ formatters: {},
- return this;
-};
+ /**
+ * Contains all labels.
+ *
+ * @property labels
+ * @type Object
+ * @for defaults
+ **/
+ labels: {
+ all: "All",
+ infos: "Showing {{ctx.start}} to {{ctx.end}} of {{ctx.total}} entries",
+ loading: "Loading...",
+ noResults: "No results found!",
+ refresh: "Refresh",
+ reset: "Reset stored settings and reload the page",
+ search: "Search"
+ },
-/**
- * Removes the control functionality completely and transforms the current state to the initial HTML structure.
- *
- * @method destroy
- * @chainable
- **/
-Grid.prototype.destroy = function()
-{
- // todo: this method has to be optimized (the complete initial state must be restored)
- $(window).off(namespace);
- if (this.options.navigation & 1)
- {
- this.header.remove();
- }
- if (this.options.navigation & 2)
- {
- this.footer.remove();
- }
- this.element.before(this.origin).remove();
-
- return this;
-};
-
-/**
- * Resets the state and reloads rows.
- *
- * @method reload
- * @chainable
- **/
-Grid.prototype.reload = function()
-{
- this.current = 1; // reset
- loadData.call(this);
-
- return this;
-};
-
-/**
- * Removes rows by ids. Removes selected rows if no ids are provided.
- *
- * @method remove
- * @param [rowsIds] {Array} An array of rows ids to remove
- * @chainable
- **/
-Grid.prototype.remove = function(rowIds)
-{
- if (this.identifier != null)
- {
- var that = this;
+ /**
+ * Specifies the mapping between status and contextual classes to color rows.
+ *
+ * @property statusMapping
+ * @type Object
+ * @for defaults
+ * @since 1.2.0
+ **/
+ statusMapping: {
+ /**
+ * Specifies a successful or positive action.
+ *
+ * @property 0
+ * @type String
+ * @for statusMapping
+ **/
+ 0: "success",
+
+ /**
+ * Specifies a neutral informative change or action.
+ *
+ * @property 1
+ * @type String
+ * @for statusMapping
+ **/
+ 1: "info",
+
+ /**
+ * Specifies a warning that might need attention.
+ *
+ * @property 2
+ * @type String
+ * @for statusMapping
+ **/
+ 2: "warning",
+
+ /**
+ * Specifies a dangerous or potentially negative action.
+ *
+ * @property 3
+ * @type String
+ * @for statusMapping
+ **/
+ 3: "danger"
+ },
+ /**
+ * Contains all templates.
+ *
+ * @property templates
+ * @type Object
+ * @for defaults
+ **/
+ 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}} | ", // Used for the multi select box
+ row: "{{ctx.cells}}
",
+ search: "",
+ select: ""
+ }
+ };
+
+ /**
+ * Appends rows.
+ *
+ * @method append
+ * @param rows {Array} An array of rows to append
+ * @chainable
+ **/
+ Grid.prototype.append = function(rows)
+ {
if (this.options.ajax)
{
- // todo: implement ajax DELETE
+ // todo: implement ajax PUT
}
else
{
- rowIds = rowIds || this.selectedRows;
- var id,
- removedRows = [];
-
- for (var i = 0; i < rowIds.length; i++)
+ var appendedRows = [];
+ for (var i = 0; i < rows.length; i++)
{
- id = rowIds[i];
-
- for (var j = 0; j < this.rows.length; j++)
+ var row = rows[i];
+ for (var j = 0; j < this.columns.length; j++) {
+ var column = this.columns[j];
+ row[column.id] = column.converter.from(row[column.id]);
+ }
+ if (appendRow.call(this, row))
{
- if (this.rows[j][this.identifier] === id)
- {
- removedRows.push(this.rows[j]);
- this.rows.splice(j, 1);
- break;
- }
+ appendedRows.push(row);
}
}
-
- this.current = 1; // reset
+ sortRows.call(this);
+ highlightAppendedRows.call(this, appendedRows);
loadData.call(this);
- this.element.trigger("removed" + namespace, [removedRows]);
+ this.element.trigger("appended" + namespace, [appendedRows]);
}
- }
- return this;
-};
-
-/**
- * Searches in all rows for a specific phrase (but only in visible cells).
- * The search filter will be reseted, if no argument is provided.
- *
- * @method search
- * @param [phrase] {String} The phrase to search for
- * @chainable
- **/
-Grid.prototype.search = function(phrase)
-{
- phrase = phrase || "";
+ return this;
+ };
- if (this.searchPhrase !== phrase)
+ /**
+ * Removes all rows.
+ *
+ * @method clear
+ * @chainable
+ **/
+ Grid.prototype.clear = function()
{
- var selector = getCssSelector(this.options.css.searchField),
- searchFields = findFooterAndHeaderItems.call(this, selector);
- searchFields.val(phrase);
- }
+ if (this.options.ajax)
+ {
+ // todo: implement ajax POST
+ }
+ else
+ {
+ var removedRows = $.extend([], this.rows);
+ this.rows = [];
+ this.current = 1;
+ this.total = 0;
+ loadData.call(this);
+ this.element.trigger("cleared" + namespace, [removedRows]);
+ }
- executeSearch.call(this, phrase);
+ return this;
+ };
+ /**
+ * Removes the control functionality completely and transforms the current state to the initial HTML structure.
+ *
+ * @method destroy
+ * @chainable
+ **/
+ Grid.prototype.destroy = function()
+ {
+ // todo: this method has to be optimized (the complete initial state must be restored)
+ $(window).off(namespace);
+ if (this.options.navigation & 1)
+ {
+ this.header.remove();
+ }
+ if (this.options.navigation & 2)
+ {
+ this.footer.remove();
+ }
+ this.element.before(this.origin).remove();
- return this;
-};
+ return this;
+ };
-/**
- * Selects rows by ids. Selects all visible rows if no ids are provided.
- * In server-side scenarios only visible rows are selectable.
- *
- * @method select
- * @param [rowsIds] {Array} An array of rows ids to select
- * @chainable
- **/
-Grid.prototype.select = function(rowIds)
-{
- if (this.selection)
+ /**
+ * Resets the state and reloads rows.
+ *
+ * @method reload
+ * @chainable
+ **/
+ Grid.prototype.reload = function()
{
- rowIds = rowIds || this.currentRows.propValues(this.identifier);
+ this.current = 1; // reset
+ loadData.call(this);
- var id, i,
- selectedRows = [];
+ return this;
+ };
- while (rowIds.length > 0 && !(!this.options.multiSelect && selectedRows.length === 1))
+ /**
+ * Removes rows by ids. Removes selected rows if no ids are provided.
+ *
+ * @method remove
+ * @param [rowsIds] {Array} An array of rows ids to remove
+ * @chainable
+ **/
+ Grid.prototype.remove = function(rowIds)
+ {
+ if (this.identifier != null)
{
- id = rowIds.pop();
- if ($.inArray(id, this.selectedRows) === -1)
+ var that = this;
+
+ if (this.options.ajax)
{
- for (i = 0; i < this.currentRows.length; i++)
+ // todo: implement ajax DELETE
+ }
+ else
+ {
+ rowIds = rowIds || this.selectedRows;
+ var id,
+ removedRows = [];
+
+ for (var i = 0; i < rowIds.length; i++)
{
- if (this.currentRows[i][this.identifier] === id)
+ id = rowIds[i];
+
+ for (var j = 0; j < this.rows.length; j++)
{
- selectedRows.push(this.currentRows[i]);
- this.selectedRows.push(id);
- break;
+ if (this.rows[j][this.identifier] === id)
+ {
+ removedRows.push(this.rows[j]);
+ this.rows.splice(j, 1);
+ break;
+ }
}
}
+
+ this.current = 1; // reset
+ loadData.call(this);
+ this.element.trigger("removed" + namespace, [removedRows]);
}
}
- if (selectedRows.length > 0)
+ return this;
+ };
+
+ /**
+ * Searches in all rows for a specific phrase (but only in visible cells).
+ * The search filter will be reseted, if no argument is provided.
+ *
+ * @method search
+ * @param [phrase] {String} The phrase to search for
+ * @chainable
+ **/
+ Grid.prototype.search = function(phrase)
+ {
+ phrase = phrase || "";
+
+ if (this.searchPhrase !== phrase)
{
- var selectBoxSelector = getCssSelector(this.options.css.selectBox),
- selectMultiSelectBox = this.selectedRows.length >= this.currentRows.length;
+ var selector = getCssSelector(this.options.css.searchField),
+ searchFields = findFooterAndHeaderItems.call(this, selector);
+ searchFields.val(phrase);
+ }
- i = 0;
- while (!this.options.keepSelection && selectMultiSelectBox && i < this.currentRows.length)
- {
- selectMultiSelectBox = ($.inArray(this.currentRows[i++][this.identifier], this.selectedRows) !== -1);
- }
- this.element.find("thead " + selectBoxSelector).prop("checked", selectMultiSelectBox);
+ executeSearch.call(this, phrase);
+
+
+ return this;
+ };
+
+ /**
+ * Selects rows by ids. Selects all visible rows if no ids are provided.
+ * In server-side scenarios only visible rows are selectable.
+ *
+ * @method select
+ * @param [rowsIds] {Array} An array of rows ids to select
+ * @chainable
+ **/
+ Grid.prototype.select = function(rowIds)
+ {
+ if (this.selection)
+ {
+ rowIds = rowIds || this.currentRows.propValues(this.identifier);
+
+ var id, i,
+ selectedRows = [];
- if (!this.options.multiSelect)
+ while (rowIds.length > 0 && !(!this.options.multiSelect && selectedRows.length === 1))
{
- this.element.find("tbody > tr " + selectBoxSelector + ":checked")
- .trigger("click" + namespace);
+ id = rowIds.pop();
+ if ($.inArray(id, this.selectedRows) === -1)
+ {
+ for (i = 0; i < this.currentRows.length; i++)
+ {
+ if (this.currentRows[i][this.identifier] === id)
+ {
+ selectedRows.push(this.currentRows[i]);
+ this.selectedRows.push(id);
+ break;
+ }
+ }
+ }
}
- for (i = 0; i < this.selectedRows.length; i++)
+ if (selectedRows.length > 0)
{
- this.element.find("tbody > tr[data-row-id=\"" + this.selectedRows[i] + "\"]")
- .addClass(this.options.css.selected)._bgAria("selected", "true")
- .find(selectBoxSelector).prop("checked", true);
- }
+ var selectBoxSelector = getCssSelector(this.options.css.selectBox),
+ selectMultiSelectBox = this.selectedRows.length >= this.currentRows.length;
+
+ i = 0;
+ while (!this.options.keepSelection && selectMultiSelectBox && i < this.currentRows.length)
+ {
+ selectMultiSelectBox = ($.inArray(this.currentRows[i++][this.identifier], this.selectedRows) !== -1);
+ }
+ this.element.find("thead " + selectBoxSelector).prop("checked", selectMultiSelectBox);
+
+ if (!this.options.multiSelect)
+ {
+ this.element.find("tbody > tr " + selectBoxSelector + ":checked")
+ .trigger("click" + namespace);
+ }
- this.element.trigger("selected" + namespace, [selectedRows]);
+ for (i = 0; i < this.selectedRows.length; i++)
+ {
+ this.element.find("tbody > tr[data-row-id=\"" + this.selectedRows[i] + "\"]")
+ .addClass(this.options.css.selected)._bgAria("selected", "true")
+ .find(selectBoxSelector).prop("checked", true);
+ }
+
+ this.element.trigger("selected" + namespace, [selectedRows]);
+ }
}
- }
- return this;
-};
-
-/**
- * Deselects rows by ids. Deselects all visible rows if no ids are provided.
- * In server-side scenarios only visible rows are deselectable.
- *
- * @method deselect
- * @param [rowsIds] {Array} An array of rows ids to deselect
- * @chainable
- **/
-Grid.prototype.deselect = function(rowIds)
-{
- if (this.selection)
+ return this;
+ };
+
+ /**
+ * Deselects rows by ids. Deselects all visible rows if no ids are provided.
+ * In server-side scenarios only visible rows are deselectable.
+ *
+ * @method deselect
+ * @param [rowsIds] {Array} An array of rows ids to deselect
+ * @chainable
+ **/
+ Grid.prototype.deselect = function(rowIds)
{
- rowIds = rowIds || this.currentRows.propValues(this.identifier);
+ if (this.selection)
+ {
+ rowIds = rowIds || this.currentRows.propValues(this.identifier);
- var id, i, pos,
- deselectedRows = [];
+ var id, i, pos,
+ deselectedRows = [];
- while (rowIds.length > 0)
- {
- id = rowIds.pop();
- pos = $.inArray(id, this.selectedRows);
- if (pos !== -1)
+ while (rowIds.length > 0)
{
- for (i = 0; i < this.currentRows.length; i++)
+ id = rowIds.pop();
+ pos = $.inArray(id, this.selectedRows);
+ if (pos !== -1)
{
- if (this.currentRows[i][this.identifier] === id)
+ for (i = 0; i < this.currentRows.length; i++)
{
- deselectedRows.push(this.currentRows[i]);
- this.selectedRows.splice(pos, 1);
- break;
+ if (this.currentRows[i][this.identifier] === id)
+ {
+ deselectedRows.push(this.currentRows[i]);
+ this.selectedRows.splice(pos, 1);
+ break;
+ }
}
}
}
- }
-
- if (deselectedRows.length > 0)
- {
- var selectBoxSelector = getCssSelector(this.options.css.selectBox);
- this.element.find("thead " + selectBoxSelector).prop("checked", false);
- for (i = 0; i < deselectedRows.length; i++)
+ if (deselectedRows.length > 0)
{
- this.element.find("tbody > tr[data-row-id=\"" + deselectedRows[i][this.identifier] + "\"]")
- .removeClass(this.options.css.selected)._bgAria("selected", "false")
- .find(selectBoxSelector).prop("checked", false);
- }
+ var selectBoxSelector = getCssSelector(this.options.css.selectBox);
+
+ this.element.find("thead " + selectBoxSelector).prop("checked", false);
+ for (i = 0; i < deselectedRows.length; i++)
+ {
+ this.element.find("tbody > tr[data-row-id=\"" + deselectedRows[i][this.identifier] + "\"]")
+ .removeClass(this.options.css.selected)._bgAria("selected", "false")
+ .find(selectBoxSelector).prop("checked", false);
+ }
- this.element.trigger("deselected" + namespace, [deselectedRows]);
+ this.element.trigger("deselected" + namespace, [deselectedRows]);
+ }
}
- }
- return this;
-};
-
-/**
- * Sorts the rows by a given sort descriptor dictionary.
- * The sort filter will be reseted, if no argument is provided.
- *
- * @method sort
- * @param [dictionary] {Object} A sort descriptor dictionary that contains the sort information
- * @chainable
- **/
-Grid.prototype.sort = function(dictionary)
-{
- var values = (dictionary) ? $.extend({}, dictionary) : {};
+ return this;
+ };
- if (values === this.sortDictionary)
+ /**
+ * Sorts the rows by a given sort descriptor dictionary.
+ * The sort filter will be reseted, if no argument is provided.
+ *
+ * @method sort
+ * @param [dictionary] {Object} A sort descriptor dictionary that contains the sort information
+ * @chainable
+ **/
+ Grid.prototype.sort = function(dictionary)
{
- return this;
- }
+ var values = (dictionary) ? $.extend({}, dictionary) : {};
- this.sortDictionary = values;
- renderTableHeader.call(this);
- sortRows.call(this);
- loadData.call(this);
-
- return this;
-};
-
-/**
- * Gets a list of the column settings.
- * This method returns only for the first grid instance a value.
- * Therefore be sure that only one grid instance is catched by your selector.
- *
- * @method getColumnSettings
- * @return {Array} Returns a list of the column settings.
- * @since 1.2.0
- **/
-Grid.prototype.getColumnSettings = function()
-{
- return $.merge([], this.columns);
-};
-
-/**
- * Gets the current page index.
- * This method returns only for the first grid instance a value.
- * Therefore be sure that only one grid instance is catched by your selector.
- *
- * @method getCurrentPage
- * @return {Number} Returns the current page index.
- * @since 1.2.0
- **/
-Grid.prototype.getCurrentPage = function()
-{
- return this.current;
-};
-
-/**
- * Gets the current rows.
- * This method returns only for the first grid instance a value.
- * Therefore be sure that only one grid instance is catched by your selector.
- *
- * @method getCurrentPage
- * @return {Array} Returns the current rows.
- * @since 1.2.0
- **/
-Grid.prototype.getCurrentRows = function()
-{
- return $.merge([], this.currentRows);
-};
-
-/**
- * Gets a number represents the row count per page.
- * This method returns only for the first grid instance a value.
- * Therefore be sure that only one grid instance is catched by your selector.
- *
- * @method getRowCount
- * @return {Number} Returns the row count per page.
- * @since 1.2.0
- **/
-Grid.prototype.getRowCount = function()
-{
- return this.rowCount;
-};
-
-/**
- * Gets the actual search phrase.
- * This method returns only for the first grid instance a value.
- * Therefore be sure that only one grid instance is catched by your selector.
- *
- * @method getSearchPhrase
- * @return {String} Returns the actual search phrase.
- * @since 1.2.0
- **/
-Grid.prototype.getSearchPhrase = function()
-{
- return this.searchPhrase;
-};
-
-/**
- * Gets the complete list of currently selected rows.
- * This method returns only for the first grid instance a value.
- * Therefore be sure that only one grid instance is catched by your selector.
- *
- * @method getSelectedRows
- * @return {Array} Returns all selected rows.
- * @since 1.2.0
- **/
-Grid.prototype.getSelectedRows = function()
-{
- return $.merge([], this.selectedRows);
-};
-
-/**
- * Gets the sort dictionary which represents the state of column sorting.
- * This method returns only for the first grid instance a value.
- * Therefore be sure that only one grid instance is catched by your selector.
- *
- * @method getSortDictionary
- * @return {Object} Returns the sort dictionary.
- * @since 1.2.0
- **/
-Grid.prototype.getSortDictionary = function()
-{
- return $.extend({}, this.sortDictionary);
-};
-
-/**
- * Gets a number represents the total page count.
- * This method returns only for the first grid instance a value.
- * Therefore be sure that only one grid instance is catched by your selector.
- *
- * @method getTotalPageCount
- * @return {Number} Returns the total page count.
- * @since 1.2.0
- **/
-Grid.prototype.getTotalPageCount = function()
-{
- return this.totalPages;
-};
-
-/**
- * Gets a number represents the total row count.
- * This method returns only for the first grid instance a value.
- * Therefore be sure that only one grid instance is catched by your selector.
- *
- * @method getTotalRowCount
- * @return {Number} Returns the total row count.
- * @since 1.2.0
- **/
-Grid.prototype.getTotalRowCount = function()
-{
- return this.total;
+ if (values === this.sortDictionary)
+ {
+ return this;
+ }
+
+ this.sortDictionary = values;
+ renderTableHeader.call(this);
+ sortRows.call(this);
+ loadData.call(this);
+
+ return this;
};
-// GRID COMMON TYPE EXTENSIONS
-// ============
+ /**
+ * Gets a list of the column settings.
+ * This method returns only for the first grid instance a value.
+ * Therefore be sure that only one grid instance is catched by your selector.
+ *
+ * @method getColumnSettings
+ * @return {Array} Returns a list of the column settings.
+ * @since 1.2.0
+ **/
+ Grid.prototype.getColumnSettings = function()
+ {
+ return $.merge([], this.columns);
+ };
-$.fn.extend({
- _bgAria: function (name, value)
+ /**
+ * Gets the current page index.
+ * This method returns only for the first grid instance a value.
+ * Therefore be sure that only one grid instance is catched by your selector.
+ *
+ * @method getCurrentPage
+ * @return {Number} Returns the current page index.
+ * @since 1.2.0
+ **/
+ Grid.prototype.getCurrentPage = function()
{
- return (value) ? this.attr("aria-" + name, value) : this.attr("aria-" + name);
- },
+ return this.current;
+ };
- _bgBusyAria: function(busy)
+ /**
+ * Gets the current rows.
+ * This method returns only for the first grid instance a value.
+ * Therefore be sure that only one grid instance is catched by your selector.
+ *
+ * @method getCurrentPage
+ * @return {Array} Returns the current rows.
+ * @since 1.2.0
+ **/
+ Grid.prototype.getCurrentRows = function()
{
- return (busy == null || busy) ?
- this._bgAria("busy", "true") :
- this._bgAria("busy", "false");
- },
+ return $.merge([], this.currentRows);
+ };
- _bgRemoveAria: function (name)
+ /**
+ * Gets a number represents the row count per page.
+ * This method returns only for the first grid instance a value.
+ * Therefore be sure that only one grid instance is catched by your selector.
+ *
+ * @method getRowCount
+ * @return {Number} Returns the row count per page.
+ * @since 1.2.0
+ **/
+ Grid.prototype.getRowCount = function()
{
- return this.removeAttr("aria-" + name);
- },
+ return this.rowCount;
+ };
- _bgEnableAria: function (enable)
+ /**
+ * Gets the actual search phrase.
+ * This method returns only for the first grid instance a value.
+ * Therefore be sure that only one grid instance is catched by your selector.
+ *
+ * @method getSearchPhrase
+ * @return {String} Returns the actual search phrase.
+ * @since 1.2.0
+ **/
+ Grid.prototype.getSearchPhrase = function()
{
- return (enable == null || enable) ?
- this.removeClass("disabled")._bgAria("disabled", "false") :
- this.addClass("disabled")._bgAria("disabled", "true");
- },
+ return this.searchPhrase;
+ };
- _bgEnableField: function (enable)
+ /**
+ * Gets the complete list of currently selected rows.
+ * This method returns only for the first grid instance a value.
+ * Therefore be sure that only one grid instance is catched by your selector.
+ *
+ * @method getSelectedRows
+ * @return {Array} Returns all selected rows.
+ * @since 1.2.0
+ **/
+ Grid.prototype.getSelectedRows = function()
{
- return (enable == null || enable) ?
- this.removeAttr("disabled") :
- this.attr("disabled", "disable");
- },
+ return $.merge([], this.selectedRows);
+ };
- _bgShowAria: function (show)
+ /**
+ * Gets the sort dictionary which represents the state of column sorting.
+ * This method returns only for the first grid instance a value.
+ * Therefore be sure that only one grid instance is catched by your selector.
+ *
+ * @method getSortDictionary
+ * @return {Object} Returns the sort dictionary.
+ * @since 1.2.0
+ **/
+ Grid.prototype.getSortDictionary = function()
{
- return (show == null || show) ?
- this.show()._bgAria("hidden", "false") :
- this.hide()._bgAria("hidden", "true");
- },
+ return $.extend({}, this.sortDictionary);
+ };
- _bgSelectAria: function (select)
+ /**
+ * Gets a number represents the total page count.
+ * This method returns only for the first grid instance a value.
+ * Therefore be sure that only one grid instance is catched by your selector.
+ *
+ * @method getTotalPageCount
+ * @return {Number} Returns the total page count.
+ * @since 1.2.0
+ **/
+ Grid.prototype.getTotalPageCount = function()
{
- return (select == null || select) ?
- this.addClass("active")._bgAria("selected", "true") :
- this.removeClass("active")._bgAria("selected", "false");
- },
+ return this.totalPages;
+ };
- _bgId: function (id)
+ /**
+ * Gets a number represents the total row count.
+ * This method returns only for the first grid instance a value.
+ * Therefore be sure that only one grid instance is catched by your selector.
+ *
+ * @method getTotalRowCount
+ * @return {Number} Returns the total row count.
+ * @since 1.2.0
+ **/
+ Grid.prototype.getTotalRowCount = function()
{
- return (id) ? this.attr("id", id) : this.attr("id");
- }
-});
+ return this.total;
+ };
-if (!String.prototype.resolve)
-{
- var formatter = {
- "checked": function(value)
+ // GRID COMMON TYPE EXTENSIONS
+ // ============
+
+ $.fn.extend({
+ _bgAria: function (name, value)
{
- if (typeof value === "boolean")
- {
- return (value) ? "checked=\"checked\"" : "";
- }
- return value;
+ return (value) ? this.attr("aria-" + name, value) : this.attr("aria-" + name);
+ },
+
+ _bgBusyAria: function(busy)
+ {
+ return (busy == null || busy) ?
+ this._bgAria("busy", "true") :
+ this._bgAria("busy", "false");
+ },
+
+ _bgRemoveAria: function (name)
+ {
+ return this.removeAttr("aria-" + name);
+ },
+
+ _bgEnableAria: function (enable)
+ {
+ return (enable == null || enable) ?
+ this.removeClass("disabled")._bgAria("disabled", "false") :
+ this.addClass("disabled")._bgAria("disabled", "true");
+ },
+
+ _bgEnableField: function (enable)
+ {
+ return (enable == null || enable) ?
+ this.removeAttr("disabled") :
+ this.attr("disabled", "disable");
+ },
+
+ _bgShowAria: function (show)
+ {
+ return (show == null || show) ?
+ this.show()._bgAria("hidden", "false") :
+ this.hide()._bgAria("hidden", "true");
+ },
+
+ _bgSelectAria: function (select)
+ {
+ return (select == null || select) ?
+ this.addClass("active")._bgAria("selected", "true") :
+ this.removeClass("active")._bgAria("selected", "false");
+ },
+
+ _bgId: function (id)
+ {
+ return (id) ? this.attr("id", id) : this.attr("id");
}
- };
+ });
- String.prototype.resolve = function (substitutes, prefixes)
+ if (!String.prototype.resolve)
{
- var result = this;
- $.each(substitutes, function (key, value)
- {
- if (value != null && typeof value !== "function")
+ var formatter = {
+ "checked": function(value)
{
- if (typeof value === "object")
+ if (typeof value === "boolean")
{
- var keys = (prefixes) ? $.extend([], prefixes) : [];
- keys.push(key);
- result = result.resolve(value, keys) + "";
+ return (value) ? "checked=\"checked\"" : "";
}
- else
+ return value;
+ }
+ };
+
+ String.prototype.resolve = function (substitutes, prefixes)
+ {
+ var result = this;
+ $.each(substitutes, function (key, value)
+ {
+ if (value != null && typeof value !== "function")
{
- if (formatter && formatter[key] && typeof formatter[key] === "function")
+ if (typeof value === "object")
{
- value = formatter[key](value);
+ var keys = (prefixes) ? $.extend([], prefixes) : [];
+ keys.push(key);
+ result = result.resolve(value, keys) + "";
+ }
+ else
+ {
+ if (formatter && formatter[key] && typeof formatter[key] === "function")
+ {
+ value = formatter[key](value);
+ }
+ key = (prefixes) ? prefixes.join(".") + "." + key : key;
+ var pattern = new RegExp("\\{\\{" + key + "\\}\\}", "gm");
+ result = result.replace(pattern, (value.replace) ? value.replace(/\$/gi, "$") : value);
}
- key = (prefixes) ? prefixes.join(".") + "." + key : key;
- var pattern = new RegExp("\\{\\{" + key + "\\}\\}", "gm");
- result = result.replace(pattern, (value.replace) ? value.replace(/\$/gi, "$") : value);
}
- }
- });
- return result;
- };
-}
+ });
+ return result;
+ };
+ }
-if (!Array.prototype.first)
-{
- Array.prototype.first = function (condition)
+ if (!Array.prototype.first)
{
- for (var i = 0; i < this.length; i++)
+ Array.prototype.first = function (condition)
{
- var item = this[i];
- if (condition(item))
+ for (var i = 0; i < this.length; i++)
{
- return item;
+ var item = this[i];
+ if (condition(item))
+ {
+ return item;
+ }
}
- }
- return null;
- };
-}
+ return null;
+ };
+ }
-if (!Array.prototype.contains)
-{
- Array.prototype.contains = function (condition)
+ if (!Array.prototype.contains)
{
- for (var i = 0; i < this.length; i++)
+ Array.prototype.contains = function (condition)
{
- var item = this[i];
- if (condition(item))
+ for (var i = 0; i < this.length; i++)
{
- return true;
+ var item = this[i];
+ if (condition(item))
+ {
+ return true;
+ }
}
- }
- return false;
- };
-}
+ return false;
+ };
+ }
-if (!Array.prototype.page)
-{
- Array.prototype.page = function (page, size)
+ if (!Array.prototype.page)
{
- var skip = (page - 1) * size,
- end = skip + size;
- return (this.length > skip) ?
- (this.length > end) ? this.slice(skip, end) :
- this.slice(skip) : [];
- };
-}
+ Array.prototype.page = function (page, size)
+ {
+ var skip = (page - 1) * size,
+ end = skip + size;
+ return (this.length > skip) ?
+ (this.length > end) ? this.slice(skip, end) :
+ this.slice(skip) : [];
+ };
+ }
-if (!Array.prototype.where)
-{
- Array.prototype.where = function (condition)
+ if (!Array.prototype.where)
{
- var result = [];
- for (var i = 0; i < this.length; i++)
+ Array.prototype.where = function (condition)
{
- var item = this[i];
- if (condition(item))
+ var result = [];
+ for (var i = 0; i < this.length; i++)
{
- result.push(item);
+ var item = this[i];
+ if (condition(item))
+ {
+ result.push(item);
+ }
}
- }
- return result;
- };
-}
+ return result;
+ };
+ }
-if (!Array.prototype.propValues)
-{
- Array.prototype.propValues = function (propName)
+ if (!Array.prototype.propValues)
{
- var result = [];
- for (var i = 0; i < this.length; i++)
+ Array.prototype.propValues = function (propName)
{
- result.push(this[i][propName]);
- }
- return result;
- };
+ var result = [];
+ for (var i = 0; i < this.length; i++)
+ {
+ result.push(this[i][propName]);
+ }
+ return result;
+ };
}
-// GRID PLUGIN DEFINITION
-// =====================
-
-var old = $.fn.bootgrid;
+ // GRID PLUGIN DEFINITION
+ // =====================
-$.fn.bootgrid = function (option)
-{
- var args = Array.prototype.slice.call(arguments, 1),
- returnValue = null,
- elements = this.each(function (index)
- {
- var $this = $(this),
- instance = $this.data(namespace),
- options = typeof option === "object" && option;
+ var old = $.fn.bootgrid;
- if (!instance && option === "destroy")
- {
- return;
- }
- if (!instance)
- {
- $this.data(namespace, (instance = new Grid(this, options)));
- init.call(instance);
- }
- if (typeof option === "string")
+ $.fn.bootgrid = function (option)
+ {
+ var args = Array.prototype.slice.call(arguments, 1),
+ returnValue = null,
+ elements = this.each(function (index)
{
- if (option.indexOf("get") === 0 && index === 0)
+ var $this = $(this),
+ instance = $this.data(namespace),
+ options = typeof option === "object" && option;
+
+ if (!instance && option === "destroy")
{
- returnValue = instance[option].apply(instance, args);
+ return;
}
- else if (option.indexOf("get") !== 0)
+ if (!instance)
{
- return instance[option].apply(instance, args);
+ $this.data(namespace, (instance = new Grid(this, options)));
+ init.call(instance);
}
- }
- });
- return (typeof option === "string" && option.indexOf("get") === 0) ? returnValue : elements;
-};
+ if (typeof option === "string")
+ {
+ if (option.indexOf("get") === 0 && index === 0)
+ {
+ returnValue = instance[option].apply(instance, args);
+ }
+ else if (option.indexOf("get") !== 0)
+ {
+ return instance[option].apply(instance, args);
+ }
+ }
+ });
+ return (typeof option === "string" && option.indexOf("get") === 0) ? returnValue : elements;
+ };
-$.fn.bootgrid.Constructor = Grid;
+ $.fn.bootgrid.Constructor = Grid;
-// GRID NO CONFLICT
-// ===============
+ // GRID NO CONFLICT
+ // ===============
-$.fn.bootgrid.noConflict = function ()
-{
- $.fn.bootgrid = old;
- return this;
-};
+ $.fn.bootgrid.noConflict = function ()
+ {
+ $.fn.bootgrid = old;
+ return this;
+ };
-// GRID DATA-API
-// ============
+ // GRID DATA-API
+ // ============
$("[data-toggle=\"bootgrid\"]").bootgrid();
-})(jQuery, window);
\ No newline at end of file
+})(jQuery, window);
diff --git a/dist/jquery.bootgrid.min.css b/dist/jquery.bootgrid.min.css
index 706ed21..2ba53f0 100644
--- a/dist/jquery.bootgrid.min.css
+++ b/dist/jquery.bootgrid.min.css
@@ -1,5 +1,5 @@
-/*!
- * 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)
+/*!
+ * jQuery Bootgrid v1.4.1 - 03/05/2023
+ * Copyright © 2014-2015 Rafael J. Staib; Copyright © 2018-2023 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 21dd490..3b8900f 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 n=this,t=this.element.find("thead > 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:'',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 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=parseInt(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),S.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(m.call(this,{id:this.element._bgId()+"-header"}))),e.before(this.header));2&this.options.navigation&&(this.footer=p(t.footer.resolve(m.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=v(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=v(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=v(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=v(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(m.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(m.call(l,{type:"checkbox",value:"all"})):"";h+=c.rawHeaderCell.resolve(m.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(m.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,resetButton:!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",iconReset:"glyphicon-random",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",reset:"Reset stored settings and reload the page",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:'',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),S.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 D={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{D&&D[t]&&"function"==typeof D[t]&&(e=D[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;itrue
Nice, sleek and intuitive. A grid control especially designed for bootstrap.
Nice, sleek and intuitive. A grid control especially designed for bootstrap.
- Copyright © 2014-2015, Rafael Staib; Copyright © 2018, Deciso B.V.
+ Copyright © 2014-2015, Rafael Staib; Copyright © 2018-2023, Deciso B.V.
jQuery, Grid, Table, Bootstrap, Accessibility, HTML5, Sorting, Filtering, UI
diff --git a/package-lock.json b/package-lock.json
index e85682e..6449dfa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "jquery-bootgrid",
- "version": "1.3.5",
+ "version": "1.4.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -82,12 +82,12 @@
},
"dependencies": {
"async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "lodash": "^4.17.14"
}
}
}
@@ -166,12 +166,6 @@
"integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
"dev": true
},
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
- "dev": true
- },
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -190,13 +184,6 @@
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
},
- "asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
- "dev": true,
- "optional": true
- },
"asn1": {
"version": "0.1.11",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
@@ -218,9 +205,9 @@
"dev": true
},
"async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
+ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
"dev": true
},
"async-limiter": {
@@ -242,13 +229,6 @@
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true
},
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true,
- "optional": true
- },
"aws4": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
@@ -317,8 +297,7 @@
},
"kind-of": {
"version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "resolved": "",
"dev": true
}
}
@@ -340,9 +319,9 @@
}
},
"bl": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
- "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
+ "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
"dev": true,
"requires": {
"readable-stream": "^2.3.5",
@@ -399,9 +378,9 @@
}
},
"bootstrap": {
- "version": "3.3.7",
- "resolved": "http://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz",
- "integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E="
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz",
+ "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA=="
},
"brace-expansion": {
"version": "1.1.11",
@@ -486,12 +465,6 @@
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"dev": true
},
- "builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
- "dev": true
- },
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -515,22 +488,6 @@
"unset-value": "^1.0.0"
}
},
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "dev": true,
- "requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- }
- },
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
@@ -645,12 +602,6 @@
"dev": true,
"optional": true
},
- "coffeescript": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz",
- "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=",
- "dev": true
- },
"collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -679,7 +630,7 @@
"colors": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==",
"dev": true
},
"combined-stream": {
@@ -806,6 +757,15 @@
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
"dev": true
},
+ "copy-anything": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
+ "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
+ "dev": true,
+ "requires": {
+ "is-what": "^3.14.1"
+ }
+ },
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
@@ -864,22 +824,6 @@
"dev": true,
"optional": true
},
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "dev": true,
- "requires": {
- "array-find-index": "^1.0.1"
- }
- },
- "cycle": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
- "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
- "dev": true,
- "optional": true
- },
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -906,14 +850,10 @@
"dev": true
},
"dateformat": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
- "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
- "dev": true,
- "requires": {
- "get-stdin": "^4.0.1",
- "meow": "^3.3.0"
- }
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true
},
"debug": {
"version": "2.6.9",
@@ -924,12 +864,6 @@
"ms": "2.0.0"
}
},
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
@@ -993,9 +927,9 @@
}
},
"kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
}
}
@@ -1142,15 +1076,6 @@
"prr": "~1.0.1"
}
},
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
"es6-promise": {
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
@@ -1179,9 +1104,9 @@
"dev": true
},
"esprima": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
"etag": {
@@ -1193,7 +1118,7 @@
"eventemitter2": {
"version": "0.4.14",
"resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
- "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
+ "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==",
"dev": true
},
"exit": {
@@ -1392,8 +1317,7 @@
},
"kind-of": {
"version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "resolved": "",
"dev": true
}
}
@@ -1418,6 +1342,15 @@
"requires": {
"ms": "2.0.0"
}
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
}
}
},
@@ -1428,13 +1361,6 @@
"dev": true,
"optional": true
},
- "eyes": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
- "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
- "dev": true,
- "optional": true
- },
"fast-deep-equal": {
"version": "1.1.0",
"resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
@@ -1506,14 +1432,28 @@
"unpipe": "~1.0.0"
}
},
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "findup-sync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==",
"dev": true,
"requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "glob": "~5.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
}
},
"fined": {
@@ -1556,37 +1496,6 @@
"integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=",
"dev": true
},
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- },
- "dependencies": {
- "combined-stream": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
- "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
- "dev": true,
- "optional": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true,
- "optional": true
- }
- }
- },
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@@ -1614,27 +1523,6 @@
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
"dev": true
},
- "fs-extra": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
- "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
- "dev": true,
- "optional": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "4.1.15",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
- "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
- "dev": true,
- "optional": true
- }
- }
- },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -1642,9 +1530,9 @@
"dev": true
},
"fstream": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+ "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
"dev": true,
"optional": true,
"requires": {
@@ -1652,17 +1540,14 @@
"inherits": "~2.0.0",
"mkdirp": ">=0.5 0",
"rimraf": "2"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "4.1.15",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
- "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
- "dev": true,
- "optional": true
- }
}
},
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
@@ -1699,12 +1584,6 @@
}
}
},
- "get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
- "dev": true
- },
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
@@ -1712,9 +1591,9 @@
"dev": true
},
"getobject": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
- "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz",
+ "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==",
"dev": true
},
"getpass": {
@@ -1792,107 +1671,103 @@
"which": "^1.2.14"
}
},
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "dev": true,
+ "optional": true
+ },
"grunt": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.3.tgz",
- "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz",
+ "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==",
"dev": true,
"requires": {
- "coffeescript": "~1.10.0",
- "dateformat": "~1.0.12",
+ "dateformat": "~3.0.3",
"eventemitter2": "~0.4.13",
- "exit": "~0.1.1",
+ "exit": "~0.1.2",
"findup-sync": "~0.3.0",
- "glob": "~7.0.0",
- "grunt-cli": "~1.2.0",
- "grunt-known-options": "~1.1.0",
- "grunt-legacy-log": "~2.0.0",
- "grunt-legacy-util": "~1.1.1",
+ "glob": "~7.1.6",
+ "grunt-cli": "~1.4.3",
+ "grunt-known-options": "~2.0.0",
+ "grunt-legacy-log": "~3.0.0",
+ "grunt-legacy-util": "~2.0.1",
"iconv-lite": "~0.4.13",
- "js-yaml": "~3.5.2",
- "minimatch": "~3.0.2",
- "mkdirp": "~0.5.1",
+ "js-yaml": "~3.14.0",
+ "minimatch": "~3.0.4",
+ "mkdirp": "~1.0.4",
"nopt": "~3.0.6",
- "path-is-absolute": "~1.0.0",
- "rimraf": "~2.6.2"
+ "rimraf": "~3.0.2"
},
"dependencies": {
- "findup-sync": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
- "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "grunt-cli": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz",
+ "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==",
"dev": true,
"requires": {
- "glob": "~5.0.0"
+ "grunt-known-options": "~2.0.0",
+ "interpret": "~1.1.0",
+ "liftup": "~3.0.1",
+ "nopt": "~4.0.1",
+ "v8flags": "~3.2.0"
},
"dependencies": {
- "glob": {
- "version": "5.0.15",
- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "nopt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
+ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
"dev": true,
"requires": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "2 || 3",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "abbrev": "1",
+ "osenv": "^0.1.4"
}
}
}
},
- "grunt-cli": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
- "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
- "dev": true,
- "requires": {
- "findup-sync": "~0.3.0",
- "grunt-known-options": "~1.1.0",
- "nopt": "~3.0.6",
- "resolve": "~1.1.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
+ "grunt-known-options": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz",
+ "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==",
+ "dev": true
},
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
},
- "nopt": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
- "abbrev": "1"
+ "glob": "^7.1.3"
}
},
- "resolve": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
- "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
- "dev": true
- },
- "rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "v8flags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+ "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
"dev": true,
"requires": {
- "glob": "^7.0.5"
+ "homedir-polyfill": "^1.0.1"
}
}
}
@@ -1933,12 +1808,12 @@
},
"dependencies": {
"async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "lodash": "^4.17.14"
}
},
"rimraf": {
@@ -2217,12 +2092,12 @@
"dev": true
},
"async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "lodash": "^4.17.14"
}
},
"chalk": {
@@ -2293,71 +2168,102 @@
"dev": true
},
"grunt-legacy-log": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz",
- "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz",
+ "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==",
"dev": true,
"requires": {
"colors": "~1.1.2",
- "grunt-legacy-log-utils": "~2.0.0",
+ "grunt-legacy-log-utils": "~2.1.0",
"hooker": "~0.2.3",
- "lodash": "~4.17.5"
+ "lodash": "~4.17.19"
}
},
"grunt-legacy-log-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz",
- "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz",
+ "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==",
"dev": true,
"requires": {
- "chalk": "~2.4.1",
- "lodash": "~4.17.10"
+ "chalk": "~4.1.0",
+ "lodash": "~4.17.19"
},
"dependencies": {
"ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "^2.0.1"
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "color-name": "~1.1.4"
}
},
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
"supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "^4.0.0"
}
}
}
},
"grunt-legacy-util": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz",
- "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz",
+ "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==",
"dev": true,
"requires": {
- "async": "~1.5.2",
- "exit": "~0.1.1",
- "getobject": "~0.1.0",
+ "async": "~3.2.0",
+ "exit": "~0.1.2",
+ "getobject": "~1.0.0",
"hooker": "~0.2.3",
- "lodash": "~4.17.10",
- "underscore.string": "~3.3.4",
- "which": "~1.3.0"
+ "lodash": "~4.17.21",
+ "underscore.string": "~3.3.5",
+ "which": "~2.0.2"
+ },
+ "dependencies": {
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
}
},
"grunt-nuget": {
@@ -2399,6 +2305,15 @@
"har-schema": "^2.0.0"
}
},
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
@@ -2453,17 +2368,6 @@
}
}
},
- "hasha": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
- "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-stream": "^1.0.1",
- "pinkie-promise": "^2.0.0"
- }
- },
"hawk": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz",
@@ -2499,12 +2403,6 @@
"integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
"dev": true
},
- "hosted-git-info": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
- "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
- "dev": true
- },
"htmlparser2": {
"version": "3.8.3",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
@@ -2544,18 +2442,6 @@
"statuses": ">= 1.4.0 < 2"
}
},
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
"https-proxy-agent": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
@@ -2583,6 +2469,15 @@
}
}
},
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
"ieee754": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
@@ -2609,15 +2504,6 @@
"dev": true,
"optional": true
},
- "indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dev": true,
- "requires": {
- "repeating": "^2.0.0"
- }
- },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -2635,9 +2521,9 @@
"dev": true
},
"ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
"interpret": {
@@ -2671,25 +2557,19 @@
"kind-of": "^3.0.2"
}
},
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
- "is-builtin-module": {
- "version": "1.0.0",
- "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "is-core-module": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
+ "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
"dev": true,
"requires": {
- "builtin-modules": "^1.0.0"
+ "has": "^1.0.3"
}
},
"is-data-descriptor": {
@@ -2732,15 +2612,6 @@
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
- "is-finite": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
- "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
"is-fullwidth-code-point": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
@@ -2787,13 +2658,6 @@
"is-unc-path": "^1.0.0"
}
},
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true,
- "optional": true
- },
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -2810,10 +2674,10 @@
"unc-path-regex": "^0.1.2"
}
},
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "is-what": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
+ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
"dev": true
},
"is-windows": {
@@ -2848,18 +2712,18 @@
"optional": true
},
"jquery": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
- "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg=="
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
+ "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
},
"js-yaml": {
- "version": "3.5.5",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz",
- "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=",
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
- "argparse": "^1.0.2",
- "esprima": "^2.6.0"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
}
},
"jsbn": {
@@ -2870,9 +2734,9 @@
"optional": true
},
"jshint": {
- "version": "2.9.6",
- "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.6.tgz",
- "integrity": "sha512-KO9SIAKTlJQOM4lE64GQUtGBRpTOuvbrRrSZw3AhUxMNG266nX9hK2cKA4SBhXOj0irJGyNyGSLT62HGOVDEOA==",
+ "version": "2.9.7",
+ "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.7.tgz",
+ "integrity": "sha512-Q8XN38hGsVQhdlM+4gd1Xl7OB1VieSuCJf+fEJjpo59JH99bVJhXRXAh26qQ15wfdd1VPMuDWNeSWoNl53T4YA==",
"dev": true,
"requires": {
"cli": "~1.0.0",
@@ -2881,31 +2745,10 @@
"htmlparser2": "3.8.x",
"lodash": "~4.17.10",
"minimatch": "~3.0.2",
- "phantom": "~4.0.1",
- "phantomjs-prebuilt": "~2.1.7",
"shelljs": "0.3.x",
- "strip-json-comments": "1.0.x",
- "unicode-5.2.0": "^0.7.5"
- },
- "dependencies": {
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
+ "strip-json-comments": "1.0.x"
}
},
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true,
- "optional": true
- },
"json-schema-traverse": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
@@ -2919,54 +2762,28 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "dev": true,
- "optional": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "4.1.15",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
- "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
- "dev": true,
- "optional": true
- }
- }
- },
"jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"dev": true,
"optional": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
- "json-schema": "0.2.3",
+ "json-schema": "0.4.0",
"verror": "1.10.0"
},
"dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
"dev": true,
"optional": true
}
}
},
- "kew": {
- "version": "0.7.0",
- "resolved": "http://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
- "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
- "dev": true,
- "optional": true
- },
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@@ -2976,25 +2793,6 @@
"is-buffer": "^1.1.5"
}
},
- "klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
- "dev": true,
- "optional": true,
- "requires": {
- "graceful-fs": "^4.1.9"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "4.1.15",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
- "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
- "dev": true,
- "optional": true
- }
- }
- },
"lazystream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
@@ -3005,36 +2803,20 @@
}
},
"less": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/less/-/less-3.8.1.tgz",
- "integrity": "sha512-8HFGuWmL3FhQR0aH89escFNBQH/nEiYPP2ltDFdQw2chE28Yx2E3lhAIq9Y2saYwLSwa699s4dBVEfCY8Drf7Q==",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz",
+ "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==",
"dev": true,
"requires": {
- "clone": "^2.1.2",
+ "copy-anything": "^2.0.1",
"errno": "^0.1.1",
"graceful-fs": "^4.1.2",
"image-size": "~0.5.0",
+ "make-dir": "^2.1.0",
"mime": "^1.4.1",
- "mkdirp": "^0.5.0",
- "promise": "^7.1.1",
- "request": "^2.83.0",
- "source-map": "~0.6.0"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "4.1.15",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
- "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
- "dev": true,
- "optional": true
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "optional": true
- }
+ "native-request": "^1.0.5",
+ "source-map": "~0.6.0",
+ "tslib": "^1.10.0"
}
},
"liftoff": {
@@ -3067,6 +2849,127 @@
}
}
},
+ "liftup": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
+ "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.2",
+ "findup-sync": "^4.0.0",
+ "fined": "^1.2.0",
+ "flagged-respawn": "^1.0.1",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.1",
+ "rechoir": "^0.7.0",
+ "resolve": "^1.19.0"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "findup-sync": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
+ "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^4.0.2",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ }
+ },
+ "flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
+ "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.9.0"
+ }
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
"linkify-it": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-1.2.4.tgz",
@@ -3076,41 +2979,30 @@
"uc.micro": "^1.0.1"
}
},
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "4.1.15",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
- "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
- "dev": true
- }
- }
- },
"lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
"dev": true,
+ "optional": true,
"requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "optional": true
+ }
}
},
"make-iterator": {
@@ -3123,9 +3015,9 @@
},
"dependencies": {
"kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
}
}
@@ -3136,12 +3028,6 @@
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
"dev": true
},
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
- },
"map-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
@@ -3253,32 +3139,6 @@
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
"dev": true
},
- "meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
- "dev": true,
- "requires": {
- "camelcase-keys": "^2.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
- }
- },
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -3313,9 +3173,9 @@
},
"dependencies": {
"kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
}
}
@@ -3348,6 +3208,15 @@
"dev": true,
"optional": true
},
+ "minimatch": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
+ "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
"minimist": {
"version": "0.0.8",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
@@ -3355,9 +3224,9 @@
"dev": true
},
"mixin-deep": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
- "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"dev": true,
"requires": {
"for-in": "^1.0.2",
@@ -3376,18 +3245,28 @@
}
},
"mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
+ "optional": true,
"requires": {
- "minimist": "0.0.8"
+ "minimist": "^1.2.6"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true,
+ "optional": true
+ }
}
},
"moment": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
- "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+ "version": "2.29.4",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
+ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
},
"ms": {
"version": "2.0.0",
@@ -3422,13 +3301,20 @@
},
"dependencies": {
"kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
}
}
},
+ "native-request": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz",
+ "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==",
+ "dev": true,
+ "optional": true
+ },
"negotiator": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
@@ -3639,24 +3525,13 @@
"dev": true,
"optional": true
},
- "normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==",
"dev": true,
"requires": {
- "hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
- "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
- "dev": true
- }
+ "abbrev": "1"
}
},
"normalize-path": {
@@ -3820,313 +3695,97 @@
"parse-filepath": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
- "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
- "dev": true,
- "requires": {
- "is-absolute": "^1.0.0",
- "map-cache": "^0.2.0",
- "path-root": "^0.1.1"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "parse-passwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
- "dev": true
- },
- "parserlib": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/parserlib/-/parserlib-1.1.1.tgz",
- "integrity": "sha1-pkz6ckBiQ0/fw1HJpOwtkrlMBvQ=",
- "dev": true
- },
- "parseurl": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "path-root": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
- "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
- "dev": true,
- "requires": {
- "path-root-regex": "^0.1.0"
- }
- },
- "path-root-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
- "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
- "dev": true
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
- "dev": true
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "4.1.15",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
- "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
- "dev": true
- }
- }
- },
- "pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
- "dev": true
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true,
- "optional": true
- },
- "phantom": {
- "version": "4.0.12",
- "resolved": "https://registry.npmjs.org/phantom/-/phantom-4.0.12.tgz",
- "integrity": "sha512-Tz82XhtPmwCk1FFPmecy7yRGZG2btpzY2KI9fcoPT7zT9det0CcMyfBFPp1S8DqzsnQnm8ZYEfdy528mwVtksA==",
- "dev": true,
- "optional": true,
- "requires": {
- "phantomjs-prebuilt": "^2.1.16",
- "split": "^1.0.1",
- "winston": "^2.4.0"
- }
- },
- "phantomjs-prebuilt": {
- "version": "2.1.16",
- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
- "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
- "dev": true,
- "optional": true,
- "requires": {
- "es6-promise": "^4.0.3",
- "extract-zip": "^1.6.5",
- "fs-extra": "^1.0.0",
- "hasha": "^2.2.0",
- "kew": "^0.7.0",
- "progress": "^1.1.8",
- "request": "^2.81.0",
- "request-progress": "^2.0.1",
- "which": "^1.2.10"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true,
- "optional": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true,
- "optional": true
- },
- "combined-stream": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
- "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
- "dev": true,
- "optional": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true,
- "optional": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true,
- "optional": true
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "mime-types": {
- "version": "2.1.21",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
- "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
- "dev": true,
- "optional": true,
- "requires": {
- "mime-db": "~1.37.0"
- }
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true,
- "optional": true
- },
- "progress": {
- "version": "1.1.8",
- "resolved": "http://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
- "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
- "dev": true,
- "optional": true
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true,
- "optional": true
- },
- "request": {
- "version": "2.88.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
- "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
- "dev": true,
- "optional": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "dev": true,
- "optional": true
- }
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
}
},
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
"dev": true
},
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "parserlib": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/parserlib/-/parserlib-1.1.1.tgz",
+ "integrity": "sha1-pkz6ckBiQ0/fw1HJpOwtkrlMBvQ=",
"dev": true
},
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
"dev": true,
"requires": {
- "pinkie": "^2.0.0"
+ "path-root-regex": "^0.1.0"
}
},
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true,
+ "optional": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "optional": true
+ },
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
@@ -4165,9 +3824,9 @@
"optional": true
},
"minimist": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true,
"optional": true
},
@@ -4195,16 +3854,6 @@
"integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==",
"dev": true
},
- "promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
- "dev": true,
- "optional": true,
- "requires": {
- "asap": "~2.0.3"
- }
- },
"proxy-addr": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
@@ -4373,9 +4022,9 @@
},
"dependencies": {
"minimist": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true,
"optional": true
},
@@ -4388,27 +4037,6 @@
}
}
},
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "dev": true,
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- }
- },
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
@@ -4450,16 +4078,6 @@
"resolve": "^1.1.6"
}
},
- "redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
- "dev": true,
- "requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
- }
- },
"regex-not": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
@@ -4488,94 +4106,6 @@
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
"dev": true
},
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "dev": true,
- "requires": {
- "is-finite": "^1.0.0"
- }
- },
- "request": {
- "version": "2.88.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
- "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
- "dev": true,
- "optional": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "combined-stream": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
- "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
- "dev": true,
- "optional": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true,
- "optional": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true,
- "optional": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true,
- "optional": true
- },
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "dev": true,
- "optional": true
- }
- }
- },
- "request-progress": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
- "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
- "dev": true,
- "optional": true,
- "requires": {
- "throttleit": "^1.0.0"
- }
- },
"resolve": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
@@ -4683,9 +4213,9 @@
"optional": true
},
"set-value": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
- "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"dev": true,
"requires": {
"extend-shallow": "^2.0.1",
@@ -4697,7 +4227,7 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
@@ -4721,7 +4251,8 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"simple-concat": {
"version": "1.0.0",
@@ -4731,9 +4262,9 @@
"optional": true
},
"simple-get": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
- "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz",
+ "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==",
"dev": true,
"optional": true,
"requires": {
@@ -4844,8 +4375,7 @@
},
"kind-of": {
"version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "resolved": "",
"dev": true
}
}
@@ -4894,48 +4424,6 @@
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
"dev": true
},
- "spdx-correct": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
- "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
- "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz",
- "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==",
- "dev": true
- },
- "split": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
- "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
- "dev": true,
- "optional": true,
- "requires": {
- "through": "2"
- }
- },
"split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
@@ -4946,9 +4434,9 @@
}
},
"sprintf-js": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz",
- "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
"dev": true
},
"sshpk": {
@@ -4988,13 +4476,6 @@
}
}
},
- "stack-trace": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
- "dev": true,
- "optional": true
- },
"static-extend": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
@@ -5089,24 +4570,6 @@
}
}
},
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true,
- "requires": {
- "is-utf8": "^0.2.0"
- }
- },
- "strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "dev": true,
- "requires": {
- "get-stdin": "^4.0.1"
- }
- },
"strip-json-comments": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
@@ -5119,6 +4582,12 @@
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
},
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
"tar": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
@@ -5172,20 +4641,6 @@
"xtend": "^4.0.0"
}
},
- "throttleit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
- "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
- "dev": true,
- "optional": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true,
- "optional": true
- },
"to-buffer": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
@@ -5234,22 +4689,12 @@
"punycode": "^1.4.1"
}
},
- "trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
},
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
@@ -5296,54 +4741,25 @@
"dev": true
},
"underscore.string": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz",
- "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==",
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz",
+ "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==",
"dev": true,
"requires": {
- "sprintf-js": "^1.0.3",
+ "sprintf-js": "^1.1.1",
"util-deprecate": "^1.0.2"
}
},
- "unicode-5.2.0": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/unicode-5.2.0/-/unicode-5.2.0-0.7.5.tgz",
- "integrity": "sha512-KVGLW1Bri30x00yv4HNM8kBxoqFXr0Sbo55735nvrlsx4PYBZol3UtoWgO492fSwmsetzPEZzy73rbU8OGXJcA==",
- "dev": true
- },
"union-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
- "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
"dev": true,
"requires": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
"is-extendable": "^0.1.1",
- "set-value": "^0.4.3"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "set-value": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
- "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.1",
- "to-object-path": "^0.3.0"
- }
- }
+ "set-value": "^2.0.1"
}
},
"unpipe": {
@@ -5437,16 +4853,6 @@
"homedir-polyfill": "^1.0.1"
}
},
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -5506,37 +4912,6 @@
"string-width": "^1.0.2 || 2"
}
},
- "winston": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz",
- "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==",
- "dev": true,
- "optional": true,
- "requires": {
- "async": "~1.0.0",
- "colors": "1.0.x",
- "cycle": "1.0.x",
- "eyes": "0.1.x",
- "isstream": "0.1.x",
- "stack-trace": "0.0.x"
- },
- "dependencies": {
- "async": {
- "version": "1.0.0",
- "resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz",
- "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
- "dev": true,
- "optional": true
- },
- "colors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
- "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
- "dev": true,
- "optional": true
- }
- }
- },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/package.json b/package.json
index c2b94ef..39dc99a 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "jquery-bootgrid",
"namespace": "jquery.bootgrid",
"title": "jQuery Bootgrid",
- "version": "1.4.0",
+ "version": "1.4.1",
"description": "Nice, sleek and intuitive. A grid control especially designed for bootstrap.",
"homepage": "http://www.jquery-bootgrid.com",
"author": {
@@ -42,12 +42,12 @@
],
"license": "MIT",
"dependencies": {
- "bootstrap": "^3.3.7",
- "jquery": "^3.2.1",
- "moment": "^2.24.0"
+ "bootstrap": "^3.4.1",
+ "jquery": "^3.6.0",
+ "moment": "^2.29.4"
},
"devDependencies": {
- "grunt": "^1.0.3",
+ "grunt": "^1.5.3",
"grunt-cli": "~1.3.2",
"grunt-contrib-clean": "~2.0.0",
"grunt-contrib-compress": "~1.4.3",
diff --git a/src/extensions.js b/src/extensions.js
index cb37139..f8888ff 100644
--- a/src/extensions.js
+++ b/src/extensions.js
@@ -9,8 +9,8 @@ $.fn.extend({
_bgBusyAria: function(busy)
{
- return (busy == null || busy) ?
- this._bgAria("busy", "true") :
+ return (busy == null || busy) ?
+ this._bgAria("busy", "true") :
this._bgAria("busy", "false");
},
@@ -21,29 +21,29 @@ $.fn.extend({
_bgEnableAria: function (enable)
{
- return (enable == null || enable) ?
- this.removeClass("disabled")._bgAria("disabled", "false") :
+ return (enable == null || enable) ?
+ this.removeClass("disabled")._bgAria("disabled", "false") :
this.addClass("disabled")._bgAria("disabled", "true");
},
_bgEnableField: function (enable)
{
- return (enable == null || enable) ?
- this.removeAttr("disabled") :
+ return (enable == null || enable) ?
+ this.removeAttr("disabled") :
this.attr("disabled", "disable");
},
_bgShowAria: function (show)
{
- return (show == null || show) ?
+ return (show == null || show) ?
this.show()._bgAria("hidden", "false") :
this.hide()._bgAria("hidden", "true");
},
_bgSelectAria: function (select)
{
- return (select == null || select) ?
- this.addClass("active")._bgAria("selected", "true") :
+ return (select == null || select) ?
+ this.addClass("active")._bgAria("selected", "true") :
this.removeClass("active")._bgAria("selected", "false");
},
@@ -133,8 +133,8 @@ if (!Array.prototype.page)
{
var skip = (page - 1) * size,
end = skip + size;
- return (this.length > skip) ?
- (this.length > end) ? this.slice(skip, end) :
+ return (this.length > skip) ?
+ (this.length > end) ? this.slice(skip, end) :
this.slice(skip) : [];
};
}
diff --git a/src/internal.js b/src/internal.js
index 0cebaf7..5031be6 100644
--- a/src/internal.js
+++ b/src/internal.js
@@ -353,6 +353,26 @@ function renderActions()
actions.append(refresh);
}
+ // Reset Button
+ if (this.options.resetButton)
+ {
+ var resetIcon = tpl.icon.resolve(getParams.call(this, { iconCss: css.iconReset })),
+ reset = $(tpl.actionButton.resolve(getParams.call(this,
+ { content: resetIcon, text: this.options.labels.reset })))
+ .on("click" + namespace, function (e)
+ {
+ e.stopPropagation();
+ for (var i = 0; i < that.columns.length; i++)
+ {
+ localStorage.removeItem('sortColumns[' + that.uid + '][' + that.columns[i].id + ']');
+ localStorage.removeItem('visibleColumns[' + that.uid + '][' + that.columns[i].id + ']');
+ }
+ localStorage.removeItem('rowCount[' + that.uid + ']');
+ location.reload();
+ });
+ actions.append(reset);
+ }
+
// Row count selection
renderRowCountSelection.call(this, actions);
diff --git a/src/public.js b/src/public.js
index b5b3e88..fa0f2d1 100644
--- a/src/public.js
+++ b/src/public.js
@@ -110,6 +110,7 @@ Grid.defaults = {
highlightRows: false, // highlights new rows (find the page of the first new row)
sorting: true,
multiSort: false,
+ resetButton: false,
/**
* General search settings to configure the search field behaviour.
@@ -330,6 +331,7 @@ Grid.defaults = {
iconRefresh: "glyphicon-refresh",
iconSearch: "glyphicon-search",
iconUp: "glyphicon-chevron-up",
+ iconReset: "glyphicon-random",
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
@@ -390,6 +392,7 @@ Grid.defaults = {
loading: "Loading...",
noResults: "No results found!",
refresh: "Refresh",
+ reset: "Reset stored settings and reload the page",
search: "Search"
},