diff options
Diffstat (limited to 'themes/new_theme/layouts/partials/ranklist_elasticlunr.html')
-rw-r--r-- | themes/new_theme/layouts/partials/ranklist_elasticlunr.html | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/themes/new_theme/layouts/partials/ranklist_elasticlunr.html b/themes/new_theme/layouts/partials/ranklist_elasticlunr.html new file mode 100644 index 0000000..5c7786b --- /dev/null +++ b/themes/new_theme/layouts/partials/ranklist_elasticlunr.html @@ -0,0 +1,99 @@ +<script src="/js/jquery.js" type="text/javascript"></script> +<script src="/js/url-search-params.js" type="text/javascript"></script> +<script src="/js/elasticlunr.min.js" type="text/javascript"></script> +<script src="/js/loadingoverlay.min.js" type="text/javascript"></script> +<script language="Javascript"> + + function draw_ranklist( query, results ) { + var html = ''; + + if( results.length == 0 ) { + return "<p>No hits for query '" + query + "'...</p>"; + } else { + html += "<p>" + results.length + " hits found</p>"; + } + + var start = 1; + html += "<ol class=\"ranklist\" start=\"" + start + "\">"; + for( var i = 0; i < results.length; i++ ) { + var rank = results[i]['doc']; + var abstract = rank['abstract']; + var title = rank['title']; + if( title == '' ) { + title = 'No title'; + } + var docid = results[i]['ref']; + html += "<li>"; + html += "<div class='title'>" + html += "<a href=\"" + docid + "\">" + title + "</a></div>"; + if( abstract != '' ) { + abstract = abstract.replaceAll( "#SMARK#", "<b>" ).replaceAll( "#EMARK#", "</b>" ); + html += "<div class='abstract'>" + abstract + "</div>"; + } + html += "</li>"; + } + html += "</ol>"; + + return html; + } + + String.prototype.replaceAll = function(search, replacement) { + var target = this; + return target.replace(new RegExp(search, 'g'), replacement); + }; + + function escapeHtml( text ) { + return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">" ); + } + + function executeQuery( query ) { + + $( "#query" ).LoadingOverlay( "show" ); + + $.ajax( { + type : 'GET', + url : '/index/posts.index', + cache : false, + timeout : 5000 + } ) + .error( function( x, t, m ) { + var html = ''; + if( x.status > 0 ) { + msg = x.responseText; + } else { + msg = t; + } + msg = escapeHtml( msg ); + html = "<pre><font color='red'>There was an error loading the Elasticlunr index, reason: " + msg + "</font></pre>\n"; + $( '#ranklist' ).html( html ); + + $( "#query" ).LoadingOverlay( "hide", true ); + } ) + .success( function( data ) { + + var index = elasticlunr.Index.load( JSON.parse( data ) ); + + var results = index.search( query, { fields: { title : { boost : 2 }, content : { boost : 1 } } } ); + + var html = draw_ranklist( query, results ); + + $( '#ranklist' ).html( html ); + + $( "#query" ).LoadingOverlay( "hide" ); + } ); + + }; + + $( window ).load( function( ) { + var paramsString = window.location.search; + var searchParams = new URLSearchParams( paramsString ); + if( searchParams.has( "q" ) ) { + executeQuery( searchParams.get( "q" ) ); + } else { + // TODO: come up with something here + } // Show full page LoadingOverlay + } ); + +</script> +<div id="ranklist"> +</div> |