@iamproperty/components 7.4.0 → 7.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/assets/css/components/actionbar.component.css +1 -1
- package/assets/css/components/actionbar.component.css.map +1 -1
- package/assets/css/components/actionbar.global.css +1 -1
- package/assets/css/components/actionbar.global.css.map +1 -1
- package/assets/css/components/address-lookup.component.css +1 -0
- package/assets/css/components/address-lookup.component.css.map +1 -0
- package/assets/css/components/barchart.component.css +1 -1
- package/assets/css/components/barchart.component.css.map +1 -1
- package/assets/css/components/calendar.component.css +1 -1
- package/assets/css/components/calendar.component.css.map +1 -1
- package/assets/css/components/calendar.config.css.map +1 -1
- package/assets/css/components/card.component.css +1 -1
- package/assets/css/components/card.component.css.map +1 -1
- package/assets/css/components/carousel.component.css +1 -1
- package/assets/css/components/carousel.component.css.map +1 -1
- package/assets/css/components/charts.css +1 -1
- package/assets/css/components/charts.css.map +1 -1
- package/assets/css/components/collapsible-side.css +1 -1
- package/assets/css/components/collapsible-side.css.map +1 -1
- package/assets/css/components/content.component.css +1 -1
- package/assets/css/components/content.component.css.map +1 -1
- package/assets/css/components/darkmode.component.css +1 -0
- package/assets/css/components/darkmode.component.css.map +1 -0
- package/assets/css/components/doughnutchart.component.css +1 -1
- package/assets/css/components/doughnutchart.component.css.map +1 -1
- package/assets/css/components/inline-edit.css.map +1 -1
- package/assets/css/components/{menu.css → menu.global.css} +1 -1
- package/assets/css/components/menu.global.css.map +1 -0
- package/assets/css/components/milestone.css +1 -1
- package/assets/css/components/milestone.css.map +1 -1
- package/assets/css/components/multi-step.component.css +1 -1
- package/assets/css/components/multi-step.component.css.map +1 -1
- package/assets/css/components/multiselect.css.map +1 -1
- package/assets/css/components/multiselect.preload.css +1 -1
- package/assets/css/components/multiselect.preload.css.map +1 -1
- package/assets/css/components/nav.component.css +1 -1
- package/assets/css/components/nav.component.css.map +1 -1
- package/assets/css/components/nav.global.css +1 -1
- package/assets/css/components/nav.global.css.map +1 -1
- package/assets/css/components/notification.css +1 -1
- package/assets/css/components/notification.css.map +1 -1
- package/assets/css/components/pagination.css.map +1 -1
- package/assets/css/components/property-searchbar.css +1 -1
- package/assets/css/components/property-searchbar.css.map +1 -1
- package/assets/css/components/split-button.component.css +1 -1
- package/assets/css/components/split-button.component.css.map +1 -1
- package/assets/css/components/word-count.component.css +1 -0
- package/assets/css/components/word-count.component.css.map +1 -0
- package/assets/css/core.min.css +1 -1
- package/assets/css/core.min.css.map +1 -1
- package/assets/css/mobile-core.min.css +1 -1
- package/assets/css/mobile-core.min.css.map +1 -1
- package/assets/css/mobile.min.css +1 -1
- package/assets/css/mobile.min.css.map +1 -1
- package/assets/css/style.min.css +1 -1
- package/assets/css/style.min.css.map +1 -1
- package/assets/js/components/accordion/accordion.component.js +40 -19
- package/assets/js/components/accordion/accordion.component.min.js +15 -15
- package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
- package/assets/js/components/actionbar/actionbar.component.js +8 -0
- package/assets/js/components/actionbar/actionbar.component.min.js +6 -5
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.js +6 -8
- package/assets/js/components/address-lookup/address-lookup.component.min.js +10 -12
- package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
- package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
- package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
- package/assets/js/components/barchart/barchart.component.min.js +2 -2
- package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
- package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
- package/assets/js/components/bento-grid/bento-grid.component.min.js.map +1 -1
- package/assets/js/components/calendar/calendar.component.js +153 -136
- package/assets/js/components/calendar/calendar.component.min.js +3 -3
- package/assets/js/components/calendar/calendar.component.min.js.map +1 -1
- package/assets/js/components/card/card.component.js +3 -9
- package/assets/js/components/card/card.component.min.js +13 -7
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.js +17 -19
- package/assets/js/components/carousel/carousel.component.min.js +17 -19
- package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
- package/assets/js/components/content/content.component.min.js +2 -2
- package/assets/js/components/content/content.component.min.js.map +1 -1
- package/assets/js/components/darkmode/darkmode.component.js +70 -0
- package/assets/js/components/darkmode/darkmode.component.min.js +10 -0
- package/assets/js/components/darkmode/darkmode.component.min.js.map +1 -0
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js +2 -2
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js.map +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
- package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
- package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
- package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
- package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
- package/assets/js/components/header/header.component.min.js +1 -1
- package/assets/js/components/header/header.component.min.js.map +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
- package/assets/js/components/marketing/marketing.component.min.js +1 -1
- package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
- package/assets/js/components/menu/menu.component.js +2 -2
- package/assets/js/components/menu/menu.component.min.js +4 -5
- package/assets/js/components/menu/menu.component.min.js.map +1 -1
- package/assets/js/components/milestone/milestone.component.js +12 -14
- package/assets/js/components/milestone/milestone.component.min.js +1 -1
- package/assets/js/components/milestone/milestone.component.min.js.map +1 -1
- package/assets/js/components/milestone-group/milestone-group.component.js +10 -12
- package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
- package/assets/js/components/milestone-group/milestone-group.component.min.js.map +1 -1
- package/assets/js/components/multi-step/multi-step.component.min.js +3 -3
- package/assets/js/components/multi-step/multi-step.component.min.js.map +1 -1
- package/assets/js/components/multiselect/multiselect.component.js +2 -2
- package/assets/js/components/multiselect/multiselect.component.min.js +1 -1
- package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
- package/assets/js/components/nav/nav.component.js +2 -3
- package/assets/js/components/nav/nav.component.min.js +5 -5
- package/assets/js/components/nav/nav.component.min.js.map +1 -1
- package/assets/js/components/notification/notification.component.js +1 -3
- package/assets/js/components/notification/notification.component.min.js +5 -5
- package/assets/js/components/notification/notification.component.min.js.map +1 -1
- package/assets/js/components/pagination/pagination.component.min.js +1 -1
- package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
- package/assets/js/components/rank/rank.component.min.js +1 -1
- package/assets/js/components/rank/rank.component.min.js.map +1 -1
- package/assets/js/components/rankings/rankings.component.min.js +1 -1
- package/assets/js/components/rankings/rankings.component.min.js.map +1 -1
- package/assets/js/components/record-card/record-card.component.min.js +1 -1
- package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
- package/assets/js/components/search/search.component.min.js +1 -1
- package/assets/js/components/search/search.component.min.js.map +1 -1
- package/assets/js/components/slider/slider.component.min.js +1 -1
- package/assets/js/components/slider/slider.component.min.js.map +1 -1
- package/assets/js/components/split-button/split-button.component.js +1 -3
- package/assets/js/components/split-button/split-button.component.min.js +8 -11
- package/assets/js/components/split-button/split-button.component.min.js.map +1 -1
- package/assets/js/components/table/table.component.min.js +1 -1
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
- package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
- package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
- package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
- package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
- package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +1 -1
- package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
- package/assets/js/components/video-card/video-card.component.min.js +1 -1
- package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
- package/assets/js/components/word-count/word-count.component.js +81 -0
- package/assets/js/components/word-count/word-count.component.min.js +12 -0
- package/assets/js/components/word-count/word-count.component.min.js.map +1 -0
- package/assets/js/components.js +1 -0
- package/assets/js/modules/advanced-select.js +1 -1
- package/assets/js/modules/dynamicEvents.js +3 -3
- package/assets/js/modules/inputs.js +0 -18
- package/assets/js/modules/milestone.js +2 -2
- package/assets/js/scripts.bundle.js +3 -3
- package/assets/js/scripts.bundle.js.map +1 -1
- package/assets/js/scripts.bundle.min.js +2 -2
- package/assets/js/scripts.bundle.min.js.map +1 -1
- package/assets/js/scripts.js +2 -1
- package/assets/sass/_components.scss +4 -4
- package/assets/sass/_example.scss +1 -1
- package/assets/sass/_functions/utility-mixins.scss +0 -1
- package/assets/sass/components/actionbar.component.scss +22 -0
- package/assets/sass/components/actionbar.global.scss +1 -1
- package/assets/sass/components/{address-lookup.scss → address-lookup.component.scss} +10 -0
- package/assets/sass/components/calendar.component.scss +163 -271
- package/assets/sass/components/calendar.config.scss +69 -122
- package/assets/sass/components/darkmode.component.scss +22 -0
- package/assets/sass/components/milestone.scss +69 -60
- package/assets/sass/components/multi-step.component.scss +1 -1
- package/assets/sass/components/multiselect.preload.scss +1 -1
- package/assets/sass/components/multiselect.scss +1 -2
- package/assets/sass/components/nav.component.scss +16 -6
- package/assets/sass/components/nav.global.scss +8 -12
- package/assets/sass/components/notification.scss +32 -13
- package/assets/sass/components/split-button.component.scss +3 -1
- package/assets/sass/components/table-basic.global.scss +32 -32
- package/assets/sass/components/word-count.component.scss +26 -0
- package/assets/sass/elements/admin-panel.scss +1 -1
- package/assets/sass/elements/buttons--compact.scss +1 -1
- package/assets/sass/elements/details.scss +33 -6
- package/assets/sass/elements/forms.scss +18 -33
- package/assets/sass/elements/lists.scss +1 -1
- package/assets/sass/elements/toggle-button.scss +1 -0
- package/assets/sass/foundations/colours.scss +0 -0
- package/assets/sass/foundations/reboot.scss +8 -1
- package/assets/sass/foundations/root.scss +41 -51
- package/assets/ts/components/accordion/accordion.component.ts +47 -26
- package/assets/ts/components/actionbar/actionbar.component.ts +10 -0
- package/assets/ts/components/address-lookup/address-lookup.component.ts +6 -8
- package/assets/ts/components/calendar/calendar.component.ts +368 -498
- package/assets/ts/components/card/card.component.ts +2 -9
- package/assets/ts/components/carousel/carousel.component.ts +17 -19
- package/assets/ts/components/darkmode/darkmode.component.ts +85 -0
- package/assets/ts/components/menu/menu.component.ts +2 -2
- package/assets/ts/components/milestone/milestone.component.ts +43 -45
- package/assets/ts/components/milestone-group/milestone-group.component.ts +39 -41
- package/assets/ts/components/multiselect/multiselect.component.ts +6 -15
- package/assets/ts/components/nav/nav.component.ts +8 -15
- package/assets/ts/components/notification/notification.component.ts +1 -5
- package/assets/ts/components/split-button/split-button.component.ts +1 -3
- package/assets/ts/components/word-count/word-count.component.ts +91 -0
- package/assets/ts/components.ts +1 -0
- package/assets/ts/modules/advanced-select.ts +11 -16
- package/assets/ts/modules/data-layer.md +0 -5
- package/assets/ts/modules/dynamicEvents.ts +6 -7
- package/assets/ts/modules/inputs.ts +0 -25
- package/assets/ts/modules/milestone-group.ts +39 -42
- package/assets/ts/modules/milestone.ts +119 -122
- package/assets/ts/scripts.ts +2 -1
- package/dist/components.es.js +1693 -41
- package/dist/components.umd.js +1032 -221
- package/package.json +6 -6
- package/src/components/Accordion/Accordion.vue +14 -23
- package/src/components/Accordion/AccordionItem.vue +27 -43
- package/src/components/Actionbar/Actionbar.vue +17 -19
- package/src/components/AddressLookup/AddressLookup.vue +17 -18
- package/src/components/AdvancedSelect/AdvancedSelect.vue +17 -18
- package/src/components/AppliedFilters/AppliedFilters.vue +16 -18
- package/src/components/Banner/Banner.vue +18 -21
- package/src/components/BarChart/BarChart.vue +17 -18
- package/src/components/Calendar/Calendar.vue +14 -20
- package/src/components/Card/Card.vue +17 -17
- package/src/components/Carousel/Carousel.vue +17 -20
- package/src/components/Content/Content.vue +17 -18
- package/src/components/DarkMode/DarkMode.vue +19 -0
- package/src/components/DoughnutChart/DoughnutChart.vue +17 -18
- package/src/components/FileUpload/FileUpload.vue +22 -28
- package/src/components/FilterCard/FilterCard.vue +17 -18
- package/src/components/Filterlist/Filterlist.vue +17 -0
- package/src/components/Header/Header.vue +28 -29
- package/src/components/InlineEdit/InlineEdit.vue +11 -19
- package/src/components/Menu/Menu.vue +17 -17
- package/src/components/Milestones/Milestone.vue +22 -27
- package/src/components/Milestones/MilestoneGroup.vue +24 -27
- package/src/components/Multiselect/Multiselect.vue +17 -18
- package/src/components/Nav/Nav.vue +17 -19
- package/src/components/Notification/Notification.vue +17 -15
- package/src/components/Pagination/Pagination.vue +16 -16
- package/src/components/Rank/Rank.vue +17 -18
- package/src/components/Rankings/Rankings.vue +17 -27
- package/src/components/RecordCard/RecordCard.vue +17 -18
- package/src/components/Search/Search.vue +17 -17
- package/src/components/Slider/Slider.vue +17 -17
- package/src/components/SplitButton/SplitButton.vue +17 -20
- package/src/components/Tabs/Tabs.vue +17 -17
- package/src/components/VideoCard/VideoCard.vue +17 -18
- package/src/components/WordCount/WordCount.vue +22 -0
- package/src/index.js +43 -44
- package/assets/css/components/address-lookup.css +0 -1
- package/assets/css/components/address-lookup.css.map +0 -1
- package/assets/css/components/menu.css.map +0 -1
- /package/assets/sass/components/{menu.scss → menu.global.scss} +0 -0
|
@@ -151,14 +151,27 @@ class iamCalendar extends HTMLElement {
|
|
|
151
151
|
</div>
|
|
152
152
|
`;
|
|
153
153
|
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
154
|
-
this.monthArray = [
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
this.monthArray = [
|
|
155
|
+
'January',
|
|
156
|
+
'February',
|
|
157
|
+
'March',
|
|
158
|
+
'April',
|
|
159
|
+
'May',
|
|
160
|
+
'June',
|
|
161
|
+
'July',
|
|
162
|
+
'August',
|
|
163
|
+
'September',
|
|
164
|
+
'October',
|
|
165
|
+
'November',
|
|
166
|
+
'December',
|
|
167
|
+
];
|
|
168
|
+
this.dayArray = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
|
169
|
+
this.english_ordinal_rules = new Intl.PluralRules('en', { type: 'ordinal' });
|
|
157
170
|
this.suffixes = {
|
|
158
|
-
one:
|
|
159
|
-
two:
|
|
160
|
-
few:
|
|
161
|
-
other:
|
|
171
|
+
one: 'st',
|
|
172
|
+
two: 'nd',
|
|
173
|
+
few: 'rd',
|
|
174
|
+
other: 'th',
|
|
162
175
|
};
|
|
163
176
|
this.calendars = ['Default']; // TO DO allow for these to be set via the component data attributes
|
|
164
177
|
this.eventTypes = []; // TO DO allow for these to be set via the component data attributes
|
|
@@ -191,7 +204,7 @@ class iamCalendar extends HTMLElement {
|
|
|
191
204
|
getOrdinalNumber(number) {
|
|
192
205
|
const category = this.english_ordinal_rules.select(number);
|
|
193
206
|
const suffix = this.suffixes[category];
|
|
194
|
-
return
|
|
207
|
+
return number + suffix;
|
|
195
208
|
}
|
|
196
209
|
setToMonday(date) {
|
|
197
210
|
const day = date.getDay() || 7;
|
|
@@ -211,7 +224,7 @@ class iamCalendar extends HTMLElement {
|
|
|
211
224
|
const year = date.getFullYear();
|
|
212
225
|
const day = date.getDate();
|
|
213
226
|
const dayOfWeek = date.getDay() ? date.getDay() : 7;
|
|
214
|
-
if (view ==
|
|
227
|
+
if (view == 'week') {
|
|
215
228
|
const monday = this.setToMonday(new Date(dateStr));
|
|
216
229
|
const sunday = this.setToSunday(new Date(dateStr));
|
|
217
230
|
const mondayMonth = monday.getMonth();
|
|
@@ -222,10 +235,10 @@ class iamCalendar extends HTMLElement {
|
|
|
222
235
|
const sundayDay = sunday.getDate();
|
|
223
236
|
return `${this.getOrdinalNumber(mondayDay)} ${mondayMonth != sundayMonth ? this.monthArray[sundayMonth] : ''} ${mondayYear != sundayYear ? mondayYear : ''} - ${this.getOrdinalNumber(sundayDay)} ${this.monthArray[sundayMonth]} ${sundayYear}`;
|
|
224
237
|
}
|
|
225
|
-
else if (view ==
|
|
238
|
+
else if (view == 'day') {
|
|
226
239
|
return `${this.dayArray[dayOfWeek]} ${this.getOrdinalNumber(day)} ${this.monthArray[month]} ${year}`;
|
|
227
240
|
}
|
|
228
|
-
else if (view ==
|
|
241
|
+
else if (view == 'year') {
|
|
229
242
|
return `${year}`;
|
|
230
243
|
}
|
|
231
244
|
return `${this.monthArray[month]} ${year}`;
|
|
@@ -235,10 +248,10 @@ class iamCalendar extends HTMLElement {
|
|
|
235
248
|
const month = date.getMonth();
|
|
236
249
|
const year = date.getFullYear();
|
|
237
250
|
const day = date.getDate();
|
|
238
|
-
const selectedDateStr = `${year}-${String(month + 1).padStart(2,
|
|
251
|
+
const selectedDateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
|
|
239
252
|
const daysThisMonth = this.numberDaysInMonth(year, month + 1);
|
|
240
|
-
const startOfMonth = new Date(`${year}-${String(month + 1).padStart(2,
|
|
241
|
-
const endOfMonth = new Date(`${year}-${String(month + 1).padStart(2,
|
|
253
|
+
const startOfMonth = new Date(`${year}-${String(month + 1).padStart(2, '0')}-01`);
|
|
254
|
+
const endOfMonth = new Date(`${year}-${String(month + 1).padStart(2, '0')}-${daysThisMonth}`);
|
|
242
255
|
const startDay = startOfMonth.getDay() != 0 ? startOfMonth.getDay() : 7;
|
|
243
256
|
const endDay = endOfMonth.getDay() != 0 ? endOfMonth.getDay() : 7;
|
|
244
257
|
const loopDays = daysThisMonth + startDay + (7 - endDay - 1);
|
|
@@ -257,21 +270,21 @@ class iamCalendar extends HTMLElement {
|
|
|
257
270
|
if (!this.hasAttribute('data-calendars')) {
|
|
258
271
|
Array.from(this.querySelectorAll('button[data-calendar]')).forEach((element) => {
|
|
259
272
|
// Scan through the buttons and look forunique calendar names
|
|
260
|
-
if (!
|
|
273
|
+
if (!this.calendars.includes(element.getAttribute('data-calendar')))
|
|
261
274
|
this.calendars.push(element.getAttribute('data-calendar'));
|
|
262
275
|
});
|
|
263
276
|
}
|
|
264
277
|
// Create tbody string by looping through the number of days in month plus some days before and after
|
|
265
278
|
let tbodyContent = `<tr>`;
|
|
266
|
-
for (let i =
|
|
279
|
+
for (let i = sundayFirst ? 0 : 1; i <= loopDays; i++) {
|
|
267
280
|
const loopDay = i - (startDay - 1);
|
|
268
|
-
const loopDate = `${year}-${String(month + 1).padStart(2,
|
|
281
|
+
const loopDate = `${year}-${String(month + 1).padStart(2, '0')}-${String(loopDay).padStart(2, '0')}`;
|
|
269
282
|
const dayOfWeek = i % 7;
|
|
270
283
|
tbodyContent += `<td class="day--${this.dayArray[dayOfWeek].toLowerCase()} ${loopDate == today ? 'today' : ''} ${loopDate == selectedDateStr ? 'selected' : ''} ${i < startDay ? 'prev-month' : ''} ${loopDay > daysThisMonth ? 'next-month' : ''}">`;
|
|
271
284
|
// prev month days
|
|
272
285
|
if (i < startDay) {
|
|
273
286
|
const adjustedLoopDay = daysPrevMonth - (startDay - 1 - i);
|
|
274
|
-
const adjustedLoopDate = `${prevMonthYear}-${String(prevMonth + 1).padStart(2,
|
|
287
|
+
const adjustedLoopDate = `${prevMonthYear}-${String(prevMonth + 1).padStart(2, '0')}-${String(adjustedLoopDay).padStart(2, '0')}`;
|
|
275
288
|
tbodyContent += `<time class="column-header" datetime="${adjustedLoopDate}" title="${this.dayArray[dayOfWeek]} ${loopDay} ${this.monthArray[prevMonth]} ${year}"><span class="day-of-week">${this.dayArray[dayOfWeek]} </span><span class="day">${adjustedLoopDay}</span> <span class="month">${this.monthArray[prevMonth]}</span></time>`;
|
|
276
289
|
tbodyContent += this.addDay(adjustedLoopDate, this.calendars);
|
|
277
290
|
}
|
|
@@ -282,13 +295,13 @@ class iamCalendar extends HTMLElement {
|
|
|
282
295
|
// next month days
|
|
283
296
|
if (loopDay > daysThisMonth) {
|
|
284
297
|
const adjustedLoopDay = i - (startDay - 1) - daysThisMonth;
|
|
285
|
-
const adjustedLoopDate = `${nextMonthYear}-${String(nextMonth + 1).padStart(2,
|
|
298
|
+
const adjustedLoopDate = `${nextMonthYear}-${String(nextMonth + 1).padStart(2, '0')}-${String(adjustedLoopDay).padStart(2, '0')}`;
|
|
286
299
|
tbodyContent += `<time class="column-header" datetime="${adjustedLoopDate}" title="${this.dayArray[dayOfWeek]} ${loopDay} ${this.monthArray[nextMonth]} ${year}"><span class="day-of-week">${this.dayArray[dayOfWeek]} </span><span class="day">${adjustedLoopDay}</span> <span class="month">${this.monthArray[nextMonth]}</span></time>`;
|
|
287
300
|
tbodyContent += this.addDay(adjustedLoopDate, this.calendars);
|
|
288
301
|
}
|
|
289
302
|
tbodyContent += '</td>';
|
|
290
303
|
// Close row and start a new one
|
|
291
|
-
if ((
|
|
304
|
+
if ((sundayFirst ? i + 1 : i) % 7 === 0 && i != loopDays) {
|
|
292
305
|
tbodyContent += `</tr><tr>`;
|
|
293
306
|
}
|
|
294
307
|
}
|
|
@@ -298,20 +311,20 @@ class iamCalendar extends HTMLElement {
|
|
|
298
311
|
addDay(day, calendars) {
|
|
299
312
|
let htmlTable = '<table class="table--day">';
|
|
300
313
|
htmlTable += `<thead><tr><th>time</th>`;
|
|
301
|
-
calendars.forEach(calendarTitle => {
|
|
314
|
+
calendars.forEach((calendarTitle) => {
|
|
302
315
|
htmlTable += `<th class="column-header">${calendarTitle}</th>`;
|
|
303
316
|
});
|
|
304
317
|
htmlTable += `</tr></thead>`;
|
|
305
318
|
htmlTable += `<tbody>`;
|
|
306
319
|
htmlTable += `<tr class="allday"><th>All day</th>`;
|
|
307
|
-
calendars.forEach(calendarTitle => {
|
|
320
|
+
calendars.forEach((calendarTitle) => {
|
|
308
321
|
htmlTable += `<td datetime="${day}" data-calendar="${calendarTitle}"><span datetime="${day}"></span></td>`;
|
|
309
322
|
});
|
|
310
323
|
htmlTable += `</tr>`;
|
|
311
324
|
for (let i = 0; i < 24; i++) {
|
|
312
325
|
htmlTable += `<tr class="hour${i}"><th data-hour="${i}">${i}${i < 12 ? 'am' : 'pm'}</th>`;
|
|
313
|
-
calendars.forEach(calendarTitle => {
|
|
314
|
-
htmlTable += `<td datetime="${day}T${String(i).padStart(2,
|
|
326
|
+
calendars.forEach((calendarTitle) => {
|
|
327
|
+
htmlTable += `<td datetime="${day}T${String(i).padStart(2, '0')}:00" data-calendar="${calendarTitle}"><span datetime="${day}T${String(i).padStart(2, '0')}:00"></span><span datetime="${day}T${String(i).padStart(2, '0')}:15"></span><span datetime="${day}T${String(i).padStart(2, '0')}:30"></span><span datetime="${day}T${String(i).padStart(2, '0')}:45"></span></td>`;
|
|
315
328
|
});
|
|
316
329
|
htmlTable += `</tr>`;
|
|
317
330
|
}
|
|
@@ -358,15 +371,15 @@ class iamCalendar extends HTMLElement {
|
|
|
358
371
|
element.setAttribute('data-days', 1);
|
|
359
372
|
}
|
|
360
373
|
}
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
374
|
+
const getRoundedDate = (minutes, d = new Date()) => {
|
|
375
|
+
const ms = 1000 * 60 * minutes; // convert minutes to ms
|
|
376
|
+
const roundedDate = new Date(Math.round(d.getTime() / ms) * ms);
|
|
364
377
|
const newMonth = roundedDate.getMonth();
|
|
365
378
|
const newYear = roundedDate.getFullYear();
|
|
366
379
|
const newDay = roundedDate.getDate();
|
|
367
380
|
const newMinutes = roundedDate.getMinutes();
|
|
368
381
|
const newHour = roundedDate.getHours();
|
|
369
|
-
const strRoundedDate = `${newYear}-${String(newMonth + 1).padStart(2,
|
|
382
|
+
const strRoundedDate = `${newYear}-${String(newMonth + 1).padStart(2, '0')}-${String(newDay).padStart(2, '0')}T${String(newHour).padStart(2, '0')}:${String(newMinutes).padStart(2, '0')}`;
|
|
370
383
|
return strRoundedDate;
|
|
371
384
|
};
|
|
372
385
|
if (datetimeArr[1]) {
|
|
@@ -374,7 +387,6 @@ class iamCalendar extends HTMLElement {
|
|
|
374
387
|
element.querySelector(':scope > span').setAttribute('data-start', datetimeArr[1]);
|
|
375
388
|
const roundedDatetime = getRoundedDate(15, new Date(datetime));
|
|
376
389
|
element.setAttribute('datetime', roundedDatetime);
|
|
377
|
-
console.log(roundedDatetime);
|
|
378
390
|
}
|
|
379
391
|
if (element.querySelector('.tooltip__content')) {
|
|
380
392
|
const tooltip = element.querySelector('.tooltip__content');
|
|
@@ -391,10 +403,12 @@ class iamCalendar extends HTMLElement {
|
|
|
391
403
|
// Locate where we need to add slots for the buttons to go - We need duplicate slots for the split view and fixed header
|
|
392
404
|
const timeTd = component.shadowRoot.querySelector(`.month-wrapper .table--day td:has(span[datetime="${datetime}"])${element.hasAttribute('data-calendar') ? `[data-calendar="${element.getAttribute('data-calendar').replace('_', '')}"]` : ''}`);
|
|
393
405
|
const timeTdHeader = component.shadowRoot.querySelector(`#week-view-header .table--day td:has(span[datetime="${datetime}"])${element.hasAttribute('data-calendar') ? `[data-calendar="${element.getAttribute('data-calendar').replace('_', '')}"]` : ''}`);
|
|
394
|
-
if (timeTdHeader && timeTdHeader.closest('tr').classList.contains(
|
|
395
|
-
// Add the alldays slot for the fixed header
|
|
406
|
+
if (timeTdHeader && timeTdHeader.closest('tr').classList.contains('allday')) {
|
|
407
|
+
// Add the alldays slot for the fixed header
|
|
396
408
|
if (!timeTdHeader.querySelector(`slot[name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_', '')}` : ''}-header]"`)) {
|
|
397
|
-
timeTdHeader
|
|
409
|
+
timeTdHeader
|
|
410
|
+
.querySelector(`span[datetime="${datetime}"]`)
|
|
411
|
+
.insertAdjacentHTML('beforeEnd', `<slot name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_', '')}` : ''}-header" class="${continued ? 'continued' : ''}"></slot>`);
|
|
398
412
|
}
|
|
399
413
|
}
|
|
400
414
|
const dateTd = (_a = timeTd === null || timeTd === void 0 ? void 0 : timeTd.parentElement) === null || _a === void 0 ? void 0 : _a.closest('td');
|
|
@@ -404,15 +418,17 @@ class iamCalendar extends HTMLElement {
|
|
|
404
418
|
if (timeTd) {
|
|
405
419
|
// Add the default slot
|
|
406
420
|
if (!timeTd.querySelector(`slot[name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_', '')}` : ''}"]`)) {
|
|
407
|
-
timeTd
|
|
421
|
+
timeTd
|
|
422
|
+
.querySelector(`span[datetime="${datetime}"]`)
|
|
423
|
+
.insertAdjacentHTML('beforeEnd', `<slot name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_', '')}` : ''}" class="${continued ? 'continued' : ''}"></slot>`);
|
|
408
424
|
}
|
|
409
425
|
// Set the classes need to create the grey bars in the mobile month view
|
|
410
426
|
const events = dateTd.hasAttribute('data-events') ? parseInt(dateTd.getAttribute('data-events')) : 0;
|
|
411
427
|
let hours = dateTd.hasAttribute('data-hours') ? parseFloat(dateTd.getAttribute('data-hours')) : 0;
|
|
412
428
|
hours += element.hasAttribute('data-hours') ? parseFloat(element.getAttribute('data-hours')) : 0;
|
|
413
429
|
dateTd.setAttribute('data-events', parseInt(events) + 1);
|
|
414
|
-
if (
|
|
415
|
-
dateTd.setAttribute('data-more',
|
|
430
|
+
if (events + 1 > 2)
|
|
431
|
+
dateTd.setAttribute('data-more', parseInt(events) + 1 - 2);
|
|
416
432
|
dateTd.setAttribute('data-hours', hours);
|
|
417
433
|
dateTd.classList.add('has-event');
|
|
418
434
|
if (timeTd.closest('tr').classList.contains('has-event'))
|
|
@@ -436,7 +452,7 @@ class iamCalendar extends HTMLElement {
|
|
|
436
452
|
element.style.setProperty('--event-width', `${eventDayTotal * 100}%`);
|
|
437
453
|
element.style.setProperty('--event-max-width', `${(8 - dayOfWeek) * 100}%`);
|
|
438
454
|
element.classList.add('allday-event');
|
|
439
|
-
// Create a duplicate event for each day the orginal
|
|
455
|
+
// Create a duplicate event for each day the orginal
|
|
440
456
|
for (let i = 1; i < eventDayTotal; i++) {
|
|
441
457
|
const cloneElement = element.cloneNode(true);
|
|
442
458
|
cloneElement.removeAttribute('data-days');
|
|
@@ -456,12 +472,13 @@ class iamCalendar extends HTMLElement {
|
|
|
456
472
|
const newYear = newDate.getFullYear();
|
|
457
473
|
const newDay = newDate.getDate();
|
|
458
474
|
const newDayOfWeek = newDate.getDay() ? newDate.getDay() : 7;
|
|
459
|
-
const strCloneEvent = `${newYear}-${String(newMonth + 1).padStart(2,
|
|
475
|
+
const strCloneEvent = `${newYear}-${String(newMonth + 1).padStart(2, '0')}-${String(newDay).padStart(2, '0')}`;
|
|
460
476
|
cloneElement.setAttribute('data-original-datetime', element.getAttribute('datetime'));
|
|
461
477
|
cloneElement.setAttribute('datetime', strCloneEvent);
|
|
462
478
|
element.after(cloneElement); // Add after original
|
|
463
479
|
adjustEvent(component, cloneElement, true);
|
|
464
|
-
if (newDayOfWeek == 1) {
|
|
480
|
+
if (newDayOfWeek == 1) {
|
|
481
|
+
// Monday
|
|
465
482
|
cloneElement.style.setProperty('--event-width', `${(eventDayTotal - i) * 100}%`);
|
|
466
483
|
cloneElement.style.setProperty('--event-max-width', `${(8 - newDayOfWeek) * 100}%`);
|
|
467
484
|
cloneElement.classList.remove('continued');
|
|
@@ -478,11 +495,11 @@ class iamCalendar extends HTMLElement {
|
|
|
478
495
|
});
|
|
479
496
|
setTimeout(() => {
|
|
480
497
|
this.pauseObserver = false;
|
|
481
|
-
},
|
|
498
|
+
}, '500');
|
|
482
499
|
}
|
|
483
500
|
addJSEvents(component) {
|
|
484
501
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
485
|
-
// Add events to the newly created calendar
|
|
502
|
+
// Add events to the newly created calendar
|
|
486
503
|
const title = (_a = component.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.calendar__title');
|
|
487
504
|
const datePicker = (_b = component.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector(`#date`);
|
|
488
505
|
const viewPicker = (_c = component.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector(`#view`);
|
|
@@ -491,7 +508,7 @@ class iamCalendar extends HTMLElement {
|
|
|
491
508
|
const date = today.getDate();
|
|
492
509
|
const month = today.getMonth();
|
|
493
510
|
const year = today.getFullYear();
|
|
494
|
-
const strToday = `${year}-${String(month + 1).padStart(2,
|
|
511
|
+
const strToday = `${year}-${String(month + 1).padStart(2, '0')}-${String(date).padStart(2, '0')}`;
|
|
495
512
|
const tbody = (_e = component.shadowRoot) === null || _e === void 0 ? void 0 : _e.querySelector('#calendar > table > tbody');
|
|
496
513
|
// clicking on the day istelf
|
|
497
514
|
Array.from(component.shadowRoot.querySelectorAll('.month-wrapper > table > tbody > tr > td:has(slot)')).forEach((element) => {
|
|
@@ -504,7 +521,7 @@ class iamCalendar extends HTMLElement {
|
|
|
504
521
|
});
|
|
505
522
|
element.classList.add('selected');
|
|
506
523
|
// Go to day if the in month view with out split view enabled
|
|
507
|
-
if (component.shadowRoot.querySelector('[name="split"]:checked') && viewPicker.value ==
|
|
524
|
+
if (component.shadowRoot.querySelector('[name="split"]:checked') && viewPicker.value == 'month') {
|
|
508
525
|
Array.from(component.querySelectorAll(`[data-slot]`)).forEach((button) => {
|
|
509
526
|
button.setAttribute('slot', button.getAttribute('data-slot'));
|
|
510
527
|
});
|
|
@@ -513,13 +530,13 @@ class iamCalendar extends HTMLElement {
|
|
|
513
530
|
button.removeAttribute('slot');
|
|
514
531
|
});
|
|
515
532
|
}
|
|
516
|
-
else if (!component.shadowRoot.querySelector('[name="split"]:checked') && viewPicker.value ==
|
|
517
|
-
viewPicker.value =
|
|
533
|
+
else if (!component.shadowRoot.querySelector('[name="split"]:checked') && viewPicker.value == 'month') {
|
|
534
|
+
viewPicker.value = 'day';
|
|
518
535
|
title === null || title === void 0 ? void 0 : title.innerHTML = this.getTitle(datePicker.value, viewPicker.value);
|
|
519
536
|
component.scrollIntoPlace();
|
|
520
537
|
}
|
|
521
|
-
if (viewPicker.value ==
|
|
522
|
-
viewPicker.value =
|
|
538
|
+
if (viewPicker.value == 'year') {
|
|
539
|
+
viewPicker.value = 'month';
|
|
523
540
|
yearView === null || yearView === void 0 ? void 0 : yearView.innerHTML = '';
|
|
524
541
|
tbody === null || tbody === void 0 ? void 0 : tbody.innerHTML = component.createCalendar(datePicker.value, strToday);
|
|
525
542
|
component.addEvents();
|
|
@@ -529,21 +546,21 @@ class iamCalendar extends HTMLElement {
|
|
|
529
546
|
});
|
|
530
547
|
// Drag and drop
|
|
531
548
|
(_f = component.shadowRoot) === null || _f === void 0 ? void 0 : _f.querySelectorAll(`#calendar .table--day td span`).forEach((element) => {
|
|
532
|
-
element.addEventListener(
|
|
549
|
+
element.addEventListener('dragover', (ev) => {
|
|
533
550
|
ev.preventDefault();
|
|
534
551
|
return false;
|
|
535
552
|
});
|
|
536
|
-
element.addEventListener(
|
|
553
|
+
element.addEventListener('dragenter', (ev) => {
|
|
537
554
|
ev.preventDefault();
|
|
538
555
|
element.classList.add('dragover');
|
|
539
556
|
});
|
|
540
|
-
element.addEventListener(
|
|
557
|
+
element.addEventListener('dragleave', (ev) => {
|
|
541
558
|
ev.preventDefault();
|
|
542
559
|
element.classList.remove('dragover');
|
|
543
560
|
});
|
|
544
|
-
element.addEventListener(
|
|
561
|
+
element.addEventListener('drop', (ev) => {
|
|
545
562
|
ev.preventDefault();
|
|
546
|
-
const droppedElement = component.querySelector(`#${ev.dataTransfer.getData(
|
|
563
|
+
const droppedElement = component.querySelector(`#${ev.dataTransfer.getData('text')}`);
|
|
547
564
|
const td = element.closest('td');
|
|
548
565
|
const datetime = element.getAttribute('datetime');
|
|
549
566
|
element.classList.remove('dragover');
|
|
@@ -555,7 +572,7 @@ class iamCalendar extends HTMLElement {
|
|
|
555
572
|
droppedElement === null || droppedElement === void 0 ? void 0 : droppedElement.setAttribute('slot', `${datetime}${td.hasAttribute('data-calendar') ? `-${td.getAttribute('data-calendar').replace('_', '')}` : ''}`);
|
|
556
573
|
});
|
|
557
574
|
});
|
|
558
|
-
// Watch for the event being resized
|
|
575
|
+
// Watch for the event being resized
|
|
559
576
|
const resizeObserver = new ResizeObserver((entries) => {
|
|
560
577
|
for (const entry of entries) {
|
|
561
578
|
if (entry.target.classList.contains('mousedown'))
|
|
@@ -565,15 +582,15 @@ class iamCalendar extends HTMLElement {
|
|
|
565
582
|
if (component.hasAttribute('data-drag')) {
|
|
566
583
|
component.querySelectorAll(`button:not([draggable])`).forEach((element) => {
|
|
567
584
|
element.setAttribute('draggable', 'true');
|
|
568
|
-
element.addEventListener(
|
|
569
|
-
ev.dataTransfer.setData(
|
|
585
|
+
element.addEventListener('dragstart', (ev) => {
|
|
586
|
+
ev.dataTransfer.setData('text', ev.target.id); // save the id for when dropped
|
|
570
587
|
});
|
|
571
588
|
// set onbserver
|
|
572
589
|
resizeObserver.observe(element);
|
|
573
|
-
element.addEventListener(
|
|
590
|
+
element.addEventListener('mousedown', (ev) => {
|
|
574
591
|
element.classList.add('mousedown');
|
|
575
592
|
});
|
|
576
|
-
element.addEventListener(
|
|
593
|
+
element.addEventListener('click', (ev) => {
|
|
577
594
|
if (element.classList.contains('resizing')) {
|
|
578
595
|
ev.stopPropagation();
|
|
579
596
|
ev.stopImmediatePropagation();
|
|
@@ -582,30 +599,30 @@ class iamCalendar extends HTMLElement {
|
|
|
582
599
|
// Work out the evnt length in hours and set the height
|
|
583
600
|
const span = this.shadowRoot.querySelector(`span[datetime="${element.getAttribute('datetime')}"]`);
|
|
584
601
|
const spanStyles = window.getComputedStyle(span);
|
|
585
|
-
const hours = Math.round(parseInt(element.style.height) / parseInt(spanStyles.getPropertyValue(
|
|
602
|
+
const hours = Math.round(parseInt(element.style.height) / parseInt(spanStyles.getPropertyValue('height'))) / 4;
|
|
586
603
|
element.setAttribute('data-hours', hours);
|
|
587
604
|
element.style.setProperty('--event-height', `${hours * (1.09375 * 4)}rem`);
|
|
588
|
-
element.style.height =
|
|
605
|
+
element.style.height = '';
|
|
589
606
|
// to do dispatch event
|
|
590
607
|
}
|
|
591
608
|
});
|
|
592
609
|
});
|
|
593
610
|
}
|
|
594
611
|
component.querySelectorAll(`button`).forEach((element) => {
|
|
595
|
-
element.addEventListener(
|
|
612
|
+
element.addEventListener('contextmenu', (event) => {
|
|
596
613
|
event.preventDefault();
|
|
597
614
|
event.stopPropagation();
|
|
598
615
|
});
|
|
599
616
|
});
|
|
600
617
|
(_g = component.shadowRoot) === null || _g === void 0 ? void 0 : _g.querySelectorAll(`.month-wrapper > table > tbody > tr > td`).forEach((element) => {
|
|
601
|
-
element.addEventListener(
|
|
618
|
+
element.addEventListener('contextmenu', (event) => {
|
|
602
619
|
event.preventDefault();
|
|
603
620
|
const customEvent = new CustomEvent('right-click', {
|
|
604
621
|
detail: {
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
622
|
+
clientX: event.clientX,
|
|
623
|
+
clientY: event.clientY,
|
|
624
|
+
element: element,
|
|
625
|
+
datetime: element.querySelector('time').getAttribute('datetime'),
|
|
609
626
|
},
|
|
610
627
|
});
|
|
611
628
|
console.log(element);
|
|
@@ -614,60 +631,60 @@ class iamCalendar extends HTMLElement {
|
|
|
614
631
|
});
|
|
615
632
|
}
|
|
616
633
|
paginateDate(direction, view, currentDate) {
|
|
617
|
-
if (view ==
|
|
634
|
+
if (view == 'month' || view == 'list') {
|
|
618
635
|
const selectedDate = new Date(currentDate);
|
|
619
|
-
if (direction ==
|
|
636
|
+
if (direction == 'next')
|
|
620
637
|
selectedDate.setMonth(selectedDate.getMonth() + 1);
|
|
621
638
|
else
|
|
622
639
|
selectedDate.setMonth(selectedDate.getMonth() - 1);
|
|
623
640
|
const month = selectedDate.getMonth() + 1;
|
|
624
641
|
const year = selectedDate.getFullYear();
|
|
625
|
-
const strNextMonth = `${year}-${String(month).padStart(2,
|
|
642
|
+
const strNextMonth = `${year}-${String(month).padStart(2, '0')}-01`;
|
|
626
643
|
return strNextMonth;
|
|
627
644
|
}
|
|
628
|
-
else if (view ==
|
|
645
|
+
else if (view == 'week') {
|
|
629
646
|
//const selectedDate = new Date(currentDate);
|
|
630
647
|
const monday = this.setToMonday(new Date(currentDate));
|
|
631
|
-
if (direction ==
|
|
648
|
+
if (direction == 'next')
|
|
632
649
|
monday.setDate(monday.getDate() + 7);
|
|
633
650
|
else
|
|
634
651
|
monday.setDate(monday.getDate() - 7);
|
|
635
652
|
const date = monday.getDate();
|
|
636
653
|
const month = monday.getMonth() + 1;
|
|
637
654
|
const year = monday.getFullYear();
|
|
638
|
-
const strNextWeek = `${year}-${String(month).padStart(2,
|
|
655
|
+
const strNextWeek = `${year}-${String(month).padStart(2, '0')}-${String(date).padStart(2, '0')}`;
|
|
639
656
|
return strNextWeek;
|
|
640
657
|
}
|
|
641
|
-
else if (view ==
|
|
658
|
+
else if (view == 'year') {
|
|
642
659
|
const selectedDate = new Date(currentDate);
|
|
643
|
-
if (direction ==
|
|
660
|
+
if (direction == 'next')
|
|
644
661
|
selectedDate.setYear(selectedDate.getFullYear() + 1);
|
|
645
662
|
else
|
|
646
663
|
selectedDate.setYear(selectedDate.getFullYear() - 1);
|
|
647
664
|
const year = selectedDate.getFullYear();
|
|
648
665
|
const month = selectedDate.getMonth() + 1;
|
|
649
|
-
const strNextMonth = `${year}-${String(month).padStart(2,
|
|
666
|
+
const strNextMonth = `${year}-${String(month).padStart(2, '0')}-01`;
|
|
650
667
|
return strNextMonth;
|
|
651
668
|
}
|
|
652
669
|
const nextDay = new Date(currentDate);
|
|
653
|
-
if (direction ==
|
|
670
|
+
if (direction == 'next')
|
|
654
671
|
nextDay.setDate(nextDay.getDate() + 1);
|
|
655
672
|
else
|
|
656
673
|
nextDay.setDate(nextDay.getDate() - 1);
|
|
657
674
|
const date = nextDay.getDate();
|
|
658
675
|
const month = nextDay.getMonth() + 1;
|
|
659
676
|
const year = nextDay.getFullYear();
|
|
660
|
-
const strNextDay = `${year}-${String(month).padStart(2,
|
|
677
|
+
const strNextDay = `${year}-${String(month).padStart(2, '0')}-${String(date).padStart(2, '0')}`;
|
|
661
678
|
return strNextDay;
|
|
662
679
|
}
|
|
663
680
|
setWeekDay() {
|
|
664
681
|
var _a, _b, _c, _d;
|
|
665
|
-
(_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.out-of-hours').forEach(element => {
|
|
682
|
+
(_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.out-of-hours').forEach((element) => {
|
|
666
683
|
element.classList.remove('out-of-hours');
|
|
667
684
|
});
|
|
668
685
|
const startTime = parseInt((_b = this.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#start-time').value.split(':')[0]);
|
|
669
686
|
const endTime = parseInt((_c = this.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('#end-time').value.split(':')[0]);
|
|
670
|
-
(_d = this.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelectorAll('[data-hour]').forEach(element => {
|
|
687
|
+
(_d = this.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelectorAll('[data-hour]').forEach((element) => {
|
|
671
688
|
const hour = parseInt(element.getAttribute('data-hour'));
|
|
672
689
|
if (hour < startTime)
|
|
673
690
|
element.classList.add('out-of-hours');
|
|
@@ -683,9 +700,9 @@ class iamCalendar extends HTMLElement {
|
|
|
683
700
|
const viewPicker = (_b = this.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector(`#view`);
|
|
684
701
|
const wrapper = this.shadowRoot.querySelector('.calendar__wrapper');
|
|
685
702
|
// scroll
|
|
686
|
-
if (viewPicker.value ==
|
|
703
|
+
if (viewPicker.value == 'week')
|
|
687
704
|
wrapper.scrollTo(0, scrollPos); // TO DO work out how much to scroll by
|
|
688
|
-
else if (viewPicker.value ==
|
|
705
|
+
else if (viewPicker.value == 'day') {
|
|
689
706
|
wrapper.scrollTo(0, scrollPos); // TO DO work out how much to scroll by
|
|
690
707
|
}
|
|
691
708
|
}
|
|
@@ -750,17 +767,17 @@ class iamCalendar extends HTMLElement {
|
|
|
750
767
|
var _a;
|
|
751
768
|
element.setAttribute('data-time', time);
|
|
752
769
|
element.classList.add('column-header');
|
|
753
|
-
(_a = element.closest('tr')) === null || _a === void 0 ? void 0 : _a.style.setProperty('--minute-pos', (
|
|
770
|
+
(_a = element.closest('tr')) === null || _a === void 0 ? void 0 : _a.style.setProperty('--minute-pos', (minute / 60) * 100 + '%');
|
|
754
771
|
});
|
|
755
772
|
}
|
|
756
773
|
}
|
|
757
774
|
getYearView(selectedDate, today, sundayFirst) {
|
|
758
|
-
let yearViewStr =
|
|
775
|
+
let yearViewStr = '';
|
|
759
776
|
for (let i = 0; i < 12; i++) {
|
|
760
777
|
console.log(selectedDate);
|
|
761
778
|
const selectedDateObj = new Date(selectedDate);
|
|
762
779
|
const selectedYear = selectedDateObj.getFullYear();
|
|
763
|
-
const selectedFormattedDate = `${selectedYear}-${String(i + 1).padStart(2,
|
|
780
|
+
const selectedFormattedDate = `${selectedYear}-${String(i + 1).padStart(2, '0')}-01`;
|
|
764
781
|
yearViewStr += `<div class='month-wrapper'>
|
|
765
782
|
<time class="column-header">${this.monthArray[i]}</time>
|
|
766
783
|
<table>
|
|
@@ -801,14 +818,14 @@ class iamCalendar extends HTMLElement {
|
|
|
801
818
|
const date = today.getDate();
|
|
802
819
|
const month = today.getMonth();
|
|
803
820
|
const year = today.getFullYear();
|
|
804
|
-
const strToday = `${year}-${String(month + 1).padStart(2,
|
|
821
|
+
const strToday = `${year}-${String(month + 1).padStart(2, '0')}-${String(date).padStart(2, '0')}`;
|
|
805
822
|
datePicker.value = strToday;
|
|
806
823
|
// Setup the view, month being default
|
|
807
824
|
if (this.hasAttribute('data-view'))
|
|
808
825
|
viewPicker.value = this.getAttribute('data-view');
|
|
809
826
|
else {
|
|
810
|
-
this.setAttribute('data-view',
|
|
811
|
-
viewPicker.value =
|
|
827
|
+
this.setAttribute('data-view', 'month');
|
|
828
|
+
viewPicker.value = 'month';
|
|
812
829
|
}
|
|
813
830
|
if (this.hasAttribute('data-views'))
|
|
814
831
|
viewPicker === null || viewPicker === void 0 ? void 0 : viewPicker.setAttribute('data-views', this.getAttribute('data-views'));
|
|
@@ -821,13 +838,13 @@ class iamCalendar extends HTMLElement {
|
|
|
821
838
|
}
|
|
822
839
|
// Setup the settings dialog
|
|
823
840
|
this.setupSettings();
|
|
824
|
-
// Setup the calendar then adjust and add events
|
|
841
|
+
// Setup the calendar then adjust and add events
|
|
825
842
|
title === null || title === void 0 ? void 0 : title.innerHTML = this.getTitle(strToday, viewPicker.value);
|
|
826
843
|
const calendarHtml = this.createCalendar(strToday, strToday, sundayFirst);
|
|
827
844
|
tbody === null || tbody === void 0 ? void 0 : tbody.innerHTML = calendarHtml;
|
|
828
845
|
//tbodySplit?.innerHTML = calendarHtml;
|
|
829
846
|
weekViewHeader === null || weekViewHeader === void 0 ? void 0 : weekViewHeader.innerHTML = calendarHtml;
|
|
830
|
-
if (viewPicker.value ==
|
|
847
|
+
if (viewPicker.value == 'year') {
|
|
831
848
|
yearView === null || yearView === void 0 ? void 0 : yearView.innerHTML = this.getYearView(datePicker.value, strToday, sundayFirst);
|
|
832
849
|
tbody === null || tbody === void 0 ? void 0 : tbody.innerHTML = '';
|
|
833
850
|
}
|
|
@@ -853,7 +870,7 @@ class iamCalendar extends HTMLElement {
|
|
|
853
870
|
});
|
|
854
871
|
const resizeObserver = new ResizeObserver((entries) => {
|
|
855
872
|
const splitButtonDisplayed = window.getComputedStyle(splitButton === null || splitButton === void 0 ? void 0 : splitButton.parentElement, null).display;
|
|
856
|
-
if (splitButtonDisplayed ==
|
|
873
|
+
if (splitButtonDisplayed == 'none') {
|
|
857
874
|
Array.from(this.querySelectorAll(`[data-slot]`)).forEach((button) => {
|
|
858
875
|
button.setAttribute('slot', button.getAttribute('data-slot'));
|
|
859
876
|
});
|
|
@@ -864,7 +881,7 @@ class iamCalendar extends HTMLElement {
|
|
|
864
881
|
viewPicker === null || viewPicker === void 0 ? void 0 : viewPicker.addEventListener('change', () => {
|
|
865
882
|
title === null || title === void 0 ? void 0 : title.innerHTML = this.getTitle(datePicker.value, viewPicker.value);
|
|
866
883
|
this.setAttribute('data-view', viewPicker.value);
|
|
867
|
-
if (viewPicker.value ==
|
|
884
|
+
if (viewPicker.value == 'week') {
|
|
868
885
|
Array.from(this.querySelectorAll(`.allday-event`)).forEach((button) => {
|
|
869
886
|
button.setAttribute('slot', button.getAttribute('slot') + '-header');
|
|
870
887
|
});
|
|
@@ -875,14 +892,14 @@ class iamCalendar extends HTMLElement {
|
|
|
875
892
|
button.setAttribute('slot', (_a = button.getAttribute('slot')) === null || _a === void 0 ? void 0 : _a.replace('-header', ''));
|
|
876
893
|
});
|
|
877
894
|
}
|
|
878
|
-
if (viewPicker.value ==
|
|
895
|
+
if (viewPicker.value == 'week' || viewPicker.value == 'day')
|
|
879
896
|
this.scrollIntoPlace();
|
|
880
|
-
if (viewPicker.value !=
|
|
897
|
+
if (viewPicker.value != 'month') {
|
|
881
898
|
Array.from(this.querySelectorAll(`[data-slot^="${datePicker.value}"]`)).forEach((button) => {
|
|
882
899
|
button.setAttribute('slot', button.getAttribute('data-slot'));
|
|
883
900
|
});
|
|
884
901
|
}
|
|
885
|
-
if (viewPicker.value ==
|
|
902
|
+
if (viewPicker.value == 'year') {
|
|
886
903
|
yearView === null || yearView === void 0 ? void 0 : yearView.innerHTML = this.getYearView(datePicker.value, strToday, sundayFirst);
|
|
887
904
|
tbody === null || tbody === void 0 ? void 0 : tbody.innerHTML = '';
|
|
888
905
|
this.addEvents();
|
|
@@ -891,7 +908,7 @@ class iamCalendar extends HTMLElement {
|
|
|
891
908
|
this.setTime(); // Month and day view has a current time indicator
|
|
892
909
|
this.scrollIntoPlace();
|
|
893
910
|
}
|
|
894
|
-
else if ((tbody === null || tbody === void 0 ? void 0 : tbody.innerHTML) ==
|
|
911
|
+
else if ((tbody === null || tbody === void 0 ? void 0 : tbody.innerHTML) == '') {
|
|
895
912
|
yearView === null || yearView === void 0 ? void 0 : yearView.innerHTML = '';
|
|
896
913
|
tbody === null || tbody === void 0 ? void 0 : tbody.innerHTML = this.createCalendar(datePicker.value, strToday);
|
|
897
914
|
this.addEvents();
|
|
@@ -902,14 +919,14 @@ class iamCalendar extends HTMLElement {
|
|
|
902
919
|
}
|
|
903
920
|
const customEvent = new CustomEvent('change-view', {
|
|
904
921
|
detail: {
|
|
905
|
-
|
|
906
|
-
|
|
922
|
+
view: viewPicker.value,
|
|
923
|
+
date: datePicker.value,
|
|
907
924
|
},
|
|
908
925
|
});
|
|
909
926
|
this.dispatchEvent(customEvent);
|
|
910
927
|
});
|
|
911
928
|
function resetCalendar(component) {
|
|
912
|
-
if (viewPicker.value ==
|
|
929
|
+
if (viewPicker.value == 'year') {
|
|
913
930
|
yearView === null || yearView === void 0 ? void 0 : yearView.innerHTML = component.getYearView(datePicker.value, strToday, sundayFirst);
|
|
914
931
|
tbody === null || tbody === void 0 ? void 0 : tbody.innerHTML = '';
|
|
915
932
|
component.addEvents();
|
|
@@ -944,8 +961,8 @@ class iamCalendar extends HTMLElement {
|
|
|
944
961
|
resetCalendar(this);
|
|
945
962
|
const customEvent = new CustomEvent('change-date', {
|
|
946
963
|
detail: {
|
|
947
|
-
|
|
948
|
-
|
|
964
|
+
view: viewPicker.value,
|
|
965
|
+
date: datePicker.value,
|
|
949
966
|
},
|
|
950
967
|
});
|
|
951
968
|
this.dispatchEvent(customEvent);
|
|
@@ -960,7 +977,9 @@ class iamCalendar extends HTMLElement {
|
|
|
960
977
|
console.log(this.pauseObserver);
|
|
961
978
|
if (this.pauseObserver == false) {
|
|
962
979
|
for (const mutation of mutationList) {
|
|
963
|
-
if (mutation.type == 'characterData' ||
|
|
980
|
+
if (mutation.type == 'characterData' ||
|
|
981
|
+
(mutation.type == 'childList' && mutation.addedNodes.length) ||
|
|
982
|
+
mutation.type === 'attributes') {
|
|
964
983
|
//resetCalendar(this);
|
|
965
984
|
this.addEvents();
|
|
966
985
|
}
|
|
@@ -979,14 +998,14 @@ class iamCalendar extends HTMLElement {
|
|
|
979
998
|
resetCalendar(this);
|
|
980
999
|
const customEvent = new CustomEvent('change-date-today', {
|
|
981
1000
|
detail: {
|
|
982
|
-
|
|
983
|
-
|
|
1001
|
+
view: viewPicker.value,
|
|
1002
|
+
date: datePicker.value,
|
|
984
1003
|
},
|
|
985
1004
|
});
|
|
986
1005
|
this.dispatchEvent(customEvent);
|
|
987
1006
|
});
|
|
988
1007
|
prevButton === null || prevButton === void 0 ? void 0 : prevButton.addEventListener('click', () => {
|
|
989
|
-
datePicker.value = this.paginateDate(
|
|
1008
|
+
datePicker.value = this.paginateDate('prev', viewPicker.value, datePicker.value);
|
|
990
1009
|
title === null || title === void 0 ? void 0 : title.innerHTML = this.getTitle(datePicker.value, viewPicker.value);
|
|
991
1010
|
if (this.shadowRoot.querySelector(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`))
|
|
992
1011
|
updateCalendar(this);
|
|
@@ -994,14 +1013,14 @@ class iamCalendar extends HTMLElement {
|
|
|
994
1013
|
resetCalendar(this);
|
|
995
1014
|
const customEvent = new CustomEvent('change-date-previous', {
|
|
996
1015
|
detail: {
|
|
997
|
-
|
|
998
|
-
|
|
1016
|
+
view: viewPicker.value,
|
|
1017
|
+
date: datePicker.value,
|
|
999
1018
|
},
|
|
1000
1019
|
});
|
|
1001
1020
|
this.dispatchEvent(customEvent);
|
|
1002
1021
|
});
|
|
1003
1022
|
nextButton === null || nextButton === void 0 ? void 0 : nextButton.addEventListener('click', () => {
|
|
1004
|
-
datePicker.value = this.paginateDate(
|
|
1023
|
+
datePicker.value = this.paginateDate('next', viewPicker.value, datePicker.value);
|
|
1005
1024
|
title === null || title === void 0 ? void 0 : title.innerHTML = this.getTitle(datePicker.value, viewPicker.value);
|
|
1006
1025
|
console.log(datePicker.value);
|
|
1007
1026
|
if (this.shadowRoot.querySelector(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`))
|
|
@@ -1010,8 +1029,8 @@ class iamCalendar extends HTMLElement {
|
|
|
1010
1029
|
resetCalendar(this);
|
|
1011
1030
|
const customEvent = new CustomEvent('change-date-next', {
|
|
1012
1031
|
detail: {
|
|
1013
|
-
|
|
1014
|
-
|
|
1032
|
+
view: viewPicker.value,
|
|
1033
|
+
date: datePicker.value,
|
|
1015
1034
|
},
|
|
1016
1035
|
});
|
|
1017
1036
|
this.dispatchEvent(customEvent);
|
|
@@ -1027,7 +1046,7 @@ class iamCalendar extends HTMLElement {
|
|
|
1027
1046
|
'change-date-next',
|
|
1028
1047
|
'open-settings',
|
|
1029
1048
|
'close-settings',
|
|
1030
|
-
'save-settings'
|
|
1049
|
+
'save-settings',
|
|
1031
1050
|
]);
|
|
1032
1051
|
}
|
|
1033
1052
|
static get observedAttributes() {
|
|
@@ -1037,35 +1056,33 @@ class iamCalendar extends HTMLElement {
|
|
|
1037
1056
|
var _a, _b, _c, _d;
|
|
1038
1057
|
this.pauseObserver = true;
|
|
1039
1058
|
switch (attrName) {
|
|
1040
|
-
case 'data-calendars':
|
|
1041
|
-
{
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
this.calendars.
|
|
1055
|
-
|
|
1056
|
-
});
|
|
1057
|
-
}
|
|
1058
|
-
const calendarHtml = this.createCalendar(datePicker.value, strToday);
|
|
1059
|
-
tbody === null || tbody === void 0 ? void 0 : tbody.innerHTML = calendarHtml;
|
|
1060
|
-
weekViewHeader === null || weekViewHeader === void 0 ? void 0 : weekViewHeader.innerHTML = calendarHtml;
|
|
1061
|
-
this.addEvents();
|
|
1062
|
-
this.addJSEvents(this);
|
|
1063
|
-
this.setWeekDay();
|
|
1064
|
-
this.setTime();
|
|
1059
|
+
case 'data-calendars': {
|
|
1060
|
+
if (oldVal != newVal) {
|
|
1061
|
+
const tbody = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#calendar > table > tbody');
|
|
1062
|
+
const weekViewHeader = (_b = this.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#week-view-header > table > tbody');
|
|
1063
|
+
const datePicker = (_c = this.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector(`#date`);
|
|
1064
|
+
// Get a formatted version of todays date
|
|
1065
|
+
const today = new Date();
|
|
1066
|
+
const date = today.getDate();
|
|
1067
|
+
const month = today.getMonth();
|
|
1068
|
+
const year = today.getFullYear();
|
|
1069
|
+
const strToday = `${year}-${String(month + 1).padStart(2, '0')}-${String(date).padStart(2, '0')}`;
|
|
1070
|
+
if (this.hasAttribute('data-calendars')) {
|
|
1071
|
+
this.calendars = this.getAttribute('data-calendars').split(',');
|
|
1072
|
+
this.calendars.forEach((item, index) => {
|
|
1073
|
+
this.calendars[index] = item.trim();
|
|
1074
|
+
});
|
|
1065
1075
|
}
|
|
1066
|
-
|
|
1076
|
+
const calendarHtml = this.createCalendar(datePicker.value, strToday);
|
|
1077
|
+
tbody === null || tbody === void 0 ? void 0 : tbody.innerHTML = calendarHtml;
|
|
1078
|
+
weekViewHeader === null || weekViewHeader === void 0 ? void 0 : weekViewHeader.innerHTML = calendarHtml;
|
|
1079
|
+
this.addEvents();
|
|
1080
|
+
this.addJSEvents(this);
|
|
1081
|
+
this.setWeekDay();
|
|
1082
|
+
this.setTime();
|
|
1067
1083
|
}
|
|
1068
|
-
;
|
|
1084
|
+
break;
|
|
1085
|
+
}
|
|
1069
1086
|
case 'data-view': {
|
|
1070
1087
|
if (oldVal != newVal) {
|
|
1071
1088
|
const viewPicker = (_d = this.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelector(`#view`);
|
|
@@ -1077,7 +1094,7 @@ class iamCalendar extends HTMLElement {
|
|
|
1077
1094
|
}
|
|
1078
1095
|
setTimeout(() => {
|
|
1079
1096
|
this.pauseObserver = false;
|
|
1080
|
-
},
|
|
1097
|
+
}, '500');
|
|
1081
1098
|
}
|
|
1082
1099
|
}
|
|
1083
1100
|
export default iamCalendar;
|