summaryrefslogtreecommitdiff
path: root/themes/new_theme/layouts/partials/ranklist_elasticlunr.html
diff options
context:
space:
mode:
Diffstat (limited to 'themes/new_theme/layouts/partials/ranklist_elasticlunr.html')
-rw-r--r--themes/new_theme/layouts/partials/ranklist_elasticlunr.html99
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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;" );
+ }
+
+ 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>