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) ?> extends <?cs else ?> & <?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) ?> super <?cs else ?> & <?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 ?><<?cs each:t=type.typeArguments ?><?cs call:type_link_impl(t, "true") ?><?cs 44 if:!last(t) ?>, <?cs /if ?><?cs 45 /each ?>><?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)?><<?cs 58 each:t=type.typeArguments?><?cs 59 call:type_link_impl(t, "true")?><?cs 60 if:!last(t) ?>, <?cs 61 /if ?><?cs 62 /each ?>><?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 ?> = <?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 ?><<?cs 298 /if ?><?cs var:param.name ?><?cs 299 if:param.isTypeParameter ?>><?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) ?> </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