UNPKG

@progress/kendo-ui

Version:

This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.

311 lines (237 loc) 8.24 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); require('./kendo.html.button.js'); require('./kendo.button.menu.js'); require('./kendo.html.base.js'); require('./kendo.core.js'); require('./kendo.licensing.js'); require('@progress/kendo-licensing'); require('./kendo.icons.js'); require('./kendo.html.icon.js'); require('@progress/kendo-svg-icons'); require('./kendo.popup.js'); const __meta__ = { id: "dropdownbutton", name: "DropDownButton", category: "web", description: "The DropDownButton allows the user to execute an action from a drop-down list.", depends: ["button.menu", "html.button"] }; (function($, undefined$1) { var kendo = window.kendo, Widget = kendo.ui.Widget, NS = ".kendoDropDownButton", ui = kendo.ui, keys = kendo.keys, extend = $.extend, html = kendo.html, outerWidth = kendo._outerWidth, DOT = ".", ID = "id", ARIA_HASPOPUP = "aria-haspopup", ARIA_DISABLED = "aria-disabled", ARIA_CONTROLS = "aria-controls", ARIA_LABEL = "aria-label", ARIA_EXPANDED = "aria-expanded", DISABLED = "disabled", DISABLEDSTATE = "k-disabled", CLICK = "click", KEYDOWN = "keydown", OPEN = "open", CLOSE = "close", FOCUS = "focus"; var cssClasses = { menuButton: "k-menu-button", }; var DropDownButton = Widget.extend({ init: function(element, options) { var that = this; options.enabled = options.enabled !== false && !$(element).prop(DISABLED); Widget.fn.init.call(that, element, options); that.wrapper = that.element; that._mainButton(); that._renderMenu(); that._enable(that.options.enabled); that._aria(); that._attachEvents(); kendo.notify(that); that._applyCssClasses(); }, options: { name: "DropDownButton", direction: "down", enabled: true, items: [], rounded: "medium", size: "medium", fillMode: "solid", themeColor: "base", showArrowButton: false, icon: null, popup: null, messages: { labelSuffix: "dropdownbutton" } }, events: [ CLICK, OPEN, CLOSE ], _mainButton: function() { var that = this, options = extend({}, that.options, { type: that.element.attr("type") || "button" }); delete options.click; that.element.addClass(cssClasses.menuButton); html.renderButton(that.element, options); if (that.options.showArrowButton) { $("<span></span>") .addClass("k-button-arrow") .addClass("k-menu-button-arrow") .append(kendo.ui.icon(kendo.htmlEncode("caret-alt-down"))) .appendTo(that.element); } else { const arrowButton = that.element.find(".k-button-arrow"); if (arrowButton) { arrowButton.remove(); } } }, _aria: function() { var that = this, element = that.element, menu = that.menu; element.attr(ARIA_HASPOPUP, menu ? "menu" : null); element.attr(ARIA_EXPANDED, menu ? false : null); element.attr(ARIA_CONTROLS, menu ? menu.list.attr(ID) : null); if (!element.attr(ARIA_LABEL)) { element.attr(ARIA_LABEL, element.text() + " " + that.options.messages.labelSuffix); } }, _renderMenu: function() { var that = this, options = extend({}, that.options), menu = $("<div></div>"); delete options.click; delete options.name; that.menu = menu.appendTo(document.body).kendoButtonMenu(extend({ mainButton: that.element, toggleTarget: that.element, menuOpen: that.menuOpenHandler.bind(that), menuClose: that.menuCloseHandler.bind(that), menuClick: that._click.bind(that) }, options)).data("kendoButtonMenu"); }, menuOpenHandler: function(ev) { var that = this, computedWidth = outerWidth(that.element); var isDefaultPrevented = that.trigger(OPEN, { target: that.element }); if (isDefaultPrevented) { ev.preventDefault(); return; } ev.sender.adjustPopupWidth(computedWidth); that.element.attr(ARIA_EXPANDED, true); }, menuCloseHandler: function(ev) { var that = this, isDefaultPrevented = that.trigger(CLOSE, { target: that.element }); if (isDefaultPrevented) { ev.preventDefault(); return; } that.element.attr(ARIA_EXPANDED, false); that.element.trigger(FOCUS); }, _attachEvents: function() { var that = this; that.element.on(KEYDOWN + NS, that._keydown.bind(that)); }, _click: function(ev) { var that = this, id = ev.id, target = ev.target, originalEvent = ev.originalEvent; that.menu.close(); that.trigger(CLICK, { id: id, target: target, originalEvent: originalEvent }); }, _keydown: function(ev) { var that = this; if (that.element.is(DOT + DISABLEDSTATE) && (ev.keyCode === keys.ENTER || ev.keyCode === keys.SPACEBAR)) { ev.preventDefault(); } }, focus: function() { var that = this; that.element.trigger(FOCUS); }, _enable: function(enable, soft) { this.element .toggleClass(DISABLEDSTATE, !enable); if (enable) { this.element.removeAttr(ARIA_DISABLED); } else { this.element.attr(ARIA_DISABLED, !enable); } if (!soft) { this.element.attr(DISABLED, !enable); } }, enable: function(enable, menuItem, soft) { var that = this; if (enable === undefined$1) { enable = true; } if (menuItem && menuItem.length) { that.menu.enable(enable, menuItem); return; } that.options.enabled = enable; that._enable(enable, soft); that.menu.enable(enable); }, hide: function(menuItem) { var that = this; if (menuItem && menuItem.length) { that.menu.hide(menuItem); } }, show: function(menuItem) { var that = this; if (menuItem && menuItem.length) { that.menu.show(menuItem); } }, open: function() { this.menu.open(); }, close: function() { this.menu.close(); }, items: function() { return this.menu.items(); }, setOptions: function(options) { var that = this; Widget.fn.setOptions.call(that, options); if (options.popup || options.items || options.size) { that.menu.destroy(); that._renderMenu(); } that._mainButton(); that._aria(); }, destroy: function() { var that = this; that.menu.destroy(); that.element.off(NS); Widget.fn.destroy.call(that); } }); ui.plugin(DropDownButton); })(window.kendo.jQuery); var kendo$1 = kendo; exports.__meta__ = __meta__; exports.default = kendo$1;