1 line
3.8 KiB
JavaScript
1 line
3.8 KiB
JavaScript
var dateRangeInputBinding=new Shiny.InputBinding;$.extend(dateRangeInputBinding,{_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){var a=$(e);var n=a.closest(".input-daterange").eq(0);var i=false;if(n.data("autonext")==true){n.data("autonext",false);i=true}if(t==null){a.bsDatepicker("setStartDate",null);n.data("autonext",i);return}var r=this._newDate(t);if(r===null){n.data("autonext",i);return}var s=$(e).bsDatepicker("getUTCDate");a.bsDatepicker("setStartDate",this._utcDateAsLocal(r));if(r&&s&&r.getTime()>s.getTime()){a.bsDatepicker("clearDates")}else{a.bsDatepicker("setUTCDate",s)}n.data("autonext",i)},_setMax:function(e,t){var a=$(e);var n=a.closest(".input-daterange").eq(0);var i=false;if(n.data("autonext")==true){n.data("autonext",false);i=true}if(t==null){a.bsDatepicker("setEndDate",null);n.data("autonext",i);return}var r=this._newDate(t);if(r===null){n.data("autonext",i);return}var s=a.bsDatepicker("getUTCDate");a.bsDatepicker("setEndDate",this._utcDateAsLocal(r));if(r&&s&&r.getTime()<s.getTime()){a.bsDatepicker("clearDates")}else{a.bsDatepicker("setUTCDate",s)}n.data("autonext",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-dateRange-input")},getId:function(e){return $(e).attr("id")},getValue:function(e){var t=$(e).find("input");var a=t.eq(0).bsDatepicker("getUTCDate");var n=t.eq(1).bsDatepicker("getUTCDate");return{start:this._formatDateUTC(a),end:this._formatDateUTC(n)}},setValue:function(e,t){if(!(t instanceof Object)){return}var a=$(e);var n=a.find(".input-daterange").eq(0);var i=false;if(n.data("autonext")==true){n.data("autonext",false);i=true}var r=a.find("input");if(t.start!==void 0){if(t.start===null||t.start.length==0){r.eq(0).val("").bsDatepicker("clearDates")}else{var s=this._newDate(t.start);r.eq(0).bsDatepicker("setUTCDate",s)}}if(t.end!==void 0){if(t.end===null||t.end.length==0){r.eq(1).val("").bsDatepicker("clearDates")}else{var u=this._newDate(t.end);r.eq(1).bsDatepicker("setUTCDate",u)}}n.data("autonext",i)},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 n=a.find("input");var i=n.eq(0);var r=n.eq(1);if(t.hasOwnProperty("label")){$(e).find('label[for="'+e.id+'Text"]').text(t.label)}if(t.hasOwnProperty("min")){this._setMin(i[0],t.min);this._setMin(r[0],t.min)}if(t.hasOwnProperty("max")){this._setMax(i[0],t.max);this._setMax(r[0],t.max)}if(t.hasOwnProperty("value")){this.setValue(e,t.value)}$(e).trigger("change")},initialize:function e(t){var a=$(t);var n=a.find(".input-daterange").eq(0);var i=a.find("input");var r=i.eq(0);var s=i.eq(1);var u=n.data("initial-start-date");var c=n.data("initial-end-date");a.find(".input-daterange").eq(0).bsDatepicker();this.setValue(t,{start:u,end:c});this._setMin(r[0],n.data("min-date"));this._setMin(s[0],n.data("min-date"));this._setMax(r[0],n.data("max-date"));this._setMax(s[0],n.data("max-date"));r.on("focus",function(e){$(this).select()});s.on("focus",function(e){$(this).select()});r.bsDatepicker().on("changeDate",function(e){if(n.data("autonext")==true&&r.bsDatepicker("getUTCDate")){r.bsDatepicker("hide");s.focus();s.select();s.bsDatepicker("show")}a.trigger("change")});s.bsDatepicker().on("changeDate",function(e){a.trigger("change")})}});Shiny.inputBindings.register(dateRangeInputBinding,"shinyExtra.dateRangeInputBinding"); |