| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * Code for displaying the API as HTML. This is used both for generating a | 6 * Code for displaying the API as HTML. This is used both for generating a |
| 7 * full description of the API as a web page, and for generating doc comments | 7 * full description of the API as a web page, and for generating doc comments |
| 8 * in generated code. | 8 * in generated code. |
| 9 */ | 9 */ |
| 10 library to.html; | 10 library to.html; |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 a { | 109 a { |
| 110 text-decoration: none; | 110 text-decoration: none; |
| 111 } | 111 } |
| 112 | 112 |
| 113 a:focus, a:hover { | 113 a:focus, a:hover { |
| 114 text-decoration: underline; | 114 text-decoration: underline; |
| 115 } | 115 } |
| 116 | 116 |
| 117 /* Styles for index */ | 117 /* Styles for index */ |
| 118 | 118 |
| 119 .subindex { | |
| 120 } | |
| 121 | |
| 122 .subindex ul { | 119 .subindex ul { |
| 123 padding-left: 0; | 120 padding-left: 0; |
| 124 margin-left: 0; | 121 margin-left: 0; |
| 125 | 122 |
| 126 -webkit-margin-before: 0; | 123 -webkit-margin-before: 0; |
| 127 -webkit-margin-start: 0; | 124 -webkit-margin-start: 0; |
| 128 -webkit-padding-start: 0; | 125 -webkit-padding-start: 0; |
| 129 | 126 |
| 130 list-style-type: none; | 127 list-style-type: none; |
| 131 } | 128 } |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 } | 186 } |
| 190 | 187 |
| 191 void h3(void callback()) => element('h3', {}, callback); | 188 void h3(void callback()) => element('h3', {}, callback); |
| 192 void h4(void callback()) => element('h4', {}, callback); | 189 void h4(void callback()) => element('h4', {}, callback); |
| 193 void h5(void callback()) => element('h5', {}, callback); | 190 void h5(void callback()) => element('h5', {}, callback); |
| 194 void hangingIndent(void callback()) => | 191 void hangingIndent(void callback()) => |
| 195 element('div', {'class': 'hangingIndent'}, callback); | 192 element('div', {'class': 'hangingIndent'}, callback); |
| 196 void head(void callback()) => element('head', {}, callback); | 193 void head(void callback()) => element('head', {}, callback); |
| 197 void html(void callback()) => element('html', {}, callback); | 194 void html(void callback()) => element('html', {}, callback); |
| 198 void i(void callback()) => element('i', {}, callback); | 195 void i(void callback()) => element('i', {}, callback); |
| 196 void li(void callback()) => element('li', {}, callback); |
| 199 void link(String id, void callback()) { | 197 void link(String id, void callback()) { |
| 200 element('a', {'href': '#$id'}, callback); | 198 element('a', {'href': '#$id'}, callback); |
| 201 } | 199 } |
| 202 | 200 |
| 203 void p(void callback()) => element('p', {}, callback); | 201 void p(void callback()) => element('p', {}, callback); |
| 204 void pre(void callback()) => element('pre', {}, callback); | 202 void pre(void callback()) => element('pre', {}, callback); |
| 205 void title(void callback()) => element('title', {}, callback); | 203 void title(void callback()) => element('title', {}, callback); |
| 206 void tt(void callback()) => element('tt', {}, callback); | 204 void tt(void callback()) => element('tt', {}, callback); |
| 205 void ul(void callback()) => element('ul', {}, callback); |
| 207 } | 206 } |
| 208 | 207 |
| 209 /** | 208 /** |
| 210 * Visitor that generates HTML documentation of the API. | 209 * Visitor that generates HTML documentation of the API. |
| 211 */ | 210 */ |
| 212 class ToHtmlVisitor extends HierarchicalApiVisitor | 211 class ToHtmlVisitor extends HierarchicalApiVisitor |
| 213 with HtmlMixin, HtmlGenerator { | 212 with HtmlMixin, HtmlGenerator { |
| 214 /** | 213 /** |
| 215 * Set of types defined in the API. | 214 * Set of types defined in the API. |
| 216 */ | 215 */ |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 generateNotificationsIndex(domain.notifications); | 262 generateNotificationsIndex(domain.notifications); |
| 264 } | 263 } |
| 265 }); | 264 }); |
| 266 } else if (domain.notifications.length > 0) { | 265 } else if (domain.notifications.length > 0) { |
| 267 element('div', {'class': 'subindex'}, () { | 266 element('div', {'class': 'subindex'}, () { |
| 268 generateNotificationsIndex(domain.notifications); | 267 generateNotificationsIndex(domain.notifications); |
| 269 }); | 268 }); |
| 270 } | 269 } |
| 271 } | 270 } |
| 272 | 271 |
| 272 void generateTableOfContents() { |
| 273 ul(() { |
| 274 writeln(); |
| 275 |
| 276 for (var domain in api.domains.where((domain) => !domain.experimental)) { |
| 277 write(' '); |
| 278 li(() { |
| 279 link('domain_${domain.name}', () { |
| 280 write(_toTitleCase(domain.name)); |
| 281 }); |
| 282 }); |
| 283 writeln(); |
| 284 } |
| 285 }); |
| 286 } |
| 287 |
| 273 void generateIndex() { | 288 void generateIndex() { |
| 274 h3(() => write('Domains')); | 289 h3(() => write('Domains')); |
| 275 for (var domain in api.domains) { | 290 for (var domain in api.domains) { |
| 276 if (domain.experimental || | 291 if (domain.experimental || |
| 277 (domain.requests.length == 0 && domain.notifications == 0)) { | 292 (domain.requests.length == 0 && domain.notifications == 0)) { |
| 278 continue; | 293 continue; |
| 279 } | 294 } |
| 280 generateDomainIndex(domain); | 295 generateDomainIndex(domain); |
| 281 } | 296 } |
| 282 | 297 |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 break; | 433 break; |
| 419 case 'refactorings': | 434 case 'refactorings': |
| 420 visitRefactorings(api.refactorings); | 435 visitRefactorings(api.refactorings); |
| 421 break; | 436 break; |
| 422 case 'types': | 437 case 'types': |
| 423 visitTypes(api.types); | 438 visitTypes(api.types); |
| 424 break; | 439 break; |
| 425 case 'version': | 440 case 'version': |
| 426 translateHtml(node, squashParagraphs: squashParagraphs); | 441 translateHtml(node, squashParagraphs: squashParagraphs); |
| 427 break; | 442 break; |
| 443 case 'toc': |
| 444 generateTableOfContents(); |
| 445 break; |
| 428 case 'index': | 446 case 'index': |
| 429 generateIndex(); | 447 generateIndex(); |
| 430 break; | 448 break; |
| 431 default: | 449 default: |
| 432 if (!specialElements.contains(node.localName)) { | 450 if (!specialElements.contains(node.localName)) { |
| 433 element(node.localName, node.attributes, () { | 451 element(node.localName, node.attributes, () { |
| 434 translateHtml(node, squashParagraphs: squashParagraphs); | 452 translateHtml(node, squashParagraphs: squashParagraphs); |
| 435 }); | 453 }); |
| 436 } | 454 } |
| 437 } | 455 } |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 bool verticalBarNeeded = false; | 780 bool verticalBarNeeded = false; |
| 763 for (TypeDecl choice in typeUnion.choices) { | 781 for (TypeDecl choice in typeUnion.choices) { |
| 764 if (verticalBarNeeded) { | 782 if (verticalBarNeeded) { |
| 765 write(' | '); | 783 write(' | '); |
| 766 } | 784 } |
| 767 visitTypeDecl(choice); | 785 visitTypeDecl(choice); |
| 768 verticalBarNeeded = true; | 786 verticalBarNeeded = true; |
| 769 } | 787 } |
| 770 } | 788 } |
| 771 } | 789 } |
| 790 |
| 791 String _toTitleCase(String str) { |
| 792 if (str.isEmpty) return str; |
| 793 return str.substring(0, 1).toUpperCase() + str.substring(1); |
| 794 } |
| OLD | NEW |