1/*! 2 * jQuery UI date range picker widget 3 * Copyright (c) 2017 Tamble, Inc. 4 * Licensed under MIT (https://github.com/tamble/jquery-ui-daterangepicker/raw/master/LICENSE.txt) 5 * 6 * Depends: 7 * - jQuery 1.8.3+ 8 * - jQuery UI 1.9.0+ (widget factory, position utility, button, menu, datepicker) 9 * - moment.js 2.3.0+ 10 */ 11(function($,window,undefined){var uniqueId=0;$.widget('comiseo.daterangepicker',{version:'0.6.0-beta.1',options:{presetRanges:[{text:'Today',dateStart:function(){return moment()},dateEnd:function(){return moment()}},{text:'Yesterday',dateStart:function(){return moment().subtract('days',1)},dateEnd:function(){return moment().subtract('days',1)}},{text:'Last 7 Days',dateStart:function(){return moment().subtract('days',6)},dateEnd:function(){return moment()}},{text:'Last Week (Mo-Su)',dateStart:function(){return moment().subtract('days',7).isoWeekday(1)},dateEnd:function(){return moment().subtract('days',7).isoWeekday(7)}},{text:'Month to Date',dateStart:function(){return moment().startOf('month')},dateEnd:function(){return moment()}},{text:'Previous Month',dateStart:function(){return moment().subtract('month',1).startOf('month')},dateEnd:function(){return moment().subtract('month',1).endOf('month')}},{text:'Year to Date',dateStart:function(){return moment().startOf('year')},dateEnd:function(){return moment()}}],initialText:'Select date range...',icon:'ui-icon-triangle-1-s',applyButtonText:'Apply',clearButtonText:'Clear',cancelButtonText:'Cancel',rangeSplitter:' - ',dateFormat:'M d, yy',altFormat:'yy-mm-dd',verticalOffset:0,mirrorOnCollision:!0,autoFitCalendars:!0,applyOnMenuSelect:!0,open:null,close:null,change:null,clear:null,cancel:null,onOpen:null,onClose:null,onChange:null,onClear:null,datepickerOptions:{numberOfMonths:3,maxDate:0}},_create:function(){this._dateRangePicker=buildDateRangePicker(this.element,this,this.options)},_destroy:function(){this._dateRangePicker.destroy()},_setOptions:function(options){this._super(options);this._dateRangePicker.enforceOptions()},open:function(){this._dateRangePicker.open()},close:function(){this._dateRangePicker.close()},setRange:function(range){this._dateRangePicker.setRange(range)},getRange:function(){return this._dateRangePicker.getRange()},clearRange:function(){this._dateRangePicker.clearRange()},widget:function(){return this._dateRangePicker.getContainer()}});function buildTriggerButton($originalElement,classnameContext,options){var $self,id;function fixReferences(){id='drp_autogen'+uniqueId++;$('label[for="'+$originalElement.attr('id')+'"]').attr('for',id)} 12function fixButton(){if($.fn.button.noConflict){var btn=$.fn.button.noConflict();$.fn.btn=btn}} 13function init(){fixReferences();fixButton();$self=$('<button type="button"></button>').addClass(classnameContext+'-triggerbutton').attr({'title':$originalElement.attr('title'),'tabindex':$originalElement.attr('tabindex'),id:id}).button({icons:{secondary:options.icon},icon:options.icon,iconPosition:'end',label:options.initialText})} 14function getLabel(){return $self.button('option','label')} 15function setLabel(value){$self.button('option','label',value)} 16function reset(){$originalElement.val('').change();setLabel(options.initialText)} 17function enforceOptions(){$self.button('option',{icons:{secondary:options.icon},icon:options.icon,iconPosition:'end',label:options.initialText})} 18init();return{getElement:function(){return $self},getLabel:getLabel,setLabel:setLabel,reset:reset,enforceOptions:enforceOptions}} 19function buildPresetsMenu(classnameContext,options,onClick){var $self,$menu,menuItemWrapper;function init(){$self=$('<div></div>').addClass(classnameContext+'-presets');$menu=$('<ul></ul>');if($.ui.menu.prototype.options.items===undefined){menuItemWrapper={start:'<li><a href="#">',end:'</a></li>'}}else{menuItemWrapper={start:'<li><div>',end:'</div></li>'}} 20$.each(options.presetRanges,function(){$(menuItemWrapper.start+this.text+menuItemWrapper.end).data('dateStart',this.dateStart).data('dateEnd',this.dateEnd).click(onClick).appendTo($menu)});$self.append($menu);$menu.menu().data('ui-menu').delay=0} 21init();return{getElement:function(){return $self}}} 22function buildCalendar(classnameContext,options){var $self,range={start:null,end:null};
22function init(){$self=$('<div></div>',{'class':classnameContext+'-calendar ui-widget-content'});$self.datepicker($.extend({},options.datepickerOptions,{beforeShowDay:beforeShowDay,onSelect:onSelectDay}));updateAtMidnight()} 23function enforceOptions(){$self.datepicker('option',$.extend({},options.datepickerOptions,{beforeShowDay:beforeShowDay,onSelect:onSelectDay}))} 24function onSelectDay(dateText,instance){var dateFormat=options.datepickerOptions.dateFormat||$.datepicker._defaults.dateFormat,selectedDate=$.datepicker.parseDate(dateFormat,dateText);if(!range.start||range.end){range.start=selectedDate;range.end=null}else if(selectedDate<range.start){range.end=range.start;range.start=selectedDate}else{range.end=selectedDate} 25if(options.datepickerOptions.hasOwnProperty('onSelect')){options.datepickerOptions.onSelect(dateText,instance)}} 26function beforeShowDay(date){var result=[!0,range.start&&((+date===+range.start)||(range.end&&range.start<=date&&date<=range.end))?'ui-state-highlight':''],userResult=[!0,'',''];if(options.datepickerOptions.hasOwnProperty('beforeShowDay')){userResult=options.datepickerOptions.beforeShowDay(date)} 27return[result[0]&&userResult[0],result[1]+' '+userResult[1],userResult[2]]} 28function updateAtMidnight(){setTimeout(function(){refresh();updateAtMidnight()},moment().endOf('day')-moment())}
29function scrollToRangeStart(){if(range.start){$self.datepicker('setDate',range.start)}} 30function refresh(){$self.datepicker('refresh');$self.datepicker('setDate',null)} 31function reset(){range={start:null,end:null};refresh()} 32init();return{getElement:function(){return $self},scrollToRangeStart:function(){return scrollToRangeStart()},getRange:function(){return range},setRange:function(value){range=value;refresh()},refresh:refresh,reset:reset,enforceOptions:enforceOptions}} 33function buildButtonPanel(classnameContext,options,handlers){var $self,applyButton,clearButton,cancelButton;function init(){$self=$('<div></div>').addClass(classnameContext+'-buttonpanel');if(options.applyButtonText){applyButton=$('<button type="button" class="ui-priority-primary"></button>').text(options.applyButtonText).button();$self.append(applyButton)} 34if(options.clearButtonText){clearButton=$('<button type="button" class="ui-priority-secondary"></button>').text(options.clearButtonText).button();$self.append(clearButton)} 35if(options.cancelButtonText){cancelButton=$('<button type="button" class="ui-priority-secondary"></button>').text(options.cancelButtonText).button();$self.append(cancelButton)} 36bindEvents()} 37function enforceOptions(){if(applyButton){applyButton.button('option','label',options.applyButtonText)} 38if(clearButton){clearButton.button('option','label',options.clearButtonText)} 39if(cancelButton){cancelButton.button('option','label',options.cancelButtonText)}} 40function bindEvents(){if(handlers){if(applyButton){applyButton.click(handlers.onApply)} 41if(clearButton){clearButton.click(handlers.onClear)} 42if(cancelButton){cancelButton.click(handlers.onCancel)}}} 43init();return{getElement:function(){return $self},enforceOptions:enforceOptions}} 44function buildDateRangePicker($originalElement,instance,options){var classname='comiseo-daterangepicker',$container,$mask,triggerButton,presetsMenu,calendar,buttonPanel,isOpen=!1,autoFitNeeded=!1,LEFT=0,RIGHT=1,TOP=2,BOTTOM=3,sides=['left','right','top','bottom'],hSide=RIGHT,vSide=null;function init(){triggerButton=buildTriggerButton($originalElement,classname,options);presetsMenu=buildPresetsMenu(classname,options,usePreset);calendar=buildCalendar(classname,options);autoFit.numberOfMonths=options.datepickerOptions.numberOfMonths;if(autoFit.numberOfMonths instanceof Array){options.autoFitCalendars=!1} 45buttonPanel=buildButtonPanel(classname,options,{onApply:function(event){close(event);setRange(null,event)},onClear:function(event){close(event);clearRange(event)},onCancel:function(event){instance._trigger('cancel',event,{instance:instance});close(event);reset()}});render();autoFit();reset();bindEvents()} 46function render(){$container=$('<div></div>',{'class':classname+' '+classname+'-'+sides[hSide]+' ui-widget ui-widget-content ui-corner-all ui-front'}).append($('<div></div>',{'class':classname+'-main ui-widget-content'}).append(presetsMenu.getElement()).append(calendar.getElement())).append($('<div class="ui-helper-clearfix"></div>').append(buttonPanel.getElement())).hide();$originalElement.hide().after(triggerButton.getElement());$mask=$('<div></div>',{'class':'ui-front '+classname+'-mask'}).hide();$('body').append($mask).append($container)} 47function autoFit(){if(options.autoFitCalendars){var maxWidth=$(window).width(),initialWidth=$container.outerWidth(!0),$calendar=calendar.getElement(),numberOfMonths=$calendar.datepicker('option','numberOfMonths'),initialNumberOfMonths=numberOfMonths;if(initialWidth>maxWidth){while(numberOfMonths>1&&$container.outerWidth(!0)>maxWidth){$calendar.datepicker('option','numberOfMonths',--numberOfMonths)} 48if(numberOfMonths!==initialNumberOfMonths){autoFit.monthWidth=(initialWidth-$container.outerWidth(!0))/(initialNumberOfMonths-numberOfMonths)}}else{while(numberOfMonths<autoFit.numberOfMonths&&(maxWidth-$container.outerWidth(!0))>=autoFit.monthWidth){$calendar.datepicker('option','numberOfMonths',++numberOfMonths)}} 49reposition();autoFitNeeded=!1}} 50function destroy(){$container.remove();triggerButton.getElement().remove();$originalElement.show()} 51function bindEvents(){triggerButton.getElement().click(toggle);triggerButton.getElement().keydown(keyPressTriggerOpenOrClose);$mask.click(function(event){close(event);reset()});$(window).resize(function(){isOpen?autoFit():autoFitNeeded=!0})} 52function formatRangeForDisplay(range){var dateFormat=options.dateFormat;return $.datepicker.formatDate(dateFormat,range.start)+(+range.end!==+range.start?options.rangeSplitter+$.datepicker.formatDate(dateFormat,range.end):'')} 53function formatRange(range){var dateFormat=options.altFormat,formattedRange={};formattedRange.start=$.datepicker.formatDate(dateFormat,range.start);formattedRange.end=$.datepicker.formatDate(dateFormat,range.end);return JSON.stringify(formattedRange)} 54function parseRange(text){var dateFormat=options.altFormat,range=null;if(text){try{range=JSON.parse(text,function(key,value){return key?$.datepicker.parseDate(dateFormat,value):value})}catch(e){}} 55return range} 56function reset(){var range=getRange();if(range){triggerButton.setLabel(formatRangeForDisplay(range));calendar.setRange(range)}else{calendar.reset()}} 57function setRange(value,event){var range=value||calendar.getRange();if(!range.start){return} 58if(!range.end){range.end=range.start} 59value&&calendar.setRange(range);triggerButton.setLabel(formatRangeForDisplay(range));$originalElement.val(formatRange(range)).change();if(options.onChange){options.onChange()} 60instance._trigger('change',event,{instance:instance})} 61function getRange(){return parseRange($originalElement.val())} 62function clearRange(event){triggerButton.reset();calendar.reset();if(options.onClear){options.onClear()} 63instance._trigger('clear',event,{instance:instance})} 64function usePreset(event){var $this=$(this),start=$this.data('dateStart')().startOf('day').toDate(),end=$this.data('dateEnd')().startOf('day').toDate();calendar.setRange({start:start,end:end});if(options.applyOnMenuSelect){close(event);setRange(null,event)} 65return!1} 66function reposition(){$container.position({my:'left top',at:'left bottom'+(options.verticalOffset<0?options.verticalOffset:'+'+options.verticalOffset),of:triggerButton.getElement(),collision:'flipfit flipfit',using:function(coords,feedback){var containerCenterX=feedback.element.left+feedback.element.width/2,triggerButtonCenterX=feedback.target.left+feedback.target.width/2,prevHSide=hSide,last,containerCenterY=feedback.element.top+feedback.element.height/2,triggerButtonCenterY=feedback.target.top+feedback.target.height/2,prevVSide=vSide,vFit;hSide=(containerCenterX>triggerButtonCenterX)?RIGHT:LEFT;if(hSide!==prevHSide){if(options.mirrorOnCollision){last=(hSide===LEFT)?presetsMenu:calendar;$container.children().first().append(last.getElement())} 67$container.removeClass(classname+'-'+sides[prevHSide]);$container.addClass(classname+'-'+sides[hSide])} 68$container.css({left:coords.left,top:coords.top});vSide=(containerCenterY>triggerButtonCenterY)?BOTTOM:TOP;if(vSide!==prevVSide){if(prevVSide!==null){triggerButton.getElement().removeClass(classname+'-'+sides[prevVSide])} 69triggerButton.getElement().addClass(classname+'-'+sides[vSide])} 70vFit=vSide===BOTTOM&&feedback.element.top-feedback.target.top!==feedback.target.height+options.verticalOffset||vSide===TOP&&feedback.target.top-feedback.element.top!==feedback.element.height+options.verticalOffset;triggerButton.getElement().toggleClass(classname+'-vfit',vFit)}})} 71function killEvent(event){event.preventDefault();event.stopPropagation()} 72function keyPressTriggerOpenOrClose(event){switch(event.which){case $.ui.keyCode.UP:case $.ui.keyCode.DOWN:killEvent(event);open(event);return;case $.ui.keyCode.ESCAPE:killEvent(event);close(event);reset();return;case $.ui.keyCode.TAB:close(event);return}} 73function open(event){if(!isOpen){triggerButton.getElement().addClass(classname+'-active');$mask.show();isOpen=!0;autoFitNeeded&&autoFit();calendar.scrollToRangeStart();$container.show();reposition()}
74if(options.onOpen){options.onOpen()} 75instance._trigger('open',event,{instance:instance})} 76function close(event){if(isOpen){$container.hide();$mask.hide();triggerButton.getElement().removeClass(classname+'-active');isOpen=!1} 77if(options.onClose){options.onClose()} 78instance._trigger('close',event,{instance:instance})} 79function toggle(event){if(isOpen){close(event);reset()}else{open(event)}} 80function getContainer(){return $container} 81function enforceOptions(){var oldPresetsMenu=presetsMenu;presetsMenu=buildPresetsMenu(classname,options,usePreset);oldPresetsMenu.getElement().replaceWith(presetsMenu.getElement());calendar.enforceOptions();buttonPanel.enforceOptions();triggerButton.enforceOptions();var range=getRange();if(range){triggerButton.setLabel(formatRangeForDisplay(range))}} 82init();return{toggle:toggle,destroy:destroy,open:open,close:close,setRange:setRange,getRange:getRange,clearRange:clearRange,reset:reset,enforceOptions:enforceOptions,getContainer:getContainer}}})(jQuery,window)
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.