Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
var emptyCellsUntil = function (endCol) {
while (col < endCol) {
segsBelow = _this.getCellSegs(row, col, levelLimit);
if (segsBelow.length) {
td = cellMatrix[levelLimit - 1][col];
moreLink = _this.renderMoreLink(row, col, segsBelow);
moreWrap = createElement('div', null, moreLink);
td.appendChild(moreWrap);
moreNodes.push(moreWrap);
}
col++;
}
};
if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?
if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links?
td = cellMatrix[levelLimit - 1][leftCol] // the segment's parent cell
rowSpan = td.rowSpan || 1
segMoreNodes = []
// make a replacement for each column the segment occupies. will be one for each colspan
for (j = 0; j < colSegsBelow.length; j++) {
moreTd = createElement('td', { className: 'fc-more-cell', rowSpan }) as HTMLTableCellElement
segsBelow = colSegsBelow[j]
moreLink = this.renderMoreLink(
row,
leftCol + j,
[ seg ].concat(segsBelow) // count seg as hidden too
)
moreWrap = createElement('div', null, moreLink)
moreTd.appendChild(moreWrap)
segMoreNodes.push(moreTd)
moreNodes.push(moreTd)
}
td.classList.add('fc-limited')
insertAfterElement(td, segMoreNodes)
limitedNodes.push(td)
}
}
emptyCellsUntil(this.colCnt) // finish off the level
rowStruct.moreEls = moreNodes // for easy undoing later
rowStruct.limitedEls = limitedNodes // for easy undoing later
}
levelSegs = segLevels[i];
col = 0;
tr = document.createElement('tr');
segMatrix.push([]);
cellMatrix.push([]);
loneCellMatrix.push([]);
// levelCnt might be 1 even though there are no actual levels. protect against this.
// this single empty row is useful for styling.
if (levelSegs) {
for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level
seg = levelSegs[j];
var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
emptyCellsUntil(leftCol);
// create a container that occupies or more columns. append the event element.
td = createElement('td', { className: 'fc-event-container' }, seg.el);
if (leftCol !== rightCol) {
td.colSpan = rightCol - leftCol + 1;
}
else { // a single-column segment
loneCellMatrix[i][col] = td;
}
while (col <= rightCol) {
cellMatrix[i][col] = td;
segMatrix[i][col] = seg;
col++;
}
tr.appendChild(td);
}
}
emptyCellsUntil(colCnt); // finish off the row
var introHtml = dayGrid.renderProps.renderIntroHtml();
_renderSkeleton(context: ComponentContext) {
this.el.classList.add('fc-dayGrid-view')
this.el.innerHTML = this.renderSkeletonHtml()
this.scroller = new ScrollComponent(
'hidden', // overflow x
'auto' // overflow y
)
let dayGridContainerEl = this.scroller.el
this.el.querySelector('.fc-body > tr > td').appendChild(dayGridContainerEl)
dayGridContainerEl.classList.add('fc-day-grid-container')
let dayGridEl = createElement('div', { className: 'fc-day-grid' })
dayGridContainerEl.appendChild(dayGridEl)
this.dayGrid = new DayGrid(
dayGridEl,
{
renderNumberIntroHtml: this.renderDayGridNumberIntroHtml,
renderBgIntroHtml: this.renderDayGridBgIntroHtml,
renderIntroHtml: this.renderDayGridIntroHtml,
colWeekNumbersVisible: this.colWeekNumbersVisible,
cellWeekNumbersVisible: this.cellWeekNumbersVisible
}
)
}
buildDayHeaderRow(dayDate) {
let { theme, dateEnv, options } = this.context
let mainFormat = createFormatter(options.listDayFormat) // TODO: cache
let altFormat = createFormatter(options.listDayAltFormat) // TODO: cache
return createElement('tr', {
className: 'fc-list-heading',
'data-date': dateEnv.formatIso(dayDate, { omitTime: true })
}, '' +
(mainFormat ?
buildGotoAnchorHtml(
options,
dateEnv,
dayDate,
{ 'class': 'fc-list-heading-main' },
htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML
) :
'') +
(altFormat ?
TimeGrid.prototype.renderNowIndicator = function (segs, date) {
// HACK: if date columns not ready for some reason (scheduler)
if (!this.colContainerEls) {
return;
}
var top = this.computeDateTop(date);
var nodes = [];
var i;
// render lines within the columns
for (i = 0; i < segs.length; i++) {
var lineEl = createElement('div', { className: 'fc-now-indicator fc-now-indicator-line' });
lineEl.style.top = top + 'px';
this.colContainerEls[segs[i].col].appendChild(lineEl);
nodes.push(lineEl);
}
// render an arrow over the axis
if (segs.length > 0) { // is the current time in view?
var arrowEl = createElement('div', { className: 'fc-now-indicator fc-now-indicator-arrow' });
arrowEl.style.top = top + 'px';
this.contentSkeletonEl.appendChild(arrowEl);
nodes.push(arrowEl);
}
this.nowIndicatorEls = nodes;
};
TimeGrid.prototype.unrenderNowIndicator = function () {
render() {
let options = this.options
let el = this.el = createElement('div', {
className: 'fc-popover ' + (options.className || ''),
style: {
top: '0',
left: '0'
}
})
if (typeof options.content === 'function') {
options.content(el)
}
options.parentEl.appendChild(el)
// when a click happens on anything inside with a 'fc-close' className, hide the popover
listenBySelector(el, 'click', '.fc-close', (ev) => {
this.hide()
Popover.prototype.render = function () {
var _this = this;
var options = this.options;
var el = this.el = createElement('div', {
className: 'fc-popover ' + (options.className || ''),
style: {
top: '0',
left: '0'
}
});
if (typeof options.content === 'function') {
options.content(el);
}
options.parentEl.appendChild(el);
// when a click happens on anything inside with a 'fc-close' className, hide the popover
listenBySelector(el, 'click', '.fc-close', function (ev) {
_this.hide();
});
if (options.autoHide) {
document.addEventListener('mousedown', this.documentMousedown);
renderMoreLink(row, col, hiddenSegs) {
let { calendar, view, dateEnv, options, isRtl } = this.context
let a = createElement('a', { className: 'fc-more' })
a.innerText = this.getMoreLinkText(hiddenSegs.length)
a.addEventListener('click', (ev) => {
let clickOption = options.eventLimitClick
let _col = isRtl ? this.colCnt - col - 1 : col // HACK: props.cells has different dir system?
let date = this.props.cells[row][_col].date
let moreEl = ev.currentTarget as HTMLElement
let dayEl = this.getCellEl(row, col)
let allSegs = this.getCellSegs(row, col)
// rescope the segments to be within the cell's date
let reslicedAllSegs = this.resliceDaySegs(allSegs, date)
let reslicedHiddenSegs = this.resliceDaySegs(hiddenSegs, date)
if (typeof clickOption === 'function') {
// the returned value can be an atomic option
clickOption = calendar.publiclyTrigger('eventLimitClick', [