Tweaking for better usability.
This commit is contained in:
parent
9cd303d317
commit
f5697fb99b
@ -21,6 +21,10 @@ dependencies {
|
|||||||
|
|
||||||
// https://mvnrepository.com/artifact/org.jgrapht/jgrapht-core
|
// https://mvnrepository.com/artifact/org.jgrapht/jgrapht-core
|
||||||
implementation 'org.jgrapht:jgrapht-core:1.5.2'
|
implementation 'org.jgrapht:jgrapht-core:1.5.2'
|
||||||
|
|
||||||
|
// So we can use Grape dependency management
|
||||||
|
// https://mvnrepository.com/artifact/org.apache.ivy/ivy
|
||||||
|
runtimeOnly 'org.apache.ivy:ivy:2.5.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
|
@ -5,25 +5,27 @@ import groovy.transform.EqualsAndHashCode
|
|||||||
import groovy.transform.NullCheck
|
import groovy.transform.NullCheck
|
||||||
import org.jetbrains.annotations.Nullable
|
import org.jetbrains.annotations.Nullable
|
||||||
|
|
||||||
|
import java.util.function.Predicate
|
||||||
|
|
||||||
@NullCheck
|
@NullCheck
|
||||||
@EqualsAndHashCode(includeFields = true)
|
@EqualsAndHashCode(includeFields = true)
|
||||||
final class ModelCollection<T> {
|
final class ModelCollection<T> {
|
||||||
|
|
||||||
@Delegate
|
@Delegate
|
||||||
private final Collection<Model<T>> ts = []
|
private final Collection<Model<T>> models = []
|
||||||
|
|
||||||
ModelCollection(Collection<Model<T>> ts) {
|
ModelCollection(Collection<Model<T>> models) {
|
||||||
this.ts.addAll(ts)
|
this.models.addAll(models)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
Model<T> getByName(String name) {
|
Model<T> getByName(String name) {
|
||||||
this.ts.find { it.name == name }
|
this.models.find { it.name == name }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
<E extends T> Model<E> getByNameAndType(String name, Class<E> type) {
|
<E extends T> Model<E> getByNameAndType(String name, Class<E> type) {
|
||||||
this.ts.find { it.name == name && type.isAssignableFrom(it.get().class) } as Model<E>
|
this.models.find { it.name == name && type.isAssignableFrom(it.get().class) } as Model<E>
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<Model<T>> findByName(String name) {
|
Optional<Model<T>> findByName(String name) {
|
||||||
@ -35,10 +37,31 @@ final class ModelCollection<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def <E extends T> ModelCollection<E> findAllByType(Class<E> type) {
|
def <E extends T> ModelCollection<E> findAllByType(Class<E> type) {
|
||||||
def es = this.ts.findResults {
|
def es = this.models.findResults {
|
||||||
type.isAssignableFrom(it.get().class) ? it as Model<E> : null
|
type.isAssignableFrom(it.get().class) ? it as Model<E> : null
|
||||||
}
|
}
|
||||||
new ModelCollection<>(es)
|
new ModelCollection<>(es)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def <E extends T> Optional<Model<E>> findOne(Class<E> type, Predicate<E> filter) {
|
||||||
|
Optional.ofNullable(this.models.find {
|
||||||
|
def t = it.get()
|
||||||
|
if (type.isAssignableFrom(t.class)) {
|
||||||
|
filter.test(t as E) ? it : null
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
} as Model<E>)
|
||||||
|
}
|
||||||
|
|
||||||
|
def <E extends T> Optional<Model<E>> findOne(Class<E> type) {
|
||||||
|
this.findOne(type) { true }
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<Model<T>> findOne(Predicate<T> filter) {
|
||||||
|
Optional.ofNullable(this.models.find {
|
||||||
|
filter.test(it.get()) ? it : null
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ final class MarkdownTextRenderer implements TextRenderer {
|
|||||||
@Override
|
@Override
|
||||||
Result<String> render(Text text) {
|
Result<String> render(Text text) {
|
||||||
try {
|
try {
|
||||||
Result.of(htmlRenderer.render(parser.parse(text.text)))
|
Result.of(TextUtil.renderMarkdown(text.text))
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Result.of(
|
Result.of(
|
||||||
[new Diagnostic("There was an exception while rendering ${ text.path }:\n${ e }", e)],
|
[new Diagnostic("There was an exception while rendering ${ text.path }:\n${ e }", e)],
|
||||||
|
23
api/src/main/groovy/com/jessebrault/ssg/text/TextUtil.java
Normal file
23
api/src/main/groovy/com/jessebrault/ssg/text/TextUtil.java
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package com.jessebrault.ssg.text;
|
||||||
|
|
||||||
|
import org.commonmark.ext.front.matter.YamlFrontMatterExtension;
|
||||||
|
import org.commonmark.parser.Parser;
|
||||||
|
import org.commonmark.renderer.html.HtmlRenderer;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public final class TextUtil {
|
||||||
|
|
||||||
|
private static final Parser parser = Parser.builder()
|
||||||
|
.extensions(List.of(YamlFrontMatterExtension.create()))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
private static final HtmlRenderer htmlRenderer = HtmlRenderer.builder().build();
|
||||||
|
|
||||||
|
public static String renderMarkdown(String markdown) {
|
||||||
|
return htmlRenderer.render(parser.parse(markdown));
|
||||||
|
}
|
||||||
|
|
||||||
|
private TextUtil() {}
|
||||||
|
|
||||||
|
}
|
@ -22,9 +22,9 @@ dependencies {
|
|||||||
* Logging
|
* Logging
|
||||||
*/
|
*/
|
||||||
// https://mvnrepository.com/artifact/org.slf4j/slf4j-api
|
// https://mvnrepository.com/artifact/org.slf4j/slf4j-api
|
||||||
implementation 'org.slf4j:slf4j-api:1.7.36'
|
api 'org.slf4j:slf4j-api:1.7.36'
|
||||||
|
|
||||||
testFixturesImplementation 'org.slf4j:slf4j-api:1.7.36'
|
testFixturesApi 'org.slf4j:slf4j-api:1.7.36'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TESTING
|
* TESTING
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
Loading…
Reference in New Issue
Block a user