AutorÃa | Ultima modificación | Ver Log |
{"version":3,"file":"template-factory.min.js","sources":["../../../src/bootstrap/util/template-factory.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer'\nimport { execute, getElement, isElement } from './index'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\
n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerH
TML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remo
ve()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n"],"names":["Default","allowList","DefaultAllowlist","content","extraClass","html","sanitize","sanitizeFn","template","DefaultType","DefaultContentType","entry","selector","TemplateFactory","Config","const
ructor","config","_config","this","_getConfig","NAME","getContent","Object","values","map","_resolvePossibleFunction","filter","Boolean","hasContent","length","changeContent","_checkContent","toHtml","templateWrapper","document","createElement","innerHTML","_maybeSanitize","text","entries","_setContent","children","classList","add","split","_typeCheckConfig","arg","templateElement","SelectorEngine","findOne","_putElementInTemplate","textContent","remove","element","append"],"mappings":"mcAkBMA,QAAU,CACdC,UAAWC,4BACXC,QAAS,GACTC,WAAY,GACZC,MAAM,EACNC,UAAU,EACVC,WAAY,KACZC,SAAU,eAGNC,YAAc,CAClBR,UAAW,SACXE,QAAS,SACTC,WAAY,oBACZC,KAAM,UACNC,SAAU,UACVC,WAAY,kBACZC,SAAU,UAGNE,mBAAqB,CACzBC,MAAO,iCACPC,SAAU,0BAONC,wBAAwBC,gBAC5BC,YAAYC,qBAELC,QAAUC,KAAKC,WAAWH,QAItBhB,4BACFA,QAGES,gCACFA,YAGEW,wBA9CA,kBAmDXC,oBACSC,OAAOC,OAAOL,KAAKD,QAAQd,SAC/BqB,KAAIR,QAAUE,KAAKO,yBAAyBT,UAC5CU,OAAOC,SAGZC,oBACSV,KAAKG,aAAaQ,OAAS,EAGpCC,cAAc3B,qBACP4B,cAAc5B,cACdc,QAAQd,QAAU,IAAKe,KAAKD,QAAQd,WAAYA,SAC9Ce,KAGTc,eACQC,gBAAkBC,SAAS
C,cAAc,OAC/CF,gBAAgBG,UAAYlB,KAAKmB,eAAenB,KAAKD,QAAQT,cAExD,MAAOI,SAAU0B,QAAShB,OAAOiB,QAAQrB,KAAKD,QAAQd,cACpDqC,YAAYP,gBAAiBK,KAAM1B,gBAGpCJ,SAAWyB,gBAAgBQ,SAAS,GACpCrC,WAAac,KAAKO,yBAAyBP,KAAKD,QAAQb,mBAE1DA,YACFI,SAASkC,UAAUC,OAAOvC,WAAWwC,MAAM,MAGtCpC,SAITqC,iBAAiB7B,cACT6B,iBAAiB7B,aAClBe,cAAcf,OAAOb,SAG5B4B,cAAce,SACP,MAAOlC,SAAUT,WAAYmB,OAAOiB,QAAQO,WACzCD,iBAAiB,CAAEjC,SAAAA,SAAUD,MAAOR,SAAWO,oBAIzD8B,YAAYhC,SAAUL,QAASS,gBACvBmC,gBAAkBC,wBAAeC,QAAQrC,SAAUJ,UAEpDuC,mBAIL5C,QAAUe,KAAKO,yBAAyBtB,WAOpC,oBAAUA,cACP+C,uBAAsB,qBAAW/C,SAAU4C,iBAI9C7B,KAAKD,QAAQZ,KACf0C,gBAAgBX,UAAYlB,KAAKmB,eAAelC,SAIlD4C,gBAAgBI,YAAchD,QAd5B4C,gBAAgBK,UAiBpBf,eAAeS,YACN5B,KAAKD,QAAQX,UAAW,2BAAawC,IAAK5B,KAAKD,QAAQhB,UAAWiB,KAAKD,QAAQV,YAAcuC,IAGtGrB,yBAAyBqB,YAChB,kBAAQA,IAAK,CAAC5B,OAGvBgC,sBAAsBG,QAASN,oBACzB7B,KAAKD,QAAQZ,YACf0C,gBAAgBX,UAAY,QAC5BW,gBAAgBO,OAAOD,SAIzBN,gBAAgBI,YAAcE,QAAQF,0BAI3BtC"}