source: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/stream-index.js@ 31614

Last change on this file since 31614 was 31614, checked in by davidb, 7 years ago

Separate off stream query page

File size: 7.2 KB
Line 
1
2function stream_generate_item(line,id,title)
3{
4 var css_class = (line%2 == 0) ? 'class="evenline"' : 'class="oddline"';
5
6 var html_item = "";
7
8
9 var babel_url = "https://babel.hathitrust.org/cgi/pt?id="+id+";view=1up;seq="+1;
10
11 html_item += '<p ' + css_class + '>';
12 //html_item += ' <span style="font-style: italic;" name="'+id+'"></span><br>';
13 html_item += '<a target="_blank" href="' + babel_url + '">' + id + ': ' + title + '</a>';
14 html_item += '</p>';
15
16 return html_item;
17}
18
19
20
21function stream_show_results(jsonData) {
22 var docs = jsonData["result-set"].docs;
23 var num_docs = docs.length -1;
24
25 $('.search-in-progress').css("cursor","auto");
26
27 var $search_results = $('#search-results');
28
29 if (num_docs>0) {
30 $search_results.html("<p>Results: " + num_docs + " volumes matched</p>");
31 /*
32 var from = parseInt(store_search_args.start);
33 var to = from + num_rows;
34 $search_results.append("<p>Showing matches: "+from+"-" + to + "</p>");
35 */
36 }
37 else {
38 $search_results.html("<p>No volumes matched your query</p>");
39 }
40
41 for (var i=0; i<num_docs; i++) {
42 var doc = docs[i];
43 var id = doc.id;
44 var title = doc.title_t;
45
46 var html_item = stream_generate_item(i,id,title);
47 $search_results.append(html_item);
48 }
49 return;
50 // ****
51
52 var htids = [];
53
54 var prev_id = null;
55 var prev_pages = [];
56
57 var i=0;
58 var line_num = 0;
59 while (i<num_docs) {
60// for (var i=0; i<num_docs; i++) {
61 var doc = docs[i];
62 var id_and_page = doc.id.split(".page-");
63 var id = id_and_page[0];
64 var seqnum = parseInt(id_and_page[1]) +1; // fix up ingest error
65 //var page = seqnum+1;
66 //var page = seqnum-1;
67 var page = seqnum;
68
69 if ((prev_id != null) && (id != prev_id)) {
70 // time to output previous item
71 var html_item = generate_item(line_num,prev_id,prev_pages);
72 $search_results.append(html_item);
73 line_num++;
74 prev_pages = [page];
75 }
76 else {
77 // accumulate pages
78 prev_pages.push(page)
79 }
80
81 htids.push("htid:"+id);
82
83 prev_id = id;
84 i++;
85 }
86
87 var html_item = generate_item(line_num,prev_id,prev_pages);
88 $search_results.append(html_item);
89
90
91 document.location.href="#search-results-anchor";
92
93 var next_prev = '<p style="width:100%;"><div id="search-prev" style="float: left;"><a>&lt; Previous</a></div><div id="search-next" style="float: right;"><a>Next &gt;</a></div></p>';
94
95 $search_results.append(next_prev);
96 $('#search-prev').click(function(event) { show_new_results(-1*num_rows); });
97 $('#search-next').click(function(event) { show_new_results(num_rows); });
98
99 var search_start = store_search_args.start;
100 if (search_start==0) {
101 $('#search-prev').hide();
102 }
103
104 // Example URL for catalog metadata (multiple items)
105 // http://catalog.hathitrust.org/api/volumes/brief/json/id:552;lccn:70628581|isbn:0030110408
106
107 var htids_str = htids.join("|",htids);
108 var cat_url = "http://catalog.hathitrust.org/api/volumes/brief/json/" + htids_str;
109 $.ajax({
110 url: cat_url,
111 dataType: 'jsonp',
112 jsonpCallback: "add_titles"
113 });
114
115
116 //var json_pretty = JSON.stringify(jsonData.response, null, '\t');
117 //$('#search-results').text(json_pretty)
118}
119
120
121function stream_submit_action(event)
122{
123 event.preventDefault();
124
125 $('.search-in-progress').css("cursor","wait");
126
127 var vq_text = $('#vq').val();
128
129 store_search_action = $('#search-form').attr("action");
130
131 var arg_indent = $('#indent').attr('value');
132 var arg_wt = $('#wt').attr('value');
133 var arg_start = $('#start').attr('value');
134 var arg_rows = $('#rows').attr('value');
135 var q_text = $('#q').val();
136
137 group_by_vol_checked = $('#group-results-by-id:checked').length;
138
139
140 if ((q_text === "") && (vq_text === "")) {
141 $('.search-in-progress').css("cursor","auto");
142 alert("No query term entered");
143 return;
144 }
145
146 var expr_all = "";
147 var expr_md = "";
148 var expr_tx = "";
149
150 if (vq_text !== "") {
151 // simplified case of issuing a volume-based metadata query
152 //expr=search(col,q,fl,sort,rows)
153
154
155 //var expr = "expr=search(";
156 expr_md = "search(";
157 expr_md += "htrc-full-ef20";
158 expr_md += ",q=\""+vq_text+"\"";
159 expr_md += ",fl=\"volumeid_s,id,title_t\"";
160 expr_md += ",sort=\"id asc"+"\"";
161 expr_md += ",indent=\""+arg_indent+"\"";
162 expr_md += ",wt=\""+arg_wt+"\"";
163 expr_md += ",start=\""+arg_start+"\"";
164 expr_md += ",rows=\""+arg_rows+"\"";
165 expr_md += ")";
166
167 store_search_args = { q: vq_text, indent: arg_indent, wt: arg_wt,
168 start: arg_start, rows: arg_rows };
169 }
170
171 if (q_text !== "") {
172
173 var fields = [];
174 var universal_pos_tags = [ "VERB", "NOUN", "ADJ", "ADV", "ADP", "CONJ", "DET", "NUM", "PRT", "X" ];
175
176 var arg_q = "";
177
178 var split_q_text = q_text.split(/\s+/);
179 for (var qi=0; qi<split_q_text.length; qi++) {
180 q_text = split_q_text[qi];
181
182 for (var li=0; li<langs_with_pos.length; li++) {
183 var lang = langs_with_pos[li];
184 var lang_enabled_id = lang + "-enabled";
185 var $lang_enabled_cb = $('#'+lang_enabled_id);
186 if ($lang_enabled_cb.is(':checked')) {
187 console.log("Extracting POS tags for: " + lang);
188
189 for (var ti=0; ti<universal_pos_tags.length; ti++) {
190 var tag = universal_pos_tags[ti];
191 var lang_tag_id = lang+"-"+tag+"-htrctoken-cb";
192 var $lang_tag_cb = $('#'+lang_tag_id);
193 if ($lang_tag_cb.is(':checked')) {
194 //var lang_tag_field = "xxxx"+lang+"_"+tag+"_htrctoken";
195 var lang_tag_field = lang+"_"+tag+"_htrctoken";
196 fields.push(lang_tag_field+":"+q_text);
197 }
198 }
199 }
200 }
201
202 for (var li=0; li<langs_without_pos.length; li++) {
203 var lang = langs_without_pos[li];
204 var lang_enabled_id = lang + "-enabled";
205 var $lang_enabled_cb = $('#'+lang_enabled_id);
206
207 if ($lang_enabled_cb.is(':checked')) {
208 console.log("Adding in non-POS field for: " + lang);
209 //var lang_tag_field = "xxxx"+lang+"_htrctoken";
210 var lang_tag_field = lang+"_htrctoken";
211 fields.push(lang_tag_field+":"+q_text);
212 }
213 }
214
215 if (fields.length == 0) {
216 alert("No languages selected");
217 return;
218 }
219
220 if (qi>0) {
221 arg_q += " OR ";
222 }
223
224 arg_q += fields.join(" OR ");
225
226 } // end of for each split q_text
227
228 // Example search on one of the htrc-full-ef fields is:
229 // q=en_NOUN_htrctoken:farming
230
231 store_search_args = { q: arg_q, indent: arg_indent, wt: arg_wt, start: arg_start, rows: arg_rows };
232
233 store_search_args.sort="id asc";
234 store_search_args.fl="volumeid_s,id";
235
236 var expr_tx = "search(htrc-full-ef20";
237
238 for (var k in store_search_args) {
239 if (store_search_args.hasOwnProperty(k)) {
240 var v = store_search_args[k];
241 expr_tx += "," + k + "=\"" + v + "\"";
242 }
243 }
244 expr_tx += ")";
245 }
246
247
248 if ((expr_md != "") && (expr_tx != "")) {
249 expr = "expr=intersect(" + expr_md + "," + expr_tx + ", on=\"id=volumeid_s\")";
250 }
251 else if (expr_md != "") {
252 expr = "expr=" + expr_md;
253 }
254 else if (expr_tx != "") {
255 expr = "expr=" + expr_tx;
256 }
257 else {
258 // both empty
259 console.log("Warning: query was empty");
260 }
261
262
263 $.ajax({
264 type: 'GET',
265 url: store_search_action,
266 data: expr,
267 dataType: 'json',
268 success: stream_show_results,
269 error: ajax_error
270 });
271
272}
273
274
275$(function() {
276 if ($('#stream-search-submit').length>0) {
277 $('#stream-search-submit').click(stream_submit_action);
278 }
279
280});
Note: See TracBrowser for help on using the repository browser.