jk-ferret 0.11.8.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +24 -0
- data/MIT-LICENSE +20 -0
- data/README +90 -0
- data/RELEASE_CHANGES +137 -0
- data/RELEASE_NOTES +60 -0
- data/Rakefile +443 -0
- data/TODO +109 -0
- data/TUTORIAL +231 -0
- data/bin/ferret-browser +79 -0
- data/ext/BZLIB_blocksort.c +1094 -0
- data/ext/BZLIB_bzlib.c +1578 -0
- data/ext/BZLIB_compress.c +672 -0
- data/ext/BZLIB_crctable.c +104 -0
- data/ext/BZLIB_decompress.c +626 -0
- data/ext/BZLIB_huffman.c +205 -0
- data/ext/BZLIB_randtable.c +84 -0
- data/ext/STEMMER_api.c +66 -0
- data/ext/STEMMER_libstemmer.c +93 -0
- data/ext/STEMMER_stem_ISO_8859_1_danish.c +337 -0
- data/ext/STEMMER_stem_ISO_8859_1_dutch.c +624 -0
- data/ext/STEMMER_stem_ISO_8859_1_english.c +1117 -0
- data/ext/STEMMER_stem_ISO_8859_1_finnish.c +762 -0
- data/ext/STEMMER_stem_ISO_8859_1_french.c +1246 -0
- data/ext/STEMMER_stem_ISO_8859_1_german.c +503 -0
- data/ext/STEMMER_stem_ISO_8859_1_hungarian.c +1230 -0
- data/ext/STEMMER_stem_ISO_8859_1_italian.c +1065 -0
- data/ext/STEMMER_stem_ISO_8859_1_norwegian.c +297 -0
- data/ext/STEMMER_stem_ISO_8859_1_porter.c +749 -0
- data/ext/STEMMER_stem_ISO_8859_1_portuguese.c +1017 -0
- data/ext/STEMMER_stem_ISO_8859_1_spanish.c +1093 -0
- data/ext/STEMMER_stem_ISO_8859_1_swedish.c +307 -0
- data/ext/STEMMER_stem_ISO_8859_2_romanian.c +998 -0
- data/ext/STEMMER_stem_KOI8_R_russian.c +700 -0
- data/ext/STEMMER_stem_UTF_8_danish.c +339 -0
- data/ext/STEMMER_stem_UTF_8_dutch.c +634 -0
- data/ext/STEMMER_stem_UTF_8_english.c +1125 -0
- data/ext/STEMMER_stem_UTF_8_finnish.c +768 -0
- data/ext/STEMMER_stem_UTF_8_french.c +1256 -0
- data/ext/STEMMER_stem_UTF_8_german.c +509 -0
- data/ext/STEMMER_stem_UTF_8_hungarian.c +1234 -0
- data/ext/STEMMER_stem_UTF_8_italian.c +1073 -0
- data/ext/STEMMER_stem_UTF_8_norwegian.c +299 -0
- data/ext/STEMMER_stem_UTF_8_porter.c +755 -0
- data/ext/STEMMER_stem_UTF_8_portuguese.c +1023 -0
- data/ext/STEMMER_stem_UTF_8_romanian.c +1004 -0
- data/ext/STEMMER_stem_UTF_8_russian.c +694 -0
- data/ext/STEMMER_stem_UTF_8_spanish.c +1097 -0
- data/ext/STEMMER_stem_UTF_8_swedish.c +309 -0
- data/ext/STEMMER_stem_UTF_8_turkish.c +2205 -0
- data/ext/STEMMER_utilities.c +478 -0
- data/ext/analysis.c +1710 -0
- data/ext/analysis.h +266 -0
- data/ext/api.h +26 -0
- data/ext/array.c +125 -0
- data/ext/array.h +62 -0
- data/ext/bitvector.c +96 -0
- data/ext/bitvector.h +594 -0
- data/ext/bzlib.h +282 -0
- data/ext/bzlib_private.h +503 -0
- data/ext/compound_io.c +384 -0
- data/ext/config.h +52 -0
- data/ext/document.c +159 -0
- data/ext/document.h +63 -0
- data/ext/except.c +102 -0
- data/ext/except.h +176 -0
- data/ext/extconf.rb +15 -0
- data/ext/ferret.c +416 -0
- data/ext/ferret.h +94 -0
- data/ext/field_index.c +262 -0
- data/ext/field_index.h +52 -0
- data/ext/filter.c +157 -0
- data/ext/fs_store.c +493 -0
- data/ext/global.c +458 -0
- data/ext/global.h +302 -0
- data/ext/hash.c +524 -0
- data/ext/hash.h +515 -0
- data/ext/hashset.c +192 -0
- data/ext/hashset.h +215 -0
- data/ext/header.h +58 -0
- data/ext/helper.c +63 -0
- data/ext/helper.h +21 -0
- data/ext/index.c +6804 -0
- data/ext/index.h +935 -0
- data/ext/internal.h +1019 -0
- data/ext/lang.c +10 -0
- data/ext/lang.h +68 -0
- data/ext/libstemmer.h +79 -0
- data/ext/mempool.c +88 -0
- data/ext/mempool.h +43 -0
- data/ext/modules.h +190 -0
- data/ext/multimapper.c +351 -0
- data/ext/multimapper.h +60 -0
- data/ext/posh.c +1006 -0
- data/ext/posh.h +973 -0
- data/ext/priorityqueue.c +149 -0
- data/ext/priorityqueue.h +155 -0
- data/ext/q_boolean.c +1621 -0
- data/ext/q_const_score.c +162 -0
- data/ext/q_filtered_query.c +212 -0
- data/ext/q_fuzzy.c +280 -0
- data/ext/q_match_all.c +149 -0
- data/ext/q_multi_term.c +673 -0
- data/ext/q_parser.c +3103 -0
- data/ext/q_phrase.c +1206 -0
- data/ext/q_prefix.c +98 -0
- data/ext/q_range.c +682 -0
- data/ext/q_span.c +2390 -0
- data/ext/q_term.c +337 -0
- data/ext/q_wildcard.c +167 -0
- data/ext/r_analysis.c +2626 -0
- data/ext/r_index.c +3468 -0
- data/ext/r_qparser.c +635 -0
- data/ext/r_search.c +4490 -0
- data/ext/r_store.c +513 -0
- data/ext/r_utils.c +1131 -0
- data/ext/ram_store.c +476 -0
- data/ext/scanner.c +895 -0
- data/ext/scanner.h +36 -0
- data/ext/scanner_mb.c +6701 -0
- data/ext/scanner_utf8.c +4415 -0
- data/ext/search.c +1864 -0
- data/ext/search.h +953 -0
- data/ext/similarity.c +151 -0
- data/ext/similarity.h +89 -0
- data/ext/sort.c +786 -0
- data/ext/stem_ISO_8859_1_danish.h +16 -0
- data/ext/stem_ISO_8859_1_dutch.h +16 -0
- data/ext/stem_ISO_8859_1_english.h +16 -0
- data/ext/stem_ISO_8859_1_finnish.h +16 -0
- data/ext/stem_ISO_8859_1_french.h +16 -0
- data/ext/stem_ISO_8859_1_german.h +16 -0
- data/ext/stem_ISO_8859_1_hungarian.h +16 -0
- data/ext/stem_ISO_8859_1_italian.h +16 -0
- data/ext/stem_ISO_8859_1_norwegian.h +16 -0
- data/ext/stem_ISO_8859_1_porter.h +16 -0
- data/ext/stem_ISO_8859_1_portuguese.h +16 -0
- data/ext/stem_ISO_8859_1_spanish.h +16 -0
- data/ext/stem_ISO_8859_1_swedish.h +16 -0
- data/ext/stem_ISO_8859_2_romanian.h +16 -0
- data/ext/stem_KOI8_R_russian.h +16 -0
- data/ext/stem_UTF_8_danish.h +16 -0
- data/ext/stem_UTF_8_dutch.h +16 -0
- data/ext/stem_UTF_8_english.h +16 -0
- data/ext/stem_UTF_8_finnish.h +16 -0
- data/ext/stem_UTF_8_french.h +16 -0
- data/ext/stem_UTF_8_german.h +16 -0
- data/ext/stem_UTF_8_hungarian.h +16 -0
- data/ext/stem_UTF_8_italian.h +16 -0
- data/ext/stem_UTF_8_norwegian.h +16 -0
- data/ext/stem_UTF_8_porter.h +16 -0
- data/ext/stem_UTF_8_portuguese.h +16 -0
- data/ext/stem_UTF_8_romanian.h +16 -0
- data/ext/stem_UTF_8_russian.h +16 -0
- data/ext/stem_UTF_8_spanish.h +16 -0
- data/ext/stem_UTF_8_swedish.h +16 -0
- data/ext/stem_UTF_8_turkish.h +16 -0
- data/ext/stopwords.c +410 -0
- data/ext/store.c +698 -0
- data/ext/store.h +799 -0
- data/ext/symbol.c +10 -0
- data/ext/symbol.h +23 -0
- data/ext/term_vectors.c +73 -0
- data/ext/threading.h +31 -0
- data/ext/win32.h +62 -0
- data/lib/ferret.rb +30 -0
- data/lib/ferret/browser.rb +246 -0
- data/lib/ferret/browser/s/global.js +192 -0
- data/lib/ferret/browser/s/style.css +148 -0
- data/lib/ferret/browser/views/document/list.rhtml +49 -0
- data/lib/ferret/browser/views/document/show.rhtml +27 -0
- data/lib/ferret/browser/views/error/index.rhtml +7 -0
- data/lib/ferret/browser/views/help/index.rhtml +8 -0
- data/lib/ferret/browser/views/home/index.rhtml +29 -0
- data/lib/ferret/browser/views/layout.rhtml +22 -0
- data/lib/ferret/browser/views/term-vector/index.rhtml +4 -0
- data/lib/ferret/browser/views/term/index.rhtml +199 -0
- data/lib/ferret/browser/views/term/termdocs.rhtml +1 -0
- data/lib/ferret/browser/webrick.rb +14 -0
- data/lib/ferret/document.rb +130 -0
- data/lib/ferret/field_infos.rb +44 -0
- data/lib/ferret/field_symbol.rb +87 -0
- data/lib/ferret/index.rb +973 -0
- data/lib/ferret/number_tools.rb +157 -0
- data/lib/ferret/version.rb +3 -0
- data/setup.rb +1555 -0
- data/test/long_running/largefile/tc_largefile.rb +46 -0
- data/test/test_all.rb +5 -0
- data/test/test_helper.rb +29 -0
- data/test/test_installed.rb +1 -0
- data/test/threading/number_to_spoken.rb +132 -0
- data/test/threading/thread_safety_index_test.rb +88 -0
- data/test/threading/thread_safety_read_write_test.rb +73 -0
- data/test/threading/thread_safety_test.rb +133 -0
- data/test/unit/analysis/tc_analyzer.rb +550 -0
- data/test/unit/analysis/tc_token_stream.rb +653 -0
- data/test/unit/index/tc_index.rb +867 -0
- data/test/unit/index/tc_index_reader.rb +699 -0
- data/test/unit/index/tc_index_writer.rb +447 -0
- data/test/unit/index/th_doc.rb +332 -0
- data/test/unit/query_parser/tc_query_parser.rb +238 -0
- data/test/unit/search/tc_filter.rb +156 -0
- data/test/unit/search/tc_fuzzy_query.rb +147 -0
- data/test/unit/search/tc_index_searcher.rb +67 -0
- data/test/unit/search/tc_multi_searcher.rb +128 -0
- data/test/unit/search/tc_multiple_search_requests.rb +58 -0
- data/test/unit/search/tc_search_and_sort.rb +179 -0
- data/test/unit/search/tc_sort.rb +49 -0
- data/test/unit/search/tc_sort_field.rb +27 -0
- data/test/unit/search/tc_spans.rb +190 -0
- data/test/unit/search/tm_searcher.rb +436 -0
- data/test/unit/store/tc_fs_store.rb +115 -0
- data/test/unit/store/tc_ram_store.rb +35 -0
- data/test/unit/store/tm_store.rb +34 -0
- data/test/unit/store/tm_store_lock.rb +68 -0
- data/test/unit/tc_document.rb +81 -0
- data/test/unit/tc_field_symbol.rb +26 -0
- data/test/unit/ts_analysis.rb +2 -0
- data/test/unit/ts_index.rb +2 -0
- data/test/unit/ts_largefile.rb +4 -0
- data/test/unit/ts_query_parser.rb +2 -0
- data/test/unit/ts_search.rb +2 -0
- data/test/unit/ts_store.rb +2 -0
- data/test/unit/ts_utils.rb +2 -0
- data/test/unit/utils/tc_bit_vector.rb +295 -0
- data/test/unit/utils/tc_number_tools.rb +117 -0
- data/test/unit/utils/tc_priority_queue.rb +106 -0
- data/test/utils/content_generator.rb +226 -0
- metadata +319 -0
@@ -0,0 +1,192 @@
|
|
1
|
+
function AutoSuggestControl(oTextbox, oProvider) {
|
2
|
+
this.cur = -1;
|
3
|
+
this.layer = null;
|
4
|
+
this.provider = oProvider;
|
5
|
+
this.textbox = oTextbox;
|
6
|
+
this.init();
|
7
|
+
}
|
8
|
+
AutoSuggestControl.prototype.init = function() {
|
9
|
+
var oThis = this;
|
10
|
+
this.textbox.setAttribute("autocomplete", "off");
|
11
|
+
this.textbox.onkeyup = function(oEvent) {
|
12
|
+
if (!oEvent) {
|
13
|
+
oEvent = window.event;
|
14
|
+
}
|
15
|
+
oThis.handleKeyUp(oEvent);
|
16
|
+
};
|
17
|
+
this.textbox.onkeydown = function (oEvent) {
|
18
|
+
if (!oEvent) {
|
19
|
+
oEvent = window.event;
|
20
|
+
}
|
21
|
+
oThis.handleKeyDown(oEvent);
|
22
|
+
};
|
23
|
+
this.textbox.onblur = function () {
|
24
|
+
oThis.hideSuggestions();
|
25
|
+
};
|
26
|
+
|
27
|
+
this.createDropDown();
|
28
|
+
};
|
29
|
+
AutoSuggestControl.prototype.selectRange = function(iStart, iLength) {
|
30
|
+
if (this.textbox.createTextRange) {
|
31
|
+
var oRange = this.textbox.createTextRange();
|
32
|
+
oRange.moveStart("character", iStart);
|
33
|
+
oRange.moveEnd("character", iLength - this.textbox.value.length);
|
34
|
+
oRange.select();
|
35
|
+
} else if (this.textbox.setSelectionRange) {
|
36
|
+
this.textbox.setSelectionRange(iStart, iLength);
|
37
|
+
}
|
38
|
+
this.textbox.focus();
|
39
|
+
};
|
40
|
+
AutoSuggestControl.prototype.typeAhead = function(sSuggestion) {
|
41
|
+
if (this.textbox.createTextRange || this.textbox.setSelectionRange) {
|
42
|
+
var iLen = this.textbox.value.length;
|
43
|
+
this.textbox.value = sSuggestion;
|
44
|
+
this.selectRange(iLen, sSuggestion.length);
|
45
|
+
}
|
46
|
+
};
|
47
|
+
AutoSuggestControl.prototype.autosuggest = function(aSuggestions, bTypeAhead) {
|
48
|
+
if (aSuggestions.length > 0) {
|
49
|
+
if (bTypeAhead) {
|
50
|
+
this.typeAhead(aSuggestions[0]);
|
51
|
+
}
|
52
|
+
this.showSuggestions(aSuggestions);
|
53
|
+
} else {
|
54
|
+
this.hideSuggestions();
|
55
|
+
}
|
56
|
+
};
|
57
|
+
AutoSuggestControl.prototype.handleKeyUp = function(oEvent) {
|
58
|
+
var iKeyCode = oEvent.keyCode;
|
59
|
+
|
60
|
+
if (iKeyCode == 8 || iKeyCode == 46) {
|
61
|
+
this.provider.requestSuggestions(this, false);
|
62
|
+
|
63
|
+
} else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode <= 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
|
64
|
+
//ignore
|
65
|
+
} else {
|
66
|
+
this.provider.requestSuggestions(this, true);
|
67
|
+
}
|
68
|
+
};
|
69
|
+
AutoSuggestControl.prototype.handleKeyDown = function (oEvent) {
|
70
|
+
switch(oEvent.keyCode) {
|
71
|
+
case 38: //up arrow
|
72
|
+
this.previousSuggestion();
|
73
|
+
break;
|
74
|
+
case 40: //down arrow
|
75
|
+
this.nextSuggestion();
|
76
|
+
break;
|
77
|
+
case 13: //enter
|
78
|
+
this.hideSuggestions();
|
79
|
+
break;
|
80
|
+
}
|
81
|
+
};
|
82
|
+
AutoSuggestControl.prototype.hideSuggestions = function() {
|
83
|
+
this.layer.style.visibility = "hidden";
|
84
|
+
};
|
85
|
+
AutoSuggestControl.prototype.highlightSuggestion = function(oSuggestionNode) {
|
86
|
+
for (var i=0; i < this.layer.childNodes.length; i++) {
|
87
|
+
var oNode = this.layer.childNodes[i];
|
88
|
+
if (oNode == oSuggestionNode) {
|
89
|
+
oNode.className = "current"
|
90
|
+
} else if (oNode.className == "current") {
|
91
|
+
oNode.className = "";
|
92
|
+
}
|
93
|
+
}
|
94
|
+
};
|
95
|
+
AutoSuggestControl.prototype.createDropDown = function() {
|
96
|
+
|
97
|
+
this.layer = document.createElement("div");
|
98
|
+
this.layer.className = "suggestions";
|
99
|
+
this.layer.style.visibility = "hidden";
|
100
|
+
this.layer.style.width = this.textbox.offsetWidth;
|
101
|
+
document.body.appendChild(this.layer);
|
102
|
+
|
103
|
+
var oThis = this;
|
104
|
+
|
105
|
+
this.layer.onmousedown = this.layer.onmouseup =
|
106
|
+
this.layer.onmouseover = function(oEvent) {
|
107
|
+
oEvent = oEvent || window.event;
|
108
|
+
oTarget = oEvent.target || oEvent.srcElement;
|
109
|
+
|
110
|
+
if (oEvent.type == "mousedown") {
|
111
|
+
oThis.textbox.value = oTarget.firstChild.nodeValue;
|
112
|
+
oThis.hideSuggestions();
|
113
|
+
} else if (oEvent.type == "mouseover") {
|
114
|
+
oThis.highlightSuggestion(oTarget);
|
115
|
+
} else {
|
116
|
+
oThis.textbox.focus();
|
117
|
+
}
|
118
|
+
};
|
119
|
+
};
|
120
|
+
AutoSuggestControl.prototype.getLeft = function() {
|
121
|
+
|
122
|
+
var oNode = this.textbox;
|
123
|
+
var iLeft = 0;
|
124
|
+
|
125
|
+
while (oNode.tagName != "BODY") {
|
126
|
+
iLeft += oNode.offsetLeft;
|
127
|
+
oNode = oNode.offsetParent;
|
128
|
+
}
|
129
|
+
|
130
|
+
return iLeft;
|
131
|
+
};
|
132
|
+
AutoSuggestControl.prototype.getTop = function() {
|
133
|
+
|
134
|
+
var oNode = this.textbox;
|
135
|
+
var iTop = 0;
|
136
|
+
|
137
|
+
while (oNode.tagName != "BODY") {
|
138
|
+
iTop += oNode.offsetTop;
|
139
|
+
oNode = oNode.offsetParent;
|
140
|
+
}
|
141
|
+
|
142
|
+
return iTop;
|
143
|
+
};
|
144
|
+
AutoSuggestControl.prototype.showSuggestions = function(aSuggestions) {
|
145
|
+
|
146
|
+
var oDiv = null;
|
147
|
+
this.layer.innerHTML = "";
|
148
|
+
|
149
|
+
for (var i = 0; i < aSuggestions.length; i++) {
|
150
|
+
oDiv = document.createElement("div");
|
151
|
+
oDiv.appendChild(document.createTextNode(aSuggestions[i]));
|
152
|
+
this.layer.appendChild(oDiv);
|
153
|
+
}
|
154
|
+
|
155
|
+
this.layer.style.left = this.getLeft() + "px";
|
156
|
+
this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
|
157
|
+
this.layer.style.width = this.textbox.offsetWidth + "px";
|
158
|
+
this.layer.style.visibility = "visible";
|
159
|
+
};
|
160
|
+
AutoSuggestControl.prototype.nextSuggestion = function() {
|
161
|
+
var cSuggestionNodes = this.layer.childNodes;
|
162
|
+
|
163
|
+
if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
|
164
|
+
var oNode = cSuggestionNodes[++this.cur];
|
165
|
+
this.highlightSuggestion(oNode);
|
166
|
+
this.textbox.value = oNode.firstChild.nodeValue;
|
167
|
+
}
|
168
|
+
};
|
169
|
+
AutoSuggestControl.prototype.previousSuggestion = function() {
|
170
|
+
var cSuggestionNodes = this.layer.childNodes;
|
171
|
+
|
172
|
+
if (cSuggestionNodes.length > 0 && this.cur > 0) {
|
173
|
+
var oNode = cSuggestionNodes[--this.cur];
|
174
|
+
this.highlightSuggestion(oNode);
|
175
|
+
this.textbox.value = oNode.firstChild.nodeValue;
|
176
|
+
}
|
177
|
+
};
|
178
|
+
|
179
|
+
function bsearch(aArray, item, less_than) {
|
180
|
+
var left = -1,
|
181
|
+
right = aArray.length,
|
182
|
+
mid;
|
183
|
+
while (right > left + 1) {
|
184
|
+
mid = (left + right) >>> 1;
|
185
|
+
if (less_than(aArray[mid], item)) {
|
186
|
+
left = mid;
|
187
|
+
} else {
|
188
|
+
right = mid;
|
189
|
+
}
|
190
|
+
}
|
191
|
+
return right;
|
192
|
+
}
|
@@ -0,0 +1,148 @@
|
|
1
|
+
body {
|
2
|
+
padding: 10px 30px;
|
3
|
+
}
|
4
|
+
ul#top-menu {
|
5
|
+
margin: 0;
|
6
|
+
padding: 0;
|
7
|
+
padding-left: 20px;
|
8
|
+
border-bottom: 1px solid #000099;
|
9
|
+
}
|
10
|
+
ul#top-menu li {
|
11
|
+
display: inline;
|
12
|
+
padding: 0px;
|
13
|
+
}
|
14
|
+
ul#top-menu li a, ul#top-menu li a:visited {
|
15
|
+
background-color: #cce6ff;
|
16
|
+
padding: 0px 5px;
|
17
|
+
border: 1px solid #000099;
|
18
|
+
text-decoration: none;
|
19
|
+
color: #000099;
|
20
|
+
font-weight: bold;
|
21
|
+
}
|
22
|
+
body#home ul#top-menu li.home a,
|
23
|
+
body#document ul#top-menu li.document a,
|
24
|
+
body#term ul#top-menu li.term a,
|
25
|
+
body#term-vector ul#top-menu li.term-vector a,
|
26
|
+
body#help ul#top-menu li.help a {
|
27
|
+
background-color: #f0f8ff;
|
28
|
+
border-bottom: 1px solid #f0f8ff;
|
29
|
+
}
|
30
|
+
div#content {
|
31
|
+
padding: 10px;
|
32
|
+
margin: 0;
|
33
|
+
background-color: #f0f8ff;
|
34
|
+
}
|
35
|
+
div.display {background-color:#fff;padding:0 5px;}
|
36
|
+
dl {
|
37
|
+
width: 51.1em;
|
38
|
+
margin: 0;
|
39
|
+
padding: 0;
|
40
|
+
}
|
41
|
+
dl dt {
|
42
|
+
width: 15em;
|
43
|
+
float: left;
|
44
|
+
margin: 0;
|
45
|
+
padding: .5em;
|
46
|
+
border-top: 1px solid #999;
|
47
|
+
font-weight: bold;
|
48
|
+
color: #cc9900;
|
49
|
+
}
|
50
|
+
/* commented backslash hack for mac-ie5 \*/
|
51
|
+
dt { clear: both; }
|
52
|
+
/* end hack */
|
53
|
+
dl dd {
|
54
|
+
float: left;
|
55
|
+
width: 34em;
|
56
|
+
margin: 0 0 0 0;
|
57
|
+
padding: .5em;
|
58
|
+
border-top: 1px solid #999;
|
59
|
+
}
|
60
|
+
hr {clear:both;border:0;}
|
61
|
+
h1, h2, h3, h4, h5, h6 {color:#cc0033;}
|
62
|
+
th {
|
63
|
+
font-weight: bold;
|
64
|
+
background-color: #cc9900;
|
65
|
+
color: white;
|
66
|
+
padding: 3px;
|
67
|
+
font-size: 12px;
|
68
|
+
}
|
69
|
+
th.small, td.small {font-size:11px;}
|
70
|
+
th, td {
|
71
|
+
border-top: 1px solid #994400;
|
72
|
+
border-left: 1px solid #994400;
|
73
|
+
}
|
74
|
+
table {
|
75
|
+
border-bottom: 1px solid #994400;
|
76
|
+
border-right: 1px solid #994400;
|
77
|
+
}
|
78
|
+
table.left-headed th {width:80px;text-align:left;}
|
79
|
+
table.left-headed td {background-color: white;text-align:right;width:120px;}
|
80
|
+
td {padding:2px 6px;color:#555;}
|
81
|
+
tr.even {background-color:#cce6ff;}
|
82
|
+
tr.odd {background-color:white;}
|
83
|
+
td.center {text-align:center}
|
84
|
+
td.right {text-align:right}
|
85
|
+
|
86
|
+
label.check {width:150px;float:left;}
|
87
|
+
pre {
|
88
|
+
border-left: solid 1px #cccccc;
|
89
|
+
border-top: solid 1px #cccccc;
|
90
|
+
border-bottom: solid 1px #cccccc;
|
91
|
+
border-right: dashed 2px #cccccc;
|
92
|
+
margin: 1em;
|
93
|
+
padding: 0.7em;
|
94
|
+
display: block;
|
95
|
+
overflow: hidden;
|
96
|
+
color: white;
|
97
|
+
background-color: black;
|
98
|
+
}
|
99
|
+
pre:hover {
|
100
|
+
overflow: visible;
|
101
|
+
border-right: solid 1px #cccccc;
|
102
|
+
width: 1000px;
|
103
|
+
}
|
104
|
+
div.nav {color:#007777;font-size:11px;}
|
105
|
+
div.nav a, div.nav a:visited {
|
106
|
+
background-color: white;
|
107
|
+
color: #007777;
|
108
|
+
padding: 2px 4px;
|
109
|
+
border: 1px solid #bbd8ef;
|
110
|
+
margin-right: 1px;
|
111
|
+
text-decoration: none;
|
112
|
+
font-size: 11px;
|
113
|
+
}
|
114
|
+
div.nav a.deleted {
|
115
|
+
background-color: #fee;
|
116
|
+
}
|
117
|
+
div.nav a.deleted:hover {
|
118
|
+
background-color: #077;
|
119
|
+
color: #fee;
|
120
|
+
}
|
121
|
+
div.nav a.disabled, div.nav a.disabled:hover {
|
122
|
+
cursor: default;
|
123
|
+
color: #ccc;
|
124
|
+
border: 1px solid #ccc;
|
125
|
+
background-color: white;
|
126
|
+
}
|
127
|
+
div.nav a:hover {
|
128
|
+
background-color: #007777;
|
129
|
+
color: white;
|
130
|
+
}
|
131
|
+
/* Auto Suggest */
|
132
|
+
div.suggestions {
|
133
|
+
-moz-box-sizing: border-box;
|
134
|
+
box-sizing: border-box;
|
135
|
+
border: 1px solid black;
|
136
|
+
position: absolute;
|
137
|
+
}
|
138
|
+
div.suggestions div {
|
139
|
+
cursor: default;
|
140
|
+
padding: 0px 3px;
|
141
|
+
background-color: white;
|
142
|
+
opacity: 0.80;
|
143
|
+
filter:alpha(opacity=80);
|
144
|
+
}
|
145
|
+
div.suggestions div.current {
|
146
|
+
background-color: #3366cc;
|
147
|
+
color: white;
|
148
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
<h3>List Documents</h3>
|
2
|
+
<fieldset>
|
3
|
+
<legend>Show fields</legend>
|
4
|
+
<form method="get" action="">
|
5
|
+
<% fields = [];
|
6
|
+
field_settings = @params["field"]||{};
|
7
|
+
@reader.field_infos.each do |fi|
|
8
|
+
next unless fi.stored?
|
9
|
+
%>
|
10
|
+
<label class="check" for="field_<%= fi.name %>">
|
11
|
+
<input name="field[<%= fi.name %>]" type="checkbox" id="field_<%= fi.name %>"
|
12
|
+
<% if field_settings[fi.name.to_s] == "on"; fields << fi.name %>
|
13
|
+
checked="checked"
|
14
|
+
<% end %>
|
15
|
+
onchange="this.form.submit();" /><%= fi.name %>
|
16
|
+
</label>
|
17
|
+
<% end %>
|
18
|
+
</form>
|
19
|
+
</fieldset>
|
20
|
+
<hr/>
|
21
|
+
<%= paginate(@page, @reader.max_doc/@page_size, '/document/list/') %>
|
22
|
+
<hr/>
|
23
|
+
<table cellpadding="0" cellspacing="0">
|
24
|
+
|
25
|
+
<tr>
|
26
|
+
<th>Internal ID</th>
|
27
|
+
<% fields.each do |field| %>
|
28
|
+
<th><%= field %></th>
|
29
|
+
<% end %>
|
30
|
+
</tr>
|
31
|
+
|
32
|
+
<% even=false; (@first...@last).each do |i| %>
|
33
|
+
<% if @reader.deleted?(i) %>
|
34
|
+
<tr class="<%= (even = !even) ? 'even' : 'odd' %>">
|
35
|
+
<td colspan="<%= fields.size + 1 %>" class="center" style="color:#b00;"><%=i%> is deleted</td>
|
36
|
+
</tr>
|
37
|
+
<% else %>
|
38
|
+
<tr onclick="location.href='/document/show/<%=i%>';"
|
39
|
+
class="<%= (even = !even) ? 'even' : 'odd' %>">
|
40
|
+
<td class="left"><a href="/document/show/<%=i%>"><%= i %></a></td>
|
41
|
+
<% doc = @reader[i]; fields.each do |field| %>
|
42
|
+
<td class="small"><%= truncate(doc[field]) %></td>
|
43
|
+
<% end %>
|
44
|
+
</tr>
|
45
|
+
<% end %>
|
46
|
+
<% end %>
|
47
|
+
</table>
|
48
|
+
<hr/>
|
49
|
+
<%= choose_document(@doc_id) %>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<h3>View Document</h3>
|
2
|
+
<%= choose_document(@doc_id) %>
|
3
|
+
<hr/>
|
4
|
+
<%= paginate_docs %>
|
5
|
+
<% total_length = 0 %>
|
6
|
+
<div class="display">
|
7
|
+
<% if @doc %>
|
8
|
+
<h3>Fields</h3>
|
9
|
+
<dl>
|
10
|
+
<% @doc.each_pair do |field, value| %>
|
11
|
+
<% total_length += value.length %>
|
12
|
+
<dt><%= field %></dt>
|
13
|
+
<dd>
|
14
|
+
<% if value.length > 50 %>
|
15
|
+
<pre><%= value %></pre>
|
16
|
+
<% else %>
|
17
|
+
<%= value %>
|
18
|
+
<% end %>
|
19
|
+
</dd>
|
20
|
+
<% end %>
|
21
|
+
</dl>
|
22
|
+
<hr/>
|
23
|
+
<% else %>
|
24
|
+
<p style="color:#933;">Document has been deleted</p>
|
25
|
+
<% end %>
|
26
|
+
</div>
|
27
|
+
<%= (total_length > 1000) ? paginate_docs : '' %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<h3>Ferret Browser Help</h3>
|
2
|
+
<p>
|
3
|
+
At the moment there is no help for the Ferret Browser. Everything should be
|
4
|
+
fairly self explanatory. If not, you can post a question on the
|
5
|
+
<a href="http://rubyforge.org/mailman/listinfo/ferret-talk">mailing list</a>
|
6
|
+
or you can edit the
|
7
|
+
<a href="http://ferret.davebalmain.com/trac/wiki/FerretBrowser" title="Ferret Browser Home Page">FerretBrowser wiki page</a>.
|
8
|
+
</p>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<h3>Index Info</h3>
|
2
|
+
<dl>
|
3
|
+
<dt>Number of Documents</dt> <dd><%= @reader.num_docs %></dd>
|
4
|
+
<dt>Maximum Document</dt> <dd><%= @reader.max_doc %></dd>
|
5
|
+
</dl>
|
6
|
+
<hr/>
|
7
|
+
<h3>Field Infos</h3>
|
8
|
+
<% field_props = [:stored?, :compressed?, :indexed?, :tokenized?, :omit_norms?, :store_term_vector?, :store_positions?, :store_offsets?, :has_norms?] %>
|
9
|
+
<table cellpadding="0" cellspacing="0">
|
10
|
+
<tr>
|
11
|
+
<th>Field Name</th>
|
12
|
+
<th class="small">Boost</th>
|
13
|
+
<% field_props.each do |prop| %>
|
14
|
+
<th class="small"><%= prop %></th>
|
15
|
+
<% end %>
|
16
|
+
</tr>
|
17
|
+
<%
|
18
|
+
even=false;
|
19
|
+
@reader.field_infos.each do |fi|
|
20
|
+
%>
|
21
|
+
<tr class="<%= (even = !even) ? 'even' : 'odd' %>">
|
22
|
+
<td><%= fi.name %></td>
|
23
|
+
<td style="text-align:right;"><%= fi.boost %></td>
|
24
|
+
<% field_props.each do |prop| %>
|
25
|
+
<td class="center"><%= tick_or_cross(fi.send(prop)) %></td>
|
26
|
+
<% end %>
|
27
|
+
</tr>
|
28
|
+
<% end %>
|
29
|
+
</table>
|