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.
 
 
 
 
 

686 lines
28 KiB

/*!
Buttons for DataTables 1.1.0
©2015 SpryMedia Ltd - datatables.net/license
*/
(function (e) {
"function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (n) {
return e(n, window, document)
}) : "object" === typeof exports ? module.exports = function (n, o) {
n || (n = window);
if (!o || !o.fn.dataTable) o = require("datatables.net")(n, o).$;
return e(o, n, n.document)
} : e(jQuery, window, document)
})(function (e, n, o, m) {
var j = e.fn.dataTable,
s = 0,
t = 0,
k = j.ext.buttons,
l = function (a, b) {
!0 === b && (b = {});
e.isArray(b) && (b = {
buttons: b
});
this.c = e.extend(!0, {}, l.defaults, b);
b.buttons && (this.c.buttons = b.buttons);
this.s = {
dt: new j.Api(a),
buttons: [],
subButtons: [],
listenKeys: "",
namespace: "dtb" + s++
};
this.dom = {
container: e("<" + this.c.dom.container.tag + "/>").addClass(this.c.dom.container.className)
};
this._constructor()
};
e.extend(l.prototype, {
action: function (a, b) {
var c = this._indexToButton(a).conf;
if (b === m) return c.action;
c.action = b;
return this
},
active: function (a, b) {
this._indexToButton(a).node.toggleClass(this.c.dom.button.active, b === m ? !0 : b);
return this
},
add: function (a, b) {
if ("string" === typeof a && -1 !== a.indexOf("-")) {
var c =
a.split("-");
this.c.buttons[1 * c[0]].buttons.splice(1 * c[1], 0, b)
} else this.c.buttons.splice(1 * a, 0, b);
this.dom.container.empty();
this._buildButtons(this.c.buttons);
return this
},
container: function () {
return this.dom.container
},
disable: function (a) {
this._indexToButton(a).node.addClass(this.c.dom.button.disabled);
return this
},
destroy: function () {
e("body").off("keyup." + this.s.namespace);
var a = this.s.buttons,
b = this.s.subButtons,
c, d, f;
c = 0;
for (a = a.length; c < a; c++) {
this.removePrep(c);
d = 0;
for (f = b[c].length; d < f; d++) this.removePrep(c +
"-" + d)
}
this.removeCommit();
this.dom.container.remove();
b = this.s.dt.settings()[0];
c = 0;
for (a = b.length; c < a; c++)
if (b.inst === this) {
b.splice(c, 1);
break
}
return this
},
enable: function (a, b) {
if (!1 === b) return this.disable(a);
this._indexToButton(a).node.removeClass(this.c.dom.button.disabled);
return this
},
name: function () {
return this.c.name
},
node: function (a) {
return this._indexToButton(a).node
},
removeCommit: function () {
var a = this.s.buttons,
b = this.s.subButtons,
c, d;
for (c = a.length - 1; 0 <= c; c--) null === a[c] && (a.splice(c,
1), b.splice(c, 1), this.c.buttons.splice(c, 1));
c = 0;
for (a = b.length; c < a; c++)
for (d = b[c].length - 1; 0 <= d; d--) null === b[c][d] && (b[c].splice(d, 1), this.c.buttons[c].buttons.splice(d, 1));
return this
},
removePrep: function (a) {
var b, c = this.s.dt;
if ("number" === typeof a || -1 === a.indexOf("-")) b = this.s.buttons[1 * a], b.conf.destroy && b.conf.destroy.call(c.button(a), c, b, b.conf), b.node.remove(), this._removeKey(b.conf), this.s.buttons[1 * a] = null;
else {
var d = a.split("-");
b = this.s.subButtons[1 * d[0]][1 * d[1]];
b.conf.destroy && b.conf.destroy.call(c.button(a),
c, b, b.conf);
b.node.remove();
this._removeKey(b.conf);
this.s.subButtons[1 * d[0]][1 * d[1]] = null
}
return this
},
text: function (a, b) {
var c = this._indexToButton(a),
d = this.c.dom.collection.buttonLiner,
d = "string" === typeof a && -1 !== a.indexOf("-") && d && d.tag ? d.tag : this.c.dom.buttonLiner.tag,
e = this.s.dt,
g = function (a) {
return "function" === typeof a ? a(e, c.node, c.conf) : a
};
if (b === m) return g(c.conf.text);
c.conf.text = b;
d ? c.node.children(d).html(g(b)) : c.node.html(g(b));
return this
},
toIndex: function (a) {
var b, c, d, e;
d = this.s.buttons;
var g = this.s.subButtons;
b = 0;
for (c = d.length; b < c; b++)
if (d[b].node[0] === a) return b + "";
b = 0;
for (c = g.length; b < c; b++) {
d = 0;
for (e = g[b].length; d < e; d++)
if (g[b][d].node[0] === a) return b + "-" + d
}
},
_constructor: function () {
var a = this,
b = this.s.dt,
c = b.settings()[0];
c._buttons || (c._buttons = []);
c._buttons.push({
inst: this,
name: this.c.name
});
this._buildButtons(this.c.buttons);
b.on("destroy", function () {
a.destroy()
});
e("body").on("keyup." + this.s.namespace, function (b) {
if (!o.activeElement || o.activeElement === o.body) {
var c = String.fromCharCode(b.keyCode).toLowerCase();
a.s.listenKeys.toLowerCase().indexOf(c) !== -1 && a._keypress(c, b)
}
})
},
_addKey: function (a) {
a.key && (this.s.listenKeys += e.isPlainObject(a.key) ? a.key.key : a.key)
},
_buildButtons: function (a, b, c) {
var d = this.s.dt;
b || (b = this.dom.container, this.s.buttons = [], this.s.subButtons = []);
for (var f = 0, g = a.length; f < g; f++) {
var h = this._resolveExtends(a[f]);
if (h)
if (e.isArray(h)) this._buildButtons(h, b, c);
else {
var i = this._buildButton(h, c !== m ? !0 : !1);
if (i) {
var q = i.node;
b.append(i.inserter);
c === m ? (this.s.buttons.push({
node: q,
conf: h,
inserter: i.inserter
}), this.s.subButtons.push([])) : this.s.subButtons[c].push({
node: q,
conf: h,
inserter: i.inserter
});
h.buttons && (i = this.c.dom.collection, h._collection = e("<" + i.tag + "/>").addClass(i.className), this._buildButtons(h.buttons, h._collection, f));
h.init && h.init.call(d.button(q), d, q, h)
}
}
}
},
_buildButton: function (a, b) {
var c = this.c.dom.button,
d = this.c.dom.buttonLiner,
f = this.c.dom.collection,
g = this.s.dt,
h = function (b) {
return "function" === typeof b ? b(g, i, a) : b
};
b && f.button && (c = f.button);
b && f.buttonLiner &&
(d = f.buttonLiner);
if (a.available && !a.available(g, a)) return !1;
var i = e("<" + c.tag + "/>").addClass(c.className).attr("tabindex", this.s.dt.settings()[0].iTabIndex).attr("aria-controls", this.s.dt.table().node().id).on("click.dtb", function (b) {
b.preventDefault();
!i.hasClass(c.disabled) && a.action && a.action.call(g.button(i), b, g, i, a);
i.blur()
}).on("keyup.dtb", function (b) {
b.keyCode === 13 && !i.hasClass(c.disabled) && a.action && a.action.call(g.button(i), b, g, i, a)
});
d.tag ? i.append(e("<" + d.tag + "/>").html(h(a.text)).addClass(d.className)) :
i.html(h(a.text));
!1 === a.enabled && i.addClass(c.disabled);
a.className && i.addClass(a.className);
a.titleAttr && i.attr("title", a.titleAttr);
a.namespace || (a.namespace = ".dt-button-" + t++);
d = (d = this.c.dom.buttonContainer) ? e("<" + d.tag + "/>").addClass(d.className).append(i) : i;
this._addKey(a);
return {
node: i,
inserter: d
}
},
_indexToButton: function (a) {
if ("number" === typeof a || -1 === a.indexOf("-")) return this.s.buttons[1 * a];
a = a.split("-");
return this.s.subButtons[1 * a[0]][1 * a[1]]
},
_keypress: function (a, b) {
var c, d, f, g;
f =
this.s.buttons;
var h = this.s.subButtons,
i = function (c, d) {
if (c.key)
if (c.key === a) d.click();
else if (e.isPlainObject(c.key) && c.key.key === a && (!c.key.shiftKey || b.shiftKey))
if (!c.key.altKey || b.altKey)
if (!c.key.ctrlKey || b.ctrlKey) (!c.key.metaKey || b.metaKey) && d.click()
};
c = 0;
for (d = f.length; c < d; c++) i(f[c].conf, f[c].node);
c = 0;
for (d = h.length; c < d; c++) {
f = 0;
for (g = h[c].length; f < g; f++) i(h[c][f].conf, h[c][f].node)
}
},
_removeKey: function (a) {
if (a.key) {
var b = e.isPlainObject(a.key) ? a.key.key : a.key,
a = this.s.listenKeys.split(""),
b = e.inArray(b, a);
a.splice(b, 1);
this.s.listenKeys = a.join("")
}
},
_resolveExtends: function (a) {
for (var b = this.s.dt, c, d, f = function (c) {
for (var d = 0; !e.isPlainObject(c) && !e.isArray(c);) {
if (c === m) return;
if ("function" === typeof c) {
if (c = c(b, a), !c) return !1
} else if ("string" === typeof c) {
if (!k[c]) throw "Unknown button type: " + c;
c = k[c]
}
d++;
if (30 < d) throw "Buttons: Too many iterations";
}
return e.isArray(c) ? c : e.extend({}, c)
}, a = f(a); a && a.extend;) {
if (!k[a.extend]) throw "Cannot extend unknown button type: " + a.extend;
var g =
f(k[a.extend]);
if (e.isArray(g)) return g;
if (!g) return !1;
c = g.className;
a = e.extend({}, g, a);
c && a.className !== c && (a.className = c + " " + a.className);
var h = a.postfixButtons;
if (h) {
a.buttons || (a.buttons = []);
c = 0;
for (d = h.length; c < d; c++) a.buttons.push(h[c]);
a.postfixButtons = null
}
if (h = a.prefixButtons) {
a.buttons || (a.buttons = []);
c = 0;
for (d = h.length; c < d; c++) a.buttons.splice(c, 0, h[c]);
a.prefixButtons = null
}
a.extend = g.extend
}
return a
}
});
l.background = function (a, b, c) {
c === m && (c = 400);
a ? e("<div/>").addClass(b).css("display",
"none").appendTo("body").fadeIn(c) : e("body > div." + b).fadeOut(c, function () {
e(this).remove()
})
};
l.instanceSelector = function (a, b) {
if (!a) return e.map(b, function (a) {
return a.inst
});
var c = [],
d = e.map(b, function (a) {
return a.name
}),
f = function (a) {
if (e.isArray(a))
for (var h = 0, i = a.length; h < i; h++) f(a[h]);
else "string" === typeof a ? -1 !== a.indexOf(",") ? f(a.split(",")) : (a = e.inArray(e.trim(a), d), -1 !== a && c.push(b[a].inst)) : "number" === typeof a && c.push(b[a].inst)
};
f(a);
return c
};
l.buttonSelector = function (a, b) {
for (var c = [], d = function (a, b) {
var f, g, j = [];
e.each(b.s.buttons, function (a, b) {
null !== b && j.push({
node: b.node[0],
name: b.name
})
});
e.each(b.s.subButtons, function (a, b) {
e.each(b, function (a, b) {
null !== b && j.push({
node: b.node[0],
name: b.name
})
})
});
f = e.map(j, function (a) {
return a.node
});
if (e.isArray(a) || a instanceof e) {
f = 0;
for (g = a.length; f < g; f++) d(a[f], b)
} else if (null === a || a === m || "*" === a) {
f = 0;
for (g = j.length; f < g; f++) c.push({
inst: b,
idx: b.toIndex(j[f].node)
})
} else if ("number" === typeof a) c.push({
inst: b,
idx: a
});
else if ("string" ===
typeof a)
if (-1 !== a.indexOf(",")) {
var k = a.split(",");
f = 0;
for (g = k.length; f < g; f++) d(e.trim(k[f]), b)
} else if (a.match(/^\d+(\-\d+)?$/)) c.push({
inst: b,
idx: a
});
else if (-1 !== a.indexOf(":name")) {
k = a.replace(":name", "");
f = 0;
for (g = j.length; f < g; f++) j[f].name === k && c.push({
inst: b,
idx: b.toIndex(j[f].node)
})
} else e(f).filter(a).each(function () {
c.push({
inst: b,
idx: b.toIndex(this)
})
});
else "object" === typeof a && a.nodeName && (g = e.inArray(a, f), -1 !== g && c.push({
inst: b,
idx: b.toIndex(f[g])
}))
}, f = 0, g = a.length; f < g; f++) d(b, a[f]);
return c
};
l.defaults = {
buttons: ["copy", "excel", "csv", "pdf", "print"],
name: "main",
tabIndex: 0,
dom: {
container: {
tag: "div",
className: "dt-buttons"
},
collection: {
tag: "div",
className: "dt-button-collection"
},
button: {
tag: "a",
className: "dt-button",
active: "active",
disabled: "disabled"
},
buttonLiner: {
tag: "span",
className: ""
}
}
};
l.version = "1.1.0";
e.extend(k, {
collection: {
text: function (a) {
return a.i18n("buttons.collection", "Collection")
},
className: "buttons-collection",
action: function (a, b, c, d) {
var a = c.offset(),
b = e(b.table().container()),
f = !1;
e("div.dt-button-background").length && (f = e("div.dt-button-collection").offset(), e(o).trigger("click.dtb-collection"));
d._collection.addClass(d.collectionLayout).css("display", "none").appendTo("body").fadeIn(d.fade);
var g = d._collection.css("position");
f && "absolute" === g ? d._collection.css({
top: f.top + 5,
left: f.left + 5
}) : "absolute" === g ? (d._collection.css({
top: a.top + c.outerHeight(),
left: a.left
}), c = a.left + d._collection.outerWidth(), b = b.offset().left + b.width(), c > b && d._collection.css("left", a.left - (c - b))) :
(a = d._collection.height() / 2, a > e(n).height() / 2 && (a = e(n).height() / 2), d._collection.css("marginTop", -1 * a));
d.background && l.background(!0, d.backgroundClassName, d.fade);
setTimeout(function () {
e("div.dt-button-background").on("click.dtb-collection", function () { });
e("body").on("click.dtb-collection", function (a) {
if (!e(a.target).parents().andSelf().filter(d._collection).length) {
d._collection.fadeOut(d.fade, function () {
d._collection.detach()
});
e("div.dt-button-background").off("click.dtb-collection");
l.background(false,
d.backgroundClassName, d.fade);
e("body").off("click.dtb-collection")
}
})
}, 10)
},
background: !0,
collectionLayout: "",
backgroundClassName: "dt-button-background",
fade: 400
},
copy: function (a, b) {
if (k.copyHtml5) return "copyHtml5";
if (k.copyFlash && k.copyFlash.available(a, b)) return "copyFlash"
},
csv: function (a, b) {
if (k.csvHtml5 && k.csvHtml5.available(a, b)) return "csvHtml5";
if (k.csvFlash && k.csvFlash.available(a, b)) return "csvFlash"
},
excel: function (a, b) {
if (k.excelHtml5 && k.excelHtml5.available(a, b)) return "excelHtml5";
if (k.excelFlash &&
k.excelFlash.available(a, b)) return "excelFlash"
},
pdf: function (a, b) {
if (k.pdfHtml5 && k.pdfHtml5.available(a, b)) return "pdfHtml5";
if (k.pdfFlash && k.pdfFlash.available(a, b)) return "pdfFlash"
},
pageLength: function (a) {
var a = a.settings()[0].aLengthMenu,
b = e.isArray(a[0]) ? a[0] : a,
c = e.isArray(a[0]) ? a[1] : a,
d = function (a) {
return a.i18n("buttons.pageLength", {
"-1": "Show all rows",
_: "Show %d rows"
}, a.page.len())
};
return {
extend: "collection",
text: d,
className: "buttons-page-length",
buttons: e.map(b, function (a, b) {
return {
text: c[b],
action: function (b, c) {
c.page.len(a).draw()
},
init: function (b, c, d) {
var e = this,
c = function () {
e.active(b.page.len() === a)
};
b.on("length.dt" + d.namespace, c);
c()
},
destroy: function (a, b, c) {
a.off("length.dt" + c.namespace)
}
}
}),
init: function (a, b, c) {
var e = this;
a.on("length.dt" + c.namespace, function () {
e.text(d(a))
})
},
destroy: function (a, b, c) {
a.off("length.dt" + c.namespace)
}
}
}
});
j.Api.register("buttons()", function (a, b) {
b === m && (b = a, a = m);
return this.iterator(!0, "table", function (c) {
if (c._buttons) return l.buttonSelector(l.instanceSelector(a,
c._buttons), b)
}, !0)
});
j.Api.register("button()", function (a, b) {
var c = this.buttons(a, b);
1 < c.length && c.splice(1, c.length);
return c
});
j.Api.register(["buttons().active()", "button().active()"], function (a) {
return this.each(function (b) {
b.inst.active(b.idx, a)
})
});
j.Api.registerPlural("buttons().action()", "button().action()", function (a) {
return a === m ? this.map(function (a) {
return a.inst.action(a.idx)
}) : this.each(function (b) {
b.inst.action(b.idx, a)
})
});
j.Api.register(["buttons().enable()", "button().enable()"],
function (a) {
return this.each(function (b) {
b.inst.enable(b.idx, a)
})
});
j.Api.register(["buttons().disable()", "button().disable()"], function () {
return this.each(function (a) {
a.inst.disable(a.idx)
})
});
j.Api.registerPlural("buttons().nodes()", "button().node()", function () {
var a = e();
e(this.each(function (b) {
a = a.add(b.inst.node(b.idx))
}));
return a
});
j.Api.registerPlural("buttons().text()", "button().text()", function (a) {
return a === m ? this.map(function (a) {
return a.inst.text(a.idx)
}) : this.each(function (b) {
b.inst.text(b.idx,
a)
})
});
j.Api.registerPlural("buttons().trigger()", "button().trigger()", function () {
return this.each(function (a) {
a.inst.node(a.idx).trigger("click")
})
});
j.Api.registerPlural("buttons().containers()", "buttons().container()", function () {
var a = e();
e(this.each(function (b) {
a = a.add(b.inst.container())
}));
return a
});
j.Api.register("button().add()", function (a, b) {
1 === this.length && this[0].inst.add(a, b);
return this.button(a)
});
j.Api.register("buttons().destroy()", function () {
this.pluck("inst").unique().each(function (a) {
a.destroy()
});
return this
});
j.Api.registerPlural("buttons().remove()", "buttons().remove()", function () {
this.each(function (a) {
a.inst.removePrep(a.idx)
});
this.pluck("inst").unique().each(function (a) {
a.removeCommit()
});
return this
});
var p;
j.Api.register("buttons.info()", function (a, b, c) {
var d = this;
if (!1 === a) return e("#datatables_buttons_info").fadeOut(function () {
e(this).remove()
}), clearTimeout(p), p = null, this;
p && clearTimeout(p);
e("#datatables_buttons_info").length && e("#datatables_buttons_info").remove();
e('<div id="datatables_buttons_info" class="dt-button-info"/>').html(a ?
"<h2>" + a + "</h2>" : "").append(e("<div/>")["string" === typeof b ? "html" : "append"](b)).css("display", "none").appendTo("body").fadeIn();
c !== m && 0 !== c && (p = setTimeout(function () {
d.buttons.info(!1)
}, c));
return this
});
j.Api.register("buttons.exportData()", function (a) {
if (this.context.length) {
for (var b = new j.Api(this.context[0]), c = e.extend(!0, {}, {
rows: null,
columns: "",
modifier: {
search: "applied",
order: "applied"
},
orthogonal: "display",
stripHtml: !0,
stripNewlines: !0,
decodeEntities: !0,
trim: !0,
format: {
header: function (a) {
return d(a)
},
footer: function (a) {
return d(a)
},
body: function (a) {
return d(a)
}
}
}, a), d = function (a) {
if ("string" !== typeof a) return a;
c.stripHtml && (a = a.replace(/<.*?>/g, ""));
c.trim && (a = a.replace(/^\s+|\s+$/g, ""));
c.stripNewlines && (a = a.replace(/\n/g, " "));
c.decodeEntities && (r.innerHTML = a, a = r.value);
return a
}, a = b.columns(c.columns).indexes().map(function (a) {
return c.format.header(b.column(a).header().innerHTML, a)
}).toArray(), f = b.table().footer() ? b.columns(c.columns).indexes().map(function (a) {
var d = b.column(a).footer();
return c.format.footer(d ? d.innerHTML : "", a)
}).toArray() : null, g = b.rows(c.rows, c.modifier).indexes().toArray(), g = b.cells(g, c.columns).render(c.orthogonal).toArray(), h = a.length, i = 0 < h ? g.length / h : 0, k = Array(i), l = 0, m = 0; m < i; m++) {
for (var o = Array(h), n = 0; n < h; n++) o[n] = c.format.body(g[l], n, m), l++;
k[m] = o
}
return {
header: a,
footer: f,
body: k
}
}
});
var r = e("<textarea/>")[0];
e.fn.dataTable.Buttons = l;
e.fn.DataTable.Buttons = l;
e(o).on("init.dt plugin-init.dt", function (a, b) {
if ("dt" === a.namespace) {
var c = b.oInit.buttons || j.defaults.buttons;
c && !b._buttons && (new l(b, c)).container()
}
});
j.ext.feature.push({
fnInit: function (a) {
var a = new j.Api(a),
b = a.init().buttons || j.defaults.buttons;
return (new l(a, b)).container()
},
cFeature: "B"
});
return l
});