| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040 |
- $.fn.scrollTo = function (target, options, callback) {
- if (typeof options == "function" && arguments.length == 2) {
- callback = options;
- options = target;
- }
- var settings = $.extend(
- {
- scrollTarget: target,
- offsetTop: 50,
- duration: 10,
- easing: "swing",
- },
- options
- );
- return this.each(function () {
- var scrollPane = $(this);
- var scrollTarget =
- typeof settings.scrollTarget == "number" ? settings.scrollTarget : $(settings.scrollTarget);
- var scrollY =
- typeof scrollTarget == "number"
- ? scrollTarget
- : scrollTarget.offset().top + scrollPane.scrollTop() - parseInt(settings.offsetTop);
- scrollPane.animate(
- { scrollTop: scrollY },
- parseInt(settings.duration),
- settings.easing,
- function () {
- if (typeof callback == "function") {
- callback.call(this);
- }
- }
- );
- });
- };
- /*
- * Date Format 1.2.3
- * (c) 2007-2009 Steven Levithan <stevenlevithan.com>
- * MIT license
- *
- * Includes enhancements by Scott Trenda <scott.trenda.net>
- * and Kris Kowal <cixar.com/~kris.kowal/>
- *
- * Accepts a date, a mask, or a date and a mask.
- * Returns a formatted version of the given date.
- * The date defaults to the current date/time.
- * The mask defaults to dateFormat.masks.default.
- */
- var dateFormat = (function () {
- var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
- timezone =
- /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
- timezoneClip = /[^-+\dA-Z]/g,
- pad = function (val, len) {
- val = String(val);
- len = len || 2;
- while (val.length < len) val = "0" + val;
- return val;
- };
- // Regexes and supporting functions are cached through closure
- return function (date, mask, utc) {
- var dF = dateFormat;
- // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
- if (
- arguments.length == 1 &&
- Object.prototype.toString.call(date) == "[object String]" &&
- !/\d/.test(date)
- ) {
- mask = date;
- date = undefined;
- }
- // Passing date through Date applies Date.parse, if necessary
- date = date ? new Date(date) : new Date();
- if (isNaN(date)) throw SyntaxError("invalid date");
- mask = String(dF.masks[mask] || mask || dF.masks["default"]);
- // Allow setting the utc argument via the mask
- if (mask.slice(0, 4) == "UTC:") {
- mask = mask.slice(4);
- utc = true;
- }
- var _ = utc ? "getUTC" : "get",
- d = date[_ + "Date"](),
- D = date[_ + "Day"](),
- m = date[_ + "Month"](),
- y = date[_ + "FullYear"](),
- H = date[_ + "Hours"](),
- M = date[_ + "Minutes"](),
- s = date[_ + "Seconds"](),
- L = date[_ + "Milliseconds"](),
- o = utc ? 0 : date.getTimezoneOffset(),
- flags = {
- d: d,
- dd: pad(d),
- ddd: dF.i18n.dayNames[D],
- dddd: dF.i18n.dayNames[D + 7],
- m: m + 1,
- mm: pad(m + 1),
- mmm: dF.i18n.monthNames[m],
- mmmm: dF.i18n.monthNames[m + 12],
- yy: String(y).slice(2),
- yyyy: y,
- h: H % 12 || 12,
- hh: pad(H % 12 || 12),
- H: H,
- HH: pad(H),
- M: M,
- MM: pad(M),
- s: s,
- ss: pad(s),
- l: pad(L, 3),
- L: pad(L > 99 ? Math.round(L / 10) : L),
- t: H < 12 ? "a" : "p",
- tt: H < 12 ? "am" : "pm",
- T: H < 12 ? "A" : "P",
- TT: H < 12 ? "AM" : "PM",
- Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
- o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + (Math.abs(o) % 60), 4),
- S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (((d % 100) - (d % 10) != 10) * d) % 10],
- };
- return mask.replace(token, function ($0) {
- return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
- });
- };
- })();
- // Some common format strings
- dateFormat.masks = {
- default: "ddd mmm dd yyyy HH:MM:ss",
- shortDate: "m/d/yy",
- mediumDate: "mmm d, yyyy",
- longDate: "mmmm d, yyyy",
- fullDate: "dddd, mmmm d, yyyy",
- shortTime: "h:MM TT",
- mediumTime: "h:MM:ss TT",
- longTime: "h:MM:ss TT Z",
- isoDate: "yyyy-mm-dd",
- isoTime: "HH:MM:ss",
- isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
- isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'",
- };
- // Internationalization strings
- dateFormat.i18n = {
- dayNames: [
- "Sun",
- "Mon",
- "Tue",
- "Wed",
- "Thu",
- "Fri",
- "Sat",
- "Sunday",
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday",
- ],
- monthNames: [
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec",
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December",
- ],
- };
- // For convenience...
- Date.prototype.format = function (mask, utc) {
- return dateFormat(this, mask, utc);
- };
- /*
- * http://code.google.com/p/flexible-js-formatting/
- *
- * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>
- *
- * 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.
- */
- Date.parseFunctions = { count: 0 };
- Date.parseRegexes = [];
- Date.formatFunctions = { count: 0 };
- Date.prototype.dateFormat = function (format, ignore_offset) {
- if (Date.formatFunctions[format] == null) {
- Date.createNewFormat(format);
- }
- var func = Date.formatFunctions[format];
- if (ignore_offset || !this.offset) {
- return this[func]();
- } else {
- return new Date(this.valueOf() - this.offset)[func]();
- }
- };
- Date.createNewFormat = function (format) {
- var funcName = "format" + Date.formatFunctions.count++;
- Date.formatFunctions[format] = funcName;
- var code = "Date.prototype." + funcName + " = function(){return ";
- var special = false;
- var ch = "";
- for (var i = 0; i < format.length; ++i) {
- ch = format.charAt(i);
- // escape character start
- if (!special && ch == "\\") {
- special = true;
- }
- // escaped string
- else if (!special && ch == '"') {
- var end = format.indexOf('"', i + 1);
- if (end == -1) {
- end = format.length;
- }
- code += "'" + String.escape(format.substring(i + 1, end)) + "' + ";
- i = end;
- }
- // escaped character
- else if (special) {
- special = false;
- code += "'" + String.escape(ch) + "' + ";
- } else {
- code += Date.getFormatCode(ch);
- }
- }
- eval(code.substring(0, code.length - 3) + ";}");
- };
- Date.getFormatCode = function (character) {
- switch (character) {
- case "d":
- return "String.leftPad(this.getDate(), 2, '0') + ";
- case "D":
- return "Date.dayNames[this.getDay()].substring(0, 3) + ";
- case "j":
- return "this.getDate() + ";
- case "l":
- return "Date.dayNames[this.getDay()] + ";
- case "S":
- return "this.getSuffix() + ";
- case "w":
- return "this.getDay() + ";
- case "z":
- return "this.getDayOfYear() + ";
- case "W":
- return "this.getWeekOfYear() + ";
- case "F":
- return "Date.monthNames[this.getMonth()] + ";
- case "m":
- return "String.leftPad(this.getMonth() + 1, 2, '0') + ";
- case "M":
- return "Date.monthNames[this.getMonth()].substring(0, 3) + ";
- case "n":
- return "(this.getMonth() + 1) + ";
- case "t":
- return "this.getDaysInMonth() + ";
- case "L":
- return "(this.isLeapYear() ? 1 : 0) + ";
- case "Y":
- return "this.getFullYear() + ";
- case "y":
- return "('' + this.getFullYear()).substring(2, 4) + ";
- case "a":
- return "(this.getHours() < 12 ? 'am' : 'pm') + ";
- case "A":
- return "(this.getHours() < 12 ? 'AM' : 'PM') + ";
- case "g":
- return "((this.getHours() %12) ? this.getHours() % 12 : 12) + ";
- case "G":
- return "this.getHours() + ";
- case "h":
- return "String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";
- case "H":
- return "String.leftPad(this.getHours(), 2, '0') + ";
- case "i":
- return "String.leftPad(this.getMinutes(), 2, '0') + ";
- case "s":
- return "String.leftPad(this.getSeconds(), 2, '0') + ";
- case "X":
- return "String.leftPad(this.getMilliseconds(), 3, '0') + ";
- case "O":
- return "this.getGMTOffset() + ";
- case "T":
- return "this.getTimezone() + ";
- case "Z":
- return "(this.getTimezoneOffset() * -60) + ";
- case "q": // quarter num, Q for name?
- return "this.getQuarter() + ";
- default:
- return "'" + String.escape(character) + "' + ";
- }
- };
- Date.parseDate = function (input, format) {
- if (Date.parseFunctions[format] == null) {
- Date.createParser(format);
- }
- var func = Date.parseFunctions[format];
- return Date[func](input);
- };
- Date.createParser = function (format) {
- var funcName = "parse" + Date.parseFunctions.count++;
- var regexNum = Date.parseRegexes.length;
- var currentGroup = 1;
- Date.parseFunctions[format] = funcName;
- var code =
- "Date." +
- funcName +
- " = function(input){\n" +
- "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, ms = -1, z = 0;\n" +
- "var d = new Date();\n" +
- "y = d.getFullYear();\n" +
- "m = d.getMonth();\n" +
- "d = d.getDate();\n" +
- "var results = input.match(Date.parseRegexes[" +
- regexNum +
- "]);\n" +
- "if (results && results.length > 0) {";
- var regex = "";
- var special = false;
- var ch = "";
- for (var i = 0; i < format.length; ++i) {
- ch = format.charAt(i);
- if (!special && ch == "\\") {
- special = true;
- } else if (special) {
- special = false;
- regex += String.escape(ch);
- } else {
- obj = Date.formatCodeToRegex(ch, currentGroup);
- currentGroup += obj.g;
- regex += obj.s;
- if (obj.g && obj.c) {
- code += obj.c;
- }
- }
- }
- code +=
- "if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0)\n" +
- "{return new Date(y, m, d, h, i, s, ms).applyOffset(z);}\n" +
- "if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n" +
- "{return new Date(y, m, d, h, i, s).applyOffset(z);}\n" +
- "else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n" +
- "{return new Date(y, m, d, h, i).applyOffset(z);}\n" +
- "else if (y > 0 && m >= 0 && d > 0 && h >= 0)\n" +
- "{return new Date(y, m, d, h).applyOffset(z);}\n" +
- "else if (y > 0 && m >= 0 && d > 0)\n" +
- "{return new Date(y, m, d).applyOffset(z);}\n" +
- "else if (y > 0 && m >= 0)\n" +
- "{return new Date(y, m).applyOffset(z);}\n" +
- "else if (y > 0)\n" +
- "{return new Date(y).applyOffset(z);}\n" +
- "}return null;}";
- Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$");
- eval(code);
- };
- Date.formatCodeToRegex = function (character, currentGroup) {
- switch (character) {
- case "D":
- return { g: 0, c: null, s: "(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)" };
- case "j":
- case "d":
- return { g: 1, c: "d = parseInt(results[" + currentGroup + "], 10);\n", s: "(\\d{1,2})" };
- case "l":
- return { g: 0, c: null, s: "(?:" + Date.dayNames.join("|") + ")" };
- case "S":
- return { g: 0, c: null, s: "(?:st|nd|rd|th)" };
- case "w":
- return { g: 0, c: null, s: "\\d" };
- case "z":
- return { g: 0, c: null, s: "(?:\\d{1,3})" };
- case "W":
- return { g: 0, c: null, s: "(?:\\d{2})" };
- case "F":
- return {
- g: 1,
- c: "m = parseInt(Date.monthNumbers[results[" + currentGroup + "].substring(0, 3)], 10);\n",
- s: "(" + Date.monthNames.join("|") + ")",
- };
- case "M":
- return {
- g: 1,
- c: "m = parseInt(Date.monthNumbers[results[" + currentGroup + "]], 10);\n",
- s: "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)",
- };
- case "n":
- case "m":
- return { g: 1, c: "m = parseInt(results[" + currentGroup + "], 10) - 1;\n", s: "(\\d{1,2})" };
- case "t":
- return { g: 0, c: null, s: "\\d{1,2}" };
- case "L":
- return { g: 0, c: null, s: "(?:1|0)" };
- case "Y":
- return { g: 1, c: "y = parseInt(results[" + currentGroup + "], 10);\n", s: "(\\d{4})" };
- case "y":
- return {
- g: 1,
- c:
- "var ty = parseInt(results[" +
- currentGroup +
- "], 10);\n" +
- "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
- s: "(\\d{1,2})",
- };
- case "a":
- return {
- g: 1,
- c:
- "if (results[" +
- currentGroup +
- "] == 'am') {\n" +
- "if (h == 12) { h = 0; }\n" +
- "} else { if (h < 12) { h += 12; }}",
- s: "(am|pm)",
- };
- case "A":
- return {
- g: 1,
- c:
- "if (results[" +
- currentGroup +
- "] == 'AM') {\n" +
- "if (h == 12) { h = 0; }\n" +
- "} else { if (h < 12) { h += 12; }}",
- s: "(AM|PM)",
- };
- case "g":
- case "G":
- case "h":
- case "H":
- return { g: 1, c: "h = parseInt(results[" + currentGroup + "], 10);\n", s: "(\\d{1,2})" };
- case "i":
- return { g: 1, c: "i = parseInt(results[" + currentGroup + "], 10);\n", s: "(\\d{2})" };
- case "s":
- return { g: 1, c: "s = parseInt(results[" + currentGroup + "], 10);\n", s: "(\\d{2})" };
- case "X":
- return { g: 1, c: "ms = parseInt(results[" + currentGroup + "], 10);\n", s: "(\\d{3})" };
- case "O":
- case "P":
- return {
- g: 1,
- c: "z = Date.parseOffset(results[" + currentGroup + "], 10);\n",
- s: "(Z|[+-]\\d{2}:?\\d{2})",
- }; // "Z", "+05:00", "+0500" all acceptable.
- case "T":
- return { g: 0, c: null, s: "[A-Z]{3}" };
- case "Z":
- return { g: 1, c: "s = parseInt(results[" + currentGroup + "], 10);\n", s: "([+-]\\d{1,5})" };
- default:
- return { g: 0, c: null, s: String.escape(character) };
- }
- };
- Date.parseOffset = function (str) {
- if (str == "Z") {
- return 0;
- } // UTC, no offset.
- var seconds;
- seconds = parseInt(str[0] + str[1] + str[2]) * 3600; // e.g., "+05" or "-08"
- if (str[3] == ":") {
- // "+HH:MM" is preferred iso8601 format ("O")
- seconds += parseInt(str[4] + str[5]) * 60;
- } else {
- // "+HHMM" is frequently used, though. ("P")
- seconds += parseInt(str[3] + str[4]) * 60;
- }
- return seconds;
- };
- Date.today = function () {
- var now = new Date();
- now.setHours(0);
- now.setMinutes(0);
- now.setSeconds(0);
- return now;
- };
- // convert the parsed date into UTC, but store the offset so we can optionally use it in dateFormat()
- Date.prototype.applyOffset = function (offset_seconds) {
- this.offset = offset_seconds * 1000;
- this.setTime(this.valueOf() + this.offset);
- return this;
- };
- Date.prototype.getTimezone = function () {
- return this.toString()
- .replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/, "$1")
- .replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3")
- .replace(/^.*?[0-9]{4} \(([A-Z]{3})\)/, "$1");
- };
- Date.prototype.getGMTOffset = function () {
- return (
- (this.getTimezoneOffset() > 0 ? "-" : "+") +
- String.leftPad(Math.floor(this.getTimezoneOffset() / 60), 2, "0") +
- String.leftPad(this.getTimezoneOffset() % 60, 2, "0")
- );
- };
- Date.prototype.getDayOfYear = function () {
- var num = 0;
- Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
- for (var i = 0; i < this.getMonth(); ++i) {
- num += Date.daysInMonth[i];
- }
- return num + this.getDate() - 1;
- };
- Date.prototype.getWeekOfYear = function () {
- // Skip to Thursday of this week
- var now = this.getDayOfYear() + (4 - this.getDay());
- // Find the first Thursday of the year
- var jan1 = new Date(this.getFullYear(), 0, 1);
- var then = 7 - jan1.getDay() + 4;
- document.write(then);
- return String.leftPad((now - then) / 7 + 1, 2, "0");
- };
- Date.prototype.isLeapYear = function () {
- var year = this.getFullYear();
- return (year & 3) == 0 && (year % 100 || (year % 400 == 0 && year));
- };
- Date.prototype.getFirstDayOfMonth = function () {
- var day = (this.getDay() - (this.getDate() - 1)) % 7;
- return day < 0 ? day + 7 : day;
- };
- Date.prototype.getLastDayOfMonth = function () {
- var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
- return day < 0 ? day + 7 : day;
- };
- Date.prototype.getDaysInMonth = function () {
- Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
- return Date.daysInMonth[this.getMonth()];
- };
- Date.prototype.getQuarter = function () {
- return Date.quarterFromMonthNum[this.getMonth()];
- };
- Date.prototype.getSuffix = function () {
- switch (this.getDate()) {
- case 1:
- case 21:
- case 31:
- return "st";
- case 2:
- case 22:
- return "nd";
- case 3:
- case 23:
- return "rd";
- default:
- return "th";
- }
- };
- String.escape = function (string) {
- return string.replace(/('|\\)/g, "\\$1");
- };
- String.leftPad = function (val, size, ch) {
- var result = new String(val);
- if (ch == null) {
- ch = " ";
- }
- while (result.length < size) {
- result = ch + result;
- }
- return result;
- };
- Date.quarterFromMonthNum = [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4];
- Date.daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
- Date.monthNames = [
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December",
- ];
- Date.dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
- Date.y2kYear = 50;
- Date.monthNumbers = {
- Jan: 0,
- Feb: 1,
- Mar: 2,
- Apr: 3,
- May: 4,
- Jun: 5,
- Jul: 6,
- Aug: 7,
- Sep: 8,
- Oct: 9,
- Nov: 10,
- Dec: 11,
- };
- Date.patterns = {
- ISO8601LongPattern: "Y\\-m\\-d\\TH\\:i\\:sO",
- ISO8601ShortPattern: "Y\\-m\\-d",
- ShortDatePattern: "n/j/Y",
- LongDatePattern: "l, F d, Y",
- FullDateTimePattern: "l, F d, Y g:i:s A",
- MonthDayPattern: "F d",
- ShortTimePattern: "g:i A",
- LongTimePattern: "g:i:s A",
- SortableDateTimePattern: "Y-m-d\\TH:i:s",
- UniversalSortableDateTimePattern: "Y-m-d H:i:sO",
- YearMonthPattern: "F, Y",
- };
- /**
- *
- * @author: Malishev Dmitry <[email protected]>
- */
- var _DEBUG = true;
- var _DEBUG_LEVEL = "ALL";
- // possible levels: ALL, IMPORTANT
- var Error = { FATAL: 1, WARNING: 0, NORMAL: -1 };
- /**
- * Init debug, grabs console object if accessible, or makes dummy debugger
- */
- var fb =
- _DEBUG && "undefined" != typeof console
- ? console
- : {
- log: function () {},
- debug: function () {},
- info: function () {},
- warn: function () {},
- error: function () {},
- assert: function () {},
- dir: function () {},
- dirxml: function () {},
- trace: function () {},
- group: function () {},
- groupEnd: function () {},
- time: function () {},
- timeEnd: function () {},
- profile: function () {},
- profileEnd: function () {},
- count: function () {},
- msg: function () {},
- };
- var checked = false;
- var frmname = "";
- //
- var App = {
- // Main namespases for page specific functions
- // Core namespaces
- Ajax: {
- Busy: {},
- },
- Core: {},
- // CONSTANT VALUES
- Constants: {
- UNLIM_VALUE: "unlimited", // overritten in i18n.js.php
- UNLIM_TRANSLATED_VALUE: "unlimited", // overritten in i18n.js.php
- },
- // Actions. More widly used funcs
- Actions: {
- DB: {},
- WEB: {},
- PACKAGE: {},
- MAIL_ACC: {},
- MAIL: {},
- },
- // Utilities
- Helpers: {},
- HTML: {
- Build: {},
- },
- Filters: {},
- Env: {
- lang: GLOBAL.lang,
- },
- i18n: {},
- Listeners: {
- DB: {},
- WEB: {},
- PACKAGE: {},
- MAIL_ACC: {},
- },
- View: {
- HTML: {
- Build: {},
- },
- // pages related views
- },
- Cache: {
- clear: function () {}, // TODO: stub method, will be used later
- },
- Ref: {},
- Tmp: {},
- Thread: {
- run: function (delay, ref) {
- setTimeout(function () {
- ref();
- }, delay * 10);
- },
- },
- Settings: {
- GLOBAL: {},
- General: {},
- },
- Templates: {
- Templator: null,
- Tpl: {},
- _indexes: {},
- },
- };
- // Internals
- Array.prototype.set = function (key, value) {
- var index = this[0][key];
- this[1][index] = value;
- };
- Array.prototype.get = function (key) {
- var index = this[0][key];
- return this[1][index];
- };
- Array.prototype.finalize = function () {
- this.shift();
- this[0] = this[0].join("");
- return this[0];
- };
- Array.prototype.done = function () {
- return this.join("");
- };
- String.prototype.wrapperize = function (key, ns) {
- var tpl = App.Templates.get(key, ns);
- tpl.set(":content", this);
- return tpl.finalize();
- };
- App.Ajax.request = function (method, data, callback, onError) {
- // this will prevent multiple ajaxes on user clicks
- /*if (App.Helpers.isAjaxBusy(method, data)) {
- fb.warn('ajax request ['+method+'] is busy');
- return;
- }*/
- //App.Helpers.setAjaxBusy(method, data);
- data = data || {};
- var prgs = $(".progress-container");
- switch (method) {
- case "cd":
- prgs.find("title").text("Opening dir");
- prgs.show();
- break;
- case "delete_files":
- prgs.find("title").text("Deleting");
- prgs.show();
- break;
- case "unpack_item":
- prgs.find("title").text("Unpacking");
- prgs.show();
- break;
- case "create_file":
- prgs.find("title").text("Creating file");
- prgs.show();
- break;
- case "create_dir":
- prgs.find("title").text("Creating directory");
- prgs.show();
- break;
- case "rename_file":
- prgs.find("title").text("Renaming file");
- prgs.show();
- break;
- case "copy_file":
- case "copy_directory":
- prgs.find("title").text("Copying files");
- prgs.show();
- break;
- default:
- break;
- }
- jQuery.ajax({
- url: GLOBAL.ajax_url,
- global: false,
- type: data.request_method || "GET",
- data: jQuery.extend(data, { action: method }),
- dataType: "text boost",
- converters: {
- "text boost": function (value) {
- value = value.trim();
- return $.parseJSON(value);
- },
- },
- async: true,
- cache: false,
- error: function (jqXHR, textStatus, errorThrown) {
- prgs.hide();
- onError && onError();
- if ("undefined" != typeof onError) {
- fb.error(textStatus);
- }
- },
- complete: function () {
- //App.Helpers.setAjaxFree(method, data);
- prgs.hide();
- },
- success: function (reply) {
- prgs.hide();
- //App.Helpers.setAjaxFree(method, data);
- try {
- callback && callback(reply);
- } catch (e) {
- fb.error("GENERAL ERROR with ajax method: " + data.request_method + " " + e);
- //App.Helpers.generalError();
- }
- },
- });
- };
- jQuery.extend({
- keys: function (obj) {
- if (!obj) {
- return [];
- }
- var a = [];
- jQuery.each(obj, function (k) {
- a.push(k);
- });
- return a;
- },
- });
- App.Core.create_hidden_form = function (action) {
- var form = jQuery("<form>", {
- id: "hidden-form",
- method: "post",
- action: action,
- });
- jQuery("body").append(form);
- return form;
- };
- App.Core.extend_from_json = function (elm, data, prefix) {
- elm = jQuery(elm);
- var data = App.Core.flatten_json(data, prefix);
- var keys = jQuery.keys(data);
- for (var i = 0, cnt = keys.length; i < cnt; i++) {
- elm.append(
- jQuery("<input>", {
- name: keys[i],
- value: data[keys[i]],
- type: "hidden",
- })
- );
- }
- return elm;
- };
- App.Core.flatten_json = function (data, prefix) {
- var keys = jQuery.keys(data);
- var result = {};
- prefix || (prefix = "");
- if (keys.length) {
- for (var i = 0, cnt = keys.length; i < cnt; i++) {
- var value = data[keys[i]];
- switch (typeof value) {
- case "function":
- break;
- case "object":
- result = jQuery.extend(
- result,
- App.Core.flatten_json(value, prefix + "[" + keys[i] + "]")
- );
- break;
- default:
- result[prefix + "[" + keys[i] + "]"] = value;
- }
- }
- return result;
- } else {
- return false;
- }
- };
- //
- // Cookies adapter
- // Allow to work old pages realisations of cookie requests
- //
- function createCookie(name, value, expire_days) {
- jQuery.cookie(name, value, { expires: expire_days });
- }
- function readCookie(name) {
- jQuery.cookie(name);
- }
- function eraseCookie(name) {
- jQuery.removeCookie(name);
- }
- /**
- * Timer for profiling
- */
- var timer = {};
- timer.start = function () {
- timer.start_time = new Date();
- };
- timer.stop = function (msg) {
- timer.stop_time = new Date();
- timer.print(msg);
- };
- timer.print = function (msg) {
- var passed = timer.stop_time - timer.start_time;
- fb.info(msg || "" + passed / 1000);
- };
- String.prototype.trim = function () {
- var str = this;
- str = str.replace(/^\s+/, "");
- for (var i = str.length - 1; i >= 0; i--) {
- if (/\S/.test(str.charAt(i))) {
- str = str.substring(0, i + 1);
- break;
- }
- }
- return str;
- };
- set_sticky_class = function () {
- var toolbar = $(".toolbar");
- var tableHeader = $(".table-header");
- var toolbarOffset = toolbar.offset().top;
- var headerHeight = $(".top-bar").outerHeight();
- if ($(window).scrollTop() > toolbarOffset - headerHeight) {
- toolbar.addClass("active");
- tableHeader.addClass("active");
- } else {
- toolbar.removeClass("active");
- tableHeader.removeClass("active");
- }
- };
- function checkedAll(frmname) {
- if ($("input#toggle-all").prop("checked")) {
- $(".l-unit:not(.header)").addClass("selected");
- $(".ch-toggle").prop("checked", true);
- $(".toggle-all").addClass("clicked-on");
- } else {
- $(".l-unit:not(.header)").removeClass("selected");
- $(".ch-toggle").prop("checked", false);
- $(".toggle-all").removeClass("clicked-on");
- }
- }
- function doSearch(url) {
- var url = url || "/search/";
- var loc = url + "?q=" + $(".js-search-input").val() + "&token=" + $('input[name="token"]').val();
- location.href = loc;
- return false;
- }
- function elementHideShow(elementToHideOrShow, trigger) {
- var el = document.getElementById(elementToHideOrShow);
- el.style.display = el.style.display === "none" ? "block" : "none";
- if (typeof trigger !== "undefined") {
- trigger.querySelector(".js-section-toggle-icon").classList.toggle("fa-square-minus");
- trigger.querySelector(".js-section-toggle-icon").classList.toggle("fa-square-plus");
- }
- }
|