| 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 <dima.malishev@gmail.com>
- */
- 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');
- }
- }
|