Skip to content

Commit

Permalink
Add configuration for read-the-org search bar
Browse files Browse the repository at this point in the history
- 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.
  • Loading branch information
David Fenyes authored and fniessen committed Oct 12, 2024
1 parent 4abb67b commit 608eb61
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 7 deletions.
18 changes: 17 additions & 1 deletion org/theme-readtheorg-local.setup
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,21 @@
#+HTML_HEAD: <script type="text/javascript" src="src/lib/js/jquery.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="src/lib/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="src/lib/js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="src/readtheorg_theme/js/readtheorg.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="src/readtheorg_theme/js/search.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="src/readtheorg_theme/js/readtheorg.js"></script>

#+MACRO: enable-search #+HTML_HEAD: <script type="text/javascript">enableSearch();</script>
#+MACRO: disable-search #+HTML_HEAD: <script type="text/javascript">disableSearch();</script>
#+MACRO: set-search-limit #+HTML_HEAD: <script type="text/javascript">setSearchLimit($1);</script>

* 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
18 changes: 17 additions & 1 deletion org/theme-readtheorg.setup
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,21 @@
#+HTML_HEAD: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
#+HTML_HEAD: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="https://fniessen.github.io/org-html-themes/src/lib/js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="https://fniessen.github.io/org-html-themes/src/readtheorg_theme/js/readtheorg.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="src/readtheorg_theme/js/search.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="https://fniessen.github.io/org-html-themes/src/readtheorg_theme/js/readtheorg.js"></script>

#+MACRO: enable-search #+HTML_HEAD: <script type="text/javascript">enableSearch();</script>
#+MACRO: disable-search #+HTML_HEAD: <script type="text/javascript">disableSearch();</script>
#+MACRO: set-search-limit #+HTML_HEAD: <script type="text/javascript">setSearchLimit($1);</script>

* 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
49 changes: 44 additions & 5 deletions src/readtheorg_theme/js/search.js
Original file line number Diff line number Diff line change
@@ -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(`
<div id="search-container">
Expand Down Expand Up @@ -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 = $(`<li role="option" tabindex="-1">${highlightedSnippet}</li>`);
Expand Down Expand Up @@ -144,5 +183,5 @@ $(document).ready(function() {
e.preventDefault();
});

console.log('Search functionality v1.8 initialization complete');
console.log(`Search ${SEARCH_VERSION} initialization complete`);
});

0 comments on commit 608eb61

Please sign in to comment.