summaryrefslogtreecommitdiff
path: root/tissue
AgeCommit message (Collapse)Author
2023-04-18web: server: Handle files without extension.Arun Isaac
* tissue/web/server.scm (mime-type-for-extension): Handle files without extension. * tests/web/server.scm: New file.
2023-04-15issue: Ignore preformatted blocks.Arun Isaac
* tissue/issue.scm (file-details): Ignore preformatted blocks. * tests/issue.scm ("Ignore preformatted block"): New test. * issues/ignore-preformatted-blocks-in-gemtext-parser.gmi: Close issue.
2023-04-15issue: Allow checkboxes without a space.Arun Isaac
* tissue/issue.scm (file-details): Allow checkboxes without a space. * tests/issue.scm ("Allow checkboxes without a space"): New test. * issues/allow-checkboxes-without-a-space.gmi: Close issue.
2023-02-04skribilo: Check if node has identifier.Arun Isaac
* tissue/skribilo.scm (document-node): Check if node has identifier before comparing that identifier.
2023-01-29git: Deprecate call-with-file-in-git.Arun Isaac
Functions called by call-with-file-in-git may expect to read files directly off the filesystem. These functions are not all within the user's control and cannot be rewritten to do otherwise. It is more robust to provide a filesystem checkout of the git repository like these functions expect. In this commit, we deprecate call-with-file-in-git and replace calls to it with call-with-input-file. These invocations have been arranged such that they all happen at the top level of a repository checkout. * tissue/git.scm (call-with-file-in-git): Delete function. * .dir-locals.el (scheme-mode): Unregister it. * bin/tissue (tissue-show, load-config), tissue/file-document.scm (file-text, read-gemtext-document), tissue/issue.scm (read-gemtext-issue): Replace call-with-file-in-git with call-with-input-file. (pull, tissue-web): Call load-config from the top level of a repository checkout.
2023-01-29web: Explain why we pass a project thunk to the dev server.Arun Isaac
* tissue/web/dev.scm (handler): Explain why we pass in a project thunk.
2023-01-29web: Do not temporarily checkout repository when serving it.Arun Isaac
Now that snippet source texts are interred into the xapian index, the web server does not need a repository checkout. * bin/tissue (tissue-web): Do not temporarily checkout repositories being served. * tissue/web/server.scm (handler): Do not change into repository directory. * tissue/git.scm (call-with-temporary-checkouts): Delete function. * .dir-locals.el (scheme-mode): Unregister it.
2023-01-29document: Inter snippet source text into the xapian index.Arun Isaac
We store snippet source text in a slot of the <document> class thus interring into the xapian index. This allows us to render search snippets using only the xapian index without referring back to the git repository. * tissue/document.scm (<document>)[snippet-source-text]: New slot. * tissue/document.scm (document-snippet-source-text): Delete method. (document-html-snippet): Remove blank lines from snippet source text before generating a snippet. * tissue/commit.scm (document-snippet-source-text): Delete method. (repository-commits): Initialize snippet-source-text. * tissue/skribilo.scm (fragment-text): New function. (document-fragment): Initialize snippet-source-text. (document-text): Use fragment-text. (document-snippet-source-text): Delete method. * tissue/file-document.scm (file-text): New function. (document-text): Use file-text. (read-gemtext-document): Initialize snippet-source-text. * tissue/issue.scm (read-gemtext-issue): Initialize snippet-source-text. * issues/skribilo-fragment-snippets-need-code-from-repo.gmi: Close issue.
2023-01-29commit: Explain use of commit-body for snippet source text.Arun Isaac
* tissue/commit.scm (document-snippet-source-text): Explain use of commit-body.
2023-01-29skribilo: Temporarily disable search snippets.Arun Isaac
* tissue/skribilo.scm (document-snippet-source-text): New method. * issues/skribilo-fragment-snippets-need-code-from-repo.gmi: New issue.
2023-01-29git: Create temporary checkout in temporary directory.Arun Isaac
* tissue/git.scm (call-with-temporary-checkout): Create temporary checkout in temporary directory, not in current directory.
2023-01-28web: Change to repository directory when handling requests.Arun Isaac
Files in the repository may be read. So, we must change into a checkout of the repository when handling requests. * tissue/web/server.scm (handler): Change to repository directory when handling requests.
2023-01-28git: Abstract temporary checkout.Arun Isaac
* tissue/git.scm (call-with-temporary-checkout, call-with-temporary-checkouts): New public functions. * .dir-locals.el (scheme-mode): Set scheme-indent-function of call-with-temporary-checkout and call-with-temporary-checkouts to 1.
2023-01-27issue: Stop exporting deleted function.Arun Isaac
* tissue/issue.scm: Do not export index-issue.
2023-01-26issue: Index names of people as non-boolean terms.Arun Isaac
Names of people as non-boolean since it may be required to match them partially. Think searching for "arun" when the full name is "Arun Isaac". * tissue/issue.scm (document-boolean-terms): Remove creator, last updater and assigned terms. (document-term-generator): New method. * tissue/search.scm (%boolean-prefixes): Move creator, lastupdater and assigned to ... (%boolean-prefixes): ... here.
2023-01-26web: Clean up socket file when Unix sockets are used.Arun Isaac
* tissue/web/server.scm (start-web-server): Clean up socket file when Unix sockets are used.
2023-01-26git: Infer changes by root commit correctly.Arun Isaac
* tissue/git.scm (commit-deltas): Rename to ... (commit-file-changes): ... this. Return list of pairs mapping old files to new files. (file-modification-table): Use commit-file-changes instead of commit-deltas. Adapt to new return value. * tests/git.scm: New file. * .dir-locals.el (scheme-mode): Set scheme-indent-function for with-variable and with-variables.
2023-01-26web: Log complete request URI, not just the path.Arun Isaac
* tissue/web/server.scm (log-request): Log complete request URI, not just the path.
2023-01-23web: Change to temporary clone before building website.Arun Isaac
* tissue/web/static.scm (build-website): Expect to be at the top level of the repository to be exported. * bin/tissue (pull): Create a temporary clone of the repository and change to it before calling build-website.
2023-01-23web: Allow files to shadow the search page.Arun Isaac
* tissue/web/dev.scm (handler): Allow files to shadow the search page. * tissue/web/server.scm (handler): Allow files to shadow the search page.
2023-01-23skribilo: Add skribilo fragment document.Arun Isaac
* tissue/skribilo.scm: New file.
2023-01-23issue: Remove unused import.Arun Isaac
* tissue/issue.scm: Do not import (git).
2023-01-23file-document: Export commits-affecting-file as a utility.Arun Isaac
* tissue/file-document.scm (commits-affecting-file): New public function. (read-gemtext-document): Use commits-affecting-file.
2023-01-23file-document: Set document type of <file-document> to document.Arun Isaac
Earlier, the document type returned was "file-document". It only seemed to work because xapian split them into two terms—"file" and "document". * tissue/file-document.scm (document-type): Return "document". * tissue/issue.scm (document-type): New generic method.
2023-01-23file-document: Set document type of <file-document> to document.Arun Isaac
Earlier, the document type returned was "file-document". It only seemed to work because xapian split them into two terms—"file" and "document". * tissue/file-document.scm (document-type): Return "document".
2023-01-23commit: Refer to correct metasyntactic variable in docstring.Arun Isaac
* tissue/commit.scm (document-id-term, document-recency-date): Refer to metasyntactic variable COMMIT, not DOCUMENT.
2023-01-23search: Do not use MSetIterator-mset-get.Arun Isaac
We already have the mset from enquire-mset. * tissue/search.scm (search-fold): Do not use MSetIterator-mset-get. Reuse mset from enquire-mset.
2023-01-23web: Express gemtext-exporter in terms of skribe-exporter.Arun Isaac
The gemtext exporter is just a skribe exporter with different defaults. * tissue/web/static.scm (gemtext-exporter): Express in terms of skribe-exporter.
2023-01-23search: Limit to 1000 search results by default.Arun Isaac
* tissue/search.scm (search-fold): Limit to 1000 search results by default. * tissue/web/server.scm (search-handler): Limit to 1000 search results by default.
2023-01-23issues: Allow checkboxes without a space.Arun Isaac
* issues/allow-checkboxes-without-a-space.gmi: New file. * tissue/issue.scm (file-details): Add TODO note.
2023-01-23web: Deprecate add-methods.Arun Isaac
Functionally setting generic functions (like add-methods does) doesn't work since methods can still refer to the old generic function. The future of generic functions in the theming system is in doubt. It must be rethought out carefully. * tissue/web/themes.scm (add-methods): Delete function. * tissue/web/themes/default.scm (default-theme): Replace add-methods! with add-method.
2022-12-27document: Support symbol serialization and deserialization.Arun Isaac
* tissue/document.scm (object->scm, scm->object): Support symbols.
2022-12-25git: Find git top level correctly even in bare repositories.Arun Isaac
* tissue/git.scm (git-top-level): Find git top level correctly even in bare repositories.
2022-12-25web: static: Build website from within temporary clone of repo.Arun Isaac
The build process may run code that expects files to be on the filesystem. Not all of this file accessing code is within tissue's control. Think arbitrary code in skribilo documents. So, we cannot always work around this by pointing file accesses into a bare git repository. * tissue/web/static.scm: Import (git). (build-website): Move into temporary clone of git repository before building files. (exporter): Use call-with-input-file instead of call-with-file-in-git.
2022-12-25web: static: Deprecate with-current-directory.Arun Isaac
with-current-directory is the exact same as call-with-current-directory from (tissue utils). * tissue/web/static.scm (with-current-directory): Delete function. (build-website): Replace with-current-directory with call-with-current-directory.
2022-12-25tissue: Deprecate #:project configuration parameter.Arun Isaac
The project name is not used anywhere now. If it is required, it should be passed through the lexical context of closures in the tissue configuration object. * tissue/tissue.scm (<tissue-configuration>)[project]: Delete field. (tissue-configuration-project): Delete function. (tissue-configuration): Remove project argument. * tissue.scm (tissue-configuration)[#:project]: Delete parameter. * tissue/web/static.scm (%project-name): Delete parameter. * bin/tissue (pull): Do not parameterize %project-name.
2022-12-25tissue: Deprecate #:web-css configuration parameter.Arun Isaac
CSS is now specified exclusively through the lexical context of closures in the tissue configuration object. * tissue.scm: Use (tissue web themes default). (%css, %engine): New variables. (tissue-configuration)[#:web-css]: Delete parameter. [#:web-search-renderer]: Pass %css to default theme. [#:web-files]: Pass %engine to gemtext-exporter and skribe-exporter. * tissue/tissue.scm (<tissue-configuration>)[web-css]: Delete field. (tissue-configuration-web-css): Delete function. (tissue-configuration): Remove web-css argument.
2022-12-25web: static: Introduce functional html engine customizer.Arun Isaac
* tissue/web/static.scm (engine-custom-set): New function. (html-engine): New public function. (gemtext-exporter, skribe-exporter): Use html-engine in default value of engine.
2022-12-25web: static: Allow customization of engine used in export.Arun Isaac
* tissue/web/static.scm (gemtext-exporter, skribe-exporter): Accept engine keyword argument.
2022-12-25web: static: Accept reader as a keyword argument.Arun Isaac
* tissue/web/static.scm (gemtext-exporter, skribe-exporter): Accept reader as a keyword argument, instead of as an optional argument.
2022-12-25web: Do not pass project configuration to theme.Arun Isaac
Parameters from the project configuration may be needed by the theme. But, these parameters should not passed as explicit parameters to the generic function of the theme. Instead, they should be passed implicitly through the lexical context of the generic methods. * tissue/web/server.scm (search-handler): Do not pass project to search renderer. * tissue/web/themes/default.scm: Do not import (tissue tissue). (default-theme): New public function. (make-head-renderer): New function. (render-sxml): Make private. Remove project parameter from all generic methods. * tissue/tissue.scm (tissue-configuration): Set default value of web-search-renderer to (default-theme) instead of render-sxml.
2022-12-25web: themes: Add functional way to define methods.Arun Isaac
* tissue/web/themes.scm: Import (srfi srfi-26). (add-methods): New function.
2022-12-25web: dev: Accept thunk to read project configuration.Arun Isaac
To the development server, pass a thunk to read project configuration instead of the project configuration itself. This allows us to hack on the project's tissue.scm without having to restart the development server to see changes. * bin/tissue (tissue-web-dev): Pass thunk to read project configuration instead of the project configuration itself. * tissue/web/dev.scm (handler, start-dev-web-server): Accept thunk to read project configuration instead of the project configuration itself.
2022-12-25web: Implement themes for the search page.Arun Isaac
We factor out all display related code to a theming module, and support powerful user customization of the theme thanks to generic functions. * tissue/commit.scm (document->sxml): Move to (tissue web themes default). * tissue/document.scm (document->sxml): Move to (tissue web themes default). * tissue/file-document.scm (document->sxml): Move to (tissue web themes default). * tissue/issue.scm (sanitize-string, document->sxml): Move to (tissue web themes default). * tissue/tissue.scm: Import (tissue web themes default). (<tissue-configuration>)[web-search-renderer]: New field. (tissue-configuration-web-search-renderer): New function. (tissue-configuration): Accept web-search-renderer argument. * tissue/web/server.scm: Import (oop goops) and (tissue web themes). Do not import (tissue document). (%css, make-search-page, search-handler): Move to (tissue web themes default). * tissue/web/themes.scm, tissue/web/themes/default.scm: New files. * Makefile (sources): Add $(top_level_module_dir)/web/themes/*.scm.
2022-12-24bin: Pass along entire project configuration object to servers.Arun Isaac
Themes should be free to access the entirety of the project configuration. It is impossible to predict which parts of the project configuration they will need. * bin/tissue (tissue-web, tissue-web-dev): Pass entire configuration object to start-web-server and start-dev-web-server respectively. * tissue/web/dev.scm: Import (tissue tissue). (handler, start-dev-web-server): Accept entire configuration object. * tissue/web/server.scm: Import (tissue tissue). (search-handler, start-web-server): Accept entire configuration object.
2022-12-24web: Move query string utilities.Arun Isaac
* tissue/web/server.scm (query-parameters, query-string): Move to ... * tissue/utils.scm: ... here. Import (ice-9 match) and (web uri).
2022-12-24dev: Implement development web server.Arun Isaac
* tissue/web/dev.scm: New file.
2022-12-24server: Factor out reusable parts into separate functions.Arun Isaac
The newly factored out functions will be used in the upcoming development web server. * tissue/web/server.scm (handler): Factor out reusable parts into ... (log-request, mime-type-for-extension, 404-response, search-handler, try-paths): ... new functions.
2022-11-28web: server: Do not prepend / to URI path.Arun Isaac
* tissue/web/server.scm (handler): Do not prepend / to URI path.
2022-11-28web: server: Serve path/index.html if path ends in /.Arun Isaac
* tissue/web/server.scm (handler): Serve path/index.html if path ends in /.