You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
437 lines
18 KiB
437 lines
18 KiB
/*!
|
|
Responsive 2.0.0
|
|
2014-2015 SpryMedia Ltd - datatables.net/license
|
|
*/
|
|
(function (c) {
|
|
"function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (l) {
|
|
return c(l, window, document)
|
|
}) : "object" === typeof exports ? module.exports = function (l, k) {
|
|
l || (l = window);
|
|
if (!k || !k.fn.dataTable) k = require("datatables.net")(l, k).$;
|
|
return c(k, l, l.document)
|
|
} : c(jQuery, window, document)
|
|
})(function (c, l, k, p) {
|
|
var n = c.fn.dataTable,
|
|
j = function (a, b) {
|
|
if (!n.versionCheck || !n.versionCheck("1.10.3")) throw "DataTables Responsive requires DataTables 1.10.3 or newer";
|
|
this.s = {
|
|
dt: new n.Api(a),
|
|
columns: [],
|
|
current: []
|
|
};
|
|
this.s.dt.settings()[0].responsive || (b && "string" === typeof b.details && (b.details = {
|
|
type: b.details
|
|
}), this.c = c.extend(!0, {}, j.defaults, n.defaults.responsive, b), a.responsive = this, this._constructor())
|
|
};
|
|
c.extend(j.prototype, {
|
|
_constructor: function () {
|
|
var a = this,
|
|
b = this.s.dt,
|
|
d = b.settings()[0];
|
|
b.settings()[0]._responsive = this;
|
|
c(l).on("resize.dtr orientationchange.dtr", n.util.throttle(function () {
|
|
a._resize()
|
|
}));
|
|
d.oApi._fnCallbackReg(d, "aoRowCreatedCallback", function (e) {
|
|
-1 !== c.inArray(!1, a.s.current) &&
|
|
c("td, th", e).each(function (e) {
|
|
e = b.column.index("toData", e);
|
|
!1 === a.s.current[e] && c(this).css("display", "none")
|
|
})
|
|
});
|
|
b.on("destroy.dtr", function () {
|
|
b.off(".dtr");
|
|
c(b.table().body()).off(".dtr");
|
|
c(l).off("resize.dtr orientationchange.dtr");
|
|
c.each(a.s.current, function (e, b) {
|
|
!1 === b && a._setColumnVis(e, !0)
|
|
})
|
|
});
|
|
this.c.breakpoints.sort(function (a, b) {
|
|
return a.width < b.width ? 1 : a.width > b.width ? -1 : 0
|
|
});
|
|
this._classLogic();
|
|
this._resizeAuto();
|
|
d = this.c.details;
|
|
!1 !== d.type && (a._detailsInit(), b.on("column-visibility.dtr",
|
|
function () {
|
|
a._classLogic();
|
|
a._resizeAuto();
|
|
a._resize()
|
|
}), b.on("draw.dtr", function () {
|
|
a._redrawChildren()
|
|
}), c(b.table().node()).addClass("dtr-" + d.type));
|
|
b.on("column-reorder.dtr", function (b, d, c) {
|
|
if (c.drop) {
|
|
a._classLogic();
|
|
a._resizeAuto();
|
|
a._resize()
|
|
}
|
|
});
|
|
this._resize()
|
|
},
|
|
_columnsVisiblity: function (a) {
|
|
var b = this.s.dt,
|
|
d = this.s.columns,
|
|
e, f, h = d.map(function (a, b) {
|
|
return {
|
|
columnIdx: b,
|
|
priority: a.priority
|
|
}
|
|
}).sort(function (a, b) {
|
|
return a.priority !== b.priority ? a.priority - b.priority : a.columnIdx - b.columnIdx
|
|
}),
|
|
g = c.map(d,
|
|
function (b) {
|
|
return b.auto && null === b.minWidth ? !1 : !0 === b.auto ? "-" : -1 !== c.inArray(a, b.includeIn)
|
|
}),
|
|
m = 0;
|
|
e = 0;
|
|
for (f = g.length; e < f; e++) !0 === g[e] && (m += d[e].minWidth);
|
|
e = b.settings()[0].oScroll;
|
|
e = e.sY || e.sX ? e.iBarWidth : 0;
|
|
b = b.table().container().offsetWidth - e - m;
|
|
e = 0;
|
|
for (f = g.length; e < f; e++) d[e].control && (b -= d[e].minWidth);
|
|
m = !1;
|
|
e = 0;
|
|
for (f = h.length; e < f; e++) {
|
|
var i = h[e].columnIdx;
|
|
"-" === g[i] && (!d[i].control && d[i].minWidth) && (m || 0 > b - d[i].minWidth ? (m = !0, g[i] = !1) : g[i] = !0, b -= d[i].minWidth)
|
|
}
|
|
h = !1;
|
|
e = 0;
|
|
for (f = d.length; e < f; e++)
|
|
if (!d[e].control &&
|
|
!d[e].never && !g[e]) {
|
|
h = !0;
|
|
break
|
|
}
|
|
e = 0;
|
|
for (f = d.length; e < f; e++) d[e].control && (g[e] = h); - 1 === c.inArray(!0, g) && (g[0] = !0);
|
|
return g
|
|
},
|
|
_classLogic: function () {
|
|
var a = this,
|
|
b = this.c.breakpoints,
|
|
d = this.s.dt,
|
|
e = d.columns().eq(0).map(function (a) {
|
|
var b = this.column(a),
|
|
e = b.header().className,
|
|
a = d.settings()[0].aoColumns[a].responsivePriority;
|
|
a === p && (a = c(b.header).data("priority") !== p ? 1 * c(b.header).data("priority") : 1E4);
|
|
return {
|
|
className: e,
|
|
includeIn: [],
|
|
auto: !1,
|
|
control: !1,
|
|
never: e.match(/\bnever\b/) ? !0 : !1,
|
|
priority: a
|
|
}
|
|
}),
|
|
f = function (a,
|
|
b) {
|
|
var d = e[a].includeIn; - 1 === c.inArray(b, d) && d.push(b)
|
|
},
|
|
h = function (d, c, i, h) {
|
|
if (i)
|
|
if ("max-" === i) {
|
|
h = a._find(c).width;
|
|
c = 0;
|
|
for (i = b.length; c < i; c++) b[c].width <= h && f(d, b[c].name)
|
|
} else if ("min-" === i) {
|
|
h = a._find(c).width;
|
|
c = 0;
|
|
for (i = b.length; c < i; c++) b[c].width >= h && f(d, b[c].name)
|
|
} else {
|
|
if ("not-" === i) {
|
|
c = 0;
|
|
for (i = b.length; c < i; c++) - 1 === b[c].name.indexOf(h) && f(d, b[c].name)
|
|
}
|
|
} else e[d].includeIn.push(c)
|
|
};
|
|
e.each(function (a, e) {
|
|
for (var d = a.className.split(" "), f = !1, j = 0, l = d.length; j < l; j++) {
|
|
var k = c.trim(d[j]);
|
|
if ("all" === k) {
|
|
f = !0;
|
|
a.includeIn = c.map(b, function (a) {
|
|
return a.name
|
|
});
|
|
return
|
|
}
|
|
if ("none" === k || a.never) {
|
|
f = !0;
|
|
return
|
|
}
|
|
if ("control" === k) {
|
|
f = !0;
|
|
a.control = !0;
|
|
return
|
|
}
|
|
c.each(b, function (a, b) {
|
|
var c = b.name.split("-"),
|
|
d = k.match(RegExp("(min\\-|max\\-|not\\-)?(" + c[0] + ")(\\-[_a-zA-Z0-9])?"));
|
|
d && (f = !0, d[2] === c[0] && d[3] === "-" + c[1] ? h(e, b.name, d[1], d[2] + d[3]) : d[2] === c[0] && !d[3] && h(e, b.name, d[1], d[2]))
|
|
})
|
|
}
|
|
f || (a.auto = !0)
|
|
});
|
|
this.s.columns = e
|
|
},
|
|
_detailsDisplay: function (a, b) {
|
|
var d = this,
|
|
e = this.s.dt,
|
|
f = this.c.details.display(a, b, function () {
|
|
return d.c.details.renderer(e,
|
|
a[0], d._detailsObj(a[0]))
|
|
});
|
|
(!0 === f || !1 === f) && c(e.table().node()).triggerHandler("responsive-display.dt", [e, a, f, b])
|
|
},
|
|
_detailsInit: function () {
|
|
var a = this,
|
|
b = this.s.dt,
|
|
d = this.c.details;
|
|
"inline" === d.type && (d.target = "td:first-child");
|
|
b.on("draw.dtr", function () {
|
|
a._tabIndexes()
|
|
});
|
|
a._tabIndexes();
|
|
c(b.table().body()).on("keyup.dtr", "td", function (a) {
|
|
a.keyCode === 13 && c(this).data("dtr-keyboard") && c(this).click()
|
|
});
|
|
var e = d.target,
|
|
d = "string" === typeof e ? e : "td";
|
|
c(b.table().body()).on("mousedown.dtr", d, function (a) {
|
|
a.preventDefault()
|
|
}).on("click.dtr",
|
|
d,
|
|
function () {
|
|
if (c(b.table().node()).hasClass("collapsed") && b.row(c(this).closest("tr")).length) {
|
|
if (typeof e === "number") {
|
|
var d = e < 0 ? b.columns().eq(0).length + e : e;
|
|
if (b.cell(this).index().column !== d) return
|
|
}
|
|
d = b.row(c(this).closest("tr"));
|
|
a._detailsDisplay(d, false)
|
|
}
|
|
})
|
|
},
|
|
_detailsObj: function (a) {
|
|
var b = this,
|
|
d = this.s.dt;
|
|
return c.map(this.s.columns, function (c, f) {
|
|
if (!c.never) return {
|
|
title: d.settings()[0].aoColumns[f].sTitle,
|
|
data: d.cell(a, f).render(b.c.orthogonal),
|
|
hidden: d.column(f).visible() && !b.s.current[f]
|
|
}
|
|
})
|
|
},
|
|
_find: function (a) {
|
|
for (var b = this.c.breakpoints, d = 0, c = b.length; d < c; d++)
|
|
if (b[d].name === a) return b[d]
|
|
},
|
|
_redrawChildren: function () {
|
|
var a = this,
|
|
b = this.s.dt;
|
|
b.rows({
|
|
page: "current"
|
|
}).iterator("row", function (c, e) {
|
|
b.row(e);
|
|
a._detailsDisplay(b.row(e), !0)
|
|
})
|
|
},
|
|
_resize: function () {
|
|
var a = this,
|
|
b = this.s.dt,
|
|
d = c(l).width(),
|
|
e = this.c.breakpoints,
|
|
f = e[0].name,
|
|
h = this.s.columns,
|
|
g, m = this.s.current.slice();
|
|
for (g = e.length - 1; 0 <= g; g--)
|
|
if (d <= e[g].width) {
|
|
f = e[g].name;
|
|
break
|
|
}
|
|
var i = this._columnsVisiblity(f);
|
|
this.s.current = i;
|
|
e = !1;
|
|
g = 0;
|
|
for (d = h.length; g < d; g++)
|
|
if (!1 === i[g] && !h[g].never) {
|
|
e = !0;
|
|
break
|
|
}
|
|
c(b.table().node()).toggleClass("collapsed", e);
|
|
var j = !1;
|
|
b.columns().eq(0).each(function (b, c) {
|
|
i[c] !== m[c] && (j = !0, a._setColumnVis(b, i[c]))
|
|
});
|
|
j && this._redrawChildren()
|
|
},
|
|
_resizeAuto: function () {
|
|
var a = this.s.dt,
|
|
b = this.s.columns;
|
|
if (this.c.auto && -1 !== c.inArray(!0, c.map(b, function (a) {
|
|
return a.auto
|
|
}))) {
|
|
a.table().node();
|
|
var d = a.table().node().cloneNode(!1),
|
|
e = c(a.table().header().cloneNode(!1)).appendTo(d),
|
|
f = c(a.table().body().cloneNode(!1)).appendTo(d),
|
|
h = a.columns().header().filter(function (b) {
|
|
return a.column(b).visible()
|
|
}).to$().clone(!1).css("display", "table-cell");
|
|
c(f).append(c(a.rows({
|
|
page: "current"
|
|
}).nodes()).clone(!1)).find("th, td").css("display", "");
|
|
if (f = a.table().footer()) {
|
|
var f = c(f.cloneNode(!1)).appendTo(d),
|
|
g = a.columns().header().filter(function (b) {
|
|
return a.column(b).visible()
|
|
}).to$().clone(!1).css("display", "table-cell");
|
|
c("<tr/>").append(g).appendTo(f)
|
|
}
|
|
c("<tr/>").append(h).appendTo(e);
|
|
"inline" === this.c.details.type && c(d).addClass("dtr-inline collapsed");
|
|
d = c("<div/>").css({
|
|
width: 1,
|
|
height: 1,
|
|
overflow: "hidden"
|
|
}).append(d);
|
|
d.insertBefore(a.table().node());
|
|
h.each(function (c) {
|
|
c = a.column.index("fromVisible", c);
|
|
b[c].minWidth = this.offsetWidth || 0
|
|
});
|
|
d.remove()
|
|
}
|
|
},
|
|
_setColumnVis: function (a, b) {
|
|
var d = this.s.dt,
|
|
e = b ? "" : "none";
|
|
c(d.column(a).header()).css("display", e);
|
|
c(d.column(a).footer()).css("display", e);
|
|
d.column(a).nodes().to$().css("display", e)
|
|
},
|
|
_tabIndexes: function () {
|
|
var a = this.s.dt,
|
|
b = a.cells({
|
|
page: "current"
|
|
}).nodes().to$(),
|
|
d = a.settings()[0],
|
|
e = this.c.details.target;
|
|
b.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");
|
|
c("number" === typeof e ? ":eq(" + e + ")" : e, a.rows({
|
|
page: "current"
|
|
}).nodes()).attr("tabIndex", d.iTabIndex).data("dtr-keyboard", 1)
|
|
}
|
|
});
|
|
j.breakpoints = [{
|
|
name: "desktop",
|
|
width: Infinity
|
|
}, {
|
|
name: "tablet-l",
|
|
width: 1024
|
|
}, {
|
|
name: "tablet-p",
|
|
width: 768
|
|
}, {
|
|
name: "mobile-l",
|
|
width: 480
|
|
}, {
|
|
name: "mobile-p",
|
|
width: 320
|
|
}];
|
|
j.display = {
|
|
childRow: function (a, b, d) {
|
|
if (b) {
|
|
if (c(a.node()).hasClass("parent")) return a.child(d(), "child").show(), !0
|
|
} else {
|
|
if (a.child.isShown()) return a.child(!1),
|
|
c(a.node()).removeClass("parent"), !1;
|
|
a.child(d(), "child").show();
|
|
c(a.node()).addClass("parent");
|
|
return !0
|
|
}
|
|
},
|
|
childRowImmediate: function (a, b, d) {
|
|
if (!b && a.child.isShown() || !a.responsive.hasHidden()) return a.child(!1), c(a.node()).removeClass("parent"), !1;
|
|
a.child(d(), "child").show();
|
|
c(a.node()).addClass("parent");
|
|
return !0
|
|
},
|
|
modal: function (a) {
|
|
return function (b, d, e) {
|
|
if (d) c("div.dtr-modal-content").empty().append(e());
|
|
else {
|
|
var f = function () {
|
|
h.remove();
|
|
c(k).off("keypress.dtr")
|
|
},
|
|
h = c('<div class="dtr-modal"/>').append(c('<div class="dtr-modal-display"/>').append(c('<div class="dtr-modal-content"/>').append(e())).append(c('<div class="dtr-modal-close">×</div>').click(function () {
|
|
f()
|
|
}))).append(c('<div class="dtr-modal-background"/>').click(function () {
|
|
f()
|
|
})).appendTo("body");
|
|
a && a.header && h.find("div.dtr-modal-content").prepend("<h2>" + a.header(b) + "</h2>");
|
|
c(k).on("keyup.dtr", function (a) {
|
|
27 === a.keyCode && (a.stopPropagation(), f())
|
|
})
|
|
}
|
|
}
|
|
}
|
|
};
|
|
j.defaults = {
|
|
breakpoints: j.breakpoints,
|
|
auto: !0,
|
|
details: {
|
|
display: j.display.childRow,
|
|
renderer: function (a, b, d) {
|
|
return (a = c.map(d, function (a, b) {
|
|
return a.hidden ? '<li data-dtr-index="' + b + '"><span class="dtr-title">' + a.title + '</span> <span class="dtr-data">' + a.data + "</span></li>" : ""
|
|
}).join("")) ? c('<ul data-dtr-index="' + b + '"/>').append(a) : !1
|
|
},
|
|
target: 0,
|
|
type: "inline"
|
|
},
|
|
orthogonal: "display"
|
|
};
|
|
var o = c.fn.dataTable.Api;
|
|
o.register("responsive()", function () {
|
|
return this
|
|
});
|
|
o.register("responsive.index()", function (a) {
|
|
a = c(a);
|
|
return {
|
|
column: a.data("dtr-index"),
|
|
row: a.parent().data("dtr-index")
|
|
}
|
|
});
|
|
o.register("responsive.rebuild()", function () {
|
|
return this.iterator("table", function (a) {
|
|
a._responsive && a._responsive._classLogic()
|
|
})
|
|
});
|
|
o.register("responsive.recalc()", function () {
|
|
return this.iterator("table", function (a) {
|
|
a._responsive && (a._responsive._resizeAuto(), a._responsive._resize())
|
|
})
|
|
});
|
|
o.register("responsive.hasHidden()", function () {
|
|
var a = this.context[0];
|
|
return a._responsive ? -1 !== c.inArray(!1, a._responsive.s.current) : !1
|
|
});
|
|
j.version = "2.0.0";
|
|
c.fn.dataTable.Responsive = j;
|
|
c.fn.DataTable.Responsive = j;
|
|
c(k).on("init.dt.dtr", function (a, b) {
|
|
if ("dt" === a.namespace && (c(b.nTable).hasClass("responsive") || c(b.nTable).hasClass("dt-responsive") || b.oInit.responsive || n.defaults.responsive)) {
|
|
var d = b.oInit.responsive;
|
|
!1 !== d && new j(b, c.isPlainObject(d) ? d : {})
|
|
}
|
|
});
|
|
return j
|
|
});
|