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

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

After next phase of development

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