summaryrefslogtreecommitdiff
path: root/themes/new_theme/layouts/partials/ranklist.html
blob: 5c7786b05d70a0d9cf5b989bc80133dc294a0ba1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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>