Compare commits
	
		
			10 Commits
		
	
	
		
			3af495d458
			...
			04866b4d3a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 04866b4d3a | ||
|   | 8bc3d9d793 | ||
|   | 55adf223d2 | ||
|   | 22b929225f | ||
|   | 49ead642c4 | ||
|   | b55cea174d | ||
|   | c709932af2 | ||
|   | 389b0d072c | ||
|   | 0076ae6627 | ||
|   | 301f00e9a4 | 
							
								
								
									
										15
									
								
								TODO.md
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								TODO.md
									
									
									
									
									
								
							| @ -21,9 +21,22 @@ For example: | ||||
|     - extensible | ||||
|     - fp | ||||
| - [ ] Remove gradle plugins and whatnot until we actually build the whole framework | ||||
| - [ ] Get rid of wvc compiler dependency on di | ||||
| 
 | ||||
| ## 0.1.3 | ||||
| - [ ] refactor tools/gradle start scripts to use dist instead of custom bin script | ||||
|   - [ ] have custom bin/* scripts which point to dist(s) for convenience | ||||
| - [ ] di bug: @Singleton toSelf() causes stack overflow | ||||
| - [ ] `OutletContainer` trait or interface for components which can contain an `<Outlet />` child. | ||||
| - [ ] `Context` should have methods for simply finding an ancestor of a certain type without the need for a predicate. | ||||
| 
 | ||||
| ## 0.1.2 | ||||
| - [ ] di bug: @Singleton toSelf() causes stack overflow | ||||
| - [x] `Outlet` component for rendering children like so: | ||||
| ``` | ||||
| <Outlet children={children} /> | ||||
| ``` | ||||
| - [x] `Render` component | ||||
| - [x] `data-` attributes need to function correctly (really any attribute with hyphen). | ||||
| 
 | ||||
| ## 0.1.1 | ||||
| - [x] `Switch` and `Case` components | ||||
|  | ||||
| @ -4,7 +4,7 @@ plugins { | ||||
| } | ||||
| 
 | ||||
| group = 'groowt' | ||||
| version = '0.1.1' | ||||
| version = '0.1.2' | ||||
| 
 | ||||
| repositories { | ||||
|     mavenCentral() | ||||
|  | ||||
| @ -22,7 +22,7 @@ groovy-console = { module = 'org.apache.groovy:groovy-console', version.ref = 'g | ||||
| groovy-templates = { module = 'org.apache.groovy:groovy-templates', version.ref = 'groovy' } | ||||
| jakarta-inject = 'jakarta.inject:jakarta.inject-api:2.0.1' | ||||
| jansi = 'org.fusesource.jansi:jansi:2.4.1' | ||||
| jbarchiva = 'com.jessebrault.jbarchiva:jbarchiva:0.2.1' | ||||
| jbarchiva = 'com.jessebrault.jbarchiva:jbarchiva:0.2.2' | ||||
| jetbrains-anotations = 'org.jetbrains:annotations:24.1.0' | ||||
| junit-jupiter-api = { module = 'org.junit.jupiter:junit-jupiter-api', version.ref = 'junit' } | ||||
| kotlin-stdlib = { module = 'org.jetbrains.kotlin:kotlin-stdlib', version.ref = 'kotlin' } | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip | ||||
| networkTimeout=10000 | ||||
| validateDistributionUrl=true | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
|  | ||||
							
								
								
									
										7
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							| @ -15,6 +15,8 @@ | ||||
| # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | ||||
| # | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
| # | ||||
| 
 | ||||
| ############################################################################## | ||||
| # | ||||
| @ -55,7 +57,7 @@ | ||||
| #       Darwin, MinGW, and NonStop. | ||||
| # | ||||
| #   (3) This script is generated from the Groovy template | ||||
| #       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt | ||||
| #       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt | ||||
| #       within the Gradle project. | ||||
| # | ||||
| #       You can find Gradle at https://github.com/gradle/gradle/. | ||||
| @ -84,7 +86,8 @@ done | ||||
| # shellcheck disable=SC2034 | ||||
| APP_BASE_NAME=${0##*/} | ||||
| # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) | ||||
| APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit | ||||
| APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s | ||||
| ' "$PWD" ) || exit | ||||
| 
 | ||||
| # Use the maximum available, or set MAX_FD != -1 to use that value. | ||||
| MAX_FD=maximum | ||||
|  | ||||
							
								
								
									
										2
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							| @ -13,6 +13,8 @@ | ||||
| @rem See the License for the specific language governing permissions and | ||||
| @rem limitations under the License. | ||||
| @rem | ||||
| @rem SPDX-License-Identifier: Apache-2.0 | ||||
| @rem | ||||
| 
 | ||||
| @if "%DEBUG%"=="" @echo off | ||||
| @rem ########################################################################## | ||||
|  | ||||
| @ -307,7 +307,7 @@ AttributeIdentifierStartChar | ||||
| 
 | ||||
| fragment | ||||
| AttributeIdentifierChar | ||||
|     :   [\p{L}_$0-9] | ||||
|     :   [-\p{L}_$0-9] | ||||
|     ; | ||||
| 
 | ||||
