From 476100fa3f5309df208dcf070b2660f00ec8ae9c Mon Sep 17 00:00:00 2001 From: atomic7777 Date: Mon, 18 Feb 2019 09:37:19 +0100 Subject: [PATCH] fixed date calculations --- app.js | 14 +++++++++++--- atomic-calendar.js | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index 43ce5a6..5fda8b0 100644 --- a/app.js +++ b/app.js @@ -314,6 +314,7 @@ render() { */ getHoursHTML(event) { var today = moment() + // full day events, no hours set // 1. One day only, or multiple day ends today -> 'All day' if (event.isFullOneDayEvent || (event.isFullMoreDaysEvent && moment(event.endTime).isSame(today,'day'))) @@ -557,14 +558,21 @@ class EventClass { } // is full day event, but only one day get isFullOneDayEvent() { - if (!this.eventClass.start.dateTime && !this.eventClass.end.dateTime && moment(this.eventClass.start.date).isSame(moment(this.eventClass.end.date).subtract(1, 'days'), 'day')) - return true + if ((!this.eventClass.start.dateTime && !this.eventClass.end.dateTime && moment(this.eventClass.start.date).isSame(moment(this.eventClass.end.date).subtract(1, 'days'), 'day')) || ( + moment(this.eventClass.start.dateTime).isSame(moment(this.eventClass.start.dateTime).startOf('day')) && moment(this.eventClass.end.dateTime).isSame(moment(this.eventClass.end.dateTime).startOf('day')) && moment(this.eventClass.start.dateTime).isSame(moment(this.eventClass.end.dateTime).subtract(1, 'days'), 'day') + + )) + return true else return false } // is full day event, more days get isFullMoreDaysEvent() { - if (!this.eventClass.start.dateTime && !this.eventClass.end.dateTime && !moment(this.eventClass.start.date).isSame(moment(this.eventClass.end.date).subtract(1, 'days'), 'day')) + if ((!this.eventClass.start.dateTime && !this.eventClass.end.dateTime && !moment(this.eventClass.start.date).isSame(moment(this.eventClass.end.date).subtract(1, 'days'), 'day') + ) || ( + moment(this.eventClass.start.dateTime).isSame(moment(this.eventClass.start.dateTime).startOf('day')) && moment(this.eventClass.end.dateTime).isSame(moment(this.eventClass.end.dateTime).startOf('day')) && moment(this.eventClass.end.dateTime).isAfter(moment(this.eventClass.start.dateTime).subtract(1, 'days'), 'day') + ) + ) return true else return false } diff --git a/atomic-calendar.js b/atomic-calendar.js index 9f0a0fb..2b03ae3 100644 --- a/atomic-calendar.js +++ b/atomic-calendar.js @@ -214,4 +214,4 @@ D.defineLocale("zh-tw",{months:["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u * Code distributed by Google as part of the polymer project is also * subject to an additional IP rights grant found at * http://polymer.github.io/PATENTS.txt - */(window.litElementVersions||(window.litElementVersions=[])).push("2.0.1");const de=a=>a.flat?a.flat(1/0):function d(e){let t=1(a.add(e),a),new Set).forEach(a=>d.unshift(a)):a&&d.push(a),d}initialize(){super.initialize(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const a=this.constructor._styles;0!==a.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?te?this.renderRoot.adoptedStyleSheets=a.map(a=>a.styleSheet):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(a.map(a=>a.cssText),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(a){super.update(a);const e=this.render();e instanceof Y&&this.constructor.render(e,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach(a=>{const e=document.createElement("style");e.textContent=a.cssText,this.renderRoot.appendChild(e)}))}render(){}}ie.finalized=!0,ie.render=(d,m,e)=>{const a=e.scopeName,s=x.has(m),t=m instanceof ShadowRoot&&F&&d instanceof Y,r=t&&!N.has(a),i=r?document.createDocumentFragment():m;if(((d,e,t)=>{let a=x.get(e);void 0===a&&(n(e,e.firstChild),x.set(e,a=new k(Object.assign({templateFactory:Z},t))),a.appendInto(e)),a.setValue(d),a.commit()})(d,i,Object.assign({templateFactory:z(a)},e)),r){const d=x.get(i);x.delete(i),d.value instanceof L&&I(i,d.value.template,a),n(m,m.firstChild),m.appendChild(i),x.set(m,d)}!s&&t&&window.ShadyCSS.styleElement(m.host)};var _e=t(0),oe=t.n(_e);t(130),customElements.define("atomic-calendar",class extends ie{static get properties(){return{hass:Object,config:Object,content:Object}}constructor(){super(),this.lastCalendarUpdateTime,this.lastHTMLUpdateTime,this.events,this.content=P(Be()),this.shouldUpdateHtml=!1}updated(){}render(){return this.isUpdating||(async()=>{this.isUpdating=!0,(!this.lastCalendarUpdateTime||15{"string"==typeof a&&(this.config.entities[e]={entity:a})})}getCardSize(){return this.config.entities.length+1}_toggle(a){this.hass.callService("homeassistant","toggle",{entity_id:a.entity_id})}getTitleHTML(a){const e=this.config.showColors&&"undefined"!==a.config.color?a.config.color:this.config.titleColor;return P(Re(),a.link,e,a.title)}getHoursHTML(a){var e=oe()();return a.isFullOneDayEvent||a.isFullMoreDaysEvent&&oe()(a.endTime).isSame(e,"day")?P(Ie(),this.config.fullDayEventText):a.isFullMoreDaysEvent?P(Ne(),this.config.fullDayEventText,this.config.untilText.toLowerCase(),this.getCurrDayAndMonth(oe()(a.endTime))):a.isFullMoreDaysEvent&&(oe()(a.startTime).isBefore(e,"day")||oe()(a.andTime).isAfter(e,"day"))?P(Ce(),this.config.fullDayEventText,this.config.untilText.toLowerCase(),this.getCurrDayAndMonth(oe()(a.endTime))):oe()(a.startTime).isBefore(e,"day")?P(Je(),this.config.untilText,a.endTime.format("LT")):!oe()(a.startTime).isBefore(e,"day")&&oe()(a.endTime).isAfter(a.startTime,"day")?P(ze(),a.startTime.format("LT"),this.config.untilText.toLowerCase(),this.getCurrDayAndMonth(oe()(a.endTime))):P(Fe(),a.startTime.format("LT"),a.endTime.format("LT"))}getLocationHTML(a){return a.location&&this.config.showLocation?P(Ae(),a.location,a.address):P(Ee())}updateHTML(m){var e;if(!m)return void(this.content=P(Oe()));if(0==m.length)return void(this.content=P(We()));const i=m.reduce(function(a,e){return a[e.daysToSort]=a[e.daysToSort]||[],a[e.daysToSort].push(e),a},{});var a=Object.keys(i).map(function(a){return i[a]});if(oe()(a[0][0]).isSame(oe()(),"day")){for(var s=a[0],n=a[0].length;n--;0a.map((o,e,a)=>{const s=0==e&&0"calendars/".concat(s.entity,"?start=").concat(d,"Z&end=").concat(e,"Z"));try{return await Promise.all(s.map(a=>this.hass.callApi("get",a))).then(a=>{let e=[].concat.apply([],a.map((a,d)=>a.map(a=>new me(a,this.config.entities[d]))));return e=e.sort((a,e)=>oe()(a.startTimeToShow)-oe()(e.startTimeToShow))})}catch(a){console.log("error: ",a)}}getCurrDayAndMonth(a){return a.format("LL").replace(a.format("YYYY"),"").replace(/\s\s+/g," ").trim().replace(/[рг]\./,"").replace(/de$/,"").replace(/b\.$/,"").trim().replace(/,$/g,"")}});class me{constructor(a,e){this.eventClass=a,this.config=e,this._startTime=this.eventClass.start.dateTime?oe()(this.eventClass.start.dateTime):oe()(this.eventClass.start.date).startOf("day"),this._endTime=this.eventClass.end.dateTime?oe()(this.eventClass.end.dateTime):oe()(this.eventClass.end.date).subtract(1,"days").endOf("day"),this.isFinished=!1}get titleColor(){return this.config.color?this.config.color:"var(--primary-text-color)"}get title(){return this.eventClass.summary}get startTime(){return this._startTime}get startTimeToShow(){var a=this.eventClass.start.dateTime?oe()(this.eventClass.start.dateTime):oe()(this.eventClass.start.date).startOf("day");return oe()(a).isBefore(oe()().startOf("day"))?oe()().startOf("day"):a}get endTime(){return this._endTime}get isFullDayEvent(){return!(this.eventClass.start.dateTime||this.eventClass.end.dateTime)}get isFullOneDayEvent(){return!(this.eventClass.start.dateTime||this.eventClass.end.dateTime||!oe()(this.eventClass.start.date).isSame(oe()(this.eventClass.end.date).subtract(1,"days"),"day"))}get isFullMoreDaysEvent(){return!(this.eventClass.start.dateTime||this.eventClass.end.dateTime||oe()(this.eventClass.start.date).isSame(oe()(this.eventClass.end.date).subtract(1,"days"),"day"))}get daysToSort(){return oe()(this.startTimeToShow).format("YYYYMMDD")}get isEventToday(){return!!oe()(this.eventClass.start.dateTime||this.eventClass.start.date).isSame(oe()(),"day")}get isEventTomorrow(){return!!oe()(this.eventClass.start.dateTime||this.eventClass.start.date).isSame(oe()().add(1,"day"),"day")}get isEventRunning(){return oe()(this.startTime).isBefore(oe()())&&oe()(this.endTime).isAfter(oe()())}get isEventFinished(){return oe()(this.endTime).isBefore(oe()())}get location(){return this.eventClass.location?this.eventClass.location.split(" ").join("+"):""}get address(){return this.eventClass.location?this.eventClass.location.split(",")[0]:""}get link(){return this.eventClass.htmlLink}}}]); + */(window.litElementVersions||(window.litElementVersions=[])).push("2.0.1");const de=a=>a.flat?a.flat(1/0):function d(e){let t=1(a.add(e),a),new Set).forEach(a=>d.unshift(a)):a&&d.push(a),d}initialize(){super.initialize(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const a=this.constructor._styles;0!==a.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?te?this.renderRoot.adoptedStyleSheets=a.map(a=>a.styleSheet):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(a.map(a=>a.cssText),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(a){super.update(a);const e=this.render();e instanceof Y&&this.constructor.render(e,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach(a=>{const e=document.createElement("style");e.textContent=a.cssText,this.renderRoot.appendChild(e)}))}render(){}}ie.finalized=!0,ie.render=(d,m,e)=>{const a=e.scopeName,s=x.has(m),t=m instanceof ShadowRoot&&F&&d instanceof Y,r=t&&!N.has(a),i=r?document.createDocumentFragment():m;if(((d,e,t)=>{let a=x.get(e);void 0===a&&(n(e,e.firstChild),x.set(e,a=new k(Object.assign({templateFactory:Z},t))),a.appendInto(e)),a.setValue(d),a.commit()})(d,i,Object.assign({templateFactory:z(a)},e)),r){const d=x.get(i);x.delete(i),d.value instanceof L&&I(i,d.value.template,a),n(m,m.firstChild),m.appendChild(i),x.set(m,d)}!s&&t&&window.ShadyCSS.styleElement(m.host)};var _e=t(0),oe=t.n(_e);t(130),customElements.define("atomic-calendar",class extends ie{static get properties(){return{hass:Object,config:Object,content:Object}}constructor(){super(),this.lastCalendarUpdateTime,this.lastHTMLUpdateTime,this.events,this.content=P(Be()),this.shouldUpdateHtml=!1}updated(){}render(){return this.isUpdating||(async()=>{this.isUpdating=!0,(!this.lastCalendarUpdateTime||15{"string"==typeof a&&(this.config.entities[e]={entity:a})})}getCardSize(){return this.config.entities.length+1}_toggle(a){this.hass.callService("homeassistant","toggle",{entity_id:a.entity_id})}getTitleHTML(a){const e=this.config.showColors&&"undefined"!==a.config.color?a.config.color:this.config.titleColor;return P(Re(),a.link,e,a.title)}getHoursHTML(a){var e=oe()();return a.isFullOneDayEvent||a.isFullMoreDaysEvent&&oe()(a.endTime).isSame(e,"day")?P(Ie(),this.config.fullDayEventText):a.isFullMoreDaysEvent?P(Ne(),this.config.fullDayEventText,this.config.untilText.toLowerCase(),this.getCurrDayAndMonth(oe()(a.endTime))):a.isFullMoreDaysEvent&&(oe()(a.startTime).isBefore(e,"day")||oe()(a.andTime).isAfter(e,"day"))?P(Ce(),this.config.fullDayEventText,this.config.untilText.toLowerCase(),this.getCurrDayAndMonth(oe()(a.endTime))):oe()(a.startTime).isBefore(e,"day")?P(Je(),this.config.untilText,a.endTime.format("LT")):!oe()(a.startTime).isBefore(e,"day")&&oe()(a.endTime).isAfter(a.startTime,"day")?P(ze(),a.startTime.format("LT"),this.config.untilText.toLowerCase(),this.getCurrDayAndMonth(oe()(a.endTime))):P(Fe(),a.startTime.format("LT"),a.endTime.format("LT"))}getLocationHTML(a){return a.location&&this.config.showLocation?P(Ae(),a.location,a.address):P(Ee())}updateHTML(m){var e;if(!m)return void(this.content=P(Oe()));if(0==m.length)return void(this.content=P(We()));const i=m.reduce(function(a,e){return a[e.daysToSort]=a[e.daysToSort]||[],a[e.daysToSort].push(e),a},{});var a=Object.keys(i).map(function(a){return i[a]});if(oe()(a[0][0]).isSame(oe()(),"day")){for(var s=a[0],n=a[0].length;n--;0a.map((o,e,a)=>{const s=0==e&&0"calendars/".concat(s.entity,"?start=").concat(d,"Z&end=").concat(e,"Z"));try{return await Promise.all(s.map(a=>this.hass.callApi("get",a))).then(a=>{let e=[].concat.apply([],a.map((a,d)=>a.map(a=>new me(a,this.config.entities[d]))));return e=e.sort((a,e)=>oe()(a.startTimeToShow)-oe()(e.startTimeToShow))})}catch(a){console.log("error: ",a)}}getCurrDayAndMonth(a){return a.format("LL").replace(a.format("YYYY"),"").replace(/\s\s+/g," ").trim().replace(/[рг]\./,"").replace(/de$/,"").replace(/b\.$/,"").trim().replace(/,$/g,"")}});class me{constructor(a,e){this.eventClass=a,this.config=e,this._startTime=this.eventClass.start.dateTime?oe()(this.eventClass.start.dateTime):oe()(this.eventClass.start.date).startOf("day"),this._endTime=this.eventClass.end.dateTime?oe()(this.eventClass.end.dateTime):oe()(this.eventClass.end.date).subtract(1,"days").endOf("day"),this.isFinished=!1}get titleColor(){return this.config.color?this.config.color:"var(--primary-text-color)"}get title(){return this.eventClass.summary}get startTime(){return this._startTime}get startTimeToShow(){var a=this.eventClass.start.dateTime?oe()(this.eventClass.start.dateTime):oe()(this.eventClass.start.date).startOf("day");return oe()(a).isBefore(oe()().startOf("day"))?oe()().startOf("day"):a}get endTime(){return this._endTime}get isFullDayEvent(){return!(this.eventClass.start.dateTime||this.eventClass.end.dateTime)}get isFullOneDayEvent(){return!!(!this.eventClass.start.dateTime&&!this.eventClass.end.dateTime&&oe()(this.eventClass.start.date).isSame(oe()(this.eventClass.end.date).subtract(1,"days"),"day")||oe()(this.eventClass.start.dateTime).isSame(oe()(this.eventClass.start.dateTime).startOf("day"))&&oe()(this.eventClass.end.dateTime).isSame(oe()(this.eventClass.end.dateTime).startOf("day"))&&oe()(this.eventClass.start.dateTime).isSame(oe()(this.eventClass.end.dateTime).subtract(1,"days"),"day"))}get isFullMoreDaysEvent(){return!this.eventClass.start.dateTime&&!this.eventClass.end.dateTime&&!oe()(this.eventClass.start.date).isSame(oe()(this.eventClass.end.date).subtract(1,"days"),"day")||oe()(this.eventClass.start.dateTime).isSame(oe()(this.eventClass.start.dateTime).startOf("day"))&&oe()(this.eventClass.end.dateTime).isSame(oe()(this.eventClass.end.dateTime).startOf("day"))&&oe()(this.eventClass.end.dateTime).isAfter(oe()(this.eventClass.start.dateTime).subtract(1,"days"),"day")}get daysToSort(){return oe()(this.startTimeToShow).format("YYYYMMDD")}get isEventToday(){return!!oe()(this.eventClass.start.dateTime||this.eventClass.start.date).isSame(oe()(),"day")}get isEventTomorrow(){return!!oe()(this.eventClass.start.dateTime||this.eventClass.start.date).isSame(oe()().add(1,"day"),"day")}get isEventRunning(){return oe()(this.startTime).isBefore(oe()())&&oe()(this.endTime).isAfter(oe()())}get isEventFinished(){return oe()(this.endTime).isBefore(oe()())}get location(){return this.eventClass.location?this.eventClass.location.split(" ").join("+"):""}get address(){return this.eventClass.location?this.eventClass.location.split(",")[0]:""}get link(){return this.eventClass.htmlLink}}}]);