Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Side by Side Diff: pkg/analysis_server/lib/src/status/pages.dart

Issue 2933753002: Run the sorter to reduce code churn (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:convert'; 6 import 'dart:convert';
7 import 'dart:io'; 7 import 'dart:io';
8 8
9 import 'package:intl/intl.dart'; 9 import 'package:intl/intl.dart';
10 10
11 /// Contains a collection of Pages. 11 final NumberFormat numberFormat = new NumberFormat.decimalPattern();
12 abstract class Site {
13 final String title;
14 List<Page> pages = [];
15 List<Page> secondaryPages = [];
16 12
17 Site(this.title); 13 String escape(String text) => text == null ? '' : HTML_ESCAPE.convert(text);
18 14
19 String get customCss => ''; 15 String printInteger(int value) => numberFormat.format(value);
20 16
21 Future<Null> handleGetRequest(HttpRequest request) async { 17 String printMilliseconds(num value) => '${numberFormat.format(value)} ms';
22 try {
23 String path = request.uri.path;
24 18
25 if (path == '/') { 19 String printPercentage(num value) => '${(value * 100).toStringAsFixed(1)}%';
26 respondRedirect(request, pages.first.path);
27 return;
28 }
29
30 for (Page page in pages) {
31 if (page.path == path) {
32 HttpResponse response = request.response;
33 response.headers.contentType = ContentType.HTML;
34 response.write(await page.generate(request.uri.queryParameters));
35 response.close();
36 return;
37 }
38 }
39
40 for (Page page in secondaryPages) {
41 if (page.path == path) {
42 HttpResponse response = request.response;
43 response.headers.contentType = ContentType.HTML;
44 response.write(await page.generate(request.uri.queryParameters));
45 response.close();
46 return;
47 }
48 }
49
50 await respond(request, createUnknownPage(path), HttpStatus.NOT_FOUND);
51 } catch (e, st) {
52 try {
53 await respond(request, createExceptionPage('$e', st),
54 HttpStatus.INTERNAL_SERVER_ERROR);
55 } catch (e, st) {
56 HttpResponse response = request.response;
57 response.statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
58 response.headers.contentType = ContentType.TEXT;
59 response.write('$e\n\n$st');
60 response.close();
61 }
62 }
63 }
64
65 Page createUnknownPage(String unknownPath);
66
67 Page createExceptionPage(String message, StackTrace trace);
68
69 Future<Null> respond(HttpRequest request, Page page,
70 [int code = HttpStatus.OK]) async {
71 HttpResponse response = request.response;
72 response.statusCode = code;
73 response.headers.contentType = ContentType.HTML;
74 response.write(await page.generate(request.uri.queryParameters));
75 response.close();
76 }
77
78 void respondRedirect(HttpRequest request, String pathFragment) {
79 HttpResponse response = request.response;
80 response.statusCode = HttpStatus.MOVED_TEMPORARILY;
81 response.redirect(request.uri.resolve(pathFragment));
82 }
83 }
84 20
85 /// An entity that knows how to serve itself over http. 21 /// An entity that knows how to serve itself over http.
86 abstract class Page { 22 abstract class Page {
87 final StringBuffer buf = new StringBuffer(); 23 final StringBuffer buf = new StringBuffer();
88 24
89 final String id; 25 final String id;
90 final String title; 26 final String title;
91 final String description; 27 final String description;
92 28
93 Page(this.id, this.title, {this.description}); 29 Page(this.id, this.title, {this.description});
94 30
95 String get path => '/$id'; 31 String get path => '/$id';
96 32
33 Future<Null> asyncDiv(void gen(), {String classes}) async {
34 if (classes != null) {
35 buf.writeln('<div class="$classes">');
36 } else {
37 buf.writeln('<div>');
38 }
39 await gen();
40 buf.writeln('</div>');
41 }
42
43 void blankslate(String str) {
44 div(() => buf.writeln(str), classes: 'blankslate');
45 }
46
47 void div(void gen(), {String classes}) {
48 if (classes != null) {
49 buf.writeln('<div class="$classes">');
50 } else {
51 buf.writeln('<div>');
52 }
53 gen();
54 buf.writeln('</div>');
55 }
56
97 Future<String> generate(Map<String, String> params) async { 57 Future<String> generate(Map<String, String> params) async {
98 buf.clear(); 58 buf.clear();
99 await generatePage(params); 59 await generatePage(params);
100 return buf.toString(); 60 return buf.toString();
101 } 61 }
102 62
103 void generatePage(Map<String, String> params); 63 void generatePage(Map<String, String> params);
104 64
105 void h1(String text, {String classes}) { 65 void h1(String text, {String classes}) {
106 if (classes != null) { 66 if (classes != null) {
107 buf.writeln('<h1 class="$classes">${escape(text)}</h1>'); 67 buf.writeln('<h1 class="$classes">${escape(text)}</h1>');
108 } else { 68 } else {
109 buf.writeln('<h1>${escape(text)}</h1>'); 69 buf.writeln('<h1>${escape(text)}</h1>');
110 } 70 }
111 } 71 }
112 72
113 void h2(String text) { 73 void h2(String text) {
114 buf.writeln('<h2>${escape(text)}</h2>'); 74 buf.writeln('<h2>${escape(text)}</h2>');
115 } 75 }
116 76
117 void h3(String text, {bool raw: false}) { 77 void h3(String text, {bool raw: false}) {
118 buf.writeln('<h3>${raw ? text : escape(text)}</h3>'); 78 buf.writeln('<h3>${raw ? text : escape(text)}</h3>');
119 } 79 }
120 80
121 void h4(String text, {bool raw: false}) { 81 void h4(String text, {bool raw: false}) {
122 buf.writeln('<h4>${raw ? text : escape(text)}</h4>'); 82 buf.writeln('<h4>${raw ? text : escape(text)}</h4>');
123 } 83 }
124 84
125 void ul<T>(Iterable<T> items, void gen(T item), {String classes}) {
126 buf.writeln('<ul${classes == null ? '' : ' class=$classes'}>');
127 for (T item in items) {
128 buf.write('<li>');
129 gen(item);
130 buf.write('</li>');
131 }
132 buf.writeln('</ul>');
133 }
134
135 void inputList<T>(Iterable<T> items, void gen(T item)) { 85 void inputList<T>(Iterable<T> items, void gen(T item)) {
136 buf.writeln('<select size="8" style="width: 100%">'); 86 buf.writeln('<select size="8" style="width: 100%">');
137 for (T item in items) { 87 for (T item in items) {
138 buf.write('<option>'); 88 buf.write('<option>');
139 gen(item); 89 gen(item);
140 buf.write('</option>'); 90 buf.write('</option>');
141 } 91 }
142 buf.writeln('</select>'); 92 buf.writeln('</select>');
143 } 93 }
144 94
145 Future<Null> asyncDiv(void gen(), {String classes}) async { 95 bool isCurrentPage(String pathToTest) => path == pathToTest;
146 if (classes != null) {
147 buf.writeln('<div class="$classes">');
148 } else {
149 buf.writeln('<div>');
150 }
151 await gen();
152 buf.writeln('</div>');
153 }
154
155 void div(void gen(), {String classes}) {
156 if (classes != null) {
157 buf.writeln('<div class="$classes">');
158 } else {
159 buf.writeln('<div>');
160 }
161 gen();
162 buf.writeln('</div>');
163 }
164 96
165 void p(String text, {String style, bool raw: false, String classes}) { 97 void p(String text, {String style, bool raw: false, String classes}) {
166 String c = classes == null ? '' : ' class="$classes"'; 98 String c = classes == null ? '' : ' class="$classes"';
167 99
168 if (style != null) { 100 if (style != null) {
169 buf.writeln('<p$c style="$style">${raw ? text : escape(text)}</p>'); 101 buf.writeln('<p$c style="$style">${raw ? text : escape(text)}</p>');
170 } else { 102 } else {
171 buf.writeln('<p$c>${raw ? text : escape(text)}</p>'); 103 buf.writeln('<p$c>${raw ? text : escape(text)}</p>');
172 } 104 }
173 } 105 }
174 106
175 void pre(void gen(), {String classes}) { 107 void pre(void gen(), {String classes}) {
176 if (classes != null) { 108 if (classes != null) {
177 buf.write('<pre class="$classes">'); 109 buf.write('<pre class="$classes">');
178 } else { 110 } else {
179 buf.write('<pre>'); 111 buf.write('<pre>');
180 } 112 }
181 gen(); 113 gen();
182 buf.writeln('</pre>'); 114 buf.writeln('</pre>');
183 } 115 }
184 116
185 void blankslate(String str) { 117 void ul<T>(Iterable<T> items, void gen(T item), {String classes}) {
186 div(() => buf.writeln(str), classes: 'blankslate'); 118 buf.writeln('<ul${classes == null ? '' : ' class=$classes'}>');
119 for (T item in items) {
120 buf.write('<li>');
121 gen(item);
122 buf.write('</li>');
123 }
124 buf.writeln('</ul>');
125 }
126 }
127
128 /// Contains a collection of Pages.
129 abstract class Site {
130 final String title;
131 List<Page> pages = [];
132 List<Page> secondaryPages = [];
133
134 Site(this.title);
135
136 String get customCss => '';
137
138 Page createExceptionPage(String message, StackTrace trace);
139
140 Page createUnknownPage(String unknownPath);
141
142 Future<Null> handleGetRequest(HttpRequest request) async {
143 try {
144 String path = request.uri.path;
145
146 if (path == '/') {
147 respondRedirect(request, pages.first.path);
148 return;
149 }
150
151 for (Page page in pages) {
152 if (page.path == path) {
153 HttpResponse response = request.response;
154 response.headers.contentType = ContentType.HTML;
155 response.write(await page.generate(request.uri.queryParameters));
156 response.close();
157 return;
158 }
159 }
160
161 for (Page page in secondaryPages) {
162 if (page.path == path) {
163 HttpResponse response = request.response;
164 response.headers.contentType = ContentType.HTML;
165 response.write(await page.generate(request.uri.queryParameters));
166 response.close();
167 return;
168 }
169 }
170
171 await respond(request, createUnknownPage(path), HttpStatus.NOT_FOUND);
172 } catch (e, st) {
173 try {
174 await respond(request, createExceptionPage('$e', st),
175 HttpStatus.INTERNAL_SERVER_ERROR);
176 } catch (e, st) {
177 HttpResponse response = request.response;
178 response.statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
179 response.headers.contentType = ContentType.TEXT;
180 response.write('$e\n\n$st');
181 response.close();
182 }
183 }
187 } 184 }
188 185
189 bool isCurrentPage(String pathToTest) => path == pathToTest; 186 Future<Null> respond(HttpRequest request, Page page,
187 [int code = HttpStatus.OK]) async {
188 HttpResponse response = request.response;
189 response.statusCode = code;
190 response.headers.contentType = ContentType.HTML;
191 response.write(await page.generate(request.uri.queryParameters));
192 response.close();
193 }
194
195 void respondRedirect(HttpRequest request, String pathFragment) {
196 HttpResponse response = request.response;
197 response.statusCode = HttpStatus.MOVED_TEMPORARILY;
198 response.redirect(request.uri.resolve(pathFragment));
199 }
190 } 200 }
191
192 String escape(String text) => text == null ? '' : HTML_ESCAPE.convert(text);
193
194 final NumberFormat numberFormat = new NumberFormat.decimalPattern();
195
196 String printInteger(int value) => numberFormat.format(value);
197
198 String printMilliseconds(num value) => '${numberFormat.format(value)} ms';
199
200 String printPercentage(num value) => '${(value * 100).toStringAsFixed(1)}%';
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/status/diagnostics.dart ('k') | pkg/analyzer/lib/instrumentation/file_instrumentation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698