UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

80 lines (69 loc) 2.87 kB
"use strict"; var $ = require("../../core/renderer"), eventsEngine = require("../../events/core/events_engine"), Action = require("../../core/action"), compileGetter = require("../../core/utils/data").compileGetter, extend = require("../../core/utils/extend").extend, ko = require("knockout"), iconUtils = require("../../core/utils/icon"), clickEvent = require("../../events/click"); // TODO: dxAction as dxComponent? // TODO: A comment for documentation is temporarily located in the framework.command.js file. Waiting for changes in DocGen... ko.bindingHandlers.dxAction = { update: function update(element, valueAccessor, allBindingsAccessor, viewModel) { var $element = $(element); var unwrappedValue = ko.utils.unwrapObservable(valueAccessor()), actionSource = unwrappedValue, actionOptions = { context: element }; if (unwrappedValue.execute) { actionSource = unwrappedValue.execute; extend(actionOptions, unwrappedValue); } var action = new Action(actionSource, actionOptions); eventsEngine.off($element, ".dxActionBinding"); eventsEngine.on($element, clickEvent.name + ".dxActionBinding", function (e) { action.execute({ element: $element, model: viewModel, evaluate: function evaluate(expression) { var context = viewModel; if (expression.length > 0 && expression[0] === "$") { context = ko.contextFor(element); } var getter = compileGetter(expression); return getter(context); }, event: e }); if (!actionOptions.bubbling) { e.stopPropagation(); } }); } }; ko.bindingHandlers.dxControlsDescendantBindings = { init: function init(_, valueAccessor) { return { controlsDescendantBindings: ko.unwrap(valueAccessor()) }; } }; ko.bindingHandlers.dxIcon = { init: function init(element, valueAccessor) { var options = ko.utils.unwrapObservable(valueAccessor()) || {}, iconElement = iconUtils.getImageContainer(options); ko.virtualElements.emptyNode(element); if (iconElement) { ko.virtualElements.prepend(element, iconElement.get(0)); } }, update: function update(element, valueAccessor) { var options = ko.utils.unwrapObservable(valueAccessor()) || {}, iconElement = iconUtils.getImageContainer(options); ko.virtualElements.emptyNode(element); if (iconElement) { ko.virtualElements.prepend(element, iconElement.get(0)); } } }; ko.virtualElements.allowedBindings.dxIcon = true;