mirror of
https://gitverse.ru/kpa39l/yaru.nixg.ru.git
synced 2026-09-29 09:55:06 +00:00
1 line
9.6 KiB
JavaScript
1 line
9.6 KiB
JavaScript
y5.require(["Dom","Classes","Events","ShortCuts","Components","Styles","Elements","Dates","Strings"],function(){y5.Styles.createStyle(y5.moduleURL("Components.Calendar.y5-calendar","css"),true);y5.Components.Calendar=function(A){this.status="date";this.selectedDate=null;this.limitDates=A.limitDates||{min:null,max:null};if(A.date1&&A.date2){this.period=true;this.dateFrom=A.date1;this.dateTo=A.date2}if(A.date){this.date=new Date(A.date)}if(!y5.Types.date(this.date)){this.date=new Date()}this.params=A;this.HTML=new y5.Components.Calendar.HTML(this.params);this.init(this.params);return this.element};y5.Components.Calendar.prototype=new function(){this.init=function(){var C;switch(this.params.style){case"vista":C=[y5.Dates.monthNames[this.date.getMonth()]+" "+this.date.getFullYear(),this.createHTML()];break;default:C=[this.date.getFullYear(),y5.Dates.monthNames[this.date.getMonth()],this.createHTML()];break}C.push(A(this.date));this.element=y5.Elements.create(y5.Strings.printf(this.HTML.calendar,C));y5.Events.observe("click",this.eventHandler,this.element,true,this);var H=y5.Dom.getDescendant(this.element,"tr","y5-calendar-time");if(H){var E=y5.Dom.getDescendant(H,"input");y5.Events.observe("change",this.changeTime,E,true,this);y5.ShortCut.press([{key:y5.ShortCut.ENTER}],this.changeTime,E,{checkTarget:false,context:this,preventDefault:true});y5.ShortCut.press([{key:y5.ShortCut.ESC}],this.revertTime,E,{checkTarget:false,context:this,preventDefault:false})}y5.Events.observe("y5:Calendar:setDate",G,this.element,true,this);function F(I){this.selectedDate=y5.Types.date(I)?y5.Dates.clone(I):null;this.redraw()}y5.Events.observe("y5:Calendar:setSelectedDate",F,this.element,true,this);function G(I){this.date=new Date(I);this.redraw()}if(this.period){function D(I){if(I[0]&&I[1]){this.period=true;this.dateFrom=new Date(I[0]);this.dateTo=new Date(I[1]);this.redraw();if(!this.inPeriod(this.date)&&(this.date.getTime()!=this.dateFrom.getTime())&&(this.date.getTime()!=this.dateTo.getTime())){this.removeSelectedClass()}}else{this.period=false;this.redraw()}}y5.Events.observe("y5:Calendar:setPeriodDates",D,this.element,true,this)}y5.Events.observe("y5:Calendar:setLimitDates",function(I){if(y5.Types.date(I.min)){this.limitDates.min=y5.Dates.clone(min)}if(y5.Types.date(I.max)){this.limitDates.max=y5.Dates.clone(max)}},this.element,true,this);this.calendarCell=y5.Dom.getDescendant(this.element,"td","y5-calendar-fixed")};this.createHTML=function(){var I=new Date(this.date);I.setDate(1);I=I.getDay();I=y5.Dates.getDayOffset(I,this.params.firstDay+1);var K=y5.Dates.getMonthDays(this.date.getMonth(),this.date.getFullYear());var F="<tr>",G,J=new Date(),E,L,D;var C=false,M=y5.Types.date(this.limitDates.min),H=y5.Types.date(this.limitDates.max),N;if(y5.Types.date(this.selectedDate)){if(B(this.date,this.selectedDate)){C=true;G=this.selectedDate.getDate()}}else{C=true;G=this.date.getDate()}J.setHours(this.date.getHours());J.setMinutes(this.date.getMinutes());J.setSeconds(this.date.getSeconds());J.setMilliseconds(0);J=J.getTime();D=new Date(this.date);if(I!=0){D.setMonth(D.getMonth()-1);D=y5.Dates.getMonthDays(D.getMonth(),D.getFullYear());for(E=1;E<=I;E++){F+=y5.Strings.printf(this.HTML.otherMonthDay,D-I+E)}}D=new Date(this.date);for(E=1;E<=K;E++){if(I==0){F+="<tr>"}D.setDate(E);L="";if(C){L+=(G==E)?"y5-calendar-selected":""}L+=(D.getTime()==J)?" y5-calendar-today":"";L+=((I+this.params.firstDay)%7>=5)?" y5-calendar-weekend":"";if(this.period){L+=this.inPeriod(D)?" y5-calendar-period":""}if((M&&D.getTime()<this.limitDates.min.getTime())||(H&&D.getTime()>this.limitDates.max.getTime())){F+=y5.Strings.printf(this.HTML.disabledDay,E)}else{F+=y5.Strings.printf(this.HTML.day,[L,E])}if(++I>=7){F+="</tr>";I=0}}if(I!=0){for(E=I;E<7;E++){F+=y5.Strings.printf(this.HTML.otherMonthDay,E-I+1)}F+="</tr>"}if(this.period){if(!this.inPeriod(this.date)&&(this.date.getTime()!=this.dateFrom.getTime())&&(this.date.getTime()!=this.dateTo.getTime())){F=F.replace("y5-calendar-selected","")}}return y5.Strings.printf(this.HTML.calendarTable,F)};this.eventHandler=function(H){H.preventDefault();if(y5.Classes.test(H.target,this.HTML.classes.date)){this.removeSelectedClass();y5.Classes.add(H.target.parentNode,"y5-calendar-selected");this.date.setDate(H.target.innerHTML);this.redraw();y5.Events.notify("y5:Calendar:selectDate",this.element,true,this.date)}else{if(y5.Classes.test(H.target,this.HTML.classes.today)){H.target.blur();this.status="date";this.date=new Date();this.redraw();if(this.params.closeOnTodayLink){y5.Events.notify("y5:Calendar:selectDate",this.element,true,this.date)}}else{if(y5.Dom.testTagName(H.target,"a")&&y5.Classes.test(H.target,this.HTML.classes.info)){switch(this.status){case"date":this.status="month";this.redraw();break;case"month":this.status="year";this.redraw();break}}else{if(y5.Classes.test(H.target,this.HTML.classes.monthSelector)){this.status="date";this.updateDate("month",y5.Dates.monthNames.indexOf(H.target.innerHTML))}else{if(y5.Classes.test(H.target,this.HTML.classes.yearSelector)){this.status="month";this.updateDate("year",H.target.innerHTML)}else{if(y5.Dom.testTagName(H.target,"a")&&y5.Classes.test(H.target,this.HTML.classes.yearInfo)){var E=H.target.parentNode.innerHTML;H.target.parentNode.innerHTML=y5.Strings.printf(this.HTML.yearInput,this.date.getFullYear());var D=y5.Dom.getDescendant(this.element,"input",this.HTML.classes.yearInput);D.focus();function J(K){G.remove();F.remove();D.parentNode.innerHTML=E;this.updateDate("year",K.target.value)}var G=y5.Events.observe("change",J,D,true,this);var F=y5.Events.observe("blur",J,D,true,this);y5.ShortCut.press([{key:y5.ShortCut.ENTER}],J,D,{checkTarget:false,context:this,preventDefault:true,once:true})}else{if(y5.Classes.test(H.target,this.HTML.classes.yearPrev)){this.updateDate("year",-1,true)}else{if(y5.Classes.test(H.target,this.HTML.classes.yearNext)){this.updateDate("year",1,true)}else{if(y5.Classes.test(H.target,this.HTML.classes.monthPrev)){this.updateDate("month",-1,true)}else{if(y5.Classes.test(H.target,this.HTML.classes.monthNext)){this.updateDate("month",1,true)}else{if(y5.Dom.testTagName(H.target,"a")&&y5.Classes.test(H.target,this.HTML.classes.monthInfo)){var E=H.target.parentNode.innerHTML;H.target.parentNode.innerHTML=this.HTML.monthSelect;var C=y5.Dom.getDescendant(this.element,"select",this.HTML.classes.monthSelect);C.value=this.date.getMonth();C.focus();function I(L){G.remove();F.remove();var K=C.value;C.parentNode.innerHTML=E;this.updateDate("month",K)}var G=y5.Events.observe("change",I,C,true,this);var F=y5.Events.observe("blur",I,C,true,this);y5.ShortCut.press([{key:y5.ShortCut.ENTER}],I,C,{checkTarget:false,context:this,preventDefault:true,once:true})}}}}}}}}}}}};this.changeTime=function(G,D){var F=G.target.value,E,C,H;if(y5.Strings.isEmpty(F)||isNaN(parseInt(F,10))){G.target.value=A(this.date);return false}F=F.split(":");if(F.length==2){E=parseInt(F[0],10);C=parseInt(F[1],10)}else{F=F[0];if(F.length==4){E=parseInt(F.substr(0,2),10);C=parseInt(F.substr(2),10)}else{E=parseInt(F,10)%24;C=0}}H=A(this.date);if(!isNaN(E)){this.date.setHours(E)}if(!isNaN(C)){this.date.setMinutes(C)}G.target.value=A(this.date);if(A(this.date)!=H){y5.Events.notify("y5:Calendar:changeTime",this.element,true,this.date);return true}return false};this.revertTime=function(C){C.target.value=A(this.date)};this.redraw=function(){switch(this.status){case"date":this.calendarCell.innerHTML=this.createHTML();var D=y5.Dom.getElementByClass("y5-calendar-info",this.element);if(D){D.innerHTML=y5.Dates.monthNames[this.date.getMonth()]+" "+this.date.getFullYear()}D=y5.Dom.getElementByClass("y5-calendar-month-info",this.element);if(D){D.innerHTML=y5.Dates.monthNames[this.date.getMonth()]}D=y5.Dom.getElementByClass("y5-calendar-year-info",this.element);if(D){D.innerHTML=this.date.getFullYear()}D=y5.Dom.getDescendant(this.element,"input","y5-calendar-time-input");if(D){D.value=A(this.date)}break;case"month":var G=y5.Elements.create(this.HTML.monthSelector);y5.Dom.replaceNode(y5.Dom.getDescendant(this.calendarCell,"table"),G);y5.Classes.add(y5.Dom.getDescendants(G,"td")[this.date.getMonth()],"y5-calendar-selected");y5.Dom.getDescendant(this.element,"a",this.HTML.classes.info).innerHTML=this.date.getFullYear();break;case"year":var H=[];var J=this.date.getFullYear();for(var F=J-6;F<=J+6;F++){H.push(F)}var L=y5.Elements.create(y5.Strings.printf(this.HTML.yearSelector,H));y5.Classes.add(y5.Dom.getDescendants(L,"td")[6],"y5-calendar-selected");y5.Dom.replaceNode(y5.Dom.getDescendant(this.calendarCell,"table"),L);y5.Dom.getDescendant(this.element,"a",this.HTML.classes.info).innerHTML=y5.Strings.printf(this.HTML.yearInput,J);var K=y5.Dom.getDescendant(this.element,"input",this.HTML.classes.yearInput);K.focus();function C(M){I.remove();this.status="month";this.updateDate("year",M.target.value)}var I=y5.Events.observe("change",C,K,true,this);y5.ShortCut.press([{key:y5.ShortCut.ENTER}],C,K,{checkTarget:false,context:this,preventDefault:true,once:true});break}var E=y5.Dom.getDescendant(this.element,"tr","y5-calendar-time");if(E){if(this.status=="date"){E.style.display=""}else{E.style.display="none"}}};this.updateDate=function(D,E,F){var G,C;if(D=="year"){G="getFullYear";C="setYear"}else{G="getMonth";C="setMonth"}if(F){E=this.date[G]()+E}this.date[C](E);this.redraw()};this.inPeriod=function(C){return this.dateFrom<=C&&C<=this.dateTo};this.removeSelectedClass=function(){var C=y5.Dom.getDescendant(this.element,"td","y5-calendar-selected");if(C){y5.Classes.remove(C,"y5-calendar-selected")}};function A(C){return y5.Strings.printf("%02d:%02d",C.getHours(),C.getMinutes())}function B(D,C){return(D.getFullYear()==C.getFullYear())&&(D.getMonth()==C.getMonth())}};y5.require(["Components.Calendar.HTML"],function(){y5.loaded("Components.Calendar")})}); |