1 <?cs # A link to a package ?><?cs
2 def:package_link(pkg) ?>
3   <a href="<?cs var:toroot ?><?cs var:pkg.link ?>"><?cs var:pkg.name ?></a><?cs
4 /def ?>
5 
6 
7 
8 <?cs # A link to a type, or not if it is a primitive type
9         link: whether to create a link at the top level, always creates links in
10               recursive invocations.
11               Overloaded version to support use of 'nav' parameter, which when true,
12               will not include the generics in the class name (good for sidenav lists)
13         Expects the following fields:
14             .name
15             .link
16             .isPrimitive
17             .superBounds.N.(more links)   (... super ... & ...)
18             .extendsBounds.N.(more links) (... extends ... & ...)
19             .typeArguments.N.(more links) (< ... >)
20 ?><?cs
21 def:type_link_impl(type, link) ?><?cs call:type_link_impl2(type, link, "false") ?><?cs /def ?><?cs
22 def:type_link_impl2(type, link, nav) ?><?cs
23   if:type.link && link=="true" ?><?cs
24     if:type.federated ?><a href="<?cs var:type.link ?>"><?cs
25       var:type.label ?></a><?cs
26     else ?><a href="<?cs var:toroot ?><?cs var:type.link ?>"><?cs var:type.label ?></a><?cs
27     /if ?><?cs
28   else ?><?cs var:type.label ?><?cs
29   /if ?><?cs
30   if:subcount(type.extendsBounds) ?><?cs
31       each:t=type.extendsBounds ?><?cs
32           if:first(t) ?>&nbsp;extends&nbsp;<?cs else ?>&nbsp;&amp;&nbsp;<?cs /if ?><?cs
33           call:type_link_impl(t, "true") ?><?cs
34       /each ?><?cs
35   /if ?><?cs
36   if:subcount(type.superBounds) ?><?cs
37       each:t=type.superBounds ?><?cs
38           if:first(t) ?>&nbsp;super&nbsp;<?cs else ?>&nbsp;&amp;&nbsp;<?cs /if ?><?cs
39           call:type_link_impl(t, "true") ?><?cs
40       /each ?><?cs
41   /if ?><?cs
42   if:subcount(type.typeArguments) && nav=="false"
43       ?>&lt;<?cs each:t=type.typeArguments ?><?cs call:type_link_impl(t, "true") ?><?cs
44           if:!last(t) ?>,&nbsp;<?cs /if ?><?cs
45       /each ?>&gt;<?cs
46   /if ?><?cs
47 /def ?>
48 
49 <?cs
50 def:simple_type_link(type)?><?cs
51   if:type.link?><?cs
52     if:type.federated ?><a href="<?cs var:type.link ?>"><?cs var:type.label ?></a><?cs
53     else ?><a href="<?cs var:toroot ?><?cs var:type.link ?>"><?cs var:type.label ?></a><?cs
54     /if?><?cs
55   else ?><?cs var:type.label ?><?cs
56   /if?><?cs
57   if:subcount(type.typeArguments)?>&lt;<?cs
58     each:t=type.typeArguments?><?cs
59       call:type_link_impl(t, "true")?><?cs
60       if:!last(t) ?>,&nbsp;<?cs
61       /if ?><?cs
62     /each ?>&gt;<?cs
63   /if ?><?cs
64 /def ?>
65 
66 <?cs def:class_name(type) ?><?cs call:type_link_impl(type, "false") ?><?cs /def ?>
67 <?cs def:type_link2(type,nav) ?><?cs call:type_link_impl2(type, "true", nav) ?><?cs /def ?>
68 <?cs def:type_link(type) ?><?cs call:type_link2(type, "false") ?><?cs /def ?>
69 
70 <?cs # a conditional link.
71       if the "condition" parameter evals to true then the link is displayed
72       otherwise only the text is displayed
73 ?><?cs
74 def:cond_link(text, root, path, condition) ?><?cs
75   if:condition ?><a href="<?cs var:root ?><?cs var:path ?>"><?cs /if ?><?cs var:text ?><?cs if:condition ?></a><?cs /if ?><?cs
76 /def ?>
77 
78 <?cs # A comma separated parameter list ?><?cs
79 def:parameter_list(params) ?><?cs
80   each:param = params ?><?cs
81       call:simple_type_link(param.type)?> <?cs
82       var:param.name ?><?cs
83       if: name(param)!=subcount(params)-1?>, <?cs /if ?><?cs
84   /each ?><?cs
85 /def ?>
86 
87 <?cs def:doc_root_override()
88   ?><?cs var:toroot ?><?cs
89 /def ?>
90 
91 <?cs # Print a list of tags (e.g. description text ?><?cs
92 def:tag_list(tags) ?><?cs
93   each:tag = tags ?><?cs
94       if:tag.name == "Text" ?><?cs var:tag.text?><?cs
95       elif:tag.kind == "@more" ?><p><?cs
96       elif:tag.kind == "@see" ?><code><a href="<?cs
97         if:!tag.federatedSite ?><?cs
98           var:toroot ?><?cs
99         /if ?><?cs var:tag.href ?>"><?cs var:tag.label ?></a></code><?cs
100       elif:tag.kind == "@linkplain" ?><a href="<?cs
101         if:!tag.federatedSite ?><?cs
102           var:toroot ?><?cs
103         /if ?><?cs var:tag.href ?>"><?cs var:tag.label ?></a></a><?cs
104       elif:tag.kind == "@seeHref" ?><a href="<?cs var:tag.href ?>"><?cs var:tag.label ?></a><?cs
105       elif:tag.kind == "@seeJustLabel" ?><?cs var:tag.label ?><?cs
106       elif:tag.kind == "@value" ?><code><a href="<?cs
107         if:!tag.federatedSite ?><?cs
108           var:toroot ?><?cs
109         /if ?><?cs var:tag.href ?>"><?cs var:tag.text ?></a></code><?cs
110       elif:tag.kind == "@code" ?><code><?cs var:tag.text ?></code><?cs
111       elif:tag.kind == "@samplecode" ?><pre><?cs var:tag.text ?></pre><?cs
112       elif:tag.name == "@sample" ?><pre><?cs var:tag.text ?></pre><?cs
113       elif:tag.name == "@include" ?><?cs var:tag.text ?><?cs
114       elif:tag.kind == "@docRoot" ?><?cs call:doc_root_override() ?><?cs
115       elif:tag.kind == "@sdkCurrent" ?><?cs var:sdk.current ?><?cs
116       elif:tag.kind == "@sdkCurrentVersion" ?><?cs var:sdk.version ?><?cs
117       elif:tag.kind == "@sdkCurrentRelId" ?><?cs var:sdk.rel.id ?><?cs
118       elif:tag.kind == "@sdkPlatformVersion" ?><?cs var:sdk.platform.version ?><?cs
119       elif:tag.kind == "@sdkPlatformApiLevel" ?><?cs var:sdk.platform.apiLevel ?><?cs
120       elif:tag.kind == "@sdkPlatformMajorMinor" ?><?cs var:sdk.platform.majorMinor ?><?cs
121       elif:tag.kind == "@sdkPlatformReleaseDate" ?><?cs var:sdk.platform.releaseDate ?><?cs
122       elif:tag.kind == "@sdkPlatformDeployableDate" ?><?cs var:sdk.platform.deployableDate ?><?cs
123       elif:tag.kind == "@adtZipVersion" ?><?cs var:adt.zip.version ?><?cs
124       elif:tag.kind == "@adtZipDownload" ?><?cs var:adt.zip.download ?><?cs
125       elif:tag.kind == "@adtZipBytes" ?><?cs var:adt.zip.bytes ?><?cs
126       elif:tag.kind == "@adtZipChecksum" ?><?cs var:adt.zip.checksum ?><?cs
127       elif:tag.kind == "@inheritDoc" ?><?cs # This is the case when @inheritDoc is in something
128                                               that does not inherit from anything?><?cs
129       elif:tag.kind == "@attr" ?><?cs
130       else ?>{<?cs var:tag.name?> <?cs var:tag.text ?>}<?cs
131       /if ?><?cs
132   /each ?><?cs
133 /def ?>
134 
135 <?cs # Print output for block tags that are not "standard" javadoc tags ?><?cs
136 def:block_tag_list(tags) ?><?cs
137   each:tag = tags ?><?cs
138       if:tag.kind == "@apiNote" ?>
139         <div class="jd-tagdata">
140           <h5 class="jd-tagtitle">API Note:</h5>
141           <ul class="nolist"><li><?cs call:tag_list(tag.commentTags) ?></li></ul>
142         </div><?cs
143       /if ?><?cs
144       if:tag.kind == "@implSpec" ?>
145         <div class="jd-tagdata">
146           <h5 class="jd-tagtitle">Implementation Requirements:</h5>
147           <ul class="nolist"><li><?cs call:tag_list(tag.commentTags) ?></li></ul>
148         </div><?cs
149       /if ?><?cs
150       if:tag.kind == "@implNote" ?>
151         <div class="jd-tagdata">
152           <h5 class="jd-tagtitle">Implementation Note:</h5>
153           <ul class="nolist"><li><?cs call:tag_list(tag.commentTags) ?></li></ul>
154         </div><?cs
155       /if ?><?cs
156   /each ?><?cs
157 /def ?>
158 
159 <?cs # Show the short-form description of something.  These come from shortDescr and deprecated ?><?cs
160 def:short_descr(obj) ?><?cs
161   if:subcount(obj.deprecated) ?><em><?cs
162     if:obj.deprecatedsince ?>
163       This <?cs var:obj.kind ?> was deprecated
164       in API level <?cs var:obj.deprecatedsince ?>.<?cs
165     else ?>
166       This <?cs var:obj.kind ?> is deprecated.<?cs
167     /if ?>
168     <?cs call:tag_list(obj.deprecated) ?></em><?cs
169   else ?><?cs call:tag_list(obj.shortDescr) ?><?cs
170   if:subcount(obj.annotationdocumentation)?><?cs
171     each:annodoc=obj.annotationdocumentation ?>
172     <div><?cs var:annodoc.text?></div><?cs
173     /each?><?cs /if?><?cs
174   /if ?><?cs
175 /def ?>
176 
177 
178 <?cs
179 # Show a list of annotations associated with obj
180 #
181 # pre is an HTML string to start the list.
182 # between is an HTML string to include between each successive element.
183 # post is an HTML string to end the list.
184 # for example, call:show_annotations_list(cl, "<p>Annotations: ", "<br />", "</p>")
185 # ?><?cs
186 def:show_annotations_list(obj, pre, between, post) ?><?cs
187   each:anno = obj.showAnnotations ?><?cs
188     if:first(anno) ?><?cs
189       var:pre ?><?cs
190     /if ?>
191     @<?cs var:anno.type.label ?>(<?cs
192     each:elem = anno.elementValues ?><?cs
193       var:elem.name ?>&nbsp;=&nbsp;<?cs
194       var:elem.value ?><?cs
195       if:last(elem) == 0 ?>, <?cs
196       /if ?><?cs
197     /each ?>)<?cs
198     if:last(anno) == 0 ?><?cs
199       var:between ?><?cs
200     /if ?><?cs
201     if:last(anno) ?><?cs
202       var:post ?><?cs
203     /if ?><?cs
204   /each ?><?cs
205 /def ?>
206 
207 <?cs # Show a comma-separated list of annotations associated with obj ?><?cs
208 def:show_simple_annotations_list(obj, pre, post) ?><?cs
209   call:show_annotations_list(obj, pre, ", ", post) ?><?cs
210 /def ?>
211 
212 <?cs # Show the red box with the deprecated warning ?><?cs
213 def:deprecated_warning(obj) ?><?cs
214   if:subcount(obj.deprecated) ?><p>
215   <p class="caution"><strong><?cs
216     if:obj.deprecatedsince ?>
217       This <?cs var:obj.kind ?> was deprecated
218       in API level <?cs var:obj.deprecatedsince ?>.<?cs
219     else ?>
220       This <?cs var:obj.kind ?> is deprecated.<?cs
221     /if ?></strong><br/>
222     <?cs call:tag_list(obj.deprecated) ?>
223   </p><?cs
224   /if ?><?cs
225 /def ?>
226 
227 <?cs # print the See Also: section ?><?cs
228 def:see_also_tags(also) ?><?cs
229   if:subcount(also) ?>
230   <div>
231       <p><b>See also:</b></p>
232       <ul class="nolist"><?cs
233         each:tag=also ?><li><?cs
234             if:tag.kind == "@see" ?><code><a href="<?cs var:toroot ?><?cs var:tag.href ?>"><?cs
235                     var:tag.label ?></a></code><?cs
236             elif:tag.kind == "@seeHref" ?><a href="<?cs var:tag.href ?>"><?cs var:tag.label ?></a><?cs
237             elif:tag.kind == "@seeJustLabel" ?><?cs var:tag.label ?><?cs
238             else ?>[ERROR: Unknown @see kind]<?cs
239             /if ?></li><?cs
240         /each ?>
241       </ul>
242   </div><?cs
243   /if ?>
244 <?cs /def ?>
245 
246 <?cs # print the API Level ?><?cs
247 def:since_tags(obj) ?><?cs
248 if:reference.apilevels && obj.since ?>
249   Added in <a href="<?cs var:toroot ?>guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level <?cs var:obj.since ?></a><?cs
250 /if ?><?cs
251 /def ?>
252 <?cs def:federated_refs(obj) ?>
253   <?cs if:subcount(obj.federated) ?>
254     <div>
255     Also:
256     <?cs each:federated=obj.federated ?>
257       <a href="<?cs var:federated.url ?>"><?cs var:federated.name ?></a><?cs
258       if:!last(federated) ?>,<?cs /if ?>
259     <?cs /each ?>
260     </div>
261   <?cs /if ?>
262 <?cs /def ?>
263 <?cs
264 #
265 # Print the long-form description for something.
266 # Uses the following fields: deprecated descr seeAlso since
267 #
268 ?><?cs
269 def:description(obj) ?><?cs
270   call:deprecated_warning(obj) ?>
271   <p><?cs call:tag_list(obj.descr) ?></p><?cs
272   if:subcount(obj.annotationdocumentation)?><?cs
273     each:annodoc=obj.annotationdocumentation ?>
274     <div style="display:block"><?cs var:annodoc.text?></div><?cs
275     /each?><?cs /if?><?cs
276   if:subcount(obj.attrRefs) ?>
277       <p><b>Related XML Attributes:</b></p>
278       <ul class="nolist"><?cs
279         each:attr=obj.attrRefs ?>
280             <li><a href="<?cs var:toroot ?><?cs var:attr.href ?>"><?cs var:attr.name ?></a></li><?cs
281         /each ?>
282       </ul><?cs
283   /if ?><?cs
284   if:subcount(obj.blockTags) ?>
285     <?cs call:block_tag_list(obj.blockTags) ?><?cs
286   /if ?><?cs
287   #
288   # Print the @param tags
289   #
290   ?><?cs
291   if:subcount(obj.paramTags) ?>
292     <table class="responsive">
293     <tr><th colspan=2>Parameters</th></tr><?cs
294     each:param=obj.paramTags ?>
295       <tr>
296         <td><code><?cs
297           if:param.isTypeParameter ?>&lt;<?cs
298           /if ?><?cs var:param.name ?><?cs
299           if:param.isTypeParameter ?>&gt;<?cs
300           /if ?></code></td>
301         <td width="100%">
302           <code><?cs var:param.kind ?></code><?cs
303           if:string.find(param.comment.0.text, "<!--") != 0
304             ?>:<?cs # Do not print if param comment is an HTML comment ?><?cs
305           /if ?>
306           <?cs call:tag_list(param.comment) ?></td>
307       </tr><?cs
308     /each ?>
309     </table><?cs
310   /if ?><?cs
311   #
312   # Print the @return value
313   #
314   ?><?cs
315   if:subcount(obj.returns) ?>
316     <table class="responsive">
317       <tr><th colspan=2>Returns</th></tr>
318       <tr>
319         <td><code><?cs call:type_link(method.returnType) ?></code></td>
320         <td width="100%"><?cs call:tag_list(obj.returns) ?></td>
321       </tr>
322     </table><?cs
323   #
324   # If no return tag found, but there is a return type not 'void', print it
325   #
326   ?><?cs
327   elif:subcount(method.returnType) && method.returnType.label != 'void' ?>
328     <table class="responsive">
329       <tr><th colspan=2>Returns</th></tr>
330       <tr>
331         <td><code><?cs call:type_link(method.returnType) ?></code></td>
332         <td width="100%"><!-- no returns description in source --></td>
333       </tr>
334     </table><?cs
335   /if ?><?cs
336   #
337   # Print the throwables
338   #
339   ?><?cs
340   if:subcount(obj.throws) ?>
341       <table class="responsive">
342       <tr><th colspan=2>Throws</th></tr><?cs
343       each:tag=obj.throws ?>
344         <tr>
345           <td><code><?cs call:type_link(tag.type) ?></code></td>
346           <td width="100%"><?cs call:tag_list(tag.comment) ?></td>
347         </tr><?cs
348       /each ?>
349       </table>
350   <?cs
351   /if ?><?cs
352   call:see_also_tags(obj.seeAlso) ?><?cs
353 /def ?>
354 
355 <?cs # A table of links to classes with descriptions, as in a package file or the nested classes ?><?cs
356 def:class_link_table(classes) ?><?cs
357   set:count = #1 ?>
358   <table class="jd-sumtable-expando"><?cs
359       each:cl=classes ?>
360         <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.type.since ?>" >
361               <td><?cs call:type_link(cl.type) ?></td>
362               <td width="100%"><?cs call:short_descr(cl) ?>&nbsp;</td>
363           </tr><?cs set:count = count + #1 ?><?cs
364       /each ?>
365   </table><?cs
366 /def ?>
367 
368 <?cs # A list of links to classes, for use in the side navigation of classes when viewing a package (panel nav) ?><?cs
369 def:class_link_list(label, classes) ?><?cs
370   if:subcount(classes) ?>
371     <li><h2><?cs var:label ?></h2>
372       <ul><?cs
373       each:cl=classes ?>
374         <li class="api apilevel-<?cs var:cl.type.since ?>"><?cs call:type_link2(cl.type,"true") ?></li><?cs
375       /each ?>
376       </ul>
377     </li><?cs
378   /if ?><?cs
379 /def ?>
380 
381 <?cs # A list of links to classes, for use in the side navigation of classes when viewing a class (panel nav) ?><?cs
382 def:list(label, classes) ?><?cs
383   if:subcount(classes) ?>
384     <li><h2><?cs var:label ?></h2>
385       <ul><?cs
386       each:cl=classes ?>
387           <li class="<?cs if:class.name == cl.label?>selected <?cs /if ?>api apilevel-<?cs var:cl.since ?>"><?cs call:type_link2(cl,"true") ?></li><?cs
388       /each ?>
389       </ul>
390     </li><?cs
391   /if ?><?cs
392 /def ?>
393 
394 <?cs # A list of links to packages, for use in the side navigation of packages (panel nav) ?><?cs
395 def:package_link_list(packages) ?><?cs
396   each:pkg=packages ?>
397     <li class="<?cs if:(class.package.name == pkg.name) || (package.name == pkg.name)?>selected <?cs /if ?>api apilevel-<?cs var:pkg.since ?>"><?cs call:package_link(pkg) ?></li><?cs
398   /each ?><?cs
399 /def ?>
400 
401 <?cs # An expando trigger ?><?cs
402 def:expando_trigger(id, default) ?>
403   <a href="#" onclick="return toggleInherited(this, null)" id="<?cs var:id ?>" class="jd-expando-trigger closed"
404           ><img height="34" id="<?cs var:id ?>-trigger"
405           src="<?cs var:toroot ?>assets/images/styles/disclosure_<?cs
406             if:default == 'closed' ?>down<?cs else ?>up<?cs /if ?>.png"
407           class="jd-expando-trigger-img" /></a><?cs
408 /def ?>
409 
410 <?cs # An expandable list of classes ?><?cs
411 def:expandable_class_list(id, classes, default) ?>
412   <div id="<?cs var:id ?>">
413       <div id="<?cs var:id ?>-list"
414               class="jd-inheritedlinks"
415               <?cs if:default != "list" ?>style="display: none;"<?cs /if ?>
416               >
417           <?cs if:subcount(classes) <= #20 ?>
418             <?cs each:cl=classes ?>
419               <?cs call:type_link(cl.type) ?><?cs if:!last(cl) ?>,<?cs /if ?>
420             <?cs /each ?>
421           <?cs else ?>
422             <?cs set:leftovers = subcount(classes) - #15 ?>
423             <?cs loop:i = #0, #14, #1 ?>
424               <?cs with:cl=classes[i] ?>
425                 <?cs call:type_link(cl.type) ?>,
426               <?cs /with ?>
427               <?cs  if:(#i == #14) ?>and
428                 <a href="#" onclick="return toggleInherited(document.getElementById('<?cs
429                    var:id ?>', null))"><?cs var:leftovers ?> others.</a>
430               <?cs /if ?>
431             <?cs /loop ?>
432           <?cs /if ?>
433       </div>
434       <div id="<?cs var:id ?>-summary"
435               <?cs if:default != "summary" ?>style="display: none;"<?cs /if ?>
436               ><?cs
437           call:class_link_table(classes) ?>
438       </div>
439   </div><?cs
440 /def ?>
441 
442 <?cs include:"components.cs" ?>
443