diff --git a/repository/Seaside-WebComponents-Core.package/.filetree b/repository/Seaside-WebComponents-Core.package/.filetree new file mode 100644 index 000000000..57a679737 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/.filetree @@ -0,0 +1,5 @@ +{ + "separateMethodMetaAndSource" : false, + "noMethodMetaData" : true, + "useCypressPropertiesFile" : true +} \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/README.md b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/class/canBeRoot.st b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/class/canBeRoot.st new file mode 100644 index 000000000..2ddd9c1fa --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/class/canBeRoot.st @@ -0,0 +1,3 @@ +testing +canBeRoot + ^ true \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/class/initialize.st b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/class/initialize.st new file mode 100644 index 000000000..89aebd97d --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/class/initialize.st @@ -0,0 +1,8 @@ +initialization +initialize + | application | + application := WAAdmin register: WAApplication at: 'examples/headless-counter' in: WAAdmin defaultDispatcher. + application configuration addParent: WARenderLoopConfiguration instance. + application rootClass: self; + preferenceAt: #renderPhaseContinuationClass put: WAFragmentRenderPhaseContinuation; + yourself \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/instance/children.st b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/instance/children.st new file mode 100644 index 000000000..c486de0be --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/instance/children.st @@ -0,0 +1,3 @@ +hooks +children + ^ Array with: counter \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/instance/initialize.st b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/instance/initialize.st new file mode 100644 index 000000000..5aec317f5 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/instance/initialize.st @@ -0,0 +1,4 @@ +initialization +initialize + super initialize. + counter := WACounter new \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/instance/renderContentOn..st b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/instance/renderContentOn..st new file mode 100644 index 000000000..555fda771 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/instance/renderContentOn..st @@ -0,0 +1,3 @@ +rendering +renderContentOn: html + html render: counter \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/properties.json b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/properties.json new file mode 100644 index 000000000..bc35b846c --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAHeadlessCounter.class/properties.json @@ -0,0 +1,13 @@ +{ + "commentStamp" : "", + "super" : "WAHeadlessComponent", + "category" : "Seaside-WebComponents-Core", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "counter" + ], + "name" : "WAHeadlessCounter", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/README.md b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/class/canBeRoot.st b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/class/canBeRoot.st new file mode 100644 index 000000000..2ddd9c1fa --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/class/canBeRoot.st @@ -0,0 +1,3 @@ +testing +canBeRoot + ^ true \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/class/initialize.st b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/class/initialize.st new file mode 100644 index 000000000..2c3ed2e96 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/class/initialize.st @@ -0,0 +1,4 @@ +initialization +initialize + (WAAdmin register: self asApplicationAt: 'examples/web-components') + scriptGeneratorClass: WANullScriptGenerator \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/instance/renderContentOn..st b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/instance/renderContentOn..st new file mode 100644 index 000000000..3d9c84c9b --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/instance/renderContentOn..st @@ -0,0 +1,7 @@ +rendering +renderContentOn: html + html heading: 'Seaside WebComponents Demo'. + (html tag: 'seaside-component') + attributeAt: 'url' put: '/examples/headless-counter'; + attributeAt: 'ajaxify' put: 'true'; + with: 'Loading...' \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/instance/updateRoot..st b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/instance/updateRoot..st new file mode 100644 index 000000000..1bd52af48 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/instance/updateRoot..st @@ -0,0 +1,5 @@ +updating +updateRoot: aRoot + super updateRoot: aRoot. + aRoot title: 'Seaside WebComponents Demo'. + aRoot script url: WAWebComponentsLibrary / #seasideWebComponentsJs \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/properties.json b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/properties.json new file mode 100644 index 000000000..9bca9b909 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAWebComponentsDemoApplication.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "", + "super" : "WAComponent", + "category" : "Seaside-WebComponents-Core", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "WAWebComponentsDemoApplication", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAWebComponentsLibrary.class/README.md b/repository/Seaside-WebComponents-Core.package/WAWebComponentsLibrary.class/README.md new file mode 100644 index 000000000..a48dec004 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAWebComponentsLibrary.class/README.md @@ -0,0 +1,28 @@ +I am a WebComponent library that allows users to embed Seaside components into existing web pages. + + +# Usage + +To use this library + +```language=HTML + + + + + + + + Loading... + + + +``` + +Per default no ajaxification will happen so you have to make sure your component does not perform full page requests. + +You can opt in to ajaxification using + +```language=HTML +Loading... +``` \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAWebComponentsLibrary.class/instance/seasideWebComponentsJs.st b/repository/Seaside-WebComponents-Core.package/WAWebComponentsLibrary.class/instance/seasideWebComponentsJs.st new file mode 100644 index 000000000..f29333684 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAWebComponentsLibrary.class/instance/seasideWebComponentsJs.st @@ -0,0 +1,67 @@ +scripts +seasideWebComponentsJs + ^ '"use strict"; +(function() { + class SeasideComponent extends HTMLElement { + #shadowRoot; + constructor() { + super(); + this.#shadowRoot = this.attachShadow({mode: "closed"}); + } + + #ajaxify() { + this.#shadowRoot.addEventListener("click", (event) => { + + // links + const anchor = event.target.closest("a"); + if (anchor !== null) { + this.#load("GET", anchor.getAttribute("href"), null); + event.preventDefault(); + return; + } + + // submit + const submit = event.target.closest("input[type=submit], button[type=submit]"); + if (submit !== null) { + const form = submit.closest("form"); + if (form !== null) { + const formData = new FormData(form); + formData.append(submit.getAttribute("name"), ""); + this.#load("POST", form.getAttribute("action"), formData); + event.preventDefault(); + } + } + }); + } + + #load(method, url, data) { + const xhr = new XMLHttpRequest(); + + xhr.responseType = "text"; // we do not stirp anyhing, just use innerHtml + xhr.addEventListener("load", (event) => { + if (xhr.status === 200) { + this.#shadowRoot.innerHTML = xhr.response; + } + }); + + xhr.open(method, url); + + // WAActionCallback per default are disabled for AJAX requests + // Detection happens with X-Requested-With so we override it + xhr.setRequestHeader("X-Requested-With", "Seaside-WebComponents"); + xhr.send(data); + } + + connectedCallback() { + const componentUrl = this.getAttribute("url"); + const ajaxify = this.getAttribute("ajaxify"); + if (ajaxify === "true") { + this.#ajaxify(); + } + this.#load("GET", componentUrl, null); + } + } + + customElements.define("seaside-component", SeasideComponent); +})(); +' \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/WAWebComponentsLibrary.class/properties.json b/repository/Seaside-WebComponents-Core.package/WAWebComponentsLibrary.class/properties.json new file mode 100644 index 000000000..b79392961 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/WAWebComponentsLibrary.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "xxx 7/7/2024 16:54", + "super" : "WAFileLibrary", + "category" : "Seaside-WebComponents-Core", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "WAWebComponentsLibrary", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/monticello.meta/categories.st b/repository/Seaside-WebComponents-Core.package/monticello.meta/categories.st new file mode 100644 index 000000000..6e32bfaff --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/monticello.meta/categories.st @@ -0,0 +1 @@ +self packageOrganizer ensurePackage: #'Seaside-WebComponents-Core' withTags: #()! diff --git a/repository/Seaside-WebComponents-Core.package/monticello.meta/initializers.st b/repository/Seaside-WebComponents-Core.package/monticello.meta/initializers.st new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebComponents-Core.package/monticello.meta/package b/repository/Seaside-WebComponents-Core.package/monticello.meta/package new file mode 100644 index 000000000..a4e71d3e4 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/monticello.meta/package @@ -0,0 +1 @@ +(name 'Seaside-WebComponents-Core') \ No newline at end of file diff --git a/repository/Seaside-WebComponents-Core.package/properties.json b/repository/Seaside-WebComponents-Core.package/properties.json new file mode 100644 index 000000000..6f31cf5a2 --- /dev/null +++ b/repository/Seaside-WebComponents-Core.package/properties.json @@ -0,0 +1 @@ +{ } \ No newline at end of file