Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'js/dist/util/template-factory.js')
-rw-r--r--js/dist/util/template-factory.js178
1 files changed, 178 insertions, 0 deletions
diff --git a/js/dist/util/template-factory.js b/js/dist/util/template-factory.js
new file mode 100644
index 0000000000..e64c4a3348
--- /dev/null
+++ b/js/dist/util/template-factory.js
@@ -0,0 +1,178 @@
+/*!
+ * Bootstrap template-factory.js v5.2.0-beta1 (https://getbootstrap.com/)
+ * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./sanitizer'), require('./index'), require('../dom/selector-engine'), require('./config')) :
+ typeof define === 'function' && define.amd ? define(['./sanitizer', './index', '../dom/selector-engine', './config'], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.TemplateFactory = factory(global.Sanitizer, global.Index, global.SelectorEngine, global.Config));
+})(this, (function (sanitizer, index, SelectorEngine, Config) { 'use strict';
+
+ const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
+
+ const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
+ const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
+
+ /**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v5.2.0-beta1): util/template-factory.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+ /**
+ * Constants
+ */
+
+ const NAME = 'TemplateFactory';
+ const Default = {
+ extraClass: '',
+ template: '<div></div>',
+ content: {},
+ // { selector : text , selector2 : text2 , }
+ html: false,
+ sanitize: true,
+ sanitizeFn: null,
+ allowList: sanitizer.DefaultAllowlist
+ };
+ const DefaultType = {
+ extraClass: '(string|function)',
+ template: 'string',
+ content: 'object',
+ html: 'boolean',
+ sanitize: 'boolean',
+ sanitizeFn: '(null|function)',
+ allowList: 'object'
+ };
+ const DefaultContentType = {
+ selector: '(string|element)',
+ entry: '(string|element|function|null)'
+ };
+ /**
+ * Class definition
+ */
+
+ class TemplateFactory extends Config__default.default {
+ constructor(config) {
+ super();
+ this._config = this._getConfig(config);
+ } // Getters
+
+
+ static get Default() {
+ return Default;
+ }
+
+ static get DefaultType() {
+ return DefaultType;
+ }
+
+ static get NAME() {
+ return NAME;
+ } // Public
+
+
+ getContent() {
+ return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
+ }
+
+ hasContent() {
+ return this.getContent().length > 0;
+ }
+
+ changeContent(content) {
+ this._checkContent(content);
+
+ this._config.content = { ...this._config.content,
+ ...content
+ };
+ return this;
+ }
+
+ toHtml() {
+ const templateWrapper = document.createElement('div');
+ templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
+
+ for (const [selector, text] of Object.entries(this._config.content)) {
+ this._setContent(templateWrapper, text, selector);
+ }
+
+ const template = templateWrapper.children[0];
+
+ const extraClass = this._resolvePossibleFunction(this._config.extraClass);
+
+ if (extraClass) {
+ template.classList.add(...extraClass.split(' '));
+ }
+
+ return template;
+ } // Private
+
+
+ _typeCheckConfig(config) {
+ super._typeCheckConfig(config);
+
+ this._checkContent(config.content);
+ }
+
+ _checkContent(arg) {
+ for (const [selector, content] of Object.entries(arg)) {
+ super._typeCheckConfig({
+ selector,
+ entry: content
+ }, DefaultContentType);
+ }
+ }
+
+ _setContent(template, content, selector) {
+ const templateElement = SelectorEngine__default.default.findOne(selector, template);
+
+ if (!templateElement) {
+ return;
+ }
+
+ content = this._resolvePossibleFunction(content);
+
+ if (!content) {
+ templateElement.remove();
+ return;
+ }
+
+ if (index.isElement(content)) {
+ this._putElementInTemplate(index.getElement(content), templateElement);
+
+ return;
+ }
+
+ if (this._config.html) {
+ templateElement.innerHTML = this._maybeSanitize(content);
+ return;
+ }
+
+ templateElement.textContent = content;
+ }
+
+ _maybeSanitize(arg) {
+ return this._config.sanitize ? sanitizer.sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
+ }
+
+ _resolvePossibleFunction(arg) {
+ return typeof arg === 'function' ? arg(this) : arg;
+ }
+
+ _putElementInTemplate(element, templateElement) {
+ if (this._config.html) {
+ templateElement.innerHTML = '';
+ templateElement.append(element);
+ return;
+ }
+
+ templateElement.textContent = element.textContent;
+ }
+
+ }
+
+ return TemplateFactory;
+
+}));
+//# sourceMappingURL=template-factory.js.map