@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
559 lines (439 loc) • 22.6 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__(1536);
module.exports = __webpack_require__(1536);
/***/ }),
/***/ 3:
/***/ (function(module, exports) {
module.exports = function() { throw new Error("define cannot be used indirect"); };
/***/ }),
/***/ 19:
/***/ (function(module, exports) {
module.exports = require("../kendo.core");
/***/ }),
/***/ 1536:
/***/ (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__(19), __webpack_require__(1537) ], __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(kendo) {
if (kendo.support.browser.msie && kendo.support.browser.version < 9) {
return;
}
var $ = kendo.jQuery;
var outerWidth = kendo._outerWidth;
var DOT = ".";
var EMPTYCHAR = " ";
var sheetsBarClassNames = {
sheetsBarWrapper: "k-widget k-header",
sheetsBarSheetsWrapper: "k-tabstrip k-floatwrap k-tabstrip-bottom",
sheetsBarActive: "k-spreadsheet-sheets-bar-active",
sheetsBarInactive: "k-spreadsheet-sheets-bar-inactive",
sheetsBarAdd: "k-spreadsheet-sheets-bar-add",
sheetsBarRemove: "k-spreadsheet-sheets-remove",
sheetsBarItems: "k-spreadsheet-sheets-items",
sheetsBarEditor: "k-spreadsheet-sheets-editor",
sheetsBarScrollable: "k-tabstrip-scrollable",
sheetsBarNext: "k-tabstrip-next",
sheetsBarPrev: "k-tabstrip-prev",
sheetsBarKItem: "k-item k-state-default",
sheetsBarKActive: "k-state-active k-state-tab-on-top",
sheetsBarKTextbox: "k-textbox",
sheetsBarKLink: "k-link",
sheetsBarKIcon: "k-icon",
sheetsBarKFontIcon: "k-icon",
sheetsBarKButton: "k-button k-button-icon",
sheetsBarKButtonBare: "k-bare",
sheetsBarKArrowW: "k-i-arrow-60-left",
sheetsBarKArrowE: "k-i-arrow-60-right",
sheetsBarKReset: "k-reset k-tabstrip-items",
sheetsBarKIconX: "k-i-close",
sheetsBarKSprite: "k-sprite",
sheetsBarKIconPlus: "k-i-plus",
sheetsBarHintWrapper: "k-widget k-tabstrip k-tabstrip-bottom k-spreadsheet-sheets-items-hint",
sheetsBarKResetItems: "k-reset k-tabstrip-items"
};
var SheetsBar = kendo.ui.Widget.extend({
init: function(element, options) {
var classNames = SheetsBar.classNames;
kendo.ui.Widget.call(this, element, options);
element = this.element;
element.addClass(classNames.sheetsBarWrapper);
this._openDialog = options.openDialog;
this._tree = new kendo.dom.Tree(element[0]);
this._tree.render([this._addButton(), this._createSheetsWrapper([])]);
this._toggleScrollEvents(true);
this._createSortable();
this._sortable.bind("start", this._onSheetReorderStart.bind(this));
this._sortable.bind("end", this._onSheetReorderEnd.bind(this));
element.on("click", DOT + classNames.sheetsBarRemove, this._onSheetRemove.bind(this));
element.on("click", "li", this._onSheetSelect.bind(this));
element.on("dblclick", "li" + DOT + classNames.sheetsBarActive, this._createEditor.bind(this));
element.on("click", DOT + classNames.sheetsBarAdd, this._onAddSelect.bind(this));
},
options: {
name: "SheetsBar",
scrollable: {
distance: 200
}
},
events: [
"select",
"reorder",
"rename"
],
_createEditor: function () {
if (this._editor) {
return;
}
this._renderSheets(this._sheets, this._selectedIndex, true);
this._editor = this.element
.find(kendo.format("input{0}{1}",DOT,SheetsBar.classNames.sheetsBarEditor))
.focus()
.on("keydown", this._onEditorKeydown.bind(this))
.on("blur", this._onEditorBlur.bind(this));
},
_destroyEditor: function(canceled) {
var newSheetName = canceled ? null : this._editor.val();
this._editor.off();
this._editor = null;
this._renderSheets(this._sheets, this._selectedIndex, false);
this._onSheetRename(newSheetName);
},
renderSheets: function(sheets, selectedIndex) {
if (!sheets || selectedIndex < 0) {
return;
}
this._renderSheets(sheets, selectedIndex, false);
},
_renderSheets: function(sheets, selectedIndex, isInEditMode) {
var that = this;
var wrapperOffsetWidth;
var sheetsGroupScrollWidth;
var classNames = SheetsBar.classNames;
that._isRtl = kendo.support.isRtl(that.element);
that._sheets = sheets;
that._selectedIndex = selectedIndex;
that._renderHtml(isInEditMode, true);
if (!that._scrollableAllowed()) {
return;
}
var sheetsWrapper = that._sheetsWrapper();
var scrollPrevButton = sheetsWrapper.children(DOT + classNames.sheetsBarPrev);
var scrollNextButton = sheetsWrapper.children(DOT + classNames.sheetsBarNext);
var gapWidth = 2;
var addButton = that.element.find(DOT + classNames.sheetsBarAdd);
var addButtonWidth = outerWidth(addButton) + addButton.position().left + gapWidth;
var scrollPrevButtonWidth = outerWidth(scrollPrevButton) + gapWidth;
var sheetsGroup = that._sheetsGroup();
scrollPrevButton.css({ left: addButtonWidth });
sheetsWrapper.addClass(classNames.sheetsBarScrollable + EMPTYCHAR + classNames.sheetsBarSheetsWrapper);
sheetsGroup.css({ marginLeft: addButtonWidth });
wrapperOffsetWidth = sheetsWrapper[0].offsetWidth;
sheetsGroupScrollWidth = sheetsGroup[0].scrollWidth;
if (sheetsGroupScrollWidth + addButtonWidth > wrapperOffsetWidth) {
var scrollNextButtonRight = Math.ceil(kendo.parseFloat(scrollNextButton.css("right")));
if (!that._scrollableModeActive) {
that._nowScrollingSheets = false;
that._scrollableModeActive = true;
}
sheetsGroup.css({
marginLeft: scrollPrevButtonWidth + addButtonWidth,
marginRight: outerWidth(scrollNextButton) + scrollNextButtonRight + gapWidth
});
} else {
if (that._scrollableModeActive && sheetsGroupScrollWidth <= wrapperOffsetWidth) {
that._scrollableModeActive = false;
sheetsGroup.css({ marginLeft: addButtonWidth, marginRight: "" });
} else {
sheetsGroup.css({ marginLeft: addButtonWidth });
}
}
that._toggleScrollButtons();
},
_toggleScrollButtons: function (toggle) {
var that = this;
var ul = that._sheetsGroup();
var wrapper = that._sheetsWrapper();
var scrollLeft = ul.scrollLeft();
var prev = wrapper.find(DOT + SheetsBar.classNames.sheetsBarPrev);
var next = wrapper.find(DOT + SheetsBar.classNames.sheetsBarNext);
if (toggle === false) {
prev.toggle(false);
next.toggle(false);
} else {
prev.toggle(that._isRtl ? scrollLeft < ul[0].scrollWidth - ul[0].offsetWidth - 1 : scrollLeft !== 0);
next.toggle(that._isRtl ? scrollLeft !== 0 : scrollLeft < ul[0].scrollWidth - ul[0].offsetWidth - 1);
}
},
_toggleScrollEvents: function(toggle) {
var that = this;
var classNames = SheetsBar.classNames;
var options = that.options;
var scrollPrevButton;
var scrollNextButton;
var sheetsWrapper = that._sheetsWrapper();
scrollPrevButton = sheetsWrapper.children(DOT + classNames.sheetsBarPrev);
scrollNextButton = sheetsWrapper.children(DOT + classNames.sheetsBarNext);
if (toggle) {
scrollPrevButton.on("mousedown", function () {
that._nowScrollingSheets = true;
that._scrollSheetsByDelta(options.scrollable.distance * (that._isRtl ? 1 : -1));
});
scrollNextButton.on("mousedown", function () {
that._nowScrollingSheets = true;
that._scrollSheetsByDelta(options.scrollable.distance * (that._isRtl ? -1 : 1));
});
scrollPrevButton.add(scrollNextButton).on("mouseup", function () {
that._nowScrollingSheets = false;
});
} else {
scrollPrevButton.off();
scrollNextButton.off();
}
},
_renderHtml: function(isInEditMode, renderScrollButtons) {
var idx;
var sheetElements = [];
var dom = kendo.dom;
var element = dom.element;
var sheets = this._sheets;
var selectedIndex = this._selectedIndex;
var classNames = SheetsBar.classNames;
for (idx = 0; idx < sheets.length; idx++) {
var sheet = sheets[idx];
var isSelectedSheet = (idx === selectedIndex);
var attr = { className: classNames.sheetsBarKItem + EMPTYCHAR };
var elementContent = [];
if (isSelectedSheet) {
attr.className += classNames.sheetsBarKActive + EMPTYCHAR + classNames.sheetsBarActive;
} else {
attr.className += classNames.sheetsBarInactive;
}
if (isSelectedSheet && isInEditMode) {
elementContent.push(element("input", {
type: "text",
value: sheet.name(),
className: classNames.sheetsBarKTextbox + EMPTYCHAR + classNames.sheetsBarEditor,
maxlength: 50
}, []));
} else {
elementContent.push(element("span", {
className: classNames.sheetsBarKLink,
title: sheet.name()
}, [dom.text(sheet.name())]));
if (sheets.length > 1) {
var deleteIcon = element("span", {
className: classNames.sheetsBarKIcon + EMPTYCHAR + classNames.sheetsBarKFontIcon + EMPTYCHAR + classNames.sheetsBarKIconX
}, []);
elementContent.push(element("span", {
className: classNames.sheetsBarKLink + EMPTYCHAR + classNames.sheetsBarRemove
}, [deleteIcon]));
}
}
sheetElements.push(element("li", attr, elementContent));
}
this._tree.render([this._addButton(), this._createSheetsWrapper(sheetElements, renderScrollButtons)]);
},
_createSheetsWrapper: function(sheetElements, renderScrollButtons) {
var element = kendo.dom.element;
var classNames = SheetsBar.classNames;
var childrenElements = [element("ul", {
className: classNames.sheetsBarKReset
}, sheetElements)];
renderScrollButtons = true;
if (renderScrollButtons) {
var baseButtonClass = classNames.sheetsBarKButton + EMPTYCHAR + classNames.sheetsBarKButtonBare + EMPTYCHAR;
childrenElements.push(element("span", {className: baseButtonClass + classNames.sheetsBarPrev }, [
element("span", {className: classNames.sheetsBarKIcon + EMPTYCHAR + classNames.sheetsBarKArrowW}, [])
]));
childrenElements.push(element("span", {className: baseButtonClass + classNames.sheetsBarNext }, [
element("span", {className: classNames.sheetsBarKIcon + EMPTYCHAR + classNames.sheetsBarKArrowE}, [])
]));
}
return element("div", { className: classNames.sheetsBarItems }, childrenElements);
},
_createSortable: function() {
var classNames = SheetsBar.classNames;
this._sortable = new kendo.ui.Sortable(this.element, {
filter: kendo.format("ul li.{0},ul li.{1}", classNames.sheetsBarActive, classNames.sheetsBarInactive),
container: DOT + classNames.sheetsBarItems,
axis: "x",
animation: false,
ignore: "input",
end: function () {
if (this.draggable.hint) {
this.draggable.hint.remove();
}
},
hint: function (element) {
var hint = $(element).clone();
return hint.wrap("<div class='" + classNames.sheetsBarHintWrapper + "'><ul class='" + classNames.sheetsBarKResetItems + "'></ul></div>").closest("div");
}
});
},
_onEditorKeydown: function(e) {
if (this._editor) {
if (e.which === 13) {
this._destroyEditor();
}
if (e.which === 27) {
this._destroyEditor(true);
}
}
},
_onEditorBlur: function() {
if (this._editor) {
this._destroyEditor();
}
},
_onSheetReorderEnd: function(e) {
e.preventDefault();
this.trigger("reorder", {oldIndex: e.oldIndex, newIndex: e.newIndex});
},
_onSheetReorderStart: function(e) {
if (this._editor) {
e.preventDefault();
}
},
_onSheetRemove: function(e) {
var removedSheetName = $(e.target).closest("li").text();
if (this._editor) {
this._destroyEditor();
}
var closeCallback = function(e) {
var dlg = e.sender;
if (dlg.isConfirmed()) {
this.trigger("remove", { name: removedSheetName, confirmation: true });
}
}.bind(this);
this._openDialog("confirmation", {
close: closeCallback
});
},
_onSheetSelect: function(e) {
var selectedSheetText = $(e.target).text();
if ($(e.target).is(DOT + SheetsBar.classNames.sheetsBarEditor) || !selectedSheetText) {
e.preventDefault();
return;
}
if (this._editor) {
this._destroyEditor();
}
this._scrollSheetsToItem($(e.target).closest("li"));
this.trigger("select", {name: selectedSheetText, isAddButton: false});
},
_onSheetRename: function(newSheetName) {
if (this._sheets[this._selectedIndex].name() === newSheetName || newSheetName === null) {
return;
}
this.trigger("rename", {name: newSheetName, sheetIndex: this._selectedIndex });
},
_onAddSelect: function() {
this.trigger("select", {isAddButton: true});
},
_addButton: function() {
var element = kendo.dom.element;
var classNames = SheetsBar.classNames;
return element("a", {
className: classNames.sheetsBarAdd + EMPTYCHAR + classNames.sheetsBarKButton
}, [element("span", {className: classNames.sheetsBarKIcon + EMPTYCHAR + classNames.sheetsBarKFontIcon + EMPTYCHAR + classNames.sheetsBarKIconPlus}, [])]);
},
destroy: function() {
this._sortable.destroy();
},
_scrollableAllowed: function() {
var options = this.options;
return options.scrollable && !isNaN(options.scrollable.distance);
},
_scrollSheetsToItem: function (item) {
var that = this;
if (!that._scrollableModeActive) {
return;
}
var sheetsGroup = that._sheetsGroup();
var currentScrollOffset = sheetsGroup.scrollLeft();
var itemWidth = outerWidth(item);
var itemOffset = that._isRtl ? item.position().left : item.position().left - sheetsGroup.children().first().position().left;
var sheetsGroupWidth = sheetsGroup[0].offsetWidth;
var sheetsGroupPadding = Math.ceil(parseFloat(sheetsGroup.css("padding-left")));
var itemPosition;
if (that._isRtl) {
if (itemOffset < 0) {
itemPosition = currentScrollOffset + itemOffset - (sheetsGroupWidth - currentScrollOffset) - sheetsGroupPadding;
} else if (itemOffset + itemWidth > sheetsGroupWidth) {
itemPosition = currentScrollOffset + itemOffset - itemWidth + sheetsGroupPadding * 2;
}
} else {
if (currentScrollOffset + sheetsGroupWidth < itemOffset + itemWidth) {
itemPosition = itemOffset + itemWidth - sheetsGroupWidth + sheetsGroupPadding * 2;
} else if (currentScrollOffset > itemOffset) {
itemPosition = itemOffset - sheetsGroupPadding;
}
}
sheetsGroup.finish().animate({ "scrollLeft": itemPosition }, "fast", "linear", function () {
that._toggleScrollButtons();
});
},
_sheetsGroup: function() {
return this._sheetsWrapper().children("ul");
},
_sheetsWrapper: function() {
return this.element.find(DOT + SheetsBar.classNames.sheetsBarItems);
},
_scrollSheetsByDelta: function (delta) {
var that = this;
var sheetsGroup = that._sheetsGroup();
var scrLeft = sheetsGroup.scrollLeft();
sheetsGroup.finish().animate({ "scrollLeft": scrLeft + delta }, "fast", "linear", function () {
if (that._nowScrollingSheets) {
that._scrollSheetsByDelta(delta);
} else {
that._toggleScrollButtons();
}
});
}
});
kendo.spreadsheet.SheetsBar = SheetsBar;
$.extend(true, SheetsBar, { classNames: sheetsBarClassNames });
})(window.kendo);
}, __webpack_require__(3));
/***/ }),
/***/ 1537:
/***/ (function(module, exports) {
module.exports = require("../kendo.sortable");
/***/ })
/******/ });