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