<h3>Terms</h3> <form action=“” method=“get”>
<label for="field">Choose a field: <select id="field" name="field" onchange="location.href='/term/show/' + this.value;"> <option value="">--</option> <% @reader.field_infos.each do |fi| next unless fi.indexed? %> <option value="<%=fi.name%>" <%= 'selected="selected"' if @field == fi.name %>><%=fi.name%></option> <% end %> </select> </label>
</form> <hr/> <% if @terms %> <div style=“float:left; padding-right:30px;”>
<h4>Field: <%= @field %></h4> <form action="" onsubmit="return findTerm(document.getElementById('choose-term').value);"> <input id="choose-term" type="text"/></form> <hr/> <div id="terms"> </div> <hr/> <form action=""> <input type="submit" value="Previous" onclick="return prevTerm();"/> <input type="submit" value="Next" onclick="return nextTerm();"/><br/> </form>
</div> <div style=“float:left; padding-right:30px;”>
<h4>Documents <input name="show-documents" type="checkbox" id="show-documents" onchange="displayDoc();"/></h4> <div id="doc-display"> <form action="" onsubmit="return findDoc(document.getElementById('choose-doc').value);"> <input id="choose-doc" type="text"/></form> <hr/> <div id="documents"> </div> <hr/> <form action=""> <input type="submit" value="Previous" onclick="return prevDoc();"/> <input type="submit" value="Next" onclick="return nextDoc();"/><br/> </form> </div>
</div> <script type=“text/javascript”><!–
function createSideHeaderedTable(content) { var table = document.createElement("table"); table.setAttribute('cellpadding', "0"); table.setAttribute('cellspacing', "0"); table.className = "left-headed"; for (var i = 0; i < content.length; i++) { var tr = document.createElement("tr"); var th = document.createElement("th"); th.appendChild(document.createTextNode(content[i][0])); tr.appendChild(th); var td = document.createElement("td"); var c = content[i][1]; td.appendChild(c instanceof Object ? c : document.createTextNode(c)); tr.appendChild(td); table.appendChild(tr); } return table; } var terms = <%= @terms %>; var numTerms = terms.length; var termI = 0; var termDiv = document.getElementById("terms"); var termChooserTxt = document.getElementById('choose-term'); var docs = null; var numDocs = 0; var docI = 0; var docDiv = document.getElementById("documents"); var showDocs = document.getElementById("show-documents"); var docChooserTxt = document.getElementById('choose-doc'); var docDisplayDiv = document.getElementById('doc-display'); function getDocs() { var req = new XMLHttpRequest(); req.open('GET', '/term/termdocs/<%=@field%>/' + terms[termI][0], true); req.onreadystatechange = function() { if (req.readyState == 4) { docs = eval(req.responseText); numDocs = docs.length; docI = 0; displayDoc(); } }; req.send( no params null); return false; } function displayDoc() { if (showDocs.checked) { docDisplayDiv.style.display = 'block'; if (docs == null) { getDocs(); } else { docChooserTxt.value = docs[docI][0]; var docLink = document.createElement('a'); docLink.setAttribute('href', "/document/show/" + docs[docI][0]); docLink.appendChild(document.createTextNode(docs[docI][0])); var table = createSideHeaderedTable([ ['index', '' + (docI + 1) + ' of ' + numDocs], ['document', docLink], ['number of occurrences', docs[docI][1]], ['positions', docs[docI][2].join(',')] ]); if (docDiv.firstChild) docDiv.replaceChild(table, docDiv.firstChild); else docDiv.appendChild(table); } } else { docDiv.innerHTML = ''; docDisplayDiv.style.display = 'none'; } return false; } function nextDoc() { if (docI < numDocs - 1) { docI++; displayDoc(); } else alert('No more docs. Already at the end.'); return false; } function prevDoc() { if (docI > 0) { docI -= 1; displayDoc(); } else alert('No more docs. Already at the start.'); return false; } function findDoc(doc) { if (docs && docs.length > 0) { docI = bsearch(docs, doc, function(a, b) {return a[0] < b}); if (docI >= docs.length) docI -= 1; displayDoc(); } return false; } function displayTerm() { docs = null; termChooserTxt.value = terms[termI][0]; var table = createSideHeaderedTable([ ['index', '' + (termI + 1) + ' of ' + numTerms], ['term', terms[termI][0]], ['number of documents', terms[termI][1]], ]); termDiv.replaceChild(table, termDiv.firstChild); displayDoc(); } function nextTerm() { if (termI < numTerms - 1) { termI++; displayTerm(); } else alert('No more terms. Already at the end.'); return false; } function prevTerm() { if (termI > 0) { termI -= 1; displayTerm(); } else alert('No more terms. Already at the start.'); return false; } function findTerm(term) { if (terms && terms.length > 0) { termI = bsearch(terms, term, function(a, b) {return a[0] < b}); var match = (terms[termI]||[])[0]; if (term != match) { alert('Term <%=@field%>:' + term + ' not found in index'); } else { displayTerm(); } } return false; } function TermSuggestionProvider() { } TermSuggestionProvider.prototype.requestSuggestions = function(oAutoSuggestControl, bTypeAhead) { var aSuggestions = new Array(); var sTextboxValue = oAutoSuggestControl.textbox.value; if (sTextboxValue.length > 0) { start = bsearch(terms, sTextboxValue, function(a, b) {return a[0] < b}); for (var i = start; i < terms.length && terms[i][0].indexOf(sTextboxValue) == 0 && aSuggestions.length < 10; i++) { aSuggestions.push(terms[i][0]); } oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead); } }; window.onload = function() { var oTermTextbox = new AutoSuggestControl(termChooserTxt, new TermSuggestionProvider()); } displayTerm(); //-->
</script> <% end %> <hr/>