all files / renderer/ event-marker.js

95.93% Statements 118/123
94.34% Branches 100/106
100% Functions 11/11
95.93% Lines 118/123
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 2011×   1× 1× 1× 870× 870× 870×   1× 988× 236× 189×     189× 189×   236× 236×     752×     1× 774× 1× 1×     1× 236× 236× 236× 236× 236× 236× 236× 304× 301× 301× 301× 301× 19×     282× 282×     301× 295×   301× 301× 301× 301× 301× 300×   301× 301×     301× 301×     301× 301× 10×     291×   301×       301× 286×     286× 286× 286× 284×   286× 10×     276×   286× 286× 286×     286×     286×       286×   286×   301× 204×   301× 301×         301×     236×   1× 302× 282× 2×       280× 1×   279×   20×       20×     20×   1× 296× 15×   281× 279×   2× 2× 2× 2× 2× 2×   1× 297× 297× 297× 297× 1× 1× 1×   296×           296× 296× 296×   297×   1× 296×       296×     296×   1× 1004× 237×     1×   1×    
define(["require", "exports", "@syncfusion/ej2-base", "../base/css-constants"], function (require, exports, ej2_base_1, cls) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var EventMarker = (function () {
        function EventMarker(gantt) {
            this.ISO_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}/;
            this.parent = gantt;
            this.eventMarkersContainer = null;
        }
        EventMarker.prototype.renderEventMarkers = function () {
            if (this.parent.eventMarkers && this.parent.eventMarkers.length > 0) {
                if (!this.parent.ganttChartModule.chartBodyContent.contains(this.eventMarkersContainer)) {
                    this.eventMarkersContainer = ej2_base_1.createElement('div', {
                        className: cls.eventMarkersContainer
                    });
                    this.eventMarkersContainer.setAttribute('role', 'term');
                    this.parent.ganttChartModule.chartBodyContent.appendChild(this.eventMarkersContainer);
                }
                this.eventMarkersContainer.innerHTML = '';
                this.getEventMarkersElements(this.eventMarkersContainer);
            }
            else {
                this.removeContainer();
            }
        };
        EventMarker.prototype.removeContainer = function () {
            if (this.eventMarkersContainer) {
                ej2_base_1.remove(this.eventMarkersContainer);
                this.eventMarkersContainer = null;
            }
        };
        EventMarker.prototype.getEventMarkersElements = function (container) {
            var left;
            var eventMarkerElement;
            var spanElement;
            var rightArrow;
            var top;
            var eventMarkerCollection = [];
            for (var i = 0; i < this.parent.eventMarkers.length; i++) {
                if (!ej2_base_1.isNullOrUndefined(this.parent.eventMarkers[i].day)) {
                    var updatedDate = void 0;
                    var eventMarkerDate = this.parent.eventMarkers[i].day;
                    this.parent['isFromEventMarker'] = true;
                    if (eventMarkerDate instanceof Date) {
                        updatedDate = new Date(eventMarkerDate.getTime());
                    }
                    else {
                        var dateObject = this.parent.globalize.parseDate(eventMarkerDate, { format: this.parent.getDateFormat(), type: 'dateTime' });
                        updatedDate = ej2_base_1.isNullOrUndefined(dateObject) &&
                            !isNaN(new Date(eventMarkerDate).getTime()) ? new Date(eventMarkerDate) : dateObject;
                    }
                    if (this.isDateOnlyInput(eventMarkerDate, updatedDate) && !this.hasExplicitTime(eventMarkerDate)) {
                        updatedDate = this.normalizeToTimezone(updatedDate);
                    }
                    var formattedEventMarkerDate = updatedDate;
                    left = this.parent.dataOperation.getTaskLeft(formattedEventMarkerDate, false, this.parent.defaultCalendarContext, true);
                    top = this.parent.eventMarkers[i]['properties'].top;
                    var heightException = true;
                    if (this.parent.ganttHeight) {
                        heightException = parseFloat(top) <= (this.parent.ganttHeight - 155);
                    }
                    var markerTop = (top && parseFloat(top) >= 0 && heightException && top.includes('px')) ? top : '50px';
                    Iif (!top && document.body.className.includes('e-bigger')) {
                        markerTop = parseFloat(markerTop) + 15 + "px";
                    }
                    this.parent['isFromEventMarker'] = false;
                    eventMarkerCollection.push({ id: i, left: left, label: this.parent.eventMarkers[i].label,
                        date: formattedEventMarkerDate,
                        top: markerTop });
                    var align = void 0;
                    if (this.parent.enableRtl) {
                        align = "right:" + left + "px;";
                    }
                    else {
                        align = "left:" + left + "px;";
                    }
                    eventMarkerElement = ej2_base_1.createElement('div', {
                        className: cls.eventMarkersChild, styles: align + "  height:100%;",
                        id: 'stripline' + i
                    });
                    if (this.parent.eventMarkers[i].label) {
                        spanElement = ej2_base_1.createElement('div', {
                            className: cls.eventMarkersSpan
                        });
                        var property = this.parent.disableHtmlEncode ? 'textContent' : 'innerHTML';
                        spanElement[property] = this.parent.eventMarkers[i].label;
                        if (this.parent.enableHtmlSanitizer && typeof (spanElement[property]) === 'string') {
                            spanElement[property] = ej2_base_1.SanitizeHtmlHelper.sanitize(spanElement[property]);
                        }
                        if (this.parent.enableRtl) {
                            spanElement.style.right = '5px';
                        }
                        else {
                            spanElement.style.left = '5px';
                        }
                        spanElement.style.setProperty('top', markerTop, 'important');
                        eventMarkerElement.appendChild(spanElement);
                        rightArrow = ej2_base_1.createElement('div', {
                            className: 'e-gantt-right-arrow'
                        });
                        var rightArrowTop = parseFloat(spanElement.style.top) < 10
                            ? parseFloat(spanElement.style.top) - 1
                            : parseFloat(spanElement.style.top);
                        Iif (document.body.className.includes('e-bigger')) {
                            rightArrow.style.setProperty('top', rightArrowTop + 8 + "px", 'important');
                        }
                        else {
                            rightArrow.style.setProperty('top', rightArrowTop + 10 + "px", 'important');
                        }
                        eventMarkerElement.appendChild(rightArrow);
                    }
                    if (this.parent.eventMarkers[i].cssClass) {
                        eventMarkerElement.classList.add(this.parent.eventMarkers[i].cssClass);
                    }
                    eventMarkerElement.setAttribute('tabindex', '-1');
                    eventMarkerElement.setAttribute('aria-label', this.parent.localeObj.getConstant('eventMarkers') + ' '
                        + (typeof this.parent.eventMarkers[i].day === 'string' ?
                            this.parent.eventMarkers[i].day :
                            this.parent.getFormatedDate(this.parent.eventMarkers[i].day))
                        + ' ' + this.parent.eventMarkers[i].label);
                    container.appendChild(eventMarkerElement);
                }
            }
            this.parent.eventMarkerColloction = eventMarkerCollection;
        };
        EventMarker.prototype.isDateOnlyInput = function (input, dateObj) {
            if (typeof input === 'string') {
                if (input.includes('T')) {
                    return (dateObj.getUTCHours() === 0 &&
                        dateObj.getUTCMinutes() === 0 &&
                        dateObj.getUTCSeconds() === 0);
                }
                if (input.includes(':')) {
                    return false;
                }
                return true;
            }
            var isLocalMidnight = (dateObj.getHours() === 0 &&
                dateObj.getMinutes() === 0 &&
                dateObj.getSeconds() === 0 &&
                dateObj.getMilliseconds() === 0);
            var isUTCMidnight = (dateObj.getUTCHours() === 0 &&
                dateObj.getUTCMinutes() === 0 &&
                dateObj.getUTCSeconds() === 0);
            return isLocalMidnight || isUTCMidnight;
        };
        EventMarker.prototype.hasExplicitTime = function (input) {
            if (typeof input !== 'string') {
                return false;
            }
            if (!input.includes(':')) {
                return false;
            }
            var timePart = input.split(/T|\s/)[1];
            var _a = timePart.split(':'), _b = _a[0], hour = _b === void 0 ? '0' : _b, _c = _a[1], minute = _c === void 0 ? '0' : _c, _d = _a[2], second = _d === void 0 ? '0' : _d;
            var hours = parseInt(hour, 10) || 0;
            var minutes = parseInt(minute, 10) || 0;
            var seconds = parseInt(second, 10) || 0;
            return !(hours === 0 && minutes === 0 && seconds === 0);
        };
        EventMarker.prototype.normalizeToTimezone = function (date, input) {
            var year;
            var month;
            var day;
            if (typeof input === 'string' && this.ISO_DATE_PATTERN.test(input)) {
                year = date.getUTCFullYear();
                month = date.getUTCMonth();
                day = date.getUTCDate();
            }
            else Iif (this.isISODateObject(date)) {
                year = date.getUTCFullYear();
                month = date.getUTCMonth();
                day = date.getUTCDate();
            }
            else {
                year = date.getFullYear();
                month = date.getMonth();
                day = date.getDate();
            }
            return new Date(year, month, day, 0, 0, 0, 0);
        };
        EventMarker.prototype.isISODateObject = function (date) {
            var isUTCMidnight = (date.getUTCHours() === 0 &&
                date.getUTCMinutes() === 0 &&
                date.getUTCSeconds() === 0 &&
                date.getUTCMilliseconds() === 0);
            var isLocalNotMidnight = !(date.getHours() === 0 &&
                date.getMinutes() === 0 &&
                date.getSeconds() === 0);
            return isUTCMidnight && isLocalNotMidnight;
        };
        EventMarker.prototype.updateContainerHeight = function () {
            if (this.eventMarkersContainer) {
                this.eventMarkersContainer.style.height = ej2_base_1.formatUnit(this.parent.getContentHeight());
            }
        };
        return EventMarker;
    }());
    exports.EventMarker = EventMarker;
});