diff --git a/Build/Gruntfile.js b/Build/Gruntfile.js index 7b3752e13888a47bac8839ad7f993287598eab8f..45841aa0ceaf3f84071042e9a4c76c38defb2283 100644 --- a/Build/Gruntfile.js +++ b/Build/Gruntfile.js @@ -449,6 +449,72 @@ module.exports = function (grunt) { cache: './.cache/grunt-newer/' } }, + rollup: { + options: { + format: 'amd', + onwarn: function(warning) { + if (warning.code === 'THIS_IS_UNDEFINED' && grunt.file.match('*/lit-html/directives/async-*.js')) { + // lit-html's Symbol.asyncIterator polyfill in async-{append/replace}.js contains + // a global check for `this`: `(this && this.__asyncValues) || function (o) {`. + // rollup will rewrite that to `function (o) {` and warn about rewriting `this`. + // The rewrite is perfectly ok, the AMD module will act as a singleton, so no + // global window object is needed here. The warning is therefore silenced. + return; + } + console.warn( warning.message ); + } + }, + 'lit-html': { + options: { + preserveModules: true, + plugins: () => [ + { + name: 'terser', + renderChunk: code => require('terser').minify(code, grunt.config.get('terser.options')) + } + ] + }, + files: { + '<%= paths.core %>Public/JavaScript/Contrib/lit-html': [ + 'node_modules/lit-html/lit-html.js', + 'node_modules/lit-html/directives/*.js', + 'node_modules/lit-html/lib/*.js', + // omitted, empty + '!node_modules/lit-html/lib/render-options.js', + '!node_modules/lit-html/lib/template-processor.js', + ] + } + }, + 'lit-element': { + options: { + preserveModules: true, + plugins: () => [ + { + name: 'terser', + renderChunk: code => require('terser').minify(code, grunt.config.get('terser.options')) + }, + { + name: 'externals', + resolveId: (source) => { + if (source === 'lit-html/lit-html.js') { + return {id: 'lit-html', external: true} + } + if (source === 'lit-html/lib/shady-render.js') { + return {id: 'lit-html/lib/shady-render', external: true} + } + return null + } + } + ] + }, + files: { + '<%= paths.core %>Public/JavaScript/Contrib/lit-element': [ + 'node_modules/lit-element/lit-element.js', + 'node_modules/lit-element/lib/*.js', + ] + } + }, + }, npmcopy: { options: { clean: false, @@ -643,6 +709,7 @@ module.exports = function (grunt) { // Register tasks grunt.loadNpmTasks('grunt-sass'); grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-rollup'); grunt.loadNpmTasks('grunt-npmcopy'); grunt.loadNpmTasks('grunt-terser'); grunt.loadNpmTasks('grunt-postcss'); @@ -707,7 +774,7 @@ module.exports = function (grunt) { * - yarn install * - copy some components to a specific destinations because they need to be included via PHP */ - grunt.registerTask('update', ['exec:yarn-install', 'npmcopy']); + grunt.registerTask('update', ['exec:yarn-install', 'rollup', 'npmcopy']); /** * grunt compile-typescript task diff --git a/Build/Sources/TypeScript/core/Resources/Public/TypeScript/lit-helper.ts b/Build/Sources/TypeScript/core/Resources/Public/TypeScript/lit-helper.ts new file mode 100644 index 0000000000000000000000000000000000000000..9adbcefeece308cb148d8623ff68917115ca2a3e --- /dev/null +++ b/Build/Sources/TypeScript/core/Resources/Public/TypeScript/lit-helper.ts @@ -0,0 +1,22 @@ +/* + * This file is part of the TYPO3 CMS project. + * + * It is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, either version 2 + * of the License, or any later version. + * + * For the full copyright and license information, please read the + * LICENSE.txt file that was distributed with this source code. + * + * The TYPO3 project - inspiring people to share! + */ + +import {render} from 'lit-html'; +import {css} from 'lit-element'; +import type {TemplateResult} from 'lit-html'; + +export const renderHTML = (result: TemplateResult): string => { + const anvil = document.createElement('div'); + render(result, anvil); + return anvil.innerHTML; +}; diff --git a/Build/package.json b/Build/package.json index b373e07c832917e397b912700abf90f960938f8a..68b0b7197b763d04681522cdb7d812e85b22ab48 100644 --- a/Build/package.json +++ b/Build/package.json @@ -38,6 +38,7 @@ "grunt-newer": "^1.3.0", "grunt-npmcopy": "^0.2.0", "grunt-postcss": "^0.9.0", + "grunt-rollup": "^11.5.0", "grunt-sass": "^3.1.0", "grunt-stylelint": "^0.15.0", "grunt-terser": "^1.0.0", @@ -87,6 +88,8 @@ "imagesloaded": "^4.1.4", "jquery": "^3.5.1", "jquery-ui": "github:jquery/jquery-ui#1.11.4", + "lit-element": "^2.4", + "lit-html": "^1.3", "moment": "^2.29.0", "moment-timezone": "^0.5.31", "muuri": "^0.9.3", diff --git a/Build/yarn.lock b/Build/yarn.lock index eb2e3fd1953d74322b2598e99c2c79b3cf67d3a9..b284197e30d669d469771259ed244e197cd6ada4 100644 --- a/Build/yarn.lock +++ b/Build/yarn.lock @@ -4035,6 +4035,13 @@ grunt-postcss@^0.9.0: diff "^3.0.0" postcss "^6.0.11" +grunt-rollup@^11.5.0: + version "11.5.0" + resolved "https://registry.yarnpkg.com/grunt-rollup/-/grunt-rollup-11.5.0.tgz#ec1bdda97827054434de21535ac236144f9a50d4" + integrity sha512-Xa/1g0G4HlMIAsJYLZgDEDi8w2jZ5sLpo6XKezJqGdpTGe8qGWcXG7kopiyCUYiXs3LLv58y/DhGIXwbkCAkvQ== + dependencies: + rollup "^2.32.0" + grunt-sass@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/grunt-sass/-/grunt-sass-3.1.0.tgz#a5936cc2a80ec08092d9f31c101dc307d1e4f71c" @@ -5439,6 +5446,18 @@ lintspaces@^0.7.0: minimist "^1.2.5" rc "^1.2.8" +lit-element@^2.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-2.4.0.tgz#b22607a037a8fc08f5a80736dddf7f3f5d401452" + integrity sha512-pBGLglxyhq/Prk2H91nA0KByq/hx/wssJBQFiYqXhGDvEnY31PRGYf1RglVzyLeRysu0IHm2K0P196uLLWmwFg== + dependencies: + lit-html "^1.1.1" + +lit-html@^1.1.1, lit-html@^1.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-1.3.0.tgz#c80f3cc5793a6dea6c07172be90a70ab20e56034" + integrity sha512-0Q1bwmaFH9O14vycPHw8C/IeHMk/uSDldVLIefu/kfbTBGIc44KGH6A8p1bDfxUfHdc8q6Ct7kQklWoHgr4t1Q== + livereload-js@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" @@ -7665,6 +7684,13 @@ rimraf@^3.0.0, rimraf@^3.0.2, rimraf@~3.0.2: dependencies: glob "^7.1.3" +rollup@^2.32.0: + version "2.34.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.34.2.tgz#fa73e05c64df587e9ed4dc80d7d4e7d4a43f8908" + integrity sha512-mvtQLqu3cNeoctS+kZ09iOPxrc1P1/Bt1z15enuQ5feyKOdM3MJAVFjjsygurDpSWn530xB4AlA83TWIzRstXA== + optionalDependencies: + fsevents "~2.1.2" + run-parallel@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" diff --git a/typo3/sysext/core/Classes/Page/PageRenderer.php b/typo3/sysext/core/Classes/Page/PageRenderer.php index cc70b717d3fe278106f06b78c50745f9b1cf9d83..203c9cc93fdc764bda8629b39718be5f3f5cbac6 100644 --- a/typo3/sysext/core/Classes/Page/PageRenderer.php +++ b/typo3/sysext/core/Classes/Page/PageRenderer.php @@ -1398,6 +1398,18 @@ class PageRenderer implements SingletonInterface $requireJsConfig['public']['shim'] = [ 'tablesort.dotsep' => ['deps' => ['tablesort']], ]; + $requireJsConfig['public']['packages'] = [ + [ + 'name' => 'lit-html', + 'location' => $corePath . 'lit-html', + 'main' => 'lit-html', + ], + [ + 'name' => 'lit-element', + 'location' => $corePath . 'lit-element', + 'main' => 'lit-element', + ] + ]; $requireJsConfig['public']['waitSeconds'] = 30; $requireJsConfig['public']['typo3BaseUrl'] = false; $publicPackageNames = ['core', 'frontend', 'backend']; @@ -1490,8 +1502,11 @@ class PageRenderer implements SingletonInterface $requireJsConfig = $this->getRequireJsConfig(static::REQUIREJS_SCOPE_CONFIG); $requireJsConfig['typo3BaseUrl'] = (string)$uriBuilder->buildUriFromRoute('ajax_core_requirejs'); } else { - // backend request, having backend user logged in - $requireJsConfig = array_replace_recursive( + // Backend request, having backend user logged in. + // Merge public and private require js configuration. + // Use array_merge for 'packages' definitions (scalar array indexes) and + // merge+replace for other, string array based configuration (like 'path' and 'shim'). + $requireJsConfig = ArrayUtility::replaceAndAppendScalarValuesRecursive( $this->publicRequireJsConfig, $this->requireJsConfig ); diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-91810-IntroduceLit-htmlAndLit-elementAsClient-sideTemplatingEngine.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-91810-IntroduceLit-htmlAndLit-elementAsClient-sideTemplatingEngine.rst new file mode 100644 index 0000000000000000000000000000000000000000..1424077bfde3088792782d9753116d864207217a --- /dev/null +++ b/typo3/sysext/core/Documentation/Changelog/master/Feature-91810-IntroduceLit-htmlAndLit-elementAsClient-sideTemplatingEngine.rst @@ -0,0 +1,162 @@ +.. include:: ../../Includes.txt + +===================================================================================== +Feature: #91810 - Introduce lit-html and lit-element as client-side templating engine +===================================================================================== + +See :issue:`91810` + +Description +=========== + +To avoid custom jQuery template building a new slim client-side templating +engine `lit-html`_ together with `lit-element_` is introduced. + +This templating engine supports conditions, iterations, events, virtual DOM, +data-binding and mutation/change detections in templates. + +.. _lit-html: https://lit-html.polymer-project.org/ +.. _lit-element: https://lit-element.polymer-project.org/ + + +Impact +====== + +Individual client-side templates can be processed in JavaScript directly +using modern web technologies like template-strings_ and template-elements_. + +.. _template-strings: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals +.. _template-elements: https://developer.mozilla.org/de/docs/Web/HTML/Element/template + +Rendering is handled by the AMD-modules `lit-html` and `lit-element`. +Please consult the `lit-html` template-reference_ and lit-element-guide_ for more +information. + +.. _template-reference: https://lit-html.polymer-project.org/guide/template-reference +.. _lit-element-guide: https://lit-element.polymer-project.org/guide + +Examples +======== + +Variable assignment +------------------- + +.. code-block:: ts + + import {html, render} from 'lit-html'; + + const value = 'World'; + const target = document.getElementById('target'); + render(html`<div>Hello ${value}!</div>`, target); + +.. code-block:: html + + <div>Hello World!</div> + +Unsafe tags would have been encoded (e.g. :html:`<b>World</b>` +as :html:`<b>World</b>`). + + +Condition and iteration +----------------------- + +.. code-block:: ts + + import {html, render} from 'lit-html'; + import {classMap} from 'lit-html/directives/class-map.js'; + + const items = ['a', 'b', 'c'] + const classes = { list: true }; + const target = document.getElementById('target'); + const template = html` + <ul class=${classMap(classes)}"> + ${items.map((item: string, index: number): string => { + return html`<li>#${index+1}: ${item}</li>` + })} + </ul> + `; + render(template, target); + +.. code-block:: html + + <ul class="list"> + <li>#1: a</li> + <li>#2: b</li> + <li>#3: c</li> + </ul> + +The :js:`${...}` literal used in template tags can basically contain any +JavaScript instruction - as long as their result can be casted to `string` +again or is of type `lit-html.TemplateResult`. This allows to +make use of custom conditions as well as iterations: + +* condition: :js:`${condition ? thenReturn : elseReturn}` +* iteration: :js:`${array.map((item) => { return item; })}` + + +Events +------ + +Events can be bound using the `@` attribute prefix. + +.. code-block:: ts + + import {html, render} from 'lit-html'; + + const value = 'World'; + const target = document.getElementById('target'); + const template = html` + <div @click="${(evt: Event): void => { console.log(value); })}"> + Hello ${value}! + </div> + `; + render(template, target); + +The result won't look much different than the first example - however the +custom attribute :html:`@click` will be transformed into an according event +listener bound to the element where it has been declared. + +Custom HTML elements +------------------ + +A web component based on the W3C custom elements ("web-components_") specification +can be implemented using `lit-element`. + +.. code-block:: ts + + import {LitElement, html, customElement, property} from 'lit-element'; + + @customElement('my-element') + class MyElement extends LitElement { + + // Declare observed properties + @property() + value: string = 'awesome'; + + // Avoid Shadow DOM so global styles apply to the element contents + createRenderRoot(): Element|ShadowRoot { + return this; + } + + // Define the element's template + render() { + return html`<p>Hello ${this.value}!</p>`; + } + } + +.. code-block:: html + + <my-element value="World"></my-element> + +This is rendered as: + +.. code-block:: html + + <my-element value="World"> + <p>Hellow world!</p> + </my-element> + +.. _web-commponents: https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements + + +.. index:: Backend, JavaScript, ext:backend diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lib/css-tag.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lib/css-tag.js new file mode 100644 index 0000000000000000000000000000000000000000..d01e000f664fd8c4e935d93045fa6d50fe9a0b75 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lib/css-tag.js @@ -0,0 +1,11 @@ +define(["exports"],(function(e){"use strict"; +/** + @license + Copyright (c) 2019 The Polymer Project Authors. All rights reserved. + This code may only be used under the BSD style license found at + http://polymer.github.io/LICENSE.txt The complete set of authors may be found at + http://polymer.github.io/AUTHORS.txt The complete set of contributors may be + found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as + part of the polymer project is also subject to an additional IP rights grant + found at http://polymer.github.io/PATENTS.txt + */const t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,s=Symbol();class n{constructor(e,t){if(t!==s)throw new Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e}get styleSheet(){return void 0===this._styleSheet&&(t?(this._styleSheet=new CSSStyleSheet,this._styleSheet.replaceSync(this.cssText)):this._styleSheet=null),this._styleSheet}toString(){return this.cssText}}e.CSSResult=n,e.css=(e,...t)=>{const o=t.reduce((t,s,o)=>t+(e=>{if(e instanceof n)return e.cssText;if("number"==typeof e)return e;throw new Error(`Value passed to 'css' function must be a 'css' function result: ${e}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`)})(s)+e[o+1],e[0]);return new n(o,s)},e.supportsAdoptingStyleSheets=t,e.unsafeCSS=e=>new n(String(e),s),Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lib/decorators.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lib/decorators.js new file mode 100644 index 0000000000000000000000000000000000000000..041752370c52f9fc8e0af4e4f22fd0e33a45f4f3 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lib/decorators.js @@ -0,0 +1,14 @@ +define(["exports"],(function(e){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const t=(e,t)=>"method"===t.kind&&t.descriptor&&!("value"in t.descriptor)?Object.assign(Object.assign({},t),{finisher(n){n.createProperty(t.key,e)}}):{kind:"field",key:Symbol(),placement:"own",descriptor:{},initializer(){"function"==typeof t.initializer&&(this[t.key]=t.initializer.call(this))},finisher(n){n.createProperty(t.key,e)}};function n(e){return(n,r)=>void 0!==r?((e,t,n)=>{t.constructor.createProperty(n,e)})(e,n,r):t(e,n)}const r=(e,t,n)=>{Object.defineProperty(t,n,e)},o=(e,t)=>({kind:"method",placement:"prototype",key:t.key,descriptor:e});const i=Element.prototype,s=i.msMatchesSelector||i.webkitMatchesSelector;e.customElement=e=>t=>"function"==typeof t?((e,t)=>(window.customElements.define(e,t),t))(e,t):((e,t)=>{const{kind:n,elements:r}=t;return{kind:n,elements:r,finisher(t){window.customElements.define(e,t)}}})(e,t),e.eventOptions=function(e){return(t,n)=>void 0!==n?((e,t,n)=>{Object.assign(t[n],e)})(e,t,n):((e,t)=>Object.assign(Object.assign({},t),{finisher(n){Object.assign(n.prototype[t.key],e)}}))(e,t)},e.internalProperty=function(e){return n({attribute:!1,hasChanged:null==e?void 0:e.hasChanged})},e.property=n,e.query=function(e,t){return(n,i)=>{const s={get(){return this.renderRoot.querySelector(e)},enumerable:!0,configurable:!0};if(t){const t="symbol"==typeof i?Symbol():"__"+i;s.get=function(){return void 0===this[t]&&(this[t]=this.renderRoot.querySelector(e)),this[t]}}return void 0!==i?r(s,n,i):o(s,n)}},e.queryAll=function(e){return(t,n)=>{const i={get(){return this.renderRoot.querySelectorAll(e)},enumerable:!0,configurable:!0};return void 0!==n?r(i,t,n):o(i,t)}},e.queryAssignedNodes=function(e="",t=!1,n=""){return(i,c)=>{const u={get(){const r="slot"+(e?`[name=${e}]`:":not([name])"),o=this.renderRoot.querySelector(r);let i=o&&o.assignedNodes({flatten:t});return i&&n&&(i=i.filter(e=>e.nodeType===Node.ELEMENT_NODE&&e.matches?e.matches(n):s.call(e,n))),i},enumerable:!0,configurable:!0};return void 0!==c?r(u,i,c):o(u,i)}},e.queryAsync=function(e){return(t,n)=>{const i={async get(){return await this.updateComplete,this.renderRoot.querySelector(e)},enumerable:!0,configurable:!0};return void 0!==n?r(i,t,n):o(i,t)}},Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lib/updating-element.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lib/updating-element.js new file mode 100644 index 0000000000000000000000000000000000000000..9760aeea52a9df1b72611eadc39bacae102becc0 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lib/updating-element.js @@ -0,0 +1,14 @@ +define(["exports"],(function(t){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */window.JSCompiler_renameProperty=(t,e)=>t;const e={toAttribute(t,e){switch(e){case Boolean:return t?"":null;case Object:case Array:return null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){switch(e){case Boolean:return null!==t;case Number:return null===t?null:Number(t);case Object:case Array:return JSON.parse(t)}return t}},r=(t,e)=>e!==t&&(e==e||t==t),s={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:r},i="finalized";class a extends HTMLElement{constructor(){super(),this.initialize()}static get observedAttributes(){this.finalize();const t=[];return this._classProperties.forEach((e,r)=>{const s=this._attributeNameForProperty(r,e);void 0!==s&&(this._attributeToPropertyMap.set(s,r),t.push(s))}),t}static _ensureClassProperties(){if(!this.hasOwnProperty(JSCompiler_renameProperty("_classProperties",this))){this._classProperties=new Map;const t=Object.getPrototypeOf(this)._classProperties;void 0!==t&&t.forEach((t,e)=>this._classProperties.set(e,t))}}static createProperty(t,e=s){if(this._ensureClassProperties(),this._classProperties.set(t,e),e.noAccessor||this.prototype.hasOwnProperty(t))return;const r="symbol"==typeof t?Symbol():"__"+t,i=this.getPropertyDescriptor(t,r,e);void 0!==i&&Object.defineProperty(this.prototype,t,i)}static getPropertyDescriptor(t,e,r){return{get(){return this[e]},set(s){const i=this[t];this[e]=s,this.requestUpdateInternal(t,i,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this._classProperties&&this._classProperties.get(t)||s}static finalize(){const t=Object.getPrototypeOf(this);if(t.hasOwnProperty(i)||t.finalize(),this.finalized=!0,this._ensureClassProperties(),this._attributeToPropertyMap=new Map,this.hasOwnProperty(JSCompiler_renameProperty("properties",this))){const t=this.properties,e=[...Object.getOwnPropertyNames(t),..."function"==typeof Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t):[]];for(const r of e)this.createProperty(r,t[r])}}static _attributeNameForProperty(t,e){const r=e.attribute;return!1===r?void 0:"string"==typeof r?r:"string"==typeof t?t.toLowerCase():void 0}static _valueHasChanged(t,e,s=r){return s(t,e)}static _propertyValueFromAttribute(t,r){const s=r.type,i=r.converter||e,a="function"==typeof i?i:i.fromAttribute;return a?a(t,s):t}static _propertyValueToAttribute(t,r){if(void 0===r.reflect)return;const s=r.type,i=r.converter;return(i&&i.toAttribute||e.toAttribute)(t,s)}initialize(){this._updateState=0,this._updatePromise=new Promise(t=>this._enableUpdatingResolver=t),this._changedProperties=new Map,this._saveInstanceProperties(),this.requestUpdateInternal()}_saveInstanceProperties(){this.constructor._classProperties.forEach((t,e)=>{if(this.hasOwnProperty(e)){const t=this[e];delete this[e],this._instanceProperties||(this._instanceProperties=new Map),this._instanceProperties.set(e,t)}})}_applyInstanceProperties(){this._instanceProperties.forEach((t,e)=>this[e]=t),this._instanceProperties=void 0}connectedCallback(){this.enableUpdating()}enableUpdating(){void 0!==this._enableUpdatingResolver&&(this._enableUpdatingResolver(),this._enableUpdatingResolver=void 0)}disconnectedCallback(){}attributeChangedCallback(t,e,r){e!==r&&this._attributeToProperty(t,r)}_propertyToAttribute(t,e,r=s){const i=this.constructor,a=i._attributeNameForProperty(t,r);if(void 0!==a){const t=i._propertyValueToAttribute(e,r);if(void 0===t)return;this._updateState=8|this._updateState,null==t?this.removeAttribute(a):this.setAttribute(a,t),this._updateState=-9&this._updateState}}_attributeToProperty(t,e){if(8&this._updateState)return;const r=this.constructor,s=r._attributeToPropertyMap.get(t);if(void 0!==s){const t=r.getPropertyOptions(s);this._updateState=16|this._updateState,this[s]=r._propertyValueFromAttribute(e,t),this._updateState=-17&this._updateState}}requestUpdateInternal(t,e,r){let s=!0;if(void 0!==t){const i=this.constructor;r=r||i.getPropertyOptions(t),i._valueHasChanged(this[t],e,r.hasChanged)?(this._changedProperties.has(t)||this._changedProperties.set(t,e),!0!==r.reflect||16&this._updateState||(void 0===this._reflectingProperties&&(this._reflectingProperties=new Map),this._reflectingProperties.set(t,r))):s=!1}!this._hasRequestedUpdate&&s&&(this._updatePromise=this._enqueueUpdate())}requestUpdate(t,e){return this.requestUpdateInternal(t,e),this.updateComplete}async _enqueueUpdate(){this._updateState=4|this._updateState;try{await this._updatePromise}catch(t){}const t=this.performUpdate();return null!=t&&await t,!this._hasRequestedUpdate}get _hasRequestedUpdate(){return 4&this._updateState}get hasUpdated(){return 1&this._updateState}performUpdate(){if(!this._hasRequestedUpdate)return;this._instanceProperties&&this._applyInstanceProperties();let t=!1;const e=this._changedProperties;try{t=this.shouldUpdate(e),t?this.update(e):this._markUpdated()}catch(e){throw t=!1,this._markUpdated(),e}t&&(1&this._updateState||(this._updateState=1|this._updateState,this.firstUpdated(e)),this.updated(e))}_markUpdated(){this._changedProperties=new Map,this._updateState=-5&this._updateState}get updateComplete(){return this._getUpdateComplete()}_getUpdateComplete(){return this._updatePromise}shouldUpdate(t){return!0}update(t){void 0!==this._reflectingProperties&&this._reflectingProperties.size>0&&(this._reflectingProperties.forEach((t,e)=>this._propertyToAttribute(e,this[e],t)),this._reflectingProperties=void 0),this._markUpdated()}updated(t){}firstUpdated(t){}}a.finalized=!0,t.UpdatingElement=a,t.defaultConverter=e,t.notEqual=r,Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lit-element.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lit-element.js new file mode 100644 index 0000000000000000000000000000000000000000..0db5bc162e9c1ffea550b6cc40a8fa1576459ac7 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-element/lit-element.js @@ -0,0 +1,14 @@ +define(["exports","lit-html/lib/shady-render","./lib/updating-element","./lib/decorators","lit-html","./lib/css-tag"],(function(e,t,s,n,r,o){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */(window.litElementVersions||(window.litElementVersions=[])).push("2.4.0");const i={};class l extends s.UpdatingElement{static getStyles(){return this.styles}static _getUniqueStyles(){if(this.hasOwnProperty(JSCompiler_renameProperty("_styles",this)))return;const e=this.getStyles();if(Array.isArray(e)){const t=(e,s)=>e.reduceRight((e,s)=>Array.isArray(s)?t(s,e):(e.add(s),e),s),s=t(e,new Set),n=[];s.forEach(e=>n.unshift(e)),this._styles=n}else this._styles=void 0===e?[]:[e];this._styles=this._styles.map(e=>{if(e instanceof CSSStyleSheet&&!o.supportsAdoptingStyleSheets){const t=Array.prototype.slice.call(e.cssRules).reduce((e,t)=>e+t.cssText,"");return o.unsafeCSS(t)}return e})}initialize(){super.initialize(),this.constructor._getUniqueStyles(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const e=this.constructor._styles;0!==e.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?o.supportsAdoptingStyleSheets?this.renderRoot.adoptedStyleSheets=e.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(e.map(e=>e.cssText),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(e){const t=this.render();super.update(e),t!==i&&this.constructor.render(t,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach(e=>{const t=document.createElement("style");t.textContent=e.cssText,this.renderRoot.appendChild(t)}))}render(){return i}}l.finalized=!0,l.render=t.render,e.UpdatingElement=s.UpdatingElement,e.defaultConverter=s.defaultConverter,e.notEqual=s.notEqual,e.customElement=n.customElement,e.eventOptions=n.eventOptions,e.internalProperty=n.internalProperty,e.property=n.property,e.query=n.query,e.queryAll=n.queryAll,e.queryAssignedNodes=n.queryAssignedNodes,e.queryAsync=n.queryAsync,Object.defineProperty(e,"SVGTemplateResult",{enumerable:!0,get:function(){return r.SVGTemplateResult}}),Object.defineProperty(e,"TemplateResult",{enumerable:!0,get:function(){return r.TemplateResult}}),Object.defineProperty(e,"html",{enumerable:!0,get:function(){return r.html}}),Object.defineProperty(e,"svg",{enumerable:!0,get:function(){return r.svg}}),e.CSSResult=o.CSSResult,e.css=o.css,e.supportsAdoptingStyleSheets=o.supportsAdoptingStyleSheets,e.unsafeCSS=o.unsafeCSS,e.LitElement=l,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/async-append.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/async-append.js new file mode 100644 index 0000000000000000000000000000000000000000..a2e69420eb4da0bf4df28eca0b0e0821b2c833d6 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/async-append.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/template","../lib/parts","../lit-html"],(function(e,t,r,n,o){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */var a=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(r){t[r]=e[r]&&function(t){return new Promise((function(n,o){(function(e,t,r,n){Promise.resolve(n).then((function(t){e({value:t,done:r})}),t)})(n,o,(t=e[r](t)).done,t.value)}))}}};const i=t.directive((e,t)=>async o=>{var i,l;if(!(o instanceof n.NodePart))throw new Error("asyncAppend can only be used in text bindings");if(e===o.value)return;let c;o.value=e;let d=0;try{for(var s,u=a(e);!(s=await u.next()).done;){let a=s.value;if(o.value!==e)break;0===d&&o.clear(),void 0!==t&&(a=t(a,d));let i=o.startNode;void 0!==c&&(i=r.createMarker(),c.endNode=i,o.endNode.parentNode.insertBefore(i,o.endNode)),c=new n.NodePart(o.options),c.insertAfterNode(i),c.setValue(a),c.commit(),d++}}catch(e){i={error:e}}finally{try{s&&!s.done&&(l=u.return)&&await l.call(u)}finally{if(i)throw i.error}}});e.asyncAppend=i,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/async-replace.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/async-replace.js new file mode 100644 index 0000000000000000000000000000000000000000..d9f3c76783c14b8e4ba8ddb45c04b1f5d4483428 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/async-replace.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/parts","../lit-html"],(function(e,t,n,r){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */var o=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,o){(function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)})(r,o,(t=e[n](t)).done,t.value)}))}}};const a=t.directive((e,t)=>async r=>{var a,i;if(!(r instanceof n.NodePart))throw new Error("asyncReplace can only be used in text bindings");if(e===r.value)return;const l=new n.NodePart(r.options);r.value=e;let c=0;try{for(var u,s=o(e);!(u=await s.next()).done;){let n=u.value;if(r.value!==e)break;0===c&&(r.clear(),l.appendIntoPart(r)),void 0!==t&&(n=t(n,c)),l.setValue(n),l.commit(),c++}}catch(e){a={error:e}}finally{try{u&&!u.done&&(i=s.return)&&await i.call(s)}finally{if(a)throw a.error}}});e.asyncReplace=a,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/cache.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/cache.js new file mode 100644 index 0000000000000000000000000000000000000000..8f5a0f6d5e7c643c14e42c62293ffda5fa432b1d --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/cache.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/dom","../lib/template-instance","../lib/template-result","../lib/parts","../lit-html"],(function(e,t,n,a,i,o,s){"use strict"; +/** + * @license + * Copyright (c) 2018 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const l=new WeakMap,c=t.directive(e=>t=>{if(!(t instanceof o.NodePart))throw new Error("cache can only be used in text bindings");let s=l.get(t);void 0===s&&(s=new WeakMap,l.set(t,s));const c=t.value;if(c instanceof a.TemplateInstance){if(e instanceof i.TemplateResult&&c.template===t.options.templateFactory(e))return void t.setValue(e);{let e=s.get(c.template);void 0===e&&(e={instance:c,nodes:document.createDocumentFragment()},s.set(c.template,e)),n.reparentNodes(e.nodes,t.startNode.nextSibling,t.endNode)}}if(e instanceof i.TemplateResult){const n=t.options.templateFactory(e),a=s.get(n);void 0!==a&&(t.setValue(a.nodes),t.commit(),t.value=a.instance)}t.setValue(e)});e.cache=c,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/class-map.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/class-map.js new file mode 100644 index 0000000000000000000000000000000000000000..63bfea07b766840cdacc8ab07af2aa6e581c99c3 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/class-map.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/parts","../lit-html"],(function(t,e,s,i){"use strict"; +/** + * @license + * Copyright (c) 2018 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */class c{constructor(t){this.classes=new Set,this.changed=!1,this.element=t;const e=(t.getAttribute("class")||"").split(/\s+/);for(const t of e)this.classes.add(t)}add(t){this.classes.add(t),this.changed=!0}remove(t){this.classes.delete(t),this.changed=!0}commit(){if(this.changed){let t="";this.classes.forEach(e=>t+=e+" "),this.element.setAttribute("class",t)}}}const a=new WeakMap,n=e.directive(t=>e=>{if(!(e instanceof s.AttributePart)||e instanceof s.PropertyPart||"class"!==e.committer.name||e.committer.parts.length>1)throw new Error("The `classMap` directive must be used in the `class` attribute and must be the only part in the attribute.");const{committer:i}=e,{element:n}=i;let o=a.get(e);void 0===o&&(n.setAttribute("class",i.strings.join(" ")),a.set(e,o=new Set));const r=n.classList||new c(n);o.forEach(e=>{e in t||(r.remove(e),o.delete(e))});for(const e in t){const s=t[e];s!=o.has(e)&&(s?(r.add(e),o.add(e)):(r.remove(e),o.delete(e)))}"function"==typeof r.commit&&r.commit()});t.classMap=n,Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/guard.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/guard.js new file mode 100644 index 0000000000000000000000000000000000000000..d77a4500b3bdc1430015730b059757df64c6b855 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/guard.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lit-html"],(function(e,r,t){"use strict"; +/** + * @license + * Copyright (c) 2018 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const i=new WeakMap,a=r.directive((e,r)=>t=>{const a=i.get(t);if(Array.isArray(e)){if(Array.isArray(a)&&a.length===e.length&&e.every((e,r)=>e===a[r]))return}else if(a===e&&(void 0!==e||i.has(t)))return;t.setValue(r()),i.set(t,Array.isArray(e)?Array.from(e):e)});e.guard=a,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/if-defined.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/if-defined.js new file mode 100644 index 0000000000000000000000000000000000000000..409278ed4c9737f1d0a2043cfa607a1e27918a8f --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/if-defined.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/parts","../lit-html"],(function(e,t,i,n){"use strict"; +/** + * @license + * Copyright (c) 2018 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const o=new WeakMap,r=t.directive(e=>t=>{const n=o.get(t);if(void 0===e&&t instanceof i.AttributePart){if(void 0!==n||!o.has(t)){const e=t.committer.name;t.committer.element.removeAttribute(e)}}else e!==n&&t.setValue(e);o.set(t,e)});e.ifDefined=r,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/live.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/live.js new file mode 100644 index 0000000000000000000000000000000000000000..9af28b4160a5a7dfcc871bcfba27071976ebc9a1 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/live.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/parts","../lit-html"],(function(e,t,i,n){"use strict"; +/** + * @license + * Copyright (c) 2020 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const r=t.directive(e=>t=>{let n;if(t instanceof i.EventPart||t instanceof i.NodePart)throw new Error("The `live` directive is not allowed on text or event bindings");if(t instanceof i.BooleanAttributePart)o(t.strings),n=t.element.hasAttribute(t.name),t.value=n;else{const{element:r,name:s,strings:a}=t.committer;if(o(a),t instanceof i.PropertyPart){if(n=r[s],n===e)return}else t instanceof i.AttributePart&&(n=r.getAttribute(s));if(n===String(e))return}t.setValue(e)}),o=e=>{if(2!==e.length||""!==e[0]||""!==e[1])throw new Error("`live` bindings can only contain a single expression")};e.live=r,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/repeat.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/repeat.js new file mode 100644 index 0000000000000000000000000000000000000000..4c19005a91cbe48ea66451c13e4914a01c5e7be1 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/repeat.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/dom","../lib/template","../lib/parts","../lit-html"],(function(e,t,o,n,r,s){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const i=(e,t)=>{const o=e.startNode.parentNode,s=void 0===t?e.endNode:t.startNode,i=o.insertBefore(n.createMarker(),s);o.insertBefore(n.createMarker(),s);const l=new r.NodePart(e.options);return l.insertAfterNode(i),l},l=(e,t)=>(e.setValue(t),e.commit(),e),d=(e,t,n)=>{const r=e.startNode.parentNode,s=n?n.startNode:e.endNode,i=t.endNode.nextSibling;i!==s&&o.reparentNodes(r,t.startNode,i,s)},a=e=>{o.removeNodes(e.startNode.parentNode,e.startNode,e.endNode.nextSibling)},f=(e,t,o)=>{const n=new Map;for(let r=t;r<=o;r++)n.set(e[r],r);return n},c=new WeakMap,N=new WeakMap,u=t.directive((e,t,o)=>{let n;return void 0===o?o=t:void 0!==t&&(n=t),t=>{if(!(t instanceof r.NodePart))throw new Error("repeat can only be used in text bindings");const s=c.get(t)||[],u=N.get(t)||[],p=[],b=[],v=[];let g,h,m=0;for(const t of e)v[m]=n?n(t,m):m,b[m]=o(t,m),m++;let w=0,M=s.length-1,k=0,x=b.length-1;for(;w<=M&&k<=x;)if(null===s[w])w++;else if(null===s[M])M--;else if(u[w]===v[k])p[k]=l(s[w],b[k]),w++,k++;else if(u[M]===v[x])p[x]=l(s[M],b[x]),M--,x--;else if(u[w]===v[x])p[x]=l(s[w],b[x]),d(t,s[w],p[x+1]),w++,x--;else if(u[M]===v[k])p[k]=l(s[M],b[k]),d(t,s[M],s[w]),M--,k++;else if(void 0===g&&(g=f(v,k,x),h=f(u,w,M)),g.has(u[w]))if(g.has(u[M])){const e=h.get(v[k]),o=void 0!==e?s[e]:null;if(null===o){const e=i(t,s[w]);l(e,b[k]),p[k]=e}else p[k]=l(o,b[k]),d(t,o,s[w]),s[e]=null;k++}else a(s[M]),M--;else a(s[w]),w++;for(;k<=x;){const e=i(t,p[x+1]);l(e,b[k]),p[k++]=e}for(;w<=M;){const e=s[w++];null!==e&&a(e)}c.set(t,p),N.set(t,v)}});e.repeat=u,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/style-map.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/style-map.js new file mode 100644 index 0000000000000000000000000000000000000000..7df67d1036a5906e3d2f90a117b8813d2727c0e1 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/style-map.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/parts","../lit-html"],(function(e,t,r,i){"use strict"; +/** + * @license + * Copyright (c) 2018 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const n=new WeakMap,s=t.directive(e=>t=>{if(!(t instanceof r.AttributePart)||t instanceof r.PropertyPart||"style"!==t.committer.name||t.committer.parts.length>1)throw new Error("The `styleMap` directive must be used in the style attribute and must be the only part in the attribute.");const{committer:i}=t,{style:s}=i.element;let o=n.get(t);void 0===o&&(s.cssText=i.strings.join(" "),n.set(t,o=new Set)),o.forEach(t=>{t in e||(o.delete(t),-1===t.indexOf("-")?s[t]=null:s.removeProperty(t))});for(const t in e)o.add(t),-1===t.indexOf("-")?s[t]=e[t]:s.setProperty(t,e[t])});e.styleMap=s,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/template-content.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/template-content.js new file mode 100644 index 0000000000000000000000000000000000000000..de2a61659d937e2f7f10b3b53f45a4430c7fb70a --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/template-content.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/parts","../lit-html"],(function(e,t,n,i){"use strict"; +/** + * @license + * Copyright (c) 2020 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const o=new WeakMap,r=t.directive(e=>t=>{if(!(t instanceof n.NodePart))throw new Error("templateContent can only be used in text bindings");const i=o.get(t);if(void 0!==i&&e===i.template&&t.value===i.fragment)return;const r=document.importNode(e.content,!0);t.setValue(r),o.set(t,{template:e,fragment:r})});e.templateContent=r,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/unsafe-html.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/unsafe-html.js new file mode 100644 index 0000000000000000000000000000000000000000..7590c4d5ccea766ce9f9763dced4cf36d6f3a269 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/unsafe-html.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/parts","../lit-html"],(function(e,t,n,i){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const r=new WeakMap,o=t.directive(e=>t=>{if(!(t instanceof n.NodePart))throw new Error("unsafeHTML can only be used in text bindings");const i=r.get(t);if(void 0!==i&&n.isPrimitive(e)&&e===i.value&&t.value===i.fragment)return;const o=document.createElement("template");o.innerHTML=e;const a=document.importNode(o.content,!0);t.setValue(a),r.set(t,{value:e,fragment:a})});e.unsafeHTML=o,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/unsafe-svg.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/unsafe-svg.js new file mode 100644 index 0000000000000000000000000000000000000000..3ed8bbf6fc4a0e928306d3ff6948fddf030cc98e --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/unsafe-svg.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/dom","../lib/parts","../lit-html"],(function(e,t,n,i,r){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const o=new WeakMap,s=window.navigator.userAgent.indexOf("Trident/")>0,d=t.directive(e=>t=>{if(!(t instanceof i.NodePart))throw new Error("unsafeSVG can only be used in text bindings");const r=o.get(t);if(void 0!==r&&i.isPrimitive(e)&&e===r.value&&t.value===r.fragment)return;const d=document.createElement("template"),a=d.content;let l;s?(d.innerHTML=`<svg>${e}</svg>`,l=a.firstChild):(l=document.createElementNS("http://www.w3.org/2000/svg","svg"),a.appendChild(l),l.innerHTML=e),a.removeChild(l),n.reparentNodes(a,l.firstChild);const c=document.importNode(a,!0);t.setValue(c),o.set(t,{value:e,fragment:c})});e.unsafeSVG=d,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/until.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/until.js new file mode 100644 index 0000000000000000000000000000000000000000..d2243cbca8d939ce30c574e2cda80616465352c3 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/directives/until.js @@ -0,0 +1,14 @@ +define(["exports","../lib/directive","../lib/parts","../lit-html"],(function(e,t,n,d){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const l=new WeakMap,s=2147483647,i=t.directive((...e)=>t=>{let d=l.get(t);void 0===d&&(d={lastRenderedIndex:s,values:[]},l.set(t,d));const i=d.values;let r=i.length;d.values=e;for(let l=0;l<e.length&&!(l>d.lastRenderedIndex);l++){const a=e[l];if(n.isPrimitive(a)||"function"!=typeof a.then){t.setValue(a),d.lastRenderedIndex=l;break}l<r&&a===i[l]||(d.lastRenderedIndex=s,r=0,Promise.resolve(a).then(e=>{const n=d.values.indexOf(a);n>-1&&n<d.lastRenderedIndex&&(d.lastRenderedIndex=n,t.setValue(e),t.commit())}))}});e.until=i,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/default-template-processor.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/default-template-processor.js new file mode 100644 index 0000000000000000000000000000000000000000..8ef364477a8052a6859c66f27124fe53c0f74765 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/default-template-processor.js @@ -0,0 +1,14 @@ +define(["exports","./parts"],(function(e,t){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */class r{handleAttributeExpressions(e,r,n,s){const o=r[0];if("."===o){return new t.PropertyCommitter(e,r.slice(1),n).parts}if("@"===o)return[new t.EventPart(e,r.slice(1),s.eventContext)];if("?"===o)return[new t.BooleanAttributePart(e,r.slice(1),n)];return new t.AttributeCommitter(e,r,n).parts}handleTextExpression(e){return new t.NodePart(e)}}const n=new r;e.DefaultTemplateProcessor=r,e.defaultTemplateProcessor=n,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/directive.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/directive.js new file mode 100644 index 0000000000000000000000000000000000000000..a0c903b6b9f1b87125419091ce46d834ee2db8a6 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/directive.js @@ -0,0 +1,14 @@ +define(["exports"],(function(e){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const t=new WeakMap;e.directive=e=>(...i)=>{const n=e(...i);return t.set(n,!0),n},e.isDirective=e=>"function"==typeof e&&t.has(e),Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/dom.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/dom.js new file mode 100644 index 0000000000000000000000000000000000000000..8223065df3d3325ddaea19effda44f23553a8e76 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/dom.js @@ -0,0 +1,14 @@ +define(["exports"],(function(e){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const l="undefined"!=typeof window&&null!=window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback;e.isCEPolyfill=l,e.removeNodes=(e,l,n=null)=>{for(;l!==n;){const n=l.nextSibling;e.removeChild(l),l=n}},e.reparentNodes=(e,l,n=null,o=null)=>{for(;l!==n;){const n=l.nextSibling;e.insertBefore(l,o),l=n}},Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/modify-template.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/modify-template.js new file mode 100644 index 0000000000000000000000000000000000000000..d2e8961b37186c8a15f423c1baebc8b1d60664e5 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/modify-template.js @@ -0,0 +1,14 @@ +define(["exports","./template"],(function(e,n){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const t=e=>{let n=11===e.nodeType?0:1;const t=document.createTreeWalker(e,133,null,!1);for(;t.nextNode();)n++;return n},r=(e,t=-1)=>{for(let r=t+1;r<e.length;r++){const t=e[r];if(n.isTemplatePartActive(t))return r}return-1};e.insertNodeIntoTemplate=function(e,n,o=null){const{element:{content:l},parts:u}=e;if(null==o)return void l.appendChild(n);const d=document.createTreeWalker(l,133,null,!1);let c=r(u),i=0,s=-1;for(;d.nextNode();){s++;for(d.currentNode===o&&(i=t(n),o.parentNode.insertBefore(n,o));-1!==c&&u[c].index===s;){if(i>0){for(;-1!==c;)u[c].index+=i,c=r(u,c);return}c=r(u,c)}}},e.removeNodesFromTemplate=function(e,n){const{element:{content:t},parts:o}=e,l=document.createTreeWalker(t,133,null,!1);let u=r(o),d=o[u],c=-1,i=0;const s=[];let a=null;for(;l.nextNode();){c++;const e=l.currentNode;for(e.previousSibling===a&&(a=null),n.has(e)&&(s.push(e),null===a&&(a=e)),null!==a&&i++;void 0!==d&&d.index===c;)d.index=null!==a?-1:d.index-i,u=r(o,u),d=o[u]}s.forEach(e=>e.parentNode.removeChild(e))},Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/part.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/part.js new file mode 100644 index 0000000000000000000000000000000000000000..51c3f5ed8a53e03ff12c90641d9d1ebc20eb50e1 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/part.js @@ -0,0 +1,14 @@ +define(["exports"],(function(e){"use strict"; +/** + * @license + * Copyright (c) 2018 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */e.noChange={},e.nothing={},Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/parts.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/parts.js new file mode 100644 index 0000000000000000000000000000000000000000..8d744b1340bd0e6f74d6928f1266073befae402c --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/parts.js @@ -0,0 +1,14 @@ +define(["exports","./directive","./dom","./part","./template","./template-instance","./template-result"],(function(t,e,i,s,n,a,o){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const r=t=>null===t||!("object"==typeof t||"function"==typeof t),h=t=>Array.isArray(t)||!(!t||!t[Symbol.iterator]);class l{constructor(t,e,i){this.dirty=!0,this.element=t,this.name=e,this.strings=i,this.parts=[];for(let t=0;t<i.length-1;t++)this.parts[t]=this._createPart()}_createPart(){return new u(this)}_getValue(){const t=this.strings,e=t.length-1,i=this.parts;if(1===e&&""===t[0]&&""===t[1]){const t=i[0].value;if("symbol"==typeof t)return String(t);if("string"==typeof t||!h(t))return t}let s="";for(let n=0;n<e;n++){s+=t[n];const e=i[n];if(void 0!==e){const t=e.value;if(r(t)||!h(t))s+="string"==typeof t?t:String(t);else for(const e of t)s+="string"==typeof e?e:String(e)}}return s+=t[e],s}commit(){this.dirty&&(this.dirty=!1,this.element.setAttribute(this.name,this._getValue()))}}class u{constructor(t){this.value=void 0,this.committer=t}setValue(t){t===s.noChange||r(t)&&t===this.value||(this.value=t,e.isDirective(t)||(this.committer.dirty=!0))}commit(){for(;e.isDirective(this.value);){const t=this.value;this.value=s.noChange,t(this)}this.value!==s.noChange&&this.committer.commit()}}class d{constructor(t){this.value=void 0,this.__pendingValue=void 0,this.options=t}appendInto(t){this.startNode=t.appendChild(n.createMarker()),this.endNode=t.appendChild(n.createMarker())}insertAfterNode(t){this.startNode=t,this.endNode=t.nextSibling}appendIntoPart(t){t.__insert(this.startNode=n.createMarker()),t.__insert(this.endNode=n.createMarker())}insertAfterPart(t){t.__insert(this.startNode=n.createMarker()),this.endNode=t.endNode,t.endNode=this.startNode}setValue(t){this.__pendingValue=t}commit(){if(null===this.startNode.parentNode)return;for(;e.isDirective(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=s.noChange,t(this)}const t=this.__pendingValue;t!==s.noChange&&(r(t)?t!==this.value&&this.__commitText(t):t instanceof o.TemplateResult?this.__commitTemplateResult(t):t instanceof Node?this.__commitNode(t):h(t)?this.__commitIterable(t):t===s.nothing?(this.value=s.nothing,this.clear()):this.__commitText(t))}__insert(t){this.endNode.parentNode.insertBefore(t,this.endNode)}__commitNode(t){this.value!==t&&(this.clear(),this.__insert(t),this.value=t)}__commitText(t){const e=this.startNode.nextSibling,i="string"==typeof(t=null==t?"":t)?t:String(t);e===this.endNode.previousSibling&&3===e.nodeType?e.data=i:this.__commitNode(document.createTextNode(i)),this.value=t}__commitTemplateResult(t){const e=this.options.templateFactory(t);if(this.value instanceof a.TemplateInstance&&this.value.template===e)this.value.update(t.values);else{const i=new a.TemplateInstance(e,t.processor,this.options),s=i._clone();i.update(t.values),this.__commitNode(s),this.value=i}}__commitIterable(t){Array.isArray(this.value)||(this.value=[],this.clear());const e=this.value;let i,s=0;for(const n of t)i=e[s],void 0===i&&(i=new d(this.options),e.push(i),0===s?i.appendIntoPart(this):i.insertAfterPart(e[s-1])),i.setValue(n),i.commit(),s++;s<e.length&&(e.length=s,this.clear(i&&i.endNode))}clear(t=this.startNode){i.removeNodes(this.startNode.parentNode,t.nextSibling,this.endNode)}}class c extends u{}let _=!1;(()=>{try{const t={get capture(){return _=!0,!1}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){}})();const p=t=>t&&(_?{capture:t.capture,passive:t.passive,once:t.once}:t.capture);t.AttributeCommitter=l,t.AttributePart=u,t.BooleanAttributePart=class{constructor(t,e,i){if(this.value=void 0,this.__pendingValue=void 0,2!==i.length||""!==i[0]||""!==i[1])throw new Error("Boolean attributes can only contain a single expression");this.element=t,this.name=e,this.strings=i}setValue(t){this.__pendingValue=t}commit(){for(;e.isDirective(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=s.noChange,t(this)}if(this.__pendingValue===s.noChange)return;const t=!!this.__pendingValue;this.value!==t&&(t?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name),this.value=t),this.__pendingValue=s.noChange}},t.EventPart=class{constructor(t,e,i){this.value=void 0,this.__pendingValue=void 0,this.element=t,this.eventName=e,this.eventContext=i,this.__boundHandleEvent=t=>this.handleEvent(t)}setValue(t){this.__pendingValue=t}commit(){for(;e.isDirective(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=s.noChange,t(this)}if(this.__pendingValue===s.noChange)return;const t=this.__pendingValue,i=this.value,n=null==t||null!=i&&(t.capture!==i.capture||t.once!==i.once||t.passive!==i.passive),a=null!=t&&(null==i||n);n&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),a&&(this.__options=p(t),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=t,this.__pendingValue=s.noChange}handleEvent(t){"function"==typeof this.value?this.value.call(this.eventContext||this.element,t):this.value.handleEvent(t)}},t.NodePart=d,t.PropertyCommitter=class extends l{constructor(t,e,i){super(t,e,i),this.single=2===i.length&&""===i[0]&&""===i[1]}_createPart(){return new c(this)}_getValue(){return this.single?this.parts[0].value:super._getValue()}commit(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}},t.PropertyPart=c,t.isIterable=h,t.isPrimitive=r,Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/render.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/render.js new file mode 100644 index 0000000000000000000000000000000000000000..5fa5dea466280e0614c0437f8ae29bace9c62fe7 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/render.js @@ -0,0 +1,14 @@ +define(["exports","./dom","./parts","./template-factory"],(function(e,t,a,o){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const r=new WeakMap;e.parts=r,e.render=(e,s,n)=>{let d=r.get(s);void 0===d&&(t.removeNodes(s,s.firstChild),r.set(s,d=new a.NodePart(Object.assign({templateFactory:o.templateFactory},n))),d.appendInto(s)),d.setValue(e),d.commit()},Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/shady-render.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/shady-render.js new file mode 100644 index 0000000000000000000000000000000000000000..d8833823a185cffc30708711a91e06cfd82611ad --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/shady-render.js @@ -0,0 +1,14 @@ +define(["exports","./dom","./template","./template-instance","./template-result","./template-factory","./render","../lit-html","./modify-template"],(function(e,t,n,o,r,s,a,l,d){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const i=(e,t)=>`${e}--${t}`;let m=!0;void 0===window.ShadyCSS?m=!1:void 0===window.ShadyCSS.prepareTemplateDom&&(console.warn("Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1."),m=!1);const c=e=>t=>{const o=i(t.type,e);let r=s.templateCaches.get(o);void 0===r&&(r={stringsArray:new WeakMap,keyString:new Map},s.templateCaches.set(o,r));let a=r.stringsArray.get(t.strings);if(void 0!==a)return a;const l=t.strings.join(n.marker);if(a=r.keyString.get(l),void 0===a){const o=t.getTemplateElement();m&&window.ShadyCSS.prepareTemplateDom(o,e),a=new n.Template(t,o),r.keyString.set(l,a)}return r.stringsArray.set(t.strings,a),a},p=["html","svg"],S=new Set,y=(e,t,n)=>{S.add(e);const o=n?n.element:document.createElement("template"),r=t.querySelectorAll("style"),{length:a}=r;if(0===a)return void window.ShadyCSS.prepareTemplateStyles(o,e);const l=document.createElement("style");for(let e=0;e<a;e++){const t=r[e];t.parentNode.removeChild(t),l.textContent+=t.textContent}(e=>{p.forEach(t=>{const n=s.templateCaches.get(i(t,e));void 0!==n&&n.keyString.forEach(e=>{const{element:{content:t}}=e,n=new Set;Array.from(t.querySelectorAll("style")).forEach(e=>{n.add(e)}),d.removeNodesFromTemplate(e,n)})})})(e);const m=o.content;n?d.insertNodeIntoTemplate(n,l,m.firstChild):m.insertBefore(l,m.firstChild),window.ShadyCSS.prepareTemplateStyles(o,e);const c=m.querySelector("style");if(window.ShadyCSS.nativeShadow&&null!==c)t.insertBefore(c.cloneNode(!0),t.firstChild);else if(n){m.insertBefore(l,m.firstChild);const e=new Set;e.add(l),d.removeNodesFromTemplate(n,e)}};e.TemplateResult=r.TemplateResult,e.html=l.html,e.svg=l.svg,e.render=(e,n,r)=>{if(!r||"object"!=typeof r||!r.scopeName)throw new Error("The `scopeName` option is required.");const s=r.scopeName,l=a.parts.has(n),d=m&&11===n.nodeType&&!!n.host,i=d&&!S.has(s),p=i?document.createDocumentFragment():n;if(a.render(e,p,Object.assign({templateFactory:c(s)},r)),i){const e=a.parts.get(p);a.parts.delete(p);const r=e.value instanceof o.TemplateInstance?e.value.template:void 0;y(s,p,r),t.removeNodes(n,n.firstChild),n.appendChild(p),a.parts.set(n,e)}!l&&d&&window.ShadyCSS.styleElement(n.host)},e.shadyTemplateFactory=c,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template-factory.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template-factory.js new file mode 100644 index 0000000000000000000000000000000000000000..77dbd6a218bd5596a0a6f9e68b54418e8b5d1137 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template-factory.js @@ -0,0 +1,14 @@ +define(["exports","./template"],(function(e,t){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const r=new Map;e.templateCaches=r,e.templateFactory=function(e){let n=r.get(e.type);void 0===n&&(n={stringsArray:new WeakMap,keyString:new Map},r.set(e.type,n));let s=n.stringsArray.get(e.strings);if(void 0!==s)return s;const i=e.strings.join(t.marker);return s=n.keyString.get(i),void 0===s&&(s=new t.Template(e,e.getTemplateElement()),n.keyString.set(i,s)),n.stringsArray.set(e.strings,s),s},Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template-instance.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template-instance.js new file mode 100644 index 0000000000000000000000000000000000000000..6cf470d177771a9ae37e734811881b0c9c4ec110 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template-instance.js @@ -0,0 +1,14 @@ +define(["exports","./dom","./template"],(function(e,t,s){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */e.TemplateInstance=class{constructor(e,t,s){this.__parts=[],this.template=e,this.processor=t,this.options=s}update(e){let t=0;for(const s of this.__parts)void 0!==s&&s.setValue(e[t]),t++;for(const e of this.__parts)void 0!==e&&e.commit()}_clone(){const e=t.isCEPolyfill?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),o=[],n=this.template.parts,i=document.createTreeWalker(e,133,null,!1);let r,p=0,l=0,a=i.nextNode();for(;p<n.length;)if(r=n[p],s.isTemplatePartActive(r)){for(;l<r.index;)l++,"TEMPLATE"===a.nodeName&&(o.push(a),i.currentNode=a.content),null===(a=i.nextNode())&&(i.currentNode=o.pop(),a=i.nextNode());if("node"===r.type){const e=this.processor.handleTextExpression(this.options);e.insertAfterNode(a.previousSibling),this.__parts.push(e)}else this.__parts.push(...this.processor.handleAttributeExpressions(a,r.name,r.strings,this.options));p++}else this.__parts.push(void 0),p++;return t.isCEPolyfill&&(document.adoptNode(e),customElements.upgrade(e)),e}},Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template-result.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template-result.js new file mode 100644 index 0000000000000000000000000000000000000000..2f0b3a194712e0bb9a8604fb0544c2763e2af427 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template-result.js @@ -0,0 +1,14 @@ +define(["exports","./dom","./template"],(function(e,t,s){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const r=window.trustedTypes&&trustedTypes.createPolicy("lit-html",{createHTML:e=>e}),n=` ${s.marker} `;class l{constructor(e,t,s,r){this.strings=e,this.values=t,this.type=s,this.processor=r}getHTML(){const e=this.strings.length-1;let t="",r=!1;for(let l=0;l<e;l++){const e=this.strings[l],i=e.lastIndexOf("\x3c!--");r=(i>-1||r)&&-1===e.indexOf("--\x3e",i+1);const o=s.lastAttributeNameRegex.exec(e);t+=null===o?e+(r?n:s.nodeMarker):e.substr(0,o.index)+o[1]+o[2]+s.boundAttributeSuffix+o[3]+s.marker}return t+=this.strings[e],t}getTemplateElement(){const e=document.createElement("template");let t=this.getHTML();return void 0!==r&&(t=r.createHTML(t)),e.innerHTML=t,e}}e.SVGTemplateResult=class extends l{getHTML(){return`<svg>${super.getHTML()}</svg>`}getTemplateElement(){const e=super.getTemplateElement(),s=e.content,r=s.firstChild;return s.removeChild(r),t.reparentNodes(s,r.firstChild),e}},e.TemplateResult=l,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template.js new file mode 100644 index 0000000000000000000000000000000000000000..39b36c4ba52b02151a5919afde587939ab9b3d42 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lib/template.js @@ -0,0 +1,14 @@ +define(["exports"],(function(e){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */const t=`{{lit-${String(Math.random()).slice(2)}}}`,n=`\x3c!--${t}--\x3e`,s=new RegExp(`${t}|${n}`),r="$lit$";const o=(e,t)=>{const n=e.length-t.length;return n>=0&&e.slice(n)===t},i=()=>document.createComment(""),a=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/;e.Template=class{constructor(e,n){this.parts=[],this.element=n;const l=[],c=[],d=document.createTreeWalker(n.content,133,null,!1);let x=0,u=-1,p=0;const{strings:f,values:{length:h}}=e;for(;p<h;){const e=d.nextNode();if(null!==e){if(u++,1===e.nodeType){if(e.hasAttributes()){const t=e.attributes,{length:n}=t;let i=0;for(let e=0;e<n;e++)o(t[e].name,r)&&i++;for(;i-- >0;){const t=f[p],n=a.exec(t)[2],o=n.toLowerCase()+r,i=e.getAttribute(o);e.removeAttribute(o);const l=i.split(s);this.parts.push({type:"attribute",index:u,name:n,strings:l}),p+=l.length-1}}"TEMPLATE"===e.tagName&&(c.push(e),d.currentNode=e.content)}else if(3===e.nodeType){const n=e.data;if(n.indexOf(t)>=0){const t=e.parentNode,c=n.split(s),d=c.length-1;for(let n=0;n<d;n++){let s,l=c[n];if(""===l)s=i();else{const e=a.exec(l);null!==e&&o(e[2],r)&&(l=l.slice(0,e.index)+e[1]+e[2].slice(0,-r.length)+e[3]),s=document.createTextNode(l)}t.insertBefore(s,e),this.parts.push({type:"node",index:++u})}""===c[d]?(t.insertBefore(i(),e),l.push(e)):e.data=c[d],p+=d}}else if(8===e.nodeType)if(e.data===t){const t=e.parentNode;null!==e.previousSibling&&u!==x||(u++,t.insertBefore(i(),e)),x=u,this.parts.push({type:"node",index:u}),null===e.nextSibling?e.data="":(l.push(e),u--),p++}else{let n=-1;for(;-1!==(n=e.data.indexOf(t,n+1));)this.parts.push({type:"node",index:-1}),p++}}else d.currentNode=c.pop()}for(const e of l)e.parentNode.removeChild(e)}},e.boundAttributeSuffix=r,e.createMarker=i,e.isTemplatePartActive=e=>-1!==e.index,e.lastAttributeNameRegex=a,e.marker=t,e.markerRegex=s,e.nodeMarker=n,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lit-html.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lit-html.js new file mode 100644 index 0000000000000000000000000000000000000000..15ec41541ab3030a62ddf9f195c19190c0a69658 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/lit-html/lit-html.js @@ -0,0 +1,14 @@ +define(["exports","./lib/directive","./lib/dom","./lib/part","./lib/template","./lib/template-instance","./lib/template-result","./lib/parts","./lib/default-template-processor","./lib/template-factory","./lib/render"],(function(e,t,r,a,l,i,o,s,m,p,n){"use strict"; +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */"undefined"!=typeof window&&(window.litHtmlVersions||(window.litHtmlVersions=[])).push("1.3.0");e.directive=t.directive,e.isDirective=t.isDirective,e.removeNodes=r.removeNodes,e.reparentNodes=r.reparentNodes,e.noChange=a.noChange,e.nothing=a.nothing,e.Template=l.Template,e.createMarker=l.createMarker,e.isTemplatePartActive=l.isTemplatePartActive,e.TemplateInstance=i.TemplateInstance,e.SVGTemplateResult=o.SVGTemplateResult,e.TemplateResult=o.TemplateResult,e.AttributeCommitter=s.AttributeCommitter,e.AttributePart=s.AttributePart,e.BooleanAttributePart=s.BooleanAttributePart,e.EventPart=s.EventPart,e.NodePart=s.NodePart,e.PropertyCommitter=s.PropertyCommitter,e.PropertyPart=s.PropertyPart,e.isIterable=s.isIterable,e.isPrimitive=s.isPrimitive,e.DefaultTemplateProcessor=m.DefaultTemplateProcessor,e.defaultTemplateProcessor=m.defaultTemplateProcessor,e.templateCaches=p.templateCaches,e.templateFactory=p.templateFactory,e.parts=n.parts,e.render=n.render,e.html=(e,...t)=>new o.TemplateResult(e,t,"html",m.defaultTemplateProcessor),e.svg=(e,...t)=>new o.SVGTemplateResult(e,t,"svg",m.defaultTemplateProcessor),Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/typo3/sysext/core/Resources/Public/JavaScript/lit-helper.js b/typo3/sysext/core/Resources/Public/JavaScript/lit-helper.js new file mode 100644 index 0000000000000000000000000000000000000000..ba9d83010e8acb9e64ee922474b824de90ecdc12 --- /dev/null +++ b/typo3/sysext/core/Resources/Public/JavaScript/lit-helper.js @@ -0,0 +1,13 @@ +/* + * This file is part of the TYPO3 CMS project. + * + * It is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, either version 2 + * of the License, or any later version. + * + * For the full copyright and license information, please read the + * LICENSE.txt file that was distributed with this source code. + * + * The TYPO3 project - inspiring people to share! + */ +define(["require","exports","lit-html"],(function(e,r,n){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.renderHTML=void 0,r.renderHTML=e=>{const r=document.createElement("div");return n.render(e,r),r.innerHTML}})); \ No newline at end of file diff --git a/typo3/sysext/core/Tests/Functional/Page/PageRendererTest.php b/typo3/sysext/core/Tests/Functional/Page/PageRendererTest.php index 728a7b6a3c1c3bbabbcc81326ecf2547e70ade0f..dfc447d50969a0d2403521b4fd6c98fa1beaeb4c 100644 --- a/typo3/sysext/core/Tests/Functional/Page/PageRendererTest.php +++ b/typo3/sysext/core/Tests/Functional/Page/PageRendererTest.php @@ -351,11 +351,13 @@ class PageRendererTest extends FunctionalTestCase ]); } - $expectedConfiguration = json_encode(['packages' => $packages]); + $expectedConfiguration = json_encode($packages); // Remove surrounding brackets as the expectation is a substring of a larger JSON string - $expectedConfiguration = trim($expectedConfiguration, '{}'); + $expectedConfiguration = trim($expectedConfiguration, '[]'); $renderedString = $subject->render(); self::assertStringContainsString($expectedConfiguration, $renderedString); + // Default ("public") packages must not have been overwritten + self::assertStringContainsString('{"name":"lit-html"', $renderedString); } } diff --git a/typo3/sysext/install/Resources/Public/JavaScript/RequireJSConfig.js b/typo3/sysext/install/Resources/Public/JavaScript/RequireJSConfig.js index 1e03d226451e16c3671558c72f02eed5f9feac6a..430562f1d60e2b451e17752bd66fcdbb5acaba9b 100644 --- a/typo3/sysext/install/Resources/Public/JavaScript/RequireJSConfig.js +++ b/typo3/sysext/install/Resources/Public/JavaScript/RequireJSConfig.js @@ -11,6 +11,18 @@ var require = { 'chosen': 'sysext/install/Resources/Public/JavaScript/chosen.jquery.min', 'nprogress': 'sysext/core/Resources/Public/JavaScript/Contrib/nprogress' }, + packages: [ + { + name: 'lit-html', + location: 'sysext/core/Resources/Public/JavaScript/Contrib/lit-html', + main: 'lit-html' + }, + { + name: 'lit-element', + location: 'sysext/core/Resources/Public/JavaScript/Contrib/lit-element', + main: 'lit-element' + }, + ], shim: { jQuery: { exports: '$'