summaryrefslogtreecommitdiff
path: root/tissue
AgeCommit message (Collapse)Author
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 /.
2022-10-10tissue: Document #:indexed-documents as a list of <document> objects.Arun Isaac
* tissue/tissue.scm (tissue-configuration): Document #:indexed-documents as a list of <document> objects, not a list of <indexed-document> objects.
2022-10-10doc: Add documentation.Arun Isaac
* doc/skribilo.scm, doc/tissue.skb: New files. * tissue.scm (#:web-files): Add manual/dev/en/index.html.
2022-10-10tissue: Introduce define-lazy, an abstraction for lazy functions.Arun Isaac
* tissue/tissue.scm (define-lazy): New macro. (tissue-configuration): Define using define-lazy. (pairify): Delete function. (<tissue-configuration>[tissue-configuration-project, tissue-configuration-aliases, tissue-configuration-web-css]: Force values in getters.
2022-10-07tissue: Markup docstrings in texinfo syntax.Arun Isaac
* tissue/document.scm (slot-set): Markup docstring in texinfo syntax. * tissue/file-document.scm (read-gemtext-document): Markup docstring in texinfo syntax. * tissue/git.scm (git-tracked-files): Markup docstring in texinfo syntax. * tissue/issue.scm (read-gemtext-issue): Markup docstring in texinfo syntax. * tissue/tissue.scm (gemtext-files-in-directory): Markup docstring in texinfo syntax. * tissue/web/static.scm (exporter, copier, gemtext-exporter, skribe-exporter): Markup docstrings in texinfo syntax.
2022-07-24web: server: Use small caps for document type identifiers.Arun Isaac
* tissue/web/server.scm (%css)[.document-type]: Remove text-transform property. Set font-variant property.
2022-07-24web: server: Style document type identifiers without color.Arun Isaac
* tissue/web/server.scm (%css)[.document-type]: Remove font-size, padding, background-color and color properties. [.open-issue-document-type]: Remove background-color property.
2022-07-23web: server: Use default font size for search result titles.Arun Isaac
* tissue/web/server.scm (%css)[.search-result a]: Remove font-size property.
2022-07-23web: server: Remove special line height for search hints.Arun Isaac
* tissue/web/server.scm (%css)[.search-hint]: Remove line-height property.
2022-07-23git: Prefer reading checked out files.Arun Isaac
This generalization of call-with-file-in-git permits preferential reading of uncommitted changes, and reading of files external to the git repository. * tissue/git.scm (call-with-file-in-git): Prefer reading checked out files.
2022-07-21web: server: Be unaware of the state directory.Arun Isaac
The server should be unaware of the specifics of the state directory and its directory structure. It should be explicitly passed paths to all necessary directories. This way, the server can be repurposed for other applications such as the development web server---something that is coming soon in the subsequent commits. * tissue/web/server.scm (handler): Remove state-directory argument. Use directory paths in hosts argument. (start-web-server): Remove state-directory argument. Do not pass on state-directory to handler. * bin/tissue (tissue-web): Pass directory paths explicitly to start-web-server in hosts argument. Do not pass the removed state-directory argument.
2022-07-20web: server: Add article 'the' in handler docstring.Arun Isaac
* tissue/web/server.scm (handler): Add article 'the' in docstring.
2022-07-20utils: Allow specifying parent of temporary directory.Arun Isaac
* tissue/utils.scm (call-with-temporary-directory): Allow specifying directory in which to create temporary directory.
2022-07-20git: Add git-tracked-file? utility.Arun Isaac
* tissue/git.scm: Import (rnrs exceptions). (git-tracked-file?): New public function.
2022-07-20web: server: Respond to a static file request with a bytevector.Arun Isaac
If the response to a static file request is returned as a procedure, (web server) tries to interpret the response as text. This results in encoding errors with binary files. Fixing this is not worth the trouble since (tissue web server) is anyway not meant to serve large static files. Large static files should be served using a more capable server such as nginx. * tissue/web/server.scm (handler): Return response to a static file request as a bytevector, instead of as a procedure.
2022-07-19web: server: Move document type identifier into HTML.Arun Isaac
* tissue/commit.scm (document->sxml): Generate document type identifier. * tissue/file-document.scm (document->sxml): Generate document type identifier. * tissue/issue.scm (document->sxml): Generate document type identifier. * tissue/web/server.scm (%css): Style document type identifiers.
2022-07-19web: server: Remove rounded edges on search filters.Arun Isaac
* tissue/web/server.scm (%css)[.search-filter]: Remove rounded edges.
2022-07-19web: server: Remove rounded edges on tags.Arun Isaac
* tissue/web/server.scm (%css)[.tag a]: Remove rounded edges and reduce padding.
2022-07-19issue: Render tags as an unordered list.Arun Isaac
* tissue/issue.scm (document->sxml): Render tags as an unordered list. * tissue/web/server.scm (%css): Style list items with tag classes, not anchor tags.
2022-07-19web: server: Link to Xapian::QueryParser syntax documentation.Arun Isaac
* tissue/web/server.scm (make-search-page): Link to upstream Xapian::QueryParser syntax documentation.
2022-07-19file-document: Show created and last updated dates in listings.Arun Isaac
* tissue/file-document.scm (print, document->sxml): Show created and last updated dates in listings. * tissue/web/server.scm (%css): Put DOC identifier before metadata, not before title.
2022-07-19web: server: Parse provided search query only once.Arun Isaac
* tissue/web/server.scm (matches): Accept parsed search query. (handler): Parse provided search query only once.
2022-07-19search: Sort by date on strictly boolean queries.Arun Isaac
* issues/sort-by-date.gmi: Close issue. * tissue/search.scm (term-ref, query-terms-every): New functions. (boolean-query?): New public function. (search-fold): Sort by date on strictly boolean queries. * tissue/web/server.scm (handler): Sort by date on strictly boolean queries.
2022-07-19utils: Add string-contains? utility.Arun Isaac
* tissue/utils.scm (string-contains?): New public function.
2022-07-19issue: Quote tags with spaces instead of hyphenating them.Arun Isaac
* tissue/issue.scm (document->sxml): Quote tags with spaces instead of hyphenating them.
2022-07-19search: Parse boolean terms in search query.Arun Isaac
* tissue/search.scm: Import (ice-9 match). (make-query-parser): New function. (%prefixes, %boolean-prefixes, query-parser): New variables. (parse-query): Use query-parser.
2022-07-19document: Index boolean terms.Arun Isaac
Metadata that will be used in boolean filtering should be indexed as boolean terms, not as free text. This also results in the happy coincidence that we no longer need a specialized document-term-generator generic method for <issue> and <commit>. * tissue/document.scm (document-boolean-terms): New public generic function. (document-term-generator): Use document-boolean-terms. * tissue/issue.scm (document-boolean-terms): New generic method. (document-term-generator): Delete generic method. * tissue/commit.scm (document-boolean-terms): New generic method. (document-term-generator): Delete generic method.
2022-07-19document: Store serialized date as value in Xapian document.Arun Isaac
* tissue/document.scm (document-recency-date): Declare public generic function. (document-term-generator): Store serialized date in slot 0 of Xapian document. * tissue/file-document.scm (document-recency-date): New generic method. * tissue/commit.scm (document-recency-date): New generic method.
2022-07-13document: Use string-blank?.Arun Isaac
* tissue/document.scm (document-snippet-source-text): Use string-blank?.
2022-07-13search: Match all on blank query, not null query.Arun Isaac
* tissue/search.scm: Import (tissue utils). (parse-query): Match all on blank query, not null query.
2022-07-13utils: Add string-blank? utility.Arun Isaac
* tissue/utils.scm (string-blank?): New function.
2022-07-13web: static: Do not log output directory name when building.Arun Isaac
The output directory is usually a randomly named temporary directory. Logging it is leaking an implementation detail. * tissue/web/static.scm (build-website): Do not log output directory name.
2022-07-13document: Tolerate unbound slots when serializing.Arun Isaac
* tissue/document.scm (object->scm): Drop unbound slots, do not raise an error.
2022-07-13document: Remove unnecessary import of (rnrs hashtables).Arun Isaac
* tissue/document.scm: Do not import (rnrs hashtables).
2022-07-13issue: Move <issue> posts slot into <file-document>.Arun Isaac
We move the posts slot of <issue> into the <file-document> parent class as a commits slot. We also no longer store the creator, created-date, last-updater, last-updated-date of <issue> in slots. Rather, we compute them on-demand from the commits slot. * tissue/file-document.scm: Import (rnrs hashtables), (srfi srfi-1), (srfi srfi-26), (git), (tissue commit) and (tissue person). (<file-document>)[commits]: New slot. (file-document-creator, file-document-created-date, file-document-last-updater, file-document-last-updated-date): New public functions. (read-gemtext-document): Initialize commits slot. * tissue/issue.scm (file-modification-table-for-current-repository): Move to (tissue file-document). (<issue>)[creator, created-date, last-updater, last-updated-date, posts]: Delete slots. (<post>): Delete class. (document-term-generator, print, print-issue-to-gemtext, document->sxml): Use file-document-creator, file-document-created-date, file-document-last-updater, file-document-last-updated-date and file-document-commits instead of issue-creator, issue-created-date, issue-last-updater, issue-last-updated-date and issue-posts. (read-gemtext-issue): Use read-gemtext-document. Do not initialize creator, created-date, last-updater and last-updated-date slots.
2022-07-13file-document: Fix typo in read-gemtext-document docstring.Arun Isaac
* tissue/file-document.scm (read-gemtext-document): Fix typo reade with read in docstring.
2022-07-13document: Move <file-document> code to a new (tissue file-document).Arun Isaac
* tissue/document.scm: Do not import (srfi srfi-171). (<file-document>, document-type, document-id-term, document-text, document-term-generator, print, document->sxml, read-gemtext-document): Move to (tissue file-document). (document-id-term, document-text, print, document->sxml): Declare as generic functions. * tissue/file-document.scm: New file. * tissue/issue.scm, bin/tissue: Import (tissue file-document).
2022-07-11web: server: Summarize number of results by type.Arun Isaac
* tissue/web/server.scm (%css)[.search-results-statistics, .search-results-statistics li, .search-results-statistics a, .current-search-type]: New rules. * tissue/web/server.scm (make-search-page): Summarize number of results by type. (query-string, matches): New functions. (handler): Pass the number of matches by type to make-search-page. * issues/add-links-to-filter-documents-by-type.gmi: Close issue.
2022-07-11search: By default, search all documents not just issues.Arun Isaac
* tissue/search.scm (parse-query): By default, search all documents not just issues.
2022-07-09commit: Index commit messages too.Arun Isaac
* tissue/commit.scm: New file. * tissue/web/server.scm (%css)[.search-result-commit]: Add COMMIT marker. * bin/tissue: Import (tissue commit). * tissue.scm (#:indexed-documents): Add commits. * issues/index-commit-messages.gmi: Close issue.
2022-07-09bin: Move indexing document type into document-term-generator.Arun Isaac
* bin/tissue (index): Move indexing document type into document-term-generator generic function. * tissue/document.scm (document-term-generator): Index document type.
2022-07-09git: Use commit author date, not committer date.Arun Isaac
* tissue/git.scm (commit-author-date): New public function. (commit-date): Delete function. * tissue/issue.scm (read-gemtext-issue): Use commit-author-date instead of commit-date.
2022-07-09document: Make snippet source text extraction a generic function.Arun Isaac
* tissue/document.scm (document-snippet-source-text): New generic method. (document-html-snippet): Use document-snippet-source-text.