@@ -33,13 +33,60 @@ var hyperbook = (function () {
3333 const tocDrawerEl = document . getElementById ( "toc-drawer" ) ;
3434 tocDrawerEl . open = ! tocDrawerEl . open ;
3535 }
36+ // search
37+
38+ const searchInputEl = document . getElementById ( "search-input" ) ;
39+ searchInputEl . addEventListener ( "keypress" , ( event ) => {
40+ if ( event . key === "Enter" ) {
41+ event . preventDefault ( ) ;
42+ search ( ) ;
43+ }
44+ } ) ;
45+
46+ function searchToggle ( ) {
47+ const searchDrawerEl = document . getElementById ( "search-drawer" ) ;
48+ searchDrawerEl . open = ! searchDrawerEl . open ;
49+ }
50+
51+ function search ( ) {
52+ const resultsEl = document . getElementById ( "search-results" ) ;
53+ resultsEl . innerHTML = "" ;
54+ const query = searchInputEl . value ;
55+ const idx = window . lunr . Index . load ( LUNR_INDEX ) ;
56+ const documents = SEARCH_DOCUMENTS ;
57+ const results = idx . search ( query ) ;
58+ for ( let result of results ) {
59+ const doc = documents [ result . ref ] ;
60+
61+ const container = document . createElement ( "a" ) ;
62+ container . href = doc . href ;
63+ container . classList . add ( "search-result" ) ;
64+ const heading = document . createElement ( "div" ) ;
65+ heading . textContent = doc . heading ;
66+ heading . classList . add ( "search-result-heading" ) ;
67+ const content = document . createElement ( "div" ) ;
68+ content . classList . add ( "search-result-content" ) ;
69+ const href = document . createElement ( "div" ) ;
70+ href . classList . add ( "search-result-href" ) ;
71+ href . textContent = doc . href ;
72+ if ( doc . content . length > 200 ) {
73+ content . textContent = doc . content . slice ( 0 , 197 ) + "..." ;
74+ } else {
75+ content . textContent = doc . content ;
76+ }
77+
78+ container . appendChild ( heading ) ;
79+ container . appendChild ( content ) ;
80+ container . appendChild ( href ) ;
81+ resultsEl . appendChild ( container ) ;
82+ }
83+ }
3684
3785 function qrcodeOpen ( ) {
3886 const qrCodeDialog = document . getElementById ( "qrcode-dialog" ) ;
3987 const qrcodeEls = qrCodeDialog . getElementsByClassName ( "make-qrcode" ) ;
4088 const urlEls = qrCodeDialog . getElementsByClassName ( "url" ) ;
4189 const qrcodeEl = qrcodeEls [ 0 ] ;
42- const urlEl = urlEls [ 0 ] ;
4390 const qrcode = new window . QRCode ( {
4491 content : window . location . href ,
4592 padding : 0 ,
@@ -113,6 +160,8 @@ var hyperbook = (function () {
113160 toggleBookmark,
114161 navToggle,
115162 tocToggle,
163+ searchToggle,
164+ search,
116165 qrcodeOpen,
117166 qrcodeClose,
118167 } ;
0 commit comments