1 line
2.8 KiB
JavaScript
1 line
2.8 KiB
JavaScript
var dateInputBinding=new Shiny.InputBinding;$.extend(dateInputBinding,{_newDate:function(e){if(e instanceof Date)return e;var t=Date.parse(e);if(isNaN(t))return null;return new Date(t)},_setMin:function(e,t){if(t==null){$(e).bsDatepicker("setStartDate",null);return}var a=this._newDate(t);if(a===null)return;var i=$(e).bsDatepicker("getUTCDate");$(e).bsDatepicker("setStartDate",this._utcDateAsLocal(a));if(a&&i&&a.getTime()>i.getTime()){$(e).bsDatepicker("clearDates")}else{$(e).bsDatepicker("setUTCDate",i)}},_setMax:function(e,t){if(t==null){$(e).bsDatepicker("setEndDate",null);return}var a=this._newDate(t);if(a===null)return;var i=$(e).bsDatepicker("getUTCDate");$(e).bsDatepicker("setEndDate",this._utcDateAsLocal(a));if(a&&i&&a.getTime()<i.getTime()){$(e).bsDatepicker("clearDates")}else{$(e).bsDatepicker("setUTCDate",i)}},_dateAsUTC:function(e){return new Date(e.getTime()-e.getTimezoneOffset()*6e4)},_utcDateAsLocal:function(e){return new Date(e.getTime()+e.getTimezoneOffset()*6e4)},_padZeros:function(e,t){var a=e.toString();while(a.length<t){a="0"+a}return a},_formatDateUTC:function(e){if(e instanceof Date){return e.getUTCFullYear()+"-"+this._padZeros(e.getUTCMonth()+1,2)+"-"+this._padZeros(e.getUTCDate(),2)}else{return null}},find:function(e){return $(e).find(".shiny-betterDate-input")},getId:function(e){return $(e).attr("id")},getValue:function(e){var t=$(e);var a=t.find("input").eq(0);var i=null;if(a.data("date-multidate")==true){i=a.bsDatepicker("getUTCDates");if(i.length>0){i=i.map(this._formatDateUTC.bind(this))}}else{i=a.bsDatepicker("getUTCDate");i=this._formatDateUTC(i)}return i},setValue:function(e,t){var a=$(e);var i=a.find("input").eq(0);if(t!==void 0){if(t===null||Array.isArray(t)&&t.length==0){i.val("").bsDatepicker("update")}else{if(i.data("date-multidate")==true&&Array.isArray(t)&&t.length>1){var n=t.map(this._newDate.bind(this));i.bsDatepicker("setUTCDates",n)}else{var r=this._newDate(t);i.bsDatepicker("setUTCDate",r)}}}},subscribe:function(e,t){$(e).on("change",function(e){t()})},unsubscribe:function(e){$(e).off("change")},getState:function(e){return{value:this.getValue(e)}},receiveMessage:function(e,t){var a=$(e);var i=a.find("input").eq(0);if(t.hasOwnProperty("label")){$(e).find('label[for="'+e.id+'Text"]').text(t.label)}if(t.hasOwnProperty("min")){this._setMin(i[0],t.min)}if(t.hasOwnProperty("max")){this._setMax(i[0],t.max)}if(t.hasOwnProperty("value")){this.setValue(e,t.value)}a.trigger("change")},initialize:function e(t){var a=$(t);var i=a.find(".input-betterDate").eq(0);var n=a.find("input").eq(0);n.bsDatepicker();var r=i.data("initial-date");this.setValue(t,r);this._setMin(n[0],i.data("min-date"));this._setMax(n[0],i.data("max-date"));n.bsDatepicker().on("changeDate",function(e){a.trigger("change")})}});Shiny.inputBindings.register(dateInputBinding,"shinyExtra.dateInputBinding"); |