1 |
|
---|
2 | function 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 |
|
---|
21 | function 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>< Previous</a></div><div id="search-next" style="float: right;"><a>Next ></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 |
|
---|
121 | function 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 | });
|
---|