From 608eb616476400fb4532ae9d727dcb63f99c3643 Mon Sep 17 00:00:00 2001 From: David Fenyes Date: Fri, 13 Sep 2024 00:02:43 -0500 Subject: [PATCH] Add configuration for read-the-org search bar - optional {{{enable-search}}}, {{{disable-search}}}, and {{{set-search-limit}}} org macros to enable or disable search and set the match limit. Default is enable search and no limit to matches. --- org/theme-readtheorg-local.setup | 18 +++++++++++- org/theme-readtheorg.setup | 18 +++++++++++- src/readtheorg_theme/js/search.js | 49 +++++++++++++++++++++++++++---- 3 files changed, 78 insertions(+), 7 deletions(-) diff --git a/org/theme-readtheorg-local.setup b/org/theme-readtheorg-local.setup index 8ec3dfa..5718c4a 100644 --- a/org/theme-readtheorg-local.setup +++ b/org/theme-readtheorg-local.setup @@ -8,5 +8,21 @@ #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: -#+HTML_HEAD: #+HTML_HEAD: +#+HTML_HEAD: + +#+MACRO: enable-search #+HTML_HEAD: +#+MACRO: disable-search #+HTML_HEAD: +#+MACRO: set-search-limit #+HTML_HEAD: + +* Search Configuration (v1.12) :noexport: +Usage: Optionally place these macros after including this file, before your content. +- {{{enable-search}}}: :: enable search bar (default) +- {{{disable-search}}}: :: disable search bar +- {{{set-search-limit(N)}}}: :: Limit results to N (default: 0 for no limit) + +Example: +#+BEGIN_SRC org +{{{enable-search}}} +{{{set-search-limit(10)}}} +#+END_SRC diff --git a/org/theme-readtheorg.setup b/org/theme-readtheorg.setup index 7a4361f..b21aca6 100644 --- a/org/theme-readtheorg.setup +++ b/org/theme-readtheorg.setup @@ -8,5 +8,21 @@ #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: -#+HTML_HEAD: #+HTML_HEAD: +#+HTML_HEAD: + +#+MACRO: enable-search #+HTML_HEAD: +#+MACRO: disable-search #+HTML_HEAD: +#+MACRO: set-search-limit #+HTML_HEAD: + +* Search Configuration (v1.12) :noexport: +Usage: Optionally place these macros after including this file, before your content. +- {{{enable-search}}}: :: enable search bar (default) +- {{{disable-search}}}: :: disable search bar +- {{{set-search-limit(N)}}}: :: Limit results to N (default: 0 for no limit) + +Example: +#+BEGIN_SRC org +{{{enable-search}}} +{{{set-search-limit(10)}}} +#+END_SRC diff --git a/src/readtheorg_theme/js/search.js b/src/readtheorg_theme/js/search.js index ed78ca6..99b676c 100644 --- a/src/readtheorg_theme/js/search.js +++ b/src/readtheorg_theme/js/search.js @@ -1,11 +1,47 @@ // -*- mode: js2 -*- -// readh-the-org-search v1.8 +// read-the-org-search + +// Configuration +const SEARCH_VERSION = "v1.12"; + +// Default configuration +window.searchConfig = { + enableSearch: true, + searchResultLimit: 0 +}; + +// Configuration function + + +function enableSearch(enableSearch, searchResultLimit) { + window.searchConfig.enableSearch = true; +} + + +function disableSearch() { + window.searchConfig.enableSearch = false; +} + + +function setSearchLimit(searchResultLimit) { + window.searchConfig.searchResultLimit = searchResultLimit; +} + + +console.log(`custom-search.js ${SEARCH_VERSION} is being loaded`); -console.log('custom-search.js v1.8 is being loaded'); $(document).ready(function() { - console.log('Document ready, initializing search functionality v1.8'); + console.log(`Document ready, initializing search ${SEARCH_VERSION}`); + + const ENABLE_SEARCH = window.searchConfig.enableSearch; + const SEARCH_RESULT_LIMIT = window.searchConfig.searchResultLimit; + + if (!ENABLE_SEARCH) { + console.log('Search functionality is disabled'); + return; + } $('#table-of-contents').prepend(`
@@ -82,7 +118,10 @@ $(document).ready(function() { return; } - matches.slice(0, 10).forEach((match, index) => { + // Apply the search result limit + const limitedMatches = SEARCH_RESULT_LIMIT > 0 ? matches.slice(0, SEARCH_RESULT_LIMIT) : matches; + + limitedMatches.forEach((match, index) => { const snippet = match.text.length > 100 ? match.text.substr(0, 100) + '...' : match.text; const highlightedSnippet = highlightText(snippet, searchTerm); const li = $(`
  • ${highlightedSnippet}
  • `); @@ -144,5 +183,5 @@ $(document).ready(function() { e.preventDefault(); }); - console.log('Search functionality v1.8 initialization complete'); + console.log(`Search ${SEARCH_VERSION} initialization complete`); });