devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
260 lines (255 loc) • 10.1 kB
JavaScript
/**
* DevExtreme (ui/scheduler/ui.scheduler.appointment.js)
* Version: 20.1.7
* Build date: Tue Aug 25 2020
*
* Copyright (c) 2012 - 2020 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
"use strict";
function _typeof(obj) {
"@babel/helpers - typeof";
if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
_typeof = function(obj) {
return typeof obj
}
} else {
_typeof = function(obj) {
return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
}
}
return _typeof(obj)
}
var _renderer = require("../../core/renderer");
var _renderer2 = _interopRequireDefault(_renderer);
var _events_engine = require("../../events/core/events_engine");
var _events_engine2 = _interopRequireDefault(_events_engine);
var _translator = require("../../animation/translator");
var _translator2 = _interopRequireDefault(_translator);
var _utils = require("./utils.recurrence");
var _utils2 = _interopRequireDefault(_utils);
var _extend = require("../../core/utils/extend");
var _component_registrator = require("../../core/component_registrator");
var _component_registrator2 = _interopRequireDefault(_component_registrator);
var _ui = require("../tooltip/ui.tooltip");
var _ui2 = _interopRequireDefault(_ui);
var _uiScheduler = require("./ui.scheduler.publisher_mixin");
var _uiScheduler2 = _interopRequireDefault(_uiScheduler);
var _utils3 = require("../../events/utils");
var eventUtils = _interopRequireWildcard(_utils3);
var _pointer = require("../../events/pointer");
var _pointer2 = _interopRequireDefault(_pointer);
var _dom_component = require("../../core/dom_component");
var _dom_component2 = _interopRequireDefault(_dom_component);
var _resizable = require("../resizable");
var _resizable2 = _interopRequireDefault(_resizable);
var _message = require("../../localization/message");
var _message2 = _interopRequireDefault(_message);
var _date = require("../../localization/date");
var _date2 = _interopRequireDefault(_date);
var _constants = require("./constants");
function _getRequireWildcardCache() {
if ("function" !== typeof WeakMap) {
return null
}
var cache = new WeakMap;
_getRequireWildcardCache = function() {
return cache
};
return cache
}
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj
}
if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
return {
"default": obj
}
}
var cache = _getRequireWildcardCache();
if (cache && cache.has(obj)) {
return cache.get(obj)
}
var newObj = {};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc)
} else {
newObj[key] = obj[key]
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj)
}
return newObj
}
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
"default": obj
}
}
var DEFAULT_HORIZONTAL_HANDLES = "left right";
var DEFAULT_VERTICAL_HANDLES = "top bottom";
var REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME = eventUtils.addNamespace(_pointer2.default.enter, "dxSchedulerAppointment");
var REDUCED_APPOINTMENT_POINTERLEAVE_EVENT_NAME = eventUtils.addNamespace(_pointer2.default.leave, "dxSchedulerAppointment");
var Appointment = _dom_component2.default.inherit({
_getDefaultOptions: function() {
return (0, _extend.extend)(this.callBase(), {
data: {},
geometry: {
top: 0,
left: 0,
width: 0,
height: 0
},
allowDrag: true,
allowResize: true,
reduced: null,
isCompact: false,
direction: "vertical",
resizableConfig: {},
cellHeight: 0,
cellWidth: 0
})
},
_optionChanged: function(args) {
switch (args.name) {
case "data":
case "geometry":
case "allowDrag":
case "allowResize":
case "reduced":
case "sortedIndex":
case "isCompact":
case "direction":
case "resizableConfig":
case "cellHeight":
case "cellWidth":
this._invalidate();
break;
default:
this.callBase(args)
}
},
_getHorizontalResizingRule: function() {
var reducedHandles = {
head: this.option("rtlEnabled") ? "right" : "left",
body: "",
tail: this.option("rtlEnabled") ? "left" : "right"
};
return {
handles: this.option("reduced") ? reducedHandles[this.option("reduced")] : DEFAULT_HORIZONTAL_HANDLES,
minHeight: 0,
minWidth: this.invoke("getCellWidth"),
step: this.invoke("getResizableStep")
}
},
_getVerticalResizingRule: function() {
var height = this.invoke("getCellHeight");
return {
handles: DEFAULT_VERTICAL_HANDLES,
minWidth: 0,
minHeight: height,
step: height
}
},
_render: function() {
this.callBase();
this._renderAppointmentGeometry();
this._renderEmptyClass();
this._renderReducedAppointment();
this._renderAllDayClass();
this._renderDirection();
this.$element().data("dxAppointmentStartDate", this.option("startDate"));
this.$element().attr("title", this.invoke("getField", "text", this.option("data")));
this.$element().attr("role", "button");
this._renderRecurrenceClass();
this._renderResizable()
},
_renderAppointmentGeometry: function() {
var geometry = this.option("geometry");
var $element = this.$element();
_translator2.default.move($element, {
top: geometry.top,
left: geometry.left
});
$element.css({
width: geometry.width < 0 ? 0 : geometry.width,
height: geometry.height < 0 ? 0 : geometry.height
})
},
_renderEmptyClass: function() {
var geometry = this.option("geometry");
if (geometry.empty || this.option("isCompact")) {
this.$element().addClass(_constants.EMPTY_APPOINTMENT_CLASS)
}
},
_renderReducedAppointment: function() {
var reducedPart = this.option("reduced");
if (!reducedPart) {
return
}
this.$element().toggleClass(_constants.REDUCED_APPOINTMENT_CLASS, true).toggleClass(_constants.REDUCED_APPOINTMENT_PARTS_CLASSES[reducedPart], true);
this._renderAppointmentReducedIcon()
},
_renderAppointmentReducedIcon: function() {
var $icon = (0, _renderer2.default)("<div>").addClass(_constants.REDUCED_APPOINTMENT_ICON).appendTo(this.$element());
var endDate = this._getEndDate();
var tooltipLabel = _message2.default.format("dxScheduler-editorLabelEndDate");
var tooltipText = [tooltipLabel, ": ", _date2.default.format(endDate, "monthAndDay"), ", ", _date2.default.format(endDate, "year")].join("");
_events_engine2.default.off($icon, REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME);
_events_engine2.default.on($icon, REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME, function() {
_ui2.default.show({
target: $icon,
content: tooltipText
})
});
_events_engine2.default.off($icon, REDUCED_APPOINTMENT_POINTERLEAVE_EVENT_NAME);
_events_engine2.default.on($icon, REDUCED_APPOINTMENT_POINTERLEAVE_EVENT_NAME, function() {
_ui2.default.hide()
})
},
_getEndDate: function() {
var result = this.invoke("getField", "endDate", this.option("data"));
if (result) {
return new Date(result)
}
return result
},
_renderAllDayClass: function() {
this.$element().toggleClass(_constants.ALL_DAY_APPOINTMENT_CLASS, !!this.option("allDay"))
},
_renderRecurrenceClass: function() {
var rule = this.invoke("getField", "recurrenceRule", this.option("data"));
if (_utils2.default.getRecurrenceRule(rule).isValid) {
this.$element().addClass(_constants.RECURRENCE_APPOINTMENT_CLASS)
}
},
_renderDirection: function() {
this.$element().addClass(_constants.DIRECTION_APPOINTMENT_CLASSES[this.option("direction")])
},
_createResizingConfig: function() {
var config = "vertical" === this.option("direction") ? this._getVerticalResizingRule() : this._getHorizontalResizingRule();
config.roundStepValue = true;
if (!this.invoke("isGroupedByDate")) {
config.stepPrecision = "strict"
}
return config
},
_renderResizable: function() {
if (this.option("allowResize")) {
this._createComponent(this.$element(), _resizable2.default, (0, _extend.extend)(this._createResizingConfig(), this.option("resizableConfig")))
}
},
_useTemplates: function() {
return false
}
}).include(_uiScheduler2.default);
(0, _component_registrator2.default)("dxSchedulerAppointment", Appointment);
module.exports = Appointment;