Browse Source

Include js/css files into static folder (#12983)

* Include js/css files

Signed-off-by: Chun Lin Yang <clyang@cn.ibm.com>

* Append version to file

Signed-off-by: Chun Lin Yang <clyang@cn.ibm.com>

* ignore assets.gen.go in code coverage

Signed-off-by: Chun Lin Yang <clyang@cn.ibm.com>

* remove assets.gen.go from codecov test

Signed-off-by: clyang82 <clyang@cn.ibm.com>

* remove skipped test from .cov file

Signed-off-by: Chun Lin Yang <clyang@cn.ibm.com>

* fix check chell issue

Signed-off-by: Chun Lin Yang <clyang@cn.ibm.com>

* fix shell check issue

Signed-off-by: Chun Lin Yang <clyang@cn.ibm.com>
Chunlin Yang 6 months ago
parent
commit
4e8618d885
36 changed files with 4081 additions and 4261 deletions
  1. 0
    1
      .codecov.yml
  2. 10
    0
      bin/codecov.sh
  3. 4
    0
      codecov.skip
  4. 0
    3172
      pkg/ctrlz/assets.gen.go
  5. 3122
    0
      pkg/ctrlz/assets/assets.gen.go
  6. 17
    0
      pkg/ctrlz/assets/assets.go
  7. 7
    0
      pkg/ctrlz/assets/static/css/bootstrap-4.0.0.min.css
  8. 0
    0
      pkg/ctrlz/assets/static/css/dark_syntax-1.14.0.css
  9. 5
    0
      pkg/ctrlz/assets/static/css/fontawesome-all-5.0.6.css
  10. 672
    0
      pkg/ctrlz/assets/static/css/fonts.css
  11. 7
    0
      pkg/ctrlz/assets/static/js/bootstrap-4.0.0.min.js
  12. 7
    0
      pkg/ctrlz/assets/static/js/clipboard-1.7.1.min.js
  13. 4
    0
      pkg/ctrlz/assets/static/js/jquery-3.2.1.slim.min.js
  14. 5
    0
      pkg/ctrlz/assets/static/js/popper-1.12.9.min.js
  15. 0
    0
      pkg/ctrlz/assets/static/js/prism-1.14.0.min.js
  16. 0
    870
      pkg/ctrlz/assets/static/js/prism.js
  17. 9
    9
      pkg/ctrlz/assets/templates/layouts/base.html
  18. 7
    8
      pkg/ctrlz/ctrlz.go
  19. 4
    3
      pkg/ctrlz/home.go
  20. 2
    1
      pkg/ctrlz/topics/args.go
  21. 148
    151
      pkg/ctrlz/topics/assets/assets.gen.go
  22. 2
    2
      pkg/ctrlz/topics/assets/assets.go
  23. 4
    3
      pkg/ctrlz/topics/collection.go
  24. 2
    1
      pkg/ctrlz/topics/env.go
  25. 2
    1
      pkg/ctrlz/topics/mem.go
  26. 2
    1
      pkg/ctrlz/topics/metrics.go
  27. 2
    1
      pkg/ctrlz/topics/proc.go
  28. 2
    1
      pkg/ctrlz/topics/scopes.go
  29. 2
    1
      pkg/ctrlz/topics/signals.go
  30. 2
    1
      pkg/ctrlz/topics/version.go
  31. 12
    15
      pkg/mcp/configz/client/assets/assets.gen.go
  32. 2
    2
      pkg/mcp/configz/client/assets/assets.go
  33. 2
    1
      pkg/mcp/configz/client/configz.go
  34. 11
    13
      pkg/mcp/configz/server/assets/assets.gen.go
  35. 2
    2
      pkg/mcp/configz/server/assets/assets.go
  36. 2
    1
      pkg/mcp/configz/server/configz.go

+ 0
- 1
.codecov.yml View File

@@ -15,4 +15,3 @@ coverage:
15 15
     - "release/"
16 16
     - "samples/"
17 17
     - "**/prow/"
18
-

+ 10
- 0
bin/codecov.sh View File

@@ -78,6 +78,9 @@ function code_coverage() {
78 78
       echo "${1}" | tee "${COVERAGEDIR}/${filename}.err"
79 79
     fi
80 80
   fi
81
+
82
+  #remove skipped tests from .cov file
83
+  remove_skipped_tests_from_cov "${COVERAGEDIR}/${filename}.cov"
81 84
 }
82 85
 
83 86
 function wait_for_proc() {
@@ -100,6 +103,13 @@ function parse_skipped_tests() {
100 103
   done < "${CODECOV_SKIP}"
101 104
 }
102 105
 
106
+function remove_skipped_tests_from_cov() {
107
+  while read -r entry; do
108
+    entry="$(echo "${entry}" | sed 's/\//\\\//g')"
109
+    sed -i "/${entry}/d" "$1"
110
+  done < "${CODECOV_SKIP}"
111
+}
112
+
103 113
 cd "${ROOTDIR}"
104 114
 
105 115
 parse_skipped_tests

+ 4
- 0
codecov.skip View File

@@ -8,6 +8,10 @@ istio.io/istio/mixer/template/sample
8 8
 istio.io/istio/mixer/tools/codegen
9 9
 istio.io/istio/mixer/tools/adapterlinter
10 10
 istio.io/istio/pilot/test
11
+istio.io/istio/pkg/ctrlz/assets
12
+istio.io/istio/pkg/ctrlz/topics/assets
13
+istio.io/istio/pkg/mcp/configz/client/assets
14
+istio.io/istio/pkg/mcp/configz/server/assets
11 15
 istio.io/istio/pkg/mcp/testing
12 16
 istio.io/istio/pkg/test
13 17
 istio.io/istio/samples

+ 0
- 3172
pkg/ctrlz/assets.gen.go
File diff suppressed because it is too large
View File


+ 3122
- 0
pkg/ctrlz/assets/assets.gen.go
File diff suppressed because it is too large
View File


+ 17
- 0
pkg/ctrlz/assets/assets.go View File

@@ -0,0 +1,17 @@
1
+// Copyright 2018 Istio Authors
2
+//
3
+// Licensed under the Apache License, Version 2.0 (the "License");
4
+// you may not use this file except in compliance with the License.
5
+// You may obtain a copy of the License at
6
+//
7
+//     http://www.apache.org/licenses/LICENSE-2.0
8
+//
9
+// Unless required by applicable law or agreed to in writing, software
10
+// distributed under the License is distributed on an "AS IS" BASIS,
11
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+// See the License for the specific language governing permissions and
13
+// limitations under the License.
14
+
15
+//go:generate $GOPATH/src/istio.io/istio/bin/go-bindata.sh --nocompress --nometadata --pkg assets -o assets.gen.go ./templates/... ./static/...
16
+
17
+package assets

+ 7
- 0
pkg/ctrlz/assets/static/css/bootstrap-4.0.0.min.css
File diff suppressed because it is too large
View File


pkg/ctrlz/assets/static/css/dark_syntax.css → pkg/ctrlz/assets/static/css/dark_syntax-1.14.0.css View File


+ 5
- 0
pkg/ctrlz/assets/static/css/fontawesome-all-5.0.6.css
File diff suppressed because it is too large
View File


+ 672
- 0
pkg/ctrlz/assets/static/css/fonts.css View File

@@ -0,0 +1,672 @@
1
+/* cyrillic-ext */
2
+@font-face {
3
+  font-family: 'Roboto';
4
+  font-style: italic;
5
+  font-weight: 100;
6
+  src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOiCnqEu92Fr1Mu51QrEz0dL-vwnYh2eg.woff2) format('woff2');
7
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
8
+}
9
+/* cyrillic */
10
+@font-face {
11
+  font-family: 'Roboto';
12
+  font-style: italic;
13
+  font-weight: 100;
14
+  src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOiCnqEu92Fr1Mu51QrEzQdL-vwnYh2eg.woff2) format('woff2');
15
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
16
+}
17
+/* greek-ext */
18
+@font-face {
19
+  font-family: 'Roboto';
20
+  font-style: italic;
21
+  font-weight: 100;
22
+  src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOiCnqEu92Fr1Mu51QrEzwdL-vwnYh2eg.woff2) format('woff2');
23
+  unicode-range: U+1F00-1FFF;
24
+}
25
+/* greek */
26
+@font-face {
27
+  font-family: 'Roboto';
28
+  font-style: italic;
29
+  font-weight: 100;
30
+  src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOiCnqEu92Fr1Mu51QrEzMdL-vwnYh2eg.woff2) format('woff2');
31
+  unicode-range: U+0370-03FF;
32
+}
33
+/* vietnamese */
34
+@font-face {
35
+  font-family: 'Roboto';
36
+  font-style: italic;
37
+  font-weight: 100;
38
+  src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOiCnqEu92Fr1Mu51QrEz8dL-vwnYh2eg.woff2) format('woff2');
39
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
40
+}
41
+/* latin-ext */
42
+@font-face {
43
+  font-family: 'Roboto';
44
+  font-style: italic;
45
+  font-weight: 100;
46
+  src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOiCnqEu92Fr1Mu51QrEz4dL-vwnYh2eg.woff2) format('woff2');
47
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
48
+}
49
+/* latin */
50
+@font-face {
51
+  font-family: 'Roboto';
52
+  font-style: italic;
53
+  font-weight: 100;
54
+  src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOiCnqEu92Fr1Mu51QrEzAdL-vwnYg.woff2) format('woff2');
55
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
56
+}
57
+/* cyrillic-ext */
58
+@font-face {
59
+  font-family: 'Roboto';
60
+  font-style: italic;
61
+  font-weight: 300;
62
+  src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TjASc3CsTYl4BOQ3o.woff2) format('woff2');
63
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
64
+}
65
+/* cyrillic */
66
+@font-face {
67
+  font-family: 'Roboto';
68
+  font-style: italic;
69
+  font-weight: 300;
70
+  src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TjASc-CsTYl4BOQ3o.woff2) format('woff2');
71
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
72
+}
73
+/* greek-ext */
74
+@font-face {
75
+  font-family: 'Roboto';
76
+  font-style: italic;
77
+  font-weight: 300;
78
+  src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TjASc2CsTYl4BOQ3o.woff2) format('woff2');
79
+  unicode-range: U+1F00-1FFF;
80
+}
81
+/* greek */
82
+@font-face {
83
+  font-family: 'Roboto';
84
+  font-style: italic;
85
+  font-weight: 300;
86
+  src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TjASc5CsTYl4BOQ3o.woff2) format('woff2');
87
+  unicode-range: U+0370-03FF;
88
+}
89
+/* vietnamese */
90
+@font-face {
91
+  font-family: 'Roboto';
92
+  font-style: italic;
93
+  font-weight: 300;
94
+  src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TjASc1CsTYl4BOQ3o.woff2) format('woff2');
95
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
96
+}
97
+/* latin-ext */
98
+@font-face {
99
+  font-family: 'Roboto';
100
+  font-style: italic;
101
+  font-weight: 300;
102
+  src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TjASc0CsTYl4BOQ3o.woff2) format('woff2');
103
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
104
+}
105
+/* latin */
106
+@font-face {
107
+  font-family: 'Roboto';
108
+  font-style: italic;
109
+  font-weight: 300;
110
+  src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TjASc6CsTYl4BO.woff2) format('woff2');
111
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
112
+}
113
+/* cyrillic-ext */
114
+@font-face {
115
+  font-family: 'Roboto';
116
+  font-style: italic;
117
+  font-weight: 400;
118
+  src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1Mu51xFIzIXKMnyrYk.woff2) format('woff2');
119
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
120
+}
121
+/* cyrillic */
122
+@font-face {
123
+  font-family: 'Roboto';
124
+  font-style: italic;
125
+  font-weight: 400;
126
+  src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1Mu51xMIzIXKMnyrYk.woff2) format('woff2');
127
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
128
+}
129
+/* greek-ext */
130
+@font-face {
131
+  font-family: 'Roboto';
132
+  font-style: italic;
133
+  font-weight: 400;
134
+  src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1Mu51xEIzIXKMnyrYk.woff2) format('woff2');
135
+  unicode-range: U+1F00-1FFF;
136
+}
137
+/* greek */
138
+@font-face {
139
+  font-family: 'Roboto';
140
+  font-style: italic;
141
+  font-weight: 400;
142
+  src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1Mu51xLIzIXKMnyrYk.woff2) format('woff2');
143
+  unicode-range: U+0370-03FF;
144
+}
145
+/* vietnamese */
146
+@font-face {
147
+  font-family: 'Roboto';
148
+  font-style: italic;
149
+  font-weight: 400;
150
+  src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1Mu51xHIzIXKMnyrYk.woff2) format('woff2');
151
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
152
+}
153
+/* latin-ext */
154
+@font-face {
155
+  font-family: 'Roboto';
156
+  font-style: italic;
157
+  font-weight: 400;
158
+  src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1Mu51xGIzIXKMnyrYk.woff2) format('woff2');
159
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
160
+}
161
+/* latin */
162
+@font-face {
163
+  font-family: 'Roboto';
164
+  font-style: italic;
165
+  font-weight: 400;
166
+  src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1Mu51xIIzIXKMny.woff2) format('woff2');
167
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
168
+}
169
+/* cyrillic-ext */
170
+@font-face {
171
+  font-family: 'Roboto';
172
+  font-style: italic;
173
+  font-weight: 500;
174
+  src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51S7ACc3CsTYl4BOQ3o.woff2) format('woff2');
175
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
176
+}
177
+/* cyrillic */
178
+@font-face {
179
+  font-family: 'Roboto';
180
+  font-style: italic;
181
+  font-weight: 500;
182
+  src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51S7ACc-CsTYl4BOQ3o.woff2) format('woff2');
183
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
184
+}
185
+/* greek-ext */
186
+@font-face {
187
+  font-family: 'Roboto';
188
+  font-style: italic;
189
+  font-weight: 500;
190
+  src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51S7ACc2CsTYl4BOQ3o.woff2) format('woff2');
191
+  unicode-range: U+1F00-1FFF;
192
+}
193
+/* greek */
194
+@font-face {
195
+  font-family: 'Roboto';
196
+  font-style: italic;
197
+  font-weight: 500;
198
+  src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51S7ACc5CsTYl4BOQ3o.woff2) format('woff2');
199
+  unicode-range: U+0370-03FF;
200
+}
201
+/* vietnamese */
202
+@font-face {
203
+  font-family: 'Roboto';
204
+  font-style: italic;
205
+  font-weight: 500;
206
+  src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51S7ACc1CsTYl4BOQ3o.woff2) format('woff2');
207
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
208
+}
209
+/* latin-ext */
210
+@font-face {
211
+  font-family: 'Roboto';
212
+  font-style: italic;
213
+  font-weight: 500;
214
+  src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51S7ACc0CsTYl4BOQ3o.woff2) format('woff2');
215
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
216
+}
217
+/* latin */
218
+@font-face {
219
+  font-family: 'Roboto';
220
+  font-style: italic;
221
+  font-weight: 500;
222
+  src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51S7ACc6CsTYl4BO.woff2) format('woff2');
223
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
224
+}
225
+/* cyrillic-ext */
226
+@font-face {
227
+  font-family: 'Roboto';
228
+  font-style: italic;
229
+  font-weight: 700;
230
+  src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TzBic3CsTYl4BOQ3o.woff2) format('woff2');
231
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
232
+}
233
+/* cyrillic */
234
+@font-face {
235
+  font-family: 'Roboto';
236
+  font-style: italic;
237
+  font-weight: 700;
238
+  src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TzBic-CsTYl4BOQ3o.woff2) format('woff2');
239
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
240
+}
241
+/* greek-ext */
242
+@font-face {
243
+  font-family: 'Roboto';
244
+  font-style: italic;
245
+  font-weight: 700;
246
+  src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TzBic2CsTYl4BOQ3o.woff2) format('woff2');
247
+  unicode-range: U+1F00-1FFF;
248
+}
249
+/* greek */
250
+@font-face {
251
+  font-family: 'Roboto';
252
+  font-style: italic;
253
+  font-weight: 700;
254
+  src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TzBic5CsTYl4BOQ3o.woff2) format('woff2');
255
+  unicode-range: U+0370-03FF;
256
+}
257
+/* vietnamese */
258
+@font-face {
259
+  font-family: 'Roboto';
260
+  font-style: italic;
261
+  font-weight: 700;
262
+  src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TzBic1CsTYl4BOQ3o.woff2) format('woff2');
263
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
264
+}
265
+/* latin-ext */
266
+@font-face {
267
+  font-family: 'Roboto';
268
+  font-style: italic;
269
+  font-weight: 700;
270
+  src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TzBic0CsTYl4BOQ3o.woff2) format('woff2');
271
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
272
+}
273
+/* latin */
274
+@font-face {
275
+  font-family: 'Roboto';
276
+  font-style: italic;
277
+  font-weight: 700;
278
+  src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TzBic6CsTYl4BO.woff2) format('woff2');
279
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
280
+}
281
+/* cyrillic-ext */
282
+@font-face {
283
+  font-family: 'Roboto';
284
+  font-style: italic;
285
+  font-weight: 900;
286
+  src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TLBCc3CsTYl4BOQ3o.woff2) format('woff2');
287
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
288
+}
289
+/* cyrillic */
290
+@font-face {
291
+  font-family: 'Roboto';
292
+  font-style: italic;
293
+  font-weight: 900;
294
+  src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TLBCc-CsTYl4BOQ3o.woff2) format('woff2');
295
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
296
+}
297
+/* greek-ext */
298
+@font-face {
299
+  font-family: 'Roboto';
300
+  font-style: italic;
301
+  font-weight: 900;
302
+  src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TLBCc2CsTYl4BOQ3o.woff2) format('woff2');
303
+  unicode-range: U+1F00-1FFF;
304
+}
305
+/* greek */
306
+@font-face {
307
+  font-family: 'Roboto';
308
+  font-style: italic;
309
+  font-weight: 900;
310
+  src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TLBCc5CsTYl4BOQ3o.woff2) format('woff2');
311
+  unicode-range: U+0370-03FF;
312
+}
313
+/* vietnamese */
314
+@font-face {
315
+  font-family: 'Roboto';
316
+  font-style: italic;
317
+  font-weight: 900;
318
+  src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TLBCc1CsTYl4BOQ3o.woff2) format('woff2');
319
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
320
+}
321
+/* latin-ext */
322
+@font-face {
323
+  font-family: 'Roboto';
324
+  font-style: italic;
325
+  font-weight: 900;
326
+  src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TLBCc0CsTYl4BOQ3o.woff2) format('woff2');
327
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
328
+}
329
+/* latin */
330
+@font-face {
331
+  font-family: 'Roboto';
332
+  font-style: italic;
333
+  font-weight: 900;
334
+  src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v19/KFOjCnqEu92Fr1Mu51TLBCc6CsTYl4BO.woff2) format('woff2');
335
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
336
+}
337
+/* cyrillic-ext */
338
+@font-face {
339
+  font-family: 'Roboto';
340
+  font-style: normal;
341
+  font-weight: 100;
342
+  src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxFIzIXKMnyrYk.woff2) format('woff2');
343
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
344
+}
345
+/* cyrillic */
346
+@font-face {
347
+  font-family: 'Roboto';
348
+  font-style: normal;
349
+  font-weight: 100;
350
+  src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxMIzIXKMnyrYk.woff2) format('woff2');
351
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
352
+}
353
+/* greek-ext */
354
+@font-face {
355
+  font-family: 'Roboto';
356
+  font-style: normal;
357
+  font-weight: 100;
358
+  src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxEIzIXKMnyrYk.woff2) format('woff2');
359
+  unicode-range: U+1F00-1FFF;
360
+}
361
+/* greek */
362
+@font-face {
363
+  font-family: 'Roboto';
364
+  font-style: normal;
365
+  font-weight: 100;
366
+  src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxLIzIXKMnyrYk.woff2) format('woff2');
367
+  unicode-range: U+0370-03FF;
368
+}
369
+/* vietnamese */
370
+@font-face {
371
+  font-family: 'Roboto';
372
+  font-style: normal;
373
+  font-weight: 100;
374
+  src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxHIzIXKMnyrYk.woff2) format('woff2');
375
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
376
+}
377
+/* latin-ext */
378
+@font-face {
379
+  font-family: 'Roboto';
380
+  font-style: normal;
381
+  font-weight: 100;
382
+  src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxGIzIXKMnyrYk.woff2) format('woff2');
383
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
384
+}
385
+/* latin */
386
+@font-face {
387
+  font-family: 'Roboto';
388
+  font-style: normal;
389
+  font-weight: 100;
390
+  src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxIIzIXKMny.woff2) format('woff2');
391
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
392
+}
393
+/* cyrillic-ext */
394
+@font-face {
395
+  font-family: 'Roboto';
396
+  font-style: normal;
397
+  font-weight: 300;
398
+  src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2) format('woff2');
399
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
400
+}
401
+/* cyrillic */
402
+@font-face {
403
+  font-family: 'Roboto';
404
+  font-style: normal;
405
+  font-weight: 300;
406
+  src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2) format('woff2');
407
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
408
+}
409
+/* greek-ext */
410
+@font-face {
411
+  font-family: 'Roboto';
412
+  font-style: normal;
413
+  font-weight: 300;
414
+  src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2) format('woff2');
415
+  unicode-range: U+1F00-1FFF;
416
+}
417
+/* greek */
418
+@font-face {
419
+  font-family: 'Roboto';
420
+  font-style: normal;
421
+  font-weight: 300;
422
+  src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2) format('woff2');
423
+  unicode-range: U+0370-03FF;
424
+}
425
+/* vietnamese */
426
+@font-face {
427
+  font-family: 'Roboto';
428
+  font-style: normal;
429
+  font-weight: 300;
430
+  src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2) format('woff2');
431
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
432
+}
433
+/* latin-ext */
434
+@font-face {
435
+  font-family: 'Roboto';
436
+  font-style: normal;
437
+  font-weight: 300;
438
+  src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2) format('woff2');
439
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
440
+}
441
+/* latin */
442
+@font-face {
443
+  font-family: 'Roboto';
444
+  font-style: normal;
445
+  font-weight: 300;
446
+  src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2) format('woff2');
447
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
448
+}
449
+/* cyrillic-ext */
450
+@font-face {
451
+  font-family: 'Roboto';
452
+  font-style: normal;
453
+  font-weight: 400;
454
+  src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2) format('woff2');
455
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
456
+}
457
+/* cyrillic */
458
+@font-face {
459
+  font-family: 'Roboto';
460
+  font-style: normal;
461
+  font-weight: 400;
462
+  src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');
463
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
464
+}
465
+/* greek-ext */
466
+@font-face {
467
+  font-family: 'Roboto';
468
+  font-style: normal;
469
+  font-weight: 400;
470
+  src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2) format('woff2');
471
+  unicode-range: U+1F00-1FFF;
472
+}
473
+/* greek */
474
+@font-face {
475
+  font-family: 'Roboto';
476
+  font-style: normal;
477
+  font-weight: 400;
478
+  src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2) format('woff2');
479
+  unicode-range: U+0370-03FF;
480
+}
481
+/* vietnamese */
482
+@font-face {
483
+  font-family: 'Roboto';
484
+  font-style: normal;
485
+  font-weight: 400;
486
+  src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2) format('woff2');
487
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
488
+}
489
+/* latin-ext */
490
+@font-face {
491
+  font-family: 'Roboto';
492
+  font-style: normal;
493
+  font-weight: 400;
494
+  src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');
495
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
496
+}
497
+/* latin */
498
+@font-face {
499
+  font-family: 'Roboto';
500
+  font-style: normal;
501
+  font-weight: 400;
502
+  src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');
503
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
504
+}
505
+/* cyrillic-ext */
506
+@font-face {
507
+  font-family: 'Roboto';
508
+  font-style: normal;
509
+  font-weight: 500;
510
+  src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2) format('woff2');
511
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
512
+}
513
+/* cyrillic */
514
+@font-face {
515
+  font-family: 'Roboto';
516
+  font-style: normal;
517
+  font-weight: 500;
518
+  src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');
519
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
520
+}
521
+/* greek-ext */
522
+@font-face {
523
+  font-family: 'Roboto';
524
+  font-style: normal;
525
+  font-weight: 500;
526
+  src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2) format('woff2');
527
+  unicode-range: U+1F00-1FFF;
528
+}
529
+/* greek */
530
+@font-face {
531
+  font-family: 'Roboto';
532
+  font-style: normal;
533
+  font-weight: 500;
534
+  src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2) format('woff2');
535
+  unicode-range: U+0370-03FF;
536
+}
537
+/* vietnamese */
538
+@font-face {
539
+  font-family: 'Roboto';
540
+  font-style: normal;
541
+  font-weight: 500;
542
+  src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2) format('woff2');
543
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
544
+}
545
+/* latin-ext */
546
+@font-face {
547
+  font-family: 'Roboto';
548
+  font-style: normal;
549
+  font-weight: 500;
550
+  src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');
551
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
552
+}
553
+/* latin */
554
+@font-face {
555
+  font-family: 'Roboto';
556
+  font-style: normal;
557
+  font-weight: 500;
558
+  src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');
559
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
560
+}
561
+/* cyrillic-ext */
562
+@font-face {
563
+  font-family: 'Roboto';
564
+  font-style: normal;
565
+  font-weight: 700;
566
+  src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfCRc4AMP6lbBP.woff2) format('woff2');
567
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
568
+}
569
+/* cyrillic */
570
+@font-face {
571
+  font-family: 'Roboto';
572
+  font-style: normal;
573
+  font-weight: 700;
574
+  src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfABc4AMP6lbBP.woff2) format('woff2');
575
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
576
+}
577
+/* greek-ext */
578
+@font-face {
579
+  font-family: 'Roboto';
580
+  font-style: normal;
581
+  font-weight: 700;
582
+  src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfCBc4AMP6lbBP.woff2) format('woff2');
583
+  unicode-range: U+1F00-1FFF;
584
+}
585
+/* greek */
586
+@font-face {
587
+  font-family: 'Roboto';
588
+  font-style: normal;
589
+  font-weight: 700;
590
+  src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfBxc4AMP6lbBP.woff2) format('woff2');
591
+  unicode-range: U+0370-03FF;
592
+}
593
+/* vietnamese */
594
+@font-face {
595
+  font-family: 'Roboto';
596
+  font-style: normal;
597
+  font-weight: 700;
598
+  src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfCxc4AMP6lbBP.woff2) format('woff2');
599
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
600
+}
601
+/* latin-ext */
602
+@font-face {
603
+  font-family: 'Roboto';
604
+  font-style: normal;
605
+  font-weight: 700;
606
+  src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfChc4AMP6lbBP.woff2) format('woff2');
607
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
608
+}
609
+/* latin */
610
+@font-face {
611
+  font-family: 'Roboto';
612
+  font-style: normal;
613
+  font-weight: 700;
614
+  src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2) format('woff2');
615
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
616
+}
617
+/* cyrillic-ext */
618
+@font-face {
619
+  font-family: 'Roboto';
620
+  font-style: normal;
621
+  font-weight: 900;
622
+  src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfCRc4AMP6lbBP.woff2) format('woff2');
623
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
624
+}
625
+/* cyrillic */
626
+@font-face {
627
+  font-family: 'Roboto';
628
+  font-style: normal;
629
+  font-weight: 900;
630
+  src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfABc4AMP6lbBP.woff2) format('woff2');
631
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
632
+}
633
+/* greek-ext */
634
+@font-face {
635
+  font-family: 'Roboto';
636
+  font-style: normal;
637
+  font-weight: 900;
638
+  src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfCBc4AMP6lbBP.woff2) format('woff2');
639
+  unicode-range: U+1F00-1FFF;
640
+}
641
+/* greek */
642
+@font-face {
643
+  font-family: 'Roboto';
644
+  font-style: normal;
645
+  font-weight: 900;
646
+  src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfBxc4AMP6lbBP.woff2) format('woff2');
647
+  unicode-range: U+0370-03FF;
648
+}
649
+/* vietnamese */
650
+@font-face {
651
+  font-family: 'Roboto';
652
+  font-style: normal;
653
+  font-weight: 900;
654
+  src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfCxc4AMP6lbBP.woff2) format('woff2');
655
+  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
656
+}
657
+/* latin-ext */
658
+@font-face {
659
+  font-family: 'Roboto';
660
+  font-style: normal;
661
+  font-weight: 900;
662
+  src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfChc4AMP6lbBP.woff2) format('woff2');
663
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
664
+}
665
+/* latin */
666
+@font-face {
667
+  font-family: 'Roboto';
668
+  font-style: normal;
669
+  font-weight: 900;
670
+  src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfBBc4AMP6lQ.woff2) format('woff2');
671
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
672
+}

