/** * DevExtreme (integration/knockout/component_registrator.js) * Version: 19.1.16 * Build date: Tue Oct 18 2022 * * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var $ = require("../../core/renderer"); var ko = require("knockout"); var Callbacks = require("../../core/utils/callbacks"); var errors = require("../../core/errors"); var inflector = require("../../core/utils/inflector"); var isPlainObject = require("../../core/utils/type").isPlainObject; var registerComponentCallbacks = require("../../core/component_registrator_callbacks"); var Widget = require("../../ui/widget/ui.widget"); var KoTemplate = require("./template"); var Editor = require("../../ui/editor/editor"); var Locker = require("../../core/utils/locker"); var getClosestNodeWithContext = require("./utils").getClosestNodeWithContext; var config = require("../../core/config"); var LOCKS_DATA_KEY = "dxKoLocks"; var CREATED_WITH_KO_DATA_KEY = "dxKoCreation"; var editorsBindingHandlers = []; var registerComponentKoBinding = function(componentName, componentClass) { if (componentClass.subclassOf(Editor)) { editorsBindingHandlers.push(componentName) } ko.bindingHandlers[componentName] = { init: function(domNode, valueAccessor) { var $element = $(domNode); var optionChangedCallbacks = Callbacks(); var optionsByReference = {}; var component; var knockoutConfig = config().knockout; var isBindingPropertyPredicateName = knockoutConfig && knockoutConfig.isBindingPropertyPredicateName; var isBindingPropertyPredicate; var ctorOptions = { onInitializing: function() { optionsByReference = this._getOptionsByReference(); ko.computed(function() { var model = ko.unwrap(valueAccessor()); if (component) { component.beginUpdate() } isBindingPropertyPredicate = isBindingPropertyPredicateName && model && model[isBindingPropertyPredicateName]; unwrapModel(model); if (component) { component.endUpdate() } }, null, { disposeWhenNodeIsRemoved: domNode }); component = this }, modelByElement: function($element) { if ($element.length) { var node = getClosestNodeWithContext($element.get(0)); return ko.dataFor(node) } }, nestedComponentOptions: function(component) { return { modelByElement: component.option("modelByElement"), nestedComponentOptions: component.option("nestedComponentOptions") } }, _optionChangedCallbacks: optionChangedCallbacks, integrationOptions: { watchMethod: function(fn, callback, options) { options = options || {}; var skipCallback = options.skipImmediate; var watcher = ko.computed(function() { var newValue = ko.unwrap(fn()); if (!skipCallback) { callback(newValue) } skipCallback = false }); return function() { watcher.dispose() } }, templates: { "dx-polymorph-widget": { render: function(options) { var widgetName = ko.utils.unwrapObservable(options.model.widget); if (!widgetName) { return } if ("button" === widgetName || "tabs" === widgetName || "dropDownMenu" === widgetName) { var deprecatedName = widgetName; widgetName = inflector.camelize("dx-" + widgetName); errors.log("W0001", "dxToolbar - 'widget' item field", deprecatedName, "16.1", "Use: '" + widgetName + "' instead") } var markup = $("