@event-calendar/core
Advanced tools
Comparing version 2.5.1 to 2.6.0
{ | ||
"name": "@event-calendar/core", | ||
"version": "2.5.1", | ||
"version": "2.6.0", | ||
"title": "Event Calendar Core package", | ||
@@ -5,0 +5,0 @@ "description": "Full-sized drag & drop event calendar with resource view", |
@@ -11,1 +11,11 @@ import {run_all} from 'svelte/internal'; | ||
} | ||
export function task(fn, handle, tasks) { | ||
handle ??= fn; | ||
if (!tasks.has(handle)) { | ||
tasks.set(handle, setTimeout(() => { | ||
tasks.delete(handle); | ||
fn(); | ||
})); | ||
} | ||
} |
@@ -51,2 +51,78 @@ import {addDay, datesEqual, createDate, cloneDate, setMidnight, toLocalDate, toISOString, noTimePart, copyTime} from './date'; | ||
export function createEventContent(chunk, displayEventEnd, eventContent, theme, _intlEventTime, _view) { | ||
let timeText = _intlEventTime.formatRange( | ||
chunk.start, | ||
displayEventEnd && chunk.event.display !== 'pointer' | ||
? copyTime(cloneDate(chunk.start), chunk.end) // make Intl.formatRange output only the time part | ||
: chunk.start | ||
); | ||
let content; | ||
if (eventContent) { | ||
content = is_function(eventContent) | ||
? eventContent({ | ||
event: toEventWithLocalDates(chunk.event), | ||
timeText, | ||
view: toViewWithLocalDates(_view) | ||
}) | ||
: eventContent; | ||
} else { | ||
let domNodes; | ||
switch (chunk.event.display) { | ||
case 'background': | ||
domNodes = []; | ||
break; | ||
case 'pointer': | ||
domNodes = [createTimeElement(timeText, chunk, theme)]; | ||
break; | ||
default: | ||
domNodes = [ | ||
...chunk.event.allDay ? [] : [createTimeElement(timeText, chunk, theme)], | ||
createElement('h4', theme.eventTitle, chunk.event.title) | ||
]; | ||
} | ||
content = {domNodes}; | ||
} | ||
return [timeText, content]; | ||
} | ||
function createTimeElement(timeText, chunk, theme) { | ||
return createElement( | ||
'time', | ||
theme.eventTime, | ||
timeText, | ||
[['datetime', toISOString(chunk.start)]] | ||
); | ||
} | ||
export function createEventClasses(eventClassNames, event, _view) { | ||
if (eventClassNames) { | ||
if (is_function(eventClassNames)) { | ||
eventClassNames = eventClassNames({ | ||
event: toEventWithLocalDates(event), | ||
view: toViewWithLocalDates(_view) | ||
}); | ||
} | ||
return Array.isArray(eventClassNames) ? eventClassNames : [eventClassNames]; | ||
} | ||
return []; | ||
} | ||
export function toEventWithLocalDates(event) { | ||
return _cloneEvent(event, toLocalDate); | ||
} | ||
export function cloneEvent(event) { | ||
return _cloneEvent(event, cloneDate); | ||
} | ||
function _cloneEvent(event, dateFn) { | ||
event = assign({}, event); | ||
event.start = dateFn(event.start); | ||
event.end = dateFn(event.end); | ||
return event; | ||
} | ||
/** | ||
@@ -134,78 +210,9 @@ * Prepare event chunks for month view and all-day slot in week view | ||
export function createEventContent(chunk, displayEventEnd, eventContent, theme, _intlEventTime, _view) { | ||
let timeText = _intlEventTime.formatRange( | ||
chunk.start, | ||
displayEventEnd && chunk.event.display !== 'pointer' | ||
? copyTime(cloneDate(chunk.start), chunk.end) // make Intl.formatRange output only the time part | ||
: chunk.start | ||
); | ||
let content; | ||
if (eventContent) { | ||
content = is_function(eventContent) | ||
? eventContent({ | ||
event: toEventWithLocalDates(chunk.event), | ||
timeText, | ||
view: toViewWithLocalDates(_view) | ||
}) | ||
: eventContent; | ||
} else { | ||
let domNodes; | ||
switch (chunk.event.display) { | ||
case 'background': | ||
domNodes = []; | ||
break; | ||
case 'pointer': | ||
domNodes = [createTimeElement(timeText, chunk, theme)]; | ||
break; | ||
default: | ||
domNodes = [ | ||
...chunk.event.allDay ? [] : [createTimeElement(timeText, chunk, theme)], | ||
createElement('h4', theme.eventTitle, chunk.event.title) | ||
]; | ||
} | ||
content = {domNodes}; | ||
export function runReposition(refs, data) { | ||
refs.length = data.length; | ||
for (let ref of refs) { | ||
ref?.reposition?.(); | ||
} | ||
return [timeText, content]; | ||
} | ||
function createTimeElement(timeText, chunk, theme) { | ||
return createElement( | ||
'time', | ||
theme.eventTime, | ||
timeText, | ||
[['datetime', toISOString(chunk.start)]] | ||
); | ||
} | ||
export function createEventClasses(eventClassNames, event, _view) { | ||
if (eventClassNames) { | ||
if (is_function(eventClassNames)) { | ||
eventClassNames = eventClassNames({ | ||
event: toEventWithLocalDates(event), | ||
view: toViewWithLocalDates(_view) | ||
}); | ||
} | ||
return Array.isArray(eventClassNames) ? eventClassNames : [eventClassNames]; | ||
} | ||
return []; | ||
} | ||
export function toEventWithLocalDates(event) { | ||
return _cloneEvent(event, toLocalDate); | ||
} | ||
export function cloneEvent(event) { | ||
return _cloneEvent(event, cloneDate); | ||
} | ||
function _cloneEvent(event, dateFn) { | ||
event = assign({}, event); | ||
event.start = dateFn(event.start); | ||
event.end = dateFn(event.end); | ||
return event; | ||
} | ||
/** | ||
@@ -212,0 +219,0 @@ * Check whether the event intersects with the given date range and resource |
@@ -23,2 +23,3 @@ import {assign, createDate, createDuration, keys, setMidnight, createEvents, createEventSources} from '../lib.js'; | ||
events: [], | ||
eventAllUpdated: undefined, | ||
eventBackgroundColor: undefined, | ||
@@ -25,0 +26,0 @@ eventTextColor: undefined, |
@@ -35,3 +35,5 @@ import {get, writable} from 'svelte/store'; | ||
// Private stores | ||
this._queue = writable(new Map()); // debounce queue | ||
this._queue = writable(new Map()); // debounce queue (beforeUpdate) | ||
this._queue2 = writable(new Map()); // debounce queue (afterUpdate) | ||
this._tasks = new Map(); // timeout IDs for tasks | ||
this._auxiliary = writable([]); // auxiliary components | ||
@@ -38,0 +40,0 @@ this._dayGrid = dayGrid(this); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
202180
3848
2776