| Equals | ||||
|  | ||||
| @ -0,0 +1 @@ | ||||
| <test test-attr /> | ||||
| @ -0,0 +1 @@ | ||||
| <test-type /> | ||||
| @ -0,0 +1,7 @@ | ||||
| 0: ComponentOpen[1,1](<) | ||||
| 1: StringIdentifier[1,2](test) | ||||
| 2: Nlws[1,6]( ) | ||||
| 3: AttributeIdentifier[1,7](test-attr) | ||||
| 4: Nlws[1,16]( ) | ||||
| 5: ComponentSelfClose[1,17](/>) | ||||
| 6: RawText[1,19](\n) | ||||
| @ -0,0 +1,5 @@ | ||||
| 0: ComponentOpen[1,1](<) | ||||
| 1: StringIdentifier[1,2](test-type) | ||||
| 2: Nlws[1,11]( ) | ||||
| 3: ComponentSelfClose[1,12](/>) | ||||
| 4: RawText[1,14](\n) | ||||
| @ -1,8 +1,10 @@ | ||||
| #/usr/bin/env bash | ||||
| 
 | ||||
| VERSION="0.1.2" | ||||
| 
 | ||||
| if [ "\$1" == "--debug" ]; then | ||||
|     shift | ||||
|     gradle -q toolsJar && java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:8192 -cp build/libs/web-view-components-compiler-tools-0.1.0.jar $mainClassName "\$@" | ||||
|     gradle -q toolsJar && java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:8192 -cp build/libs/web-view-components-compiler-tools-\$VERSION.jar $mainClassName "\$@" | ||||
| else | ||||
|     gradle -q toolsJar && java -cp build/libs/web-view-components-compiler-tools-0.1.0.jar $mainClassName "\$@" | ||||
|     gradle -q toolsJar && java -cp build/libs/web-view-components-compiler-tools-\$VERSION.jar $mainClassName "\$@" | ||||
| fi | ||||
|  | ||||
| @ -14,6 +14,8 @@ class DefaultWebViewComponentScope extends DefaultComponentScope implements WebV | ||||
|             addWithAttr(DefaultCase) | ||||
|             addWithAttr(Each) | ||||
|             addWithAttr(Echo) | ||||
|             addWithAttr(Outlet) | ||||
|             addWithAttr(Render) | ||||
|             addWithAttr(Switch) | ||||
|             addWithAttr(WhenNotEmpty) | ||||
|             addWithAttr(WhenNotNull) | ||||
|  | ||||
| @ -0,0 +1,22 @@ | ||||
| package groowt.view.component.web.lib | ||||
| 
 | ||||
| import groowt.view.View | ||||
| import groowt.view.component.runtime.DefaultComponentWriter | ||||
| 
 | ||||
| class Outlet extends DelegatingWebViewComponent { | ||||
| 
 | ||||
|     private final List givenChildren | ||||
| 
 | ||||
|     Outlet(Map attr) { | ||||
|         givenChildren = attr.children ?: [] | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected View getDelegate() { | ||||
|         return { Writer w -> | ||||
|             def cw = new DefaultComponentWriter(w, context.renderContext, context) | ||||
|             givenChildren.each { cw << it } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,28 @@ | ||||
| package groowt.view.component.web.lib | ||||
| 
 | ||||
| import groowt.view.View | ||||
| 
 | ||||
| class Render extends DelegatingWebViewComponent { | ||||
| 
 | ||||
|     private final Object item | ||||
| 
 | ||||
|     Render(Map attr) { | ||||
|         item = Objects.requireNonNull(attr.item, "<Render> attribute 'item' must not be null.") | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected View getDelegate() { | ||||
|         return { Writer w -> | ||||
|             if (item.respondsTo('renderTo', [Writer] as Class[])) { | ||||
|                 item.renderTo(w) | ||||
|             } else if (item.respondsTo('render')) { | ||||
|                 w << item.render() | ||||
|             } else { | ||||
|                 throw new IllegalArgumentException( | ||||
|                         '<Render> must use an item which responds to either renderTo(Writer) or render().' | ||||
|                 ) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,17 @@ | ||||
| package groowt.view.component.web.lib | ||||
| 
 | ||||
| import org.junit.jupiter.api.Test | ||||
| 
 | ||||
| class OutletTests extends AbstractWebViewComponentTests { | ||||
| 
 | ||||
|     @Test | ||||
|     void smokeScreen() { | ||||
|         doTest('<Outlet />', '') | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     void withChildren() { | ||||
|         doTest('<Echo items={[0, 1, 2]}><Outlet children={items} /></Echo>', '012') | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,47 @@ | ||||
| package groowt.view.component.web.lib | ||||
| 
 | ||||
| import org.junit.jupiter.api.Test | ||||
| 
 | ||||
| class RenderTests extends AbstractWebViewComponentTests { | ||||
| 
 | ||||
|     static final class RenderToExample { | ||||
| 
 | ||||
|         void renderTo(Writer w) { | ||||
|             w << 'Hello, World!' | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     static final class RenderExample { | ||||
| 
 | ||||
|         String render() { | ||||
|             'Hello, World!' | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     void renderToExample() { | ||||
|         doTest(''' | ||||
|                 --- | ||||
|                 package groowt.view.component.web.lib | ||||
|                 --- | ||||
|                 <Render item={new RenderTests.RenderToExample()} /> | ||||
|                 '''.stripIndent().trim(), | ||||
|                 'Hello, World!' | ||||
|         ) | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     void renderExample() { | ||||
|         doTest(''' | ||||
|                 --- | ||||
|                 package groowt.view.component.web.lib | ||||
|                 --- | ||||
|                 <Render item={new RenderTests.RenderExample()} /> | ||||
|                 '''.stripIndent().trim(), | ||||
|                 'Hello, World!' | ||||
|         ) | ||||
|     } | ||||
| 
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user