TMP:site (Nach Korrektur an thymeskin neu generiert??)
[website] / dist / http-resources / 2.0.0 / testapidocs / search.js
1 /*
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 });