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) ?> extends <?cs else ?> & <?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) ?> super <?cs else ?> & <?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 ?><<?cs each:t=type.typeArguments ?><?cs call:type_link_impl(t, "true") ?><?cs 50 if:!last(t) ?>, <?cs /if ?><?cs 51 /each ?>><?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)?><<?cs 63 each:t=type.typeArguments?><?cs 64 call:type_link_impl(t, "true")?><?cs 65 if:!last(t) ?>, <?cs 66 /if ?><?cs 67 /each ?>><?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 ?> = <?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 ?><<?cs 324 /if ?><?cs var:param.name ?><?cs 325 if:param.isTypeParameter ?>><?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) ?> </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