Created
July 30, 2013 21:49
-
-
Save nathancolgate/6117319 to your computer and use it in GitHub Desktop.
A safer Object.keys compatibility implementation for jquery.WATable so that it will work in IE8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| Throwing Object.keys error in IE8 fix: | |
| http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation | |
| */ | |
| Object.keys = Object.keys || (function () { | |
| var hasOwnProperty = Object.prototype.hasOwnProperty, | |
| hasDontEnumBug = !{toString:null}.propertyIsEnumerable("toString"), | |
| DontEnums = [ | |
| 'toString', | |
| 'toLocaleString', | |
| 'valueOf', | |
| 'hasOwnProperty', | |
| 'isPrototypeOf', | |
| 'propertyIsEnumerable', | |
| 'constructor' | |
| ], | |
| DontEnumsLength = DontEnums.length; | |
| return function (o) { | |
| if (typeof o != "object" && typeof o != "function" || o === null) | |
| throw new TypeError("Object.keys called on a non-object"); | |
| var result = []; | |
| for (var name in o) { | |
| if (hasOwnProperty.call(o, name)) | |
| result.push(name); | |
| } | |
| if (hasDontEnumBug) { | |
| for (var i = 0; i < DontEnumsLength; i++) { | |
| if (hasOwnProperty.call(o, DontEnums[i])) | |
| result.push(DontEnums[i]); | |
| } | |
| } | |
| return result; | |
| }; | |
| })(); | |
| /* | |
| WATable 1.06 | |
| Copyright (c) 2012 Andreas Petersson, http://wootapa-watable.appspot.com/ | |
| Permission is hereby granted, free of charge, to any person obtaining | |
| a copy of this software and associated documentation files (the | |
| "Software"), to deal in the Software without restriction, including | |
| without limitation the rights to use, copy, modify, merge, publish, | |
| distribute, sublicense, and/or sell copies of the Software, and to | |
| permit persons to whom the Software is furnished to do so, subject to | |
| the following conditions: | |
| The above copyright notice and this permission notice shall be | |
| included in all copies or substantial portions of the Software. | |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | |
| LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | |
| OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |
| WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
| */ | |
| (function (e, t) { | |
| var n = function () { | |
| var n = {}; | |
| var r = {}; | |
| n.options = {}; | |
| var i = { | |
| url: "", | |
| urlData: "", | |
| urlPost: false, | |
| debug: false, | |
| filter: false, | |
| columnPicker: false, | |
| pageSize: 10, | |
| pageSizes: [10, 20, 30, 40, 50, "All"], | |
| actions: "", | |
| hidePagerOnEmpty: false, | |
| preFill: false, | |
| types: { | |
| string: {}, | |
| number: {}, | |
| bool: {}, | |
| date: {} | |
| } | |
| }; | |
| n.ext = {}; | |
| n.ext.XDate = function (e, t, n, r) { | |
| function i() { | |
| var t = this instanceof i ? this : new i, | |
| n = arguments, | |
| r = n.length, | |
| u; | |
| typeof n[r - 1] == "boolean" && (u = n[--r], n = T(n, 0, r)); | |
| if (r) | |
| if (r == 1) | |
| if (r = n[0], r instanceof e || typeof r == "number") t[0] = new e(+r); | |
| else if (r instanceof i) { | |
| var n = t, | |
| a = new e(+r[0]); | |
| if (s(r)) a.toString = _; | |
| n[0] = a | |
| } else { | |
| if (typeof r == "string") { | |
| t[0] = new e(0); | |
| e: { | |
| for (var n = r, r = u || !1, a = i.parsers, f = 0, l; f < a.length; f++) | |
| if (l = a[f](n, r, t)) { | |
| t = l; | |
| break e | |
| } | |
| t[0] = new e(n) | |
| } | |
| } | |
| } else t[0] = new e(M.apply(e, n)), u || (t[0] = w(t[0])); | |
| else t[0] = new e; | |
| typeof u == "boolean" && o(t, u); | |
| return t | |
| } | |
| function s(e) { | |
| return e[0].toString === _ | |
| } | |
| function o(t, n, r) { | |
| if (n) { | |
| if (!s(t)) r && (t[0] = new e(M(t[0].getFullYear(), t[0].getMonth(), t[0].getDate(), t[0].getHours(), t[0].getMinutes(), t[0].getSeconds(), t[0].getMilliseconds()))), t[0].toString = _ | |
| } else s(t) && (t[0] = r ? w(t[0]) : new e(+t[0])); | |
| return t | |
| } | |
| function u(e, t, n, r, i) { | |
| var s = x(y, e[0], i), | |
| e = x(b, e[0], i), | |
| i = t == 1 ? n % 12 : s(1), | |
| o = !1; | |
| r.length == 2 && typeof r[1] == "boolean" && (o = r[1], r = [n]); | |
| e(t, r); | |
| o && s(1) != i && (e(1, [s(1) - 1]), e(2, [E(s(0), s(1))])) | |
| } | |
| function a(e, n, r, i) { | |
| var r = Number(r), | |
| s = t.floor(r); | |
| e["set" + k[n]](e["get" + k[n]]() + s, i || !1); | |
| s != r && n < 6 && a(e, n + 1, (r - s) * A[n], i) | |
| } | |
| function f(e, n, r) { | |
| var e = e.clone().setUTCMode(!0, !0), | |
| n = i(n).setUTCMode(!0, !0), | |
| s = 0; | |
| if (r == 0 || r == 1) { | |
| for (var o = 6; o >= r; o--) s /= A[o], s += y(n, !1, o) - y(e, !1, o); | |
| r == 1 && (s += (n.getFullYear() - e.getFullYear()) * 12) | |
| } else r == 2 ? (r = e.toDate().setUTCHours(0, 0, 0, 0), s = n.toDate().setUTCHours(0, 0, 0, 0), s = t.round((s - r) / 864e5) + (n - s - (e - r)) / 864e5) : s = (n - e) / [36e5, 6e4, 1e3, 1][r - 3]; | |
| return s | |
| } | |
| function l(n) { | |
| var r = n(0), | |
| i = n(1), | |
| n = n(2), | |
| i = new e(M(r, i, n)), | |
| s = c(r), | |
| n = s; | |
| i < s ? n = c(r - 1) : (r = c(r + 1), i >= r && (n = r)); | |
| return t.floor(t.round((i - n) / 864e5) / 7) + 1 | |
| } | |
| function c(t) { | |
| t = new e(M(t, 0, 4)); | |
| t.setUTCDate(t.getUTCDate() - (t.getUTCDay() + 6) % 7); | |
| return t | |
| } | |
| function h(e, t, n, i) { | |
| var s = x(y, e, i), | |
| o = x(b, e, i), | |
| n = c(n === r ? s(0) : n); | |
| i || (n = w(n)); | |
| e.setTime(+n); | |
| o(2, [s(2) + (t - 1) * 7]) | |
| } | |
| function p(e, t, n, r, s) { | |
| var o = i.locales, | |
| u = o[i.defaultLocale] || {}, a = x(y, e, s), | |
| n = (typeof n == "string" ? o[n] : n) || {}; | |
| return d(e, t, function (e) { | |
| if (r) | |
| for (var t = (e == 7 ? 2 : e) - 1; t >= 0; t--) r.push(a(t)); | |
| return a(e) | |
| }, function (e) { | |
| return n[e] || u[e] | |
| }, s) | |
| } | |
| function d(e, t, n, i, s) { | |
| for (var o, u, a = ""; o = t.match(O);) { | |
| a += t.substr(0, o.index); | |
| if (o[1]) { | |
| u = a; | |
| for (var a = e, f = o[1], l = n, c = i, h = s, p = f.length, m = void 0, g = ""; p > 0;) m = v(a, f.substr(0, p), l, c, h), m !== r ? (g += m, f = f.substr(p), p = f.length) : p--; | |
| a = u + (g + f) | |
| } else o[3] ? (u = d(e, o[4], n, i, s), parseInt(u.replace(/\D/g, ""), 10) && (a += u)) : a += o[7] || "'"; | |
| t = t.substr(o.index + o[0].length) | |
| } | |
| return a + t | |
| } | |
| function v(e, n, r, s, o) { | |
| var u = i.formatters[n]; | |
| if (typeof u == "string") return d(e, u, r, s, o); | |
| else if (typeof u == "function") return u(e, o || !1, s); | |
| switch (n) { | |
| case "fff": | |
| return C(r(6), 3); | |
| case "s": | |
| return r(5); | |
| case "ss": | |
| return C(r(5)); | |
| case "m": | |
| return r(4); | |
| case "mm": | |
| return C(r(4)); | |
| case "h": | |
| return r(3) % 12 || 12; | |
| case "hh": | |
| return C(r(3) % 12 || 12); | |
| case "H": | |
| return r(3); | |
| case "HH": | |
| return C(r(3)); | |
| case "d": | |
| return r(2); | |
| case "dd": | |
| return C(r(2)); | |
| case "ddd": | |
| return s("dayNamesShort")[r(7)] || ""; | |
| case "dddd": | |
| return s("dayNames")[r(7)] || ""; | |
| case "M": | |
| return r(1) + 1; | |
| case "MM": | |
| return C(r(1) + 1); | |
| case "MMM": | |
| return s("monthNamesShort")[r(1)] || ""; | |
| case "MMMM": | |
| return s("monthNames")[r(1)] || ""; | |
| case "yy": | |
| return (r(0) + "").substring(2); | |
| case "yyyy": | |
| return r(0); | |
| case "t": | |
| return m(r, s).substr(0, 1).toLowerCase(); | |
| case "tt": | |
| return m(r, s).toLowerCase(); | |
| case "T": | |
| return m(r, s).substr(0, 1); | |
| case "TT": | |
| return m(r, s); | |
| case "z": | |
| case "zz": | |
| case "zzz": | |
| return o ? n = "Z" : (s = e.getTimezoneOffset(), e = s < 0 ? "+" : "-", r = t.floor(t.abs(s) / 60), s = t.abs(s) % 60, o = r, n == "zz" ? o = C(r) : n == "zzz" && (o = C(r) + ":" + C(s)), n = e + o), n; | |
| case "w": | |
| return l(r); | |
| case "ww": | |
| return C(l(r)); | |
| case "S": | |
| return n = r(2), n > 10 && n < 20 ? "th" : ["st", "nd", "rd"][n % 10 - 1] || "th" | |
| } | |
| } | |
| function m(e, t) { | |
| return e(3) < 12 ? t("amDesignator") : t("pmDesignator") | |
| } | |
| function g(e) { | |
| return !isNaN(+e[0]) | |
| } | |
| function y(e, t, n) { | |
| return e["get" + (t ? "UTC" : "") + k[n]]() | |
| } | |
| function b(e, t, n, r) { | |
| e["set" + (t ? "UTC" : "") + k[n]].apply(e, r) | |
| } | |
| function w(t) { | |
| return new e(t.getUTCFullYear(), t.getUTCMonth(), t.getUTCDate(), t.getUTCHours(), t.getUTCMinutes(), t.getUTCSeconds(), t.getUTCMilliseconds()) | |
| } | |
| function E(t, n) { | |
| return 32 - (new e(M(t, n, 32))).getUTCDate() | |
| } | |
| function S(e) { | |
| return function () { | |
| return e.apply(r, [this].concat(T(arguments))) | |
| } | |
| } | |
| function x(e) { | |
| var t = T(arguments, 1); | |
| return function () { | |
| return e.apply(r, t.concat(T(arguments))) | |
| } | |
| } | |
| function T(e, t, i) { | |
| return n.prototype.slice.call(e, t || 0, i === r ? e.length : i) | |
| } | |
| function N(e, t) { | |
| for (var n = 0; n < e.length; n++) t(e[n], n) | |
| } | |
| function C(e, t) { | |
| t = t || 2; | |
| for (e += ""; e.length < t;) e = "0" + e; | |
| return e | |
| } | |
| var k = "FullYear,Month,Date,Hours,Minutes,Seconds,Milliseconds,Day,Year".split(","), | |
| L = ["Years", "Months", "Days"], | |
| A = [12, 31, 24, 60, 60, 1e3, 1], | |
| O = /(([a-zA-Z])\2*)|(\((('.*?'|\(.*?\)|.)*?)\))|('(.*?)')/, | |
| M = e.UTC, | |
| _ = e.prototype.toUTCString, | |
| D = i.prototype; | |
| D.length = 1; | |
| D.splice = n.prototype.splice; | |
| D.getUTCMode = S(s); | |
| D.setUTCMode = S(o); | |
| D.getTimezoneOffset = function () { | |
| return s(this) ? 0 : this[0].getTimezoneOffset() | |
| }; | |
| N(k, function (e, t) { | |
| D["get" + e] = function () { | |
| return y(this[0], s(this), t) | |
| }; | |
| t != 8 && (D["getUTC" + e] = function () { | |
| return y(this[0], !0, t) | |
| }); | |
| t != 7 && (D["set" + e] = function (e) { | |
| u(this, t, e, arguments, s(this)); | |
| return this | |
| }, t != 8 && (D["setUTC" + e] = function (e) { | |
| u(this, t, e, arguments, !0); | |
| return this | |
| }, D["add" + (L[t] || e)] = function (e, n) { | |
| a(this, t, e, n); | |
| return this | |
| }, D["diff" + (L[t] || e)] = function (e) { | |
| return f(this, e, t) | |
| })) | |
| }); | |
| D.getWeek = function () { | |
| return l(x(y, this, !1)) | |
| }; | |
| D.getUTCWeek = function () { | |
| return l(x(y, this, !0)) | |
| }; | |
| D.setWeek = function (e, t) { | |
| h(this, e, t, !1); | |
| return this | |
| }; | |
| D.setUTCWeek = function (e, t) { | |
| h(this, e, t, !0); | |
| return this | |
| }; | |
| D.addWeeks = function (e) { | |
| return this.addDays(Number(e) * 7) | |
| }; | |
| D.diffWeeks = function (e) { | |
| return f(this, e, 2) / 7 | |
| }; | |
| i.parsers = [ | |
| function (t, n, r) { | |
| if (t = t.match(/^(\d{4})(-(\d{2})(-(\d{2})([T ](\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/)) { | |
| var i = new e(M(t[1], t[3] ? t[3] - 1 : 0, t[5] || 1, t[7] || 0, t[8] || 0, t[10] || 0, t[12] ? Number("0." + t[12]) * 1e3 : 0)); | |
| t[13] ? t[14] && i.setUTCMinutes(i.getUTCMinutes() + (t[15] == "-" ? 1 : -1) * (Number(t[16]) * 60 + (t[18] ? Number(t[18]) : 0))) : n || (i = w(i)); | |
| return r.setTime(+i) | |
| } | |
| } | |
| ]; | |
| i.parse = function (e) { | |
| return +i("" + e) | |
| }; | |
| D.toString = function (e, t, n) { | |
| return e === r || !g(this) ? this[0].toString() : p(this, e, t, n, s(this)) | |
| }; | |
| D.toUTCString = D.toGMTString = function (e, t, n) { | |
| return e === r || !g(this) ? this[0].toUTCString() : p(this, e, t, n, !0) | |
| }; | |
| D.toISOString = function () { | |
| return this.toUTCString("yyyy-MM-dd'T'HH:mm:ss(.fff)zzz") | |
| }; | |
| i.defaultLocale = ""; | |
| i.locales = { | |
| "": { | |
| monthNames: "January,February,March,April,May,June,July,August,September,October,November,December".split(","), | |
| monthNamesShort: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","), | |
| dayNames: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","), | |
| dayNamesShort: "Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","), | |
| amDesignator: "AM", | |
| pmDesignator: "PM" | |
| } | |
| }; | |
| i.formatters = { | |
| i: "yyyy-MM-dd'T'HH:mm:ss(.fff)", | |
| u: "yyyy-MM-dd'T'HH:mm:ss(.fff)zzz" | |
| }; | |
| N("getTime,valueOf,toDateString,toTimeString,toLocaleString,toLocaleDateString,toLocaleTimeString,toJSON".split(","), function (e) { | |
| D[e] = function () { | |
| return this[0][e]() | |
| } | |
| }); | |
| D.setTime = function (e) { | |
| this[0].setTime(e); | |
| return this | |
| }; | |
| D.valid = S(g); | |
| D.clone = function () { | |
| return new i(this) | |
| }; | |
| D.clearTime = function () { | |
| return this.setHours(0, 0, 0, 0) | |
| }; | |
| D.toDate = function () { | |
| return new e(+this[0]) | |
| }; | |
| i.now = function () { | |
| return +(new e) | |
| }; | |
| i.today = function () { | |
| return (new i).clearTime() | |
| }; | |
| i.UTC = M; | |
| i.getDaysInMonth = E; | |
| if (typeof module !== "undefined" && module.exports) module.exports = i; | |
| return i | |
| }(Date, Math, Array); | |
| var s = null; | |
| var o = null; | |
| var u = null; | |
| var a = null; | |
| var f = null; | |
| var l = null; | |
| var c = null; | |
| var h = null; | |
| var p = 1; | |
| var d = null; | |
| var v = null; | |
| var m = null; | |
| var g = false; | |
| var y = null; | |
| var b = {}; | |
| var w = null; | |
| var E = null; | |
| var S = {}; | |
| var x = false; | |
| n.init = function () { | |
| s = n.options.id; | |
| if (String(n.options.pageSize).toLowerCase() == "auto") { | |
| n.options[option] = -1; | |
| d = n.options.pageSize; | |
| e(window).on("resize", n.windowResized) | |
| } | |
| n.options.types.string = (n.options.types || {}).string || {}; | |
| n.options.types.number = (n.options.types || {}).number || {}; | |
| n.options.types.bool = (n.options.types || {}).bool || {}; | |
| n.options.types.date = (n.options.types || {}).date || {}; | |
| if (n.options.preFill) { | |
| var t = { | |
| cols: { | |
| dummy: { | |
| index: 1, | |
| friendly: " ", | |
| type: "none" | |
| } | |
| }, | |
| rows: [] | |
| }; | |
| for (var r = 0; r < n.options.pageSize; r++) t.rows.push({ | |
| dummy: " " | |
| }); | |
| n.setData(t) | |
| } | |
| n.update() | |
| }; | |
| n.createTable = function () { | |
| var r = new n.ext.XDate; | |
| if (o == null) { | |
| u = l = c = null; | |
| o = e('<table class="watable table table-striped table-hover table-bordered table-condensed"></table>').appendTo(s) | |
| } | |
| if (u == null) { | |
| o.find("thead").remove(); | |
| a = f = null; | |
| u = e("<thead></thead>").prependTo(o) | |
| } | |
| var i = Object.keys(h.cols).sort(function (e, t) { | |
| return h.cols[e].index - h.cols[t].index | |
| }); | |
| if (a == null) { | |
| u.find(".sort i").tooltip("hide"); | |
| u.find(".sort").remove(); | |
| a = e('<tr class="sort"></tr>').prependTo(u); | |
| if (E && !h.cols[E].hidden) { | |
| var y = x ? "checked" : ""; | |
| var w = e("<th></th>").appendTo(a); | |
| var T = e('<input {0} class="checkToggle" type="checkbox" />'.f(y)).appendTo(w); | |
| T.on("change", n.checkToggleChanged) | |
| } | |
| for (var N = 0; N < i.length; N++) { | |
| var C = i[N]; | |
| var k = h.cols[C]; | |
| if (!k.hidden) { | |
| var w = e("<th></th>").appendTo(a); | |
| var L = e('<a class="pull-left" href="#">{0}</a>'.f(k.friendly || C)); | |
| L.on("click", { | |
| column: C | |
| }, n.columnClicked).appendTo(w); | |
| if (k.tooltip) e('<i class="icon-info-sign"></i>').tooltip({ | |
| title: k.tooltip, | |
| html: true, | |
| container: "body", | |
| placement: "top", | |
| delay: { | |
| show: 500, | |
| hide: 100 | |
| } | |
| }).appendTo(L); | |
| if (C == m) { | |
| if (g) e('<i class="icon-chevron-down pull-right"></i>').appendTo(w); | |
| else e('<i class="icon-chevron-up pull-right"></i>').appendTo(w) | |
| } | |
| } | |
| } | |
| } | |
| if (f == null && n.options.filter) { | |
| u.find(".filter").remove(); | |
| f = e('<tr class="filter"></tr>').appendTo(u); | |
| var w; | |
| var T; | |
| var A = ""; | |
| var O = ""; | |
| if (E && !h.cols[E].hidden) { | |
| O = n.options.types.bool.tooltip || "Toggle between:<br/>indeterminate,<br/>checked,<br/>unchecked"; | |
| var w = e("<th></th>").appendTo(f); | |
| var T = e('<input class="filter indeterminate" checked type="checkbox" />').appendTo(w); | |
| e.map(b, function (e, t) { | |
| if (t == "unique") { | |
| if (e.filter) T.prop("checked", true).removeClass("indeterminate"); | |
| else if (!e.filter) T.prop("checked", false).removeClass("indeterminate"); | |
| else if (e.filter == "") T.addClass("indeterminate") | |
| } | |
| }); | |
| O = O.trim(); | |
| if (O) T.tooltip({ | |
| title: O, | |
| html: true, | |
| container: "body", | |
| trigger: "hover", | |
| placement: "top", | |
| delay: { | |
| show: 500, | |
| hide: 100 | |
| } | |
| }); | |
| T.on("click", { | |
| column: "unique" | |
| }, n.filterChanged) | |
| } | |
| for (var N = 0; N < i.length; N++) { | |
| var C = i[N]; | |
| var k = h.cols[C]; | |
| k.filter = k.filter === false ? false : true; | |
| if (!k.hidden) { | |
| w = e("<th></th>").appendTo(f); | |
| switch (k.type || "none") { | |
| case "number": | |
| A = n.options.types.number.placeHolder || "10..20 =50"; | |
| O = n.options.types.number.tooltip || "Values 10 to 20:<br/>10..20<br/>Values exactly 50:<br/>=50"; | |
| T = e('<input placeholder="{0}" class="filter" type="text" />'.f(A)); | |
| T.on("keyup", { | |
| column: C | |
| }, n.filterChanged); | |
| break; | |
| case "date": | |
| A = n.options.types.date.placeHolder || "-7..0"; | |
| O = n.options.types.date.tooltip || "Today:<br/>0..1<br/>A week today excluded:<br/>-7..0"; | |
| T = e('<div><input placeholder="{0}" class="filter" type="text" /></div>'.f(A)); | |
| if (n.options.types.date.datePicker === true || n.options.types.date.datePicker == t) { | |
| if (e().datepicker) { | |
| T.addClass("date-wrap"); | |
| var M = (new n.ext.XDate(false)).setHours(0, 0, 0, 0).toString("yyyy-MM-dd"); | |
| var _ = e('<div style="float:right" class="date" data-date="{0}" data-date-format="{1}" />'.f(M, "yyyy-mm-dd")).appendTo(T); | |
| e('<input style="display:none" type="text" />').appendTo(_); | |
| e('<span class="add-on"><i class="icon-chevron-right"></i></span>').on("click", { | |
| op: "l" | |
| }, n.dpOpChanged).appendTo(_); | |
| e('<span class="add-on"><i class="icon-chevron-left"></i></span>').on("click", { | |
| op: "r" | |
| }, n.dpOpChanged).appendTo(_); | |
| _.datepicker({ | |
| weekStart: 1 | |
| }); | |
| _.on("changeDate", { | |
| column: C, | |
| input: e("input.filter", T) | |
| }, n.dpClicked) | |
| } else if (n.options.debug) console.log("datepicker plugin not found") | |
| } | |
| T.on("keyup", "input.filter", { | |
| column: C | |
| }, n.filterChanged); | |
| break; | |
| case "bool": | |
| O = n.options.types.bool.tooltip || "Toggle between:<br/>indeterminate,<br/>checked,<br/>unchecked"; | |
| T = e('<input class="filter indeterminate" checked type="checkbox" />'); | |
| T.on("click", { | |
| column: C | |
| }, n.filterChanged); | |
| break; | |
| case "string": | |
| A = n.options.types.string.placeHolder || "John Doe"; | |
| O = n.options.types.string.tooltip || "Find John Doe:<br/>John Doe<br/>Find all but John Doe:<br/>!John Doe"; | |
| T = e('<input placeholder="{0}" class="filter" type="text" />'.f(A)); | |
| T.on("keyup", { | |
| column: C | |
| }, n.filterChanged); | |
| break; | |
| case "none": | |
| T = e("<div> </div>"); | |
| break | |
| } | |
| O = O.trim(); | |
| if (O) T.tooltip({ | |
| title: O, | |
| html: true, | |
| container: "body", | |
| trigger: "hover", | |
| placement: "top", | |
| delay: { | |
| show: 500, | |
| hide: 100 | |
| } | |
| }); | |
| if (T && k.filter) { | |
| e.map(b, function (e, t) { | |
| if (t == C) { | |
| if (e.col.type == "bool") { | |
| if (e.filter) T.prop("checked", true).removeClass("indeterminate"); | |
| else if (!e.filter) T.prop("checked", false).removeClass("indeterminate"); | |
| else if (e.filter == "") T.addClass("indeterminate") | |
| } else T.val(e.filter) | |
| } | |
| }); | |
| T.appendTo(w) | |
| } | |
| } | |
| } | |
| } | |
| if (l == null) { | |
| o.find("tbody").remove(); | |
| l = e("<tbody></tbody>").insertAfter(u); | |
| l.on("change", ".unique", n.rowChecked); | |
| l.on("click", "td", n.rowClicked); | |
| if (n.options.pageSize == -1) h.toRow = h.rows.length; | |
| else { | |
| h.toRow = h.fromRow + n.options.pageSize; | |
| if (h.toRow > h.rows.length) h.toRow = h.rows.length | |
| } | |
| var D = 0; | |
| e.each(h.rows.slice(h.fromRow, h.toRow), function (r, u) { | |
| var a = e("<tr></tr>").appendTo(l); | |
| if (E && !h.cols[E].hidden) { | |
| var f = S[u[E]] != t ? "checked" : ""; | |
| var c = u["checkable"] === false ? "disabled" : ""; | |
| var p = e("<td></td>").appendTo(a); | |
| var d = e('<input class="unique" {0} {1} type="checkbox" />'.f(f, c)).appendTo(p) | |
| } | |
| for (var v = 0; v < i.length; v++) { | |
| var m = i[v]; | |
| var g = u[m] || ""; | |
| if (!h.cols[m]) return; | |
| if (h.cols[m].unique) a.data("unique", g); | |
| if (!h.cols[m].hidden) { | |
| var p = e("<td></td>").appendTo(a); | |
| p.data("column", m); | |
| var y = u[m + "Format"] || h.cols[m].format || "{0}"; | |
| switch (h.cols[m].type) { | |
| case "string": | |
| case "none": | |
| p.html(y.f(g)); | |
| break; | |
| case "number": | |
| g = Number(g) || 0; | |
| var b = !isNaN(h.cols[m].decimals); | |
| if (b) p.html(y.f(g.toFixed(h.cols[m].decimals))); | |
| else { | |
| (g || 0) % 1 === 0 ? p.html(y.f(g)) : p.html(y.f(g.toFixed(n.options.types.number.decimals || 2))) | |
| } | |
| break; | |
| case "date": | |
| g = (new n.ext.XDate(g, n.options.types.date.utc === true)).toString(n.options.types.date.format || "yyyy-MM-dd HH:mm:ss"); | |
| p.html(y.f(g)); | |
| break; | |
| case "bool": | |
| e('<input type="checkbox" {0} disabled />'.f(g ? "checked" : "")).appendTo(p); | |
| break | |
| } | |
| } | |
| } | |
| D++; | |
| if (n.options.pageSize == -1) { | |
| if (!n.elementInViewport(s)) { | |
| var w = o.find("tfoot").length; | |
| if (!w && a.prev()) { | |
| a.prev().remove(); | |
| D-- | |
| } | |
| if (!w && a.prev()) { | |
| a.prev().remove(); | |
| D-- | |
| } | |
| if (!w && a.prev()) { | |
| a.prev().remove(); | |
| D-- | |
| } | |
| a.remove(); | |
| D--; | |
| h.toRow = h.fromRow + D; | |
| return false | |
| } | |
| } else { | |
| if (D >= n.options.pageSize) { | |
| h.toRow = h.fromRow + D; | |
| return false | |
| } | |
| } | |
| }); | |
| if (p == 1) { | |
| d = D; | |
| v = Math.round(Math.ceil(h.rows.length / d)) | |
| } | |
| if (p == v) { | |
| while (D < d) { | |
| var P = e("<tr></tr>").appendTo(l); | |
| if (E && !h.cols[E].hidden) { | |
| var H = e("<td></td>").appendTo(P); | |
| var T = e('<input disabled type="checkbox" />').appendTo(H) | |
| } | |
| e.each(h.cols, function (t, n) { | |
| if (!n.hidden) { | |
| e("<td> </td>").appendTo(P) | |
| } | |
| }); | |
| D++ | |
| } | |
| } | |
| } | |
| if (c == null) { | |
| o.find("tfoot").remove(); | |
| c = e("<tfoot></tfoot>").insertAfter(l); | |
| var B = e("<tr></tr>").appendTo(c); | |
| var j = e('<td colspan="999"></td>').appendTo(B); | |
| if (h.rows.length > 0) e("<p>Rows {0}-{1} of {2}</p>".f(h.fromRow + 1, Math.min(h.toRow, h.rows.length), h.rows.length)).appendTo(j); | |
| else { | |
| e("<p>No results</p>").appendTo(j); | |
| v = 0 | |
| } | |
| var F = p - 2; | |
| var I = p + 2; | |
| if (I > v) { | |
| var q = I - v; | |
| I = v; | |
| F -= q | |
| } | |
| if (F < 1) F = 1; | |
| if (I < 5) I = 5; | |
| var R = e('<div class="btn-toolbar"></div>').appendTo(j); | |
| var U = e('<div class="btn-group"></div>').appendTo(R); | |
| var z = e('<div class="pagination"></div>').appendTo(U); | |
| var W = e("<ul></ul>").appendTo(z); | |
| e('<li class="{0}"><a href="#">«</a></li>'.f(p == 1 ? "disabled" : "")).on("click", { | |
| pageIndex: p - 1 | |
| }, n.pageChanged).appendTo(W); | |
| for (var N = F; N <= I; N++) { | |
| var L = null; | |
| if (N != p) L = e('<li class="{1}"><a href="#">{0}</a></li>'.f(N, N > v ? "disabled" : "")); | |
| if (N == p) L = e('<li class="active"><a href="#">{0}</a></li>'.f(N)); | |
| if (L != null) { | |
| L.on("click", { | |
| pageIndex: N | |
| }, n.pageChanged); | |
| L.appendTo(W) | |
| } | |
| } | |
| e('<li class="{0}"><a href="#">»</a></li>'.f(p == v ? "disabled" : "")).on("click", { | |
| pageIndex: p + 1 | |
| }, n.pageChanged).appendTo(W); | |
| if (n.options.pageSizes.length) { | |
| var X = e('<div class="btn-group dropup pagesize"></div>').appendTo(R); | |
| var V = e('<button class="btn dropdown-toggle" data-toggle="dropdown" href="#">Rows </button>').appendTo(X); | |
| var J = e('<span class="caret"></span>').appendTo(V); | |
| var K = e('<ul class="dropdown-menu">').appendTo(X); | |
| e.each(n.options.pageSizes, function (t, n) { | |
| var r = e("<li></li>").appendTo(K); | |
| e('<a href="#">{0}</a>'.f(n)).appendTo(r) | |
| }); | |
| X.on("click", "a", n.pageSizeChanged) | |
| } | |
| if (n.options.columnPicker) { | |
| var X = e('<div class="btn-group dropup columnpicker"></div>').appendTo(R); | |
| var V = e('<button class="btn dropdown-toggle" data-toggle="dropdown" href="#">Columns </button>').appendTo(X); | |
| var J = e('<span class="caret"></span>').appendTo(V); | |
| var K = e('<ul class="dropdown-menu">').appendTo(X); | |
| e.each(h.cols, function (t, n) { | |
| if (n.type != "unique") { | |
| var r = e("<li></li>").appendTo(K); | |
| e('<input {0} type="checkbox" title="{1}" value="{1}" > {2}</input>'.f(n.hidden ? "" : "checked", t, n.friendly || t)).appendTo(r) | |
| } | |
| }); | |
| X.on("click", "input", n.columnPickerClicked) | |
| } | |
| if (n.options.actions) { | |
| var X = e('<div class="btn-group dropup actions"></div>').appendTo(R); | |
| var V = e('<button class="btn dropdown-toggle" data-toggle="dropdown" href="#"><i class="icon-list"></i> </button>').appendTo(X); | |
| var J = e('<span class="caret"></span>').appendTo(V); | |
| var K = e('<ul class="dropdown-menu">').appendTo(X); | |
| if (n.options.actions.filter) { | |
| var Q = e("<li></li>").appendTo(K); | |
| e('<input {0} type="checkbox" > Filter</input>'.f(n.options.filter ? "checked" : "")).appendTo(Q); | |
| Q.on("click", "input", function (e) { | |
| n.options.filter = !n.options.filter; | |
| u = null; | |
| n.createTable() | |
| }) | |
| } | |
| if (n.options.actions.columnPicker) { | |
| var Q = e("<li></li>").appendTo(K); | |
| e('<input {0} type="checkbox" > ColumnPicker</input>'.f(n.options.columnPicker ? "checked" : "")).appendTo(Q); | |
| Q.on("click", "input", function (e) { | |
| n.options.columnPicker = !n.options.columnPicker; | |
| c = null; | |
| n.createTable() | |
| }) | |
| } | |
| if (n.options.actions.custom) { | |
| e.each(n.options.actions.custom, function (t, n) { | |
| var r = e("<li></li>").appendTo(K); | |
| e(n).appendTo(r) | |
| }) | |
| } | |
| } | |
| } | |
| if (h.rows.length == 0 && n.options.hidePagerOnEmpty) e(".btn-toolbar", c).remove(); | |
| if (n.options.debug) console.log("table created in {0} ms.".f(new n.ext.XDate - r)); | |
| if (typeof n.options.tableCreated == "function") n.options.tableCreated.call(o.get(0), { | |
| table: o.get(0) | |
| }) | |
| }; | |
| n.update = function (t, r, i) { | |
| if (!n.options.url) { | |
| if (n.options.debug) console.log("no url found"); | |
| return | |
| } | |
| if (n.options.debug) console.log("requesting data from url:{0} data:{1}".f(n.options.url, JSON.stringify(n.options.urlData) || "")); | |
| var s = new n.ext.XDate; | |
| e.ajax({ | |
| url: n.options.url, | |
| type: n.options.urlPost ? "POST" : "GET", | |
| dataType: "json", | |
| contentType: "application/json; charset=utf-8", | |
| data: n.options.urlData, | |
| async: true, | |
| success: function (e) { | |
| if (n.options.debug) console.log("request finished in {0} ms.".f(new n.ext.XDate - s)); | |
| if (e.d && e.d.cols) n.setData(e.d, r, i); | |
| else n.setData(e, r, i); if (typeof t == "function") t.call(this) | |
| }, | |
| error: function (e) { | |
| console.log("request error: ".f(e)) | |
| } | |
| }) | |
| }; | |
| n.setData = function (r, i, s) { | |
| var o = e.extend(true, {}, r); | |
| o.fromRow = h && h.fromRow || 0; | |
| o.toRow = h && h.toRow || 0; | |
| if (i || false) o.cols = h.cols; | |
| h = o; | |
| h.rowsOrg = h.rows; | |
| if (p > 1) { | |
| h.toRow = Math.min(h.rows.length, h.toRow); | |
| h.fromRow = h.toRow - d; | |
| h.fromRow = Math.max(h.fromRow, 0); | |
| p = Math.ceil(h.fromRow / d) + 1; | |
| v = Math.ceil(h.rows.length / d) | |
| } else { | |
| h.fromRow = 0; | |
| if (n.options.pageSize != -1) h.toRow = h.fromRow + n.options.pageSize; | |
| h.toRow = Math.max(h.toRow, h.rows.length) | |
| } | |
| E = ""; | |
| e.each(h.cols, function (e, t) { | |
| if (!m && t.sortOrder) { | |
| m = e; | |
| g = t.sortOrder != "asc" | |
| } | |
| if (!t.type) h.cols[e].type = "none"; | |
| if (t.unique) { | |
| if (!E) E = e; | |
| else t.unique = false | |
| } | |
| if (!t.index) h.cols[e].index = new n.ext.XDate; | |
| t.column = e | |
| }); | |
| if (E) { | |
| h.cols["unique"] = { | |
| column: "unique", | |
| type: "unique", | |
| index: -1, | |
| hidden: true | |
| } | |
| } | |
| if (s === true || s === t) S = {}; | |
| else { | |
| for (var a in S) S[a] = n.getRow(a) | |
| } if (E) { | |
| e.each(h.rows, function (e, n) { | |
| if (n["Checked"] != t) { | |
| n["checked"] = n["Checked"]; | |
| delete n["Checked"] | |
| } | |
| if (n["Checkable"] != t) { | |
| n["checkable"] = n["Checkable"]; | |
| delete n["Checkable"] | |
| } | |
| if (n["checked"] === true) S[n[E]] = n | |
| }) | |
| } | |
| u = null; | |
| l = null; | |
| c = null; | |
| n.filter(); | |
| n.sort(); | |
| n.createTable() | |
| }; | |
| n.filter = function () { | |
| if (!n.options.filter) return; | |
| if (Object.keys(b).length == 0) return; | |
| else h.rows = e.extend(true, {}, h.rowsOrg); | |
| var t = new n.ext.XDate; | |
| e.each(b, function (t, r) { | |
| if (n.options.debug) console.log("filtering on text:{0} col:{1} type:{2} ".f(r.filter, r.col.column, r.col.type)); | |
| switch (r.col.type) { | |
| case "string": | |
| h.rows = e.map(h.rows, function (e) { | |
| var n = String(e[t]); | |
| var i = r.filter.toLowerCase(); | |
| var s = i.charAt(0) == "!"; | |
| if (s) i = i.substring(1); | |
| var o = n.toLowerCase().indexOf(i); | |
| if (o == -1 && s) return e; | |
| else if (o >= 0 && !s) { | |
| if (!e[t + "Format"] && !r.col.format) { | |
| var u = n.substring(0, o); | |
| var a = n.substring(o, o + r.filter.length); | |
| var f = n.substring(o + r.filter.length, e[t].length); | |
| e[t + "Format"] = '<span>{0}<span class="filter">{1}</span>{2}</span>'.f(u, a, f) | |
| } | |
| return e | |
| } | |
| }); | |
| break; | |
| case "number": | |
| case "date": | |
| h.rows = e.map(h.rows, function (i) { | |
| var s = r.filter.replace(/\s+/gi, " ").split(" "); | |
| s = s.filter(function (e) { | |
| return e | |
| }); | |
| var o = [">=", "<=", "..", ">", "<", "="]; | |
| var u = 0; | |
| var a = true; | |
| e.each(s, function (e, s) { | |
| for (var f = 0; f < o.length; f++) { | |
| var l = o[f]; | |
| var c = s.indexOf(l); | |
| var h = s.substring(0, c); | |
| var p = s.substring(c + l.length); | |
| if (c == -1) continue; | |
| a = h.length + p.length == 0; | |
| h = parseFloat(h); | |
| p = parseFloat(p); | |
| if (isNaN(h)) h = Number.NEGATIVE_INFINITY; | |
| if (isNaN(p)) p = Number.MAX_VALUE; | |
| if (r.col.type == "date") { | |
| var d = (new n.ext.XDate(n.options.types.date.utc === true)).setHours(0, 0, 0, 0); | |
| h = d - h * -1 * 60 * 60 * 24 * 1e3; | |
| p = d - p * -1 * 60 * 60 * 24 * 1e3 | |
| } | |
| switch (l) { | |
| case ">": | |
| if (i[t] > p) u++; | |
| break; | |
| case ">=": | |
| if (i[t] >= p) u++; | |
| break; | |
| case "<": | |
| if (i[t] < p) u++; | |
| break; | |
| case "<=": | |
| if (i[t] <= p) u++; | |
| break; | |
| case "=": | |
| if (i[t] == p) u++; | |
| break; | |
| case "..": | |
| if (r.col.type == "date") { | |
| if (i[t] >= h && i[t] < p) u++ | |
| } else { | |
| if (i[t] >= h && i[t] <= p) u++ | |
| } | |
| break; | |
| default: | |
| a = true | |
| } | |
| break | |
| } | |
| }); | |
| if (s.length == 1 && a || u > 0 && a || u == s.length || r.filter == "") return i | |
| }); | |
| break; | |
| case "bool": | |
| h.rows = e.map(h.rows, function (e) { | |
| if (r.filter === "") return e; | |
| if (Boolean(e[t]) && r.filter || !Boolean(e[t]) && !r.filter) return e | |
| }); | |
| break; | |
| case "unique": | |
| h.rows = e.map(h.rows, function (e) { | |
| if (r.filter === "") return e; | |
| var t = e[E]; | |
| var n = S[t] ? S[t][E] : ""; | |
| if (r.filter && t === n || !r.filter && n === "") return e | |
| }); | |
| break | |
| } | |
| if (r.filter === "") delete b[r.col.column] | |
| }); | |
| if (n.options.debug) console.log("filtering finished in {0} ms.".f(new n.ext.XDate - t)); | |
| p = 1; | |
| h.fromRow = 0; | |
| l = null; | |
| c = null | |
| }; | |
| n.sort = function () { | |
| if (!h.cols[m]) m = ""; | |
| if (!m) return; | |
| var e = new n.ext.XDate; | |
| if (n.options.debug) console.log("sorting on col:{0} order:{1}".f(m, g ? "desc" : "asc")); | |
| var t = h.cols[m].type == "string"; | |
| h.rows = h.rows.sort(function (e, n) { | |
| if (t) { | |
| if (String(e[m]).toLowerCase() == String(n[m]).toLowerCase()) return 0; | |
| if (String(e[m]).toLowerCase() > String(n[m]).toLowerCase()) return g ? -1 : 1; | |
| else return g ? 1 : -1 | |
| } else { | |
| if (e[m] == n[m]) return 0; | |
| if (e[m] > n[m]) return g ? -1 : 1; | |
| else return g ? 1 : -1 | |
| } | |
| }); | |
| if (n.options.debug) console.log("sorting finished in {0} ms.".f(new n.ext.XDate - e)) | |
| }; | |
| n.elementInViewport = function (e) { | |
| var t = e.get(0).getBoundingClientRect(); | |
| return t.top >= 0 && t.left >= 0 && t.bottom <= window.innerHeight && t.right <= window.innerWidth | |
| }; | |
| n.getRow = function (t) { | |
| var r = new n.ext.XDate; | |
| var i; | |
| e.each(h.rowsOrg, function (e, n) { | |
| if (n[E] == t) { | |
| i = n; | |
| return false | |
| } | |
| }); | |
| if (n.options.debug) console.log("row lookup finished in {0} ms.".f(new n.ext.XDate - r)); | |
| return i | |
| }; | |
| n.filterChanged = function (t) { | |
| if (w != null) { | |
| clearTimeout(w); | |
| if (n.options.debug) console.log("filtering cancelled") | |
| } | |
| var r = this.value; | |
| var i = h.cols[t.data.column]; | |
| var s = 200; | |
| if (i.type == "bool" || i.type == "unique") { | |
| s = 0; | |
| var o = e(this); | |
| var u = "indeterminate"; | |
| if (o.hasClass(u)) { | |
| t.preventDefault(); | |
| o.removeClass(u); | |
| r = true | |
| } else { | |
| if (!o.is(":checked")) { | |
| r = false | |
| } else { | |
| o.addClass(u); | |
| r = "" | |
| } | |
| } | |
| } | |
| b[i.column] = { | |
| filter: r, | |
| col: i | |
| }; | |
| w = setTimeout(function () { | |
| w = null; | |
| n.filter(); | |
| n.sort(); | |
| n.createTable() | |
| }, s) | |
| }; | |
| n.pageChanged = function (e) { | |
| e.preventDefault(); | |
| if (e.data.pageIndex < 1 || e.data.pageIndex > v) return; | |
| p = e.data.pageIndex; | |
| if (n.options.debug) console.log("paging to index:{0}".f(p)); | |
| h.fromRow = (p - 1) * d; | |
| h.toRow = h.fromRow + d; | |
| if (h.toRow > h.rows.length) h.toRow = h.rows.length; | |
| if (typeof n.options.pageChanged == "function") { | |
| n.options.pageChanged.call(e.target, { | |
| event: e, | |
| page: p | |
| }) | |
| } | |
| l = null; | |
| c = null; | |
| n.createTable() | |
| }; | |
| n.pageSizeChanged = function (t) { | |
| t.preventDefault(); | |
| var r = e(this).text().toLowerCase(); | |
| if (n.options.debug) console.log("pagesize changed to:{0}".f(r)); | |
| e(window).off("resize", n.windowResized); | |
| if (r == "all") n.options.pageSize = h.rows.length; | |
| else if (r == "auto") { | |
| n.options.pageSize = -1; | |
| e(window).on("resize", n.windowResized) | |
| } else n.options.pageSize = parseInt(r); | |
| p = 1; | |
| h.fromRow = 0; | |
| h.toRow = h.fromRow + n.options.pageSize; | |
| if (h.toRow > h.rows.length) h.toRow = h.rows.length; | |
| if (typeof n.options.pageSizeChanged == "function") { | |
| n.options.pageSizeChanged.call(t.target, { | |
| event: t, | |
| pageSize: n.options.pageSize | |
| }) | |
| } | |
| l = null; | |
| c = null; | |
| n.createTable() | |
| }; | |
| n.columnClicked = function (e) { | |
| e.preventDefault(); | |
| if (n.options.debug) console.log("col:{0} clicked".f(e.data.column)); | |
| if (m == e.data.column) g = !g; | |
| m = e.data.column; | |
| if (typeof n.options.columnClicked == "function") { | |
| n.options.columnClicked.call(e.target, { | |
| event: e, | |
| column: h.cols[m], | |
| descending: g | |
| }) | |
| } | |
| a = null; | |
| l = null; | |
| n.sort(); | |
| n.createTable() | |
| }; | |
| n.columnPickerClicked = function (t) { | |
| t.stopPropagation(); | |
| var r = e(this); | |
| var i = r.val(); | |
| if (n.options.debug) console.log("col:{0} {1}".f(i, r.is(":checked") ? "checked" : "unchecked")); | |
| h.cols[i].hidden = !h.cols[i].hidden; | |
| h.cols[i].index = new n.ext.XDate; | |
| u = null; | |
| l = null; | |
| n.createTable() | |
| }; | |
| n.checkToggleChanged = function (t) { | |
| t.preventDefault(); | |
| var r = e(this); | |
| if (r.is(":checked")) { | |
| var i = new n.ext.XDate; | |
| e.each(h.rows, function (e, t) { | |
| var n = h.rows[e]; | |
| if (n.checkable === false) return; | |
| S[t[E]] = n | |
| }); | |
| if (n.options.debug) console.log("{0} rows checked in {1} ms.".f(h.rows.length, new n.ext.XDate - i)); | |
| x = true | |
| } else { | |
| var i = new n.ext.XDate; | |
| for (var s in S) { | |
| var o = S[s]; | |
| if (o.checkable === false) continue; | |
| else delete S[s] | |
| } | |
| if (n.options.debug) console.log("{0} rows unchecked in {1} ms.".f(h.rows.length, new n.ext.XDate - i)); | |
| x = false | |
| } | |
| l = null; | |
| n.createTable() | |
| }; | |
| n.rowChecked = function (t) { | |
| t.preventDefault(); | |
| var r = e(this); | |
| var i = r.closest("tr").data("unique"); | |
| if (n.options.debug) console.log("row({0}) {1}".f(i, r.is(":checked") ? "checked" : "unchecked")); | |
| if (r.is(":checked")) S[i] = n.getRow(i); | |
| else delete S[i] | |
| }; | |
| n.rowClicked = function (t) { | |
| if (!E) { | |
| if (n.options.debug) console.log("no unique column specified"); | |
| return | |
| } | |
| var r = e(this); | |
| var i = h.cols[r.data("column")]; | |
| var s = r.closest("tr").data("unique"); | |
| var o = n.getRow(s); | |
| var u = r.closest("tr").find(".unique").is(":checked"); | |
| if (typeof n.options.rowClicked == "function") n.options.rowClicked.call(t.target, { | |
| event: t, | |
| row: o, | |
| column: i, | |
| checked: u | |
| }) | |
| }; | |
| n.dpOpChanged = function (e) { | |
| if (n.options.debug) console.log("dp oper:{0} clicked".f(e.data.op)); | |
| e.preventDefault(); | |
| y = e.data.op | |
| }; | |
| n.dpClicked = function (t) { | |
| if (n.options.debug) console.log("dp date:{0} clicked".f((new n.ext.XDate(t.date, n.options.types.date.utc === true)).toString("yyyy-MM-dd"))); | |
| t.preventDefault(); | |
| var r = (new n.ext.XDate(false)).setHours(0, 0, 0, 0); | |
| var i = Math.floor(t.date / (60 * 60 * 24 * 1e3)) - Math.floor(r / (60 * 60 * 24 * 1e3)); | |
| var s = e(t.data.input); | |
| var o = ".."; | |
| var u = s.val().indexOf(o); | |
| var a = s.val().substring(0, u); | |
| var f = s.val().substring(u + o.length); | |
| if (y == "l") a = i; | |
| if (y == "r") f = i; | |
| s.val("{0}{1}{2}".f(a, o, f)); | |
| e(this).datepicker("hide"); | |
| s.trigger("keyup") | |
| }; | |
| n.windowResized = function (e) { | |
| if (n.options.debug) console.log("window resized"); | |
| p = 1; | |
| h.fromRow = 0; | |
| l = null; | |
| c = null; | |
| n.createTable() | |
| }; | |
| r.init = function (t) { | |
| if (n.options.debug) console.log("watable initialization..."); | |
| e.extend(n.options, i, t); | |
| n.init(); | |
| return r | |
| }; | |
| r.update = function (e, t, i) { | |
| if (n.options.debug) console.log("publ.update called"); | |
| n.update(e, t, i); | |
| return r | |
| }; | |
| r.getData = function (t, r) { | |
| if (n.options.debug) console.log("publ.getData called"); | |
| t = t || false; | |
| r = r || false; | |
| var i = e.extend(true, {}, h); | |
| delete i.cols["unique"]; | |
| if (!r) { | |
| delete i.rows; | |
| i.rows = i.rowsOrg | |
| } | |
| delete i.rowsOrg; | |
| delete i.fromRow; | |
| delete i.toRow; | |
| if (t) { | |
| delete i.rows; | |
| i.rows = e.map(S, function (e, t) { | |
| return e | |
| }) | |
| } | |
| return i | |
| }; | |
| r.setData = function (e, t, i) { | |
| if (n.options.debug) console.log("publ.setData called"); | |
| n.setData(e, t, i); | |
| return r | |
| }; | |
| r.option = function (e, i) { | |
| if (n.options.debug) console.log("publ.option called"); | |
| if (i == t) return n.options[e]; | |
| n.options[e] = i; | |
| u = null; | |
| l = null; | |
| c = null; | |
| n.createTable(); | |
| return r | |
| }; | |
| return r | |
| }; | |
| e.fn.WATable = function (t) { | |
| t = t || {}; | |
| return this.each(function () { | |
| t.id = this; | |
| e(this).data("WATable", (new n).init(t)) | |
| }) | |
| }; | |
| String.prototype.format = String.prototype.f = function () { | |
| var e = this, | |
| t = arguments.length; | |
| while (t--) e = e.replace(new RegExp("\\{" + t + "\\}", "gm"), arguments[t]); | |
| return e | |
| } | |
| })(jQuery); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment