From a02fbbf2d277813614036b7931f926b70c2aee87 Mon Sep 17 00:00:00 2001 From: vitalif Date: Sun, 3 May 2015 16:41:00 +0000 Subject: [PATCH] add minified calendar with utils --- calendar.js | 3 +-- calendar.min.js | 1 + calendar.util.js | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 calendar.min.js create mode 100644 calendar.util.js diff --git a/calendar.js b/calendar.js index c92419e..10e79a5 100644 --- a/calendar.js +++ b/calendar.js @@ -277,8 +277,7 @@ var Calendar = { }, /// Setup a text input box to be a calendar box. - set: function(input_or_id) - { + set: function(input_or_id) { if (typeof input_or_id == 'string') input_or_id = document.getElementById(input_or_id); if (!input_or_id) diff --git a/calendar.min.js b/calendar.min.js new file mode 100644 index 0000000..d27144c --- /dev/null +++ b/calendar.min.js @@ -0,0 +1 @@ +var Calendar={month_names:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],close_label:"Закрыть",weekdays:["Пн","Вт","Ср","Чт","Пт","Сб","Вс"],sunday:6,selectboxes:false,years:{min:-70,max:10},format:"d.m.Y",month_days:[31,28,31,30,31,30,31,31,30,31,30,31],today:new Date(),selected:new Date(),opt:{},data:[],addedListener:false,wrt:function(a){this.data.push(a)},fin:function(){this.wrt("");document.getElementById(this.opt.calendar).innerHTML=this.data.join("");this.data=[]},selectDate:function(e,f,b){var a=_calendar_active_instance;var d=a.opt.input;var c=d.value.split(/\s+/,2)[1]||"";if(c){c=" "+c}d.value=(a.format=="Y-m-d"?e+"-"+f+"-"+b:b+"."+f+"."+e)+c;a.hideCalendar()},showMonths:function(c,e){var f=this.today.getFullYear();var g=this.today.getMonth();var a=this.selected.getFullYear()==c?this.selected.getMonth():-1;this.wrt("");this.wrt("");this.wrt("");for(var b in this.month_names){if(b&&!(b%3)){this.wrt("")}var d=(cf||c==f&&b>g?"future":"today"))+(b==a?" selected":"");this.wrt("")}this.wrt("");this.wrt("
<");this.wrt(" "+c+"");this.wrt(" >
"+this.month_names[b]+"
");this.fin()},showYears:function(d){var b=d&~15;var f=this.today.getFullYear();var a=this.selected.getFullYear();this.wrt("");this.wrt("");this.wrt("");for(var c=0;c<16;c++){if(c&&!(c%4)){this.wrt("")}var e=(b+cf?"future":"today"))+(b+c==a?" selected":"");this.wrt("")}this.wrt("");this.wrt("
");this.wrt(" <");this.wrt(" "+b+" - "+(b+15)+"");this.wrt(" >");this.wrt("
"+(b+c)+"
");this.fin()},makeCalendar:function(k,x){var a=x+1;var g=k;if(a>=12){a=0;g++}var c=x-1;var f=k;if(c<0){c=11;f--}var m=this.today.getFullYear();this.wrt("");this.wrt("");this.wrt("");for(var b=0;b<7;b++){this.wrt("")}this.wrt("");var o=new Date(k,x,1);var y=(o.getDay()+Calendar.sunday)%7;var v=1;var r=0;if(!(k%4)&&((k%100)||!(k%400))){this.month_days[1]=29}else{this.month_days[1]=28}var t=this.month_days[x];var e=this.today.getFullYear();var u=(k-e)||(x-this.today.getMonth());var z=k==this.selected.getFullYear()&&x==this.selected.getMonth()?this.selected.getDate():-1;for(var s=0;s<=5;s++){if(h>=t){break}this.wrt("");for(var q=0;q<7;q++){if(v>t){r=0}else{if(q>=y&&!r){r=1}}if(r){var h=v,p=x+1;if(h<10){h="0"+h}if(p<10){p="0"+p}var n="";var l=u||(v-this.today.getDate());if(l<0){n=" past"}else{if(!l){n=" today"}else{n=" future"}}if(v==z){n+=" selected"}n+=" "+this.weekdays[q].toLowerCase();this.wrt("");v++}else{this.wrt("")}}this.wrt("")}this.wrt("
<");if(!this.selectboxes){this.wrt(" "+this.month_names[x]+"");this.wrt(" "+k+"")}else{this.wrt(" ");this.wrt("")}this.wrt(" >
"+this.weekdays[b]+"
"+h+" 
");this.fin()},showCalendar:function(){var b=this.opt.input;var h=document.getElementById(this.opt.calendar);var g=getOffset(b);var e=b.clientWidth||b.offsetWidth;var a=b.clientHeight||b.offsetHeight;h.style.left=(g.left-1)+"px";h.style.top=(g.top+a-1)+"px";this.selected=new Date();var d=b.value.replace(/\s+.*$/,"");if(d){var c=false;var f=d.split("-");if(f.length==3){f[1]--;c=new Date(f[0],f[1],f[2])}else{if(f.length==1){f=d.split(".");if(f.length==3){f[1]--;c=new Date(f[2],f[1],f[0])}}}if(c&&!isNaN(c.getFullYear())){this.selected=c}}this.makeCalendar(this.selected.getFullYear(),this.selected.getMonth());document.getElementById(this.opt.calendar).style.display="block";_calendar_active_instance=this;if(!Calendar.addedListener){addListener(h,"mousedown",function(i){i=i||window.event;if(i.stopPropagation){i.stopPropagation()}else{i.cancelBubble=true}return true});addListener(document,"mousedown",function(){Calendar.hideCalendar()});Calendar.addedListener=true}},hideCalendar:function(a){var b="";if(a){b=a.opt.calendar}else{if(!_calendar_active_instance){return}else{b=_calendar_active_instance.opt.calendar}}if(b){document.getElementById(b).style.display="none"}_calendar_active_instance=null},set:function(b){if(typeof b=="string"){b=document.getElementById(b)}if(!b){return}if(!this.opt.calendar){this.init()}var a=this;addListener(b,"focus",function(c){a.opt.input=this;a.showCalendar()})},init:function(){if(!this.opt.calendar||!document.getElementById(this.opt.calendar)){var a=document.createElement("div");if(!this.opt.calendar){this.opt.calendar="calender_div_"+Math.round(Math.random()*100)}a.setAttribute("id",this.opt.calendar);a.className="calendar-box";document.getElementsByTagName("body")[0].insertBefore(a,document.getElementsByTagName("body")[0].firstChild)}}}(function(){window.addListener=(function(){return window.addEventListener?function(e,d,c){e.addEventListener(d,c,false)}:function(e,d,c){e.attachEvent("on"+d,c)}})();var a=function(f){var i=f.getBoundingClientRect();var j=document.body;var d=document.documentElement;var c=window.pageYOffset||d.scrollTop||j.scrollTop;var g=window.pageXOffset||d.scrollLeft||j.scrollLeft;var h=d.clientTop||j.clientTop||0;var k=d.clientLeft||j.clientLeft||0;var l=i.top+c-h;var e=i.left+g-k;return{top:Math.round(l),left:Math.round(e)}};var b=function(c){var e=0,d=0;while(c){e=e+parseInt(c.offsetTop);d=d+parseInt(c.offsetLeft);c=c.offsetParent}return{top:e,left:d}};window.getOffset=function(c){if(c.getBoundingClientRect){return a(c)}else{return b(c)}}})(); \ No newline at end of file diff --git a/calendar.util.js b/calendar.util.js new file mode 100644 index 0000000..389c820 --- /dev/null +++ b/calendar.util.js @@ -0,0 +1,47 @@ +(function() { + +// UTILITY FUNCTIONS +window.addListener = (function() { + return window.addEventListener + ? function(el, type, fn) { el.addEventListener(type, fn, false); } + : function(el, type, fn) { el.attachEvent('on'+type, fn); }; +})(); + +var getOffsetRect = function(elem) +{ + var box = elem.getBoundingClientRect(); + + var body = document.body; + var docElem = document.documentElement; + + var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop; + var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft; + var clientTop = docElem.clientTop || body.clientTop || 0; + var clientLeft = docElem.clientLeft || body.clientLeft || 0; + var top = box.top + scrollTop - clientTop; + var left = box.left + scrollLeft - clientLeft; + + return { top: Math.round(top), left: Math.round(left) }; +}; + +var getOffsetSum = function(elem) +{ + var top = 0, left = 0; + while(elem) + { + top = top + parseInt(elem.offsetTop); + left = left + parseInt(elem.offsetLeft); + elem = elem.offsetParent; + } + return { top: top, left: left }; +}; + +window.getOffset = function(elem) +{ + if (elem.getBoundingClientRect) + return getOffsetRect(elem); + else + return getOffsetSum(elem); +}; + +})();