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