Skip to content

Commit

Permalink
Adding notIndexedPages option to minisite to skip pages (all in one f…
Browse files Browse the repository at this point in the history
…or ex) in search indexation
  • Loading branch information
rmannibucau committed Mar 7, 2023
1 parent 8eef065 commit 4543e68
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.regex.Pattern;
import java.util.stream.IntStream;
Expand Down Expand Up @@ -636,11 +637,25 @@ public FileVisitResult visitFile(final Path file, final BasicFileAttributes attr
}

if (hasSearch()) {
final Predicate<String> ignoredPages = configuration.getNotIndexedPages() == null || configuration.getNotIndexedPages().isEmpty() ?
s -> false :
configuration.getNotIndexedPages().stream()
.map(it -> {
if (it.startsWith("regex:")) {
return Pattern.compile(it.substring("regex:".length())).asMatchPredicate();
}
if (it.startsWith("prefix:")) {
final String value = it.substring("prefix:".length());
return (Predicate<String>) s -> s.startsWith(value);
}
return (Predicate<String>) it::equals;
})
.reduce(s -> false, Predicate::or);
final IndexService indexer = new IndexService();
indexer.write(indexer.index(output, configuration.getSiteBase(), path -> {
final String location = configuration.getTarget().relativize(path).toString().replace(File.pathSeparatorChar, '/');
final String name = path.getFileName().toString();
if (location.startsWith("blog/") && (name.startsWith("page-") || name.equals("index.html"))) {
if ((location.startsWith("blog/") && (name.startsWith("page-") || name.equals("index.html"))) || ignoredPages.test(name)) {
return false;
}
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ public class MiniSiteConfiguration {
private String siteBase;
private boolean useDefaultAssets;
private String searchIndexName;
private List<String> notIndexedPages;
private boolean generateBlog;
private int blogPageSize;
private boolean generateIndex;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import io.yupiik.tools.minisite.test.MiniSiteConfigurationBuilderProvider;
import org.junit.jupiter.api.Test;

import java.nio.file.Paths;
import java.util.List;
import java.util.Map;

Expand All @@ -37,6 +38,19 @@ void customTemplates(final MiniSiteConfigurationBuilderProvider.Asserts asserts,
asserts.assertContains("page.html", "this is the replacement");
}

@Test
void notIndexedPages(final MiniSiteConfigurationBuilderProvider.Asserts asserts,
final MiniSiteConfiguration.MiniSiteConfigurationBuilder builder) {
// ignore blog pages and keep index.html only
new MiniSite(builder
.source(Paths.get("target/test-classes/sites/MiniSiteTest/blog")) // reuse blog for this test
.notIndexedPages(List.of("regex:blog\\p{Digit}.html"))
.build()).run();
asserts.assertThat(files -> assertEquals("" +
"[{\"lang\":\"en\",\"text\":\"\",\"title\":\"Test Site\",\"url\":\"/index.html\"}]" +
"", files.get("search.json")));
}

@Test
void blog(final MiniSiteConfigurationBuilderProvider.Asserts asserts) {
asserts.assertThat(files -> assertEquals(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ public static void minisite(@Option(value = "source", description = "Where the m
@Option(value = "reverseBlogOrder", description = "Should blog index pages be sorted by reversed publication date.") @Default("true") final boolean reverseBlogOrder,
@Option(value = "blogPageSize", description = "Site page size when blog is enabled.") @Default("10") final int blogPageSize,
@Option(value = "templateDirs", description = "Asciidoctor template directory.") final List<File> templateDirs,
@Option(value = "notIndexedPages", description = "When search is enabled the files to not index.") final List<String> notIndexedPages,
@Option(value = "attributes", description = "Asciidoctor attributes (using properties syntax).") final Map<String, Object> attributes,
@Option(value = "templateExtensionPoints", description = "Extension point content.") final Map<String, String> templateExtensionPoints,
@Option(value = "version", description = "Version (for projectVersion template).") @Default("latest") final String version,
Expand Down Expand Up @@ -111,6 +112,7 @@ public static void minisite(@Option(value = "source", description = "Where the m
.siteBase("/".equals(siteBase) ? "" : siteBase)
.useDefaultAssets(useDefaultAssets)
.searchIndexName(searchIndexName)
.notIndexedPages(notIndexedPages)
.generateIndex(generateIndex)
.generateSiteMap(generateSiteMap)
.templatePrefixes(templatePrefixes)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,12 @@ public class MiniSiteMojo extends BaseMojo {
@Parameter
private Map<String, MiniSiteConfiguration.BlogCategoryConfiguration> blogCategoriesCustomizations;

/**
* List of pages to ignore in search.json when search is enabled, typically useful if you create an all in one page.
*/
@Parameter
private List<String> notIndexedPages;

@Parameter(defaultValue = "${project}", readonly = true)
private MavenProject project;

Expand Down Expand Up @@ -432,6 +438,7 @@ protected MiniSiteConfiguration createMiniSiteConfiguration(final ClassLoader lo
.siteBase(getNormalizedSiteBase())
.useDefaultAssets(useDefaultAssets)
.searchIndexName(searchIndexName)
.notIndexedPages(notIndexedPages)
.generateIndex(generateIndex)
.generateSiteMap(generateSiteMap)
.templatePrefixes(templatePrefixes)
Expand Down

0 comments on commit 4543e68

Please sign in to comment.