fr_b02 / petri / doc / search.js @ 5
Historique | Voir | Annoter | Télécharger (12,987 ko)
1 | 5 | a19coudr | /*
|
---|---|---|---|
2 | * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
|
||
3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||
4 | *
|
||
5 | * This code is free software; you can redistribute it and/or modify it
|
||
6 | * under the terms of the GNU General Public License version 2 only, as
|
||
7 | * published by the Free Software Foundation. Oracle designates this
|
||
8 | * particular file as subject to the "Classpath" exception as provided
|
||
9 | * by Oracle in the LICENSE file that accompanied this code.
|
||
10 | *
|
||
11 | * This code is distributed in the hope that it will be useful, but WITHOUT
|
||
12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||
14 | * version 2 for more details (a copy is included in the LICENSE file that
|
||
15 | * accompanied this code).
|
||
16 | *
|
||
17 | * You should have received a copy of the GNU General Public License version
|
||
18 | * 2 along with this work; if not, write to the Free Software Foundation,
|
||
19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||
20 | *
|
||
21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||
22 | * or visit www.oracle.com if you need additional information or have any
|
||
23 | * questions.
|
||
24 | */
|
||
25 | |||
26 | var noResult = {l: "No results found"}; |
||
27 | var catModules = "Modules"; |
||
28 | var catPackages = "Packages"; |
||
29 | var catTypes = "Types"; |
||
30 | var catMembers = "Members"; |
||
31 | var catSearchTags = "SearchTags"; |
||
32 | var highlight = "<span class=\"resultHighlight\">$&</span>"; |
||
33 | var camelCaseRegexp = ""; |
||
34 | var secondaryMatcher = ""; |
||
35 | function getHighlightedText(item) { |
||
36 | var ccMatcher = new RegExp(camelCaseRegexp); |
||
37 | var label = item.replace(ccMatcher, highlight);
|
||
38 | if (label === item) {
|
||
39 | label = item.replace(secondaryMatcher, highlight); |
||
40 | } |
||
41 | return label;
|
||
42 | } |
||
43 | function getURLPrefix(ui) { |
||
44 | var urlPrefix=""; |
||
45 | if (useModuleDirectories) {
|
||
46 | var slash = "/"; |
||
47 | if (ui.item.category === catModules) {
|
||
48 | return ui.item.l + slash;
|
||
49 | } else if (ui.item.category === catPackages && ui.item.m) { |
||
50 | return ui.item.m + slash;
|
||
51 | } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { |
||
52 | $.each(packageSearchIndex, function(index, item) { |
||
53 | if (ui.item.p == item.l) {
|
||
54 | urlPrefix = item.m + slash; |
||
55 | } |
||
56 | }); |
||
57 | return urlPrefix;
|
||
58 | } else {
|
||
59 | return urlPrefix;
|
||
60 | } |
||
61 | } |
||
62 | return urlPrefix;
|
||
63 | } |
||
64 | var watermark = 'Search'; |
||
65 | $(function() { |
||
66 | $("#search").val(''); |
||
67 | $("#search").prop("disabled", false); |
||
68 | $("#reset").prop("disabled", false); |
||
69 | $("#search").val(watermark).addClass('watermark'); |
||
70 | $("#search").blur(function() { |
||
71 | if ($(this).val().length == 0) { |
||
72 | $(this).val(watermark).addClass('watermark'); |
||
73 | } |
||
74 | }); |
||
75 | $("#search").on('click keydown', function() { |
||
76 | if ($(this).val() == watermark) { |
||
77 | $(this).val('').removeClass('watermark'); |
||
78 | } |
||
79 | }); |
||
80 | $("#reset").click(function() { |
||
81 | $("#search").val(''); |
||
82 | $("#search").focus(); |
||
83 | }); |
||
84 | $("#search").focus(); |
||
85 | $("#search")[0].setSelectionRange(0, 0); |
||
86 | }); |
||
87 | $.widget("custom.catcomplete", $.ui.autocomplete, { |
||
88 | _create: function() { |
||
89 | this._super();
|
||
90 | this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); |
||
91 | }, |
||
92 | _renderMenu: function(ul, items) { |
||
93 | var rMenu = this, |
||
94 | currentCategory = "";
|
||
95 | rMenu.menu.bindings = $();
|
||
96 | $.each(items, function(index, item) { |
||
97 | var li;
|
||
98 | if (item.l !== noResult.l && item.category !== currentCategory) {
|
||
99 | ul.append("<li class=\"ui-autocomplete-category\">" + item.category + "</li>"); |
||
100 | currentCategory = item.category; |
||
101 | } |
||
102 | li = rMenu._renderItemData(ul, item); |
||
103 | if (item.category) {
|
||
104 | li.attr("aria-label", item.category + " : " + item.l); |
||
105 | li.attr("class", "resultItem"); |
||
106 | } else {
|
||
107 | li.attr("aria-label", item.l);
|
||
108 | li.attr("class", "resultItem"); |
||
109 | } |
||
110 | }); |
||
111 | }, |
||
112 | _renderItem: function(ul, item) { |
||
113 | var label = ""; |
||
114 | if (item.category === catModules) {
|
||
115 | label = getHighlightedText(item.l); |
||
116 | } else if (item.category === catPackages) { |
||
117 | label = (item.m) |
||
118 | ? getHighlightedText(item.m + "/" + item.l)
|
||
119 | : getHighlightedText(item.l); |
||
120 | } else if (item.category === catTypes) { |
||
121 | label = (item.p) |
||
122 | ? getHighlightedText(item.p + "." + item.l)
|
||
123 | : getHighlightedText(item.l); |
||
124 | } else if (item.category === catMembers) { |
||
125 | label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); |
||
126 | } else if (item.category === catSearchTags) { |
||
127 | label = getHighlightedText(item.l); |
||
128 | } else {
|
||
129 | label = item.l; |
||
130 | } |
||
131 | var li = $("<li/>").appendTo(ul); |
||
132 | var div = $("<div/>").appendTo(li); |
||
133 | if (item.category === catSearchTags) {
|
||
134 | if (item.d) {
|
||
135 | div.html(label + "<span class=\"searchTagHolderResult\"> (" + item.h + ")</span><br><span class=\"searchTagDescResult\">" |
||
136 | + item.d + "</span><br>");
|
||
137 | } else {
|
||
138 | div.html(label + "<span class=\"searchTagHolderResult\"> (" + item.h + ")</span>"); |
||
139 | } |
||
140 | } else {
|
||
141 | div.html(label); |
||
142 | } |
||
143 | return li;
|
||
144 | } |
||
145 | }); |
||
146 | $(function() { |
||
147 | $("#search").catcomplete({ |
||
148 | minLength: 1, |
||
149 | delay: 100, |
||
150 | source: function(request, response) { |
||
151 | var result = new Array(); |
||
152 | var presult = new Array(); |
||
153 | var tresult = new Array(); |
||
154 | var mresult = new Array(); |
||
155 | var tgresult = new Array(); |
||
156 | var secondaryresult = new Array(); |
||
157 | var displayCount = 0; |
||
158 | var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); |
||
159 | camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); |
||
160 | var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); |
||
161 | secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); |
||
162 | |||
163 | // Return the nested innermost name from the specified object
|
||
164 | function nestedName(e) { |
||
165 | return e.l.substring(e.l.lastIndexOf(".") + 1); |
||
166 | } |
||
167 | |||
168 | function concatResults(a1, a2) { |
||
169 | a1 = a1.concat(a2); |
||
170 | a2.length = 0;
|
||
171 | return a1;
|
||
172 | } |
||
173 | |||
174 | if (moduleSearchIndex) {
|
||
175 | var mdleCount = 0; |
||
176 | $.each(moduleSearchIndex, function(index, item) { |
||
177 | item.category = catModules; |
||
178 | if (exactMatcher.test(item.l)) {
|
||
179 | result.push(item); |
||
180 | mdleCount++; |
||
181 | } else if (camelCaseMatcher.test(item.l)) { |
||
182 | result.push(item); |
||
183 | } else if (secondaryMatcher.test(item.l)) { |
||
184 | secondaryresult.push(item); |
||
185 | } |
||
186 | }); |
||
187 | displayCount = mdleCount; |
||
188 | result = concatResults(result, secondaryresult); |
||
189 | } |
||
190 | if (packageSearchIndex) {
|
||
191 | var pCount = 0; |
||
192 | var pkg = ""; |
||
193 | $.each(packageSearchIndex, function(index, item) { |
||
194 | item.category = catPackages; |
||
195 | pkg = (item.m) |
||
196 | ? (item.m + "/" + item.l)
|
||
197 | : item.l; |
||
198 | if (exactMatcher.test(item.l)) {
|
||
199 | presult.push(item); |
||
200 | pCount++; |
||
201 | } else if (camelCaseMatcher.test(pkg)) { |
||
202 | presult.push(item); |
||
203 | } else if (secondaryMatcher.test(pkg)) { |
||
204 | secondaryresult.push(item); |
||
205 | } |
||
206 | }); |
||
207 | result = result.concat(concatResults(presult, secondaryresult)); |
||
208 | displayCount = (pCount > displayCount) ? pCount : displayCount; |
||
209 | } |
||
210 | if (typeSearchIndex) {
|
||
211 | var tCount = 0; |
||
212 | $.each(typeSearchIndex, function(index, item) { |
||
213 | item.category = catTypes; |
||
214 | var s = nestedName(item);
|
||
215 | if (exactMatcher.test(s)) {
|
||
216 | tresult.push(item); |
||
217 | tCount++; |
||
218 | } else if (camelCaseMatcher.test(s)) { |
||
219 | tresult.push(item); |
||
220 | } else if (secondaryMatcher.test(item.p + "." + item.l)) { |
||
221 | secondaryresult.push(item); |
||
222 | } |
||
223 | }); |
||
224 | result = result.concat(concatResults(tresult, secondaryresult)); |
||
225 | displayCount = (tCount > displayCount) ? tCount : displayCount; |
||
226 | } |
||
227 | if (memberSearchIndex) {
|
||
228 | var mCount = 0; |
||
229 | $.each(memberSearchIndex, function(index, item) { |
||
230 | item.category = catMembers; |
||
231 | var s = nestedName(item);
|
||
232 | if (exactMatcher.test(s)) {
|
||
233 | mresult.push(item); |
||
234 | mCount++; |
||
235 | } else if (camelCaseMatcher.test(s)) { |
||
236 | mresult.push(item); |
||
237 | } else if (secondaryMatcher.test(item.c + "." + item.l)) { |
||
238 | secondaryresult.push(item); |
||
239 | } |
||
240 | }); |
||
241 | result = result.concat(concatResults(mresult, secondaryresult)); |
||
242 | displayCount = (mCount > displayCount) ? mCount : displayCount; |
||
243 | } |
||
244 | if (tagSearchIndex) {
|
||
245 | var tgCount = 0; |
||
246 | $.each(tagSearchIndex, function(index, item) { |
||
247 | item.category = catSearchTags; |
||
248 | if (exactMatcher.test(item.l)) {
|
||
249 | tgresult.push(item); |
||
250 | tgCount++; |
||
251 | } else if (secondaryMatcher.test(item.l)) { |
||
252 | secondaryresult.push(item); |
||
253 | } |
||
254 | }); |
||
255 | result = result.concat(concatResults(tgresult, secondaryresult)); |
||
256 | displayCount = (tgCount > displayCount) ? tgCount : displayCount; |
||
257 | } |
||
258 | displayCount = (displayCount > 500) ? displayCount : 500; |
||
259 | var counter = function() { |
||
260 | var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; |
||
261 | var f = function(item) { |
||
262 | count[item.category] += 1;
|
||
263 | return (count[item.category] <= displayCount);
|
||
264 | }; |
||
265 | return f;
|
||
266 | }(); |
||
267 | response(result.filter(counter)); |
||
268 | }, |
||
269 | response: function(event, ui) { |
||
270 | if (!ui.content.length) {
|
||
271 | ui.content.push(noResult); |
||
272 | } else {
|
||
273 | $("#search").empty(); |
||
274 | } |
||
275 | }, |
||
276 | autoFocus: true, |
||
277 | position: {
|
||
278 | collision: "flip" |
||
279 | }, |
||
280 | select: function(event, ui) { |
||
281 | if (ui.item.l !== noResult.l) {
|
||
282 | var url = getURLPrefix(ui);
|
||
283 | if (ui.item.category === catModules) {
|
||
284 | if (useModuleDirectories) {
|
||
285 | url += "module-summary.html";
|
||
286 | } else {
|
||
287 | url = ui.item.l + "-summary.html";
|
||
288 | } |
||
289 | } else if (ui.item.category === catPackages) { |
||
290 | if (ui.item.url) {
|
||
291 | url = ui.item.url; |
||
292 | } else {
|
||
293 | url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; |
||
294 | } |
||
295 | } else if (ui.item.category === catTypes) { |
||
296 | if (ui.item.url) {
|
||
297 | url = ui.item.url; |
||
298 | } else if (ui.item.p === "<Unnamed>") { |
||
299 | url += ui.item.l + ".html";
|
||
300 | } else {
|
||
301 | url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; |
||
302 | } |
||
303 | } else if (ui.item.category === catMembers) { |
||
304 | if (ui.item.p === "<Unnamed>") { |
||
305 | url += ui.item.c + ".html" + "#"; |
||
306 | } else {
|
||
307 | url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; |
||
308 | } |
||
309 | if (ui.item.url) {
|
||
310 | url += ui.item.url; |
||
311 | } else {
|
||
312 | url += ui.item.l; |
||
313 | } |
||
314 | } else if (ui.item.category === catSearchTags) { |
||
315 | url += ui.item.u; |
||
316 | } |
||
317 | if (top !== window) {
|
||
318 | parent.classFrame.location = pathtoroot + url; |
||
319 | } else {
|
||
320 | window.location.href = pathtoroot + url; |
||
321 | } |
||
322 | $("#search").focus(); |
||
323 | } |
||
324 | } |
||
325 | }); |
||
326 | }); |