tui-calendar
Version:
TOAST UI Calendar
105 lines (87 loc) • 2.69 kB
JavaScript
/**
* @fileoverview Allday event click event hander module
* @author NHN FE Development Lab <dl_javascript@nhn.com>
*/
;
var util = require('tui-code-snippet');
var config = require('../../config');
var domutil = require('../../common/domutil');
/**
* @constructor
* @implements {Handler}
* @mixes util.CustomEvents
* @param {Drag} [dragHandler] - Drag handler instance.
* @param {TimeGrid} [timeGridView] - TimeGrid view instance.
* @param {Base} [baseController] - Base controller instance.
*/
function TimeClick(dragHandler, timeGridView, baseController) {
/**
* @type {Drag}
*/
this.dragHandler = dragHandler;
/**
* @type {TimeGrid}
*/
this.timeGridView = timeGridView;
/**
* @type {Base}
*/
this.baseController = baseController;
dragHandler.on({
'click': this._onClick
}, this);
}
/**
* Destroy method
*/
TimeClick.prototype.destroy = function() {
this.dragHandler.off(this);
this.timeGridView = this.baseController = this.dragHandler = null;
};
/**
* Check target element is expected condition for activate this plugins.
* @param {HTMLElement} target - The element to check
* @returns {string} - model id
*/
TimeClick.prototype.checkExpectCondition = function(target) {
var container,
matches;
container = domutil.closest(target, config.classname('.time-date'));
if (!container) {
return false;
}
matches = domutil.getClass(container).match(config.time.getViewIDRegExp);
if (!matches || matches.length < 2) {
return false;
}
return util.pick(this.timeGridView.children.items, Number(matches[1]));
};
/**
* Click event hander
* @param {object} clickEvent - click event from {@link Drag}
* @emits TimeClick#clickEvent
*/
TimeClick.prototype._onClick = function(clickEvent) {
var self = this,
target = clickEvent.target,
timeView = this.checkExpectCondition(target),
blockElement = domutil.closest(target, config.classname('.time-date-schedule-block')),
schedulesCollection = this.baseController.schedules;
if (!timeView || !blockElement) {
return;
}
schedulesCollection.doWhenHas(domutil.getData(blockElement, 'id'), function(schedule) {
/**
* @events TimeClick#clickSchedule
* @type {object}
* @property {Schedule} schedule - schedule instance
* @property {MouseEvent} event - MouseEvent object
*/
self.fire('clickSchedule', {
schedule: schedule,
event: clickEvent.originEvent
});
});
};
util.CustomEvents.mixin(TimeClick);
module.exports = TimeClick;