diff --git a/.gitignore b/.gitignore index 627fdbb..50899b7 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ dataset.egg-info py/test_* idxdefs/* *.bak +*.json diff --git a/CITATION.cff b/CITATION.cff index e4ed611..321865b 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,18 +1,20 @@ cff-version: 1.2.0 message: "If you use this software, please cite it as below." -title: crossrefapi +type: software +title: "crossrefapi" +abstract: "A Golang package and command line tool for working with the +public CrossRef API" authors: - family-names: Doiel given-names: Robert - orcid: https://orcid.org/0000-0003-0900-6903 -abstract: A Golang package and command line tool for working with the public CrossRef API + orcid: "https://orcid.org/0000-0003-0900-6903" + +maintainers: + - family-names: Doiel + given-names: Robert + orcid: "https://orcid.org/0000-0003-0900-6903" + repository-code: "https://github.com/caltechlibrary/crossrefapi" -type: software -version: 1.0.1-pre +version: 1.0.1 license-url: "https://caltechlibrary/crossrefapi/LICENSE" -keywords: - - CrossRef - - DOI - - GitHub - - metadata -date-released: 2022-07-27 +keywords: [ "CrossRef", "DOI", "metadata" ] diff --git a/LICENSE b/LICENSE index dd1b02f..010300b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ -Copyright (c) 2021, Caltech +Copyright (c) 2023, Caltech All rights not granted herein are expressly reserved by Caltech. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/Makefile b/Makefile index e42c094..523c602 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,8 @@ VERSION = $(shell grep '"version":' codemeta.json | cut -d \" -f 4) BRANCH = $(shell git branch | grep '* ' | cut -d\ -f 2) +MAN_PAGES = $(shell ls -1 *.1.md | sed -E 's/\.1.md/.1/g') + PANDOC = $(shell which pandoc) PROJECT_LIST = crossrefapi @@ -18,7 +20,7 @@ ifeq ($(OS), Windows) EXT = .exe endif -build: version.go $(PROJECT_LIST) CITATION.cff about.md +build: version.go man $(PROJECT_LIST) CITATION.cff about.md version.go: .FORCE @echo "package $(PROJECT)" >version.go @@ -33,20 +35,26 @@ version.go: .FORCE @echo '' >>version.go @git add version.go -crossrefapi$(EXT): bin/crossrefapi$(EXT) +crossrefapi$(EXT): bin/crossrefapi$(EXT) CITATION.cff -bin/crossrefapi$(EXT): crossrefapi.go cmd/crossrefapi/crossrefapi.go +bin/crossrefapi$(EXT): crossrefapi.go works.go cmd/crossrefapi/crossrefapi.go go build -o bin/crossrefapi$(EXT) cmd/crossrefapi/crossrefapi.go + ./bin/crossrefapi -help>crossrefapi.1.md + +man: $(MAN_PAGES) +$(MAN_PAGES): .FORCE + mkdir -p man/man1 + $(PANDOC) $@.md --from markdown --to man -s >man/man1/$@ install: env GOBIN=$(GOPATH)/bin go install cmd/crossrefapi/crossrefapi.go -website: page.tmpl README.md nav.md INSTALL.md LICENSE css/site.css about.md - bash mk-website.bash +website: page.tmpl codemeta.json README.md INSTALL.md LICENSE css/site.css about.md + make -f website.mak -CITATION.cff: codemeta.json +CITATION.cff: codemeta.json .FORCE @cat codemeta.json | sed -E 's/"@context"/"at__context"/g;s/"@type"/"at__type"/g;s/"@id"/"at__id"/g' >_codemeta.json @if [ -f $(PANDOC) ]; then echo "" | $(PANDOC) --metadata title="Cite $(PROJECT)" --metadata-file=_codemeta.json --template=codemeta-cff.tmpl >CITATION.cff; fi @@ -74,40 +82,36 @@ clean: if [ -d bin ]; then rm -fR bin; fi if [ -d dist ]; then rm -fR dist; fi if [ -d testout ]; then rm -fR testout; fi - if [ -d man ]; then rm -fR man; fi -man: build - mkdir -p man/man1 - bin/crossrefapi -generate-manpage | nroff -Tutf8 -man > man/man1/crossrefapi.1 dist/linux-amd64: mkdir -p dist/bin env GOOS=linux GOARCH=amd64 go build -o dist/bin/crossrefapi cmd/crossrefapi/crossrefapi.go - cd dist && zip -r $(PROJECT)-$(VERSION)-linux-amd64.zip README.md LICENSE INSTALL.md bin/* + cd dist && zip -r $(PROJECT)-$(VERSION)-linux-amd64.zip README.md LICENSE INSTALL.md bin/* man/* rm -fR dist/bin dist/windows-amd64: mkdir -p dist/bin env GOOS=windows GOARCH=amd64 go build -o dist/bin/crossrefapi.exe cmd/crossrefapi/crossrefapi.go - cd dist && zip -r $(PROJECT)-$(VERSION)-windows-amd64.zip README.md LICENSE INSTALL.md bin/* + cd dist && zip -r $(PROJECT)-$(VERSION)-windows-amd64.zip README.md LICENSE INSTALL.md bin/* man/* rm -fR dist/bin dist/macos-amd64: mkdir -p dist/bin env GOOS=darwin GOARCH=amd64 go build -o dist/bin/crossrefapi cmd/crossrefapi/crossrefapi.go - cd dist && zip -r $(PROJECT)-$(VERSION)-macos-amd64.zip README.md LICENSE INSTALL.md bin/* + cd dist && zip -r $(PROJECT)-$(VERSION)-macos-amd64.zip README.md LICENSE INSTALL.md bin/* man/* rm -fR dist/bin dist/macos-arm64: mkdir -p dist/bin env GOOS=darwin GOARCH=arm64 go build -o dist/bin/crossrefapi cmd/crossrefapi/crossrefapi.go - cd dist && zip -r $(PROJECT)-$(VERSION)-macos-arm64.zip README.md LICENSE INSTALL.md bin/* + cd dist && zip -r $(PROJECT)-$(VERSION)-macos-arm64.zip README.md LICENSE INSTALL.md bin/* man/* rm -fR dist/bin dist/raspbian-arm7: mkdir -p dist/bin env GOOS=linux GOARCH=arm GOARM=7 go build -o dist/bin/crossrefapi cmd/crossrefapi/crossrefapi.go - cd dist && zip -r $(PROJECT)-$(VERSION)-raspbian-arm7.zip README.md LICENSE INSTALL.md bin/* + cd dist && zip -r $(PROJECT)-$(VERSION)-raspbian-arm7.zip README.md LICENSE INSTALL.md bin/* man/* rm -fR dist/bin distribute_docs: @@ -116,10 +120,7 @@ distribute_docs: cp -v README.md dist/ cp -v LICENSE dist/ cp -v INSTALL.md dist/ - bash package-versions.bash > dist/package-versions.txt - -update_version: - ./update_version.py --yes + cp -vR man dist/ release: clean crossrefapi.go distribute_docs dist/linux-amd64 dist/windows-amd64 dist/macos-amd64 dist/macos-arm64 dist/raspbian-arm7 @@ -130,8 +131,7 @@ save: if [ "$(msg)" != "" ]; then git commit -am "$(msg)"; else git commit -am "Quick Save"; fi git push origin $(BRANCH) -publish: - bash mk-website.bash +publish: website bash publish.bash diff --git a/README.md b/README.md index ede6259..1de1121 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,36 @@ with the public API at api.crossref.org. // continue processing your "works" result... ``` +You can compare two copies of a "works" response and see what has changed. + +```go + + appName := path.Base(os.Args[0]) + client, err := crossrefapi.NewCrossRefClient(appName, "jane.doe@library.example.edu") + if err != nil { + // handle error... + } + newWorks, err := client.Works("10.1037/0003-066x.59.1.29") + if err != nil { + // handle error... + } + // Fetch our previously saved works document. + src, err := os.ReadFile("0003-066x.59.1.29.json") + if err != nil { + // handle error... + } + oldWorks := new(crossrefapi.Works) + if err := json.Unmarshal(src, &oldWorks); err != nil { + // handle error... + } + src, err = oldWorks.DiffAsJSON(newWorks) + if err != nil { + // handle error... + } + fmt.Println("Diff for 10.1037/0003-066x.59.1.29") + fmt.Printf("\n%s\n", src) +``` + ## Command line example ``` @@ -30,6 +60,6 @@ with the public API at api.crossref.org. ## Reference -+ [CrossRef API Docs](https://github.com/CrossRef/rest-api-doc) -+ [CrossRef Schemas](https://www.crossref.org/schema/) -+ [CrossRefAPI](https://github.com/fabiobatalha/crossrefapi) - Python implementation +- [CrossRef API Docs](https://github.com/CrossRef/rest-api-doc) +- [CrossRef Schemas](https://api.crossref.org/swagger-ui/index.html) +- [CrossRefAPI](https://github.com/fabiobatalha/crossrefapi) - Python implementation diff --git a/about.md b/about.md index 463768c..c17292c 100644 --- a/about.md +++ b/about.md @@ -11,16 +11,16 @@ authors: orcid: "https://orcid.org/0000-0003-0900-6903" repository-code: "https://github.com/caltechlibrary/crossrefapi" -version: 1.0.1-pre +version: 1.0.1 license-url: "https://caltechlibrary/crossrefapi/LICENSE" -keywords: [ "CrossRef", "DOI", "GitHub", "metadata" ] +keywords: [ "CrossRef", "DOI", "metadata" ] --- About this software =================== -## crossrefapi 1.0.1-pre +## crossrefapi 1.0.1 ### Authors @@ -34,7 +34,6 @@ CrossRef API - CrossRef - DOI -- GitHub - metadata ### Software diff --git a/cmd/crossrefapi/crossrefapi.go b/cmd/crossrefapi/crossrefapi.go index c0777bc..09c364d 100644 --- a/cmd/crossrefapi/crossrefapi.go +++ b/cmd/crossrefapi/crossrefapi.go @@ -1,10 +1,9 @@ -// // crossrefapi.go is a command line tool for access the CrossRef API given // a specific DOI. // // Author R. S. Doiel, // -// Copyright (c) 2021, Caltech +// Copyright (c) 2023, Caltech // All rights not granted herein are expressly reserved by Caltech. // // Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -16,7 +15,6 @@ // 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// package main import ( @@ -32,59 +30,85 @@ import ( ) var ( - description = ` -USAGE + helpText = `--- +title: "{app_name}(1) user manual | version {version}" +author: "R. S. Doiel" +pubDate: 2023-03-29 +--- + +# NAME - {appName} [OPTIONS] types|works DOI +{app_name} -SYNOPSIS +# SYNOPSIS -{appName} can retrieve "types" and "works" from the CrossRef API +{app_name} [OPTIONS] types|works DOI -DETAIL +# DESCRIPTION -{appName} is a command line utility to retrieve "types" and "works" objects -from the CrossRef API. It follows the etiquette suggested at +crossrefapi can retrieve "types" and "works" from the CrossRef API. Is also +has the ability to compare the current "works" document with a JSON document +retrieved previously. The program uses the CrossRef REST API. +It follows the etiquette suggested at https://github.com/CrossRef/rest-api-doc#etiquette -` - examples = ` -Return the types of objects in CrossRef (e.g. journal articles) +# OPTIONS - {appName} -mailto="jdoe@example.edu" types +-help +: display help -Return the works for the doi "10.1037/0003-066x.59.1.29" +-license +: display license - {appName} -mailto="jdoe@example.edu" \ - works "10.1037/0003-066x.59.1.29" -` +-diff JSON_FILENAME +: compares the JSON_FILENAME with the current works retrieved and displays a diff between them as a JSON array where the first element is the old values +and the second element is the new values. - license = ` -{appName} {version} +-mailto string +: set the mailto value for API access -Copyright (c) 2021, Caltech -All rights not granted herein are expressly reserved by Caltech. +-version +: display app version -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +# EXAMPLES -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Return the types of objects in CrossRef (e.g. journal articles) -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +~~~ + crossrefapi -mailto="jdoe@example.edu" types +~~~ -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +Return the works for the doi "10.1037/0003-066x.59.1.29" + +~~~ + crossrefapi -mailto="jdoe@example.edu" \ + works "10.1037/0003-066x.59.1.29" +~~~ + +Compare a previously retrieved "works.json" with the current version. + +~~~ +crossrefapi -mailto="jdoe@example.edu" -diff works.json \ + works "10.1037/0003-066x.59.1.29" +~~~ -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ` + // Standard Options - showHelp bool - showLicense bool - showVersion bool + showHelp bool + showLicense bool + showVersion bool // App Specific Options - mailto string + diffFName string + mailto string ) +func fmtTxt(src string, appName string, version string) string { + return strings.ReplaceAll(strings.ReplaceAll(src, "{app_name}", appName), "{version}", version) +} + func pop(args []string) (string, []string) { var ( arg string @@ -109,36 +133,34 @@ func main() { flagSet := flag.NewFlagSet(appName, flag.ContinueOnError) // Standard Options - flagSet.BoolVar(&showHelp, "h", false, "display help") - flagSet.BoolVar(&showHelp, "h,help", false, "display help") + flagSet.BoolVar(&showHelp, "help", false, "display help") flagSet.BoolVar(&showLicense, "license", false, "display license") flagSet.BoolVar(&showVersion, "version", false, "display app version") // Application Options - flagSet.StringVar(&mailto, "m", "", "set the mailto value for API access") + flagSet.StringVar(&diffFName, "diff", "", "compare the current works results with JSON document") flagSet.StringVar(&mailto, "mailto", "", "set the mailto value for API access") flagSet.Parse(os.Args[1:]) args := flagSet.Args() - if showHelp { - crossrefapi.DisplayUsage(os.Stdout, appName, flagSet, description, examples, license) + fmt.Fprint(os.Stdout, fmtTxt(helpText, appName, crossrefapi.Version)) os.Exit(0) } if showLicense { - crossrefapi.DisplayLicense(os.Stdout, appName, crossrefapi.LicenseText) + fmt.Fprintf(os.Stdout, "%s %s\n\n%s\n", appName, crossrefapi.Version, crossrefapi.LicenseText) os.Exit(0) } if showVersion { - crossrefapi.DisplayVersion(os.Stdout, appName) + fmt.Fprintf(os.Stdout, "%s %s\n", appName, crossrefapi.Version) os.Exit(0) } if len(args) < 1 { - crossrefapi.DisplayUsage(os.Stderr, appName, flagSet, description, examples, license) + fmt.Fprint(os.Stderr, fmtTxt(helpText, appName, crossrefapi.Version)) os.Exit(1) } @@ -172,16 +194,38 @@ func main() { os.Exit(1) } case "works": - obj, err := api.Works(doi) + nWork, err := api.Works(doi) if err != nil { fmt.Fprintf(os.Stderr, "%s\n", err) os.Exit(1) } - src, err = json.MarshalIndent(obj, "", " ") - if err != nil { - fmt.Fprintf(os.Stderr, "%s\n", err) + if nWork == nil { + fmt.Fprintf(os.Stderr, "Missing works JSON from request") os.Exit(1) } + if diffFName == "" { + src, err = json.MarshalIndent(nWork, "", " ") + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } + } else { + src, err = os.ReadFile(diffFName) + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } + oWork := new(crossrefapi.Works) + if err := json.Unmarshal(src, &oWork); err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } + src, err = oWork.DiffAsJSON(nWork) + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } + } default: fmt.Fprintf(os.Stderr, "USAGE: %s works DOI | %s types\n", appName, appName) os.Exit(1) diff --git a/codemeta.json b/codemeta.json index a320da4..991057b 100644 --- a/codemeta.json +++ b/codemeta.json @@ -6,7 +6,7 @@ "codeRepository": "https://github.com/caltechlibrary/crossrefapi", "issueTracker": "https://github.com/caltechlibrary/crossrefapi/issues", "license": "https://caltechlibrary/crossrefapi/LICENSE", - "version": "1.0.1-pre", + "version": "1.0.1", "author": [ { "@type": "Person", @@ -25,10 +25,19 @@ "keywords": [ "CrossRef", "DOI", - "GitHub", "metadata" ], - "maintainer": "https://orcid.org/0000-0003-0900-6903", + "maintainer": { + "@type": "Person", + "givenName": "Robert", + "familyName": "Doiel", + "affiliation": { + "@type": "Organization", + "name": "Caltech Library" + }, + "email": "rsdoiel@caltech.edu", + "@id": "https://orcid.org/0000-0003-0900-6903" + }, "programmingLanguage": [ "Go" ] diff --git a/crossrefapi.1.md b/crossrefapi.1.md new file mode 100644 index 0000000..63ec20e --- /dev/null +++ b/crossrefapi.1.md @@ -0,0 +1,63 @@ +--- +title: "crossrefapi(1) user manual | version 1.0.1" +author: "R. S. Doiel" +pubDate: 2023-03-29 +--- + +# NAME + +crossrefapi + +# SYNOPSIS + +crossrefapi [OPTIONS] types|works DOI + +# DESCRIPTION + +crossrefapi can retrieve "types" and "works" from the CrossRef API. Is also +has the ability to compare the current "works" document with a JSON document +retrieved previously. The program uses the CrossRef REST API. +It follows the etiquette suggested at + + https://github.com/CrossRef/rest-api-doc#etiquette + +# OPTIONS + +-help +: display help + +-license +: display license + +-diff JSON_FILENAME +: compares the JSON_FILENAME with the current works retrieved and displays a diff between them as a JSON array where the first element is the old values +and the second element is the new values. + +-mailto string +: set the mailto value for API access + +-version +: display app version + +# EXAMPLES + +Return the types of objects in CrossRef (e.g. journal articles) + +~~~ + crossrefapi -mailto="jdoe@example.edu" types +~~~ + +Return the works for the doi "10.1037/0003-066x.59.1.29" + +~~~ + crossrefapi -mailto="jdoe@example.edu" \ + works "10.1037/0003-066x.59.1.29" +~~~ + +Compare a previously retrieved "works.json" with the current version. + +~~~ +crossrefapi -mailto="jdoe@example.edu" -diff works.json \ + works "10.1037/0003-066x.59.1.29" +~~~ + diff --git a/crossrefapiCli.go b/crossrefapiCli.go deleted file mode 100644 index ccbd7f2..0000000 --- a/crossrefapiCli.go +++ /dev/null @@ -1,33 +0,0 @@ -package crossrefapi - -import ( - "flag" - "fmt" - "io" - "strings" -) - -func DisplayLicense(out io.Writer, appName string, license string) { - fmt.Fprintf(out, strings.ReplaceAll(strings.ReplaceAll(license, "{appName}", appName), "{version}", Version)) -} - -func DisplayVersion(out io.Writer, appName string) { - fmt.Fprintf(out, "\n%s %s\n", appName, Version) -} - -func DisplayUsage(out io.Writer, appName string, flagSet *flag.FlagSet, description string, examples string, license string) { - // Convert {appName} and {version} in description - if description != "" { - fmt.Fprintf(out, strings.ReplaceAll(description, "{appName}", appName)) - } - flagSet.SetOutput(out) - flagSet.PrintDefaults() - - if examples != "" { - fmt.Fprintf(out, strings.ReplaceAll(examples, "{appName}", appName)) - } - if license != "" { - DisplayLicense(out, appName, license) - } -} - diff --git a/links-to-html.lua b/links-to-html.lua new file mode 100644 index 0000000..935304b --- /dev/null +++ b/links-to-html.lua @@ -0,0 +1,6 @@ +-- links-to-html.lua converts links to local Markdown documents to +-- there respective .html counterparts. +function Link(el) + el.target = string.gsub(el.target, "%.md", ".html") + return el +end diff --git a/man/man1/crossrefapi.1 b/man/man1/crossrefapi.1 new file mode 100644 index 0000000..8d44dfd --- /dev/null +++ b/man/man1/crossrefapi.1 @@ -0,0 +1,86 @@ +.\" Automatically generated by Pandoc 3.0 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "crossrefapi" "1" "" "user manual" "version 1.0.1" +.hy +.SH NAME +.PP +crossrefapi +.SH SYNOPSIS +.PP +crossrefapi OPTIONS types|works DOI +.SH DESCRIPTION +.PP +crossrefapi can retrieve \[lq]types\[rq] and \[lq]works\[rq] from the +CrossRef API. +Is also has the ability to compare the current \[lq]works\[rq] document +with a JSON document retrieved previously. +The program uses the CrossRef REST API. +It follows the etiquette suggested at +.IP +.nf +\f[C] +https://github.com/CrossRef/rest-api-doc#etiquette +\f[R] +.fi +.SH OPTIONS +.TP +-help +display help +.TP +-license +display license +.TP +-diff JSON_FILENAME +compares the JSON_FILENAME with the current works retrieved and displays +a diff between them as a JSON array where the first element is the old +values and the second element is the new values. +.TP +-mailto string +set the mailto value for API access +.TP +-version +display app version +.SH EXAMPLES +.PP +Return the types of objects in CrossRef (e.g.\ journal articles) +.IP +.nf +\f[C] + crossrefapi -mailto=\[dq]jdoe\[at]example.edu\[dq] types +\f[R] +.fi +.PP +Return the works for the doi \[lq]10.1037/0003-066x.59.1.29\[rq] +.IP +.nf +\f[C] + crossrefapi -mailto=\[dq]jdoe\[at]example.edu\[dq] \[rs] + works \[dq]10.1037/0003-066x.59.1.29\[dq] +\f[R] +.fi +.PP +Compare a previously retrieved \[lq]works.json\[rq] with the current +version. +.IP +.nf +\f[C] +crossrefapi -mailto=\[dq]jdoe\[at]example.edu\[dq] -diff works.json \[rs] + works \[dq]10.1037/0003-066x.59.1.29\[dq] +\f[R] +.fi +.SH AUTHORS +R. S. Doiel. diff --git a/page.tmpl b/page.tmpl index 20244fb..e3ef863 100644 --- a/page.tmpl +++ b/page.tmpl @@ -1,28 +1,58 @@ - Caltech Library's Digital Library Development Sandbox + ${title} +
-Caltech Library logo +Caltech Library logo
-${content} +${body}
+ + + + + + diff --git a/pagefind/fragment/unknown_187a131.pf_fragment b/pagefind/fragment/unknown_187a131.pf_fragment new file mode 100644 index 0000000..b039db0 Binary files /dev/null and b/pagefind/fragment/unknown_187a131.pf_fragment differ diff --git a/pagefind/fragment/unknown_1a91cfe.pf_fragment b/pagefind/fragment/unknown_1a91cfe.pf_fragment new file mode 100644 index 0000000..5c72f02 Binary files /dev/null and b/pagefind/fragment/unknown_1a91cfe.pf_fragment differ diff --git a/pagefind/fragment/unknown_40a9821.pf_fragment b/pagefind/fragment/unknown_40a9821.pf_fragment new file mode 100644 index 0000000..7b86afd Binary files /dev/null and b/pagefind/fragment/unknown_40a9821.pf_fragment differ diff --git a/pagefind/fragment/unknown_425e13f.pf_fragment b/pagefind/fragment/unknown_425e13f.pf_fragment new file mode 100644 index 0000000..371a089 Binary files /dev/null and b/pagefind/fragment/unknown_425e13f.pf_fragment differ diff --git a/pagefind/fragment/unknown_56f2108.pf_fragment b/pagefind/fragment/unknown_56f2108.pf_fragment new file mode 100644 index 0000000..1f41b70 Binary files /dev/null and b/pagefind/fragment/unknown_56f2108.pf_fragment differ diff --git a/pagefind/fragment/unknown_62d73c6.pf_fragment b/pagefind/fragment/unknown_62d73c6.pf_fragment new file mode 100644 index 0000000..c218b92 Binary files /dev/null and b/pagefind/fragment/unknown_62d73c6.pf_fragment differ diff --git a/pagefind/fragment/unknown_6ba5c54.pf_fragment b/pagefind/fragment/unknown_6ba5c54.pf_fragment new file mode 100644 index 0000000..8c21653 Binary files /dev/null and b/pagefind/fragment/unknown_6ba5c54.pf_fragment differ diff --git a/pagefind/fragment/unknown_6cf87d9.pf_fragment b/pagefind/fragment/unknown_6cf87d9.pf_fragment new file mode 100644 index 0000000..3183f7a Binary files /dev/null and b/pagefind/fragment/unknown_6cf87d9.pf_fragment differ diff --git a/pagefind/fragment/unknown_7cad335.pf_fragment b/pagefind/fragment/unknown_7cad335.pf_fragment new file mode 100644 index 0000000..3c2fb80 Binary files /dev/null and b/pagefind/fragment/unknown_7cad335.pf_fragment differ diff --git a/pagefind/fragment/unknown_9c205bb.pf_fragment b/pagefind/fragment/unknown_9c205bb.pf_fragment new file mode 100644 index 0000000..acd1b9e Binary files /dev/null and b/pagefind/fragment/unknown_9c205bb.pf_fragment differ diff --git a/pagefind/fragment/unknown_beb918f.pf_fragment b/pagefind/fragment/unknown_beb918f.pf_fragment new file mode 100644 index 0000000..a03774f Binary files /dev/null and b/pagefind/fragment/unknown_beb918f.pf_fragment differ diff --git a/pagefind/fragment/unknown_cc1392b.pf_fragment b/pagefind/fragment/unknown_cc1392b.pf_fragment new file mode 100644 index 0000000..037a69a Binary files /dev/null and b/pagefind/fragment/unknown_cc1392b.pf_fragment differ diff --git a/pagefind/fragment/unknown_edfb6ce.pf_fragment b/pagefind/fragment/unknown_edfb6ce.pf_fragment new file mode 100644 index 0000000..1431532 Binary files /dev/null and b/pagefind/fragment/unknown_edfb6ce.pf_fragment differ diff --git a/pagefind/index/unknown_394a8dc.pf_index b/pagefind/index/unknown_394a8dc.pf_index new file mode 100644 index 0000000..c15419b Binary files /dev/null and b/pagefind/index/unknown_394a8dc.pf_index differ diff --git a/pagefind/index/unknown_3961ed1.pf_index b/pagefind/index/unknown_3961ed1.pf_index new file mode 100644 index 0000000..dbdafd0 Binary files /dev/null and b/pagefind/index/unknown_3961ed1.pf_index differ diff --git a/pagefind/index/unknown_4bb2fc3.pf_index b/pagefind/index/unknown_4bb2fc3.pf_index new file mode 100644 index 0000000..837c303 Binary files /dev/null and b/pagefind/index/unknown_4bb2fc3.pf_index differ diff --git a/pagefind/index/unknown_7641acd.pf_index b/pagefind/index/unknown_7641acd.pf_index new file mode 100644 index 0000000..31c3dd8 Binary files /dev/null and b/pagefind/index/unknown_7641acd.pf_index differ diff --git a/pagefind/index/unknown_ac903f9.pf_index b/pagefind/index/unknown_ac903f9.pf_index new file mode 100644 index 0000000..22d8304 Binary files /dev/null and b/pagefind/index/unknown_ac903f9.pf_index differ diff --git a/pagefind/index/unknown_d64e275.pf_index b/pagefind/index/unknown_d64e275.pf_index new file mode 100644 index 0000000..2ae6de4 Binary files /dev/null and b/pagefind/index/unknown_d64e275.pf_index differ diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json new file mode 100644 index 0000000..eedf091 --- /dev/null +++ b/pagefind/pagefind-entry.json @@ -0,0 +1 @@ +{"version":"0.12.0","languages":{"unknown":{"hash":"unknown_5fc02da837b7bfa","wasm":null,"page_count":9}}} \ No newline at end of file diff --git a/pagefind/pagefind-modular-ui.css b/pagefind/pagefind-modular-ui.css new file mode 100644 index 0000000..9c6793e --- /dev/null +++ b/pagefind/pagefind-modular-ui.css @@ -0,0 +1,214 @@ +:root { + --pagefind-ui-scale: 0.8; + --pagefind-ui-primary: #034AD8; + --pagefind-ui-fade: #707070; + --pagefind-ui-text: #393939; + --pagefind-ui-background: #ffffff; + --pagefind-ui-border: #eeeeee; + --pagefind-ui-tag: #eeeeee; + --pagefind-ui-border-width: 2px; + --pagefind-ui-border-radius: 8px; + --pagefind-ui-image-border-radius: 8px; + --pagefind-ui-image-box-ratio: 3 / 2; + --pagefind-ui-font: system, -apple-system, ".SFNSText-Regular", + "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", + "Lucida Grande", sans-serif; +} + +[data-pfmod-hidden] { + display: none !important; +} + +[data-pfmod-suppressed] { + opacity: 0 !important; + pointer-events: none !important; +} + +[data-pfmod-sr-hidden] { + -webkit-clip: rect(0 0 0 0) !important; + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(100%) !important; + clip-path: inset(100%) !important; + height: 1px !important; + overflow: hidden !important; + overflow: clip !important; + position: absolute !important; + white-space: nowrap !important; + width: 1px !important; +} + +[data-pfmod-loading] { + color: var(--pagefind-ui-text); + background-color: var(--pagefind-ui-text); + border-radius: var(--pagefind-ui-border-radius); + opacity: 0.1; + pointer-events: none; +} + +/* Input */ + +.pagefind-modular-input-wrapper { + position: relative; +} + +.pagefind-modular-input-wrapper::before { + background-color: var(--pagefind-ui-text); + width: calc(18px * var(--pagefind-ui-scale)); + height: calc(18px * var(--pagefind-ui-scale)); + top: calc(23px * var(--pagefind-ui-scale)); + left: calc(20px * var(--pagefind-ui-scale)); + content: ""; + position: absolute; + display: block; + opacity: 0.7; + -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); + mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); + -webkit-mask-size: 100%; + mask-size: 100%; + z-index: 9; + pointer-events: none; +} + +.pagefind-modular-input { + height: calc(64px * var(--pagefind-ui-scale)); + padding: 0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale)); + background-color: var(--pagefind-ui-background); + border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); + border-radius: var(--pagefind-ui-border-radius); + font-size: calc(21px * var(--pagefind-ui-scale)); + position: relative; + appearance: none; + -webkit-appearance: none; + display: flex; + width: 100%; + box-sizing: border-box; + font-weight: 700; +} + +.pagefind-modular-input::placeholder { + opacity: 0.2; +} + +.pagefind-modular-input-clear { + position: absolute; + top: calc(2px * var(--pagefind-ui-scale)); + right: calc(2px * var(--pagefind-ui-scale)); + height: calc(60px * var(--pagefind-ui-scale)); + border-radius: var(--pagefind-ui-border-radius); + padding: 0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale)); + color: var(--pagefind-ui-text); + font-size: calc(14px * var(--pagefind-ui-scale)); + cursor: pointer; + background-color: var(--pagefind-ui-background); + border: none; + appearance: none; +} + +/* ResultList */ + +.pagefind-modular-list-result { + list-style-type: none; + display: flex; + align-items: flex-start; + gap: min(calc(40px * var(--pagefind-ui-scale)), 3%); + padding: calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale)); + border-top: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); +} + +.pagefind-modular-list-result:last-of-type { + border-bottom: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); +} + +.pagefind-modular-list-thumb { + width: min(30%, + calc((30% - (100px * var(--pagefind-ui-scale))) * 100000)); + max-width: calc(120px * var(--pagefind-ui-scale)); + margin-top: calc(10px * var(--pagefind-ui-scale)); + aspect-ratio: var(--pagefind-ui-image-box-ratio); + position: relative; +} + +.pagefind-modular-list-image { + display: block; + position: absolute; + left: 50%; + transform: translateX(-50%); + font-size: 0; + width: auto; + height: auto; + max-width: 100%; + max-height: 100%; + border-radius: var(--pagefind-ui-image-border-radius); +} + +.pagefind-modular-list-inner { + flex: 1; + display: flex; + flex-direction: column; + align-items: flex-start; + margin-top: calc(10px * var(--pagefind-ui-scale)); +} + +.pagefind-modular-list-title { + display: inline-block; + font-weight: 700; + font-size: calc(21px * var(--pagefind-ui-scale)); + margin-top: 0; + margin-bottom: 0; +} + +.pagefind-modular-list-link { + color: var(--pagefind-ui-text); + text-decoration: none; +} + +.pagefind-modular-list-link:hover { + text-decoration: underline; +} + +.pagefind-modular-list-excerpt { + display: inline-block; + font-weight: 400; + font-size: calc(16px * var(--pagefind-ui-scale)); + margin-top: calc(4px * var(--pagefind-ui-scale)); + margin-bottom: 0; + min-width: calc(250px * var(--pagefind-ui-scale)); +} + +/* FilterPills */ + +.pagefind-modular-filter-pills-wrapper { + overflow-x: scroll; + padding: 15px 0; +} + +.pagefind-modular-filter-pills { + display: flex; + gap: 6px; +} + +.pagefind-modular-filter-pill { + display: flex; + justify-content: center; + align-items: center; + border: none; + appearance: none; + padding: 0 calc(24px * var(--pagefind-ui-scale)); + background-color: var(--pagefind-ui-background); + color: var(--pagefind-ui-fade); + border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); + border-radius: calc(25px * var(--pagefind-ui-scale)); + font-size: calc(18px * var(--pagefind-ui-scale)); + height: calc(50px * var(--pagefind-ui-scale)); + cursor: pointer; + white-space: nowrap; +} + +.pagefind-modular-filter-pill:hover { + border-color: var(--pagefind-ui-primary); +} + +.pagefind-modular-filter-pill[aria-pressed="true"] { + border-color: var(--pagefind-ui-primary); + color: var(--pagefind-ui-primary); +} \ No newline at end of file diff --git a/pagefind/pagefind-modular-ui.js b/pagefind/pagefind-modular-ui.js new file mode 100644 index 0000000..2e1d27d --- /dev/null +++ b/pagefind/pagefind-modular-ui.js @@ -0,0 +1,7 @@ +(()=>{var b=Object.defineProperty;var w=(i,e)=>{for(var t in e)b(i,t,{get:e[t],enumerable:!0})};var f={};w(f,{FilterPills:()=>h,Input:()=>l,Instance:()=>p,ResultList:()=>a,Summary:()=>o});var r=class{constructor(e){this.element=document.createElement(e)}id(e){return this.element.id=e,this}class(e){return this.element.classList.add(e),this}attrs(e){for(let[t,s]of Object.entries(e))this.element.setAttribute(t,s);return this}text(e){return this.element.innerText=e,this}html(e){return this.element.innerHTML=e,this}handle(e,t){return this.element.addEventListener(e,t),this}addTo(e){return e instanceof r?e.element.appendChild(this.element):e.appendChild(this.element),this.element}};var T=async(i=100)=>new Promise(e=>setTimeout(e,i)),l=class{constructor(e={}){if(this.inputEl=null,this.clearEl=null,this.instance=null,this.searchID=0,this.debounceTimeoutMs=e.debounceTimeoutMs??300,e.inputElement){if(e.containerElement){console.warn("[Pagefind Input component]: inputElement and containerElement both supplied. Ignoring the container option.");return}this.initExisting(e.inputElement)}else if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Input component]: No selector supplied for containerElement or inputElement");return}this.inputEl.addEventListener("input",async t=>{if(this.instance&&typeof t?.target?.value=="string"){this.updateState(t.target.value);let s=++this.searchID;if(await T(this.debounceTimeoutMs),s!==this.searchID)return null;this.instance?.triggerSearch(t.target.value)}}),this.inputEl.addEventListener("keydown",t=>{t.key==="Escape"&&(++this.searchID,this.inputEl.value="",this.instance?.triggerSearch(""),this.updateState("")),t.key==="Enter"&&t.preventDefault()}),this.inputEl.addEventListener("focus",()=>{this.instance?.triggerLoad()})}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No container found for ${e} selector`);return}if(t.tagName==="INPUT")console.warn(`[Pagefind Input component]: Encountered input element for ${e} when a container was expected`),console.warn("[Pagefind Input component]: Treating containerElement option as inputElement and proceeding"),this.initExisting(e);else{t.innerHTML="";let s=new r("form").class("pagefind-modular-input-wrapper").attrs({role:"search","aria-label":"Search this site",action:"javascript:void(0);"});this.inputEl=new r("input").class("pagefind-modular-input").addTo(s),this.clearEl=new r("button").class("pagefind-modular-input-clear").attrs({"data-pfmod-suppressed":"true"}).text("Clear").handle("click",()=>{this.inputEl.value="",this.instance.triggerSearch(""),this.updateState("")}).addTo(s),s.addTo(t)}}initExisting(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No input element found for ${e} selector`);return}if(t.tagName!=="INPUT"){console.error(`[Pagefind Input component]: Expected ${e} to be an element`);return}this.inputEl=t}updateState(e){this.clearEl&&(e&&e?.length?this.clearEl.removeAttribute("data-pfmod-suppressed"):this.clearEl.setAttribute("data-pfmod-suppressed","true"))}register(e){this.instance=e,this.instance.on("search",(t,s)=>{this.inputEl&&document.activeElement!==this.inputEl&&(this.inputEl.value=t,this.updateState(t))})}focus(){this.inputEl&&this.inputEl.focus()}};var g=i=>{if(i instanceof Element)return[i];if(Array.isArray(i)&&i.every(e=>e instanceof Element))return i;if(typeof i=="string"||i instanceof String){let e=document.createElement("div");return e.innerHTML=i,[...e.childNodes]}else return console.error(`[Pagefind ResultList component]: Expected template function to return an HTML element or string, got ${typeof i}`),[]},v=()=>{let i=(e=30)=>". ".repeat(Math.floor(10+Math.random()*e));return`
  • +
    +
    +

    ${i(30)}

    +

    ${i(40)}

    +
    +
  • `},y=i=>{let e=new r("li").class("pagefind-modular-list-result"),t=new r("div").class("pagefind-modular-list-thumb").addTo(e);i?.meta?.image&&new r("img").class("pagefind-modular-list-image").attrs({src:i.meta.image,alt:i.meta.image_alt||i.meta.title}).addTo(t);let s=new r("div").class("pagefind-modular-list-inner").addTo(e),n=new r("p").class("pagefind-modular-list-title").addTo(s);return new r("a").class("pagefind-modular-list-link").text(i.meta?.title).attrs({href:i.meta?.url||i.url}).addTo(n),new r("p").class("pagefind-modular-list-excerpt").html(i.excerpt).addTo(s),e.element},E=i=>{if(!(i instanceof HTMLElement))return null;let e=window.getComputedStyle(i).overflowY;return e!=="visible"&&e!=="hidden"?i:E(i.parentNode)},u=class{constructor(e={}){this.rawResult=e.result,this.placeholderNodes=e.placeholderNodes,this.resultFn=e.resultFn,this.intersectionEl=e.intersectionEl,this.result=null,this.waitForIntersection()}waitForIntersection(){if(!this.placeholderNodes?.length)return;let e={root:this.intersectionEl,rootMargin:"0px",threshold:.01};new IntersectionObserver((s,n)=>{this.result===null&&s?.[0]?.isIntersecting&&(this.load(),n.disconnect())},e).observe(this.placeholderNodes[0])}async load(){if(!this.placeholderNodes?.length)return;this.result=await this.rawResult.data();let e=this.resultFn(this.result),t=g(e);for(;this.placeholderNodes.length>1;)this.placeholderNodes.pop().remove();this.placeholderNodes[0].replaceWith(...t)}},a=class{constructor(e){if(this.intersectionEl=document.body,this.containerEl=null,this.results=[],this.placeholderTemplate=e.placeholderTemplate??v,this.resultTemplate=e.resultTemplate??y,e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind ResultList component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind ResultList component]: No container found for ${e} selector`);return}this.containerEl=t}append(e){for(let t of e)this.containerEl.appendChild(t)}register(e){e.on("results",t=>{this.containerEl&&(this.containerEl.innerHTML="",this.intersectionEl=E(this.containerEl),this.results=t.results.map(s=>{let n=g(this.placeholderTemplate());return this.append(n),new u({result:s,placeholderNodes:n,resultFn:this.resultTemplate,intersectionEl:this.intersectionEl})}))}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerHTML="")})}};var o=class{constructor(e={}){if(this.containerEl=null,this.defaultMessage=e.defaultMessage??"",this.term="",e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Summary component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Summary component]: No container found for ${e} selector`);return}this.containerEl=t,this.containerEl.innerText=this.defaultMessage}register(e){e.on("search",(t,s)=>{this.term=t}),e.on("results",t=>{if(!this.containerEl||!t)return;if(!this.term){this.containerEl.innerText=this.defaultMessage;return}let s=t?.results?.length??0;this.containerEl.innerText=`${s} result${s===1?"":"s"} for ${this.term}`}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerText=`Searching for ${this.term}...`)})}};var h=class{constructor(e={}){if(this.instance=null,this.wrapper=null,this.pillContainer=null,this.available={},this.selected=["All"],this.total=0,this.filterMemo="",this.filter=e.filter,this.ordering=e.ordering??null,this.alwaysShow=e.alwaysShow??!1,this.selectMultiple=e.selectMultiple??!1,!this.filter?.length){console.error("[Pagefind FilterPills component]: No filter option supplied, nothing to display");return}if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind FilterPills component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind FilterPills component]: No container found for ${e} selector`);return}t.innerHTML="";let s=`pagefind_modular_filter_pills_${this.filter}`,n=new r("div").class("pagefind-modular-filter-pills-wrapper").attrs({role:"group","aria-labelledby":s});this.alwaysShow||n.attrs({"data-pfmod-hidden":!0}),new r("div").id(s).class("pagefind-modular-filter-pills-label").attrs({"data-pfmod-sr-hidden":!0}).text(`Filter results by ${this.filter}`).addTo(n),this.pillContainer=new r("div").class("pagefind-modular-filter-pills").addTo(n),this.wrapper=n.addTo(t)}update(){let e=this.available.map(t=>t[0]).join("~");e==this.filterMemo?this.updateExisting():(this.renderNew(),this.filterMemo=e)}pushFilters(){let e=this.selected.filter(t=>t!=="All");this.instance.triggerFilter(this.filter,e)}pillInner(e,t){return this.total?`${e} (${t})`:`${e}`}renderNew(){this.available.forEach(([e,t])=>{new r("button").class("pagefind-modular-filter-pill").html(this.pillInner(e,t)).attrs({"aria-pressed":this.selected.includes(e),type:"button"}).handle("click",()=>{e==="All"?this.selected=["All"]:this.selected.includes(e)?this.selected=this.selected.filter(s=>s!==e):this.selectMultiple?this.selected.push(e):this.selected=[e],this.selected?.length?this.selected?.length>1&&(this.selected=this.selected.filter(s=>s!=="All")):this.selected=["All"],this.update(),this.pushFilters()}).addTo(this.pillContainer)})}updateExisting(){let e=[...this.pillContainer.childNodes];this.available.forEach(([t,s],n)=>{e[n].innerHTML=this.pillInner(t,s),e[n].setAttribute("aria-pressed",this.selected.includes(t))})}register(e){this.instance=e,this.instance.on("filters",t=>{if(!this.pillContainer)return;this.selectMultiple?t=t.available:t=t.total;let s=t[this.filter];if(!s){console.warn(`[Pagefind FilterPills component]: No possible values found for the ${this.filter} filter`);return}this.available=Object.entries(s),Array.isArray(this.ordering)?this.available.sort((n,d)=>{let m=this.ordering.indexOf(n[0]),_=this.ordering.indexOf(d[0]);return(m===-1?1/0:m)-(_===-1?1/0:_)}):this.available.sort((n,d)=>n[0].localeCompare(d[0])),this.available.unshift(["All",this.total]),this.update()}),e.on("results",t=>{this.pillContainer&&(this.total=t?.unfilteredResultCount||0,this.available?.[0]?.[0]==="All"&&(this.available[0][1]=this.total),this.total||this.alwaysShow?this.wrapper.removeAttribute("data-pfmod-hidden"):this.wrapper.setAttribute("data-pfmod-hidden","true"),this.update())})}};var F=async(i=50)=>await new Promise(e=>setTimeout(e,i)),c;try{c=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?modular-ui.js.*$/)[1]}catch{c="/_pagefind/",console.warn(`Pagefind couldn't determine the base of the bundle from the javascript import path. Falling back to the default of ${c}.`),console.warn("You can configure this by passing a bundlePath option to PagefindComposable Instance"),console.warn(`[DEBUG: Loaded from ${document?.currentScript?.src??"unknown"}]`)}var p=class{constructor(e={}){this.__pagefind__=null,this.__initializing__=null,this.__searchID__=0,this.__hooks__={search:[],filters:[],loading:[],results:[]},this.components=[],this.searchTerm="",this.searchFilters={},this.searchResult={},this.availableFilters=null,this.totalFilters=null,this.options={bundlePath:e.bundlePath??c,mergeIndex:e.mergeIndex??[]},delete e.bundlePath,delete e.resetStyles,delete e.processResult,delete e.processTerm,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,this.pagefindOptions=e}add(e){e?.register?.(this),this.components.push(e)}on(e,t){if(!this.__hooks__[e]){let s=Object.keys(this.__hooks__).join(", ");console.error(`[Pagefind Composable]: Unknown event type ${e}. Supported events: [${s}]`);return}if(typeof t!="function"){console.error(`[Pagefind Composable]: Expected callback to be a function, received ${typeof t}`);return}this.__hooks__[e].push(t)}triggerLoad(){this.__load__()}triggerSearch(e){this.searchTerm=e,this.__dispatch__("search",e,this.searchFilters),this.__search__(e,this.searchFilters)}triggerSearchWithFilters(e,t){this.searchTerm=e,this.searchFilters=t,this.__dispatch__("search",e,t),this.__search__(e,t)}triggerFilters(e){this.searchFilters=e,this.__dispatch__("search",this.searchTerm,e),this.__search__(this.searchTerm,e)}triggerFilter(e,t){this.searchFilters=this.searchFilters||{},this.searchFilters[e]=t,this.__dispatch__("search",this.searchTerm,this.searchFilters),this.__search__(this.searchTerm,this.searchFilters)}__dispatch__(e,...t){this.__hooks__[e]?.forEach(s=>s?.(...t))}async __clear__(){this.__dispatch__("results",{results:[],unfilteredTotalCount:0}),this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}async __search__(e,t){this.__dispatch__("loading"),await this.__load__();let s=++this.__searchID__;if(!e||!e.length)return this.__clear__();let n=await this.__pagefind__.search(e,{filters:t});n&&this.__searchID__===s&&(n.filters&&Object.keys(n.filters)?.length&&(this.availableFilters=n.filters,this.totalFilters=n.totalFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})),this.searchResult=n,this.__dispatch__("results",this.searchResult))}async __load__(){if(this.__initializing__){for(;!this.__pagefind__;)await F(50);return}if(this.__initializing__=!0,!this.__pagefind__){let e=await import(`${this.options.bundlePath}pagefind.js`);await e.options(this.pagefindOptions||{});for(let t of this.options.mergeIndex){if(!t.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let s=t.bundlePath;delete t.bundlePath,await e.mergeIndex(s,t)}this.__pagefind__=e}this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}};window.PagefindModularUI=f;})(); diff --git a/pagefind/pagefind-ui.css b/pagefind/pagefind-ui.css new file mode 100644 index 0000000..303ae74 --- /dev/null +++ b/pagefind/pagefind-ui.css @@ -0,0 +1 @@ +.pagefind-ui__result.svelte-j9e30.svelte-j9e30{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-j9e30.svelte-j9e30:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-thumb.svelte-j9e30.svelte-j9e30{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-j9e30.svelte-j9e30{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-j9e30.svelte-j9e30{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-j9e30.svelte-j9e30{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-j9e30.svelte-j9e30{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-j9e30.svelte-j9e30{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}legend.svelte-1v2r7ls.svelte-1v2r7ls{position:absolute;clip:rect(0 0 0 0)}.pagefind-ui__filter-panel.svelte-1v2r7ls.svelte-1v2r7ls{min-width:min(calc(260px * var(--pagefind-ui-scale)),100%);flex:1;display:flex;flex-direction:column;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{border:0;padding:0}.pagefind-ui__filter-block.svelte-1v2r7ls.svelte-1v2r7ls{padding:0;display:block;border-bottom:solid calc(2px * var(--pagefind-ui-scale)) var(--pagefind-ui-border);padding:calc(20px * var(--pagefind-ui-scale)) 0}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls{font-size:calc(16px * var(--pagefind-ui-scale));position:relative;display:flex;align-items:center;list-style:none;font-weight:700;cursor:pointer;height:calc(24px * var(--pagefind-ui-scale))}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls::-webkit-details-marker{display:none}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls:after{position:absolute;content:"";right:calc(6px * var(--pagefind-ui-scale));top:50%;width:calc(8px * var(--pagefind-ui-scale));height:calc(8px * var(--pagefind-ui-scale));border:solid calc(2px * var(--pagefind-ui-scale)) currentColor;border-right:0;border-top:0;transform:translateY(-70%) rotate(-45deg)}.pagefind-ui__filter-block[open].svelte-1v2r7ls .pagefind-ui__filter-name.svelte-1v2r7ls:after{transform:translateY(-70%) rotate(-225deg)}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{display:flex;flex-direction:column;gap:calc(20px * var(--pagefind-ui-scale));padding-top:calc(30px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls{position:relative;display:flex;align-items:center;gap:calc(8px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls:before{position:absolute;content:"";top:50%;left:calc(8px * var(--pagefind-ui-scale));width:0px;height:0px;border:solid 1px #fff;opacity:0;transform:translate(calc(4.5px * var(--pagefind-ui-scale) * -1),calc(.8px * var(--pagefind-ui-scale))) skew(-5deg) rotate(-45deg);transform-origin:top left;border-top:0;border-right:0;pointer-events:none}.pagefind-ui__filter-value.pagefind-ui__filter-value--checked.svelte-1v2r7ls.svelte-1v2r7ls:before{opacity:1;width:calc(9px * var(--pagefind-ui-scale));height:calc(4px * var(--pagefind-ui-scale));transition:width .1s ease-out .1s,height .1s ease-in}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls{margin:0;width:calc(16px * var(--pagefind-ui-scale));height:calc(16px * var(--pagefind-ui-scale));border:solid 1px var(--pagefind-ui-border);appearance:none;-webkit-appearance:none;border-radius:calc(var(--pagefind-ui-border-radius) / 2);background-color:var(--pagefind-ui-background);cursor:pointer}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls:checked{background-color:var(--pagefind-ui-primary);border:solid 1px var(--pagefind-ui-primary)}.pagefind-ui__filter-label.svelte-1v2r7ls.svelte-1v2r7ls{cursor:pointer;font-size:calc(16px * var(--pagefind-ui-scale));font-weight:400}.pagefind-ui--reset *:where(:not(html,iframe,canvas,img,svg,video):not(svg *,symbol *)){all:unset;display:revert}.pagefind-ui--reset *,.pagefind-ui--reset *:before,.pagefind-ui--reset *:after{box-sizing:border-box}.pagefind-ui--reset a,.pagefind-ui--reset button{cursor:revert}.pagefind-ui--reset ol,.pagefind-ui--reset ul,.pagefind-ui--reset menu{list-style:none}.pagefind-ui--reset img{max-width:100%}.pagefind-ui--reset table{border-collapse:collapse}.pagefind-ui--reset input,.pagefind-ui--reset textarea{-webkit-user-select:auto}.pagefind-ui--reset textarea{white-space:revert}.pagefind-ui--reset meter{-webkit-appearance:revert;appearance:revert}.pagefind-ui--reset ::placeholder{color:unset}.pagefind-ui--reset :where([hidden]){display:none}.pagefind-ui--reset :where([contenteditable]:not([contenteditable="false"])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}.pagefind-ui--reset :where([draggable="true"]){-webkit-user-drag:element}.pagefind-ui--reset mark{all:revert}:root{--pagefind-ui-scale:.8;--pagefind-ui-primary:#393939;--pagefind-ui-text:#393939;--pagefind-ui-background:#ffffff;--pagefind-ui-border:#eeeeee;--pagefind-ui-tag:#eeeeee;--pagefind-ui-border-width:2px;--pagefind-ui-border-radius:8px;--pagefind-ui-image-border-radius:8px;--pagefind-ui-image-box-ratio:3 / 2;--pagefind-ui-font:system, -apple-system, ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", sans-serif}.pagefind-ui.svelte-1bkqzc5{width:100%;color:var(--pagefind-ui-text);font-family:var(--pagefind-ui-font)}.pagefind-ui__hidden.svelte-1bkqzc5{display:none!important}.pagefind-ui__suppressed.svelte-1bkqzc5{opacity:0;pointer-events:none}.pagefind-ui__form.svelte-1bkqzc5{position:relative}.pagefind-ui__form.svelte-1bkqzc5:before{background-color:var(--pagefind-ui-text);width:calc(18px * var(--pagefind-ui-scale));height:calc(18px * var(--pagefind-ui-scale));top:calc(23px * var(--pagefind-ui-scale));left:calc(20px * var(--pagefind-ui-scale));content:"";position:absolute;display:block;opacity:.7;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");-webkit-mask-size:100%;mask-size:100%;z-index:9;pointer-events:none}.pagefind-ui__search-input.svelte-1bkqzc5{height:calc(64px * var(--pagefind-ui-scale));padding:0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale));background-color:var(--pagefind-ui-background);border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);font-size:calc(21px * var(--pagefind-ui-scale));position:relative;appearance:none;-webkit-appearance:none;display:flex;width:100%;box-sizing:border-box;font-weight:700}.pagefind-ui__search-input.svelte-1bkqzc5::placeholder{opacity:.2}.pagefind-ui__search-clear.svelte-1bkqzc5{position:absolute;top:calc(2px * var(--pagefind-ui-scale));right:calc(2px * var(--pagefind-ui-scale));height:calc(60px * var(--pagefind-ui-scale));padding:0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale));color:var(--pagefind-ui-text);font-size:calc(14px * var(--pagefind-ui-scale));cursor:pointer;background-color:var(--pagefind-ui-background);border-radius:var(--pagefind-ui-border-radius)}.pagefind-ui__drawer.svelte-1bkqzc5{gap:calc(60px * var(--pagefind-ui-scale));display:flex;flex-direction:row;flex-wrap:wrap}.pagefind-ui__results-area.svelte-1bkqzc5{min-width:min(calc(400px * var(--pagefind-ui-scale)),100%);flex:1000;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__results.svelte-1bkqzc5{padding:0}.pagefind-ui__message.svelte-1bkqzc5{box-sizing:content-box;font-size:calc(16px * var(--pagefind-ui-scale));height:calc(24px * var(--pagefind-ui-scale));padding:calc(20px * var(--pagefind-ui-scale)) 0;display:flex;align-items:center;font-weight:700;margin-top:0}.pagefind-ui__button.svelte-1bkqzc5{margin-top:calc(40px * var(--pagefind-ui-scale));border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);height:calc(48px * var(--pagefind-ui-scale));padding:0 calc(12px * var(--pagefind-ui-scale));font-size:calc(16px * var(--pagefind-ui-scale));color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background);width:100%;text-align:center;font-weight:700;cursor:pointer}.pagefind-ui__button.svelte-1bkqzc5:hover{border-color:var(--pagefind-ui-primary);color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background)} diff --git a/pagefind/pagefind-ui.js b/pagefind/pagefind-ui.js new file mode 100644 index 0000000..ca987e1 --- /dev/null +++ b/pagefind/pagefind-ui.js @@ -0,0 +1 @@ +(()=>{var dn=Object.defineProperty;var S=(t,e)=>{for(var n in e)dn(t,n,{get:e[n],enumerable:!0})};function M(){}function Le(t){return t()}function gt(){return Object.create(null)}function V(t){t.forEach(Le)}function He(t){return typeof t=="function"}function X(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}var Ae;function Be(t,e){return Ae||(Ae=document.createElement("a")),Ae.href=e,t===Ae.href}function bt(t){return Object.keys(t).length===0}var Et=!1;function hn(){Et=!0}function mn(){Et=!1}function E(t,e){t.appendChild(e)}function v(t,e,n){t.insertBefore(e,n||null)}function R(t){t.parentNode&&t.parentNode.removeChild(t)}function oe(t,e){for(let n=0;nt.removeEventListener(e,n,r)}function g(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function gn(t){return Array.from(t.childNodes)}function $(t,e){e=""+e,t.wholeText!==e&&(t.data=e)}function Ge(t,e){t.value=e??""}function q(t,e,n){t.classList[n?"add":"remove"](e)}var Y=class{constructor(e=!1){this.is_svg=!1,this.is_svg=e,this.e=this.n=null}c(e){this.h(e)}m(e,n,r=null){this.e||(this.is_svg?this.e=pn(n.nodeName):this.e=y(n.nodeName),this.t=n,this.c(e)),this.i(r)}h(e){this.e.innerHTML=e,this.n=Array.from(this.e.childNodes)}i(e){for(let n=0;n{Me.delete(t),r&&(n&&t.d(1),r())}),t.o(e)}else r&&r()}var hs=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global;function vt(t,e){U(t,1,1,()=>{e.delete(t.key)})}function Ct(t,e,n,r,s,l,i,o,a,_,m,c){let d=t.length,b=l.length,u=d,f={};for(;u--;)f[t[u].key]=u;let p=[],C=new Map,D=new Map;for(u=b;u--;){let w=c(s,l,u),H=n(w),N=i.get(H);N?r&&N.p(w,e):(N=_(H,w),N.c()),C.set(H,p[u]=N),H in f&&D.set(H,Math.abs(u-f[H]))}let z=new Set,F=new Set;function W(w){j(w,1),w.m(o,m),i.set(w.key,w),m=w.first,b--}for(;d&&b;){let w=p[b-1],H=t[d-1],N=w.key,J=H.key;w===H?(m=w.first,d--,b--):C.has(J)?!i.has(N)||z.has(N)?W(w):F.has(J)?d--:D.get(N)>D.get(J)?(F.add(N),W(w)):(z.add(J),d--):(a(H,i),d--)}for(;d--;){let w=t[d];C.has(w.key)||a(w,i)}for(;b;)W(p[b-1]);return p}function wt(t,e,n){let r=t.$$.props[e];r!==void 0&&(t.$$.bound[r]=n,n(t.$$.ctx[r]))}function $e(t){t&&t.c()}function Ne(t,e,n,r){let{fragment:s,after_update:l}=t.$$;s&&s.m(e,n),r||qe(()=>{let i=t.$$.on_mount.map(Le).filter(He);t.$$.on_destroy?t.$$.on_destroy.push(...i):V(i),t.$$.on_mount=[]}),l.forEach(qe)}function ue(t,e){let n=t.$$;n.fragment!==null&&(V(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function vn(t,e){t.$$.dirty[0]===-1&&(te.push(t),yn(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{let u=b.length?b[0]:d;return _.ctx&&s(_.ctx[c],_.ctx[c]=u)&&(!_.skip_bound&&_.bound[c]&&_.bound[c](u),m&&vn(t,c)),d}):[],_.update(),m=!0,V(_.before_update),_.fragment=r?r(_.ctx):!1,e.target){if(e.hydrate){hn();let c=gn(e.target);_.fragment&&_.fragment.l(c),c.forEach(R)}else _.fragment&&_.fragment.c();e.intro&&j(t.$$.fragment),Ne(t,e.target,e.anchor,e.customElement),mn(),Rt()}le(a)}var Cn;typeof HTMLElement=="function"&&(Cn=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){let{on_mount:t}=this.$$;this.$$.on_disconnect=t.map(Le).filter(He);for(let e in this.$$.slotted)this.appendChild(this.$$.slotted[e])}attributeChangedCallback(t,e,n){this[t]=n}disconnectedCallback(){V(this.$$.on_disconnect)}$destroy(){ue(this,1),this.$destroy=M}$on(t,e){if(!He(e))return M;let n=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return n.push(e),()=>{let r=n.indexOf(e);r!==-1&&n.splice(r,1)}}$set(t){this.$$set&&!bt(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}});var L=class{$destroy(){ue(this,1),this.$destroy=M}$on(e,n){if(!He(n))return M;let r=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return r.push(n),()=>{let s=r.indexOf(n);s!==-1&&r.splice(s,1)}}$set(e){this.$$set&&!bt(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}};function A(t){let e=typeof t=="string"?t.charCodeAt(0):t;return e>=97&&e<=122||e>=65&&e<=90}function x(t){let e=typeof t=="string"?t.charCodeAt(0):t;return e>=48&&e<=57}function G(t){return A(t)||x(t)}var Tt=["art-lojban","cel-gaulish","no-bok","no-nyn","zh-guoyu","zh-hakka","zh-min","zh-min-nan","zh-xiang"];var xe={"en-gb-oed":"en-GB-oxendict","i-ami":"ami","i-bnn":"bnn","i-default":null,"i-enochian":null,"i-hak":"hak","i-klingon":"tlh","i-lux":"lb","i-mingo":null,"i-navajo":"nv","i-pwn":"pwn","i-tao":"tao","i-tay":"tay","i-tsu":"tsu","sgn-be-fr":"sfb","sgn-be-nl":"vgt","sgn-ch-de":"sgg","art-lojban":"jbo","cel-gaulish":null,"no-bok":"nb","no-nyn":"nn","zh-guoyu":"cmn","zh-hakka":"hak","zh-min":null,"zh-min-nan":"nan","zh-xiang":"hsn"};var wn={}.hasOwnProperty;function Oe(t,e={}){let n=kt(),r=String(t),s=r.toLowerCase(),l=0;if(t==null)throw new Error("Expected string, got `"+t+"`");if(wn.call(xe,s)){let o=xe[s];return(e.normalize===void 0||e.normalize===null||e.normalize)&&typeof o=="string"?Oe(o):(n[Tt.includes(s)?"regular":"irregular"]=r,n)}for(;A(s.charCodeAt(l))&&l<9;)l++;if(l>1&&l<9){if(n.language=r.slice(0,l),l<4){let o=0;for(;s.charCodeAt(l)===45&&A(s.charCodeAt(l+1))&&A(s.charCodeAt(l+2))&&A(s.charCodeAt(l+3))&&!A(s.charCodeAt(l+4));){if(o>2)return i(l,3,"Too many extended language subtags, expected at most 3 subtags");n.extendedLanguageSubtags.push(r.slice(l+1,l+4)),l+=4,o++}}for(s.charCodeAt(l)===45&&A(s.charCodeAt(l+1))&&A(s.charCodeAt(l+2))&&A(s.charCodeAt(l+3))&&A(s.charCodeAt(l+4))&&!A(s.charCodeAt(l+5))&&(n.script=r.slice(l+1,l+5),l+=5),s.charCodeAt(l)===45&&(A(s.charCodeAt(l+1))&&A(s.charCodeAt(l+2))&&!A(s.charCodeAt(l+3))?(n.region=r.slice(l+1,l+3),l+=3):x(s.charCodeAt(l+1))&&x(s.charCodeAt(l+2))&&x(s.charCodeAt(l+3))&&!x(s.charCodeAt(l+4))&&(n.region=r.slice(l+1,l+4),l+=4));s.charCodeAt(l)===45;){let o=l+1,a=o;for(;G(s.charCodeAt(a));){if(a-o>7)return i(a,1,"Too long variant, expected at most 8 characters");a++}if(a-o>4||a-o>3&&x(s.charCodeAt(o)))n.variants.push(r.slice(o,a)),l=a;else break}for(;s.charCodeAt(l)===45&&!(s.charCodeAt(l+1)===120||!G(s.charCodeAt(l+1))||s.charCodeAt(l+2)!==45||!G(s.charCodeAt(l+3)));){let o=l+2,a=0;for(;s.charCodeAt(o)===45&&G(s.charCodeAt(o+1))&&G(s.charCodeAt(o+2));){let _=o+1;for(o=_+2,a++;G(s.charCodeAt(o));){if(o-_>7)return i(o,2,"Too long extension, expected at most 8 characters");o++}}if(!a)return i(o,4,"Empty extension, extensions must have at least 2 characters of content");n.extensions.push({singleton:r.charAt(l+1),extensions:r.slice(l+3,o).split("-")}),l=o}}else l=0;if(l===0&&s.charCodeAt(l)===120||s.charCodeAt(l)===45&&s.charCodeAt(l+1)===120){l=l?l+2:1;let o=l;for(;s.charCodeAt(o)===45&&G(s.charCodeAt(o+1));){let a=l+1;for(o=a;G(s.charCodeAt(o));){if(o-a>7)return i(o,5,"Too long private-use area, expected at most 8 characters");o++}n.privateuse.push(r.slice(l+1,o)),l=o}}if(l!==r.length)return i(l,6,"Found superfluous content after tag");return n;function i(o,a,_){return e.warning&&e.warning(_,a,o),e.forgiving?n:kt()}}function kt(){return{language:null,extendedLanguageSubtags:[],script:null,region:null,variants:[],extensions:[],privateuse:[],irregular:null,regular:null}}function St(t,e,n){let r=t.slice();return r[8]=e[n][0],r[9]=e[n][1],r}function Tn(t){let e,n,r,s,l,i=t[0]&&At(t);return{c(){i&&i.c(),e=k(),n=y("div"),r=y("p"),r.textContent=`${t[3](30)}`,s=k(),l=y("p"),l.textContent=`${t[3](40)}`,g(r,"class","pagefind-ui__result-title pagefind-ui__loading svelte-j9e30"),g(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-j9e30"),g(n,"class","pagefind-ui__result-inner svelte-j9e30")},m(o,a){i&&i.m(o,a),v(o,e,a),v(o,n,a),E(n,r),E(n,s),E(n,l)},p(o,a){o[0]?i||(i=At(o),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(o){i&&i.d(o),o&&R(e),o&&R(n)}}}function kn(t){let e,n,r,s,l=t[1].meta?.title+"",i,o,a,_=t[1].excerpt+"",m,c=t[0]&&Ft(t),d=t[2].length&&Ht(t);return{c(){c&&c.c(),e=k(),n=y("div"),r=y("p"),s=y("a"),o=k(),a=y("p"),m=k(),d&&d.c(),g(s,"class","pagefind-ui__result-link svelte-j9e30"),g(s,"href",i=t[1].meta?.url||t[1].url),g(r,"class","pagefind-ui__result-title svelte-j9e30"),g(a,"class","pagefind-ui__result-excerpt svelte-j9e30"),g(n,"class","pagefind-ui__result-inner svelte-j9e30")},m(b,u){c&&c.m(b,u),v(b,e,u),v(b,n,u),E(n,r),E(r,s),s.innerHTML=l,E(n,o),E(n,a),a.innerHTML=_,E(n,m),d&&d.m(n,null)},p(b,u){b[0]?c?c.p(b,u):(c=Ft(b),c.c(),c.m(e.parentNode,e)):c&&(c.d(1),c=null),u&2&&l!==(l=b[1].meta?.title+"")&&(s.innerHTML=l),u&2&&i!==(i=b[1].meta?.url||b[1].url)&&g(s,"href",i),u&2&&_!==(_=b[1].excerpt+"")&&(a.innerHTML=_),b[2].length?d?d.p(b,u):(d=Ht(b),d.c(),d.m(n,null)):d&&(d.d(1),d=null)},d(b){c&&c.d(b),b&&R(e),b&&R(n),d&&d.d()}}}function At(t){let e;return{c(){e=y("div"),g(e,"class","pagefind-ui__result-thumb pagefind-ui__loading svelte-j9e30")},m(n,r){v(n,e,r)},d(n){n&&R(e)}}}function Ft(t){let e,n=t[1].meta.image&&Mt(t);return{c(){e=y("div"),n&&n.c(),g(e,"class","pagefind-ui__result-thumb svelte-j9e30")},m(r,s){v(r,e,s),n&&n.m(e,null)},p(r,s){r[1].meta.image?n?n.p(r,s):(n=Mt(r),n.c(),n.m(e,null)):n&&(n.d(1),n=null)},d(r){r&&R(e),n&&n.d()}}}function Mt(t){let e,n,r;return{c(){e=y("img"),g(e,"class","pagefind-ui__result-image svelte-j9e30"),Be(e.src,n=t[1].meta?.image)||g(e,"src",n),g(e,"alt",r=t[1].meta?.image_alt||t[1].meta?.title)},m(s,l){v(s,e,l)},p(s,l){l&2&&!Be(e.src,n=s[1].meta?.image)&&g(e,"src",n),l&2&&r!==(r=s[1].meta?.image_alt||s[1].meta?.title)&&g(e,"alt",r)},d(s){s&&R(e)}}}function Ht(t){let e,n=t[2],r=[];for(let s=0;st.toLocaleUpperCase();function An(t,e,n){let{show_images:r=!0}=e,{process_result:s=null}=e,{result:l={data:async()=>{}}}=e,i=["title","image","image_alt","url"],o,a=[],_=async c=>{n(1,o=await c.data()),n(1,o=s?.(o)??o),n(2,a=Object.entries(o.meta).filter(([d])=>!i.includes(d)))},m=(c=30)=>". ".repeat(Math.floor(10+Math.random()*c));return t.$$set=c=>{"show_images"in c&&n(0,r=c.show_images),"process_result"in c&&n(4,s=c.process_result),"result"in c&&n(5,l=c.result)},t.$$.update=()=>{if(t.$$.dirty&32)e:_(l)},[r,o,a,m,s,l]}var We=class extends L{constructor(e){super(),Q(this,e,An,Sn,X,{show_images:0,process_result:4,result:5})}},jt=We;function Dt(t,e,n){let r=t.slice();return r[7]=e[n][0],r[8]=e[n][1],r[9]=e,r[10]=n,r}function zt(t,e,n){let r=t.slice();return r[11]=e[n][0],r[12]=e[n][1],r[13]=e,r[14]=n,r}function It(t){let e,n,r=t[3]("filters_label")+"",s,l,i=Object.entries(t[1]),o=[];for(let a=0;at.toLocaleUpperCase();function Mn(t,e,n){let{available_filters:r=null}=e,{show_empty_filters:s=!0}=e,{translate:l=()=>""}=e,i={},o=!1,a=!1;function _(m,c){i[`${m}:${c}`]=this.checked,n(0,i)}return t.$$set=m=>{"available_filters"in m&&n(1,r=m.available_filters),"show_empty_filters"in m&&n(2,s=m.show_empty_filters),"translate"in m&&n(3,l=m.translate)},t.$$.update=()=>{if(t.$$.dirty&34){e:if(r&&!o){n(5,o=!0);let m=Object.entries(r||{});m.length===1&&Object.entries(m[0][1])?.length<=6&&n(4,a=!0)}}},[i,r,s,l,a,o,_]}var Je=class extends L{constructor(e){super(),Q(this,e,Mn,Fn,X,{available_filters:1,show_empty_filters:2,translate:3,selected_filters:0})}get selected_filters(){return this.$$.ctx[0]}},Bt=Je;var Ke={};S(Ke,{comments:()=>Nn,default:()=>Dn,direction:()=>On,strings:()=>jn,thanks_to:()=>Hn});var Hn="Jan Claasen",Nn="",On="ltr",jn={placeholder:"Soek",clear_search:"Opruim",load_more:"Laai nog resultate",search_label:"Soek hierdie webwerf",filters_label:"Filters",zero_results:"Geen resultate vir [SEARCH_TERM]",many_results:"[COUNT] resultate vir [SEARCH_TERM]",one_result:"[COUNT] resultate vir [SEARCH_TERM]",alt_search:"Geen resultate vir [SEARCH_TERM]. Toon resultate vir [DIFFERENT_TERM] in plaas daarvan",search_suggestion:"Geen resultate vir [SEARCH_TERM]. Probeer eerder een van die volgende terme:",searching:"Soek vir [SEARCH_TERM]"},Dn={thanks_to:Hn,comments:Nn,direction:On,strings:jn};var Ye={};S(Ye,{comments:()=>In,default:()=>qn,direction:()=>Un,strings:()=>Pn,thanks_to:()=>zn});var zn="Pablo Villaverde ",In="",Un="ltr",Pn={placeholder:"Cerca",clear_search:"Netejar",load_more:"Veure m\xE9es resultats",search_label:"Cerca en aquest lloc",filters_label:"Filtres",zero_results:"No es van trobar resultats per [SEARCH_TERM]",many_results:"[COUNT] resultats trobats per [SEARCH_TERM]",one_result:"[COUNT] resultat trobat per [SEARCH_TERM]",alt_search:"No es van trobar resultats per [SEARCH_TERM]. Mostrant al seu lloc resultats per [DIFFERENT_TERM]",search_suggestion:"No es van trobar resultats per [SEARCH_TERM]. Proveu una de les cerques seg\xFCents:",searching:"Cercant [SEARCH_TERM]..."},qn={thanks_to:zn,comments:In,direction:Un,strings:Pn};var Xe={};S(Xe,{comments:()=>Bn,default:()=>$n,direction:()=>Gn,strings:()=>Vn,thanks_to:()=>Ln});var Ln="Jan Claasen",Bn="",Gn="ltr",Vn={placeholder:"Suche",clear_search:"L\xF6schen",load_more:"Mehr Ergebnisse laden",search_label:"Suche diese Seite",filters_label:"Filter",zero_results:"Keine Ergebnisse f\xFCr [SEARCH_TERM]",many_results:"[COUNT] Ergebnisse f\xFCr [SEARCH_TERM]",one_result:"[COUNT] Ergebnis f\xFCr [SEARCH_TERM]",alt_search:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Stattdessen werden Ergebnisse f\xFCr [DIFFERENT_TERM] angezeigt",search_suggestion:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Versuchen Sie eine der folgenden Suchen:",searching:"Suche f\xFCr [SEARCH_TERM]"},$n={thanks_to:Ln,comments:Bn,direction:Gn,strings:Vn};var Ze={};S(Ze,{comments:()=>Wn,default:()=>Yn,direction:()=>Jn,strings:()=>Kn,thanks_to:()=>xn});var xn="Liam Bigelow ",Wn="",Jn="ltr",Kn={placeholder:"Search",clear_search:"Clear",load_more:"Load more results",search_label:"Search this site",filters_label:"Filters",zero_results:"No results for [SEARCH_TERM]",many_results:"[COUNT] results for [SEARCH_TERM]",one_result:"[COUNT] result for [SEARCH_TERM]",alt_search:"No results for [SEARCH_TERM]. Showing results for [DIFFERENT_TERM] instead",search_suggestion:"No results for [SEARCH_TERM]. Try one of the following searches:",searching:"Searching for [SEARCH_TERM]..."},Yn={thanks_to:xn,comments:Wn,direction:Jn,strings:Kn};var Qe={};S(Qe,{comments:()=>Zn,default:()=>tr,direction:()=>Qn,strings:()=>er,thanks_to:()=>Xn});var Xn="Pablo Villaverde ",Zn="",Qn="ltr",er={placeholder:"Buscar",clear_search:"Limpiar",load_more:"Ver m\xE1s resultados",search_label:"Buscar en este sitio",filters_label:"Filtros",zero_results:"No se encontraron resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"No se encontraron resultados para [SEARCH_TERM]. Mostrando en su lugar resultados para [DIFFERENT_TERM]",search_suggestion:"No se encontraron resultados para [SEARCH_TERM]. Prueba una de las siguientes b\xFAsquedas:",searching:"Buscando [SEARCH_TERM]..."},tr={thanks_to:Xn,comments:Zn,direction:Qn,strings:er};var et={};S(et,{comments:()=>rr,default:()=>ir,direction:()=>sr,strings:()=>lr,thanks_to:()=>nr});var nr="Nicolas Friedli ",rr="",sr="ltr",lr={placeholder:"Rechercher",clear_search:"Nettoyer",load_more:"Charger plus de r\xE9sultats",search_label:"Recherche sur ce site",filters_label:"Filtres",zero_results:"Pas de r\xE9sultat pour [SEARCH_TERM]",many_results:"[COUNT] r\xE9sultats pour [SEARCH_TERM]",one_result:"[COUNT] r\xE9sultat pour [SEARCH_TERM]",alt_search:"Pas de r\xE9sultat pour [SEARCH_TERM]. Montre les r\xE9sultats pour [DIFFERENT_TERM] \xE0 la place",search_suggestion:"Pas de r\xE9sultat pour [SEARCH_TERM]. Essayer une des recherches suivantes:",searching:"Recherche [SEARCH_TERM]..."},ir={thanks_to:nr,comments:rr,direction:sr,strings:lr};var tt={};S(tt,{comments:()=>ar,default:()=>fr,direction:()=>cr,strings:()=>ur,thanks_to:()=>or});var or="Pablo Villaverde ",ar="",cr="ltr",ur={placeholder:"Buscar",clear_search:"Limpar",load_more:"Ver m\xE1is resultados",search_label:"Buscar neste sitio",filters_label:"Filtros",zero_results:"Non se atoparon resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados atopados para [SEARCH_TERM]",one_result:"[COUNT] resultado atopado para [SEARCH_TERM]",alt_search:"Non se atoparon resultados para [SEARCH_TERM]. Amosando no seu lugar resultados para [DIFFERENT_TERM]",search_suggestion:"Non se atoparon resultados para [SEARCH_TERM]. Probe unha das seguintes pesquisas:",searching:"Buscando [SEARCH_TERM]..."},fr={thanks_to:or,comments:ar,direction:cr,strings:ur};var nt={};S(nt,{comments:()=>dr,default:()=>pr,direction:()=>hr,strings:()=>mr,thanks_to:()=>_r});var _r="Tate",dr="",hr="ltr",mr={placeholder:"\u691C\u7D22",clear_search:"\u6D88\u3059",load_more:"\u3082\u3063\u3068\u8AAD\u307F\u8FBC\u3080",search_label:"\u3053\u306E\u30B5\u30A4\u30C8\u3092\u691C\u7D22",filters_label:"\u30D5\u30A3\u30EB\u30BF",zero_results:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u4EF6\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F",many_results:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",one_result:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",alt_search:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u4EF6\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002[DIFFERENT_TERM]\u306E\u691C\u7D22\u7D50\u679C\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059",search_suggestion:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u4EF6\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6B21\u306E\u3044\u305A\u308C\u304B\u306E\u691C\u7D22\u3092\u8A66\u3057\u3066\u304F\u3060\u3055\u3044",searching:"[SEARCH_TERM]\u3092\u691C\u7D22\u3057\u3066\u3044\u307E\u3059"},pr={thanks_to:_r,comments:dr,direction:hr,strings:mr};var rt={};S(rt,{comments:()=>br,default:()=>Rr,direction:()=>Er,strings:()=>yr,thanks_to:()=>gr});var gr="Paul van Brouwershaven",br="",Er="ltr",yr={placeholder:"Zoeken",clear_search:"Reset",load_more:"Meer resultaten laden",search_label:"Doorzoek deze site",filters_label:"Filters",zero_results:"Geen resultaten voor [SEARCH_TERM]",many_results:"[COUNT] resultaten voor [SEARCH_TERM]",one_result:"[COUNT] resultaat voor [SEARCH_TERM]",alt_search:"Geen resultaten voor [SEARCH_TERM]. In plaats daarvan worden resultaten voor [DIFFERENT_TERM] weergegeven",search_suggestion:"Geen resultaten voor [SEARCH_TERM]. Probeer een van de volgende zoekopdrachten:",searching:"Zoeken naar [SEARCH_TERM]..."},Rr={thanks_to:gr,comments:br,direction:Er,strings:yr};var st={};S(st,{comments:()=>Cr,default:()=>kr,direction:()=>wr,strings:()=>Tr,thanks_to:()=>vr});var vr="Christopher Wingate",Cr="",wr="ltr",Tr={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"S\xF8k p\xE5 denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v en av disse s\xF8keordene i stedet:",searching:"S\xF8ker etter [SEARCH_TERM]"},kr={thanks_to:vr,comments:Cr,direction:wr,strings:Tr};var lt={};S(lt,{comments:()=>Ar,default:()=>Hr,direction:()=>Fr,strings:()=>Mr,thanks_to:()=>Sr});var Sr="Jonatah",Ar="",Fr="ltr",Mr={placeholder:"Pesquisar",clear_search:"Limpar",load_more:"Ver mais resultados",search_label:"Pesquisar",filters_label:"Filtros",zero_results:"Nenhum resultado encontrado para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"Nenhum resultado encontrado para [SEARCH_TERM]. Exibindo resultados para [DIFFERENT_TERM]",search_suggestion:"Nenhum resultado encontrado para [SEARCH_TERM]. Tente uma das seguintes pesquisas:",searching:"Pesquisando por [SEARCH_TERM]..."},Hr={thanks_to:Sr,comments:Ar,direction:Fr,strings:Mr};var it={};S(it,{comments:()=>Or,default:()=>zr,direction:()=>jr,strings:()=>Dr,thanks_to:()=>Nr});var Nr="Aleksandr Gordeev",Or="",jr="ltr",Dr={placeholder:"\u041F\u043E\u0438\u0441\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0435\u0449\u0435",search_label:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0438\u043B\u044C\u0442\u0440\u044B",zero_results:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",alt_search:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u044B \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0438\u0437 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432",searching:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]"},zr={thanks_to:Nr,comments:Or,direction:jr,strings:Dr};var ot={};S(ot,{comments:()=>Ur,default:()=>Lr,direction:()=>Pr,strings:()=>qr,thanks_to:()=>Ir});var Ir="Montazar Al-Jaber ",Ur="",Pr="ltr",qr={placeholder:"S\xF6k",clear_search:"Rensa",load_more:"Visa fler tr\xE4ffar",search_label:"S\xF6k p\xE5 denna sida",filters_label:"Filter",zero_results:"[SEARCH_TERM] gav inga tr\xE4ffar",many_results:"[SEARCH_TERM] gav [COUNT] tr\xE4ffar",one_result:"[SEARCH_TERM] gav [COUNT] tr\xE4ff",alt_search:"[SEARCH_TERM] gav inga tr\xE4ffar. Visar resultat f\xF6r [DIFFERENT_TERM] ist\xE4llet",search_suggestion:"[SEARCH_TERM] gav inga tr\xE4ffar. F\xF6rs\xF6k igen med en av f\xF6ljande s\xF6kord:",searching:"S\xF6ker efter [SEARCH_TERM]..."},Lr={thanks_to:Ir,comments:Ur,direction:Pr,strings:qr};var at={};S(at,{comments:()=>Gr,default:()=>xr,direction:()=>Vr,strings:()=>$r,thanks_to:()=>Br});var Br="Amber Song",Gr="",Vr="ltr",$r={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},xr={thanks_to:Br,comments:Gr,direction:Vr,strings:$r};var ct={};S(ct,{comments:()=>Jr,default:()=>Xr,direction:()=>Kr,strings:()=>Yr,thanks_to:()=>Wr});var Wr="Amber Song",Jr="",Kr="ltr",Yr={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F09\u66F4\u591A\u7D50\u679C",search_label:"\u7AD9\u5167\u641C\u7D22",filters_label:"\u7BE9\u9078",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",many_results:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",one_result:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u6539\u70BA\u986F\u793A [DIFFERENT_TERM] \u7684\u76F8\u95DC\u7D50\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u8ACB\u5617\u8A66\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},Xr={thanks_to:Wr,comments:Jr,direction:Kr,strings:Yr};var ut={};S(ut,{comments:()=>Qr,default:()=>ns,direction:()=>es,strings:()=>ts,thanks_to:()=>Zr});var Zr="Amber Song",Qr="",es="ltr",ts={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},ns={thanks_to:Zr,comments:Qr,direction:es,strings:ts};var rs=[Ke,Ye,Xe,Ze,Qe,et,tt,nt,rt,st,lt,it,ot,at,ct,ut],Gt=rs,Vt=["../../translations/af.json","../../translations/ca.json","../../translations/de.json","../../translations/en.json","../../translations/es.json","../../translations/fr.json","../../translations/gl.json","../../translations/ja.json","../../translations/nl.json","../../translations/no.json","../../translations/pt.json","../../translations/ru.json","../../translations/sv.json","../../translations/zh-cn.json","../../translations/zh-tw.json","../../translations/zh.json"];function $t(t,e,n){let r=t.slice();return r[45]=e[n],r}function xt(t){let e,n,r;function s(i){t[30](i)}let l={show_empty_filters:t[3],available_filters:t[15],translate:t[16]};return t[6]!==void 0&&(l.selected_filters=t[6]),e=new Bt({props:l}),ne.push(()=>wt(e,"selected_filters",s)),{c(){$e(e.$$.fragment)},m(i,o){Ne(e,i,o),r=!0},p(i,o){let a={};o[0]&8&&(a.show_empty_filters=i[3]),o[0]&32768&&(a.available_filters=i[15]),!n&&o[0]&64&&(n=!0,a.selected_filters=i[6],yt(()=>n=!1)),e.$set(a)},i(i){r||(j(e.$$.fragment,i),r=!0)},o(i){U(e.$$.fragment,i),r=!1},d(i){ue(e,i)}}}function Wt(t){let e,n,r,s,l=[is,ls],i=[];function o(a,_){return a[11]?0:1}return n=o(t,[-1,-1]),r=i[n]=l[n](t),{c(){e=y("div"),r.c(),g(e,"class","pagefind-ui__results-area svelte-1bkqzc5")},m(a,_){v(a,e,_),i[n].m(e,null),s=!0},p(a,_){let m=n;n=o(a,_),n===m?i[n].p(a,_):(ae(),U(i[m],1,1,()=>{i[m]=null}),ce(),r=i[n],r?r.p(a,_):(r=i[n]=l[n](a),r.c()),j(r,1),r.m(e,null))},i(a){s||(j(r),s=!0)},o(a){U(r),s=!1},d(a){a&&R(e),i[n].d()}}}function ls(t){let e,n,r,s=[],l=new Map,i,o,a;function _(f,p){return f[10].results.length===0?cs:f[10].results.length===1?as:os}let m=_(t,[-1,-1]),c=m(t),d=t[10].results.slice(0,t[14]),b=f=>f[45].id;for(let f=0;ft[14]&&Kt(t);return{c(){e=y("p"),c.c(),n=k(),r=y("ol");for(let f=0;ff[14]?u?u.p(f,p):(u=Kt(f),u.c(),u.m(o.parentNode,o)):u&&(u.d(1),u=null)},i(f){if(!a){for(let p=0;p{u=null}),ce()),p[12]?f?(f.p(p,C),C[0]&4096&&j(f,1)):(f=Wt(p),f.c(),j(f,1),f.m(a,null)):f&&(ae(),U(f,1,1,()=>{f=null}),ce()),(!c||C[0]&4096)&&q(a,"pagefind-ui__hidden",!p[12]),(!c||C[0]&1)&&q(e,"pagefind-ui--reset",p[0])},i(p){c||(j(u),j(f),c=!0)},o(p){U(u),U(f),c=!1},d(p){p&&R(e),t[27](null),t[28](null),u&&u.d(),f&&f.d(),d=!1,V(b)}}}var fs=t=>t.preventDefault();function _s(t,e,n){let r={},s=Vt.map(h=>h.match(/([^\/]+)\.json$/)[1]);for(let h=0;hf[h]??ht[h]??"";Ve(()=>{let h=document?.querySelector?.("html")?.getAttribute?.("lang")||"en",T=Oe(h.toLocaleLowerCase());ht=r[`${T.language}-${T.script}-${T.region}`]||r[`${T.language}-${T.region}`]||r[`${T.language}`]||r.en});let mt=async()=>{if(!W&&(n(9,W=!0),!C)){let h=await import(`${l}pagefind.js`);await h.options(d||{});for(let T of b){if(!T.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let P=T.bundlePath;delete T.bundlePath,await h.mergeIndex(P,T)}C=h,Qt()}},Qt=async()=>{C&&(dt=await C.filters(),(!re||!Object.keys(re).length)&&n(15,re=dt))},en=h=>{let T={};return Object.entries(h).filter(([,P])=>P).forEach(([P])=>{let[I,_n]=P.split(/:(.*)$/);T[I]=T[I]||[],T[I].push(_n)}),T},se,tn=async(h,T)=>{if(!h){n(12,N=!1),se&&clearTimeout(se);return}let P=en(T),I=()=>nn(h,P);c>0&&h?(se&&clearTimeout(se),se=setTimeout(I,c),await pt(),C.preload(h,{filters:P})):I(),rn()},pt=async()=>{for(;!C;)mt(),await new Promise(h=>setTimeout(h,50))},nn=async(h,T)=>{n(13,_t=h||""),typeof _=="function"&&(h=_(h)),n(11,H=!0),n(12,N=!0),await pt();let P=++J,I=await C.search(h,{filters:T});J===P&&(I.filters&&Object.keys(I.filters)?.length&&n(15,re=I.filters),n(10,w=I),n(11,H=!1),n(14,ze=5))},rn=()=>{let h=z.offsetWidth;h!=F&&n(7,D.style.paddingRight=`${h+2}px`,D)},sn=h=>{h?.preventDefault(),n(14,ze+=5)},ln=h=>{h.key==="Escape"&&(n(5,p=""),D.blur()),h.key==="Enter"&&h.preventDefault()};function on(){p=this.value,n(5,p),n(19,u)}function an(h){ne[h?"unshift":"push"](()=>{D=h,n(7,D)})}function cn(h){ne[h?"unshift":"push"](()=>{z=h,n(8,z)})}let un=()=>{n(5,p=""),D.blur()};function fn(h){Se=h,n(6,Se)}return t.$$set=h=>{"base_path"in h&&n(20,l=h.base_path),"reset_styles"in h&&n(0,i=h.reset_styles),"show_images"in h&&n(1,o=h.show_images),"process_result"in h&&n(2,a=h.process_result),"process_term"in h&&n(21,_=h.process_term),"show_empty_filters"in h&&n(3,m=h.show_empty_filters),"debounce_timeout_ms"in h&&n(22,c=h.debounce_timeout_ms),"pagefind_options"in h&&n(23,d=h.pagefind_options),"merge_index"in h&&n(24,b=h.merge_index),"trigger_search_term"in h&&n(19,u=h.trigger_search_term),"translations"in h&&n(4,f=h.translations)},t.$$.update=()=>{if(t.$$.dirty[0]&524288)e:u&&(n(5,p=u),n(19,u=""));if(t.$$.dirty[0]&96)e:tn(p,Se)},[i,o,a,m,f,p,Se,D,z,W,w,H,N,_t,ze,re,Zt,mt,sn,u,l,_,c,d,b,ln,on,an,cn,un,fn]}var ft=class extends L{constructor(e){super(),Q(this,e,_s,us,X,{base_path:20,reset_styles:0,show_images:1,process_result:2,process_term:21,show_empty_filters:3,debounce_timeout_ms:22,pagefind_options:23,merge_index:24,trigger_search_term:19,translations:4},null,[-1,-1])}},Xt=ft;var je;try{je=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?ui.js.*$/)[1]}catch{je="/_pagefind/",console.warn(`Pagefind couldn't determine the base of the bundle from the javascript import path. Falling back to the default of ${je}.`),console.warn("You can configure this by passing a bundlePath option to PagefindUI"),console.warn(`[DEBUG: Loaded from ${document?.currentScript?.src??"unknown"}]`)}var De=class{constructor(e){this._pfs=null;let n=e.element??"[data-pagefind-ui]",r=e.bundlePath??je,s=e.resetStyles??!0,l=e.showImages??!0,i=e.processResult??null,o=e.processTerm??null,a=e.showEmptyFilters??!0,_=e.debounceTimeoutMs??300,m=e.mergeIndex??[],c=e.translations??[];delete e.element,delete e.bundlePath,delete e.resetStyles,delete e.showImages,delete e.processResult,delete e.processTerm,delete e.showEmptyFilters,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations;let d=document.querySelector(n);d?this._pfs=new Xt({target:d,props:{base_path:r,reset_styles:s,show_images:l,process_result:i,process_term:o,show_empty_filters:a,debounce_timeout_ms:_,merge_index:m,translations:c,pagefind_options:e}}):console.error(`Pagefind UI couldn't find the selector ${n}`)}triggerSearch(e){this._pfs.$$set({trigger_search_term:e})}};window.PagefindUI=De;})(); diff --git a/pagefind/pagefind.js b/pagefind/pagefind.js new file mode 100644 index 0000000..4d2dd16 --- /dev/null +++ b/pagefind/pagefind.js @@ -0,0 +1 @@ +const pagefind_version="0.12.0";let wasm_bindgen;(function(){const __exports={};let script_src;if(typeof document==='undefined'){script_src=location.href}else{script_src=new URL("UNHANDLED",location.href).toString()}let wasm;let cachedUint8Memory0=null;function getUint8Memory0(){if(cachedUint8Memory0===null||cachedUint8Memory0.byteLength===0){cachedUint8Memory0=new Uint8Array(wasm.memory.buffer)}return cachedUint8Memory0}let WASM_VECTOR_LEN=0;function passArray8ToWasm0(arg,malloc){const ptr=malloc(arg.length*1);getUint8Memory0().set(arg,ptr/1);WASM_VECTOR_LEN=arg.length;return ptr}__exports.init_pagefind=function(metadata_bytes){const ptr0=passArray8ToWasm0(metadata_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.init_pagefind(ptr0,len0);return ret};__exports.load_index_chunk=function(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_index_chunk(ptr,ptr0,len0);return ret};__exports.load_filter_chunk=function(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_filter_chunk(ptr,ptr0,len0);return ret};const cachedTextEncoder=new TextEncoder('utf-8');const encodeString=(typeof cachedTextEncoder.encodeInto==='function'?function(arg,view){return cachedTextEncoder.encodeInto(arg,view)}:function(arg,view){const buf=cachedTextEncoder.encode(arg);view.set(buf);return{read:arg.length,written:buf.length}});function passStringToWasm0(arg,malloc,realloc){if(realloc===undefined){const buf=cachedTextEncoder.encode(arg);const ptr=malloc(buf.length);getUint8Memory0().subarray(ptr,ptr+buf.length).set(buf);WASM_VECTOR_LEN=buf.length;return ptr}let len=arg.length;let ptr=malloc(len);const mem=getUint8Memory0();let offset=0;for(;offset0x7F)break;mem[ptr+offset]=code}if(offset!==len){if(offset!==0){arg=arg.slice(offset)}ptr=realloc(ptr,len,len=offset+arg.length*3);const view=getUint8Memory0().subarray(ptr+offset,ptr+len);const ret=encodeString(arg,view);offset+=ret.written}WASM_VECTOR_LEN=offset;return ptr}__exports.add_synthetic_filter=function(ptr,filter){const ptr0=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.add_synthetic_filter(ptr,ptr0,len0);return ret};let cachedInt32Memory0=null;function getInt32Memory0(){if(cachedInt32Memory0===null||cachedInt32Memory0.byteLength===0){cachedInt32Memory0=new Int32Array(wasm.memory.buffer)}return cachedInt32Memory0}const cachedTextDecoder=new TextDecoder('utf-8',{ignoreBOM:true,fatal:true});cachedTextDecoder.decode();function getStringFromWasm0(ptr,len){return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr,ptr+len))}__exports.request_indexes=function(ptr,query){try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;wasm.request_indexes(retptr,ptr,ptr0,len0);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(r0,r1)}};__exports.request_filter_indexes=function(ptr,filters){try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(filters,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;wasm.request_filter_indexes(retptr,ptr,ptr0,len0);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(r0,r1)}};__exports.request_all_filter_indexes=function(ptr){try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);wasm.request_all_filter_indexes(retptr,ptr);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(r0,r1)}};__exports.filters=function(ptr){try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);wasm.filters(retptr,ptr);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(r0,r1)}};__exports.search=function(ptr,query,filter,sort,exact){try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ptr1=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len1=WASM_VECTOR_LEN;const ptr2=passStringToWasm0(sort,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len2=WASM_VECTOR_LEN;wasm.search(retptr,ptr,ptr0,len0,ptr1,len1,ptr2,len2,exact);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(r0,r1)}};async function load(module,imports){if(typeof Response==='function'&&module instanceof Response){if(typeof WebAssembly.instantiateStreaming==='function'){try{return await WebAssembly.instantiateStreaming(module,imports)}catch(e){if(module.headers.get('Content-Type')!='application/wasm'){console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",e)}else{throw e}}}const bytes=await module.arrayBuffer();return await WebAssembly.instantiate(bytes,imports)}else{const instance=await WebAssembly.instantiate(module,imports);if(instance instanceof WebAssembly.Instance){return{instance,module}}else{return instance}}}function getImports(){const imports={};imports.wbg={};return imports}function initMemory(imports,maybe_memory){}function finalizeInit(instance,module){wasm=instance.exports;init.__wbindgen_wasm_module=module;cachedInt32Memory0=null;cachedUint8Memory0=null;return wasm}function initSync(module){const imports=getImports();initMemory(imports);if(!(module instanceof WebAssembly.Module)){module=new WebAssembly.Module(module)}const instance=new WebAssembly.Instance(module,imports);return finalizeInit(instance,module)}async function init(input){if(typeof input==='undefined'){input=script_src.replace(/\.js$/,'_bg.wasm')}const imports=getImports();if(typeof input==='string'||(typeof Request==='function'&&input instanceof Request)||(typeof URL==='function'&&input instanceof URL)){input=fetch(input)}initMemory(imports);const{instance,module}=await load(await input,imports);return finalizeInit(instance,module)}wasm_bindgen=Object.assign(init,{initSync},__exports)})();let gunzip;(()=>{var u8=Uint8Array;var u16=Uint16Array;var u32=Uint32Array;var fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);var fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);var clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);var freb=function(eb,start){var b=new u16(31);for(var i=0;i<31;++i){b[i]=start+=1<>>1|(i&21845)<<1;x=(x&52428)>>>2|(x&13107)<<2;x=(x&61680)>>>4|(x&3855)<<4;rev[i]=((x&65280)>>>8|(x&255)<<8)>>>1}var x;var i;var hMap=function(cd,mb,r){var s=cd.length;var i=0;var l=new u16(mb);for(;i>>rvb]=sv}}}}else{co=new u16(s);for(i=0;i>>15-cd[i]}}}return co};var flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;var i;for(i=144;i<256;++i)flt[i]=9;var i;for(i=256;i<280;++i)flt[i]=7;var i;for(i=280;i<288;++i)flt[i]=8;var i;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var i;var flrm=hMap(flt,9,1);var fdrm=hMap(fdt,5,1);var max=function(a){var m=a[0];for(var i=1;im)m=a[i]}return m};var bits=function(d,p,m){var o=p/8|0;return(d[o]|d[o+1]<<8)>>(p&7)&m};var bits16=function(d,p){var o=p/8|0;return(d[o]|d[o+1]<<8|d[o+2]<<16)>>(p&7)};var shft=function(p){return(p+7)/8|0};var slc=function(v,s,e){if(s==null||s<0)s=0;if(e==null||e>v.length)e=v.length;var n=new(v.BYTES_PER_ELEMENT==2?u16:v.BYTES_PER_ELEMENT==4?u32:u8)(e-s);n.set(v.subarray(s,e));return n};var ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"];var err=function(ind,msg,nt){var e=new Error(msg||ec[ind]);e.code=ind;if(Error.captureStackTrace)Error.captureStackTrace(e,err);if(!nt)throw e;return e};var inflt=function(dat,buf,st){var sl=dat.length;if(!sl||st&&st.f&&!st.l)return buf||new u8(0);var noBuf=!buf||st;var noSt=!st||st.i;if(!st)st={};if(!buf)buf=new u8(sl*3);var cbuf=function(l2){var bl=buf.length;if(l2>bl){var nbuf=new u8(Math.max(bl*2,l2));nbuf.set(buf);buf=nbuf}};var final=st.f||0,pos=st.p||0,bt=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n;var tbts=sl*8;do{if(!lm){final=bits(dat,pos,1);var type=bits(dat,pos+1,3);pos+=3;if(!type){var s=shft(pos)+4,l=dat[s-4]|dat[s-3]<<8,t=s+l;if(t>sl){if(noSt)err(0);break}if(noBuf)cbuf(bt+l);buf.set(dat.subarray(s,t),bt);st.b=bt+=l,st.p=pos=t*8,st.f=final;continue}else if(type==1)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(type==2){var hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4;var tl=hLit+bits(dat,pos+5,31)+1;pos+=14;var ldt=new u8(tl);var clt=new u8(19);for(var i=0;i>>4;if(s<16){ldt[i++]=s}else{var c=0,n=0;if(s==16)n=3+bits(dat,pos,3),pos+=2,c=ldt[i-1];else if(s==17)n=3+bits(dat,pos,7),pos+=3;else if(s==18)n=11+bits(dat,pos,127),pos+=7;while(n--)ldt[i++]=c}}var lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt);dbt=max(dt);lm=hMap(lt,lbt,1);dm=hMap(dt,dbt,1)}else err(1);if(pos>tbts){if(noSt)err(0);break}}if(noBuf)cbuf(bt+131072);var lms=(1<>>4;pos+=c&15;if(pos>tbts){if(noSt)err(0);break}if(!c)err(2);if(sym<256)buf[bt++]=sym;else if(sym==256){lpos=pos,lm=null;break}else{var add=sym-254;if(sym>264){var i=sym-257,b=fleb[i];add=bits(dat,pos,(1<>>4;if(!d)err(3);pos+=d&15;var dt=fd[dsym];if(dsym>3){var b=fdeb[dsym];dt+=bits16(dat,pos)&(1<tbts){if(noSt)err(0);break}if(noBuf)cbuf(bt+131072);var end=bt+add;for(;bt>3&1)+(flg>>4&1);zs>0;zs-=!d[st++]);return st+(flg&2)};var gzl=function(d){var l=d.length;return(d[l-4]|d[l-3]<<8|d[l-2]<<16|d[l-1]<<24)>>>0};function gunzipSync(data,out){return inflt(data.subarray(gzs(data),-8),out||new u8(gzl(data)))}var td=typeof TextDecoder!="undefined"&&new TextDecoder();var tds=0;try{td.decode(et,{stream:true});tds=1}catch(e){}gunzip=gunzipSync})();const asyncSleep=async(ms=100)=>{return new Promise(r=>setTimeout(r,ms))};class PagefindInstance{constructor(opts={}){this.backend=wasm_bindgen;this.decoder=new TextDecoder('utf-8');this.wasm=null;this.basePath=opts.basePath||"/_pagefind/";this.primary=opts.primary||false;if(this.primary){this.initPrimary()}if(/[^\/]$/.test(this.basePath)){this.basePath=`${this.basePath}/`}if(window?.location?.origin&&this.basePath.startsWith(window.location.origin)){this.basePath=this.basePath.replace(window.location.origin,'')}this.baseUrl=opts.baseUrl||this.defaultBasePath();if(!/^(\/|https?:\/\/)/.test(this.baseUrl)){this.baseUrl=`/${this.baseUrl}`}this.indexWeight=opts.indexWeight??1;this.mergeFilter=opts.mergeFilter??{};this.loaded_chunks={};this.loaded_filters={};this.loaded_fragments={};this.raw_ptr=null;this.searchMeta=null;this.languages=null}initPrimary(){try{this.basePath=import.meta.url.match(/^(.*\/)pagefind.js.*$/)[1]}catch(e){console.warn("Pagefind couldn't determine the base of the bundle from the import path. Falling back to the default.")}}defaultBasePath(){let default_base=this.basePath.match(/^(.*\/)_pagefind/)?.[1];return default_base||"/"}async options(options){const opts=["basePath","baseUrl","indexWeight","mergeFilter"];for(const[k,v]of Object.entries(options)){if(k==="mergeFilter"){let filters=this.stringifyFilters(v);let ptr=await this.getPtr();this.raw_ptr=this.backend.add_synthetic_filter(ptr,filters)}else if(opts.includes(k)){this[k]=v}else{console.warn(`Unknown Pagefind option ${k}. Allowed options: [${opts.join(', ')}]`)}}}decompress(data,file="unknown file"){if(this.decoder.decode(data.slice(0,12))==="pagefind_dcd"){return data.slice(12)}data=gunzip(data);if(this.decoder.decode(data.slice(0,12))!=="pagefind_dcd"){console.error(`Decompressing ${file} appears to have failed: Missing signature`);return data}return data.slice(12)}async init(language,opts){await this.loadEntry();let index=this.findIndex(language);let lang_wasm=index.wasm?index.wasm:"unknown";let resources=[this.loadMeta(index.hash)];if(opts.load_wasm===true){resources.push(this.loadWasm(lang_wasm))}await Promise.all(resources);this.raw_ptr=this.backend.init_pagefind(new Uint8Array(this.searchMeta))}async loadEntry(){try{let entry_json=await fetch(`${this.basePath}pagefind-entry.json?ts=${Date.now()}`);entry_json=await entry_json.json();this.languages=entry_json.languages;if(entry_json.version!==pagefind_version){if(this.primary){console.warn(["Pagefind JS version doesn't match the version in your search index.",`Pagefind JS: ${pagefind_version}. Pagefind index: ${entry_json.version}`,"If you upgraded Pagefind recently, you likely have a cached pagefind.js file.","If you encounter any search errors, try clearing your cache."].join('\n'))}else{console.warn(["Merging a Pagefind index from a different version than the main Pagefind instance.",`Main Pagefind JS: ${pagefind_version}. Merged index (${this.basePath}): ${entry_json.version}`,"If you encounter any search errors, make sure that both sites are running the same version of Pagefind."].join('\n'))}}}catch(e){console.error(`Failed to load Pagefind metadata:\n${e.toString()}`);throw new Error("Failed to load Pagefind metadata")}}findIndex(language){if(this.languages){let index=this.languages[language];if(index)return index;index=this.languages[language.split("-")[0]];if(index)return index;let topLang=Object.values(this.languages).sort((a,b)=>b.page_count-a.page_count);if(topLang[0])return topLang[0]}throw new Error("Pagefind Error: No language indexes found.")}async loadMeta(index){try{let compressed_meta=await fetch(`${this.basePath}pagefind.${index}.pf_meta`);compressed_meta=await compressed_meta.arrayBuffer();this.searchMeta=this.decompress(new Uint8Array(compressed_meta),"Pagefind metadata")}catch(e){console.error(`Failed to load the meta index:\n${e.toString()}`)}}async loadWasm(language){try{const wasm_url=`${this.basePath}wasm.${language}.pagefind`;let compressed_wasm=await fetch(wasm_url);compressed_wasm=await compressed_wasm.arrayBuffer();const final_wasm=this.decompress(new Uint8Array(compressed_wasm),"Pagefind WebAssembly");if(!final_wasm){throw new Error("No WASM after decompression")}this.wasm=await this.backend(final_wasm)}catch(e){console.error(`Failed to load the Pagefind WASM:\n${e.toString()}`);throw new Error(`Failed to load the Pagefind WASM:\n${e.toString()}`)}}async _loadGenericChunk(url,method){try{let compressed_chunk=await fetch(url);compressed_chunk=await compressed_chunk.arrayBuffer();let chunk=this.decompress(new Uint8Array(compressed_chunk),url);let ptr=await this.getPtr();this.raw_ptr=this.backend[method](ptr,chunk)}catch(e){console.error(`Failed to load the index chunk ${url}:\n${e.toString()}`)}}async loadChunk(hash){if(!this.loaded_chunks[hash]){const url=`${this.basePath}index/${hash}.pf_index`;this.loaded_chunks[hash]=this._loadGenericChunk(url,"load_index_chunk")}return await this.loaded_chunks[hash]}async loadFilterChunk(hash){if(!this.loaded_filters[hash]){const url=`${this.basePath}filter/${hash}.pf_filter`;this.loaded_filters[hash]=this._loadGenericChunk(url,"load_filter_chunk")}return await this.loaded_filters[hash]}async _loadFragment(hash){let compressed_fragment=await fetch(`${this.basePath}fragment/${hash}.pf_fragment`);compressed_fragment=await compressed_fragment.arrayBuffer();let fragment=this.decompress(new Uint8Array(compressed_fragment),`Fragment ${hash}`);return JSON.parse(new TextDecoder().decode(fragment))}async loadFragment(hash,excerpt=[0,0],locations=[]){if(!this.loaded_fragments[hash]){this.loaded_fragments[hash]=this._loadFragment(hash)}let fragment=await this.loaded_fragments[hash];if(!fragment.raw_content){fragment.raw_content=fragment.content.replace(//g,'>');fragment.content=fragment.content.replace(/\u200B/g,'')}let is_zws_delimited=fragment.raw_content.includes('\u200B');let fragment_words=[];if(is_zws_delimited){fragment_words=fragment.raw_content.split('\u200B')}else{fragment_words=fragment.raw_content.split(/[\r\n\s]+/g)}for(let word of locations){fragment_words[word]=`${fragment_words[word]}`}fragment.excerpt=fragment_words.slice(excerpt[0],excerpt[0]+excerpt[1]).join(is_zws_delimited?'':' ').trim();if(!fragment.raw_url){fragment.raw_url=fragment.url;fragment.url=this.fullUrl(fragment.raw_url)}return fragment}fullUrl(raw){return`${this.baseUrl}/${raw}`.replace(/\/+/g,"/").replace(/^(https?:\/)/,"$1/")}async getPtr(){while(this.raw_ptr===null){await asyncSleep(50)}if(!this.raw_ptr){console.error("Pagefind: WASM Error (No pointer)");throw new Error("Pagefind: WASM Error (No pointer)")}return this.raw_ptr}parseFilters(str){let output={};if(!str)return output;for(const block of str.split("__PF_FILTER_DELIM__")){let[filter,values]=block.split(/:(.*)$/);output[filter]={};if(values){for(const valueBlock of values.split("__PF_VALUE_DELIM__")){if(valueBlock){let[,value,count]=valueBlock.match(/^(.*):(\d+)$/);output[filter][value]=parseInt(count)??count}}}}return output}stringifyFilters(obj={}){let filter_list=[];for(let[filter,values]of Object.entries(obj)){if(Array.isArray(values)){for(let value of values){filter_list.push(`${filter}:${value}`)}}else{filter_list.push(`${filter}:${values}`)}}return filter_list.join("__PF_FILTER_DELIM__")}stringifySorts(obj={}){let sorts=Object.entries(obj);for(let[sort,direction]of sorts){if(sorts.length>1){console.warn(`Pagefind was provided multiple sort options in this search, but can only operate on one. Using the ${sort} sort.`)}if(direction!=="asc"&&direction!=="desc"){console.warn(`Pagefind was provided a sort with unknown direction ${direction}. Supported: [asc, desc]`)}return`${sort}:${direction}`}return``}async filters(){let ptr=await this.getPtr();let filter_chunks=this.backend.request_all_filter_indexes(ptr).split(' ').filter(v=>v).map(chunk=>this.loadFilterChunk(chunk));await Promise.all([...filter_chunks]);ptr=await this.getPtr();let results=this.backend.filters(ptr);return this.parseFilters(results)}async preload(term,options={}){options.preload=true;await this.search(term,options)}async search(term,options={}){options={verbose:false,filters:{},sort:{},...options,};const log=str=>{if(options.verbose)console.log(str)};log(`Starting search on ${this.basePath}`);let start=Date.now();let ptr=await this.getPtr();let filter_only=term===null;term=term??"";let exact_search=/^\s*".+"\s*$/.test(term);if(exact_search){log(`Running an exact search`)}term=term.toLowerCase().trim().replace(/[\.`~!@#\$%\^&\*\(\)\{\}\[\]\\\|:;'",<>\/\?\-]/g,"").replace(/\s{2,}/g," ").trim();log(`Normalized search term to ${term}`);if(!term?.length&&!filter_only){return{results:[],unfilteredResultCount:0,filters:{},totalFilters:{},timings:{preload:Date.now()-start,search:Date.now()-start,total:Date.now()-start}}}let sort_list=this.stringifySorts(options.sort);log(`Stringified sort to ${sort_list}`);const filter_list=this.stringifyFilters(options.filters);log(`Stringified filters to ${filter_list}`);let chunks=this.backend.request_indexes(ptr,term).split(' ').filter(v=>v).map(chunk=>this.loadChunk(chunk));let filter_chunks=this.backend.request_filter_indexes(ptr,filter_list).split(' ').filter(v=>v).map(chunk=>this.loadFilterChunk(chunk));await Promise.all([...chunks,...filter_chunks]);log(`Loaded necessary chunks to run search`);if(options.preload){log(`Preload — bailing out of search operation now.`);return}ptr=await this.getPtr();let searchStart=Date.now();let result=this.backend.search(ptr,term,filter_list,sort_list,exact_search);log(`Got the raw search result: ${result}`);let[unfilteredResultCount,results,filters,totalFilters]=result.split(/:([^:]*):(.*)__PF_UNFILTERED_DELIM__(.*)$/);let filterObj=this.parseFilters(filters);let totalFilterObj=this.parseFilters(totalFilters);log(`Remaining filters: ${JSON.stringify(result)}`);results=results.length?results.split(" "):[];let resultsInterface=results.map(result=>{let[hash,score,excerpt,locations]=result.split('@');log(`Processing result: \n hash:${hash}\n score:${score}\n excerpt:${excerpt}\n locations:${locations}`);locations=locations.split(',').map(l=>parseInt(l));excerpt=excerpt.split(',').map(l=>parseInt(l));return{id:hash,score:parseFloat(score)*this.indexWeight,words:locations,excerpt_range:excerpt,data:async()=>await this.loadFragment(hash,excerpt,locations)}});const searchTime=Date.now()-searchStart;const realTime=Date.now()-start;log(`Found ${results.length} result${results.length == 1 ? '' : 's'} for "${term}" in ${Date.now() - searchStart}ms (${Date.now() - start}ms realtime)`);return{results:resultsInterface,unfilteredResultCount:parseInt(unfilteredResultCount),filters:filterObj,totalFilters:totalFilterObj,timings:{preload:realTime-searchTime,search:searchTime,total:realTime}}}}class Pagefind{constructor(){this.backend=wasm_bindgen;this.primaryLanguage="unknown";this.searchID=0;this.primary=new PagefindInstance({primary:true});this.instances=[this.primary];this.init()}async options(options){await this.primary.options(options)}async init(){if(document?.querySelector){const langCode=document.querySelector("html").getAttribute("lang")||"unknown";this.primaryLanguage=langCode.toLocaleLowerCase()}await this.primary.init(this.primaryLanguage,{load_wasm:true})}async mergeIndex(indexPath,options={}){if(this.primary.basePath.startsWith(indexPath)){console.warn(`Skipping mergeIndex ${indexPath} that appears to be the same as the primary index (${this.primary.basePath})`);return}let newInstance=new PagefindInstance({primary:false,basePath:indexPath});this.instances.push(newInstance);while(this.primary.wasm===null){await asyncSleep(50)}await newInstance.init(options.language||this.primaryLanguage,{load_wasm:false});delete options["language"];await newInstance.options(options)}mergeFilters(filters){const merged={};for(const searchFilter of filters){for(const[filterKey,values]of Object.entries(searchFilter)){if(!merged[filterKey]){merged[filterKey]=values;continue}else{const filter=merged[filterKey];for(const[valueKey,count]of Object.entries(values)){filter[valueKey]=(filter[valueKey]||0)+count}}}}return merged}async filters(){let filters=await Promise.all(this.instances.map(i=>i.filters()));return this.mergeFilters(filters)}async preload(term,options={}){await Promise.all(this.instances.map(i=>i.preload(term,options)))}async debouncedSearch(term,options,debounceTimeoutMs=300){const thisSearchID=++this.searchID;this.preload(term,options);await asyncSleep(debounceTimeoutMs);if(thisSearchID!==this.searchID){return null}const searchResult=await this.search(term,options);if(thisSearchID!==this.searchID){return null}return searchResult}async search(term,options={}){let search=await Promise.all(this.instances.map(i=>i.search(term,options)));const filters=this.mergeFilters(search.map(s=>s.filters));const totalFilters=this.mergeFilters(search.map(s=>s.totalFilters));const results=search.map(s=>s.results).flat().sort((a,b)=>b.score-a.score);const timings=search.map(s=>s.timings);const unfilteredResultCount=search.reduce((sum,s)=>sum+s.unfilteredResultCount,0);return{results,unfilteredResultCount,filters,totalFilters,timings}}}const pagefind=new Pagefind();export const mergeIndex=async(indexPath,options)=>await pagefind.mergeIndex(indexPath,options);export const options=async(options)=>await pagefind.options(options);export const search=async(term,options)=>await pagefind.search(term,options);export const debouncedSearch=async(term,options,debounceTimeoutMs)=>await pagefind.debouncedSearch(term,options,debounceTimeoutMs);export const preload=async(term,options)=>await pagefind.preload(term,options);export const filters=async()=>await pagefind.filters() \ No newline at end of file diff --git a/pagefind/pagefind.unknown_1b3ca4647db6263.pf_meta b/pagefind/pagefind.unknown_1b3ca4647db6263.pf_meta new file mode 100644 index 0000000..375c84f Binary files /dev/null and b/pagefind/pagefind.unknown_1b3ca4647db6263.pf_meta differ diff --git a/pagefind/pagefind.unknown_5fc02da837b7bfa.pf_meta b/pagefind/pagefind.unknown_5fc02da837b7bfa.pf_meta new file mode 100644 index 0000000..d804849 Binary files /dev/null and b/pagefind/pagefind.unknown_5fc02da837b7bfa.pf_meta differ diff --git a/pagefind/pagefind.unknown_7533bb7b91fc379.pf_meta b/pagefind/pagefind.unknown_7533bb7b91fc379.pf_meta new file mode 100644 index 0000000..76155d5 Binary files /dev/null and b/pagefind/pagefind.unknown_7533bb7b91fc379.pf_meta differ diff --git a/pagefind/pagefind.unknown_9c37355650f45e2.pf_meta b/pagefind/pagefind.unknown_9c37355650f45e2.pf_meta new file mode 100644 index 0000000..4c22150 Binary files /dev/null and b/pagefind/pagefind.unknown_9c37355650f45e2.pf_meta differ diff --git a/pagefind/pagefind.unknown_decbb8af27f84be.pf_meta b/pagefind/pagefind.unknown_decbb8af27f84be.pf_meta new file mode 100644 index 0000000..ac058bb Binary files /dev/null and b/pagefind/pagefind.unknown_decbb8af27f84be.pf_meta differ diff --git a/pagefind/pagefind.unknown_fee4732a93c5ead.pf_meta b/pagefind/pagefind.unknown_fee4732a93c5ead.pf_meta new file mode 100644 index 0000000..b5fb154 Binary files /dev/null and b/pagefind/pagefind.unknown_fee4732a93c5ead.pf_meta differ diff --git a/pagefind/wasm.unknown.pagefind b/pagefind/wasm.unknown.pagefind new file mode 100644 index 0000000..2de3161 Binary files /dev/null and b/pagefind/wasm.unknown.pagefind differ diff --git a/search.md b/search.md new file mode 100644 index 0000000..fcee225 --- /dev/null +++ b/search.md @@ -0,0 +1,14 @@ + +# project search + + + + + + + + diff --git a/user-manual.md b/user-manual.md new file mode 100644 index 0000000..a4e0382 --- /dev/null +++ b/user-manual.md @@ -0,0 +1,10 @@ + +User manual +=========== + +Tools +----- + +- [crossrefapi](crossrefapi.1.md) a tool to retrieve CrossRef works records. + + diff --git a/version.go b/version.go index b33ce15..baa0ad3 100644 --- a/version.go +++ b/version.go @@ -1,11 +1,11 @@ package crossrefapi const ( - Version = "1.0.1-pre" + Version = "1.0.1" LicenseText = ` -Copyright (c) 2021, Caltech +Copyright (c) 2023, Caltech All rights not granted herein are expressly reserved by Caltech. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/website.mak b/website.mak new file mode 100644 index 0000000..de27286 --- /dev/null +++ b/website.mak @@ -0,0 +1,30 @@ +# +# Makefile for running pandoc on all Markdown docs ending in .md +# +PROJECT = crossrefapi + +MD_PAGES = $(shell ls -1 *.md) + +HTML_PAGES = $(shell ls -1 *.md | sed -E 's/.md/.html/g') + +build: $(HTML_PAGES) $(MD_PAGES) pagefind + +$(HTML_PAGES): $(MD_PAGES) index.html .FORCE + pandoc -s --to html5 $(basename $@).md -o $(basename $@).html \ + --metadata title="$(PROJECT) - $@" \ + --lua-filter=links-to-html.lua \ + --template=page.tmpl + git add $(basename $@).html + +index.html: README.html .FORCE + cp README.html index.html + +pagefind: .FORCE + pagefind --verbose --exclude-selectors="nav,header,footer" --bundle-dir ./pagefind --source . + git add pagefind + +clean: + @if [ -f index.html ]; then rm *.html; fi + @if [ -f README.html ]; then rm *.html; fi + +.FORCE: diff --git a/works.go b/works.go index 933bf1b..5826ce0 100644 --- a/works.go +++ b/works.go @@ -664,6 +664,12 @@ func isSameIdentifiers(i1 []*Identifier, i2 []*Identifier) bool { } func (g *Group) IsSame(t *Group) bool { + if g == nil && t == nil { + return true + } + if g == nil || t == nil { + return false + } if g.Label != t.Label { return false } @@ -680,7 +686,7 @@ func (a *Assertion) IsSame(t *Assertion) bool { if a.Name != t.Name { return false } - return (a.Value != t.Value) + return (a.Value == t.Value) } func (c *ContentDomain) IsSame(t *ContentDomain) bool {