Last active
July 18, 2016 11:52
-
-
Save dgrammatiko/73269432efec4365c57df8491ae0012f to your computer and use it in GitHub Desktop.
This file contains 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
/* calendar-lang.js*/ | |
// Calendar._DN = new Array("یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه", "یکشنبه"); | |
// Calendar._SDN = new Array("یک", "دو", "سه", "چهار", "پنج", "جمعه", "شنبه", "یک"); | |
// Calendar._FD = 6; | |
// Calendar._MN = new Array("ژانویه", "فوریه", "مارس", "آوریل", "می", "جون", "جولای", "آگوست", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"); | |
// Calendar._SMN = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); | |
// Calendar._JMN = new Array("فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"); | |
// Calendar._JSMN = new Array("فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"); | |
// Calendar._TT = {}; | |
// Calendar._TT.INFO = "درباره تقویم"; | |
// Calendar._TT.ABOUT = "JalaliJSCalendar\nCopyright (c) 2008 Ali Farhadi (http://farhadi.ir/)\nDistributed under GNU GPL. See http://gnu.org/licenses/gpl.html for details.\n\nBased on The DHTML Calendar developed by Dynarch.com.\n(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n\nEdited By ParsJoomla TEAM (http://parsjoomla.com) for Joomla CMS!\n\n\nDate selection:\n- Use the \xab, \xbb buttons to select year\n- Use the " + String.fromCharCode(8249) + ", " + String.fromCharCode(8250) + " buttons to select month\n- Hold mouse button on any of the above buttons for faster selection."; | |
// Calendar._TT.ABOUT_TIME = "\n\nTime selection:\n- Click on any of the time parts to increase it\n- or Shift-click to decrease it\n- or click and drag for faster selection."; | |
// Calendar._TT.PREV_YEAR = "سال قبل (hold for menu)"; | |
// Calendar._TT.PREV_MONTH = "ماه قبل (hold for menu)"; | |
// Calendar._TT.GO_TODAY = "رفتن به امروز"; | |
// Calendar._TT.NEXT_MONTH = "ماه بعد (hold for menu)"; | |
// Calendar._TT.NEXT_YEAR = "سال بعد (hold for menu)"; | |
// Calendar._TT.SEL_DATE = "انتخاب تاریخ"; | |
// Calendar._TT.DRAG_TO_MOVE = "Drag to move"; | |
// Calendar._TT.PART_TODAY = " (امروز)"; | |
// Calendar._TT.DAY_FIRST = "ابتدا %s نمایش داده شود"; | |
// Calendar._TT.WEEKEND = "5"; | |
// Calendar._TT.CLOSE = "بستن"; | |
// Calendar._TT.TODAY = "امروز"; | |
// Calendar._TT.TIME_PART = "(Shift-)Click or drag to change value"; | |
// Calendar._TT.DEF_DATE_FORMAT = "%Y-%m-%d"; | |
// Calendar._TT.TT_DATE_FORMAT = "%A, %e %b"; | |
// Calendar._TT.WK = "هفته"; | |
// Calendar._TT.TIME = "زمان :"; | |
// Calendar._TT.LAM = "ق.ظ."; | |
// Calendar._TT.AM = "ق.ظ."; | |
// Calendar._TT.LPM = "ب.ظ."; | |
// Calendar._TT.PM = "ب.ظ."; | |
// Calendar._NUMBERS = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"]; | |
// Calendar._DIR = "rtl"; | |
/*************************************************************/ | |
Date.jalali_MD = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]; | |
Date.localLangNumbers = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"]; | |
// JalaliDate={g_days_in_month:[31,28,31,30,31,30,31,31,30,31,30,31],j_days_in_month:[31,31,31,31,31,31,30,30,30,30,30,29]};JalaliDate.jalaliToGregorian=function(j_y,j_m,j_d){j_y=parseInt(j_y);j_m=parseInt(j_m);j_d=parseInt(j_d);var jy=j_y-979;var jm=j_m-1;var jd=j_d-1;var j_day_no=365*jy+parseInt(jy/33)*8+parseInt((jy%33+3)/4);for(var i=0;i<jm;++i){j_day_no+=JalaliDate.j_days_in_month[i]}j_day_no+=jd;var g_day_no=j_day_no+79;var gy=1600+400*parseInt(g_day_no/146097);g_day_no=g_day_no%146097;var leap=true;if(g_day_no>=36525){g_day_no--;gy+=100*parseInt(g_day_no/36524);g_day_no=g_day_no%36524;if(g_day_no>=365){g_day_no++}else{leap=false}}gy+=4*parseInt(g_day_no/1461);g_day_no%=1461;if(g_day_no>=366){leap=false;g_day_no--;gy+=parseInt(g_day_no/365);g_day_no=g_day_no%365}for(var i=0;g_day_no>=JalaliDate.g_days_in_month[i]+(i==1&&leap);i++){g_day_no-=JalaliDate.g_days_in_month[i]+(i==1&&leap)}var gm=i+1;var gd=g_day_no+1;return[gy,gm,gd]};JalaliDate.checkDate=function(j_y,j_m,j_d){return !(j_y<0||j_y>32767||j_m<1||j_m>12||j_d<1||j_d>(JalaliDate.j_days_in_month[j_m-1]+(j_m==12&&!((j_y-979)%33%4))))};JalaliDate.gregorianToJalali=function(g_y,g_m,g_d){g_y=parseInt(g_y);g_m=parseInt(g_m);g_d=parseInt(g_d);var gy=g_y-1600;var gm=g_m-1;var gd=g_d-1;var g_day_no=365*gy+parseInt((gy+3)/4)-parseInt((gy+99)/100)+parseInt((gy+399)/400);for(var i=0;i<gm;++i){g_day_no+=JalaliDate.g_days_in_month[i]}if(gm>1&&((gy%4==0&&gy%100!=0)||(gy%400==0))){++g_day_no}g_day_no+=gd;var j_day_no=g_day_no-79;var j_np=parseInt(j_day_no/12053);j_day_no%=12053;var jy=979+33*j_np+4*parseInt(j_day_no/1461);j_day_no%=1461;if(j_day_no>=366){jy+=parseInt((j_day_no-1)/365);j_day_no=(j_day_no-1)%365}for(var i=0;i<11&&j_day_no>=JalaliDate.j_days_in_month[i];++i){j_day_no-=JalaliDate.j_days_in_month[i]}var jm=i+1;var jd=j_day_no+1;return[jy,jm,jd]};Date.prototype.setJalaliFullYear=function(y,m,d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);if(y<100){y+=1300}j[0]=y;if(m!=undefined){if(m>11){j[0]+=Math.floor(m/12);m=m%12}j[1]=m+1}if(d!=undefined){j[2]=d}var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.setJalaliMonth=function(m,d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);if(m>11){j[0]+=math.floor(m/12);m=m%12}j[1]=m+1;if(d!=undefined){j[2]=d}var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.setJalaliDate=function(d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);j[2]=d;var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.getJalaliFullYear=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[0]};Date.prototype.getJalaliMonth=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[1]-1};Date.prototype.getJalaliDate=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[2]};Date.prototype.getJalaliDay=function(){var day=this.getDay();day=(day+1)%7;return day};Date.prototype.setJalaliFullYear=function(y,m,d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);if(y<100){y+=1300}j[0]=y;if(m!=undefined){if(m>11){j[0]+=Math.floor(m/12);m=m%12}j[1]=m+1}if(d!=undefined){j[2]=d}var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.setJalaliMonth=function(m,d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);if(m>11){j[0]+=math.floor(m/12);m=m%12}j[1]=m+1;if(d!=undefined){j[2]=d}var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.setJalaliDate=function(d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);j[2]=d;var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.getJalaliFullYear=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[0]};Date.prototype.getJalaliMonth=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[1]-1};Date.prototype.getJalaliDate=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[2]};Date.prototype.getJalaliDay=function(){var day=this.getDay();day=(day+1)%7;return day}; | |
// | |
JalaliDate = { | |
g_days_in_month: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], | |
j_days_in_month: [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29] | |
}; | |
JalaliDate.jalaliToGregorian = function(j_y, j_m, j_d) | |
{ | |
j_y = parseInt(j_y); | |
j_m = parseInt(j_m); | |
j_d = parseInt(j_d); | |
var jy = j_y-979; | |
var jm = j_m-1; | |
var jd = j_d-1; | |
var j_day_no = 365*jy + parseInt(jy / 33)*8 + parseInt((jy%33+3) / 4); | |
for (var i=0; i < jm; ++i) j_day_no += JalaliDate.j_days_in_month[i]; | |
j_day_no += jd; | |
var g_day_no = j_day_no+79; | |
var gy = 1600 + 400 * parseInt(g_day_no / 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */ | |
g_day_no = g_day_no % 146097; | |
var leap = true; | |
if (g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */ | |
{ | |
g_day_no--; | |
gy += 100*parseInt(g_day_no/ 36524); /* 36524 = 365*100 + 100/4 - 100/100 */ | |
g_day_no = g_day_no % 36524; | |
if (g_day_no >= 365) | |
g_day_no++; | |
else | |
leap = false; | |
} | |
gy += 4*parseInt(g_day_no/ 1461); /* 1461 = 365*4 + 4/4 */ | |
g_day_no %= 1461; | |
if (g_day_no >= 366) { | |
leap = false; | |
g_day_no--; | |
gy += parseInt(g_day_no/ 365); | |
g_day_no = g_day_no % 365; | |
} | |
for (var i = 0; g_day_no >= JalaliDate.g_days_in_month[i] + (i == 1 && leap); i++) | |
g_day_no -= JalaliDate.g_days_in_month[i] + (i == 1 && leap); | |
var gm = i+1; | |
var gd = g_day_no+1; | |
return [gy, gm, gd]; | |
}; | |
JalaliDate.checkDate = function(j_y, j_m, j_d) | |
{ | |
return !(j_y < 0 || j_y > 32767 || j_m < 1 || j_m > 12 || j_d < 1 || j_d > | |
(JalaliDate.j_days_in_month[j_m-1] + (j_m == 12 && !((j_y-979)%33%4)))); | |
}; | |
JalaliDate.gregorianToJalali = function(g_y, g_m, g_d) | |
{ | |
g_y = parseInt(g_y); | |
g_m = parseInt(g_m); | |
g_d = parseInt(g_d); | |
var gy = g_y-1600; | |
var gm = g_m-1; | |
var gd = g_d-1; | |
var g_day_no = 365*gy+parseInt((gy+3) / 4)-parseInt((gy+99)/100)+parseInt((gy+399)/400); | |
for (var i=0; i < gm; ++i) | |
g_day_no += JalaliDate.g_days_in_month[i]; | |
if (gm>1 && ((gy%4==0 && gy%100!=0) || (gy%400==0))) | |
/* leap and after Feb */ | |
++g_day_no; | |
g_day_no += gd; | |
var j_day_no = g_day_no-79; | |
var j_np = parseInt(j_day_no/ 12053); | |
j_day_no %= 12053; | |
var jy = 979+33*j_np+4*parseInt(j_day_no/1461); | |
j_day_no %= 1461; | |
if (j_day_no >= 366) { | |
jy += parseInt((j_day_no-1)/ 365); | |
j_day_no = (j_day_no-1)%365; | |
} | |
for (var i = 0; i < 11 && j_day_no >= JalaliDate.j_days_in_month[i]; ++i) { | |
j_day_no -= JalaliDate.j_days_in_month[i]; | |
} | |
var jm = i+1; | |
var jd = j_day_no+1; | |
return [jy, jm, jd]; | |
}; | |
Date.prototype.setLocalCalFullYear = function(y, m, d) { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
if (y < 100) y += 1300; | |
j[0] = y; | |
if (m != undefined) { | |
if (m > 11) { | |
j[0] += Math.floor(m / 12); | |
m = m % 12; | |
} | |
j[1] = m + 1; | |
} | |
if (d != undefined) j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setFullYear(g[0], g[1]-1, g[2]); | |
}; | |
Date.prototype.setLocalCalMonth = function(m, d) { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
if (m > 11) { | |
j[0] += Math.floor(m / 12); | |
m = m % 12; | |
} | |
j[1] = m+1; | |
if (d != undefined) j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setFullYear(g[0], g[1]-1, g[2]); | |
}; | |
Date.prototype.setLocalCalDate = function(d) { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setFullYear(g[0], g[1]-1, g[2]); | |
}; | |
Date.prototype.getLocalCalFullYear = function() { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
return j[0]; | |
}; | |
Date.prototype.getLocalCalMonth = function() { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
return j[1]-1; | |
}; | |
Date.prototype.getLocalCalDate = function() { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
return j[2]; | |
}; | |
Date.prototype.getLocalCalDay = function() { | |
var day = this.getDay(); | |
day = (day + 1) % 7; | |
return day; | |
}; | |
/** | |
* LocalCal functions | |
*/ | |
Date.prototype.setLocalCalFullYear = function(y, m, d) { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
if (y < 100) y += 1300; | |
j[0] = y; | |
if (m != undefined) { | |
if (m > 11) { | |
j[0] += Math.floor(m / 12); | |
m = m % 12; | |
} | |
j[1] = m + 1; | |
} | |
if (d != undefined) j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setFullYear(g[0], g[1]-1, g[2]); | |
}; | |
Date.prototype.setLocalCalMonth = function(m, d) { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
if (m > 11) { | |
j[0] += Math.floor(m / 12); | |
m = m % 12; | |
} | |
j[1] = m+1; | |
if (d != undefined) j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setFullYear(g[0], g[1]-1, g[2]); | |
}; | |
Date.prototype.setLocalCalDate = function(d) { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setFullYear(g[0], g[1]-1, g[2]); | |
}; | |
Date.prototype.getLocalCalFullYear = function() { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
return j[0]; | |
}; | |
Date.prototype.getLocalCalMonth = function() { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
return j[1]-1; | |
}; | |
Date.prototype.getLocalCalDate = function() { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd); | |
return j[2]; | |
}; | |
Date.prototype.getLocalCalDay = function() { | |
var day = this.getDay(); | |
day = (day + 1) % 7; | |
return day; | |
}; | |
Date.prototype.getLocalCalMonthDays = function(month) { | |
var year = this.getLocalCalFullYear(); | |
if (typeof month == "undefined") { | |
month = this.getLocalCalMonth() | |
} | |
if (month == 11 && JalaliDate.checkDate(year, month + 1, 30)) { | |
return 30 | |
} else { | |
return Date.jalali_MD[month] | |
} | |
}; | |
Date.prototype.getLocalCalWeekNumber = function() { | |
var A = JalaliDate.jalaliToGregorian(this.getLocalCalFullYear(), 1, 1); | |
var B = new Date(A[0], A[1] - 1, A[2], 0, 0, 0); | |
var C = this.getLocalCalDayOfYear() - ((7 - B.getLocalCalDay()) % 7) - 1; | |
if (C < 0) { | |
return new Date(this - this.getLocalCalDay() * Date.DAY).getLocalCalWeekNumber() | |
} | |
return Math.floor(C / 7) + 1 | |
}; | |
Date.prototype.getLocalCalDayOfYear = function() { | |
var B = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); | |
var A = JalaliDate.jalaliToGregorian(this.getLocalCalFullYear(), 1, 0); | |
var D = new Date(A[0], A[1] - 1, A[2], 0, 0, 0); | |
var C = B - D; | |
return Math.floor(C / Date.DAY) | |
}; | |
Date.parseDate = function(I, M, C) { | |
I = I.toEnglish(); | |
var N = new Date(); | |
var G = new Date(); | |
var E = null; | |
var J = null; | |
var O = null; | |
var R = 0; | |
var K = 0; | |
var P = 0; | |
var A = 0; | |
var Q = M.match(/%.|[^%]+/g); | |
for (var L = 0; L < Q.length; L++) { | |
if (Q[L].charAt(0) == "%") { | |
switch (Q[L]) { | |
case "%%": | |
case "%t": | |
case "%n": | |
case "%u": | |
case "%w": | |
I = I.substr(1); | |
break; | |
I = I.substr(1); | |
break; | |
case "%U": | |
case "%W": | |
case "%V": | |
var B; | |
if (B = I.match(/^[0-5]?\d/)) { | |
I = I.substr(B[0].length) | |
} | |
break; | |
case "%C": | |
var H; | |
if (H = I.match(/^\d{1,2}/)) { | |
I = I.substr(H[0].length) | |
} | |
break; | |
case "%A": | |
case "%a": | |
var S = (Q[L] == "%a") ? Date.stringSDN : Date.stringDN; | |
for (j = 0; j < 7; ++j) { | |
if (I.substr(0, S[j].length).toLowerCase() == S[j].toLowerCase()) { | |
I = I.substr(S[j].length); | |
break | |
} | |
} | |
break; | |
case "%d": | |
case "%e": | |
if (O = I.match(/^[0-3]?\d/)) { | |
I = I.substr(O[0].length); | |
O = parseInt(O[0], 10) | |
} | |
break; | |
case "%m": | |
if (J = I.match(/^[01]?\d/)) { | |
I = I.substr(J[0].length); | |
J = parseInt(J[0], 10) - 1 | |
} | |
break; | |
case "%Y": | |
case "%y": | |
if (E = I.match(/^\d{2,4}/)) { | |
I = I.substr(E[0].length); | |
E = parseInt(E[0], 10); | |
if (E < 100) { | |
if (C == "jalali") { | |
E += (E > 29) ? 1300 : 1400 | |
} else { | |
E += (E > 29) ? 1900 : 2000 | |
} | |
} | |
} | |
break; | |
case "%b": | |
case "%B": | |
if (C != "gregorian") { | |
var F = (Q[L] == "%b") ? Date.stringSMN : Date.stringMN; // Jalali | |
} else { | |
var F = (Q[L] == "%b") ? Date.stringSMN : Date.stringMN; | |
} | |
for (j = 0; j < 12; ++j) { | |
if (I.substr(0, F[j].length).toLowerCase() == F[j].toLowerCase()) { | |
I = I.substr(F[j].length); | |
J = j; | |
break | |
} | |
} | |
break; | |
case "%H": | |
case "%I": | |
case "%k": | |
case "%l": | |
if (R = I.match(/^[0-2]?\d/)) { | |
I = I.substr(R[0].length); | |
R = parseInt(R[0], 10) | |
} | |
break; | |
case "%P": | |
case "%p": | |
if (I.substr(0, Date.stringTIMEPM.length) == Date.stringTIMEPM) { | |
I = I.substr(JoomlaCalendar.stringTIMEPM.length); | |
if (R < 12) { | |
R += 12 | |
} | |
} | |
if (I.substr(0, Date.stringTIMEPM.length) == Date.stringTIMEPM) { | |
I = I.substr(Date.stringTIMEPM.length); | |
if (R < 12) { | |
R += 12 | |
} | |
} | |
if (I.substr(0, Date.stringTIMEAM.length) == Date.stringTIMEAM) { | |
I = I.substr(Date.stringTIMEAM.length); | |
if (R >= 12) { | |
R -= 12 | |
} | |
} | |
if (I.substr(0, Date.stringTIMEAM.length) == Date.stringTIMEAM) { | |
I = I.substr(Date.stringTIMEAM.length); | |
if (R >= 12) { | |
R -= 12 | |
} | |
} | |
break; | |
case "%M": | |
if (K = I.match(/^[0-5]?\d/)) { | |
I = I.substr(K[0].length); | |
K = parseInt(K[0], 10) | |
} | |
break; | |
case "%S": | |
if (P = I.match(/^[0-5]?\d/)) { | |
I = I.substr(P[0].length); | |
P = parseInt(P[0], 10) | |
} | |
break; | |
case "%s": | |
var D; | |
if (D = I.match(/^-?\d+/)) { | |
return new Date(parseInt(D[0], 10) * 1000) | |
} | |
break; | |
default: | |
I = I.substr(2); | |
break | |
} | |
} else { | |
I = I.substr(Q[L].length) | |
} | |
} | |
if (E == null || isNaN(E)) { | |
E = N.getLocalFullYear(false, C) | |
} | |
if (J == null || isNaN(J)) { | |
J = N.getLocalMonth(false, C) | |
} | |
if (O == null || isNaN(O)) { | |
O = N.getLocalDate(false, C) | |
} | |
if (R == null || isNaN(R)) { | |
R = N.getHours() | |
} | |
if (K == null || isNaN(K)) { | |
K = N.getMinutes() | |
} | |
if (P == null || isNaN(P)) { | |
P = N.getSeconds() | |
} | |
G.setLocalFullYear(true, C, E, J, O); | |
G.setHours(R, K, P, A); | |
console.log(G); | |
return G | |
}; | |
Date.prototype.print = function(str, B) { | |
if (typeof str == "undefined") str = JoomlaCalendar.params.dateFormat; | |
var J = this.getLocalMonth(B); | |
var O = this.getLocalDate(B); | |
var D = this.getLocalFullYear(B); | |
var A = this.getLocalWeekNumber(B); | |
var F = this.getLocalCalDay(); | |
var G = {}; | |
var S = this.getHours(); | |
var M = (S >= 12); | |
var C = (M) ? (S - 12) : S; | |
var E = this.getLocalDayOfYear(B); | |
if (C == 0) { | |
C = 12 | |
} | |
var K = this.getMinutes(); | |
var Q = this.getSeconds(); | |
G["%a"] = Date.stringSDN[F]; | |
G["%A"] = Date.stringDN[F]; | |
G["%b"] = (B == "jalali" ? Date.stringSMN[J] : Date.stringSMN[J]); | |
G["%B"] = (B == "jalali" ? Date.stringMN[J] : Date.stringMN[J]); | |
G["%C"] = 1 + Math.floor(D / 100); | |
G["%d"] = (O < 10) ? ("0" + O) : O; | |
G["%e"] = O; | |
G["%H"] = (S < 10) ? ("0" + S) : S; | |
G["%I"] = (C < 10) ? ("0" + C) : C; | |
G["%j"] = (E < 100) ? ((E < 10) ? ("00" + E) : ("0" + E)) : E; | |
G["%k"] = S; | |
G["%l"] = C; | |
G["%m"] = (J < 9) ? ("0" + (1 + J)) : (1 + J); | |
G["%M"] = (K < 10) ? ("0" + K) : K; | |
G["%n"] = "\n"; | |
G["%p"] = M ? Date.stringTIMEPM : Date.stringTIMEAM; | |
G["%P"] = M ? Date.stringTIMEPM : Date.stringTIMEAM; | |
G["%s"] = Math.floor(this.getTime() / 1000); | |
G["%S"] = (Q < 10) ? ("0" + Q) : Q; | |
G["%t"] = "\t"; | |
G["%U"] = G["%W"] = G["%V"] = (A < 10) ? ("0" + A) : A; | |
G["%u"] = this.getLocalCalDay(B) + 1; | |
G["%w"] = this.getLocalCalDay(B); | |
G["%y"] = ("" + D).substr(2, 2); | |
G["%Y"] = D; | |
G["%%"] = "%"; | |
var re = /%./g; | |
console.log(str); | |
var tmpDate = str.replace(re, function (par) { return G[par] || par; }); | |
if (Object.prototype.toString.call(Date.localLangNumbers) === '[object Array]' && C != 'gregorian') | |
tmpDate = tmpDate.convertNumbers(); | |
return tmpDate; | |
}; | |
String.prototype.toEnglish = function() { | |
str = this.toString(); | |
if (Date.localLangNumbers) { | |
for (var A = 0; A < Date.localLangNumbers.length; A++) { | |
str = str.replace(new RegExp(Date.localLangNumbers[A], "g"), A) | |
} | |
} | |
return str | |
}; | |
/********************************************************************* | |
************************** Initialize ******************************* | |
*********************************************************************/ | |
/** | |
* Support for calendars other than gregorian should be done in this file ONLY! | |
* | |
* Make sure you initialise those functions: | |
* setLocalCalFullYear() Sets the year in the local calendar | |
* setLocalCalMonth() Sets the month in the local calendar | |
* setLocalCalDate() Sets the day in the local calendar | |
* | |
* getLocalCalMonth() Gets the month in the local calendar | |
* getLocalCalWeekNumber() Gets the week number in the local calendar | |
* getLocalCalDate() Gets the day in the local calendar | |
* getLocalCalDayOfYear() Gets the day of the year in the local calendar | |
* getLocalCalMonthDays() Gets the number of days for the month | |
* | |
* Date.localCal_MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31); The array with the days per month | |
* | |
* Also you need to provide an override for: | |
* Date.parseDate() The string parser that converts it to date | |
* gregorianToLocal Converts a gregorian calendar date to the local calendar | |
* localToGregorian Converts a local calendar date to gregorian calendar | |
* | |
* dateType: 'jalali' The name of the local calendar | |
* localLangNumbers: [0-9] The array with the translated numbers 0 to 9 | |
* | |
* Also needed a function that will bind on form submit and will convert local to gregorian. | |
**/ | |
document.onreadystatechange = function () { | |
if (document.readyState == "interactive") { | |
JoomlaCalendar.setup = function (elem) { | |
var element = elem.getElementsByTagName("button")[0]; | |
Date.stringDN =element.getAttribute("data-weekdays_full") ? element.getAttribute("data-weekdays_full").split('_') : | |
["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]; // Translated full day names | |
Date.stringSDN = element.getAttribute("data-weekdays_short") ? element.getAttribute("data-weekdays_short").split('_') : | |
["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; // Translated short day names | |
Date.stringMN = element.getAttribute("data-months_long") ? element.getAttribute("data-months_long").split('_') : | |
["January","February","March","April","May","June","July","August","September","October","November","December"]; // Translated full month names | |
Date.stringSMN = element.getAttribute("data-months_short") ? element.getAttribute("data-months_short").split('_') : | |
["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; // Translated short month names | |
Date.stringTODAY = element.getAttribute("data-today_trans") ? element.getAttribute("data-today_trans") : "Today"; // Translated string for Today | |
Date.stringWEEKEND = element.getAttribute("data-weekend") ? element.getAttribute("data-weekend").split(',').map(Number) : | |
[0,6]; // integers comma separated 0,6 | |
Date.stringWK = element.getAttribute("data-wk") ? element.getAttribute("data-wk") : "wk"; // Translated string for wk | |
Date.stringTIME = element.getAttribute("data-time") ? element.getAttribute("data-time") : "Time:"; // Translated string for Time: | |
Date.stringTIMEAM = element.getAttribute("data-time_am") ? element.getAttribute("data-time_am") : "AM"; // Translated string for AM | |
Date.stringTIMEPM = element.getAttribute("data-time_pm") ? element.getAttribute("data-time_pm") : "PM"; // Translated string for PM | |
Date.localStringDN = element.getAttribute("data-weekdays_full") ? element.getAttribute("data-weekdays_full").split('_') : | |
["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]; // Translated full day names | |
Date.localStringSDN = element.getAttribute("data-weekdays_short") ? element.getAttribute("data-weekdays_short").split('_') : | |
["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; // Translated short day names | |
Date.localStringMN = element.getAttribute("data-months_long") ? element.getAttribute("data-months_long").split('_') : | |
["January","February","March","April","May","June","July","August","September","October","November","December"]; // Translated full month names | |
Date.localStringSMN = element.getAttribute("data-months_short") ? element.getAttribute("data-months_short").split('_') : | |
["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; // Translated short month names | |
Date.localStringTODAY = element.getAttribute("data-today_trans") ? element.getAttribute("data-today_trans") : "Today"; // Translated string for Today | |
Date.localStringWEEKEND= element.getAttribute("data-weekend") ? element.getAttribute("data-weekend").split(',').map(Number) : | |
[0,6]; // integers comma separated 0,6 | |
Date.localStringWK = element.getAttribute("data-wk") ? element.getAttribute("data-wk") : "wk"; // Translated string for wk | |
Date.localStringTIME = element.getAttribute("data-time") ? element.getAttribute("data-time") : "Time:"; // Translated string for Time: | |
Date.localStringTIMEAM = element.getAttribute("data-time_am") ? element.getAttribute("data-time_am") : "AM"; // Translated string for AM | |
Date.localStringTIMEPM = element.getAttribute("data-time_pm") ? element.getAttribute("data-time_pm") : "PM"; // Translated string for PM | |
Date.localLangNumbers = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"]; // Translated string for PM | |
Date.dateType = 'jalali'; // Translated string for PM | |
JoomlaCalendar.addEvent(element, "click", function () { | |
var params = { | |
inputField : element.parentNode.getElementsByTagName('INPUT')[0], // The related input | |
dateFormat : element.getAttribute("data-dayformat") ? element.getAttribute("data-dayformat") : "%Y-%m-%d %H:%M:%S", // The date format | |
button : element, // The button associated | |
firstDayOfWeek : element.getAttribute("data-firstday") ? parseInt(element.getAttribute("data-firstday")) : 0, // First day (from translated strings) integer 0 = Sun | |
showsTodayBtn : (parseInt(element.getAttribute("data-today_btn")) == 0) ? false : true, // Enable today button? | |
compressedHeader : (parseInt(element.getAttribute("data-only_months_nav")) == 1) ? true : false, // Month and year in one line? | |
minYear : element.getAttribute("data-min_year") ? parseInt(element.getAttribute("data-min_year")) : 1970, // Minimum year | |
maxYear : element.getAttribute("data-max_year") ? parseInt(element.getAttribute("data-max_year")) : 2050, // Maximum year | |
weekNumbers : (parseInt(element.getAttribute("data-week_numbers")) == 1) ? true : false, // Display week numbers column? | |
showsTime : (parseInt(element.getAttribute("data-shows_time")) == 1) ? true : false, // Enable time picker? Make sure that the date format also INCLUDES time | |
time24 : (parseInt(element.getAttribute("data-time_24")) == 24) ? true : false, // Use 24 hour format? | |
showsOthers : (parseInt(element.getAttribute("data-show_others")) == 0) ? false : true, // Show days form the month before and after? | |
/** | |
* Support for different calendars, e.g.: jalali | |
*/ | |
dateType: 'jalali' | |
}; | |
// Initialize only if the button and input field are set | |
if (!(params.inputField || params.button)) { | |
console.log("Calendar.setup:\n Nothing to setup (no fields found). Please check your code"); | |
return false; | |
} | |
// jQuery(document).ready(function() { | |
// | |
// JoomlaCalendar.params.inputField.form.addEvent('onsubmit', function () { | |
// var dateEl = JoomlaCalendar.params.inputField; | |
// var dateFmt = JoomlaCalendar.params.dateFormat; | |
// if (dateEl && parseInt(dateEl.value) != 0 && dateEl.value != '') { | |
// console.log(dateEl.value); | |
// var date = Date.parseDate(dateEl.value, dateFmt, 'jalali'); | |
// JoomlaCalendar.params.inputField.value = date.print(dateFmt, 'gregorian'); | |
// } | |
// }); | |
// }); | |
// jQuery(document).ready(function() { | |
// jQuery('form').on('submit', function() { | |
// var cals = document.getElementsByClassName("field-calendar"); | |
// | |
// for (var index = 0, len = calendars.length; index < len; ++index) { | |
// // JoomlaCalendar.setup(calendars[index]); | |
// // var btn = calendars[index].getElementsByTagName("button")[0]; | |
// var inpt = calendars[index].getElementsByTagName('INPUT')[0]; | |
// | |
// var dateEl = inpt; | |
// var dateFmt = params.dateFormat; | |
// if (dateEl && parseInt(dateEl.value) != 0 && dateEl.value != '') { | |
// // We parse the jalali date | |
// var date = Date.parseDate(dateEl.value, dateFmt, 'gregorian'); | |
// // And tranform it to gregorian | |
// dateEl.value = date.print(dateFmt, 'jalali'); | |
// console.log(dateEl.value ) | |
// } | |
// } | |
// | |
// | |
// }); | |
// }); | |
// Method to set the value for the input field | |
var customOnSelect = function onSelect(cal) { | |
var p = cal.params; | |
var update = cal.dateClicked; | |
if (params.inputField) { | |
p.inputField.value = cal.date.print(p.dateFormat, p.dateType); | |
if (typeof params.inputField.onchange == "function") | |
p.inputField.onchange(); | |
} | |
if (update && typeof jCalendar.onUpdate == "function") | |
cal.onUpdate(cal); | |
if (update && cal.dateClicked) | |
cal.callCloseHandler(); | |
}; | |
/** | |
* Initialize the calendar | |
* | |
* @type {Window.JoomlaCalendar} | |
*/ | |
window.jCalendar = cal = new JoomlaCalendar(customOnSelect, null, params); | |
cal.params = params; | |
cal.setDateFormat(params.dateFormat); | |
cal.onSelected = customOnSelect; | |
cal.onClose = function (cal) { cal.hide(); }; | |
// Initialize the calendar | |
var dateEl = params.inputField; | |
var dateFmt = params.dateFormat; | |
var cal = window.jCalendar; | |
// Get the date from the input | |
if (dateEl && parseInt(dateEl.value) != 0 && dateEl.value != '') { | |
var date = Date.parseDate(dateEl.value, dateFmt, 'gregorian'); | |
cal.date = date.print(params.dateFormat, 'jalali'); | |
} else { | |
cal.date = new Date(); | |
// date = Date.parseDate(dateEl.value, dateFmt, 'gregorian'); | |
//params.dateStr = date.print(params.ifFormat, 'jalali'); | |
} | |
cal.create(params.inputField); | |
cal.refresh(); | |
cal.show(); | |
return cal; | |
}) | |
}; | |
// Get all the calendar fields | |
var calendars = document.getElementsByClassName("field-calendar"); | |
// Loop to initialize them all | |
for (var index = 0, len = calendars.length; index < len; ++index) { | |
JoomlaCalendar.setup(calendars[index]); | |
} | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment