%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/templates/p4_new/js/ |
Current File : /home/bitrix/www/bitrix/templates/p4_new/js/jquery.simpledatepicker.js |
/** * jQuery simpleDatePicker * http://codecanyon.net/item/jquery-simpledatepicker/9372767 * * Author: RieTs */ ;(function ( $, window, document, undefined ) { "use strict"; var pluginName = "simpleDatePicker"; //Plugin constructor function Plugin ( element, options ) { this.element = element; this.$element = $(element); this.name = pluginName; // Extend default options with those supplied by user. this.opts = $.extend(true, {}, $.fn[pluginName].defaults, options); this.$elements = { day:null, month:null, year:null, output:null } this.init(element,options); } //Avoid Plugin.prototype conflicts Plugin.prototype = { //Allways 2 digits _pad: function(number) { number = number + ''; if (number.length<2) number='0'+number; return number }, //Return date from string _date: function(date, format) { var year=date.substr(format.indexOf("yyyy"),4); var month=date.substr(format.indexOf("mm"),2); var day=date.substr(format.indexOf("dd"),2); return new Date(year, month-1, day, 0, 0, 0, 0); }, //Return string date _format: function(date, format) { var year=date.getFullYear(); var month=parseInt(date.getMonth(),10)+1; var day=date.getDate(); format=format.replace("yyyy",year); format=format.replace("mm", this._pad(month)); format=format.replace("dd", this._pad(day)); return format; }, //Initialize plugin init: function () { var me=this; //Default min -10 years if (me.opts.date.min==null) { var year=new Date().getFullYear()-10; me.opts.date.min=me._format(new Date(year, 0, 1, 0, 0, 0, 0),me.opts.format); } //Default max +10 years if (me.opts.date.max==null) { var year=new Date().getFullYear()+10; me.opts.date.max=me._format(new Date(year, 11, 31, 0, 0, 0, 0),me.opts.format); } //Default day, today if (me.opts.date.selected=='today') { me.opts.date.selected=me._format(new Date(),me.opts.format); } //Output element if (me.opts.output!=null) me.$elements.output=$(me.opts.output); //Selectors me.$elements.year=$("<select />").attr("name","year"); me.$elements.month=$("<select />").attr("name","month"); me.$elements.day=$("<select />").attr("name","day"); if (me.opts.css!=null) { me.$elements.year.addClass(me.opts.css); me.$elements.month.addClass(me.opts.css); me.$elements.day.addClass(me.opts.css); } //Watchers me.$elements.year.on("change",function() { me._draw(); me.opts.onSelect.call(me, me, me._get()); me._output(); }); me.$elements.month.on("change",function() { me._draw(); me.opts.onSelect.call(me, me, me._get()); me._output(); }); me.$elements.day.on("change",function() { me._draw(); me.opts.onSelect.call(me, me, me._get()); me._output(); }); if (me.$elements.output!=null) { me.$elements.output.on("change."+pluginName,function(){ var el=$(this) me._set(el.val()); }); me.$elements.output.trigger("change."+pluginName); } //Append selectors to html var parts=me.opts.order.split("-"); for (var i = 0, len = parts.length; i < len; i++) { if (parts[i]=='y') me.$element.append(me.$elements.year); if (parts[i]=='m') me.$element.append(me.$elements.month); if (parts[i]=='d') me.$element.append(me.$elements.day); } me._draw(); //Set date if (me.opts.date.selected!=null) me._set(me.opts.date.selected); me.opts.onLoad.call(me,me); }, //Destroy plugin destroy: function() { //Remove elements this.$elements.year.remove(); this.$elements.month.remove(); this.$elements.day.remove(); //Remove data this.$element.removeData('plugin_' + pluginName); //Remove events if (this.$elements.output!=null) this.$elements.output.off("change."+pluginName); //callback function this.opts.onDestroy.call(this); }, //Draw correct values for selects _draw: function() { var me=this; var date_min=me._date(me.opts.date.min, me.opts.format); var date_max=me._date(me.opts.date.max, me.opts.format); //Find days limit var limit=31; if (me.$elements.month.val()=='02') { var leapYear = (((me.$elements.year.val() % 4 == 0) && (me.$elements.year.val() % 100 != 0)) || (me.$elements.year.val() % 400 == 0)) ? 1 : 0; if (leapYear) limit=29; else limit=28; } if (me.$elements.month.val()=='04') limit=30; if (me.$elements.month.val()=='06') limit=30; if (me.$elements.month.val()=='09') limit=30; if (me.$elements.month.val()=='11') limit=30; /* Add options: - Get old value selected - Remove all options - Add new options - Mark selected, old value if exist or first option if not TODO: This code is not sexy, refactor in future versions */ var old=null; var add=null; var mark=null; var option=null; //Year old=me.$elements.year.find("option:selected").val(); me.$elements.year.find("option").remove(); if (me.opts.text.year!=null) { option=$("<option/>").attr("value",'').text(me.opts.text.year); me.$elements.year.append(option); } for (var i=date_min.getFullYear();i<=date_max.getFullYear();i++) { var option=$("<option/>").attr("value",me._pad(i)).text(i); me.$elements.year.append(option); } mark=me.$elements.year.find("option[value='"+old+"']"); if (mark.size()>0) mark.prop("selected",true); else me.$elements.year.find("option:first").prop("selected",true); //Month old=me.$elements.month.find("option:selected").val(); me.$elements.month.find("option").remove(); if (me.opts.text.month!=null) { option=$("<option/>").attr("value",'').text(me.opts.text.month); me.$elements.month.append(option); } for (var i=1;i<=12;i++) { add=1; if (me.$elements.year.val()==date_min.getFullYear()) { if (i<date_min.getMonth()+1) add=0; } if (me.$elements.year.val()==date_max.getFullYear()) { if (i>date_max.getMonth()+1) add=0; } if (add==1) me.$elements.month.append("<option value='"+me._pad(i)+"'>"+me.opts.months[(i-1)]+"</option>"); } mark=me.$elements.month.find("option[value='"+old+"']"); if (mark.size()>0) mark.prop("selected",true); else me.$elements.month.find("option:first").prop("selected",true); //Day old=me.$elements.day.find("option:selected").val(); me.$elements.day.find("option").remove(); if (me.opts.text.day!=null) { option=$("<option/>").attr("value",'').text(me.opts.text.day); me.$elements.day.append(option); } for (var i=1;i<=31;i++) { add=1; if (me.$elements.year.val()==date_min.getFullYear() && me.$elements.month.val()==me._pad(date_min.getMonth()+1)) { if (i<date_min.getDate()) add=0; } if (me.$elements.year.val()==date_max.getFullYear() && me.$elements.month.val()==me._pad(date_max.getMonth()+1)) { if (i>date_max.getDate()) add=0; } if (i>limit) add=0; if (add==1) me.$elements.day.append("<option value='"+me._pad(i)+"'>"+i+"</option>"); } mark=me.$elements.day.find("option[value='"+old+"']"); if (mark.size()>0) mark.prop("selected",true); else me.$elements.day.find("option:first").prop("selected",true); }, //Get selected date _get: function() { if (this.$elements.year.val()!='' && this.$elements.month.val()!='' && this.$elements.day.val()!='') { var output=this.opts.format; output=output.replace("yyyy",this.$elements.year.val()); output=output.replace("mm",this.$elements.month.val()); output=output.replace("dd",this.$elements.day.val()); return output; } return null; }, //Set date _set: function(date) { if (date!='') { var year=date.substr(this.opts.format.indexOf("yyyy"), 4); var month=date.substr(this.opts.format.indexOf("mm"), 2); var day=date.substr(this.opts.format.indexOf("dd"), 2); this.$elements.year.val(year); this.$elements.month.val(month); this.$elements.day.val(day); } }, //Output result _output: function() { if (this.opts.output!=null) { var date=this._get(); if (date) { this.$elements.output.val(date); this.$elements.output.change(); } else { this.$elements.output.val(''); this.$elements.output.change(); } } }, //Set min date setMin: function(min) { this.opts.date.min=min; this._draw(); }, //Set max date setMax: function(max) { this.opts.date.max=max; this._draw(); }, //Set selected date setDate: function(date) { this.opts.date.selected=date; this._set(this.opts.date.selected) }, //Get selected date getDate: function() { var date=this._get(); return date; }, //Get selected date remove: function() { this.destroy(); } } //Plugin definition $.fn[pluginName] = function(options) { //Public method if (typeof arguments[0] === 'string') { var args = Array.prototype.slice.call(arguments, 1); if ($.isFunction(Plugin.prototype[options])) { var response; this.each(function() { response= $.data(this, 'plugin_' + pluginName)[options](args[0]); }); //If exists method response, return response if (typeof response !== 'undefined') return response; else return this; } else { $.error('Method ' + options + ' is not available'); } //New instance of the plugin } else if (typeof options === "object" || !options) { return this.each(function() { if (!$.data(this, 'plugin_' + pluginName)) { $.data(this, 'plugin_' + pluginName, new Plugin(this, options)); } }); } }; //Default options $.fn[pluginName].defaults = { date: { selected:null, min:null, max:null }, months:['January','February','March','April','May','June','July','August','September','October','November','December'], text: { day:null, month:null, year:null }, format: "yyyy-mm-dd", output:null, order: "y-m-d", css: null, onSelect:function() {}, onDestroy:function() {}, onLoad:function() {} }; })( jQuery, window, document );