NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name jira-greenweb
// @namespace http://tampermonkey.net/
// @license MIT
// @version 0.2
// @description try to take over the world!
// @author You
// @match http://jira.greenweb.local/*
// @grant none
// ==/UserScript==
$(document).ready(function () {
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.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 (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];
};
function convert(month) { // تبدیل ماه ها به جلالی و بالعکس
switch (month) {
case 'Jan' : return '1' ;
case 'Feb' : return '2' ;
case 'Mar' : return '3' ;
case 'Apr' : return '4' ;
case 'Nov' : return '11' ;
case 'Dec' : return '12' ;
case '1' : return 'Jan' ;
case '2' : return 'Feb' ;
case '3' : return 'Mar' ;
case '4' : return 'Apr' ;
case '11' : return 'Nov' ;
case '12' : return 'Dec' ;
default: return "Dec";
}
}
function covertweek (week) { // تبدیل روزهای هفته
switch (week) {
case 'Mon' : return 'دوشنبه' ;
case 'Tue' : return 'سه شنبه' ;
case 'Wed' : return 'چهارشنبه' ;
case 'Thu' : return 'پنجشنبه' ;
case 'Fri' : return 'جمعه' ;
case 'Sat' : return 'شنبه' ;
case 'Sun' : return 'یکشنبه' ;
case 'Today' : return 'امروز' ;
}
}
function DIssue () {
var val = $('#due-date time').attr('datetime');
val = val.split('-');
var test=JalaliDate.gregorianToJalali(val[0], val[1], val[2]);
$('#due-date time').append('<time class="duedate_jalili">'+test[0] + "/" + test[1] + "/" + test[2]+'</time>');
}
// تابع کلی برای تبدیل تاریخ میلادی به جلالی
function ChDate() {
/* شروع تابع تبدیل تاریخ داخل جدول ها */
$('.issue-table > tbody > tr').each(function(){
if($(this).hasClass('changedtojalali') == false){ // وقتی یک تگ کلاس 'changedtojalali' داشته باشد یعنی تبدیل تاریخ روی آن تگ انجام شده است.
$(this).addClass('changedtojalali');
var val = $('.duedate',this).text();
var val2 = $('.duedate',this).text();
val = val.split('/');
var test=JalaliDate.gregorianToJalali(20+val[2], convert(val[1]), val[0]);
$('.duedate',this).text(test[0] + "/" + test[1] + "/" + test[2]);
if($('.duedate',this).text() == "NaN/1/NaN"){ // بررسی معتبر بودن تاریخ پس از تغییر
$('.duedate',this).text("");
}else{
$('.duedate',this).append('<span class="ddata-tooltip">'+ val2 +'</span>');
}
}
});
/* پایان تابع تبدیل تاریخ داخل جدول ها */
/* تغییر تاریخ داخل تگ های time */
$('.action-details span.date, #viewissuesidebar .user-tz, .user-tz').each(function(){
if($(this).hasClass('changedtojalali') == false){ // وقتی یک تگ کلاس 'changedtojalali' داشته باشد یعنی تبدیل تاریخ روی آن تگ انجام شده است.
$(this).addClass('changedtojalali');
var val = $('.livestamp',this).attr('datetime').split('T'); // دریافت تاریخ از اتربیوت datetime از کلاس livestamp , date format : YYYY-MM-DDTH:M:S+0330
var mdate = val[0].split('-');
var newdate = JalaliDate.gregorianToJalali(mdate[0], mdate[1], mdate[2]);
newdate = newdate[0] + "/" + newdate[1] + "/" + newdate[2];
var newdate2 = mdate[2] + "/" + convert(mdate[1]) + "/" + (mdate[0]-2000);
var newtime = val[1].split(':');
newtime = newtime[0] + ":" + newtime[1];
$(this).html(newdate + " " + newtime); // چاپ تاریخ جدید در تگ مورد نظر
$(this).removeAttr('title');
$(this).append('<span class="ddata-tooltip">' + newdate2 + " " + newtime + '</span>');
}
});
/* تغییر تاریخ داخل تگ های time */
/* تغییر تمامی تاریخ های داخل قسمت Project pages -> Tempo Part */
$("#tempo-content").each(function(){
var mdate = $('.date',this).html(); // دریافت تاریخ از تگ مورد نظر
var mdate2 = $('.date',this).html();
if($(this).hasClass('changedtojalali') == false){ // وقتی یک تگ کلاس 'changedtojalali' داشته باشد یعنی تبدیل تاریخ روی آن تگ انجام شده است.
$('.date',this).addClass('changedtojalali');
mdate = mdate.split('-');
var datepart1 = mdate[0].split('/');
var datepart2 = mdate[1].split('/');
var newdate1 = JalaliDate.gregorianToJalali(20+datepart1[2], convert(datepart1[1]), datepart1[0]);
newdate1 = newdate1[0] + "/" + newdate1[1] + "/" + newdate1[2];
var newdate2 = JalaliDate.gregorianToJalali(20+datepart2[2], convert(datepart2[1]), datepart2[0]);
newdate2 = newdate2[0] + "/" + newdate2[1] + "/" + newdate2[2];
$('.date',this).html(newdate1 + " - " + newdate2);
$('.date',this).css('width','180px');
$('.date',this).append('<span class="ddata-tooltip">' + mdate2 + '</span>'); // اضافه کردن تولتیپ
}
});
/* تغییر تمامی تاریخ های داخل قسمت Project pages -> Tempo Part */
/* تغییر تاریخ های داخل قسمت Tempo pages -> Timesheets -> weekdays dates */
$("._canvas__day_header_content___1b06_").each(function(){
if($(this).hasClass('changedtojalali') == false){ // وقتی یک تگ کلاس 'changedtojalali' داشته باشد یعنی تبدیل تاریخ روی آن تگ انجام شده است.
var day = $('._canvas__name_of_day___UsEQR', this).text();
day = covertweek(day);
$('._canvas__name_of_day___UsEQR', this).html(day);
$(this).addClass('changedtojalali');
var mdate = $("._canvas__header_date___2tBnp",this).html(); // دریافت تاریخ میلادی از تگ مورد نظر
mdate = mdate.split('.');
var newdate = JalaliDate.gregorianToJalali(2018, mdate[1], mdate[0]);
$("._canvas__header_date___2tBnp",this).html(newdate[2] + "." + newdate[1]); // ست کردن تاریخ جلالی روی تگ مورد نظر
}
});
/* تغییر تاریخ های داخل قسمت Tempo pages -> Timesheets -> weekdays dates */
/* تغییر تاریخ تولتیپ های پایین قسمت جدول انتخاب تاریخ جدید (pickdate) */
$(".calendar table>tfoot tr.footrow").each(function(){
if($('td',this).hasClass('changedtojalali') == false){ $(this).append('<td colspan="8" class="changedtojalali"></td>'); }
var olddate = $('td.ttip',this).html(); // دریافت تاریخ میلادی
olddate = olddate.split(' ');
if($.isNumeric(olddate[2])){ // چک کردن صحیح بودن تاریخ که باید عدد باشد
olddate[0] = olddate[0].replace(',', '');
var day = covertweek(olddate[0]); // تغییر نام روز هفته به جلالی
var newdate = JalaliDate.gregorianToJalali(2018,olddate[1],olddate[2]);
$('.changedtojalali',this).html(day + " " + newdate[1] + "/" + newdate[2]); // خیره تاریخ جدید در تگ جدید ساخته شده در خط 176
$('.calendar table>tfoot tr.footrow>td.ttip').hide(); // پنهان کردن تگ اصلی حاوی تاریخ میلادی
$('.calendar table>tfoot tr.footrow>td.changedtojalali').show();
}
});
/* تغییر تاریخ تولتیپ های پایین قسمت جدول انتخاب تاریخ جدید (pickdate) */
/* تغییر تاریخ های داخل ورودی ها (inputs) */
$('.field-group input[size="7"], .field-group input[id="duedate"], .tempo-field-group input.tempo-date-field').each(function(){
var val = $(this).val();
val = val.split('/');
if($.isNumeric(val[1]) != true){ // چک کردن ماه تاریخ مورد نظر که نبایستی عدد باشد
var newdate = JalaliDate.gregorianToJalali(20+val[2],convert(val[1]),val[0]);
newdate = newdate[0] + "/" + newdate[1] + "/" + newdate[2];
if(newdate != "NaN/1/NaN"){ // تایخ جلالی درست شده آیا معتبر است؟
$(this).val(newdate);
}
}
});
/* تغییر تاریخ های داخل ورودی ها (inputs) */
/* روند نمایش تولتیپ های درست شده */
$('#tempo-content, .issuePanelWrapper .action-details, #viewissuesidebar, .dashboard-item-content, .issue-table > tbody > tr').each(function(){
$('.date, .user-tz, .duedate',this).mouseenter(function(){
$('.ddata-tooltip',this).show();
});
$('.date, .user-tz, .duedate',this).mouseleave(function(){
$('.ddata-tooltip',this).hide();
});
var myFrame = $('.gadget-iframe',this).contents().find('.gadgetHeaderDiv h5.dateHeader');
myFrame.mouseenter(function(){
$('.ddata-tooltip',this).show();
});
myFrame.mouseleave(function(){
$('.ddata-tooltip',this).hide();
});
});
/* روند نمایش تولتیپ های درست شده */
$('.dashboard-item-content .gadget-iframe').each(function(){
if($(this).hasClass('changedtojalali') == false){ // وقتی یک تگ کلاس 'changedtojalali' داشته باشد یعنی تبدیل تاریخ روی آن تگ انجام شده است.
var myFrame = $(this).contents().find('.gadgetHeaderDiv h5.dateHeader'); // دریافت اطلاعات داخل تگ آی فریم مود نظر و پیدا کردن تاریخ میلادی موجود در آن
var olddate = myFrame.text();
if(olddate != ''){ // بررسی خالی نبودن تگ میلادی
$(this).addClass('changedtojalali');
olddate = olddate.split('-');
var date_part1 = olddate[0].split('/');
var date_part2 = olddate[1].split('/');
date_part1 = JalaliDate.gregorianToJalali(20+date_part1[2],convert(date_part1[1]),date_part1[0]);
date_part2 = JalaliDate.gregorianToJalali(20+date_part2[2],convert(date_part2[1]),date_part2[0]);
myFrame.html(date_part1[0] + "/" + date_part1[1] + "/" + date_part1[2] + " - " + date_part2[0] + "/" + date_part2[1] + "/" + date_part2[2]); // اضافه کردن تاریخ جلالی
myFrame.append('<span class="ddata-tooltip">' + olddate[0] + "-" + olddate[1] + '</span>'); // اضافه کردن تولتیپ تاریخ جلالی
}
}
});
/*$('._header__day_navigation_date___2wvF3>span').each(function(){
if($(this).hasClass('changedtojalali') == false){
$(this).addClass('changedtojalali');
var datedate = $(this).text();
datedate = datedate.split(' - ');
var datepart1 = datedate[0].split(' ');
var datepart2 = datedate[1].split(', ');
var newdate1 = JalaliDate.gregorianToJalali(datepart2[1],convert(datepart1[0]),datepart1[1]);
var newdate2 = JalaliDate.gregorianToJalali(datepart2[1],convert(datepart1[0]),datepart2[0]);
var newdate = newdate1[0] + "/" + newdate1[1] + "/" + newdate1[2] + " - " + newdate2[0] + "/" + newdate2[1] + "/" + newdate2[2];
$(this).html(newdate);
}
});*/
}
setInterval(function(){ ChDate(); },800); // اجرای تابع مورد نظر هر 800 میلی ثانیه برای چک کردن وجود داشتن تاریخ های میلادی و تبدیل آن به جلالی
setTimeout(DIssue,1500); // اجرای تابع مورد نظر بعد از 1500 میلی ثانیه صبر
});