| Current Path : /home/rtorresani/www/vendor/magento/module-ui/view/base/web/js/lib/knockout/bindings/ |
| Current File : //home/rtorresani/www/vendor/magento/module-ui/view/base/web/js/lib/knockout/bindings/bind-html.js |
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'ko',
'underscore',
'mage/apply/main',
'../template/renderer'
], function (ko, _, mage, renderer) {
'use strict';
/**
* Set html to node element.
*
* @param {HTMLElement} el - Element to apply bindings to.
* @param {Function} html - Observable html content.
*/
function setHtml(el, html) {
ko.utils.emptyDomNode(el);
html = ko.utils.unwrapObservable(html);
if (!_.isNull(html) && !_.isUndefined(html)) {
if (!_.isString(html)) {
html = html.toString();
}
el.innerHTML = html;
}
}
/**
* Apply bindings and call magento attributes parser.
*
* @param {HTMLElement} el - Element to apply bindings to.
* @param {ko.bindingContext} ctx - Instance of ko.bindingContext, passed to binding initially.
*/
function applyComponents(el, ctx) {
ko.utils.arrayForEach(el.childNodes, ko.cleanNode);
ko.applyBindingsToDescendants(ctx, el);
mage.apply();
}
ko.bindingHandlers.bindHtml = {
/**
* Scope binding's init method.
*
* @returns {Object} - Knockout declaration for it to let binding control descendants.
*/
init: function () {
return {
controlsDescendantBindings: true
};
},
/**
* Reads params passed to binding.
* Set html to node element, apply bindings and call magento attributes parser.
*
* @param {HTMLElement} el - Element to apply bindings to.
* @param {Function} valueAccessor - Function that returns value, passed to binding.
* @param {Object} allBindings - Object, which represents all bindings applied to element.
* @param {Object} viewModel - Object, which represents view model binded to el.
* @param {ko.bindingContext} bindingContext - Instance of ko.bindingContext, passed to binding initially.
*/
update: function (el, valueAccessor, allBindings, viewModel, bindingContext) {
setHtml(el, valueAccessor());
applyComponents(el, bindingContext);
}
};
renderer.addAttribute('bindHtml');
});