@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
844 lines (673 loc) • 34.8 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ({
/***/ 0:
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(1282);
/***/ }),
/***/ 3:
/***/ (function(module, exports) {
module.exports = function() { throw new Error("define cannot be used indirect"); };
/***/ }),
/***/ 1278:
/***/ (function(module, exports) {
module.exports = require("./kendo.scheduler.view");
/***/ }),
/***/ 1282:
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1278) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
})(function(){
var __meta__ = { // jshint ignore:line
id: "scheduler.agendaview",
name: "Scheduler Agenda View",
category: "web",
description: "The Scheduler Agenda View",
depends: [ "scheduler.view" ],
hidden: true
};
(function($){
var kendo = window.kendo,
ui = kendo.ui,
NS = ".kendoAgendaView";
var EVENT_WRAPPER_FORMAT = '<div class="k-task" title="#:(data.title || "").replace(/"/g,"\'")#" data-#=kendo.ns#uid="#=uid#">' +
'# if (resources[0]) {#' +
'<span class="k-scheduler-mark" style="background-color:#=resources[0].color#"></span>' +
"# } #" +
"# if (data.isException()) { #" +
'<span class="k-icon k-i-non-recurrence"></span>' +
'# } else if (data.isRecurring()) {#' +
'<span class="k-icon k-i-reload"></span>' +
"# } #" +
'{0}' +
'#if (showDelete) {#' +
'<a href="\\#" class="k-link k-event-delete" title="${data.messages.destroy}" aria-label="${data.messages.destroy}"><span class="k-icon k-i-close"></span></a>' +
'#}#' +
'</div>';
var AgendaGroupedView = kendo.Class.extend({
init: function(view) {
this._view = view;
},
_getColumns: function(groupHeaders, columns){
return groupHeaders.concat(columns);
},
_getGroupsInDay: function(){
return [];
},
_getSumOfItemsForDate: function(){
return 0;
},
_renderTaskGroupsCells: function(headerCells, groups, taskGroupIndex, taskIndex){
var view = this._view;
if (taskGroupIndex === 0 && taskIndex === 0 && groups.length) {
view._renderTaskGroupsCells(headerCells, groups);
}
},
_renderDateCell: function(tableRow, groups, tasks, date, taskGroupIndex, tasksGroups){
var view = this._view;
tableRow.push(kendo.format(
'<td class="k-scheduler-datecolumn{3}{2}" rowspan="{0}">{1}</td>',
tasks.length,
view._dateTemplate({ date: date }),
taskGroupIndex == tasksGroups.length - 1 && !groups.length ? " k-last" : "",
!groups.length ? " k-first" : ""
));
},
_renderDates: function (){
return undefined;
},
_getParents: function (parentGroups){
return parentGroups.splice(0);
},
_getGroupsByDate: function(){
return undefined;
},
_renderTaskGroups: function(table, items, parents){
var view = this._view;
table.append(view._renderTaskGroups(items, parents));
}
});
var AgendaGroupedByDateView = kendo.Class.extend({
init: function(view) {
this._view = view;
},
_getColumns: function(groupHeaders, columns){
var view = this._view;
if (view._isMobilePhoneView()) {
return groupHeaders.concat(columns);
} else {
var date = columns.slice(0, 1);
var columnsWithoutDate = columns.slice(1);
return date.concat(groupHeaders).concat(columnsWithoutDate);
}
},
_compareDateGroups: function(currentGroup, prevGroup, index){
if (currentGroup[index].text == prevGroup[index].text) {
if (index === 0) {
return true;
}else {
return this._compareDateGroups(currentGroup, prevGroup, index - 1);
}
}
return false;
},
_getGroupsInDay: function(tasksGroups, groups){
var groupsInDay = [];
var prevGroup = null;
for (var tasksGroupIdx = 0; tasksGroupIdx < tasksGroups.length; tasksGroupIdx++) {
for (var itemsIdx = 0; itemsIdx < tasksGroups[tasksGroupIdx].items.length; itemsIdx++) {
var idx = 0;
if (groupsInDay.length === 0) {
for (idx; idx < groups[tasksGroupIdx].length; idx++) {
groupsInDay.push([1]);
}
} else {
for (idx; idx < groups[tasksGroupIdx].length; idx++) {
if (this._compareDateGroups(groups[tasksGroupIdx], prevGroup, idx)) {
groupsInDay[idx][groupsInDay[idx].length - 1]++;
} else {
var lastItemValue = groupsInDay[idx][groupsInDay[idx].length - 1] - 1;
for (var i = 0; i < lastItemValue; i++) {
groupsInDay[idx].push(0);
}
groupsInDay[idx].push(1);
}
}
}
prevGroup = groups[tasksGroupIdx];
}
}
return groupsInDay;
},
_getSumOfItemsForDate: function(tasksGroups){
var sumOfItemsForDate = 0;
for (var i = 0; i < tasksGroups.length; i++) {
sumOfItemsForDate += tasksGroups[i].items.length;
}
return sumOfItemsForDate;
},
_renderTaskGroupsCells: function(headerCells, groups, taskGroupIndex, taskIndex, groupsInDay, sumOfItemsForDate, date, groupsRowSpanIndex){
var view = this._view;
var isPhoneView = view._isMobilePhoneView();
if(!isPhoneView){
if (taskGroupIndex === 0 && taskIndex === 0 ) {
headerCells.push(kendo.format(
'<td class="k-scheduler-datecolumn k-first" rowspan="{0}">{1}</td>',
sumOfItemsForDate,
view._dateTemplate({ date: date })
));
}
for (var idx = 0; idx < groups[taskGroupIndex].length; idx++) {
if (groupsInDay[idx][groupsRowSpanIndex]) {
headerCells.push(kendo.format(
'<td class="k-scheduler-groupcolumn" rowspan="{0}">{1}</td>',
groupsInDay[idx][groupsRowSpanIndex],
view._groupTemplate({ value: groups[taskGroupIndex][idx].text }),
groups[taskGroupIndex][idx].className
));
}
}
}else{
if (taskGroupIndex === 0 && taskIndex === 0 && groups.length) {
view._renderTaskGroupsCells(headerCells, groups);
}
}
},
_renderDateCell: function(){
return undefined;
},
_renderDates: function(table){
var view = this._view;
var sortedArray = view._groupsByDate.sort(function(a, b) {
return a.array[0].value.getTime() - b.array[0].value.getTime();
});
for (var i = 0; i < sortedArray.length; i++) {
table.append(view._renderTaskGroups(sortedArray[i].array, sortedArray[i].groups));
}
},
_getParents: function(parentGroups){
return parentGroups.slice(0);
},
_getGroupsByDate: function(groups, idx, parents){
var view = this._view;
if (groups[idx].items) {
for (var taskGroupIndex = 0; taskGroupIndex < groups[idx].items.length; taskGroupIndex++) {
var date = groups[idx].items[taskGroupIndex].value;
var dateExists = false;
for (var i = 0; i < view._groupsByDate.length; i++) {
if (view._groupsByDate[i].array[0].value.getTime() === date.getTime()) {
dateExists = true;
view._groupsByDate[i].array.push(groups[idx].items[taskGroupIndex]);
view._groupsByDate[i].groups.push(parents);
}
}
if (!dateExists) {
view._groupsByDate.push({
array: [groups[idx].items[taskGroupIndex]],
groups: [parents]
});
}
}
}
},
_renderTaskGroups: function(){
return undefined;
}
});
kendo.ui.scheduler.AgendaGroupedView = AgendaGroupedView;
kendo.ui.scheduler.AgendaGroupedByDateView = AgendaGroupedByDateView;
ui.AgendaView = ui.SchedulerView.extend({
init: function(element, options) {
ui.SchedulerView.fn.init.call(this, element, options);
this._groupedView = this._getGroupedView();
options = this.options;
if (options.editable) {
options.editable = $.extend(
{ "delete": true },
options.editable,
{ create: false, update: false },
{ messages: options.messages }
);
}
this.title = options.title;
this._eventTemplate = this._eventTmpl(options.eventTemplate, EVENT_WRAPPER_FORMAT);
this._dateTemplate = kendo.template(options.eventDateTemplate);
this._groupTemplate = kendo.template(options.eventGroupTemplate);
this._timeTemplate = kendo.template(options.eventTimeTemplate);
this.element.on("mouseenter" + NS, ".k-scheduler-agenda .k-scheduler-content tr", "_mouseenter")
.on("mouseleave" + NS, ".k-scheduler-agenda .k-scheduler-content tr", "_mouseleave")
.on("click" + NS, ".k-scheduler-agenda .k-scheduler-content .k-link:has(.k-i-close)", "_remove");
this._renderLayout(options.date);
},
name: "agenda",
_getGroupedView: function() {
if (this._isGroupedByDate()) {
return new kendo.ui.scheduler.AgendaGroupedByDateView(this);
} else {
return new kendo.ui.scheduler.AgendaGroupedView(this);
}
},
_mouseenter: function(e) {
$(e.currentTarget).addClass("k-state-hover");
},
_mouseleave: function(e) {
$(e.currentTarget).removeClass("k-state-hover");
},
_remove: function(e) {
e.preventDefault();
this.trigger("remove", {
uid: $(e.currentTarget).closest(".k-task").attr(kendo.attr("uid"))
});
},
nextDate: function() {
return kendo.date.nextDay(this.startDate());
},
startDate: function() {
return this._startDate;
},
endDate: function() {
return this._endDate;
},
previousDate: function() {
return kendo.date.previousDay(this.startDate());
},
_renderLayout: function(date) {
this._startDate = date;
this._endDate = kendo.date.addDays(date, 7);
this.createLayout(this._layout());
this.table.addClass("k-scheduler-agenda");
},
_layout: function() {
var columns = [
{ text: this.options.messages.time, className: "k-scheduler-timecolumn" },
{ text: this.options.messages.event }
];
if (!this._isMobilePhoneView()) {
columns.splice(0, 0, { text: this.options.messages.date, className: "k-scheduler-datecolumn" });
}
var resources = this.groupedResources;
if (resources.length) {
var groupHeaders = [];
for (var idx = 0; idx < resources.length; idx++) {
groupHeaders.push({ text: "", className: "k-scheduler-groupcolumn"});
}
columns = this._groupedView._getColumns(groupHeaders, columns);
}
return {
columns: columns
};
},
_tasks: function(events) {
var tasks = [];
for (var idx = 0; idx < events.length; idx++) {
var event = events[idx];
var start = event.start;
var end = event.isAllDay ? kendo.date.getDate(event.end) : event.end;
var eventDurationInDays = Math.ceil((end - kendo.date.getDate(start)) / kendo.date.MS_PER_DAY);
if (event.isAllDay) {
eventDurationInDays += 1;
}
var task = event.clone();
task.startDate = kendo.date.getDate(start);
if (task.startDate >= this.startDate()) {
tasks.push(task);
}
if (eventDurationInDays > 1) {
task.end = kendo.date.nextDay(start);
task.head = true;
for (var day = 1; day < eventDurationInDays; day++) {
start = task.end;
task = event.clone();
task.start = task.startDate = kendo.date.getDate(start);
task.end = kendo.date.nextDay(start);
if (day == eventDurationInDays - 1) {
task.end = new Date(task.start.getFullYear(), task.start.getMonth(), task.start.getDate(), end.getHours(), end.getMinutes(), end.getSeconds(), end.getMilliseconds());
task.tail = true;
} else {
task.isAllDay = true;
task.middle = true;
}
if ((kendo.date.getDate(task.end) <= this.endDate() && task.start >= this.startDate()) || kendo.date.getDate(task.start).getTime() == this.endDate().getTime()) {
tasks.push(task);
}
}
}
}
return new kendo.data.Query(tasks).sort([{ field: "start", dir: "asc" },{ field: "end", dir: "asc" }]).groupBy({field: "startDate"}).toArray();
},
_renderTaskGroups: function(tasksGroups, groups) {
var tableRows = [];
var editable = this.options.editable;
var showDelete = editable && editable.destroy !== false && !this._isMobile();
var isPhoneView = this._isMobilePhoneView();
var sumOfItemsForDate = this._groupedView._getSumOfItemsForDate(tasksGroups);
var groupsInDay = this._groupedView._getGroupsInDay(tasksGroups, groups);
var groupsRowSpanIndex = 0;
for (var taskGroupIndex = 0; taskGroupIndex < tasksGroups.length; taskGroupIndex++) {
var date = tasksGroups[taskGroupIndex].value;
var tasks = tasksGroups[taskGroupIndex].items;
var today = kendo.date.isToday(date);
for (var taskIndex = 0; taskIndex < tasks.length; taskIndex++) {
var task = tasks[taskIndex];
var tableRow = [];
var headerCells = !isPhoneView ? tableRow : [];
this._groupedView._renderTaskGroupsCells(headerCells, groups, taskGroupIndex, taskIndex, groupsInDay, sumOfItemsForDate, date, groupsRowSpanIndex);
groupsRowSpanIndex++;
if (taskIndex === 0) {
if (isPhoneView) {
headerCells.push(kendo.format(
'<td class="k-scheduler-datecolumn" colspan="2">{0}</td>',
this._dateTemplate({ date: date })
));
tableRows.push('<tr role="row" aria-selected="false"' + (today ? ' class="k-today">' : ">") + headerCells.join("") + "</tr>");
} else {
this._groupedView._renderDateCell(tableRow, groups, tasks, date, taskGroupIndex, tasksGroups);
}
}
if (task.head) {
task.format = "{0:t}";
} else if (task.tail) {
task.format = "{1:t}";
} else {
task.format = "{0:t}-{1:t}";
}
task.resources = this.eventResources(task);
tableRow.push(kendo.format(
'<td class="k-scheduler-timecolumn"><div>{0}{1}{2}</div></td><td>{3}</td>',
task.tail || task.middle ? '<span class="k-icon k-i-arrow-60-left"></span>' : "",
this._timeTemplate(task.clone({ start: task._startTime || task.start, end: task.endTime || task.end })),
task.head || task.middle ? '<span class="k-icon k-i-arrow-60-right"></span>' : "",
this._eventTemplate(task.clone({ showDelete: showDelete, messages: this.options.messages }))
));
tableRows.push('<tr role="row" aria-selected="false"' + (today ? ' class="k-today">' : ">") + tableRow.join("") + "</tr>");
}
}
return tableRows.join("");
},
_renderTaskGroupsCells: function (headerCells, groups){
for (var idx = 0; idx < groups.length; idx++) {
headerCells.push(kendo.format(
'<td class="k-scheduler-groupcolumn{2}" rowspan="{0}">{1}</td>',
groups[idx].rowSpan,
this._groupTemplate({ value: groups[idx].text }),
groups[idx].className
));
}
},
render: function(events) {
var table = this.content.find("table").empty();
var groups = [];
if (events.length > 0) {
var resources = this.groupedResources;
if (resources.length) {
groups = this._createGroupConfiguration(events, resources, null);
this._groupsByDate = [];
this._renderGroups(groups, table, []);
this._groupedView._renderDates(table);
} else {
groups = this._tasks(events);
table.append(this._renderTaskGroups(groups, []));
}
}
var items = this._eventsList = flattenTaskGroups(groups);
this._angularItems(table, items);
this.refreshLayout();
this.trigger("activate");
},
_angularItems: function(table, items) {
this.angular("compile", function(){
var data = [], elements = items.map(function(item){
data.push({ dataItem: item });
return table.find(".k-task[" + kendo.attr("uid") + "=" + item.uid + "]");
});
return { elements: elements, data: data };
});
},
_renderGroups: function(groups, table, parentGroups) {
for (var idx = 0, length = groups.length; idx < length; idx++) {
var parents = this._groupedView._getParents(parentGroups);
parents.push(groups[idx]);
this._groupedView._getGroupsByDate(groups, idx, parents);
if (groups[idx].groups) {
this._renderGroups(groups[idx].groups, table, parents);
} else {
this._groupedView._renderTaskGroups(table, groups[idx].items, parents);
}
}
},
_createGroupConfiguration: function(events, resources, parent) {
var resource = resources[0];
var configuration = [];
var data = resource.dataSource.view();
var isPhoneView = this._isMobilePhoneView();
for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {
var value = resourceValue(resource, data[dataIndex]);
var tmp = new kendo.data.Query(events).filter({ field: resource.field, operator: ui.SchedulerView.groupEqFilter(value) }).toArray();
if (tmp.length) {
var tasks = this._tasks(tmp);
var className = parent ? "" : " k-first";
if (dataIndex === data.length - 1 && (!parent || parent.className.indexOf("k-last") > -1)) {
className += " k-last";
}
var obj = {
text: kendo.getter(resource.dataTextField)(data[dataIndex]),
value: value,
rowSpan: 0,
className: className
};
if (resources.length > 1) {
obj.groups = this._createGroupConfiguration(tmp, resources.slice(1), obj);
if (parent) {
parent.rowSpan += obj.rowSpan;
}
} else {
obj.items = tasks;
var span = rowSpan(obj.items);
if (isPhoneView) {
span += obj.items.length;
}
obj.rowSpan = span;
if (parent) {
parent.rowSpan += span;
}
}
configuration.push(obj);
}
}
return configuration;
},
selectionByElement: function(cell) {
var index, event;
cell = $(cell);
if (cell.hasClass("k-scheduler-datecolumn") || !this._eventsList.length) {
return;
}
if (cell.is(".k-task")) {
cell = cell.closest("td");
}
if (this._isMobile()) {
var parent = cell.parent();
index = parent.parent().children()
.filter(function() {
return $(this).children(":not(.k-scheduler-datecolumn)").length;
})
.index(parent);
} else {
index = cell.parent().index();
}
event = this._eventsList[index];
return {
index: index,
start: event.start,
end: event.end,
isAllDay: event.isAllDay,
uid: event.uid
};
},
select: function(selection) {
this.clearSelection();
var row = this.table
.find(".k-task")
.eq(selection.index)
.closest("tr")
.addClass("k-state-selected")
.attr("aria-selected", true)[0];
this.current(row);
},
move: function(selection, key) {
var handled = false;
var index = selection.index;
if (key == kendo.keys.UP) {
index --;
handled = true;
} else if (key == kendo.keys.DOWN) {
index ++;
handled = true;
}
if (handled) {
var event = this._eventsList[index];
if (event) {
selection.start = event.start;
selection.end = event.end;
selection.isAllDay = event.isAllDay;
selection.events = [ event.uid ];
selection.index = index;
}
}
return handled;
},
moveToEvent: function() {
return false;
},
constrainSelection: function(selection) {
var event = this._eventsList[0];
if (event) {
selection.start = event.start;
selection.end = event.end;
selection.isAllDay = event.isAllDay;
selection.events = [ event.uid ];
selection.index = 0;
}
},
isInRange: function() {
return true;
},
destroy: function(){
if (this.element) {
this.element.off(NS);
}
ui.SchedulerView.fn.destroy.call(this);
},
options: {
title: "Agenda",
name: "agenda",
editable: true,
selectedDateFormat: "{0:D}-{1:D}",
selectedShortDateFormat: "{0:d} - {1:d}",
eventTemplate: "#:title#",
eventTimeTemplate: "#if(data.isAllDay) {#" +
'#=this.options.messages.allDay#' +
"#} else { #" +
'#=kendo.format(format, start, end)#' +
"# } #",
eventDateTemplate: '<strong class="k-scheduler-agendaday">' +
'#=kendo.toString(date, "dd")#' +
'</strong>' +
'<em class="k-scheduler-agendaweek">' +
'#=kendo.toString(date,"dddd")#' +
'</em>' +
'<span class="k-scheduler-agendadate">' +
'#=kendo.toString(date, "y")#' +
'</span>',
eventGroupTemplate: '<strong class="k-scheduler-adgendagroup">' +
'#=value#' +
'</strong>',
messages: {
event: "Event",
date: "Date",
time: "Time",
allDay: "all day"
}
}
});
function rowSpan(tasks) {
var result = 0;
for (var idx = 0, length = tasks.length; idx < length; idx++) {
result += tasks[idx].items.length;
}
return result;
}
function resourceValue(resource, item) {
if (resource.valuePrimitive) {
item = kendo.getter(resource.dataValueField)(item);
}
return item;
}
function flattenTaskGroups(groups) {
var idx = 0,
length = groups.length,
item,
result = [];
for ( ; idx < length; idx ++) {
item = groups[idx];
if (item.groups) {
item = flattenGroup(item.groups);
result = result.concat(item);
} else {
result = result.concat(flattenGroup(item.items));
}
}
return result;
}
function flattenGroup(groups) {
var items = [].concat(groups),
item = items.shift(),
result = [],
push = [].push;
while (item) {
if (item.groups) {
push.apply(items, item.groups);
} else if (item.items) {
push.apply(items, item.items);
} else {
push.call(result, item);
}
item = items.shift();
}
return result;
}
})(window.kendo.jQuery);
return window.kendo;
}, __webpack_require__(3));
/***/ })
/******/ });