mavensmate
Version:
Core APIs that drive MavensMate IDEs for Salesforce1/Force.com
1 lines • 11.1 kB
JavaScript
if("undefined"==typeof jQuery.aljs)throw new Error("Please include the ALJS initializer file");if("undefined"==typeof moment)throw new Error("The ALJS datepicker plugin requires moment.js");!function(e){var t='<div class="slds-dropdown slds-dropdown--left slds-datepicker" aria-hidden="false" data-selection="single"><div class="slds-datepicker__filter slds-grid"><div class="slds-datepicker__filter--month slds-grid slds-grid--align-spread slds-size--3-of-4"><div class="slds-align-middle"><button id="aljs-prevButton" class="slds-button slds-button--icon-container"><svg aria-hidden="true" class="slds-button__icon slds-button__icon--small"><use xlink:href="{{assetsLocation}}/assets/icons/utility-sprite/svg/symbols.svg#left"></use></svg><span class="slds-assistive-text">Previous Month</span></button></div><h2 id="month" class="slds-align-middle" aria-live="assertive" aria-atomic="true"></h2><div class="slds-align-middle"><button id="aljs-nextButton" class="slds-button slds-button--icon-container"><svg aria-hidden="true" class="slds-button__icon slds-button__icon--small"><use xlink:href="{{assetsLocation}}/assets/icons/utility-sprite/svg/symbols.svg#right"></use></svg><span class="slds-assistive-text">Next Month</span></button></div></div><div class="slds-form-element"><div class="slds-form-element__control"><div class="slds-shrink-none"><div class="slds-select_container"></div></div></div></div></div>',l='<table class="datepicker__month" role="grid" aria-labelledby="month"><thead><tr id="weekdays"><th id="{{label0Full}}"><abbr title="{{label0Full}}">{{label0Abbr}}</abbr></th><th id="{{label1Full}}"><abbr title="{{label1Full}}">{{label1Abbr}}</abbr></th><th id="{{label2Full}}"><abbr title="{{label2Full}}">{{label2Abbr}}</abbr></th><th id="{{label3Full}}"><abbr title="{{label3Full}}">{{label3Abbr}}</abbr></th><th id="{{label4Full}}"><abbr title="{{label4Full}}">{{label4Abbr}}</abbr></th><th id="{{label5Full}}"><abbr title="{{label5Full}}">{{label5Abbr}}</abbr></th><th id="{{label6Full}}"><abbr title="{{label6Full}}">{{label6Abbr}}</abbr></th></tr></thead><tbody></tbody></table></div>',a='<tr><td colspan="7" role="gridcell" data-aljs-date="{{todaysDate}}"><a href="javascript:void(0);" class="slds-show--inline-block slds-p-bottom--x-small">{{todayLabel}}</a></td></tr>',s=function(a,s){this.$el=e(a),this.settings=s;for(var i=moment(s.initDate)||moment(),n=s.endDateInputId,d=l,r=0;r<this.settings.dayLabels.length;r++){var o=this.settings.dayLabels[r],c=new RegExp("{{label"+r+"Full}}","g"),u=new RegExp("{{label"+r+"Abbr}}","g");d=d.replace(c,o.full.toString()).replace(u,o.abbr.toString())}this.$datepickerEl=e(t.replace(/{{assetsLocation}}/g,s.assetsLocation)+d),s.initDate&&this.setSelectedFullDate(i),n&&1===e("#"+n).length&&(this.$elEndDate=e("#"+n),s.endDate&&this.setEndFullDate(endDate)),this.initInteractivity()};s.prototype={constructor:s,initInteractivity:function(){var t=this,l=this.$datepickerEl,a=this.$el,s=this.$elEndDate||[],i=function(i){if(i.stopPropagation(),e("[data-aljs-datepicker-id]").not(this).each(function(){e(this).data("datepicker").closeDatepicker()}),i.target===a[0]&&null!==a.val()&&""!==a.val()||i.target===s[0]&&null!==s.val()&&""!==s.val())t.$selectedInput=e(this).parent().find("input"),t.$selectedInput.on("keyup",t,t.processKeyup).on("blur",t,t.processBlur),t.closeDatepicker();else{var n=t.selectedFullDate||moment();t.viewedMonth=n.month(),t.viewedYear=n.year(),t.fillMonth(),t.$selectedInput=e(this).parent().find("input"),t.$selectedInput.off("keyup").off("blur"),t.$selectedInput.closest(".slds-form-element").append(l),t.initYearDropdown(),e([a,l,s,a.prev("svg")]).each(function(){e(this).on("click",t.blockClose)}),l.on("click",t,t.processClick),t.$selectedInput.blur(),e("body").on("click",t,t.closeDatepicker)}};a.on("focus",i),e(a.prev("svg")).on("click",i),a.prev("svg").css("cursor","pointer"),s.length>0&&(e(s).on("focus",i),e(s.prev("svg")).on("click",i),s.prev("svg").css("cursor","pointer"))},fillMonth:function(){var t=this.settings.dayLabels,l=this.getMonthArray(),s=e("<tbody>"),i=this.$elEndDate&&this.$elEndDate.length>0;this.selectedFullDate,this.selectedEndDate;l.forEach(function(l){var a=e("<tr>").appendTo(s);l.hasMultiRowSelection&&a.addClass("slds-has-multi-row-selection"),l.data.forEach(function(l,s){var n=e('<td data-aljs-date="'+l.dateValue+'">').appendTo(a);n.prop({headers:t[s].full,role:"gridcell"}),e('<span class="slds-day">'+l.value+"</span>").appendTo(n),l.isCurrentMonth||(n.addClass("slds-disabled-text"),n.prop("aria-disabled","true")),l.isSelected||l.isSelectedEndDate||l.isSelectedMulti?(n.prop("aria-selected","true"),n.addClass(i?"slds-is-selected-multi slds-is-selected":"slds-is-selected")):n.prop("aria-selected","false"),l.isToday&&n.addClass("slds-is-today")})}),s.append(a.replace(/{{todaysDate}}/g,this.getMMDDYYYY(moment().month()+1,moment().date(),moment().year())).replace(/{{todayLabel}}/g,this.settings.todayLabel.toString())),this.$datepickerEl.find("tbody").replaceWith(s),this.$datepickerEl.find("#month").text(this.settings.monthLabels[this.viewedMonth].full),this.$datepickerEl.find("#aljs-year").text(this.viewedYear)},initYearDropdown:function(){var t=this,l=this.$datepickerEl.find("select"),a=this.viewedYear;if(l.length>0)l.val(this.viewedYear);else{var s=e("<label></label>");l=e('<select class="slds-select select picklist__label">').appendTo(s);for(var i=moment().year(),n=i-this.settings.numYearsBefore;n<=i+this.settings.numYearsAfter;n++){e('<option value="'+n+'">'+n+"</option>").appendTo(l)}l.val(a),this.$datepickerEl.find(".slds-select_container").append(s)}l.on("change",function(l){t.viewedYear=e(l.target).val(),t.fillMonth()})},getMMDDYYYY:function(e,t,l){return(e>9?e:"0"+e)+"/"+(t>9?t:"0"+t)+"/"+l},getMonthArray:function(){for(var e=this.selectedFullDate,t=this.selectedEndDate,l=(e?e.date():null,e?e.month():null,e?e.year():null,this.viewedMonth),a=this.viewedYear,s=0===l?11:l-1,i=11===l?0:l+1,n=this.getNumDaysInMonth(a,l),d=this.getNumDaysInMonth(a,s),r=(this.getNumDaysInMonth(a,i),new Date(a,l,1).getDay()),o=[],c=[],u=(this.dayLabels,d-(r-1));d>=u;u++){var h=moment(new Date(11===s?a-1:a,s,u));o.push({value:u,dateValue:this.getMMDDYYYY(s+1,u,a),isCurrentMonth:!1,isToday:h.isSame(moment(),"day")})}for(var u=1;n>=u;u++){var h=moment(new Date(a,l,u));o.push({value:u,dateValue:this.getMMDDYYYY(l+1,u,a),isCurrentMonth:!0,isSelected:e&&h.isSame(e,"day"),isSelectedEndDate:t&&h.isSame(t,"day"),isSelectedMulti:e&&t&&(h.isBetween(e,t)||h.isSame(e,"day")||h.isSame(t,"day")),isToday:h.isSame(moment(),"day")})}if(o.forEach(function(e,t,l){if(t%7===0){var a=t>=7&&l[t-1].isSelectedMulti&&e.isSelectedMulti;a&&(c[c.length-1].hasMultiRowSelection=!0),c.push({data:[],hasMultiRowSelection:a})}c[c.length-1].data.push(e)}),c[c.length-1].data.length<7)for(var h=moment(new Date(0===i?a+1:a,i,u)),b=7-c[c.length-1].data.length,u=1;b>=u;u++)c[c.length-1].data.push({value:u,dateValue:this.getMMDDYYYY(i+1,u,0===i?a+1:a),isCurrentMonth:!1,isSelected:e&&h.isSame(e,"day"),isToday:h.isSame(moment(),"day")});return c},setSelectedFullDate:function(e){var t=this.selectedFullDate;this.selectedFullDate=e,this.$el.val(e.format(this.settings.format)),t&&t.isSame(e,"day")||this.settings.onChange(this)},setSelectedEndDate:function(e){var t=this.selectedEndDate;this.selectedEndDate=e,this.$elEndDate.val(e.format(this.settings.format)),t&&t.isSame(e,"day")||this.settings.onChange(this)},processClick:function(t){t.preventDefault();var l=t.data,a=e(t.target);a.closest("#aljs-prevButton").length>0&&l.clickPrev(t),a.closest("#aljs-nextButton").length>0&&l.clickNext(t),a.closest("td[data-aljs-date]").length>0&&l.clickDate(t),a.closest("li[data-aljs-year]").length>0&&l.clickYear(t)},processKeyup:function(t){13===t.keyCode&&e(this).blur()},processBlur:function(t){if(t){var l=t.data,a=e(this).val(),s=moment(a,l.settings.format);s.isValid()&&(l.$elEndDate&&l.$elEndDate.length>0&&l.$elEndDate[0]===l.$selectedInput[0]?l.setSelectedEndDate(s):l.setSelectedFullDate(s),l.closeDatepicker(t),l.$selectedInput.off("keyup").off("blur"))}},clickPrev:function(e){var t=e.data;0===t.viewedMonth?(t.viewedMonth=11,t.viewedYear--,t.$datepickerEl.find(".slds-select option:selected").prop("selected",!1).prev().prop("selected","selected")):t.viewedMonth--,t.fillMonth()},clickNext:function(e){var t=e.data;11===t.viewedMonth?(t.viewedMonth=0,t.viewedYear++,t.$datepickerEl.find(".slds-select option:selected").prop("selected",!1).next().prop("selected","selected")):t.viewedMonth++,t.fillMonth()},clickYear:function(t){var l=t.data,a=e(t.target).closest("li[data-aljs-year]");l.viewedYear=parseInt(a.data("aljs-year")),l.fillMonth()},clickYearDropdown:function(e){var t=e.data;t.$datepickerEl.find("#aljs-yearDropdown").length>0?t.hideYearDropdown():t.showYearDropdown()},clickDate:function(t){var l=t.data,a=e(t.target).closest("td[data-aljs-date]");if(!a.hasClass("slds-disabled-text")){var s=a.data("aljs-date");l.$elEndDate&&l.$elEndDate.length>0&&l.$elEndDate[0]===l.$selectedInput[0]?l.setSelectedEndDate(moment(s,"MM/DD/YYYY")):l.setSelectedFullDate(moment(s,"MM/DD/YYYY")),l.closeDatepicker(t)}},closeDatepicker:function(t){var l=this,a=e("body");t&&(l=t.data,a=e(this));var s=l.$datepickerEl,i=l.$selectedInput;0===a.closest(l.$el.parent()).length&&i&&(i.closest(".slds-form-element").find(".slds-datepicker").remove(),e("body").unbind("click",l.closeDatepicker),s.unbind("click",l.processClick))},blockClose:function(e){e.stopPropagation()},isLeapYear:function(e){return e%4===0&&e%100!==0||e%400===0},getNumDaysInMonth:function(e,t){return[31,this.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},getDate:function(e){return e?this.selectedFullDate.format(e):this.selectedFullDate},setDate:function(e){this.setSelectedFullDate(moment(e))},getEndDate:function(e){return this.$elEndDate&&this.selectedEndDate?e?this.selectedEndDate.format(e):this.selectedEndDate:void 0},setEndDate:function(e){this.$elEndDate&&this.setSelectedEndDate(moment(e))}},e.fn.datepicker=function(t,l){var a,i=e.extend({assetsLocation:e.aljs.assetsLocation,numYearsBefore:50,numYearsAfter:10,format:"MM/DD/YYYY",endDateInputId:null,onChange:function(e){},dayLabels:[{full:"Sunday",abbr:"S"},{full:"Monday",abbr:"M"},{full:"Tuesday",abbr:"T"},{full:"Wednesday",abbr:"W"},{full:"Thursday",abbr:"T"},{full:"Friday",abbr:"F"},{full:"Saturday",abbr:"S"}],monthLabels:[{full:"January",abbr:""},{full:"February",abbr:""},{full:"March",abbr:""},{full:"April",abbr:""},{full:"May",abbr:""},{full:"June",abbr:""},{full:"July",abbr:""},{full:"August",abbr:""},{full:"September",abbr:""},{full:"October",abbr:""},{full:"November",abbr:""},{full:"December",abbr:""}],todayLabel:"Today"},"object"==typeof t?t:{});if(this.each(function(){var n=e(this),d=n.data("datepicker");if(!d){var r=new s(this,i);n.data("datepicker",d=r),n.attr("data-aljs-datepicker-id",n.attr("id"))}"string"==typeof t&&(a=d[t](l))}),void 0===a||a instanceof s)return this;if(this.length>1)throw new Error("Using only allowed for the collection of a single element ("+option+" function)");return a}}(jQuery);