+ 7
- 0
pkg/ctrlz/assets/static/js/bootstrap-4.0.0.min.js
File diff suppressed because it is too large
View File


+ 7
- 0
pkg/ctrlz/assets/static/js/clipboard-1.7.1.min.js
File diff suppressed because it is too large
View File


+ 4
- 0
pkg/ctrlz/assets/static/js/jquery-3.2.1.slim.min.js
File diff suppressed because it is too large
View File


+ 5
- 0
pkg/ctrlz/assets/static/js/popper-1.12.9.min.js
File diff suppressed because it is too large
View File


pkg/ctrlz/assets/static/js/prism.min.js → pkg/ctrlz/assets/static/js/prism-1.14.0.min.js View File


+ 0
- 870
pkg/ctrlz/assets/static/js/prism.js View File

@@ -1,870 +0,0 @@
1
-/* PrismJS 1.14.0
2
-http://prismjs.com/download.html#themes=prism&languages=clike+javascript+bash+docker+go+java+protobuf+python+yaml */
3
-var _self = (typeof window !== 'undefined')
4
-	? window   // if in browser
5
-	: (
6
-		(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)
7
-		? self // if in worker
8
-		: {}   // if in node js
9
-	);
10
-
11
-/**
12
- * Prism: Lightweight, robust, elegant syntax highlighting
13
- * MIT license http://www.opensource.org/licenses/mit-license.php/
14
- * @author Lea Verou http://lea.verou.me
15
- */
16
-
17
-var Prism = (function(){
18
-
19
-// Private helper vars
20
-var lang = /\blang(?:uage)?-([\w-]+)\b/i;
21
-var uniqueId = 0;
22
-
23
-var _ = _self.Prism = {
24
-	manual: _self.Prism && _self.Prism.manual,
25
-	disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
26
-	util: {
27
-		encode: function (tokens) {
28
-			if (tokens instanceof Token) {
29
-				return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);
30
-			} else if (_.util.type(tokens) === 'Array') {
31
-				return tokens.map(_.util.encode);
32
-			} else {
33
-				return tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\u00a0/g, ' ');
34
-			}
35
-		},
36
-
37
-		type: function (o) {
38
-			return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1];
39
-		},
40
-
41
-		objId: function (obj) {
42
-			if (!obj['__id']) {
43
-				Object.defineProperty(obj, '__id', { value: ++uniqueId });
44
-			}
45
-			return obj['__id'];
46
-		},
47
-
48
-		// Deep clone a language definition (e.g. to extend it)
49
-		clone: function (o, visited) {
50
-			var type = _.util.type(o);
51
-			visited = visited || {};
52
-
53
-			switch (type) {
54
-				case 'Object':
55
-					if (visited[_.util.objId(o)]) {
56
-						return visited[_.util.objId(o)];
57
-					}
58
-					var clone = {};
59
-					visited[_.util.objId(o)] = clone;
60
-
61
-					for (var key in o) {
62
-						if (o.hasOwnProperty(key)) {
63
-							clone[key] = _.util.clone(o[key], visited);
64
-						}
65
-					}
66
-
67
-					return clone;
68
-
69
-				case 'Array':
70
-					if (visited[_.util.objId(o)]) {
71
-						return visited[_.util.objId(o)];
72
-					}
73
-					var clone = [];
74
-					visited[_.util.objId(o)] = clone;
75
-
76
-					o.forEach(function (v, i) {
77
-						clone[i] = _.util.clone(v, visited);
78
-					});
79
-
80
-					return clone;
81
-			}
82
-
83
-			return o;
84
-		}
85
-	},
86
-
87
-	languages: {
88
-		extend: function (id, redef) {
89
-			var lang = _.util.clone(_.languages[id]);
90
-
91
-			for (var key in redef) {
92
-				lang[key] = redef[key];
93
-			}
94
-
95
-			return lang;
96
-		},
97
-
98
-		/**
99
-		 * Insert a token before another token in a language literal
100
-		 * As this needs to recreate the object (we cannot actually insert before keys in object literals),
101
-		 * we cannot just provide an object, we need anobject and a key.
102
-		 * @param inside The key (or language id) of the parent
103
-		 * @param before The key to insert before. If not provided, the function appends instead.
104
-		 * @param insert Object with the key/value pairs to insert
105
-		 * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.
106
-		 */
107
-		insertBefore: function (inside, before, insert, root) {
108
-			root = root || _.languages;
109
-			var grammar = root[inside];
110
-
111
-			if (arguments.length == 2) {
112
-				insert = arguments[1];
113
-
114
-				for (var newToken in insert) {
115
-					if (insert.hasOwnProperty(newToken)) {
116
-						grammar[newToken] = insert[newToken];
117
-					}
118
-				}
119
-
120
-				return grammar;
121
-			}
122
-
123
-			var ret = {};
124
-
125
-			for (var token in grammar) {
126
-
127
-				if (grammar.hasOwnProperty(token)) {
128
-
129
-					if (token == before) {
130
-
131
-						for (var newToken in insert) {
132
-
133
-							if (insert.hasOwnProperty(newToken)) {
134
-								ret[newToken] = insert[newToken];
135
-							}
136
-						}
137
-					}
138
-
139
-					ret[token] = grammar[token];
140
-				}
141
-			}
142
-
143
-			// Update references in other language definitions
144
-			_.languages.DFS(_.languages, function(key, value) {
145
-				if (value === root[inside] && key != inside) {
146
-					this[key] = ret;
147
-				}
148
-			});
149
-
150
-			return root[inside] = ret;
151
-		},
152
-
153
-		// Traverse a language definition with Depth First Search
154
-		DFS: function(o, callback, type, visited) {
155
-			visited = visited || {};
156
-			for (var i in o) {
157
-				if (o.hasOwnProperty(i)) {
158
-					callback.call(o, i, o[i], type || i);
159
-
160
-					if (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) {
161
-						visited[_.util.objId(o[i])] = true;
162
-						_.languages.DFS(o[i], callback, null, visited);
163
-					}
164
-					else if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) {
165
-						visited[_.util.objId(o[i])] = true;
166
-						_.languages.DFS(o[i], callback, i, visited);
167
-					}
168
-				}
169
-			}
170
-		}
171
-	},
172
-	plugins: {},
173
-
174
-	highlightAll: function(async, callback) {
175
-		_.highlightAllUnder(document, async, callback);
176
-	},
177
-
178
-	highlightAllUnder: function(container, async, callback) {
179
-		var env = {
180
-			callback: callback,
181
-			selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
182
-		};
183
-
184
-		_.hooks.run("before-highlightall", env);
185
-
186
-		var elements = env.elements || container.querySelectorAll(env.selector);
187
-
188
-		for (var i=0, element; element = elements[i++];) {
189
-			_.highlightElement(element, async === true, env.callback);
190
-		}
191
-	},
192
-
193
-	highlightElement: function(element, async, callback) {
194
-		// Find language
195
-		var language, grammar, parent = element;
196
-
197
-		while (parent && !lang.test(parent.className)) {
198
-			parent = parent.parentNode;
199
-		}
200
-
201
-		if (parent) {
202
-			language = (parent.className.match(lang) || [,''])[1].toLowerCase();
203
-			grammar = _.languages[language];
204
-		}
205
-
206
-		// Set language on the element, if not present
207
-		element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
208
-
209
-		if (element.parentNode) {
210
-			// Set language on the parent, for styling
211
-			parent = element.parentNode;
212
-
213
-			if (/pre/i.test(parent.nodeName)) {
214
-				parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
215
-			}
216
-		}
217
-
218
-		var code = element.textContent;
219
-
220
-		var env = {
221
-			element: element,
222
-			language: language,
223
-			grammar: grammar,
224
-			code: code
225
-		};
226
-
227
-		_.hooks.run('before-sanity-check', env);
228
-
229
-		if (!env.code || !env.grammar) {
230
-			if (env.code) {
231
-				_.hooks.run('before-highlight', env);
232
-				env.element.textContent = env.code;
233
-				_.hooks.run('after-highlight', env);
234
-			}
235
-			_.hooks.run('complete', env);
236
-			return;
237
-		}
238
-
239
-		_.hooks.run('before-highlight', env);
240
-
241
-		if (async && _self.Worker) {
242
-			var worker = new Worker(_.filename);
243
-
244
-			worker.onmessage = function(evt) {
245
-				env.highlightedCode = evt.data;
246
-
247
-				_.hooks.run('before-insert', env);
248
-
249
-				env.element.innerHTML = env.highlightedCode;
250
-
251
-				callback && callback.call(env.element);
252
-				_.hooks.run('after-highlight', env);
253
-				_.hooks.run('complete', env);
254
-			};
255
-
256
-			worker.postMessage(JSON.stringify({
257
-				language: env.language,
258
-				code: env.code,
259
-				immediateClose: true
260
-			}));
261
-		}
262
-		else {
263
-			env.highlightedCode = _.highlight(env.code, env.grammar, env.language);
264
-
265
-			_.hooks.run('before-insert', env);
266
-
267
-			env.element.innerHTML = env.highlightedCode;
268
-
269
-			callback && callback.call(element);
270
-
271
-			_.hooks.run('after-highlight', env);
272
-			_.hooks.run('complete', env);
273
-		}
274
-	},
275
-
276
-	highlight: function (text, grammar, language) {
277
-		var env = {
278
-			code: text,
279
-			grammar: grammar,
280
-			language: language
281
-		};
282
-		_.hooks.run('before-tokenize', env);
283
-		env.tokens = _.tokenize(env.code, env.grammar);
284
-		_.hooks.run('after-tokenize', env);
285
-		return Token.stringify(_.util.encode(env.tokens), env.language);
286
-	},
287
-
288
-	matchGrammar: function (text, strarr, grammar, index, startPos, oneshot, target) {
289
-		var Token = _.Token;
290
-
291
-		for (var token in grammar) {
292
-			if(!grammar.hasOwnProperty(token) || !grammar[token]) {
293
-				continue;
294
-			}
295
-
296
-			if (token == target) {
297
-				return;
298
-			}
299
-
300
-			var patterns = grammar[token];
301
-			patterns = (_.util.type(patterns) === "Array") ? patterns : [patterns];
302
-
303
-			for (var j = 0; j < patterns.length; ++j) {
304
-				var pattern = patterns[j],
305
-					inside = pattern.inside,
306
-					lookbehind = !!pattern.lookbehind,
307
-					greedy = !!pattern.greedy,
308
-					lookbehindLength = 0,
309
-					alias = pattern.alias;
310
-
311
-				if (greedy && !pattern.pattern.global) {
312
-					// Without the global flag, lastIndex won't work
313
-					var flags = pattern.pattern.toString().match(/[imuy]*$/)[0];
314
-					pattern.pattern = RegExp(pattern.pattern.source, flags + "g");
315
-				}
316
-
317
-				pattern = pattern.pattern || pattern;
318
-
319
-				// Don’t cache length as it changes during the loop
320
-				for (var i = index, pos = startPos; i < strarr.length; pos += strarr[i].length, ++i) {
321
-
322
-					var str = strarr[i];
323
-
324
-					if (strarr.length > text.length) {
325
-						// Something went terribly wrong, ABORT, ABORT!
326
-						return;
327
-					}
328
-
329
-					if (str instanceof Token) {
330
-						continue;
331
-					}
332
-
333
-					if (greedy && i != strarr.length - 1) {
334
-						pattern.lastIndex = pos;
335
-						var match = pattern.exec(text);
336
-						if (!match) {
337
-							break;
338
-						}
339
-
340
-						var from = match.index + (lookbehind ? match[1].length : 0),
341
-						    to = match.index + match[0].length,
342
-						    k = i,
343
-						    p = pos;
344
-
345
-						for (var len = strarr.length; k < len && (p < to || (!strarr[k].type && !strarr[k - 1].greedy)); ++k) {
346
-							p += strarr[k].length;
347
-							// Move the index i to the element in strarr that is closest to from
348
-							if (from >= p) {
349
-								++i;
350
-								pos = p;
351
-							}
352
-						}
353
-
354
-						// If strarr[i] is a Token, then the match starts inside another Token, which is invalid
355
-						if (strarr[i] instanceof Token) {
356
-							continue;
357
-						}
358
-
359
-						// Number of tokens to delete and replace with the new match
360
-						delNum = k - i;
361
-						str = text.slice(pos, p);
362
-						match.index -= pos;
363
-					} else {
364
-						pattern.lastIndex = 0;
365
-
366
-						var match = pattern.exec(str),
367
-							delNum = 1;
368
-					}
369
-
370
-					if (!match) {
371
-						if (oneshot) {
372
-							break;
373
-						}
374
-
375
-						continue;
376
-					}
377
-
378
-					if(lookbehind) {
379
-						lookbehindLength = match[1] ? match[1].length : 0;
380
-					}
381
-
382
-					var from = match.index + lookbehindLength,
383
-					    match = match[0].slice(lookbehindLength),
384
-					    to = from + match.length,
385
-					    before = str.slice(0, from),
386
-					    after = str.slice(to);
387
-
388
-					var args = [i, delNum];
389
-
390
-					if (before) {
391
-						++i;
392
-						pos += before.length;
393
-						args.push(before);
394
-					}
395
-
396
-					var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy);
397
-
398
-					args.push(wrapped);
399
-
400
-					if (after) {
401
-						args.push(after);
402
-					}
403
-
404
-					Array.prototype.splice.apply(strarr, args);
405
-
406
-					if (delNum != 1)
407
-						_.matchGrammar(text, strarr, grammar, i, pos, true, token);
408
-
409
-					if (oneshot)
410
-						break;
411
-				}
412
-			}
413
-		}
414
-	},
415
-
416
-	tokenize: function(text, grammar, language) {
417
-		var strarr = [text];
418
-
419
-		var rest = grammar.rest;
420
-
421
-		if (rest) {
422
-			for (var token in rest) {
423
-				grammar[token] = rest[token];
424
-			}
425
-
426
-			delete grammar.rest;
427
-		}
428
-
429
-		_.matchGrammar(text, strarr, grammar, 0, 0, false);
430
-
431
-		return strarr;
432
-	},
433
-
434
-	hooks: {
435
-		all: {},
436
-
437
-		add: function (name, callback) {
438
-			var hooks = _.hooks.all;
439
-
440
-			hooks[name] = hooks[name] || [];
441
-
442
-			hooks[name].push(callback);
443
-		},
444
-
445
-		run: function (name, env) {
446
-			var callbacks = _.hooks.all[name];
447
-
448
-			if (!callbacks || !callbacks.length) {
449
-				return;
450
-			}
451
-
452
-			for (var i=0, callback; callback = callbacks[i++];) {
453
-				callback(env);
454
-			}
455
-		}
456
-	}
457
-};
458
-
459
-var Token = _.Token = function(type, content, alias, matchedStr, greedy) {
460
-	this.type = type;
461
-	this.content = content;
462
-	this.alias = alias;
463
-	// Copy of the full string this token was created from
464
-	this.length = (matchedStr || "").length|0;
465
-	this.greedy = !!greedy;
466
-};
467
-
468
-Token.stringify = function(o, language, parent) {
469
-	if (typeof o == 'string') {
470
-		return o;
471
-	}
472
-
473
-	if (_.util.type(o) === 'Array') {
474
-		return o.map(function(element) {
475
-			return Token.stringify(element, language, o);
476
-		}).join('');
477
-	}
478
-
479
-	var env = {
480
-		type: o.type,
481
-		content: Token.stringify(o.content, language, parent),
482
-		tag: 'span',
483
-		classes: ['token', o.type],
484
-		attributes: {},
485
-		language: language,
486
-		parent: parent
487
-	};
488
-
489
-	if (o.alias) {
490
-		var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];
491
-		Array.prototype.push.apply(env.classes, aliases);
492
-	}
493
-
494
-	_.hooks.run('wrap', env);
495
-
496
-	var attributes = Object.keys(env.attributes).map(function(name) {
497
-		return name + '="' + (env.attributes[name] || '').replace(/"/g, '&quot;') + '"';
498
-	}).join(' ');
499
-
500
-	return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '</' + env.tag + '>';
501
-
502
-};
503
-
504
-if (!_self.document) {
505
-	if (!_self.addEventListener) {
506
-		// in Node.js
507
-		return _self.Prism;
508
-	}
509
-
510
-	if (!_.disableWorkerMessageHandler) {
511
-		// In worker
512
-		_self.addEventListener('message', function (evt) {
513
-			var message = JSON.parse(evt.data),
514
-				lang = message.language,
515
-				code = message.code,
516
-				immediateClose = message.immediateClose;
517
-
518
-			_self.postMessage(_.highlight(code, _.languages[lang], lang));
519
-			if (immediateClose) {
520
-				_self.close();
521
-			}
522
-		}, false);
523
-	}
524
-
525
-	return _self.Prism;
526
-}
527
-
528
-//Get current script and highlight
529
-var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
530
-
531
-if (script) {
532
-	_.filename = script.src;
533
-
534
-	if (!_.manual && !script.hasAttribute('data-manual')) {
535
-		if(document.readyState !== "loading") {
536
-			if (window.requestAnimationFrame) {
537
-				window.requestAnimationFrame(_.highlightAll);
538
-			} else {
539
-				window.setTimeout(_.highlightAll, 16);
540
-			}
541
-		}
542
-		else {
543
-			document.addEventListener('DOMContentLoaded', _.highlightAll);
544
-		}
545
-	}
546
-}
547
-
548
-return _self.Prism;
549
-
550
-})();
551
-
552
-if (typeof module !== 'undefined' && module.exports) {
553
-	module.exports = Prism;
554
-}
555
-
556
-// hack for components to work correctly in node.js
557
-if (typeof global !== 'undefined') {
558
-	global.Prism = Prism;
559
-}
560
-;
561
-Prism.languages.clike = {
562
-	'comment': [
563
-		{
564
-			pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
565
-			lookbehind: true
566
-		},
567
-		{
568
-			pattern: /(^|[^\\:])\/\/.*/,
569
-			lookbehind: true,
570
-			greedy: true
571
-		}
572
-	],
573
-	'string': {
574
-		pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
575
-		greedy: true
576
-	},
577
-	'class-name': {
578
-		pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,
579
-		lookbehind: true,
580
-		inside: {
581
-			punctuation: /[.\\]/
582
-		}
583
-	},
584
-	'keyword': /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,
585
-	'boolean': /\b(?:true|false)\b/,
586
-	'function': /[a-z0-9_]+(?=\()/i,
587
-	'number': /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,
588
-	'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,
589
-	'punctuation': /[{}[\];(),.:]/
590
-};
591
-
592
-Prism.languages.javascript = Prism.languages.extend('clike', {
593
-	'keyword': /\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,
594
-	'number': /\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,
595
-	// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
596
-	'function': /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,
597
-	'operator': /-[-=]?|\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/
598
-});
599
-
600
-Prism.languages.insertBefore('javascript', 'keyword', {
601
-	'regex': {
602
-		pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,
603
-		lookbehind: true,
604
-		greedy: true
605
-	},
606
-	// This must be declared before keyword because we use "function" inside the look-forward
607
-	'function-variable': {
608
-		pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,
609
-		alias: 'function'
610
-	},
611
-	'constant': /\b[A-Z][A-Z\d_]*\b/
612
-});
613
-
614
-Prism.languages.insertBefore('javascript', 'string', {
615
-	'template-string': {
616
-		pattern: /`(?:\\[\s\S]|[^\\`])*`/,
617
-		greedy: true,
618
-		inside: {
619
-			'interpolation': {
620
-				pattern: /\$\{[^}]+\}/,
621
-				inside: {
622
-					'interpolation-punctuation': {
623
-						pattern: /^\$\{|\}$/,
624
-						alias: 'punctuation'
625
-					},
626
-					rest: Prism.languages.javascript
627
-				}
628
-			},
629
-			'string': /[\s\S]+/
630
-		}
631
-	}
632
-});
633
-
634
-if (Prism.languages.markup) {
635
-	Prism.languages.insertBefore('markup', 'tag', {
636
-		'script': {
637
-			pattern: /(<script[\s\S]*?>)[\s\S]*?(?=<\/script>)/i,
638
-			lookbehind: true,
639
-			inside: Prism.languages.javascript,
640
-			alias: 'language-javascript',
641
-			greedy: true
642
-		}
643
-	});
644
-}
645
-
646
-Prism.languages.js = Prism.languages.javascript;
647
-
648
-(function(Prism) {
649
-	var insideString = {
650
-		variable: [
651
-			// Arithmetic Environment
652
-			{
653
-				pattern: /\$?\(\([\s\S]+?\)\)/,
654
-				inside: {
655
-					// If there is a $ sign at the beginning highlight $(( and )) as variable
656
-					variable: [{
657
-							pattern: /(^\$\(\([\s\S]+)\)\)/,
658
-							lookbehind: true
659
-						},
660
-						/^\$\(\(/
661
-					],
662
-					number: /\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,
663
-					// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic
664
-					operator: /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,
665
-					// If there is no $ sign at the beginning highlight (( and )) as punctuation
666
-					punctuation: /\(\(?|\)\)?|,|;/
667
-				}
668
-			},
669
-			// Command Substitution
670
-			{
671
-				pattern: /\$\([^)]+\)|`[^`]+`/,
672
-				greedy: true,
673
-				inside: {
674
-					variable: /^\$\(|^`|\)$|`$/
675
-				}
676
-			},
677
-			/\$(?:[\w#?*!@]+|\{[^}]+\})/i
678
-		]
679
-	};
680
-
681
-	Prism.languages.bash = {
682
-		'shebang': {
683
-			pattern: /^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,
684
-			alias: 'important'
685
-		},
686
-		'comment': {
687
-			pattern: /(^|[^"{\\])#.*/,
688
-			lookbehind: true
689
-		},
690
-		'string': [
691
-			//Support for Here-Documents https://en.wikipedia.org/wiki/Here_document
692
-			{
693
-				pattern: /((?:^|[^<])<<\s*)["']?(\w+?)["']?\s*\r?\n(?:[\s\S])*?\r?\n\2/,
694
-				lookbehind: true,
695
-				greedy: true,
696
-				inside: insideString
697
-			},
698
-			{
699
-				pattern: /(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,
700
-				greedy: true,
701
-				inside: insideString
702
-			}
703
-		],
704
-		'variable': insideString.variable,
705
-		// Originally based on http://ss64.com/bash/
706
-		'function': {
707
-			pattern: /(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/,
708
-			lookbehind: true
709
-		},
710
-		'keyword': {
711
-			pattern: /(^|[\s;|&])(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|[\s;|&])/,
712
-			lookbehind: true
713
-		},
714
-		'boolean': {
715
-			pattern: /(^|[\s;|&])(?:true|false)(?=$|[\s;|&])/,
716
-			lookbehind: true
717
-		},
718
-		'operator': /&&?|\|\|?|==?|!=?|<<<?|>>|<=?|>=?|=~/,
719
-		'punctuation': /\$?\(\(?|\)\)?|\.\.|[{}[\];]/
720
-	};
721
-
722
-	var inside = insideString.variable[1].inside;
723
-	inside.string = Prism.languages.bash.string;
724
-	inside['function'] = Prism.languages.bash['function'];
725
-	inside.keyword = Prism.languages.bash.keyword;
726
-	inside.boolean = Prism.languages.bash.boolean;
727
-	inside.operator = Prism.languages.bash.operator;
728
-	inside.punctuation = Prism.languages.bash.punctuation;
729
-	
730
-	Prism.languages.shell = Prism.languages.bash;
731
-})(Prism);
732
-
733
-Prism.languages.docker = {
734
-	'keyword': {
735
-		pattern: /(^\s*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)/mi,
736
-		lookbehind: true
737
-	},
738
-	'string': /("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,
739
-	'comment': /#.*/,
740
-	'punctuation': /---|\.\.\.|[:[\]{}\-,|>?]/
741
-};
742
-
743
-Prism.languages.dockerfile = Prism.languages.docker;
744
-
745
-Prism.languages.go = Prism.languages.extend('clike', {
746
-	'keyword': /\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,
747
-	'builtin': /\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,
748
-	'boolean': /\b(?:_|iota|nil|true|false)\b/,
749
-	'operator': /[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,
750
-	'number': /(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,
751
-	'string': {
752
-		pattern: /(["'`])(\\[\s\S]|(?!\1)[^\\])*\1/,
753
-		greedy: true
754
-	}
755
-});
756
-delete Prism.languages.go['class-name'];
757
-
758
-Prism.languages.java = Prism.languages.extend('clike', {
759
-	'keyword': /\b(?:abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,
760
-	'number': /\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp-]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?[df]?/i,
761
-	'operator': {
762
-		pattern: /(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,
763
-		lookbehind: true
764
-	}
765
-});
766
-
767
-Prism.languages.insertBefore('java','function', {
768
-	'annotation': {
769
-		alias: 'punctuation',
770
-		pattern: /(^|[^.])@\w+/,
771
-		lookbehind: true
772
-	}
773
-});
774
-
775
-Prism.languages.insertBefore('java', 'class-name', {
776
-	'generics': {
777
-		pattern: /<\s*\w+(?:\.\w+)?(?:\s*,\s*\w+(?:\.\w+)?)*>/i,
778
-		alias: 'function',
779
-		inside: {
780
-			keyword: Prism.languages.java.keyword,
781
-			punctuation: /[<>(),.:]/
782
-		}
783
-	}
784
-});
785
-
786
-Prism.languages.protobuf = Prism.languages.extend('clike', {
787
-	keyword: /\b(?:package|import|message|enum)\b/,
788
-	builtin: /\b(?:required|repeated|optional|reserved)\b/,
789
-	primitive: {
790
-		pattern: /\b(?:double|float|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|bool|string|bytes)\b/,
791
-		alias: 'symbol'
792
-	}
793
-});
794
-
795
-Prism.languages.python = {
796
-	'comment': {
797
-		pattern: /(^|[^\\])#.*/,
798
-		lookbehind: true
799
-	},
800
-	'triple-quoted-string': {
801
-		pattern: /("""|''')[\s\S]+?\1/,
802
-		greedy: true,
803
-		alias: 'string'
804
-	},
805
-	'string': {
806
-		pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
807
-		greedy: true
808
-	},
809
-	'function': {
810
-		pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,
811
-		lookbehind: true
812
-	},
813
-	'class-name': {
814
-		pattern: /(\bclass\s+)\w+/i,
815
-		lookbehind: true
816
-	},
817
-	'keyword': /\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|pass|print|raise|return|try|while|with|yield)\b/,
818
-	'builtin':/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,
819
-	'boolean': /\b(?:True|False|None)\b/,
820
-	'number': /(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,
821
-	'operator': /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,
822
-	'punctuation': /[{}[\];(),.:]/
823
-};
824
-
825
-Prism.languages.yaml = {
826
-	'scalar': {
827
-		pattern: /([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,
828
-		lookbehind: true,
829
-		alias: 'string'
830
-	},
831
-	'comment': /#.*/,
832
-	'key': {
833
-		pattern: /(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,
834
-		lookbehind: true,
835
-		alias: 'atrule'
836
-	},
837
-	'directive': {
838
-		pattern: /(^[ \t]*)%.+/m,
839
-		lookbehind: true,
840
-		alias: 'important'
841
-	},
842
-	'datetime': {
843
-		pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,
844
-		lookbehind: true,
845
-		alias: 'number'
846
-	},
847
-	'boolean': {
848
-		pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,
849
-		lookbehind: true,
850
-		alias: 'important'
851
-	},
852
-	'null': {
853
-		pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,
854
-		lookbehind: true,
855
-		alias: 'important'
856
-	},
857
-	'string': {
858
-		pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}))/m,
859
-		lookbehind: true,
860
-		greedy: true
861
-	},
862
-	'number': {
863
-		pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,
864
-		lookbehind: true
865
-	},
866
-	'tag': /![^\s]+/,
867
-	'important': /[&*][\w]+/,
868
-	'punctuation': /---|[:[\]{}\-,|>?]|\.\.\./
869
-};
870
-

+ 9
- 9
pkg/ctrlz/assets/templates/layouts/base.html View File

@@ -26,11 +26,11 @@
26 26
         <meta name="application-name" content="Istio">
27 27
 
28 28
         <!-- style sheets -->
29
-        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic,900,900italic">
30
-        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
31
-        <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.6/css/all.css">
29
+        <link rel="stylesheet" href="/css/fonts.css" >
30
+        <link rel="stylesheet" href="/css/bootstrap-4.0.0.min.css" >
31
+        <link rel="stylesheet" href="/css/fontawesome-all-5.0.6.css">
32 32
         <link rel="stylesheet" href="/css/all.css">
33
-        <link rel="stylesheet" href="/css/dark_syntax.css">
33
+        <link rel="stylesheet" href="/css/dark_syntax-1.14.0.css">
34 34
     </head>
35 35
 
36 36
     <body>
@@ -38,11 +38,11 @@
38 38
         {{template "main" .}}
39 39
 
40 40
         <!-- libraries we pull in -->
41
-        <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
42
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
43
-        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
44
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
45
-        <script src="/js/prism.min.js"></script>
41
+        <script src="/js/jquery-3.2.1.slim.min.js"></script>
42
+        <script src="/js/popper-1.12.9.min.js"></script>
43
+        <script src="/js/bootstrap-4.0.0.min.js"></script>
44
+        <script src="/js/clipboard-1.7.1.min.js"></script>
45
+        <script src="/js/prism-1.14.0.min.js"></script>
46 46
 
47 47
         <!-- our own scripts -->
48 48
         <script src="/js/misc.js"></script>

+ 7
- 8
pkg/ctrlz/ctrlz.go View File

@@ -12,8 +12,6 @@
12 12
 // See the License for the specific language governing permissions and
13 13
 // limitations under the License.
14 14
 
15
-//go:generate $GOPATH/src/istio.io/istio/bin/go-bindata.sh --nocompress --nometadata --pkg ctrlz -o assets.gen.go assets/...
16
-
17 15
 // Package ctrlz implements Istio's introspection facility. When components
18 16
 // integrate with ControlZ, they automatically gain an IP port which allows operators
19 17
 // to visualize and control a number of aspects of each process, including controlling
@@ -37,6 +35,7 @@ import (
37 35
 
38 36
 	"github.com/gorilla/mux"
39 37
 
38
+	"istio.io/istio/pkg/ctrlz/assets"
40 39
 	"istio.io/istio/pkg/ctrlz/fw"
41 40
 	"istio.io/istio/pkg/ctrlz/topics"
42 41
 	"istio.io/istio/pkg/log"
@@ -65,7 +64,7 @@ type Server struct {
65 64
 }
66 65
 
67 66
 func augmentLayout(layout *template.Template, page string) *template.Template {
68
-	return template.Must(layout.Parse(string(MustAsset(page))))
67
+	return template.Must(layout.Parse(string(assets.MustAsset(page))))
69 68
 }
70 69
 
71 70
 func registerTopic(router *mux.Router, layout *template.Template, t fw.Topic) {
@@ -137,13 +136,13 @@ func Run(o *Options, customTopics []fw.Topic) (*Server, error) {
137 136
 		"getTopics": getTopics,
138 137
 	}
139 138
 
140
-	baseLayout := template.Must(template.New("base").Parse(string(MustAsset("assets/templates/layouts/base.html"))))
139
+	baseLayout := template.Must(template.New("base").Parse(string(assets.MustAsset("templates/layouts/base.html"))))
141 140
 	baseLayout = baseLayout.Funcs(funcs)
142 141
 	baseLayout = template.Must(baseLayout.Parse("{{ define \"instance\" }}" + instance + "{{ end }}"))
143
-	_ = augmentLayout(baseLayout, "assets/templates/modules/header.html")
144
-	_ = augmentLayout(baseLayout, "assets/templates/modules/sidebar.html")
145
-	_ = augmentLayout(baseLayout, "assets/templates/modules/last-refresh.html")
146
-	mainLayout := augmentLayout(template.Must(baseLayout.Clone()), "assets/templates/layouts/main.html")
142
+	_ = augmentLayout(baseLayout, "templates/modules/header.html")
143
+	_ = augmentLayout(baseLayout, "templates/modules/sidebar.html")
144
+	_ = augmentLayout(baseLayout, "templates/modules/last-refresh.html")
145
+	mainLayout := augmentLayout(template.Must(baseLayout.Clone()), "templates/layouts/main.html")
147 146
 
148 147
 	router := mux.NewRouter()
149 148
 	for _, t := range allTopics {

+ 4
- 3
pkg/ctrlz/home.go View File

@@ -25,6 +25,7 @@ import (
25 25
 
26 26
 	"github.com/gorilla/mux"
27 27
 
28
+	"istio.io/istio/pkg/ctrlz/assets"
28 29
 	"istio.io/istio/pkg/ctrlz/fw"
29 30
 )
30 31
 
@@ -62,8 +63,8 @@ func getHomeInfo() *homeInfo {
62 63
 }
63 64
 
64 65
 func registerHome(router *mux.Router, layout *template.Template) {
65
-	homeTmpl := template.Must(template.Must(layout.Clone()).Parse(string(MustAsset("assets/templates/home.html"))))
66
-	errorTmpl := template.Must(template.Must(layout.Clone()).Parse(string(MustAsset("assets/templates/404.html"))))
66
+	homeTmpl := template.Must(template.Must(layout.Clone()).Parse(string(assets.MustAsset("templates/home.html"))))
67
+	errorTmpl := template.Must(template.Must(layout.Clone()).Parse(string(assets.MustAsset("templates/404.html"))))
67 68
 
68 69
 	_ = router.NewRoute().PathPrefix("/").Methods("GET").HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
69 70
 		if req.URL.Path == "/" {
@@ -71,7 +72,7 @@ func registerHome(router *mux.Router, layout *template.Template) {
71 72
 			fw.RenderHTML(w, homeTmpl, getHomeInfo())
72 73
 		} else if req.URL.Path == "/homej" || req.URL.Path == "/homej/" {
73 74
 			fw.RenderJSON(w, http.StatusOK, getHomeInfo())
74
-		} else if a, err := Asset("assets/static" + req.URL.Path); err == nil {
75
+		} else if a, err := assets.Asset("static" + req.URL.Path); err == nil {
75 76
 			// static asset
76 77
 			ext := strings.ToLower(filepath.Ext(req.URL.Path))
77 78
 			if mime, ok := mimeTypes[ext]; ok {

+ 2
- 1
pkg/ctrlz/topics/args.go View File

@@ -20,6 +20,7 @@ import (
20 20
 	"os"
21 21
 
22 22
 	"istio.io/istio/pkg/ctrlz/fw"
23
+	"istio.io/istio/pkg/ctrlz/topics/assets"
23 24
 )
24 25
 
25 26
 type argsTopic struct {
@@ -39,7 +40,7 @@ func (argsTopic) Prefix() string {
39 40
 }
40 41
 
41 42
 func (argsTopic) Activate(context fw.TopicContext) {
42
-	tmpl := template.Must(context.Layout().Parse(string(MustAsset("assets/templates/args.html"))))
43
+	tmpl := template.Must(context.Layout().Parse(string(assets.MustAsset("templates/args.html"))))
43 44
 
44 45
 	_ = context.HTMLRouter().StrictSlash(true).NewRoute().Path("/").HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
45 46
 		fw.RenderHTML(w, tmpl, os.Args)

pkg/ctrlz/topics/assets.gen.go → pkg/ctrlz/topics/assets/assets.gen.go View File

@@ -1,19 +1,19 @@
1 1
 // Code generated by go-bindata.
2 2
 // sources:
3
-// assets/templates/args.html
4
-// assets/templates/collection/item.html
5
-// assets/templates/collection/list.html
6
-// assets/templates/collection/main.html
7
-// assets/templates/signals.html
8
-// assets/templates/env.html
9
-// assets/templates/mem.html
10
-// assets/templates/metrics.html
11
-// assets/templates/proc.html
12
-// assets/templates/scopes.html
13
-// assets/templates/version.html
3
+// templates/args.html
4
+// templates/collection/item.html
5
+// templates/collection/list.html
6
+// templates/collection/main.html
7
+// templates/env.html
8
+// templates/mem.html
9
+// templates/metrics.html
10
+// templates/proc.html
11
+// templates/scopes.html
12
+// templates/signals.html
13
+// templates/version.html
14 14
 // DO NOT EDIT!
15 15
 
16
-package topics
16
+package assets
17 17
 
18 18
 import (
19 19
 	"fmt"
@@ -23,7 +23,6 @@ import (
23 23
 	"strings"
24 24
 	"time"
25 25
 )
26
-
27 26
 type asset struct {
28 27
 	bytes []byte
29 28
 	info  os.FileInfo
@@ -55,7 +54,7 @@ func (fi bindataFileInfo) Sys() interface{} {
55 54
 	return nil
56 55
 }
57 56
 
58
-var _assetsTemplatesArgsHtml = []byte(`{{ define "content" }}
57
+var _templatesArgsHtml = []byte(`{{ define "content" }}
59 58
 
60 59
 <p>
61 60
     The set of command-line arguments used when starting this process.
@@ -109,22 +108,22 @@ var _assetsTemplatesArgsHtml = []byte(`{{ define "content" }}
109 108
 {{ end }}
110 109
 `)
111 110
 
112
-func assetsTemplatesArgsHtmlBytes() ([]byte, error) {
113
-	return _assetsTemplatesArgsHtml, nil
111
+func templatesArgsHtmlBytes() ([]byte, error) {
112
+	return _templatesArgsHtml, nil
114 113
 }
115 114
 
116
-func assetsTemplatesArgsHtml() (*asset, error) {
117
-	bytes, err := assetsTemplatesArgsHtmlBytes()
115
+func templatesArgsHtml() (*asset, error) {
116
+	bytes, err := templatesArgsHtmlBytes()
118 117
 	if err != nil {
119 118
 		return nil, err
120 119
 	}
121 120
 
122
-	info := bindataFileInfo{name: "assets/templates/args.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
121
+	info := bindataFileInfo{name: "templates/args.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
123 122
 	a := &asset{bytes: bytes, info: info}
124 123
 	return a, nil
125 124
 }
126 125
 
127
-var _assetsTemplatesCollectionItemHtml = []byte(`{{ define "content" }}
126
+var _templatesCollectionItemHtml = []byte(`{{ define "content" }}
128 127
 
129 128
 {{ with $context := . }}
130 129
     {{ if ne $context.Error "" }}
@@ -143,22 +142,22 @@ var _assetsTemplatesCollectionItemHtml = []byte(`{{ define "content" }}
143 142
 {{ end }}
144 143
 `)
145 144
 
146
-func assetsTemplatesCollectionItemHtmlBytes() ([]byte, error) {
147
-	return _assetsTemplatesCollectionItemHtml, nil
145
+func templatesCollectionItemHtmlBytes() ([]byte, error) {
146
+	return _templatesCollectionItemHtml, nil
148 147
 }
149 148
 
150
-func assetsTemplatesCollectionItemHtml() (*asset, error) {
151
-	bytes, err := assetsTemplatesCollectionItemHtmlBytes()
149
+func templatesCollectionItemHtml() (*asset, error) {
150
+	bytes, err := templatesCollectionItemHtmlBytes()
152 151
 	if err != nil {
153 152
 		return nil, err
154 153
 	}
155 154
 
156
-	info := bindataFileInfo{name: "assets/templates/collection/item.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
155
+	info := bindataFileInfo{name: "templates/collection/item.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
157 156
 	a := &asset{bytes: bytes, info: info}
158 157
 	return a, nil
159 158
 }
160 159
 
161
-var _assetsTemplatesCollectionListHtml = []byte(`{{ define "content" }}
160
+var _templatesCollectionListHtml = []byte(`{{ define "content" }}
162 161
 
163 162
 {{ with $context := . }}
164 163
 
@@ -193,22 +192,22 @@ var _assetsTemplatesCollectionListHtml = []byte(`{{ define "content" }}
193 192
 {{ end }}
194 193
 `)
195 194
 
196
-func assetsTemplatesCollectionListHtmlBytes() ([]byte, error) {
197
-	return _assetsTemplatesCollectionListHtml, nil
195
+func templatesCollectionListHtmlBytes() ([]byte, error) {
196
+	return _templatesCollectionListHtml, nil
198 197
 }
199 198
 
200
-func assetsTemplatesCollectionListHtml() (*asset, error) {
201
-	bytes, err := assetsTemplatesCollectionListHtmlBytes()
199
+func templatesCollectionListHtml() (*asset, error) {
200
+	bytes, err := templatesCollectionListHtmlBytes()
202 201
 	if err != nil {
203 202
 		return nil, err
204 203
 	}
205 204
 
206
-	info := bindataFileInfo{name: "assets/templates/collection/list.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
205
+	info := bindataFileInfo{name: "templates/collection/list.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
207 206
 	a := &asset{bytes: bytes, info: info}
208 207
 	return a, nil
209 208
 }
210 209
 
211
-var _assetsTemplatesCollectionMainHtml = []byte(`{{ define "content" }}
210
+var _templatesCollectionMainHtml = []byte(`{{ define "content" }}
212 211
 
213 212
 {{ with $context := .}}
214 213
     <p>Collections</p>
@@ -229,73 +228,22 @@ var _assetsTemplatesCollectionMainHtml = []byte(`{{ define "content" }}
229 228
 {{ end }}
230 229
 `)
231 230
 
232
-func assetsTemplatesCollectionMainHtmlBytes() ([]byte, error) {
233
-	return _assetsTemplatesCollectionMainHtml, nil
231
+func templatesCollectionMainHtmlBytes() ([]byte, error) {
232
+	return _templatesCollectionMainHtml, nil
234 233
 }
235 234
 
236
-func assetsTemplatesCollectionMainHtml() (*asset, error) {
237
-	bytes, err := assetsTemplatesCollectionMainHtmlBytes()
235
+func templatesCollectionMainHtml() (*asset, error) {
236
+	bytes, err := templatesCollectionMainHtmlBytes()
238 237
 	if err != nil {
239 238
 		return nil, err
240 239
 	}
241 240
 
242
-	info := bindataFileInfo{name: "assets/templates/collection/main.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
241
+	info := bindataFileInfo{name: "templates/collection/main.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
243 242
 	a := &asset{bytes: bytes, info: info}
244 243
 	return a, nil
245 244
 }
246 245
 
247
-var _assetsTemplatesCommandsHtml = []byte(`{{ define "content" }}
248
-
249
-<p>
250
-    Send commands to the running process.
251
-</p>
252
-
253
-<br>
254
-<button class="btn btn-istio" onclick="sendConfigReload()">Reload Config (SIGUSR1)</button>
255
-
256
-{{ template "last-refresh" .}}
257
-
258
-<script>
259
-    "use strict"
260
-
261
-    function sendConfigReload() {
262
-        var url = window.location.protocol + "//" + window.location.host + "/commandj/reloadconfig";
263
-
264
-        var ajax = new XMLHttpRequest();
265
-        ajax.onload = onload;
266
-        ajax.onerror = onerror;
267
-        ajax.open("PUT", url, true);
268
-        ajax.send();
269
-
270
-        function onload() {
271
-            console.log(url + " -> " + ajax.status)
272
-        }
273
-
274
-        function onerror(e) {
275
-            console.error(e);
276
-        }
277
-    }
278
-</script>
279
-
280
-{{ end }}
281
-`)
282
-
283
-func assetsTemplatesCommandsHtmlBytes() ([]byte, error) {
284
-	return _assetsTemplatesCommandsHtml, nil
285
-}
286
-
287
-func assetsTemplatesCommandsHtml() (*asset, error) {
288
-	bytes, err := assetsTemplatesCommandsHtmlBytes()
289
-	if err != nil {
290
-		return nil, err
291
-	}
292
-
293
-	info := bindataFileInfo{name: "assets/templates/signals.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
294
-	a := &asset{bytes: bytes, info: info}
295
-	return a, nil
296
-}
297
-
298
-var _assetsTemplatesEnvHtml = []byte(`{{ define "content" }}
246
+var _templatesEnvHtml = []byte(`{{ define "content" }}
299 247
 
300 248
 <p>
301 249
     The set of environment variables defined for this process.
@@ -324,22 +272,22 @@ var _assetsTemplatesEnvHtml = []byte(`{{ define "content" }}
324 272
 {{ end }}
325 273
 `)
326 274
 
327
-func assetsTemplatesEnvHtmlBytes() ([]byte, error) {
328
-	return _assetsTemplatesEnvHtml, nil
275
+func templatesEnvHtmlBytes() ([]byte, error) {
276
+	return _templatesEnvHtml, nil
329 277
 }
330 278
 
331
-func assetsTemplatesEnvHtml() (*asset, error) {
332
-	bytes, err := assetsTemplatesEnvHtmlBytes()
279
+func templatesEnvHtml() (*asset, error) {
280
+	bytes, err := templatesEnvHtmlBytes()
333 281
 	if err != nil {
334 282
 		return nil, err
335 283
 	}
336 284
 
337
-	info := bindataFileInfo{name: "assets/templates/env.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
285
+	info := bindataFileInfo{name: "templates/env.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
338 286
 	a := &asset{bytes: bytes, info: info}
339 287
 	return a, nil
340 288
 }
341 289
 
342
-var _assetsTemplatesMemHtml = []byte(`{{ define "content" }}
290
+var _templatesMemHtml = []byte(`{{ define "content" }}
343 291
 
344 292
 <p>
345 293
     This information is gathered from the Go runtime and represents the ongoing memory consumption
@@ -567,22 +515,22 @@ var _assetsTemplatesMemHtml = []byte(`{{ define "content" }}
567 515
 {{ end }}
568 516
 `)
569 517
 
570
-func assetsTemplatesMemHtmlBytes() ([]byte, error) {
571
-	return _assetsTemplatesMemHtml, nil
518
+func templatesMemHtmlBytes() ([]byte, error) {
519
+	return _templatesMemHtml, nil
572 520
 }
573 521
 
574
-func assetsTemplatesMemHtml() (*asset, error) {
575
-	bytes, err := assetsTemplatesMemHtmlBytes()
522
+func templatesMemHtml() (*asset, error) {
523
+	bytes, err := templatesMemHtmlBytes()
576 524
 	if err != nil {
577 525
 		return nil, err
578 526
 	}
579 527
 
580
-	info := bindataFileInfo{name: "assets/templates/mem.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
528
+	info := bindataFileInfo{name: "templates/mem.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
581 529
 	a := &asset{bytes: bytes, info: info}
582 530
 	return a, nil
583 531
 }
584 532
 
585
-var _assetsTemplatesMetricsHtml = []byte(`{{ define "content" }}
533
+var _templatesMetricsHtml = []byte(`{{ define "content" }}
586 534
 
587 535
 <p>
588 536
     The set of metrics published by this process.
@@ -744,22 +692,22 @@ var _assetsTemplatesMetricsHtml = []byte(`{{ define "content" }}
744 692
 {{ end }}
745 693
 `)
746 694
 
747
-func assetsTemplatesMetricsHtmlBytes() ([]byte, error) {
748
-	return _assetsTemplatesMetricsHtml, nil
695
+func templatesMetricsHtmlBytes() ([]byte, error) {
696
+	return _templatesMetricsHtml, nil
749 697
 }
750 698
 
751
-func assetsTemplatesMetricsHtml() (*asset, error) {
752
-	bytes, err := assetsTemplatesMetricsHtmlBytes()
699
+func templatesMetricsHtml() (*asset, error) {
700
+	bytes, err := templatesMetricsHtmlBytes()
753 701
 	if err != nil {
754 702
 		return nil, err
755 703
 	}
756 704
 
757
-	info := bindataFileInfo{name: "assets/templates/metrics.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
705
+	info := bindataFileInfo{name: "templates/metrics.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
758 706
 	a := &asset{bytes: bytes, info: info}
759 707
 	return a, nil
760 708
 }
761 709
 
762
-var _assetsTemplatesProcHtml = []byte(`{{ define "content" }}
710
+var _templatesProcHtml = []byte(`{{ define "content" }}
763 711
 
764 712
 <p>
765 713
     Information about this process.
@@ -873,22 +821,22 @@ var _assetsTemplatesProcHtml = []byte(`{{ define "content" }}
873 821
 {{ end }}
874 822
 `)
875 823
 
876
-func assetsTemplatesProcHtmlBytes() ([]byte, error) {
877
-	return _assetsTemplatesProcHtml, nil
824
+func templatesProcHtmlBytes() ([]byte, error) {
825
+	return _templatesProcHtml, nil
878 826
 }
879 827
 
880
-func assetsTemplatesProcHtml() (*asset, error) {
881
-	bytes, err := assetsTemplatesProcHtmlBytes()
828
+func templatesProcHtml() (*asset, error) {
829
+	bytes, err := templatesProcHtmlBytes()
882 830
 	if err != nil {
883 831
 		return nil, err
884 832
 	}
885 833
 
886
-	info := bindataFileInfo{name: "assets/templates/proc.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
834
+	info := bindataFileInfo{name: "templates/proc.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
887 835
 	a := &asset{bytes: bytes, info: info}
888 836
 	return a, nil
889 837
 }
890 838
 
891
-var _assetsTemplatesScopesHtml = []byte(`{{ define "content" }}
839
+var _templatesScopesHtml = []byte(`{{ define "content" }}
892 840
 <p>
893 841
         Logging for this process is organized in scopes. Each scope has different
894 842
         output controls which determine how much and what kind of logging is produced
@@ -1096,22 +1044,73 @@ var _assetsTemplatesScopesHtml = []byte(`{{ define "content" }}
1096 1044
 {{ end }}
1097 1045
 `)
1098 1046
 
1099
-func assetsTemplatesScopesHtmlBytes() ([]byte, error) {
1100
-	return _assetsTemplatesScopesHtml, nil
1047
+func templatesScopesHtmlBytes() ([]byte, error) {
1048
+	return _templatesScopesHtml, nil
1101 1049
 }
1102 1050
 
1103
-func assetsTemplatesScopesHtml() (*asset, error) {
1104
-	bytes, err := assetsTemplatesScopesHtmlBytes()
1051
+func templatesScopesHtml() (*asset, error) {
1052
+	bytes, err := templatesScopesHtmlBytes()
1105 1053
 	if err != nil {
1106 1054
 		return nil, err
1107 1055
 	}
1108 1056
 
1109
-	info := bindataFileInfo{name: "assets/templates/scopes.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
1057
+	info := bindataFileInfo{name: "templates/scopes.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
1110 1058
 	a := &asset{bytes: bytes, info: info}
1111 1059
 	return a, nil
1112 1060
 }
1113 1061
 
1114
-var _assetsTemplatesVersionHtml = []byte(`{{ define "content" }}
1062
+var _templatesSignalsHtml = []byte(`{{ define "content" }}
1063
+
1064
+<p>
1065
+    Send signals to the running process.
1066
+</p>
1067
+
1068
+<br>
1069
+<button class="btn btn-istio" onclick="sendSIGUSR1()">SIGUSR1 (Reload Config)</button>
1070
+
1071
+{{ template "last-refresh" .}}
1072
+
1073
+<script>
1074
+    "use strict"
1075
+
1076
+    function sendSIGUSR1() {
1077
+        var url = window.location.protocol + "//" + window.location.host + "/signalj/SIGUSR1";
1078
+
1079
+        var ajax = new XMLHttpRequest();
1080
+        ajax.onload = onload;
1081
+        ajax.onerror = onerror;
1082
+        ajax.open("PUT", url, true);
1083
+        ajax.send();
1084
+
1085
+        function onload() {
1086
+            console.log(url + " -> " + ajax.status)
1087
+        }
1088
+
1089
+        function onerror(e) {
1090
+            console.error(e);
1091
+        }
1092
+    }
1093
+</script>
1094
+
1095
+{{ end }}
1096
+`)
1097
+
1098
+func templatesSignalsHtmlBytes() ([]byte, error) {
1099
+	return _templatesSignalsHtml, nil
1100
+}
1101
+
1102
+func templatesSignalsHtml() (*asset, error) {
1103
+	bytes, err := templatesSignalsHtmlBytes()
1104
+	if err != nil {
1105
+		return nil, err
1106
+	}
1107
+
1108
+	info := bindataFileInfo{name: "templates/signals.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
1109
+	a := &asset{bytes: bytes, info: info}
1110
+	return a, nil
1111
+}
1112
+
1113
+var _templatesVersionHtml = []byte(`{{ define "content" }}
1115 1114
 
1116 1115
 <p>
1117 1116
     Version information about this binary and runtime.
@@ -1168,17 +1167,17 @@ var _assetsTemplatesVersionHtml = []byte(`{{ define "content" }}
1168 1167
 {{ end }}
1169 1168
 `)
1170 1169
 
1171
-func assetsTemplatesVersionHtmlBytes() ([]byte, error) {
1172
-	return _assetsTemplatesVersionHtml, nil
1170
+func templatesVersionHtmlBytes() ([]byte, error) {
1171
+	return _templatesVersionHtml, nil
1173 1172
 }
1174 1173
 
1175
-func assetsTemplatesVersionHtml() (*asset, error) {
1176
-	bytes, err := assetsTemplatesVersionHtmlBytes()
1174
+func templatesVersionHtml() (*asset, error) {
1175
+	bytes, err := templatesVersionHtmlBytes()
1177 1176
 	if err != nil {
1178 1177
 		return nil, err
1179 1178
 	}
1180 1179
 
1181
-	info := bindataFileInfo{name: "assets/templates/version.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
1180
+	info := bindataFileInfo{name: "templates/version.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
1182 1181
 	a := &asset{bytes: bytes, info: info}
1183 1182
 	return a, nil
1184 1183
 }
@@ -1235,17 +1234,17 @@ func AssetNames() []string {
1235 1234
 
1236 1235
 // _bindata is a table, holding each asset generator, mapped to its name.
1237 1236
 var _bindata = map[string]func() (*asset, error){
1238
-	"assets/templates/args.html":            assetsTemplatesArgsHtml,
1239
-	"assets/templates/collection/item.html": assetsTemplatesCollectionItemHtml,
1240
-	"assets/templates/collection/list.html": assetsTemplatesCollectionListHtml,
1241
-	"assets/templates/collection/main.html": assetsTemplatesCollectionMainHtml,
1242
-	"assets/templates/signals.html":         assetsTemplatesCommandsHtml,
1243
-	"assets/templates/env.html":             assetsTemplatesEnvHtml,
1244
-	"assets/templates/mem.html":             assetsTemplatesMemHtml,
1245
-	"assets/templates/metrics.html":         assetsTemplatesMetricsHtml,
1246
-	"assets/templates/proc.html":            assetsTemplatesProcHtml,
1247
-	"assets/templates/scopes.html":          assetsTemplatesScopesHtml,
1248
-	"assets/templates/version.html":         assetsTemplatesVersionHtml,
1237
+	"templates/args.html": templatesArgsHtml,
1238
+	"templates/collection/item.html": templatesCollectionItemHtml,
1239
+	"templates/collection/list.html": templatesCollectionListHtml,
1240
+	"templates/collection/main.html": templatesCollectionMainHtml,
1241
+	"templates/env.html": templatesEnvHtml,
1242
+	"templates/mem.html": templatesMemHtml,
1243
+	"templates/metrics.html": templatesMetricsHtml,
1244
+	"templates/proc.html": templatesProcHtml,
1245
+	"templates/scopes.html": templatesScopesHtml,
1246
+	"templates/signals.html": templatesSignalsHtml,
1247
+	"templates/version.html": templatesVersionHtml,
1249 1248
 }
1250 1249
 
1251 1250
 // AssetDir returns the file names below a certain
@@ -1287,24 +1286,21 @@ type bintree struct {
1287 1286
 	Func     func() (*asset, error)
1288 1287
 	Children map[string]*bintree
1289 1288
 }
1290
-
1291 1289
 var _bintree = &bintree{nil, map[string]*bintree{
1292
-	"assets": {nil, map[string]*bintree{
1293
-		"templates": {nil, map[string]*bintree{
1294
-			"args.html": {assetsTemplatesArgsHtml, map[string]*bintree{}},
1295
-			"collection": {nil, map[string]*bintree{
1296
-				"item.html": {assetsTemplatesCollectionItemHtml, map[string]*bintree{}},
1297
-				"list.html": {assetsTemplatesCollectionListHtml, map[string]*bintree{}},
1298
-				"main.html": {assetsTemplatesCollectionMainHtml, map[string]*bintree{}},
1299
-			}},
1300
-			"signals.html": {assetsTemplatesCommandsHtml, map[string]*bintree{}},
1301
-			"env.html":     {assetsTemplatesEnvHtml, map[string]*bintree{}},
1302
-			"mem.html":     {assetsTemplatesMemHtml, map[string]*bintree{}},
1303
-			"metrics.html": {assetsTemplatesMetricsHtml, map[string]*bintree{}},
1304
-			"proc.html":    {assetsTemplatesProcHtml, map[string]*bintree{}},
1305
-			"scopes.html":  {assetsTemplatesScopesHtml, map[string]*bintree{}},
1306
-			"version.html": {assetsTemplatesVersionHtml, map[string]*bintree{}},
1290
+	"templates": &bintree{nil, map[string]*bintree{
1291
+		"args.html": &bintree{templatesArgsHtml, map[string]*bintree{}},
1292
+		"collection": &bintree{nil, map[string]*bintree{
1293
+			"item.html": &bintree{templatesCollectionItemHtml, map[string]*bintree{}},
1294
+			"list.html": &bintree{templatesCollectionListHtml, map[string]*bintree{}},
1295
+			"main.html": &bintree{templatesCollectionMainHtml, map[string]*bintree{}},
1307 1296
 		}},
1297
+		"env.html": &bintree{templatesEnvHtml, map[string]*bintree{}},
1298
+		"mem.html": &bintree{templatesMemHtml, map[string]*bintree{}},
1299
+		"metrics.html": &bintree{templatesMetricsHtml, map[string]*bintree{}},
1300
+		"proc.html": &bintree{templatesProcHtml, map[string]*bintree{}},
1301
+		"scopes.html": &bintree{templatesScopesHtml, map[string]*bintree{}},
1302
+		"signals.html": &bintree{templatesSignalsHtml, map[string]*bintree{}},
1303
+		"version.html": &bintree{templatesVersionHtml, map[string]*bintree{}},
1308 1304
 	}},
1309 1305
 }}
1310 1306
 
@@ -1354,3 +1350,4 @@ func _filePath(dir, name string) string {
1354 1350
 	cannonicalName := strings.Replace(name, "\\", "/", -1)
1355 1351
 	return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
1356 1352
 }
1353
+

pkg/ctrlz/topics/assets.go → pkg/ctrlz/topics/assets/assets.go View File

@@ -12,6 +12,6 @@
12 12
 // See the License for the specific language governing permissions and
13 13
 // limitations under the License.
14 14
 
15
-//go:generate $GOPATH/src/istio.io/istio/bin/go-bindata.sh --nocompress --nometadata --pkg topics -o assets.gen.go assets/...
15
+//go:generate $GOPATH/src/istio.io/istio/bin/go-bindata.sh --nocompress --nometadata --pkg assets -o assets.gen.go ./templates/...
16 16
 
17
-package topics
17
+package assets

+ 4
- 3
pkg/ctrlz/topics/collection.go View File

@@ -24,6 +24,7 @@ import (
24 24
 	yaml "gopkg.in/yaml.v2"
25 25
 
26 26
 	"istio.io/istio/pkg/ctrlz/fw"
27
+	"istio.io/istio/pkg/ctrlz/topics/assets"
27 28
 )
28 29
 
29 30
 // ReadableCollection is a staticCollection collection of entries to be exposed via CtrlZ.
@@ -60,13 +61,13 @@ func (c *collectionTopic) Prefix() string {
60 61
 func (c *collectionTopic) Activate(context fw.TopicContext) {
61 62
 
62 63
 	l := template.Must(context.Layout().Clone())
63
-	c.mainTmpl = template.Must(l.Parse(string(MustAsset("assets/templates/collection/main.html"))))
64
+	c.mainTmpl = template.Must(l.Parse(string(assets.MustAsset("templates/collection/main.html"))))
64 65
 
65 66
 	l = template.Must(context.Layout().Clone())
66
-	c.listTmpl = template.Must(l.Parse(string(MustAsset("assets/templates/collection/list.html"))))
67
+	c.listTmpl = template.Must(l.Parse(string(assets.MustAsset("templates/collection/list.html"))))
67 68
 
68 69
 	l = template.Must(context.Layout().Clone())
69
-	c.itemTmpl = template.Must(l.Parse(string(MustAsset("assets/templates/collection/item.html"))))
70
+	c.itemTmpl = template.Must(l.Parse(string(assets.MustAsset("templates/collection/item.html"))))
70 71
 
71 72
 	_ = context.HTMLRouter().
72 73
 		StrictSlash(true).

+ 2
- 1
pkg/ctrlz/topics/env.go View File

@@ -22,6 +22,7 @@ import (
22 22
 	"strings"
23 23
 
24 24
 	"istio.io/istio/pkg/ctrlz/fw"
25
+	"istio.io/istio/pkg/ctrlz/topics/assets"
25 26
 )
26 27
 
27 28
 type envTopic struct {
@@ -61,7 +62,7 @@ func getVars() []envVar {
61 62
 }
62 63
 
63 64
 func (envTopic) Activate(context fw.TopicContext) {
64
-	tmpl := template.Must(context.Layout().Parse(string(MustAsset("assets/templates/env.html"))))
65
+	tmpl := template.Must(context.Layout().Parse(string(assets.MustAsset("templates/env.html"))))
65 66
 
66 67
 	_ = context.HTMLRouter().StrictSlash(true).NewRoute().Path("/").HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
67 68
 		fw.RenderHTML(w, tmpl, getVars())

+ 2
- 1
pkg/ctrlz/topics/mem.go View File

@@ -21,6 +21,7 @@ import (
21 21
 	"runtime"
22 22
 
23 23
 	"istio.io/istio/pkg/ctrlz/fw"
24
+	"istio.io/istio/pkg/ctrlz/topics/assets"
24 25
 )
25 26
 
26 27
 type memTopic struct {
@@ -40,7 +41,7 @@ func (memTopic) Prefix() string {
40 41
 }
41 42
 
42 43
 func (memTopic) Activate(context fw.TopicContext) {
43
-	tmpl := template.Must(context.Layout().Parse(string(MustAsset("assets/templates/mem.html"))))
44
+	tmpl := template.Must(context.Layout().Parse(string(assets.MustAsset("templates/mem.html"))))
44 45
 
45 46
 	_ = context.HTMLRouter().StrictSlash(true).NewRoute().Path("/").HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
46 47
 		ms := &runtime.MemStats{}

+ 2
- 1
pkg/ctrlz/topics/metrics.go View File

@@ -22,6 +22,7 @@ import (
22 22
 	"github.com/prometheus/prom2json"
23 23
 
24 24
 	"istio.io/istio/pkg/ctrlz/fw"
25
+	"istio.io/istio/pkg/ctrlz/topics/assets"
25 26
 )
26 27
 
27 28
 type metricsTopic struct {
@@ -41,7 +42,7 @@ func (metricsTopic) Prefix() string {
41 42
 }
42 43
 
43 44
 func (metricsTopic) Activate(context fw.TopicContext) {
44
-	tmpl := template.Must(context.Layout().Parse(string(MustAsset("assets/templates/metrics.html"))))
45
+	tmpl := template.Must(context.Layout().Parse(string(assets.MustAsset("templates/metrics.html"))))
45 46
 
46 47
 	_ = context.HTMLRouter().StrictSlash(true).NewRoute().Path("/").HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
47 48
 		fw.RenderHTML(w, tmpl, getMetricInfo())

+ 2
- 1
pkg/ctrlz/topics/proc.go View File

@@ -21,6 +21,7 @@ import (
21 21
 	"runtime"
22 22
 
23 23
 	"istio.io/istio/pkg/ctrlz/fw"
24
+	"istio.io/istio/pkg/ctrlz/topics/assets"
24 25
 )
25 26
 
26 27
 type procTopic struct {
@@ -75,7 +76,7 @@ func getProcInfo() *procInfo {
75 76
 }
76 77
 
77 78
 func (procTopic) Activate(context fw.TopicContext) {
78
-	tmpl := template.Must(context.Layout().Parse(string(MustAsset("assets/templates/proc.html"))))
79
+	tmpl := template.Must(context.Layout().Parse(string(assets.MustAsset("templates/proc.html"))))
79 80
 
80 81
 	_ = context.HTMLRouter().StrictSlash(true).NewRoute().Path("/").HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
81 82
 		fw.RenderHTML(w, tmpl, getProcInfo())

+ 2
- 1
pkg/ctrlz/topics/scopes.go View File

@@ -23,6 +23,7 @@ import (
23 23
 	"github.com/gorilla/mux"
24 24
 
25 25
 	"istio.io/istio/pkg/ctrlz/fw"
26
+	"istio.io/istio/pkg/ctrlz/topics/assets"
26 27
 	"istio.io/istio/pkg/log"
27 28
 )
28 29
 
@@ -77,7 +78,7 @@ func getScopeInfo(s *log.Scope) *scopeInfo {
77 78
 }
78 79
 
79 80
 func (scopeTopic) Activate(context fw.TopicContext) {
80
-	tmpl := template.Must(context.Layout().Parse(string(MustAsset("assets/templates/scopes.html"))))
81
+	tmpl := template.Must(context.Layout().Parse(string(assets.MustAsset("templates/scopes.html"))))
81 82
 
82 83
 	_ = context.HTMLRouter().NewRoute().HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
83 84
 		allScopes := log.Scopes()

+ 2
- 1
pkg/ctrlz/topics/signals.go View File

@@ -22,6 +22,7 @@ import (
22 22
 
23 23
 	"istio.io/istio/pkg/appsignals"
24 24
 	"istio.io/istio/pkg/ctrlz/fw"
25
+	"istio.io/istio/pkg/ctrlz/topics/assets"
25 26
 )
26 27
 
27 28
 type signalsTopic struct {
@@ -41,7 +42,7 @@ func (signalsTopic) Prefix() string {
41 42
 }
42 43
 
43 44
 func (signalsTopic) Activate(context fw.TopicContext) {
44
-	tmpl := template.Must(context.Layout().Parse(string(MustAsset("assets/templates/signals.html"))))
45
+	tmpl := template.Must(context.Layout().Parse(string(assets.MustAsset("templates/signals.html"))))
45 46
 
46 47
 	_ = context.HTMLRouter().StrictSlash(true).NewRoute().Path("/").HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
47 48
 		fw.RenderHTML(w, tmpl, nil)

+ 2
- 1
pkg/ctrlz/topics/version.go View File

@@ -19,6 +19,7 @@ import (
19 19
 	"net/http"
20 20
 
21 21
 	"istio.io/istio/pkg/ctrlz/fw"
22
+	"istio.io/istio/pkg/ctrlz/topics/assets"
22 23
 	"istio.io/istio/pkg/version"
23 24
 )
24 25
 
@@ -39,7 +40,7 @@ func (versionTopic) Prefix() string {
39 40
 }
40 41
 
41 42
 func (versionTopic) Activate(context fw.TopicContext) {
42
-	tmpl := template.Must(context.Layout().Parse(string(MustAsset("assets/templates/version.html"))))
43
+	tmpl := template.Must(context.Layout().Parse(string(assets.MustAsset("templates/version.html"))))
43 44
 
44 45
 	_ = context.HTMLRouter().StrictSlash(true).NewRoute().Path("/").HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
45 46
 		fw.RenderHTML(w, tmpl, &version.Info)

pkg/mcp/configz/client/assets.gen.go → pkg/mcp/configz/client/assets/assets.gen.go View File

@@ -1,9 +1,9 @@
1 1
 // Code generated by go-bindata.
2 2
 // sources:
3
-// assets/templates/config.html
3
+// templates/config.html
4 4
 // DO NOT EDIT!
5 5
 
6
-package configz
6
+package assets
7 7
 
8 8
 import (
9 9
 	"fmt"
@@ -13,7 +13,6 @@ import (
13 13
 	"strings"
14 14
 	"time"
15 15
 )
16
-
17 16
 type asset struct {
18 17
 	bytes []byte
19 18
 	info  os.FileInfo
@@ -45,7 +44,7 @@ func (fi bindataFileInfo) Sys() interface{} {
45 44
 	return nil
46 45
 }
47 46
 
48
-var _assetsTemplatesConfigHtml = []byte(`{{ define "content" }}
47
+var _templatesConfigHtml = []byte(`{{ define "content" }}
49 48
 
50 49
     <p>
51 50
         The Mesh Configuration Protocol (MCP) client state for this process.
@@ -193,17 +192,17 @@ var _assetsTemplatesConfigHtml = []byte(`{{ define "content" }}
193 192
 {{ end }}
194 193
 `)
195 194
 
196
-func assetsTemplatesConfigHtmlBytes() ([]byte, error) {
197
-	return _assetsTemplatesConfigHtml, nil
195
+func templatesConfigHtmlBytes() ([]byte, error) {
196
+	return _templatesConfigHtml, nil
198 197
 }
199 198
 
200
-func assetsTemplatesConfigHtml() (*asset, error) {
201
-	bytes, err := assetsTemplatesConfigHtmlBytes()
199
+func templatesConfigHtml() (*asset, error) {
200
+	bytes, err := templatesConfigHtmlBytes()
202 201
 	if err != nil {
203 202
 		return nil, err
204 203
 	}
205 204
 
206