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

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

Next and previous pages

File size: 10.1 KB
Line 
1
2//var langs_with_pos =["da","de","en","nl","pt"];
3var langs_with_pos =["en","de","pt","da","nl"];
4var langs_without_pos =["af","ar","bg","bn","cs","el","es","et","fa","fi","fr","he","hi","hr","hu","id","it","ja","kn","ko","lt","lv","mk","ml","mr","ne","no","pa","pl","ro","ru","sk","sl","so","sq","sv","sw","ta","te","th","tl","tr","uk","ur","vi","zh-cn","zh-tw"];
5
6var num_rows = 20;
7
8function lang_pos_toggle(event) {
9 var $this =$(this);
10 var checked_state = $this.prop("checked");
11
12 var id = $this.attr("id");
13 var split_id = id.split("-");
14 var related_id = split_id[0] + "-pos-choice";
15
16 //console.log("checked state = " + checked_state);
17
18 var disable_state = !checked_state;
19 $('#'+related_id + " *").prop('disabled',disable_state);
20};
21
22function ajax_error(jqXHR, textStatus, errorThrown) {
23 alert('An error occurred... Look at the console (F12 or Ctrl+Shift+I, Console tab) for more information!');
24
25 console.log('jqXHR:' + jqXHR);
26 console.log('textStatus:' + textStatus);
27 console.log('errorThrown:' + errorThrown);
28}
29
30
31function add_titles(json_data) {
32 $.each( json_data, function( htid_with_prefix, htid_val ) {
33 var htid = htid_with_prefix.replace(/^htid:/,"");
34
35 $.each(htid_val.records, function( internalid, metadata ) {
36 var title = metadata.titles[0];
37 $("[name='"+htid+"']").each(function() {$(this).html(title)});
38 console.log(htid + ", title = " + metadata.titles[0]);
39 });
40 });
41}
42
43function show_new_results(delta)
44{
45 store_search_args.start += delta;
46
47 $.ajax({
48 type: 'GET',
49 url: store_search_action,
50 data: store_search_args,
51 dataType: 'json',
52 success: show_results,
53 error: ajax_error
54 });
55}
56
57function show_results(jsonData) {
58 var response = jsonData.response;
59 var num_found = response.numFound;
60 var docs = response.docs;
61 var num_docs = docs.length;
62
63 var $search_results = $('#search-results');
64 if (num_docs>0) {
65 $search_results.html("<p>Results: " + num_found + " volumes/documents matched</p>");
66 var from = parseInt(store_search_args.start)+1;
67 var to = from + num_rows;
68 $search_results.append("<p>Showing matches: "+from+"-" + to + "</p>");
69 }
70 else {
71 $search_results.html("<p>No volumes/documents matched your query</p>");
72 }
73
74
75 // https://babel.hathitrust.org/cgi/pt?id=hvd.hnnssu;view=1up;seq=11
76
77 var htids = [];
78
79 for (var i=0; i<num_docs; i++) {
80 var doc = docs[i];
81 var id_and_page = doc.id.split(".page-");
82 var id = id_and_page[0];
83 var page = parseInt(id_and_page[1]);
84
85
86 var css_class = (i%2 == 0) ? 'class="evenline"' : 'class="oddline"';
87 //var restful_safe_id = id.replace(/\./g,",").replace(/:/g, "+").replace(/\//g, "=");
88
89 var babel_url = "https://babel.hathitrust.org/cgi/pt?id="+id+";view=1up;seq="+page;
90
91 var result_item = '<a target="_blank" href="' + babel_url + '">' + id + ', page ' + page + '</a>';
92 result_item += ' <span style="font-style: italic;" name="'+id+'"><span style="cursor: progress;">Loading ...</span></span>';
93 $search_results.append('<p ' + css_class + '>'+result_item+'</p>');
94
95 htids.push("htid:"+id);
96
97 }
98
99 document.location.href="#search-results-anchor";
100
101 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>';
102
103 $search_results.append(next_prev);
104 $('#search-prev').click(function(event) { show_new_results(-1*num_rows); });
105 $('#search-next').click(function(event) { show_new_results(num_rows); });
106
107 var search_start = store_search_args.start;
108 if (search_start==0) {
109 $('#search-prev').hide();
110 }
111
112 // Example URL for catalog metadata (multiple items)
113 // http://catalog.hathitrust.org/api/volumes/brief/json/id:552;lccn:70628581|isbn:0030110408
114
115 var htids_str = htids.join("|",htids);
116 var cat_url = "http://catalog.hathitrust.org/api/volumes/brief/json/" + htids_str;
117 $.ajax({
118 url: cat_url,
119 dataType: 'jsonp',
120 jsonpCallback: "add_titles"
121 });
122
123
124 //var json_pretty = JSON.stringify(jsonData.response, null, '\t');
125 //$('#search-results').text(json_pretty)
126}
127
128var store_search_args = null;
129var store_search_action = null;
130
131function submit_action(event)
132{
133 event.preventDefault();
134
135 store_search_action = $('#search-form').attr("action");
136
137 var arg_indent = $('#indent').attr('value');
138 var arg_wt = $('#wt').attr('value');
139 var arg_start = $('#start').attr('value');
140 var arg_rows = $('#rows').attr('value');
141 var q_text = $('#q').val();
142
143 if (q_text === "") {
144 alert("No query term entered");
145 return;
146 }
147
148 var fields = [];
149 //var langs_with_pos = [ "da", "de", "en", "nl", "pt", "se" ];
150 var universal_pos_tags = [ "VERB", "NOUN", "ADJ", "ADV", "ADP", "CONJ", "DET", "NUM", "PRT", "X" ];
151
152 for (var li=0; li<langs_with_pos.length; li++) {
153 var lang = langs_with_pos[li];
154 var lang_enabled_id = lang + "-enabled";
155 var $lang_enabled_cb = $('#'+lang_enabled_id);
156 if ($lang_enabled_cb.is(':checked')) {
157 console.log("Extracting POS tags for: " + lang);
158
159 for (var ti=0; ti<universal_pos_tags.length; ti++) {
160 var tag = universal_pos_tags[ti];
161 var lang_tag_id = lang+"-"+tag+"-htrctoken-cb";
162 var $lang_tag_cb = $('#'+lang_tag_id);
163 if ($lang_tag_cb.is(':checked')) {
164 var lang_tag_field = "xxxx"+lang+"_"+tag+"_htrctoken";
165 fields.push(lang_tag_field+":"+q_text);
166 }
167 }
168 }
169 }
170
171 for (var li=0; li<langs_without_pos.length; li++) {
172 var lang = langs_without_pos[li];
173 var lang_enabled_id = lang + "-enabled";
174 var $lang_enabled_cb = $('#'+lang_enabled_id);
175
176 if ($lang_enabled_cb.is(':checked')) {
177 console.log("Adding in non-POS field for: " + lang);
178 var lang_tag_field = "xxxx"+lang+"_htrctoken";
179 fields.push(lang_tag_field+":"+q_text);
180 }
181 }
182
183 if (fields.length == 0) {
184 alert("No languages selected");
185 return;
186 }
187
188 var arg_q = fields.join(" OR ");
189
190
191 // Example search on one of the htrc-full-ef fields is:
192 // q=xxxxen_NOUN_htrctoken:farming
193
194 store_search_args = { q: arg_q, indent: arg_indent, wt: arg_wt, start: arg_start, rows: arg_rows };
195
196 $.ajax({
197 type: 'GET',
198 url: store_search_action,
199 data: store_search_args,
200 dataType: 'json',
201 success: show_results,
202 error: ajax_error
203 });
204
205}
206
207function generate_pos_langs()
208{
209 var pos_checkbox = [
210 { pos:"VERB", label:"Verbs", tooltip:"Verbs (all tenses and modes)" },
211 { pos:"NOUN", label:"Nouns", tooltip:"Nouns (common and proper)" },
212 { pos:"ADJ", label:"Adjectives", tooltip: null },
213 { pos:"ADV", label:"Adverbs", tooltip: null },
214 { pos:"ADP", label:"Adpositions", tooltip:"Adpositions (prepositions and postpositions)" },
215 { pos:"CONJ", label:"Conjunctions",tooltip: null },
216 { pos:"DET", label:"Determiners", tooltip: null },
217 { pos:"NUM", label:"Numbers", tooltip:"Cardinal numbers" },
218 { pos:"PRT", label:"Particles", tooltip:"Particles or other function words" },
219 { pos:"X", label:"Other", tooltip:"Other words, such as foreign words, typos, abbreviations"}
220 ];
221
222 var $pos_fieldsets = $('#pos-fieldsets');
223
224 for (var li=0; li<langs_with_pos.length; li++) {
225
226 var l = langs_with_pos[li];
227 var lang_full = isoLangs[l].name;
228 var lang_native_full = isoLangs[l].nativeName;
229 var opt_title = (lang_full !== lang_native_full) ? 'title="'+lang_native_full+'"' : "";
230
231 var opt_enabled = (l == "en") ? 'checked="checked"' : "";
232
233 var legend = "";
234 legend += ' <legend style="margin-bottom: 5px; padding-top: 15px;">\n';
235 legend += ' <input type="checkbox" name="'+l+'-enabled" id="'+l+'-enabled" ' + opt_enabled +'/>\n';
236 legend += ' <span ' + opt_title + '>'+lang_full+':</span>\n';
237 legend += ' </legend>\n';
238
239
240 var check_box_list = [];
241
242 for (var pi=0; pi<pos_checkbox.length; pi++) {
243 var pos_info = pos_checkbox[pi];
244 var pos = pos_info.pos;
245 var label = pos_info.label;
246 var tooltip = pos_info.tooltip;
247 var opt_tooltip = (tooltip != null) ? 'title="'+tooltip+'"' : "";
248
249 var check_box = "";
250 check_box += ' <input type="checkbox" name="'+l+'-'+pos+'-htrctoken-cb" id="'+l+'-'+pos+'-htrctoken-cb" checked="checked" />\n';
251 check_box += ' <label for="'+l+'-'+pos+'-htrctoken-cb" '+opt_tooltip+'>'+label+'</label>\n';
252
253 check_box_list.push(check_box);
254 }
255
256 var fieldset = "";
257 fieldset += '<fieldset>\n';
258 fieldset += legend;
259 fieldset += ' <div id="'+l+'-pos-choice">\n';
260
261 var check_box_join = check_box_list.join('&nbsp;');
262 fieldset += check_box_join;
263
264 fieldset += ' </div>\n';
265 fieldset += '</fieldset>\n';
266
267 $pos_fieldsets.append(fieldset);
268 $('#'+l+'-enabled').click(lang_pos_toggle);
269
270 if (l == "en") {
271 $('#en-pos-choice *').prop('disabled',false);
272 }
273 else {
274 $('#'+l+'-pos-choice *').prop('disabled',true);
275 }
276 }
277
278
279 //$('#en-enabled').click(lang_pos_toggle);
280 //$('#de-enabled').click(lang_pos_toggle);
281 //$('#de-pos-choice *').prop('disabled',true);
282}
283
284function generate_other_langs()
285{
286 // setup other languages
287 // for each 'langs_without_pos' generate HTML of the form:
288 // <input type="checkbox" name="fr-enabled" id="fr-enabled" />French
289 var $other_langs = $('#other-langs');
290
291 for (var i=0; i<langs_without_pos.length; i++) {
292 var lang = langs_without_pos[i];
293 //var labeled_checkbox = '<span style="white-space:nowrap;">\n';
294 var labeled_checkbox = '<nobr>';
295
296 labeled_checkbox += '<input type="checkbox" name="'+lang+'-enabled" id="'+lang+'-enabled" />';
297 /*
298 if (lang === "zh-cn") {
299 console.log("Mapping zh-cn => zh");
300 lang = "zh";
301 }
302 if (lang === "zh-tw") {
303 console.log("Mapping zh-tw => zh");
304 lang = "zh";
305 }
306*/
307 var lang_full = isoLangs[lang].name;
308 var lang_native_full = isoLangs[lang].nativeName;
309 var opt_title = (lang_full !== lang_native_full) ? 'title="'+lang_native_full+'"' : "";
310
311 labeled_checkbox += '<label for="'+lang+'-enabled" style="padding-left: 5px; padding-right: 10px;" ' + opt_title + '>'+lang_full+'</label>';
312 //labeled_checkbox += '</span>\n';
313 labeled_checkbox += '</nobr> ';
314
315 $other_langs.append(labeled_checkbox);
316
317 }
318}
319
320$(function() {
321 generate_pos_langs();
322
323 generate_other_langs();
324
325 $('#search-submit').click(submit_action);
326
327});
Note: See TracBrowser for help on using the repository browser.