You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1376 lines
66 KiB
JavaScript
1376 lines
66 KiB
JavaScript
1 year ago
|
/*!
|
||
|
* FooTable - Awesome Responsive Tables
|
||
|
* Version : 2.0.3
|
||
|
* http://fooplugins.com/plugins/footable-jquery/
|
||
|
*
|
||
|
* Requires jQuery - http://jquery.com/
|
||
|
*
|
||
|
* Copyright 2014 Steven Usher & Brad Vincent
|
||
|
* Released under the MIT license
|
||
|
* You are free to use FooTable in commercial projects as long as this copyright header is left intact.
|
||
|
*
|
||
|
* Date: 11 Nov 2014
|
||
|
*/
|
||
|
(function (e, t) {
|
||
|
function a() {
|
||
|
var e = this;
|
||
|
e.id = null,
|
||
|
e.busy = !1,
|
||
|
e.start = function (t, a) {
|
||
|
e.busy || (e.stop(), e.id = setTimeout(function () {
|
||
|
t(),
|
||
|
e.id = null,
|
||
|
e.busy = !1
|
||
|
},
|
||
|
a), e.busy = !0)
|
||
|
},
|
||
|
e.stop = function () {
|
||
|
null !== e.id && (clearTimeout(e.id), e.id = null, e.busy = !1)
|
||
|
}
|
||
|
}
|
||
|
function i(i, o, n) {
|
||
|
var r = this;
|
||
|
r.id = n,
|
||
|
r.table = i,
|
||
|
r.options = o,
|
||
|
r.breakpoints = [],
|
||
|
r.breakpointNames = "",
|
||
|
r.columns = {},
|
||
|
r.plugins = t.footable.plugins.load(r);
|
||
|
var l = r.options,
|
||
|
d = l.classes,
|
||
|
s = l.events,
|
||
|
u = l.triggers,
|
||
|
f = 0;
|
||
|
return r.timers = {
|
||
|
resize: new a,
|
||
|
register: function (e) {
|
||
|
return r.timers[e] = new a,
|
||
|
r.timers[e]
|
||
|
}
|
||
|
},
|
||
|
r.init = function () {
|
||
|
var a = e(t),
|
||
|
i = e(r.table);
|
||
|
if (t.footable.plugins.init(r), i.hasClass(d.loaded)) return r.raise(s.alreadyInitialized),
|
||
|
undefined;
|
||
|
r.raise(s.initializing),
|
||
|
i.addClass(d.loading),
|
||
|
i.find(l.columnDataSelector).each(function () {
|
||
|
var e = r.getColumnData(this);
|
||
|
r.columns[e.index] = e
|
||
|
});
|
||
|
for (var o in l.breakpoints) r.breakpoints.push({
|
||
|
name: o,
|
||
|
width: l.breakpoints[o]
|
||
|
}),
|
||
|
r.breakpointNames += o + " ";
|
||
|
r.breakpoints.sort(function (e, t) {
|
||
|
return e.width - t.width
|
||
|
}),
|
||
|
i.unbind(u.initialize).bind(u.initialize,
|
||
|
function () {
|
||
|
i.removeData("footable_info"),
|
||
|
i.data("breakpoint", ""),
|
||
|
i.trigger(u.resize),
|
||
|
i.removeClass(d.loading),
|
||
|
i.addClass(d.loaded).addClass(d.main),
|
||
|
r.raise(s.initialized)
|
||
|
}).unbind(u.redraw).bind(u.redraw,
|
||
|
function () {
|
||
|
r.redraw()
|
||
|
}).unbind(u.resize).bind(u.resize,
|
||
|
function () {
|
||
|
r.resize()
|
||
|
}).unbind(u.expandFirstRow).bind(u.expandFirstRow,
|
||
|
function () {
|
||
|
i.find(l.toggleSelector).first().not("." + d.detailShow).trigger(u.toggleRow)
|
||
|
}).unbind(u.expandAll).bind(u.expandAll,
|
||
|
function () {
|
||
|
i.find(l.toggleSelector).not("." + d.detailShow).trigger(u.toggleRow)
|
||
|
}).unbind(u.collapseAll).bind(u.collapseAll,
|
||
|
function () {
|
||
|
i.find("." + d.detailShow).trigger(u.toggleRow)
|
||
|
}),
|
||
|
i.trigger(u.initialize),
|
||
|
a.bind("resize.footable",
|
||
|
function () {
|
||
|
r.timers.resize.stop(),
|
||
|
r.timers.resize.start(function () {
|
||
|
r.raise(u.resize)
|
||
|
},
|
||
|
l.delay)
|
||
|
})
|
||
|
},
|
||
|
r.addRowToggle = function () {
|
||
|
if (l.addRowToggle) {
|
||
|
var t = e(r.table),
|
||
|
a = !1;
|
||
|
t.find("span." + d.toggle).remove();
|
||
|
for (var i in r.columns) {
|
||
|
var o = r.columns[i];
|
||
|
if (o.toggle) {
|
||
|
a = !0;
|
||
|
var n = "> tbody > tr:not(." + d.detail + ",." + d.disabled + ") > td:nth-child(" + (parseInt(o.index, 10) + 1) + ")," + "> tbody > tr:not(." + d.detail + ",." + d.disabled + ") > th:nth-child(" + (parseInt(o.index, 10) + 1) + ")";
|
||
|
return t.find(n).not("." + d.detailCell).prepend(e(l.toggleHTMLElement).addClass(d.toggle)),
|
||
|
undefined
|
||
|
}
|
||
|
}
|
||
|
a || t.find("> tbody > tr:not(." + d.detail + ",." + d.disabled + ") > td:first-child").add("> tbody > tr:not(." + d.detail + ",." + d.disabled + ") > th:first-child").not("." + d.detailCell).prepend(e(l.toggleHTMLElement).addClass(d.toggle))
|
||
|
}
|
||
|
},
|
||
|
r.setColumnClasses = function () {
|
||
|
var t = e(r.table);
|
||
|
for (var a in r.columns) {
|
||
|
var i = r.columns[a];
|
||
|
if (null !== i.className) {
|
||
|
var o = "",
|
||
|
n = !0;
|
||
|
e.each(i.matches,
|
||
|
function (e, t) {
|
||
|
n || (o += ", "),
|
||
|
o += "> tbody > tr:not(." + d.detail + ") > td:nth-child(" + (parseInt(t, 10) + 1) + ")",
|
||
|
n = !1
|
||
|
}),
|
||
|
t.find(o).not("." + d.detailCell).addClass(i.className)
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
r.bindToggleSelectors = function () {
|
||
|
var t = e(r.table);
|
||
|
r.hasAnyBreakpointColumn() && (t.find(l.toggleSelector).unbind(u.toggleRow).bind(u.toggleRow,
|
||
|
function () {
|
||
|
var t = e(this).is("tr") ? e(this) : e(this).parents("tr:first");
|
||
|
r.toggleDetail(t)
|
||
|
}), t.find(l.toggleSelector).unbind("click.footable").bind("click.footable",
|
||
|
function (a) {
|
||
|
t.is(".breakpoint") && e(a.target).is("td,th,." + d.toggle) && e(this).trigger(u.toggleRow)
|
||
|
}))
|
||
|
},
|
||
|
r.parse = function (e, t) {
|
||
|
var a = l.parsers[t.type] || l.parsers.alpha;
|
||
|
return a(e)
|
||
|
},
|
||
|
r.getColumnData = function (t) {
|
||
|
var a = e(t),
|
||
|
i = a.data("hide"),
|
||
|
o = a.index();
|
||
|
i = i || "",
|
||
|
i = jQuery.map(i.split(","),
|
||
|
function (e) {
|
||
|
return jQuery.trim(e)
|
||
|
});
|
||
|
var n = {
|
||
|
index: o,
|
||
|
hide: {},
|
||
|
type: a.data("type") || "alpha",
|
||
|
name: a.data("name") || e.trim(a.text()),
|
||
|
ignore: a.data("ignore") || !1,
|
||
|
toggle: a.data("toggle") || !1,
|
||
|
className: a.data("class") || null,
|
||
|
matches: [],
|
||
|
names: {},
|
||
|
group: a.data("group") || null,
|
||
|
groupName: null,
|
||
|
isEditable: a.data("editable")
|
||
|
};
|
||
|
if (null !== n.group) {
|
||
|
var d = e(r.table).find('> thead > tr.footable-group-row > th[data-group="' + n.group + '"], > thead > tr.footable-group-row > td[data-group="' + n.group + '"]').first();
|
||
|
n.groupName = r.parse(d, {
|
||
|
type: "alpha"
|
||
|
})
|
||
|
}
|
||
|
var u = parseInt(a.prev().attr("colspan") || 0, 10);
|
||
|
f += u > 1 ? u - 1 : 0;
|
||
|
var p = parseInt(a.attr("colspan") || 0, 10),
|
||
|
c = n.index + f;
|
||
|
if (p > 1) {
|
||
|
var b = a.data("names");
|
||
|
b = b || "",
|
||
|
b = b.split(",");
|
||
|
for (var g = 0; p > g; g++) n.matches.push(g + c),
|
||
|
b.length > g && (n.names[g + c] = b[g])
|
||
|
} else n.matches.push(c);
|
||
|
n.hide["default"] = "all" === a.data("hide") || e.inArray("default", i) >= 0;
|
||
|
var h = !1;
|
||
|
for (var m in l.breakpoints) n.hide[m] = "all" === a.data("hide") || e.inArray(m, i) >= 0,
|
||
|
h = h || n.hide[m];
|
||
|
n.hasBreakpoint = h;
|
||
|
var v = r.raise(s.columnData, {
|
||
|
column: {
|
||
|
data: n,
|
||
|
th: t
|
||
|
}
|
||
|
});
|
||
|
return v.column.data
|
||
|
},
|
||
|
r.getViewportWidth = function () {
|
||
|
return window.innerWidth || (document.body ? document.body.offsetWidth : 0)
|
||
|
},
|
||
|
r.calculateWidth = function (e, t) {
|
||
|
return jQuery.isFunction(l.calculateWidthOverride) ? l.calculateWidthOverride(e, t) : (t.viewportWidth < t.width && (t.width = t.viewportWidth), t.parentWidth < t.width && (t.width = t.parentWidth), t)
|
||
|
},
|
||
|
r.hasBreakpointColumn = function (e) {
|
||
|
for (var t in r.columns) if (r.columns[t].hide[e]) {
|
||
|
if (r.columns[t].ignore) continue;
|
||
|
return !0
|
||
|
}
|
||
|
return !1
|
||
|
},
|
||
|
r.hasAnyBreakpointColumn = function () {
|
||
|
for (var e in r.columns) if (r.columns[e].hasBreakpoint) return !0;
|
||
|
return !1
|
||
|
},
|
||
|
r.resize = function () {
|
||
|
var t = e(r.table);
|
||
|
if (t.is(":visible")) {
|
||
|
if (!r.hasAnyBreakpointColumn()) return t.trigger(u.redraw),
|
||
|
undefined;
|
||
|
var a = {
|
||
|
width: t.width(),
|
||
|
viewportWidth: r.getViewportWidth(),
|
||
|
parentWidth: t.parent().width()
|
||
|
};
|
||
|
a = r.calculateWidth(t, a);
|
||
|
var i = t.data("footable_info");
|
||
|
if (t.data("footable_info", a), r.raise(s.resizing, {
|
||
|
old: i,
|
||
|
info: a
|
||
|
}), !i || i && i.width && i.width !== a.width) {
|
||
|
for (var o, n = null,
|
||
|
l = 0; r.breakpoints.length > l; l++) if (o = r.breakpoints[l], o && o.width && a.width <= o.width) {
|
||
|
n = o;
|
||
|
break
|
||
|
}
|
||
|
var d = null === n ? "default" : n.name,
|
||
|
f = r.hasBreakpointColumn(d),
|
||
|
p = t.data("breakpoint");
|
||
|
t.data("breakpoint", d).removeClass("default breakpoint").removeClass(r.breakpointNames).addClass(d + (f ? " breakpoint" : "")),
|
||
|
d !== p && (t.trigger(u.redraw), r.raise(s.breakpoint, {
|
||
|
breakpoint: d,
|
||
|
info: a
|
||
|
}))
|
||
|
}
|
||
|
r.raise(s.resized, {
|
||
|
old: i,
|
||
|
info: a
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
r.redraw = function () {
|
||
|
r.addRowToggle(),
|
||
|
r.bindToggleSelectors(),
|
||
|
r.setColumnClasses();
|
||
|
var t = e(r.table),
|
||
|
a = t.data("breakpoint"),
|
||
|
i = r.hasBreakpointColumn(a);
|
||
|
t.find("> tbody > tr:not(." + d.detail + ")").data("detail_created", !1).end().find("> thead > tr:last-child > th").each(function () {
|
||
|
var i = r.columns[e(this).index()],
|
||
|
o = "",
|
||
|
n = !0;
|
||
|
e.each(i.matches,
|
||
|
function (e, t) {
|
||
|
n || (o += ", ");
|
||
|
var a = t + 1;
|
||
|
o += "> tbody > tr:not(." + d.detail + ") > td:nth-child(" + a + ")",
|
||
|
o += ", > tfoot > tr:not(." + d.detail + ") > td:nth-child(" + a + ")",
|
||
|
o += ", > colgroup > col:nth-child(" + a + ")",
|
||
|
n = !1
|
||
|
}),
|
||
|
o += ', > thead > tr[data-group-row="true"] > th[data-group="' + i.group + '"]';
|
||
|
var l = t.find(o).add(this);
|
||
|
if ("" !== a && (i.hide[a] === !1 ? l.addClass("footable-visible").show() : l.removeClass("footable-visible").hide()), 1 === t.find("> thead > tr.footable-group-row").length) {
|
||
|
var s = t.find('> thead > tr:last-child > th[data-group="' + i.group + '"]:visible, > thead > tr:last-child > th[data-group="' + i.group + '"]:visible'),
|
||
|
u = t.find('> thead > tr.footable-group-row > th[data-group="' + i.group + '"], > thead > tr.footable-group-row > td[data-group="' + i.group + '"]'),
|
||
|
f = 0;
|
||
|
e.each(s,
|
||
|
function () {
|
||
|
f += parseInt(e(this).attr("colspan") || 1, 10)
|
||
|
}),
|
||
|
f > 0 ? u.attr("colspan", f).show() : u.hide()
|
||
|
}
|
||
|
}).end().find("> tbody > tr." + d.detailShow).each(function () {
|
||
|
r.createOrUpdateDetailRow(this)
|
||
|
}),
|
||
|
t.find("[data-bind-name]").each(function () {
|
||
|
r.toggleInput(this)
|
||
|
}),
|
||
|
t.find("> tbody > tr." + d.detailShow + ":visible").each(function () {
|
||
|
var t = e(this).next();
|
||
|
t.hasClass(d.detail) && (i ? t.show() : t.hide())
|
||
|
}),
|
||
|
t.find("> thead > tr > th.footable-last-column, > tbody > tr > td.footable-last-column").removeClass("footable-last-column"),
|
||
|
t.find("> thead > tr > th.footable-first-column, > tbody > tr > td.footable-first-column").removeClass("footable-first-column"),
|
||
|
t.find("> thead > tr, > tbody > tr").find("> th.footable-visible:last, > td.footable-visible:last").addClass("footable-last-column").end().find("> th.footable-visible:first, > td.footable-visible:first").addClass("footable-first-column"),
|
||
|
r.raise(s.redrawn)
|
||
|
},
|
||
|
r.toggleDetail = function (t) {
|
||
|
var a = t.jquery ? t : e(t),
|
||
|
i = a.next();
|
||
|
a.hasClass(d.detailShow) ? (a.removeClass(d.detailShow), i.hasClass(d.detail) && i.hide(), r.raise(s.rowCollapsed, {
|
||
|
row: a[0]
|
||
|
})) : (r.createOrUpdateDetailRow(a[0]), a.addClass(d.detailShow).next().show(), r.raise(s.rowExpanded, {
|
||
|
row: a[0]
|
||
|
}))
|
||
|
},
|
||
|
r.removeRow = function (t) {
|
||
|
var a = t.jquery ? t : e(t);
|
||
|
a.hasClass(d.detail) && (a = a.prev());
|
||
|
var i = a.next();
|
||
|
a.data("detail_created") === !0 && i.remove(),
|
||
|
a.remove(),
|
||
|
r.raise(s.rowRemoved)
|
||
|
},
|
||
|
r.appendRow = function (t) {
|
||
|
var a = t.jquery ? t : e(t);
|
||
|
e(r.table).find("tbody").append(a),
|
||
|
r.redraw()
|
||
|
},
|
||
|
r.getColumnFromTdIndex = function (t) {
|
||
|
var a = null;
|
||
|
for (var i in r.columns) if (e.inArray(t, r.columns[i].matches) >= 0) {
|
||
|
a = r.columns[i];
|
||
|
break
|
||
|
}
|
||
|
return a
|
||
|
},
|
||
|
r.createOrUpdateDetailRow = function (t) {
|
||
|
var a, i = e(t),
|
||
|
o = i.next(),
|
||
|
n = [];
|
||
|
if (i.data("detail_created") === !0) return !0;
|
||
|
if (i.is(":hidden")) return !1;
|
||
|
if (r.raise(s.rowDetailUpdating, {
|
||
|
row: i,
|
||
|
detail: o
|
||
|
}), i.find("> td:hidden").each(function () {
|
||
|
var t = e(this).index(),
|
||
|
a = r.getColumnFromTdIndex(t),
|
||
|
i = a.name;
|
||
|
if (a.ignore === !0) return !0;
|
||
|
t in a.names && (i = a.names[t]);
|
||
|
var o = e(this).attr("data-bind-name");
|
||
|
if (null != o && e(this).is(":empty")) {
|
||
|
var l = e("." + d.detailInnerValue + "[" + 'data-bind-value="' + o + '"]');
|
||
|
e(this).html(e(l).contents().detach())
|
||
|
}
|
||
|
var s;
|
||
|
return a.isEditable !== !1 && (a.isEditable || e(this).find(":input").length > 0) && (null == o && (o = "bind-" + e.now() + "-" + t, e(this).attr("data-bind-name", o)), s = e(this).contents().detach()),
|
||
|
s || (s = e(this).contents().clone(!0, !0)),
|
||
|
n.push({
|
||
|
name: i,
|
||
|
value: r.parse(this, a),
|
||
|
display: s,
|
||
|
group: a.group,
|
||
|
groupName: a.groupName,
|
||
|
bindName: o
|
||
|
}),
|
||
|
!0
|
||
|
}), 0 === n.length) return !1;
|
||
|
var u = i.find("> td:visible").length,
|
||
|
f = o.hasClass(d.detail);
|
||
|
return f || (o = e('<tr class="' + d.detail + '"><td class="' + d.detailCell + '"><div class="' + d.detailInner + '"></div></td></tr>'), i.after(o)),
|
||
|
o.find("> td:first").attr("colspan", u),
|
||
|
a = o.find("." + d.detailInner).empty(),
|
||
|
l.createDetail(a, n, l.createGroupedDetail, l.detailSeparator, d),
|
||
|
i.data("detail_created", !0),
|
||
|
r.raise(s.rowDetailUpdated, {
|
||
|
row: i,
|
||
|
detail: o
|
||
|
}),
|
||
|
!f
|
||
|
},
|
||
|
r.raise = function (t, a) {
|
||
|
r.options.debug === !0 && e.isFunction(r.options.log) && r.options.log(t, "event"),
|
||
|
a = a || {};
|
||
|
var i = {
|
||
|
ft: r
|
||
|
};
|
||
|
e.extend(!0, i, a);
|
||
|
var o = e.Event(t, i);
|
||
|
return o.ft || e.extend(!0, o, i),
|
||
|
e(r.table).trigger(o),
|
||
|
o
|
||
|
},
|
||
|
r.reset = function () {
|
||
|
var t = e(r.table);
|
||
|
t.removeData("footable_info").data("breakpoint", "").removeClass(d.loading).removeClass(d.loaded),
|
||
|
t.find(l.toggleSelector).unbind(u.toggleRow).unbind("click.footable"),
|
||
|
t.find("> tbody > tr").removeClass(d.detailShow),
|
||
|
t.find("> tbody > tr." + d.detail).remove(),
|
||
|
r.raise(s.reset)
|
||
|
},
|
||
|
r.toggleInput = function (t) {
|
||
|
var a = e(t).attr("data-bind-name");
|
||
|
if (null != a) {
|
||
|
var i = e("." + d.detailInnerValue + "[" + 'data-bind-value="' + a + '"]');
|
||
|
null != i && (e(t).is(":visible") ? e(i).is(":empty") || e(t).html(e(i).contents().detach()) : e(t).is(":empty") || e(i).html(e(t).contents().detach()))
|
||
|
}
|
||
|
},
|
||
|
r.init(),
|
||
|
r
|
||
|
}
|
||
|
t.footable = {
|
||
|
options: {
|
||
|
delay: 100,
|
||
|
breakpoints: {
|
||
|
phone: 480,
|
||
|
tablet: 1024
|
||
|
},
|
||
|
parsers: {
|
||
|
alpha: function (t) {
|
||
|
return e(t).data("value") || e.trim(e(t).text())
|
||
|
},
|
||
|
numeric: function (t) {
|
||
|
var a = e(t).data("value") || e(t).text().replace(/[^0-9.\-]/g, "");
|
||
|
return a = parseFloat(a),
|
||
|
isNaN(a) && (a = 0),
|
||
|
a
|
||
|
}
|
||
|
},
|
||
|
addRowToggle: !0,
|
||
|
calculateWidthOverride: null,
|
||
|
toggleSelector: " > tbody > tr:not(.footable-row-detail)",
|
||
|
columnDataSelector: "> thead > tr:last-child > th, > thead > tr:last-child > td",
|
||
|
detailSeparator: ":",
|
||
|
toggleHTMLElement: "<span />",
|
||
|
createGroupedDetail: function (e) {
|
||
|
for (var t = {
|
||
|
_none: {
|
||
|
name: null,
|
||
|
data: []
|
||
|
}
|
||
|
},
|
||
|
a = 0; e.length > a; a++) {
|
||
|
var i = e[a].group;
|
||
|
null !== i ? (i in t || (t[i] = {
|
||
|
name: e[a].groupName || e[a].group,
|
||
|
data: []
|
||
|
}), t[i].data.push(e[a])) : t._none.data.push(e[a])
|
||
|
}
|
||
|
return t
|
||
|
},
|
||
|
createDetail: function (t, a, i, o, n) {
|
||
|
var r = i(a);
|
||
|
for (var l in r) if (0 !== r[l].data.length) {
|
||
|
"_none" !== l && t.append('<div class="' + n.detailInnerGroup + '">' + r[l].name + "</div>");
|
||
|
for (var d = 0; r[l].data.length > d; d++) {
|
||
|
var s = r[l].data[d].name ? o : "";
|
||
|
t.append(e("<div></div>").addClass(n.detailInnerRow).append(e("<div></div>").addClass(n.detailInnerName).append(r[l].data[d].name + s)).append(e("<div></div>").addClass(n.detailInnerValue).attr("data-bind-value", r[l].data[d].bindName).append(r[l].data[d].display)))
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
classes: {
|
||
|
main: "footable",
|
||
|
loading: "footable-loading",
|
||
|
loaded: "footable-loaded",
|
||
|
toggle: "footable-toggle",
|
||
|
disabled: "footable-disabled",
|
||
|
detail: "footable-row-detail",
|
||
|
detailCell: "footable-row-detail-cell",
|
||
|
detailInner: "footable-row-detail-inner",
|
||
|
detailInnerRow: "footable-row-detail-row",
|
||
|
detailInnerGroup: "footable-row-detail-group",
|
||
|
detailInnerName: "footable-row-detail-name",
|
||
|
detailInnerValue: "footable-row-detail-value",
|
||
|
detailShow: "footable-detail-show"
|
||
|
},
|
||
|
triggers: {
|
||
|
initialize: "footable_initialize",
|
||
|
resize: "footable_resize",
|
||
|
redraw: "footable_redraw",
|
||
|
toggleRow: "footable_toggle_row",
|
||
|
expandFirstRow: "footable_expand_first_row",
|
||
|
expandAll: "footable_expand_all",
|
||
|
collapseAll: "footable_collapse_all"
|
||
|
},
|
||
|
events: {
|
||
|
alreadyInitialized: "footable_already_initialized",
|
||
|
initializing: "footable_initializing",
|
||
|
initialized: "footable_initialized",
|
||
|
resizing: "footable_resizing",
|
||
|
resized: "footable_resized",
|
||
|
redrawn: "footable_redrawn",
|
||
|
breakpoint: "footable_breakpoint",
|
||
|
columnData: "footable_column_data",
|
||
|
rowDetailUpdating: "footable_row_detail_updating",
|
||
|
rowDetailUpdated: "footable_row_detail_updated",
|
||
|
rowCollapsed: "footable_row_collapsed",
|
||
|
rowExpanded: "footable_row_expanded",
|
||
|
rowRemoved: "footable_row_removed",
|
||
|
reset: "footable_reset"
|
||
|
},
|
||
|
debug: !1,
|
||
|
log: null
|
||
|
},
|
||
|
version: {
|
||
|
major: 0,
|
||
|
minor: 5,
|
||
|
toString: function () {
|
||
|
return t.footable.version.major + "." + t.footable.version.minor
|
||
|
},
|
||
|
parse: function (e) {
|
||
|
var t = /(\d+)\.?(\d+)?\.?(\d+)?/.exec(e);
|
||
|
return {
|
||
|
major: parseInt(t[1], 10) || 0,
|
||
|
minor: parseInt(t[2], 10) || 0,
|
||
|
patch: parseInt(t[3], 10) || 0
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
plugins: {
|
||
|
_validate: function (a) {
|
||
|
if (!e.isFunction(a)) return t.footable.options.debug === !0 && console.error('Validation failed, expected type "function", received type "{0}".', typeof a),
|
||
|
!1;
|
||
|
var i = new a;
|
||
|
return "string" != typeof i.name ? (t.footable.options.debug === !0 && console.error('Validation failed, plugin does not implement a string property called "name".', i), !1) : e.isFunction(i.init) ? (t.footable.options.debug === !0 && console.log('Validation succeeded for plugin "' + i.name + '".', i), !0) : (t.footable.options.debug === !0 && console.error('Validation failed, plugin "' + i.name + '" does not implement a function called "init".', i), !1)
|
||
|
},
|
||
|
registered: [],
|
||
|
register: function (a, i) {
|
||
|
t.footable.plugins._validate(a) && (t.footable.plugins.registered.push(a), "object" == typeof i && e.extend(!0, t.footable.options, i))
|
||
|
},
|
||
|
load: function (e) {
|
||
|
var a, i, o = [];
|
||
|
for (i = 0; t.footable.plugins.registered.length > i; i++) try {
|
||
|
a = t.footable.plugins.registered[i],
|
||
|
o.push(new a(e))
|
||
|
} catch (n) {
|
||
|
t.footable.options.debug === !0 && console.error(n)
|
||
|
}
|
||
|
return o
|
||
|
},
|
||
|
init: function (e) {
|
||
|
for (var a = 0; e.plugins.length > a; a++) try {
|
||
|
e.plugins[a].init(e)
|
||
|
} catch (i) {
|
||
|
t.footable.options.debug === !0 && console.error(i)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
var o = 0;
|
||
|
e.fn.footable = function (a) {
|
||
|
a = a || {};
|
||
|
var n = e.extend(!0, {},
|
||
|
t.footable.options, a);
|
||
|
return this.each(function () {
|
||
|
o++;
|
||
|
var t = new i(this, n, o);
|
||
|
e(this).data("footable", t)
|
||
|
})
|
||
|
}
|
||
|
})(jQuery, window);; (function (e, t, undefined) {
|
||
|
function a(t) {
|
||
|
var a = e("<th>" + t.title + "</th>");
|
||
|
return e.isPlainObject(t.data) && a.data(t.data),
|
||
|
e.isPlainObject(t.style) && a.css(t.style),
|
||
|
t.className && a.addClass(t.className),
|
||
|
a
|
||
|
}
|
||
|
function o(t, o) {
|
||
|
var i = t.find("thead");
|
||
|
0 === i.size() && (i = e("<thead>").appendTo(t));
|
||
|
for (var n = e("<tr>").appendTo(i), r = 0, l = o.cols.length; l > r; r++) n.append(a(o.cols[r]))
|
||
|
}
|
||
|
function i(t) {
|
||
|
var a = t.find("tbody");
|
||
|
0 === a.size() && (a = e("<tbody>").appendTo(t))
|
||
|
}
|
||
|
function n(t, a, o) {
|
||
|
if (o) {
|
||
|
t.attr("data-page-size", o["page-size"]);
|
||
|
var i = t.find("tfoot");
|
||
|
0 === i.size() && (i = e('<tfoot class="hide-if-no-paging"></tfoot>').appendTo(t)),
|
||
|
i.append("<tr><td colspan=" + a.length + "></td></tr>");
|
||
|
var n = e("<div>").appendTo(i.find("tr:last-child td"));
|
||
|
n.addClass(o["pagination-class"])
|
||
|
}
|
||
|
}
|
||
|
function r(t) {
|
||
|
for (var a = t[0], o = 0, i = t.length; i > o; o++) {
|
||
|
var n = t[o];
|
||
|
if (n.data && (n.data.toggle === !0 || "true" === n.data.toggle)) return
|
||
|
}
|
||
|
a.data = e.extend(a.data, {
|
||
|
toggle: !0
|
||
|
})
|
||
|
}
|
||
|
function l(e, t, a) {
|
||
|
0 === e.find("tr.emptyInfo").size() && e.find("tbody").append('<tr class="emptyInfo"><td colspan="' + t.length + '">' + a + "</td></tr>")
|
||
|
}
|
||
|
function d(t, a, o, i) {
|
||
|
t.find("tr:not(." + o + ")").each(function () {
|
||
|
var t = e(this),
|
||
|
o = a.data("index"),
|
||
|
n = parseInt(t.data("index"), 0),
|
||
|
r = n + i;
|
||
|
n >= o && this !== a.get(0) && t.attr("data-index", r).data("index", r)
|
||
|
})
|
||
|
}
|
||
|
function s() {
|
||
|
function t(t, a, o) {
|
||
|
var i = e("<td>");
|
||
|
return t.formatter ? i.html(t.formatter(a, i, o)) : i.html(a || ""),
|
||
|
i
|
||
|
}
|
||
|
var a = this;
|
||
|
a.name = "Footable Grid",
|
||
|
a.init = function (t) {
|
||
|
var d = t.options.classes.toggle,
|
||
|
s = t.options.classes.detail,
|
||
|
f = t.options.grid;
|
||
|
if (f.cols) {
|
||
|
a.footable = t;
|
||
|
var u = e(t.table);
|
||
|
u.data("grid", a),
|
||
|
e.isPlainObject(f.data) && u.data(f.data),
|
||
|
a._items = [],
|
||
|
r(f.cols),
|
||
|
f.showCheckbox && (f.multiSelect = !0, f.cols.unshift({
|
||
|
title: f.checkboxFormatter(!0),
|
||
|
name: "",
|
||
|
data: {
|
||
|
"sort-ignore": !0
|
||
|
},
|
||
|
formatter: f.checkboxFormatter
|
||
|
})),
|
||
|
f.showIndex && f.cols.unshift({
|
||
|
title: "#",
|
||
|
name: "index",
|
||
|
data: {
|
||
|
"sort-ignore": !0
|
||
|
},
|
||
|
formatter: f.indexFormatter
|
||
|
}),
|
||
|
o(u, f),
|
||
|
i(u),
|
||
|
n(u, f.cols, f.pagination),
|
||
|
u.off(".grid").on({
|
||
|
"footable_initialized.grid": function () {
|
||
|
f.url || f.ajax ? e.ajax(f.ajax || {
|
||
|
url: f.url
|
||
|
}).then(function (e) {
|
||
|
a.newItem(e),
|
||
|
t.raise(f.events.loaded)
|
||
|
},
|
||
|
function () {
|
||
|
throw "load data from " + (f.url || f.ajax.url) + " fail"
|
||
|
}) : (a.newItem(f.items || []), t.raise(f.events.loaded))
|
||
|
},
|
||
|
"footable_sorted.grid footable_grid_created.grid footable_grid_removed.grid": function () {
|
||
|
f.showIndex && a.getItem().length > 0 && u.find("tbody tr:not(." + s + ")").each(function (t) {
|
||
|
var a = e(this).find("td:first");
|
||
|
a.html(f.indexFormatter(null, a, t))
|
||
|
})
|
||
|
},
|
||
|
"footable_redrawn.grid footable_row_removed.grid": function () {
|
||
|
0 === a.getItem().length && f.showEmptyInfo && l(u, f.cols, f.emptyInfo)
|
||
|
}
|
||
|
}).on({
|
||
|
"click.grid": function (a) {
|
||
|
if (e(a.target).closest("td").find(">." + d).size() > 0) return !0;
|
||
|
var o = e(a.currentTarget);
|
||
|
return o.hasClass(s) ? !0 : (f.multiSelect || o.hasClass(f.activeClass) || u.find("tbody tr." + f.activeClass).removeClass(f.activeClass), o.toggleClass(f.activeClass), f.showCheckbox && o.find("input:checkbox.check").prop("checked",
|
||
|
function (e, t) {
|
||
|
return a.target === this ? t : !t
|
||
|
}), t.toggleDetail(o), undefined)
|
||
|
}
|
||
|
},
|
||
|
"tbody tr").on("click.grid", "thead input:checkbox.checkAll",
|
||
|
function (e) {
|
||
|
var t = !!e.currentTarget.checked;
|
||
|
t ? u.find("tbody tr").addClass(f.activeClass) : u.find("tbody tr").removeClass(f.activeClass),
|
||
|
u.find("tbody input:checkbox.check").prop("checked", t)
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
a.getSelected = function () {
|
||
|
var t = a.footable.options.grid,
|
||
|
o = e(a.footable.table).find("tbody>tr." + t.activeClass);
|
||
|
return o.map(function () {
|
||
|
return e(this).data("index")
|
||
|
})
|
||
|
},
|
||
|
a.getItem = function (t) {
|
||
|
return t !== undefined ? e.isArray(t) ? e.map(t,
|
||
|
function (e) {
|
||
|
return a._items[e]
|
||
|
}) : a._items[t] : a._items
|
||
|
},
|
||
|
a._makeRow = function (o, i) {
|
||
|
var n, r = a.footable.options.grid;
|
||
|
if (e.isFunction(r.template)) n = e(r.template(e.extend({},
|
||
|
{
|
||
|
__index: i
|
||
|
},
|
||
|
o)));
|
||
|
else {
|
||
|
n = e("<tr>");
|
||
|
for (var l = 0,
|
||
|
d = r.cols.length; d > l; l++) {
|
||
|
var s = r.cols[l];
|
||
|
n.append(t(s, o[s.name] || "", i))
|
||
|
}
|
||
|
}
|
||
|
return n.attr("data-index", i),
|
||
|
n
|
||
|
},
|
||
|
a.newItem = function (t, o, i) {
|
||
|
var n = e(a.footable.table).find("tbody"),
|
||
|
r = a.footable.options.classes.detail;
|
||
|
if (n.find("tr.emptyInfo").remove(), e.isArray(t)) {
|
||
|
for (var l; l = t.pop();) a.newItem(l, o, !0);
|
||
|
return a.footable.redraw(),
|
||
|
a.footable.raise(a.footable.options.grid.events.created, {
|
||
|
item: t,
|
||
|
index: o
|
||
|
}),
|
||
|
undefined
|
||
|
}
|
||
|
if (e.isPlainObject(t)) {
|
||
|
var s, f = a._items.length;
|
||
|
if (o === undefined || 0 > o || o > f) s = a._makeRow(t, f++),
|
||
|
a._items.push(t),
|
||
|
n.append(s);
|
||
|
else {
|
||
|
if (s = a._makeRow(t, o), 0 === o) a._items.unshift(t),
|
||
|
n.prepend(s);
|
||
|
else {
|
||
|
var u = n.find("tr[data-index=" + (o - 1) + "]");
|
||
|
a._items.splice(o, 0, t),
|
||
|
u.data("detail_created") === !0 && (u = u.next()),
|
||
|
u.after(s)
|
||
|
}
|
||
|
d(n, s, r, 1)
|
||
|
}
|
||
|
i || (a.footable.redraw(), a.footable.raise(a.footable.options.grid.events.created, {
|
||
|
item: t,
|
||
|
index: o
|
||
|
}))
|
||
|
}
|
||
|
},
|
||
|
a.setItem = function (t, o) {
|
||
|
if (e.isPlainObject(t)) {
|
||
|
var i = e(a.footable.table).find("tbody"),
|
||
|
n = a._makeRow(t, o);
|
||
|
e.extend(a._items[o], t);
|
||
|
var r = i.find("tr").eq(o);
|
||
|
r.html(n.html()),
|
||
|
a.footable.redraw(),
|
||
|
a.footable.raise(a.footable.options.grid.events.updated, {
|
||
|
item: t,
|
||
|
index: o
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
a.removeItem = function (t) {
|
||
|
var o = e(a.footable.table).find("tbody"),
|
||
|
i = a.footable.options.classes.detail,
|
||
|
n = [];
|
||
|
if (e.isArray(t)) {
|
||
|
for (var r; r = t.pop();) n.push(a.removeItem(r));
|
||
|
return a.footable.raise(a.footable.options.grid.events.removed, {
|
||
|
item: n,
|
||
|
index: t
|
||
|
}),
|
||
|
n
|
||
|
}
|
||
|
if (t === undefined) o.find("tr").each(function () {
|
||
|
n.push(a._items.shift()),
|
||
|
a.footable.removeRow(this)
|
||
|
});
|
||
|
else {
|
||
|
var l = o.find("tr[data-index=" + t + "]");
|
||
|
n = a._items.splice(t, 1)[0],
|
||
|
a.footable.removeRow(l),
|
||
|
d(o, l, i, -1)
|
||
|
}
|
||
|
return a.footable.raise(a.footable.options.grid.events.removed, {
|
||
|
item: n,
|
||
|
index: t
|
||
|
}),
|
||
|
n
|
||
|
}
|
||
|
}
|
||
|
if (t.footable === undefined || null === t.foobox) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
|
||
|
var f = {
|
||
|
grid: {
|
||
|
enabled: !0,
|
||
|
data: null,
|
||
|
template: null,
|
||
|
cols: null,
|
||
|
items: null,
|
||
|
url: null,
|
||
|
ajax: null,
|
||
|
activeClass: "active",
|
||
|
multiSelect: !1,
|
||
|
showIndex: !1,
|
||
|
showCheckbox: !1,
|
||
|
showEmptyInfo: !1,
|
||
|
emptyInfo: '<p class="text-center text-warning">No Data</p>',
|
||
|
pagination: {
|
||
|
"page-size": 20,
|
||
|
"pagination-class": "pagination pagination-centered"
|
||
|
},
|
||
|
indexFormatter: function (e, t, a) {
|
||
|
return a + 1
|
||
|
},
|
||
|
checkboxFormatter: function (e) {
|
||
|
return '<input type="checkbox" class="' + (e ? "checkAll" : "check") + '">'
|
||
|
},
|
||
|
events: {
|
||
|
loaded: "footable_grid_loaded",
|
||
|
created: "footable_grid_created",
|
||
|
removed: "footable_grid_removed",
|
||
|
updated: "footable_grid_updated"
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
t.footable.plugins.register(s, f)
|
||
|
})(jQuery, window);; (function (t, e, undefined) {
|
||
|
function a() {
|
||
|
var e = this;
|
||
|
e.name = "Footable Filter",
|
||
|
e.init = function (a) {
|
||
|
if (e.footable = a, a.options.filter.enabled === !0) {
|
||
|
if (t(a.table).data("filter") === !1) return;
|
||
|
a.timers.register("filter"),
|
||
|
t(a.table).unbind(".filtering").bind({
|
||
|
"footable_initialized.filtering": function () {
|
||
|
var i = t(a.table),
|
||
|
o = {
|
||
|
input: i.data("filter") || a.options.filter.input,
|
||
|
timeout: i.data("filter-timeout") || a.options.filter.timeout,
|
||
|
minimum: i.data("filter-minimum") || a.options.filter.minimum,
|
||
|
disableEnter: i.data("filter-disable-enter") || a.options.filter.disableEnter
|
||
|
};
|
||
|
o.disableEnter && t(o.input).keypress(function (t) {
|
||
|
return window.event ? 13 !== window.event.keyCode : 13 !== t.which
|
||
|
}),
|
||
|
i.bind("footable_clear_filter",
|
||
|
function () {
|
||
|
t(o.input).val(""),
|
||
|
e.clearFilter()
|
||
|
}),
|
||
|
i.bind("footable_filter",
|
||
|
function (t, a) {
|
||
|
e.filter(a.filter)
|
||
|
}),
|
||
|
t(o.input).keyup(function (i) {
|
||
|
a.timers.filter.stop(),
|
||
|
27 === i.which && t(o.input).val(""),
|
||
|
a.timers.filter.start(function () {
|
||
|
var a = t(o.input).val() || "";
|
||
|
e.filter(a)
|
||
|
},
|
||
|
o.timeout)
|
||
|
})
|
||
|
},
|
||
|
"footable_redrawn.filtering": function () {
|
||
|
var i = t(a.table),
|
||
|
o = i.data("filter-string");
|
||
|
o && e.filter(o)
|
||
|
}
|
||
|
}).data("footable-filter", e)
|
||
|
}
|
||
|
},
|
||
|
e.filter = function (a) {
|
||
|
var i = e.footable,
|
||
|
o = t(i.table),
|
||
|
n = o.data("filter-minimum") || i.options.filter.minimum,
|
||
|
r = !a,
|
||
|
l = i.raise("footable_filtering", {
|
||
|
filter: a,
|
||
|
clear: r
|
||
|
});
|
||
|
if (!(l && l.result === !1 || l.filter && n > l.filter.length)) if (l.clear) e.clearFilter();
|
||
|
else {
|
||
|
var d = l.filter.split(" ");
|
||
|
o.find("> tbody > tr").hide().addClass("footable-filtered");
|
||
|
var s = o.find("> tbody > tr:not(.footable-row-detail)");
|
||
|
t.each(d,
|
||
|
function (t, e) {
|
||
|
e && e.length > 0 && (o.data("current-filter", e), s = s.filter(i.options.filter.filterFunction))
|
||
|
}),
|
||
|
s.each(function () {
|
||
|
e.showRow(this, i),
|
||
|
t(this).removeClass("footable-filtered")
|
||
|
}),
|
||
|
o.data("filter-string", l.filter),
|
||
|
i.raise("footable_filtered", {
|
||
|
filter: l.filter,
|
||
|
clear: !1
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
e.clearFilter = function () {
|
||
|
var a = e.footable,
|
||
|
i = t(a.table);
|
||
|
i.find("> tbody > tr:not(.footable-row-detail)").removeClass("footable-filtered").each(function () {
|
||
|
e.showRow(this, a)
|
||
|
}),
|
||
|
i.removeData("filter-string"),
|
||
|
a.raise("footable_filtered", {
|
||
|
clear: !0
|
||
|
})
|
||
|
},
|
||
|
e.showRow = function (e, a) {
|
||
|
var i = t(e),
|
||
|
o = i.next(),
|
||
|
n = t(a.table);
|
||
|
i.is(":visible") || (n.hasClass("breakpoint") && i.hasClass("footable-detail-show") && o.hasClass("footable-row-detail") ? (i.add(o).show(), a.createOrUpdateDetailRow(e)) : i.show())
|
||
|
}
|
||
|
}
|
||
|
if (e.footable === undefined || null === e.footable) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
|
||
|
var i = {
|
||
|
filter: {
|
||
|
enabled: !0,
|
||
|
input: ".footable-filter",
|
||
|
timeout: 300,
|
||
|
minimum: 2,
|
||
|
disableEnter: !1,
|
||
|
filterFunction: function () {
|
||
|
var e = t(this),
|
||
|
a = e.parents("table:first"),
|
||
|
i = a.data("current-filter").toUpperCase(),
|
||
|
o = e.find("td").text();
|
||
|
return a.data("filter-text-only") || e.find("td[data-value]").each(function () {
|
||
|
o += t(this).data("value")
|
||
|
}),
|
||
|
o.toUpperCase().indexOf(i) >= 0
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
e.footable.plugins.register(a, i)
|
||
|
})(jQuery, window);; (function (e, t, undefined) {
|
||
|
function a(t) {
|
||
|
var a = e(t.table),
|
||
|
i = a.data();
|
||
|
this.pageNavigation = i.pageNavigation || t.options.pageNavigation,
|
||
|
this.pageSize = i.pageSize || t.options.pageSize,
|
||
|
this.firstText = i.firstText || t.options.firstText,
|
||
|
this.previousText = i.previousText || t.options.previousText,
|
||
|
this.nextText = i.nextText || t.options.nextText,
|
||
|
this.lastText = i.lastText || t.options.lastText,
|
||
|
this.limitNavigation = parseInt(i.limitNavigation || t.options.limitNavigation || o.limitNavigation, 10),
|
||
|
this.limitPreviousText = i.limitPreviousText || t.options.limitPreviousText,
|
||
|
this.limitNextText = i.limitNextText || t.options.limitNextText,
|
||
|
this.limit = this.limitNavigation > 0,
|
||
|
this.currentPage = i.currentPage || 0,
|
||
|
this.pages = [],
|
||
|
this.control = !1
|
||
|
}
|
||
|
function i() {
|
||
|
var t = this;
|
||
|
t.name = "Footable Paginate",
|
||
|
t.init = function (a) {
|
||
|
if (a.options.paginate === !0) {
|
||
|
if (e(a.table).data("page") === !1) return;
|
||
|
t.footable = a,
|
||
|
e(a.table).unbind(".paging").bind({
|
||
|
"footable_initialized.paging footable_row_removed.paging footable_redrawn.paging footable_sorted.paging footable_filtered.paging": function () {
|
||
|
t.setupPaging()
|
||
|
}
|
||
|
}).data("footable-paging", t)
|
||
|
}
|
||
|
},
|
||
|
t.setupPaging = function () {
|
||
|
var i = t.footable,
|
||
|
o = e(i.table).find("> tbody");
|
||
|
i.pageInfo = new a(i),
|
||
|
t.createPages(i, o),
|
||
|
t.createNavigation(i, o),
|
||
|
t.fillPage(i, o, i.pageInfo.currentPage)
|
||
|
},
|
||
|
t.createPages = function (t, a) {
|
||
|
var i = 1,
|
||
|
o = t.pageInfo,
|
||
|
n = i * o.pageSize,
|
||
|
r = [],
|
||
|
l = [];
|
||
|
o.pages = [];
|
||
|
var d = a.find("> tr:not(.footable-filtered,.footable-row-detail)");
|
||
|
d.each(function (e, t) {
|
||
|
r.push(t),
|
||
|
e === n - 1 ? (o.pages.push(r), i++ , n = i * o.pageSize, r = []) : e >= d.length - d.length % o.pageSize && l.push(t)
|
||
|
}),
|
||
|
l.length > 0 && o.pages.push(l),
|
||
|
o.currentPage >= o.pages.length && (o.currentPage = o.pages.length - 1),
|
||
|
0 > o.currentPage && (o.currentPage = 0),
|
||
|
1 === o.pages.length ? e(t.table).addClass("no-paging") : e(t.table).removeClass("no-paging")
|
||
|
},
|
||
|
t.createNavigation = function (a) {
|
||
|
var i = e(a.table).find(a.pageInfo.pageNavigation);
|
||
|
if (0 === i.length) {
|
||
|
if (i = e(a.pageInfo.pageNavigation), i.parents("table:first").length > 0 && i.parents("table:first") !== e(a.table)) return;
|
||
|
i.length > 1 && a.options.debug === !0 && console.error("More than one pagination control was found!")
|
||
|
}
|
||
|
if (0 !== i.length) {
|
||
|
i.is("ul") || (0 === i.find("ul:first").length && i.append("<ul />"), i = i.find("ul")),
|
||
|
i.find("li").remove();
|
||
|
var o = a.pageInfo;
|
||
|
o.control = i,
|
||
|
o.pages.length > 0 && (i.append('<li class="footable-page-arrow"><a data-page="first" href="#first">' + a.pageInfo.firstText + "</a>"), i.append('<li class="footable-page-arrow"><a data-page="prev" href="#prev">' + a.pageInfo.previousText + "</a></li>"), o.limit && i.append('<li class="footable-page-arrow"><a data-page="limit-prev" href="#limit-prev">' + a.pageInfo.limitPreviousText + "</a></li>"), o.limit || e.each(o.pages,
|
||
|
function (e, t) {
|
||
|
t.length > 0 && i.append('<li class="footable-page"><a data-page="' + e + '" href="#">' + (e + 1) + "</a></li>")
|
||
|
}), o.limit && (i.append('<li class="footable-page-arrow"><a data-page="limit-next" href="#limit-next">' + a.pageInfo.limitNextText + "</a></li>"), t.createLimited(i, o, 0)), i.append('<li class="footable-page-arrow"><a data-page="next" href="#next">' + a.pageInfo.nextText + "</a></li>"), i.append('<li class="footable-page-arrow"><a data-page="last" href="#last">' + a.pageInfo.lastText + "</a></li>")),
|
||
|
i.off("click", "a[data-page]").on("click", "a[data-page]",
|
||
|
function (n) {
|
||
|
n.preventDefault();
|
||
|
var r = e(this).data("page"),
|
||
|
l = o.currentPage;
|
||
|
if ("first" === r) l = 0;
|
||
|
else if ("prev" === r) l > 0 && l--;
|
||
|
else if ("next" === r) o.pages.length - 1 > l && l++;
|
||
|
else if ("last" === r) l = o.pages.length - 1;
|
||
|
else if ("limit-prev" === r) {
|
||
|
l = -1;
|
||
|
var d = i.find(".footable-page:first a").data("page");
|
||
|
t.createLimited(i, o, d - o.limitNavigation),
|
||
|
t.setPagingClasses(i, o.currentPage, o.pages.length)
|
||
|
} else if ("limit-next" === r) {
|
||
|
l = -1;
|
||
|
var s = i.find(".footable-page:last a").data("page");
|
||
|
t.createLimited(i, o, s + 1),
|
||
|
t.setPagingClasses(i, o.currentPage, o.pages.length)
|
||
|
} else l = r;
|
||
|
if (l >= 0) {
|
||
|
if (o.limit && o.currentPage != l) {
|
||
|
for (var f = l; 0 !== f % o.limitNavigation;) f -= 1;
|
||
|
t.createLimited(i, o, f)
|
||
|
}
|
||
|
t.paginate(a, l)
|
||
|
}
|
||
|
}),
|
||
|
t.setPagingClasses(i, o.currentPage, o.pages.length)
|
||
|
}
|
||
|
},
|
||
|
t.createLimited = function (e, t, a) {
|
||
|
a = a || 0,
|
||
|
e.find("li.footable-page").remove();
|
||
|
var i, o, n = e.find('li.footable-page-arrow > a[data-page="limit-prev"]').parent(),
|
||
|
r = e.find('li.footable-page-arrow > a[data-page="limit-next"]').parent();
|
||
|
for (i = t.pages.length - 1; i >= 0; i--) o = t.pages[i],
|
||
|
i >= a && a + t.limitNavigation > i && o.length > 0 && n.after('<li class="footable-page"><a data-page="' + i + '" href="#">' + (i + 1) + "</a></li>");
|
||
|
0 === a ? n.hide() : n.show(),
|
||
|
a + t.limitNavigation >= t.pages.length ? r.hide() : r.show()
|
||
|
},
|
||
|
t.paginate = function (a, i) {
|
||
|
var o = a.pageInfo;
|
||
|
if (o.currentPage !== i) {
|
||
|
var n = e(a.table).find("> tbody"),
|
||
|
r = a.raise("footable_paging", {
|
||
|
page: i,
|
||
|
size: o.pageSize
|
||
|
});
|
||
|
if (r && r.result === !1) return;
|
||
|
t.fillPage(a, n, i),
|
||
|
o.control.find("li").removeClass("active disabled"),
|
||
|
t.setPagingClasses(o.control, o.currentPage, o.pages.length)
|
||
|
}
|
||
|
},
|
||
|
t.setPagingClasses = function (e, t, a) {
|
||
|
e.find("li.footable-page > a[data-page=" + t + "]").parent().addClass("active"),
|
||
|
t >= a - 1 && (e.find('li.footable-page-arrow > a[data-page="next"]').parent().addClass("disabled"), e.find('li.footable-page-arrow > a[data-page="last"]').parent().addClass("disabled")),
|
||
|
1 > t && (e.find('li.footable-page-arrow > a[data-page="first"]').parent().addClass("disabled"), e.find('li.footable-page-arrow > a[data-page="prev"]').parent().addClass("disabled"))
|
||
|
},
|
||
|
t.fillPage = function (a, i, o) {
|
||
|
a.pageInfo.currentPage = o,
|
||
|
e(a.table).data("currentPage", o),
|
||
|
i.find("> tr").hide(),
|
||
|
e(a.pageInfo.pages[o]).each(function () {
|
||
|
t.showRow(this, a)
|
||
|
}),
|
||
|
a.raise("footable_page_filled")
|
||
|
},
|
||
|
t.showRow = function (t, a) {
|
||
|
var i = e(t),
|
||
|
o = i.next(),
|
||
|
n = e(a.table);
|
||
|
n.hasClass("breakpoint") && i.hasClass("footable-detail-show") && o.hasClass("footable-row-detail") ? (i.add(o).show(), a.createOrUpdateDetailRow(t)) : i.show()
|
||
|
}
|
||
|
}
|
||
|
if (t.footable === undefined || null === t.footable) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
|
||
|
var o = {
|
||
|
paginate: !0,
|
||
|
pageSize: 10,
|
||
|
pageNavigation: ".pagination",
|
||
|
firstText: "«",
|
||
|
previousText: "‹",
|
||
|
nextText: "›",
|
||
|
lastText: "»",
|
||
|
limitNavigation: 0,
|
||
|
limitPreviousText: "...",
|
||
|
limitNextText: "..."
|
||
|
};
|
||
|
t.footable.plugins.register(i, o)
|
||
|
})(jQuery, window);; (function (t, e, undefined) {
|
||
|
function a() {
|
||
|
var e = this;
|
||
|
e.name = "Footable Sortable",
|
||
|
e.init = function (a) {
|
||
|
e.footable = a,
|
||
|
a.options.sort === !0 && t(a.table).unbind(".sorting").bind({
|
||
|
"footable_initialized.sorting": function () {
|
||
|
var i, o, n = t(a.table),
|
||
|
r = (n.find("> tbody"), a.options.classes.sort);
|
||
|
if (n.data("sort") !== !1) {
|
||
|
n.find("> thead > tr:last-child > th, > thead > tr:last-child > td").each(function () {
|
||
|
var e = t(this),
|
||
|
i = a.columns[e.index()];
|
||
|
i.sort.ignore === !0 || e.hasClass(r.sortable) || (e.addClass(r.sortable), t("<span />").addClass(r.indicator).appendTo(e))
|
||
|
}),
|
||
|
n.find("> thead > tr:last-child > th." + r.sortable + ", > thead > tr:last-child > td." + r.sortable).unbind("click.footable").bind("click.footable",
|
||
|
function (a) {
|
||
|
a.preventDefault(),
|
||
|
o = t(this);
|
||
|
var i = !o.hasClass(r.sorted);
|
||
|
return e.doSort(o.index(), i),
|
||
|
!1
|
||
|
});
|
||
|
var l = !1;
|
||
|
for (var s in a.columns) if (i = a.columns[s], i.sort.initial) {
|
||
|
var d = "descending" !== i.sort.initial;
|
||
|
e.doSort(i.index, d);
|
||
|
break
|
||
|
}
|
||
|
l && a.bindToggleSelectors()
|
||
|
}
|
||
|
},
|
||
|
"footable_redrawn.sorting": function () {
|
||
|
var i = t(a.table),
|
||
|
o = a.options.classes.sort;
|
||
|
i.data("sorted") >= 0 && i.find("> thead > tr:last-child > th").each(function (a) {
|
||
|
var i = t(this);
|
||
|
return i.hasClass(o.sorted) || i.hasClass(o.descending) ? (e.doSort(a), undefined) : undefined
|
||
|
})
|
||
|
},
|
||
|
"footable_column_data.sorting": function (e) {
|
||
|
var a = t(e.column.th);
|
||
|
e.column.data.sort = e.column.data.sort || {},
|
||
|
e.column.data.sort.initial = a.data("sort-initial") || !1,
|
||
|
e.column.data.sort.ignore = a.data("sort-ignore") || !1,
|
||
|
e.column.data.sort.selector = a.data("sort-selector") || null;
|
||
|
var i = a.data("sort-match") || 0;
|
||
|
i >= e.column.data.matches.length && (i = 0),
|
||
|
e.column.data.sort.match = e.column.data.matches[i]
|
||
|
}
|
||
|
}).data("footable-sort", e)
|
||
|
},
|
||
|
e.doSort = function (a, i) {
|
||
|
var o = e.footable;
|
||
|
if (t(o.table).data("sort") !== !1) {
|
||
|
var n = t(o.table),
|
||
|
r = n.find("> tbody"),
|
||
|
l = o.columns[a],
|
||
|
s = n.find("> thead > tr:last-child > th:eq(" + a + ")"),
|
||
|
d = o.options.classes.sort,
|
||
|
f = o.options.events.sort;
|
||
|
if (i = i === undefined ? s.hasClass(d.sorted) : "toggle" === i ? !s.hasClass(d.sorted) : i, l.sort.ignore === !0) return !0;
|
||
|
var u = o.raise(f.sorting, {
|
||
|
column: l,
|
||
|
direction: i ? "ASC" : "DESC"
|
||
|
});
|
||
|
u && u.result === !1 || (n.data("sorted", l.index), n.find("> thead > tr:last-child > th, > thead > tr:last-child > td").not(s).removeClass(d.sorted + " " + d.descending), i === undefined && (i = s.hasClass(d.sorted)), i ? s.removeClass(d.descending).addClass(d.sorted) : s.removeClass(d.sorted).addClass(d.descending), e.sort(o, r, l, i), o.bindToggleSelectors(), o.raise(f.sorted, {
|
||
|
column: l,
|
||
|
direction: i ? "ASC" : "DESC"
|
||
|
}))
|
||
|
}
|
||
|
},
|
||
|
e.rows = function (e, a, i) {
|
||
|
var o = [];
|
||
|
return a.find("> tr").each(function () {
|
||
|
var a = t(this),
|
||
|
n = null;
|
||
|
if (a.hasClass(e.options.classes.detail)) return !0;
|
||
|
a.next().hasClass(e.options.classes.detail) && (n = a.next().get(0));
|
||
|
var r = {
|
||
|
row: a,
|
||
|
detail: n
|
||
|
};
|
||
|
return i !== undefined && (r.value = e.parse(this.cells[i.sort.match], i)),
|
||
|
o.push(r),
|
||
|
!0
|
||
|
}).detach(),
|
||
|
o
|
||
|
},
|
||
|
e.sort = function (t, a, i, o) {
|
||
|
var n = e.rows(t, a, i),
|
||
|
r = t.options.sorters[i.type] || t.options.sorters.alpha;
|
||
|
n.sort(function (t, e) {
|
||
|
return o ? r(t.value, e.value) : r(e.value, t.value)
|
||
|
});
|
||
|
for (var l = 0; n.length > l; l++) a.append(n[l].row),
|
||
|
null !== n[l].detail && a.append(n[l].detail)
|
||
|
}
|
||
|
}
|
||
|
if (e.footable === undefined || null === e.footable) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
|
||
|
var i = {
|
||
|
sort: !0,
|
||
|
sorters: {
|
||
|
alpha: function (t, e) {
|
||
|
return "string" == typeof t && (t = t.toLowerCase()),
|
||
|
"string" == typeof e && (e = e.toLowerCase()),
|
||
|
t === e ? 0 : e > t ? -1 : 1
|
||
|
},
|
||
|
numeric: function (t, e) {
|
||
|
return t - e
|
||
|
}
|
||
|
},
|
||
|
classes: {
|
||
|
sort: {
|
||
|
sortable: "footable-sortable",
|
||
|
sorted: "footable-sorted",
|
||
|
descending: "footable-sorted-desc",
|
||
|
indicator: "footable-sort-indicator"
|
||
|
}
|
||
|
},
|
||
|
events: {
|
||
|
sort: {
|
||
|
sorting: "footable_sorting",
|
||
|
sorted: "footable_sorted"
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
e.footable.plugins.register(a, i)
|
||
|
})(jQuery, window);; (function (t, e, undefined) {
|
||
|
function a() {
|
||
|
var e = this;
|
||
|
e.name = "Footable Striping",
|
||
|
e.init = function (a) {
|
||
|
e.footable = a,
|
||
|
t(a.table).unbind("striping").bind({
|
||
|
"footable_initialized.striping footable_row_removed.striping footable_redrawn.striping footable_sorted.striping footable_filtered.striping": function () {
|
||
|
t(this).data("striping") !== !1 && e.setupStriping(a)
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
e.setupStriping = function (e) {
|
||
|
var a = 0;
|
||
|
t(e.table).find("> tbody > tr:not(.footable-row-detail)").each(function () {
|
||
|
var i = t(this);
|
||
|
i.removeClass(e.options.classes.striping.even).removeClass(e.options.classes.striping.odd),
|
||
|
0 === a % 2 ? i.addClass(e.options.classes.striping.even) : i.addClass(e.options.classes.striping.odd),
|
||
|
a++
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
if (e.footable === undefined || null === e.foobox) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
|
||
|
var i = {
|
||
|
striping: {
|
||
|
enabled: !0
|
||
|
},
|
||
|
classes: {
|
||
|
striping: {
|
||
|
odd: "footable-odd",
|
||
|
even: "footable-even"
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
e.footable.plugins.register(a, i)
|
||
|
})(jQuery, window);; (function (t, e, undefined) {
|
||
|
function a(t, e) {
|
||
|
e = e ? e : location.hash;
|
||
|
var a = RegExp("&" + t + "(?:=([^&]*))?(?=&|$)", "i");
|
||
|
return (e = e.replace(/^\#/, "&").match(a)) ? e[1] === undefined ? "" : decodeURIComponent(e[1]) : undefined
|
||
|
}
|
||
|
function i(e, a) {
|
||
|
var i = t(e.table).find("tbody").find("tr:not(.footable-row-detail, .footable-filtered)").length;
|
||
|
t(e.table).data("status_num_total", i);
|
||
|
var o = t(e.table).find("tbody").find("tr:not(.footable-row-detail)").filter(":visible").length;
|
||
|
t(e.table).data("status_num_shown", o);
|
||
|
var n = t(e.table).data("sorted"),
|
||
|
r = t(e.table).find("th")[n],
|
||
|
l = t(r).hasClass("footable-sorted-desc");
|
||
|
if (t(e.table).data("status_descending", l), e.pageInfo) {
|
||
|
var s = e.pageInfo.currentPage;
|
||
|
t(e.table).data("status_pagenum", s)
|
||
|
}
|
||
|
var d = "",
|
||
|
f = t(e.table).data("filter");
|
||
|
t(f).length && (d = t(f).val()),
|
||
|
t(e.table).data("status_filter_val", d);
|
||
|
var u, p, c;
|
||
|
if ("footable_row_expanded" == a.type && (u = a.row, u && (p = t(e.table).data("expanded_rows"), c = [], p && (c = p.split(",")), c.push(u.rowIndex), t(e.table).data("expanded_rows", c.join(",")))), "footable_row_collapsed" == a.type && (u = a.row)) {
|
||
|
p = t(e.table).data("expanded_rows"),
|
||
|
c = [],
|
||
|
p && (c = p.split(","));
|
||
|
var g = [];
|
||
|
for (var b in c) if (c[b] == u.rowIndex) {
|
||
|
g = c.splice(b, 1);
|
||
|
break
|
||
|
}
|
||
|
t(e.table).data("expanded_rows", g.join(","))
|
||
|
}
|
||
|
}
|
||
|
function o() {
|
||
|
var e = this;
|
||
|
e.name = "Footable LucidBookmarkable",
|
||
|
e.init = function (e) {
|
||
|
e.options.bookmarkable.enabled && t(e.table).bind({
|
||
|
footable_initialized: function () {
|
||
|
var i = e.table.id,
|
||
|
o = a(i + "_f"),
|
||
|
n = a(i + "_p"),
|
||
|
r = a(i + "_s"),
|
||
|
l = a(i + "_d"),
|
||
|
s = a(i + "_e");
|
||
|
if (o) {
|
||
|
var d = t(e.table).data("filter");
|
||
|
t(d).val(o),
|
||
|
t(e.table).trigger("footable_filter", {
|
||
|
filter: o
|
||
|
})
|
||
|
}
|
||
|
if (n && t(e.table).data("currentPage", n), r !== undefined) {
|
||
|
var f = t(e.table).data("footable-sort"),
|
||
|
u = !0;
|
||
|
"true" == l && (u = !1),
|
||
|
f.doSort(r, u)
|
||
|
} else t(e.table).trigger("footable_setup_paging");
|
||
|
if (s) {
|
||
|
var p = s.split(",");
|
||
|
for (var c in p) {
|
||
|
var g = t(e.table.rows[p[c]]);
|
||
|
g.find("> td:first").trigger("footable_toggle_row")
|
||
|
}
|
||
|
}
|
||
|
e.lucid_bookmark_read = !0
|
||
|
},
|
||
|
"footable_page_filled footable_redrawn footable_filtered footable_sorted footable_row_expanded footable_row_collapsed": function (a) {
|
||
|
if (i(e, a), e.lucid_bookmark_read) {
|
||
|
var o = e.table.id,
|
||
|
n = o + "_f",
|
||
|
r = o + "_p",
|
||
|
l = o + "_s",
|
||
|
s = o + "_d",
|
||
|
d = o + "_e",
|
||
|
f = location.hash.replace(/^\#/, "&"),
|
||
|
u = [n, r, l, s, d];
|
||
|
for (var p in u) {
|
||
|
var c = RegExp("&" + u[p] + "=([^&]*)", "g");
|
||
|
f = f.replace(c, "")
|
||
|
}
|
||
|
var g = {};
|
||
|
g[n] = t(e.table).data("status_filter_val"),
|
||
|
g[r] = t(e.table).data("status_pagenum"),
|
||
|
g[l] = t(e.table).data("sorted"),
|
||
|
g[s] = t(e.table).data("status_descending"),
|
||
|
g[d] = t(e.table).data("expanded_rows");
|
||
|
var b = [];
|
||
|
for (var h in g) g[h] !== undefined && b.push(h + "=" + encodeURIComponent(g[h]));
|
||
|
f.length && b.push(f),
|
||
|
location.hash = b.join("&")
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
if (e.footable === undefined || null === e.foobox) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
|
||
|
var n = {
|
||
|
bookmarkable: {
|
||
|
enabled: !1
|
||
|
}
|
||
|
};
|
||
|
e.footable.plugins.register(o, n)
|
||
|
})(jQuery, window);
|