@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
642 lines (496 loc) • 19.4 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__) {
__webpack_require__(993);
module.exports = __webpack_require__(993);
/***/ }),
/***/ 3:
/***/ (function(module, exports) {
module.exports = function() { throw new Error("define cannot be used indirect"); };
/***/ }),
/***/ 19:
/***/ (function(module, exports) {
module.exports = require("../kendo.core");
/***/ }),
/***/ 993:
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/***********************************************************************
* WARNING: this file is auto-generated. If you change it directly,
* your modifications will eventually be lost. The source code is in
* `kendo-ooxml` repository, you should make your changes there and
* run `src-modules/sync.sh` in this repository.
*/
(function(f, define){
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
__webpack_require__(19)
], __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(){
(function ($) {
window.kendo.excel = window.kendo.excel || {};
var getter = kendo.getter;
var map = $.map;
var current = {
compile: function(template) {
return template;
}
};
var TemplateService = kendo.Class.extend({
});
TemplateService.register = function(userImplementation) {
current = userImplementation;
};
TemplateService.compile = function(template) {
return current.compile(template);
};
function defaultGroupHeaderTemplate(data) {
return ((data.title) + ": " + (data.value));
}
function createArray(length, callback) {
var result = [];
for (var idx = 0; idx < length; idx++) {
result.push(callback(idx));
}
return result;
}
var ExcelExporter = kendo.Class.extend({
init: function(options) {
options.columns = this._trimColumns(options.columns || []);
this.allColumns = map(this._leafColumns(options.columns || []), this._prepareColumn);
this.columns = this.allColumns.filter(function(column) { return !column.hidden; });
this.options = options;
this.data = options.data || [];
this.aggregates = options.aggregates || {};
this.groups = [].concat(options.groups || []);
this.hierarchy = options.hierarchy;
},
workbook: function() {
var workbook = {
sheets: [ {
columns: this._columns(),
rows: this.hierarchy ? this._hierarchyRows() : this._rows(),
freezePane: this._freezePane(),
filter: this._filter()
} ]
};
return workbook;
},
_trimColumns: function(columns) {
var this$1 = this;
return columns.filter(function (column) {
var result = Boolean(column.field);
if (!result && column.columns) {
result = this$1._trimColumns(column.columns).length > 0;
}
return result;
});
},
_leafColumns: function(columns) {
var this$1 = this;
var result = [];
for (var idx = 0; idx < columns.length; idx++) {
if (!columns[idx].columns) {
result.push(columns[idx]);
} else {
result = result.concat(this$1._leafColumns(columns[idx].columns));
}
}
return result;
},
_prepareColumn: function(column) {
if (!column.field) {
return null;
}
var value = function(dataItem) {
return getter(column.field, true)(dataItem);
};
var values = null;
if (column.values) {
values = {};
column.values.forEach(function(item) {
values[item.value] = item.text;
});
value = function(dataItem) {
return values[getter(column.field, true)(dataItem)];
};
}
return $.extend({}, column, {
value: value,
values: values,
groupHeaderTemplate: column.groupHeaderTemplate ? TemplateService.compile(column.groupHeaderTemplate) : defaultGroupHeaderTemplate,
groupFooterTemplate: column.groupFooterTemplate ? TemplateService.compile(column.groupFooterTemplate) : null,
footerTemplate: column.footerTemplate ? TemplateService.compile(column.footerTemplate) : null
});
},
_filter: function() {
if (!this.options.filterable) {
return null;
}
var depth = this._depth();
return {
from: depth,
to: depth + this.columns.length - 1
};
},
_createPaddingCells: function(length) {
var this$1 = this;
return createArray(length, function () { return $.extend({
background: "#dfdfdf",
color: "#333"
}, this$1.options.paddingCellOptions); });
},
_dataRow: function(dataItem, level, depth) {
var this$1 = this;
var cells = this._createPaddingCells(level);
// grouped
if (depth && dataItem.items) {
var column = this.allColumns.filter(function(column) {
return column.field === dataItem.field;
})[0];
var title = column && column.title ? column.title : dataItem.field;
var template = column ? column.groupHeaderTemplate : null;
var group = $.extend({
title: title,
field: dataItem.field,
value: column && column.values ? column.values[dataItem.value] : dataItem.value,
aggregates: dataItem.aggregates,
items: dataItem.items
}, dataItem.aggregates[dataItem.field]);
var value = title + ": " + (dataItem.value);
if (template) {
value = template(group);
}
cells.push($.extend({
value: value,
background: "#dfdfdf",
color: "#333",
colSpan: this.columns.length + depth - level
}, (column || {}).groupHeaderCellOptions));
var rows = this._dataRows(dataItem.items, level + 1);
rows.unshift({
type: "group-header",
cells: cells,
level: this.options.collapsible ? level : null
});
return rows.concat(this._footer(dataItem, level));
}
var dataCells = [];
for (var cellIdx = 0; cellIdx < this.columns.length; cellIdx++) {
dataCells[cellIdx] = this$1._cell(dataItem, this$1.columns[cellIdx]);
}
if (this.hierarchy) {
dataCells[0].colSpan = depth - level + 1;
}
return [ {
type: "data",
cells: cells.concat(dataCells),
level: this.options.collapsible ? level : null
} ];
},
_dataRows: function(dataItems, level) {
var this$1 = this;
var depth = this._depth();
var rows = [];
for (var idx = 0; idx < dataItems.length; idx++) {
rows.push.apply(rows, this$1._dataRow(dataItems[idx], level, depth));
}
return rows;
},
_hierarchyRows: function() {
var this$1 = this;
var depth = this._depth();
var data = this.data;
var itemLevel = this.hierarchy.itemLevel;
var hasFooter = this._hasFooterTemplate();
var rows = [];
var parents = [];
var previousLevel = 0;
var previousItemId;
for (var idx = 0; idx < data.length; idx++) {
var item = data[idx];
var level = itemLevel(item);
if (hasFooter) {
if (level > previousLevel) {
parents.push({ id: previousItemId, level: previousLevel });
} else if (level < previousLevel) {
rows.push.apply(rows, this$1._hierarchyFooterRows(parents, level, depth));
}
previousLevel = level;
previousItemId = item.id;
}
rows.push.apply(rows, this$1._dataRow(item, level + 1, depth));
}
if (hasFooter) {
rows.push.apply(rows, this._hierarchyFooterRows(parents, 0, depth));
var rootAggregate = data.length ? this.aggregates[data[0].parentId] : {};
rows.push(this._hierarchyFooter(rootAggregate, 0, depth));
}
this._prependHeaderRows(rows);
return rows;
},
_hierarchyFooterRows: function(parents, currentLevel, depth) {
var this$1 = this;
var rows = [];
while (parents.length && parents[parents.length - 1].level >= currentLevel) {
var parent = parents.pop();
rows.push(this$1._hierarchyFooter(this$1.aggregates[parent.id], parent.level + 1, depth));
}
return rows;
},
_hasFooterTemplate: function() {
var columns = this.columns;
for (var idx = 0; idx < columns.length; idx++) {
if (columns[idx].footerTemplate) {
return true;
}
}
},
_hierarchyFooter: function(aggregates, level, depth) {
var cells = this.columns.map(function(column, index) {
var colSpan = index ? 1 : depth - level + 1;
if (column.footerTemplate) {
return $.extend({
background: "#dfdfdf",
color: "#333",
colSpan: colSpan,
value: column.footerTemplate($.extend({}, (aggregates || {})[column.field]))
}, column.footerCellOptions);
}
return $.extend({
background: "#dfdfdf",
color: "#333",
colSpan: colSpan
}, column.footerCellOptions);
});
return {
type: "footer",
cells: this._createPaddingCells(level).concat(cells)
};
},
_footer: function(dataItem, level) {
var rows = [];
var footer = this.columns.some(function (column) { return column.groupFooterTemplate; });
var templateData, group;
if (footer) {
group = {
group: { items: dataItem.items,
field: dataItem.field,
value: dataItem.value }
};
templateData = {};
Object.keys(dataItem.aggregates).forEach(function (key) {
templateData[key] = $.extend({}, dataItem.aggregates[key], group);
});
}
var cells = this.columns.map(function (column) {
if (column.groupFooterTemplate) {
var data = $.extend({}, templateData, dataItem.aggregates[column.field], group);
return $.extend({
background: "#dfdfdf",
color: "#333",
value: column.groupFooterTemplate(data)
}, column.groupFooterCellOptions);
}
return $.extend({
background: "#dfdfdf",
color: "#333"
}, column.groupFooterCellOptions);
});
if (footer) {
rows.push({
type: "group-footer",
cells: this._createPaddingCells(this.groups.length).concat(cells),
level: this.options.collapsible ? level : null
});
}
return rows;
},
_isColumnVisible: function(column) {
return this._visibleColumns([ column ]).length > 0 && (column.field || column.columns);
},
_visibleColumns: function(columns) {
var this$1 = this;
return columns.filter(function (column) {
var result = !column.hidden;
if (result && column.columns) {
result = this$1._visibleColumns(column.columns).length > 0;
}
return result;
});
},
_headerRow: function(row, groups) {
var this$1 = this;
var headers = row.cells.map(function(cell) {
return $.extend(cell, {
colSpan: cell.colSpan > 1 ? cell.colSpan : 1,
rowSpan: row.rowSpan > 1 && !cell.colSpan ? row.rowSpan : 1
});
});
if (this.hierarchy) {
headers[0].colSpan = this._depth() + 1;
}
return {
type: "header",
cells: createArray(groups.length, function () { return $.extend({
background: "#7a7a7a",
color: "#fff"
}, this$1.options.headerPaddingCellOptions); }).concat(headers)
};
},
_prependHeaderRows: function(rows) {
var this$1 = this;
var groups = this.groups;
var headerRows = [ { rowSpan: 1, cells: [], index: 0 } ];
this._prepareHeaderRows(headerRows, this.options.columns);
for (var idx = headerRows.length - 1; idx >= 0; idx--) {
rows.unshift(this$1._headerRow(headerRows[idx], groups));
}
},
_prepareHeaderRows: function(rows, columns, parentCell, parentRow) {
var this$1 = this;
var row = parentRow || rows[rows.length - 1];
var childRow = rows[row.index + 1];
var totalColSpan = 0;
for (var idx = 0; idx < columns.length; idx++) {
var column = columns[idx];
if (this$1._isColumnVisible(column)) {
var cell = $.extend({
background: "#7a7a7a",
color: "#fff",
value: column.title || column.field,
colSpan: 0
}, column.headerCellOptions);
row.cells.push(cell);
if (column.columns && column.columns.length) {
if (!childRow) {
childRow = { rowSpan: 0, cells: [], index: rows.length };
rows.push(childRow);
}
cell.colSpan = this$1._trimColumns(this$1._visibleColumns(column.columns)).length;
this$1._prepareHeaderRows(rows, column.columns, cell, childRow);
totalColSpan += cell.colSpan - 1;
row.rowSpan = rows.length - row.index;
}
}
}
if (parentCell) {
parentCell.colSpan += totalColSpan;
}
},
_rows: function() {
var this$1 = this;
var rows = this._dataRows(this.data, 0);
if (this.columns.length) {
this._prependHeaderRows(rows);
var footer = false;
var cells = this.columns.map(function (column) {
if (column.footerTemplate) {
footer = true;
return $.extend({
background: "#dfdfdf",
color: "#333",
value: column.footerTemplate($.extend({}, this$1.aggregates, this$1.aggregates[column.field]))
}, column.footerCellOptions);
}
return $.extend({
background: "#dfdfdf",
color: "#333"
}, column.footerCellOptions);
});
if (footer) {
rows.push({
type: "footer",
cells: this._createPaddingCells(this.groups.length).concat(cells)
});
}
}
return rows;
},
_headerDepth: function(columns) {
var this$1 = this;
var result = 1;
var max = 0;
for (var idx = 0; idx < columns.length; idx++) {
if (columns[idx].columns) {
var temp = this$1._headerDepth(columns[idx].columns);
if (temp > max) {
max = temp;
}
}
}
return result + max;
},
_freezePane: function() {
var columns = this._visibleColumns(this.options.columns || []);
var colSplit = this._visibleColumns(this._trimColumns(this._leafColumns(columns.filter(function(column) {
return column.locked;
})))).length;
return {
rowSplit: this._headerDepth(columns),
colSplit: colSplit ? colSplit + this.groups.length : 0
};
},
_cell: function(dataItem, column) {
return $.extend({
value: column.value(dataItem)
}, column.cellOptions);
},
_depth: function() {
var depth = 0;
if (this.hierarchy) {
depth = this.hierarchy.depth;
} else {
depth = this.groups.length;
}
return depth;
},
_columns: function() {
var depth = this._depth();
var columns = createArray(depth, function () { return ({ width: 20 }); });
return columns.concat(this.columns.map(function(column) {
return {
width: parseInt(column.width, 10),
autoWidth: column.width ? false : true
};
}));
}
});
kendo.deepExtend(kendo.excel, {
ExcelExporter: ExcelExporter,
TemplateService: TemplateService
});
})(window.kendo.jQuery);
}, __webpack_require__(3));
/***/ })
/******/ });