| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /**
- * DevExtreme (integration/knockout/template.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 domAdapter = require("../../core/dom_adapter");
- var ko = require("knockout");
- var typeUtils = require("../../core/utils/type");
- var TemplateBase = require("../../ui/widget/ui.template_base");
- var domUtils = require("../../core/utils/dom");
- var getClosestNodeWithContext = require("./utils").getClosestNodeWithContext;
- var getParentContext = function(data) {
- var parentNode = domAdapter.createElement("div");
- ko.applyBindingsToNode(parentNode, null, data);
- var parentContext = ko.contextFor(parentNode);
- ko.cleanNode(parentNode);
- return parentContext
- };
- var KoTemplate = TemplateBase.inherit({
- ctor: function(element) {
- this._element = element;
- this._template = $("<div>").append(domUtils.normalizeTemplateElement(element));
- this._registerKoTemplate()
- },
- _registerKoTemplate: function() {
- var template = this._template.get(0);
- new ko.templateSources.anonymousTemplate(template).nodes(template)
- },
- _prepareDataForContainer: function(data, container) {
- if (container && container.length) {
- var containerElement = container.get(0);
- var node = getClosestNodeWithContext(containerElement);
- var containerContext = ko.contextFor(node);
- data = void 0 !== data ? data : ko.dataFor(node) || {};
- if (containerContext) {
- return data === containerContext.$data ? containerContext : containerContext.createChildContext(data)
- }
- }
- return getParentContext(data).createChildContext(data)
- },
- _renderCore: function(options) {
- var model = this._prepareDataForContainer(options.model, $(options.container));
- if (typeUtils.isDefined(options.index)) {
- model.$index = options.index
- }
- var $placeholder = $("<div>").appendTo(options.container);
- var $result;
- ko.renderTemplate(this._template.get(0), model, {
- afterRender: function(nodes) {
- $result = $(nodes)
- }
- }, $placeholder.get(0), "replaceNode");
- return $result
- },
- source: function() {
- return $(this._element).clone()
- },
- dispose: function() {
- this._template.remove()
- }
- });
- module.exports = KoTemplate;
|