|
38 | 38 | debounceTimer: null, |
39 | 39 | entryKeys: new Set(), |
40 | 40 | elements: null, |
41 | | - deepIndexingEnabled: false |
| 41 | + deepIndexingEnabled: false, |
| 42 | + indexLoaded: false, |
| 43 | + indexFile: 'search-index.json' |
42 | 44 | }; |
43 | 45 | var domParserInstance = null; |
44 | 46 | var cachedNavFromStorage = null; |
|
703 | 705 | }); |
704 | 706 |
|
705 | 707 | updateSearchFeedback(); |
706 | | - scheduleIndexing(); |
| 708 | + loadSearchIndexFromFile(); |
| 709 | + } |
| 710 | + |
| 711 | + function loadSearchIndexFromFile() { |
| 712 | + if (!searchState.deepIndexingEnabled) { |
| 713 | + searchState.indexLoaded = true; |
| 714 | + scheduleIndexing(); |
| 715 | + return; |
| 716 | + } |
| 717 | + |
| 718 | + fetch(searchState.indexFile) |
| 719 | + .then(function(response) { |
| 720 | + if (!response.ok) { |
| 721 | + throw new Error('Index file not found'); |
| 722 | + } |
| 723 | + return response.json(); |
| 724 | + }) |
| 725 | + .then(function(indexData) { |
| 726 | + if (indexData && indexData.entries && Array.isArray(indexData.entries)) { |
| 727 | + console.log('Search index loaded from file:', indexData.entries.length, 'entries'); |
| 728 | + searchState.extraEntries = indexData.entries; |
| 729 | + searchState.entryKeys.clear(); |
| 730 | + searchState.baseEntries.forEach(function(entry) { |
| 731 | + searchState.entryKeys.add(entryKey(entry)); |
| 732 | + }); |
| 733 | + indexData.entries.forEach(function(entry) { |
| 734 | + searchState.entryKeys.add(entryKey(entry)); |
| 735 | + }); |
| 736 | + searchState.indexLoaded = true; |
| 737 | + searchState.indexing = false; |
| 738 | + updateSearchFeedback(searchState.activeQuery, null); |
| 739 | + if (searchState.activeQuery && searchState.activeQuery.length >= 2) { |
| 740 | + performSearch(searchState.activeQuery); |
| 741 | + } |
| 742 | + } |
| 743 | + }) |
| 744 | + .catch(function(error) { |
| 745 | + console.log('Search index file not found, will build dynamically'); |
| 746 | + searchState.indexLoaded = false; |
| 747 | + scheduleIndexing(); |
| 748 | + }); |
707 | 749 | } |
708 | 750 |
|
709 | 751 | function prepareBaseSearchEntries() { |
|
953 | 995 | searchState.indexing = false; |
954 | 996 | return; |
955 | 997 | } |
| 998 | + if (searchState.indexLoaded) { |
| 999 | + searchState.indexing = false; |
| 1000 | + return; |
| 1001 | + } |
956 | 1002 | if (searchState.indexing || !searchState.queue.length) { |
957 | 1003 | searchState.indexing = searchState.queue.length > 0; |
958 | 1004 | return; |
|
0 commit comments