Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F3749237
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
30 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png
new file mode 100644
index 0000000..218289d
Binary files /dev/null and b/public/android-chrome-192x192.png differ
diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png
new file mode 100644
index 0000000..4729c37
Binary files /dev/null and b/public/android-chrome-512x512.png differ
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
new file mode 100644
index 0000000..07f191d
Binary files /dev/null and b/public/apple-touch-icon.png differ
diff --git a/public/browserconfig.xml b/public/browserconfig.xml
new file mode 100644
index 0000000..52dd0d6
--- /dev/null
+++ b/public/browserconfig.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+ <msapplication>
+ <tile>
+ <square150x150logo src="/mstile-150x150.png"/>
+ <TileColor>#00aba9</TileColor>
+ </tile>
+ </msapplication>
+</browserconfig>
diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png
new file mode 100644
index 0000000..04af8a8
Binary files /dev/null and b/public/favicon-16x16.png differ
diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png
new file mode 100644
index 0000000..1f367e6
Binary files /dev/null and b/public/favicon-32x32.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..0a1290d
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/mstile-144x144.png b/public/mstile-144x144.png
new file mode 100644
index 0000000..44bcd51
Binary files /dev/null and b/public/mstile-144x144.png differ
diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png
new file mode 100644
index 0000000..b304456
Binary files /dev/null and b/public/mstile-150x150.png differ
diff --git a/public/mstile-310x150.png b/public/mstile-310x150.png
new file mode 100644
index 0000000..92311d8
Binary files /dev/null and b/public/mstile-310x150.png differ
diff --git a/public/mstile-310x310.png b/public/mstile-310x310.png
new file mode 100644
index 0000000..18b844c
Binary files /dev/null and b/public/mstile-310x310.png differ
diff --git a/public/mstile-70x70.png b/public/mstile-70x70.png
new file mode 100644
index 0000000..cc8caf1
Binary files /dev/null and b/public/mstile-70x70.png differ
diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg
new file mode 100644
index 0000000..40d723b
--- /dev/null
+++ b/public/safari-pinned-tab.svg
@@ -0,0 +1,280 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
+ width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000"
+ preserveAspectRatio="xMidYMid meet">
+<metadata>
+Created by potrace 1.11, written by Peter Selinger 2001-2013
+</metadata>
+<g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)"
+fill="#000000" stroke="none">
+<path d="M525 6800 c-17 -4 -43 -14 -57 -24 -15 -10 -32 -15 -37 -12 -20 13
+-93 -28 -136 -76 -66 -74 -88 -140 -88 -269 0 -94 2 -110 22 -138 26 -36 76
+-66 106 -63 11 1 2 -5 -20 -13 -53 -21 -91 -59 -102 -103 -13 -51 -8 -351 5
+-382 17 -39 34 -55 77 -77 l39 -21 -31 -6 c-37 -9 -71 -43 -87 -89 -11 -33
+-14 -334 -4 -377 12 -48 74 -100 120 -100 17 0 15 -4 -9 -24 -52 -44 -63 -126
+-25 -184 24 -38 49 -58 107 -87 63 -31 86 -35 211 -36 77 -1 109 3 138 16 40
+19 76 63 79 95 2 30 14 24 21 -11 7 -35 44 -75 85 -91 14 -5 101 -10 192 -10
+205 1 248 14 279 90 l13 34 12 -29 c18 -40 64 -80 105 -88 50 -11 343 -7 371
+4 54 23 104 95 91 130 -3 9 8 5 29 -10 26 -18 46 -24 91 -24 52 0 61 4 93 35
+54 52 76 123 79 254 2 127 -6 186 -31 220 -23 31 -64 56 -95 57 -17 1 -14 4
+13 11 48 13 96 63 106 113 5 22 8 108 8 191 -2 174 -14 214 -78 249 -38 21
+-47 35 -23 35 21 0 65 39 83 73 24 47 24 367 0 414 -23 43 -62 72 -108 79
+l-38 6 13 32 c29 71 -4 148 -79 186 -44 22 -65 25 -175 28 -183 4 -221 -2
+-264 -43 -20 -19 -39 -48 -43 -65 l-6 -32 -13 37 c-17 51 -48 81 -97 94 -56
+15 -364 9 -394 -7 -34 -19 -73 -76 -74 -108 l-1 -29 -10 34 c-28 100 -78 121
+-283 119 -82 -1 -164 -4 -180 -8z m1094 -234 c40 -43 64 -48 221 -51 80 -1
+155 -5 167 -9 20 -6 21 -9 8 -40 -10 -25 -14 -78 -12 -207 2 -201 10 -224 87
+-264 34 -18 40 -24 23 -25 -31 0 -90 -54 -102 -93 -11 -35 -14 -273 -5 -350 7
+-58 54 -114 104 -123 l32 -7 -37 -12 c-81 -29 -102 -71 -103 -216 0 -70 -6
+-123 -17 -157 l-17 -51 -30 22 c-27 20 -43 22 -186 25 -203 4 -237 -1 -279
+-43 -18 -18 -36 -47 -40 -65 l-6 -32 -13 37 c-32 94 -75 108 -305 104 -165 -4
+-176 -5 -206 -28 -17 -13 -37 -37 -44 -52 -12 -30 -29 -39 -29 -16 0 19 -50
+71 -83 85 -15 7 -68 12 -116 12 -76 0 -95 4 -132 25 -24 14 -52 25 -62 25 -15
+0 -13 4 9 25 44 41 50 75 47 260 -1 94 -3 176 -4 184 -4 25 -75 91 -98 91 -12
+0 -19 4 -16 10 3 6 14 10 24 10 20 0 73 54 88 90 6 15 9 99 8 202 -1 169 -2
+178 -26 212 -13 19 -41 43 -63 53 l-39 17 29 9 c37 12 73 45 86 77 6 14 12 60
+13 104 5 113 0 110 208 112 94 1 183 6 197 12 35 14 69 48 76 77 8 31 20 32
+30 3 11 -34 46 -66 89 -81 63 -21 348 -16 397 7 39 19 77 69 79 102 0 13 4 9
+11 -11 6 -16 22 -43 37 -59z"/>
+<path d="M2800 6798 c-19 -5 -41 -15 -48 -21 -7 -6 -29 -11 -48 -13 -74 -5
+-165 -96 -197 -198 -24 -76 -25 -221 -2 -270 19 -39 77 -83 105 -79 8 1 -1 -5
+-20 -13 -91 -41 -103 -77 -103 -294 0 -133 4 -172 16 -197 18 -34 57 -68 89
+-79 19 -6 18 -8 -12 -20 -46 -20 -78 -57 -86 -102 -9 -48 -9 -306 0 -352 11
+-55 70 -110 117 -110 21 0 21 -1 -5 -25 -93 -86 -50 -216 92 -276 59 -26 81
+-29 198 -30 137 0 176 17 216 95 l15 30 8 -25 c4 -13 17 -35 29 -47 43 -48 68
+-54 236 -54 87 1 174 4 193 7 43 8 94 56 105 99 l9 31 12 -36 c14 -42 44 -73
+86 -89 18 -7 94 -12 197 -12 191 0 226 10 262 71 21 37 23 40 25 67 1 12 8 10
+34 -10 25 -19 43 -24 83 -23 66 3 104 33 140 112 26 57 27 68 28 205 0 119 -3
+151 -18 178 -19 38 -69 72 -106 73 -19 0 -15 3 16 13 97 30 112 70 109 291 -1
+136 -5 176 -18 202 -20 38 -67 73 -99 73 -18 0 -15 4 17 19 47 22 78 54 92 96
+6 17 9 107 8 202 -1 164 -3 173 -26 207 -23 35 -80 66 -119 66 -18 0 -18 2 -4
+35 36 88 -17 177 -123 202 -22 6 -108 10 -190 9 -136 -1 -151 -3 -185 -24 -23
+-14 -42 -36 -50 -58 -12 -35 -28 -46 -28 -20 0 23 -50 76 -86 91 -26 10 -78
+13 -211 12 l-178 -2 -36 -28 c-35 -26 -52 -54 -62 -102 -4 -16 -5 -15 -6 5 -2
+42 -38 90 -84 110 -35 15 -69 18 -197 18 -85 0 -171 -5 -190 -10z m1097 -230
+c45 -50 60 -52 396 -59 20 0 20 3 4 -45 -10 -28 -13 -89 -12 -209 1 -161 3
+-172 26 -207 13 -20 40 -44 59 -54 l35 -17 -26 -11 c-83 -35 -96 -73 -94 -286
+1 -154 3 -179 20 -208 20 -34 73 -71 103 -73 9 0 0 -7 -20 -14 -81 -30 -100
+-70 -104 -220 -2 -60 -9 -131 -15 -156 l-13 -46 -43 25 c-42 23 -48 23 -225
+20 -174 -3 -185 -4 -217 -27 -18 -13 -40 -40 -49 -60 l-15 -36 -11 27 c-16 38
+-46 69 -83 84 -39 17 -328 19 -385 4 -43 -12 -97 -72 -99 -110 -1 -22 -3 -21
+-13 10 -26 82 -79 110 -205 110 -73 0 -92 4 -130 25 -23 14 -52 25 -63 25 -17
+0 -16 3 10 25 45 38 54 88 50 277 -3 156 -4 166 -28 201 -25 37 -64 62 -89 58
+-7 -1 -10 2 -6 8 3 6 14 11 24 11 27 0 79 55 91 97 8 24 11 100 8 208 -3 160
+-4 172 -26 200 -28 36 -56 56 -81 58 -22 1 -18 17 4 17 33 0 110 94 104 126
+-1 5 -1 36 0 70 2 99 0 98 203 99 154 1 180 4 214 22 39 20 71 63 74 98 1 13
+6 7 16 -19 17 -47 55 -81 103 -93 38 -9 321 -9 358 0 57 15 102 68 104 124 0
+24 2 22 14 -15 7 -24 22 -53 32 -64z"/>
+<path d="M5069 6800 c-14 -4 -36 -13 -50 -21 -13 -7 -39 -14 -58 -16 -83 -7
+-175 -110 -201 -225 -7 -32 -11 -93 -8 -144 4 -99 25 -142 79 -165 30 -12 39
+-29 15 -29 -23 0 -68 -42 -82 -77 -22 -52 -20 -362 2 -409 19 -40 78 -85 103
+-78 9 3 0 -3 -19 -13 -44 -23 -78 -55 -90 -88 -6 -14 -10 -105 -11 -201 0
+-161 2 -177 22 -213 20 -37 71 -71 106 -71 12 0 9 -6 -11 -25 -73 -67 -61
+-172 28 -240 63 -48 137 -66 263 -66 145 1 181 18 217 101 12 27 15 30 16 13
+0 -12 12 -35 26 -53 48 -56 67 -60 259 -61 161 0 178 1 213 21 44 25 72 65 73
+107 0 24 2 22 14 -16 31 -98 72 -114 292 -113 130 1 170 4 198 18 41 19 73 59
+81 103 l6 30 32 -23 c58 -42 136 -31 187 27 50 56 63 115 64 273 0 136 -1 142
+-27 181 -17 26 -40 46 -63 54 l-35 13 42 21 c31 14 49 32 64 62 20 39 22 57
+20 221 -1 167 -3 180 -24 210 -30 41 -60 62 -92 63 -21 0 -19 2 15 16 43 18
+79 54 93 93 5 14 9 104 8 200 -1 155 -4 179 -21 208 -22 37 -80 72 -120 72
+-25 0 -25 1 -11 28 28 55 14 123 -37 170 -42 40 -99 50 -268 48 -148 -1 -157
+-2 -191 -26 -38 -26 -73 -84 -62 -102 4 -7 2 -8 -4 -4 -7 4 -12 16 -12 26 0
+26 -47 78 -85 94 -24 10 -79 14 -206 13 -165 -2 -176 -3 -213 -26 -23 -15 -45
+-40 -56 -63 -17 -38 -18 -39 -24 -15 -10 40 -52 83 -93 95 -41 12 -322 14
+-364 2z m523 -249 c43 -31 84 -37 248 -36 192 1 217 9 259 85 l25 44 7 -28 c4
+-15 16 -37 26 -48 39 -43 71 -51 223 -54 144 -3 175 -6 184 -15 3 -3 -1 -21
+-7 -41 -9 -24 -12 -94 -12 -206 2 -169 2 -171 29 -206 28 -37 79 -70 90 -59 3
+4 6 1 6 -5 0 -6 -13 -13 -30 -17 -33 -7 -77 -53 -87 -93 -4 -15 -7 -101 -7
+-192 0 -195 10 -226 82 -265 l43 -23 -28 -10 c-75 -26 -94 -70 -99 -217 -1
+-60 -9 -132 -17 -159 -12 -43 -15 -46 -29 -33 -30 31 -90 39 -263 35 -159 -3
+-172 -4 -203 -26 -18 -13 -41 -40 -51 -60 -18 -35 -19 -36 -26 -11 -10 34 -44
+69 -82 85 -46 20 -350 20 -397 0 -42 -18 -86 -74 -87 -112 0 -26 -2 -24 -14
+14 -26 85 -74 112 -202 112 -70 0 -91 4 -131 25 -26 14 -53 25 -61 25 -10 0
+-6 9 11 28 15 15 32 40 37 55 14 36 14 330 1 378 -13 45 -53 87 -94 97 l-31 8
+35 12 c43 15 77 53 91 102 7 22 10 101 7 206 -4 192 -10 209 -81 246 l-41 20
+30 13 c66 28 94 83 94 186 0 103 1 104 208 104 195 1 231 11 267 82 l20 39 17
+-34 c10 -19 28 -42 40 -51z"/>
+<path d="M507 4459 c-16 -4 -35 -13 -42 -19 -8 -7 -29 -14 -47 -15 -18 -2 -45
+-8 -59 -13 -40 -16 -106 -89 -136 -151 -23 -48 -27 -72 -30 -165 -2 -96 0
+-113 18 -146 12 -21 37 -46 55 -56 36 -20 44 -34 19 -34 -25 0 -72 -53 -85
+-95 -8 -27 -11 -97 -8 -210 3 -194 11 -214 90 -254 31 -15 37 -21 21 -21 -29
+0 -83 -47 -99 -87 -17 -39 -19 -328 -4 -385 13 -44 73 -98 109 -98 l25 0 -26
+-27 c-56 -61 -64 -125 -23 -186 53 -78 154 -118 295 -119 152 -1 194 14 228
+83 17 35 21 38 27 21 10 -32 44 -71 78 -89 48 -24 358 -23 411 2 41 20 87 78
+80 104 -2 9 5 -3 16 -26 21 -43 57 -75 100 -88 13 -4 100 -8 192 -8 147 1 171
+3 200 20 40 23 78 77 78 110 l0 24 31 -23 c23 -17 44 -23 82 -23 69 0 111 30
+146 104 25 53 26 65 26 211 0 146 -1 157 -23 188 -13 18 -40 41 -60 51 -35 18
+-36 19 -11 26 34 10 68 44 85 84 17 40 20 326 4 381 -14 48 -43 80 -86 95
+l-36 12 29 10 c16 6 41 21 54 34 46 44 51 74 47 266 -3 169 -4 180 -26 208
+-28 35 -77 64 -111 65 -18 0 -22 4 -16 18 27 67 9 148 -42 186 -51 37 -166 48
+-400 37 -39 -1 -113 -69 -113 -102 0 -27 -16 -16 -24 16 -4 14 -16 35 -27 46
+-39 39 -84 46 -265 44 -147 -1 -175 -4 -203 -21 -34 -20 -76 -85 -63 -99 4 -5
+1 -5 -5 -1 -7 4 -13 13 -13 21 0 20 -50 75 -79 87 -30 13 -343 18 -384 7z
+m517 -243 c25 -32 99 -43 266 -41 186 3 218 13 253 81 9 17 14 34 11 37 -3 3
+0 8 6 12 6 3 9 3 8 -2 -4 -14 14 -57 31 -77 36 -41 70 -49 226 -53 213 -5 195
+0 178 -42 -11 -25 -14 -77 -14 -204 1 -152 3 -173 22 -212 16 -31 33 -48 62
+-61 l40 -18 -29 -10 c-34 -11 -71 -47 -84 -81 -6 -15 -10 -103 -10 -197 0
+-151 2 -177 20 -212 20 -42 65 -75 103 -77 15 -1 11 -4 -13 -11 -19 -5 -46
+-19 -58 -31 -44 -40 -53 -71 -53 -180 0 -118 -26 -230 -47 -204 -26 31 -85 39
+-263 36 -165 -4 -176 -5 -206 -28 -30 -23 -56 -67 -56 -97 0 -14 -5 -15 -6 -1
+0 4 -10 25 -22 47 -38 68 -78 80 -261 80 -85 0 -169 -3 -186 -6 -43 -9 -91
+-52 -106 -97 l-13 -39 -7 33 c-15 75 -79 109 -205 109 -74 1 -92 4 -126 25
+-22 14 -49 25 -59 25 -18 0 -17 2 6 28 14 15 31 37 38 50 13 26 17 300 6 367
+-9 50 -40 89 -86 109 l-35 14 30 12 c42 16 72 47 86 88 13 39 16 309 4 363
+-14 61 -66 115 -109 111 -24 -1 -18 4 35 31 59 30 81 76 81 167 0 114 0 114
+209 115 141 1 180 5 206 18 38 20 73 66 74 99 0 19 4 16 19 -17 11 -22 26 -48
+34 -59z"/>
+<path d="M2803 4460 c-18 -4 -40 -13 -48 -20 -9 -7 -28 -14 -44 -15 -78 -6
+-161 -85 -201 -192 -17 -45 -22 -79 -22 -151 1 -111 19 -156 75 -187 38 -21
+47 -35 23 -35 -27 0 -74 -50 -88 -93 -9 -29 -13 -90 -12 -204 2 -140 5 -167
+21 -195 21 -36 80 -81 94 -72 5 3 9 2 9 -3 -1 -4 -20 -17 -43 -29 -68 -33 -79
+-67 -80 -253 -1 -171 5 -216 31 -246 27 -33 64 -55 91 -55 l24 0 -27 -25 c-26
+-24 -54 -79 -51 -100 11 -99 75 -163 194 -195 58 -15 228 -16 274 -1 38 13 81
+55 93 93 6 20 7 20 20 -8 37 -83 71 -96 253 -97 190 -1 232 6 271 44 16 17 33
+42 36 56 6 24 7 24 28 -13 28 -51 79 -84 130 -85 222 -5 318 0 354 19 45 23
+76 72 81 127 1 6 4 5 9 -1 12 -19 70 -44 101 -44 61 0 106 31 140 96 30 57 38
+116 36 252 -2 102 -5 125 -23 154 -22 35 -68 68 -99 69 -10 0 -1 7 19 14 92
+34 105 71 104 295 -2 166 -3 178 -25 208 -12 18 -39 41 -59 51 -34 18 -35 20
+-16 28 38 15 79 58 90 93 5 19 10 112 9 206 0 165 -1 172 -25 207 -28 41 -68
+63 -120 66 -19 1 -20 3 -5 31 21 40 13 103 -19 144 -44 58 -96 71 -281 71
+-183 0 -212 -10 -243 -77 -17 -38 -32 -49 -32 -24 0 23 -49 75 -84 90 -23 9
+-82 13 -206 12 -166 -1 -177 -2 -214 -25 -24 -15 -45 -39 -56 -65 l-19 -40 -7
+29 c-8 37 -29 62 -69 83 -24 13 -64 17 -195 17 -91 1 -180 -2 -197 -5z m516
+-239 c40 -40 77 -47 251 -46 197 1 231 12 267 83 18 37 22 40 28 22 10 -31 55
+-80 84 -92 14 -6 96 -12 181 -15 158 -4 180 -5 180 -8 0 -2 -6 -20 -13 -41
+-10 -28 -13 -88 -12 -204 2 -158 8 -195 37 -231 17 -21 74 -50 82 -42 3 4 6 2
+6 -3 -1 -5 -20 -18 -43 -29 -29 -14 -48 -32 -62 -60 -19 -37 -21 -58 -20 -217
+1 -175 1 -177 28 -216 29 -40 61 -61 100 -63 14 -1 8 -5 -16 -11 -85 -23 -113
+-79 -112 -223 0 -73 -4 -113 -17 -147 -10 -27 -15 -48 -11 -48 3 0 4 -3 0 -6
+-3 -3 -20 5 -37 18 -31 22 -38 23 -223 23 -187 0 -193 -1 -226 -24 -18 -13
+-41 -42 -51 -63 l-17 -39 -7 28 c-10 36 -42 71 -85 89 -40 17 -325 20 -383 4
+-41 -12 -97 -72 -99 -105 0 -14 -5 -10 -16 15 -33 78 -78 100 -203 100 -75 0
+-94 4 -131 25 -24 14 -52 25 -62 25 -15 0 -13 5 10 24 48 40 56 82 51 272 -3
+142 -6 174 -21 199 -20 32 -67 64 -95 66 -9 0 -1 7 18 16 44 19 77 56 91 103
+7 22 10 101 8 206 -4 192 -10 208 -92 251 -32 17 -37 22 -20 23 29 0 83 47 99
+87 8 18 14 63 14 101 0 108 -4 106 201 107 145 1 180 4 211 19 39 19 77 69 79
+102 0 11 6 3 14 -18 7 -20 23 -46 34 -57z"/>
+<path d="M5085 4460 c-17 -4 -43 -14 -57 -24 -15 -10 -32 -15 -37 -12 -21 13
+-93 -28 -139 -80 -67 -75 -86 -133 -87 -265 0 -96 2 -109 25 -142 13 -20 34
+-39 45 -43 11 -4 29 -10 40 -13 17 -6 15 -9 -15 -21 -86 -36 -101 -80 -97
+-300 3 -189 12 -216 81 -252 l40 -20 -30 -13 c-33 -14 -65 -48 -81 -86 -7 -16
+-10 -93 -9 -205 1 -170 3 -181 24 -212 25 -34 69 -62 98 -62 15 0 13 -5 -8
+-27 -89 -94 -46 -216 97 -275 58 -24 92 -29 204 -30 74 0 108 5 136 18 39 18
+74 65 76 99 0 14 5 10 16 -15 20 -48 50 -77 91 -91 46 -15 347 -15 387 1 42
+16 72 47 86 88 l12 35 12 -35 c29 -85 72 -101 266 -100 170 0 216 6 244 30 31
+26 55 69 55 96 l0 25 36 -24 c65 -44 148 -29 197 37 44 59 57 117 57 259 0
+173 -17 213 -107 245 -34 12 -35 13 -11 14 34 0 87 44 104 87 10 23 14 82 14
+204 0 155 -2 175 -21 209 -24 43 -73 75 -109 72 -15 -1 -6 5 20 14 58 20 87
+48 100 93 5 20 10 110 10 199 0 131 -3 171 -16 198 -20 42 -62 73 -109 81 -29
+5 -35 9 -29 22 4 9 9 35 12 59 8 78 -44 140 -134 160 -22 5 -105 9 -185 8
+-168 -1 -199 -12 -235 -84 l-22 -42 -10 27 c-5 16 -19 38 -29 50 -39 45 -76
+51 -263 49 -150 -2 -180 -5 -207 -21 -33 -20 -77 -87 -65 -100 4 -5 1 -5 -5
+-1 -7 4 -13 13 -13 21 0 20 -50 75 -79 88 -29 12 -327 18 -376 7z m1090 -237
+c35 -37 74 -45 237 -48 86 -2 161 -6 167 -9 6 -4 4 -18 -6 -36 -12 -24 -14
+-66 -11 -213 3 -168 5 -184 25 -212 23 -33 76 -68 87 -58 3 3 6 2 6 -3 0 -5
+-18 -17 -40 -27 -28 -13 -45 -30 -59 -61 -19 -37 -21 -61 -21 -202 0 -87 5
+-175 10 -195 12 -43 46 -76 95 -94 l38 -12 -35 -7 c-38 -7 -81 -46 -97 -89 -6
+-16 -11 -79 -11 -142 0 -63 -4 -116 -9 -119 -5 -3 -12 -22 -16 -42 -6 -32 -8
+-35 -23 -22 -40 34 -78 40 -254 36 -194 -3 -220 -11 -255 -75 -18 -34 -33 -43
+-33 -19 0 25 -55 74 -95 86 -26 8 -101 11 -210 8 -192 -3 -200 -6 -246 -78
+-16 -25 -29 -38 -29 -28 0 25 -50 79 -87 94 -19 8 -69 14 -120 14 -76 1 -94 4
+-128 25 -22 14 -48 25 -59 25 -15 0 -13 5 13 32 17 17 34 48 38 67 8 42 8 314
+0 353 -12 56 -66 108 -114 108 -10 0 0 9 22 19 51 23 81 56 92 101 8 33 8 323
+0 362 -9 48 -92 118 -119 102 -6 -4 -8 -3 -4 4 3 6 19 13 35 17 61 13 91 69
+95 175 4 117 -1 115 209 115 155 1 177 3 207 21 39 22 83 80 74 98 -3 6 2 2
+10 -8 9 -11 16 -25 16 -31 0 -18 41 -52 80 -68 42 -16 350 -16 390 0 38 16 78
+61 86 96 l8 32 10 -35 c6 -20 20 -46 31 -57z m-188 -1695 c-3 -8 -6 -5 -6 6
+-1 11 2 17 5 13 3 -3 4 -12 1 -19z"/>
+<path d="M508 2177 c-18 -5 -40 -15 -49 -23 -8 -8 -27 -14 -42 -14 -68 0 -150
+-69 -193 -163 -26 -56 -29 -72 -29 -173 0 -129 9 -154 73 -195 41 -26 42 -28
+20 -34 -33 -10 -68 -45 -84 -82 -17 -39 -19 -328 -4 -385 13 -44 73 -98 110
+-98 21 -1 18 -3 -13 -15 -96 -34 -110 -75 -106 -306 4 -165 5 -176 28 -206 13
+-18 42 -39 64 -48 l40 -16 -21 -22 c-61 -65 -55 -154 15 -218 78 -73 176 -93
+401 -80 33 2 102 75 102 109 0 23 4 20 24 -24 19 -41 32 -55 67 -71 40 -18 62
+-20 220 -19 176 2 177 2 213 30 39 29 65 72 60 96 -3 8 4 -3 15 -25 20 -43 52
+-75 91 -92 15 -6 95 -10 200 -9 154 2 179 4 208 21 36 22 72 75 72 107 0 20 1
+20 26 3 65 -43 135 -36 191 18 54 51 68 110 68 282 0 142 -1 152 -23 180 -27
+34 -72 63 -90 57 -29 -9 -9 8 32 28 34 16 50 32 66 66 20 41 22 56 18 222 -3
+168 -4 179 -27 211 -13 18 -42 41 -64 51 l-39 18 29 6 c17 4 41 19 55 34 45
+49 50 77 46 264 -3 148 -6 177 -22 204 -22 36 -65 64 -104 68 -21 1 -26 7 -24
+21 13 91 13 103 -2 132 -39 76 -97 95 -297 95 -175 1 -210 -10 -246 -81 l-22
+-43 -14 34 c-17 40 -40 61 -87 80 -46 18 -355 17 -391 -2 -40 -21 -68 -51 -80
+-89 l-12 -36 -10 35 c-11 45 -57 87 -104 96 -53 10 -317 10 -355 1z m469 -159
+c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m642 -91 c39 -32 60 -36
+238 -39 78 -2 145 -6 149 -10 4 -5 2 -20 -5 -35 -13 -29 -17 -315 -6 -376 10
+-50 68 -106 112 -108 11 0 6 -5 -12 -11 -37 -13 -72 -44 -91 -81 -23 -43 -21
+-364 2 -412 18 -38 62 -75 93 -78 25 -2 16 -17 -9 -17 -28 0 -77 -46 -90 -85
+-6 -18 -11 -79 -12 -134 0 -69 -6 -119 -19 -158 -10 -32 -18 -53 -18 -47 -1 7
+-19 20 -42 31 -35 17 -62 19 -219 18 -177 -1 -178 -1 -213 -28 -19 -15 -41
+-40 -49 -57 -14 -32 -28 -40 -28 -15 0 27 -59 82 -97 92 -21 5 -113 9 -204 8
+-150 -1 -169 -3 -200 -22 -33 -21 -63 -66 -72 -108 -4 -16 -5 -15 -6 5 -2 37
+-36 87 -73 106 -23 12 -61 18 -128 20 -80 2 -103 6 -144 28 -27 14 -52 23 -57
+20 -5 -3 -9 -1 -9 3 0 5 9 14 21 21 41 26 50 73 50 252 1 214 -14 253 -107
+285 l-37 12 34 7 c42 8 80 41 98 82 14 34 19 299 7 370 -11 62 -63 113 -118
+115 -17 0 -13 4 17 15 79 29 106 77 107 189 1 105 -3 103 212 107 204 3 217 7
+261 76 24 37 31 39 41 10 4 -13 16 -33 28 -44 37 -38 90 -46 272 -43 158 4
+171 6 199 27 17 12 39 38 50 58 l19 35 11 -29 c7 -15 27 -40 44 -55z"/>
+<path d="M2801 2173 c-25 -6 -47 -16 -49 -22 -2 -6 -17 -11 -33 -11 -88 0
+-187 -99 -219 -219 -6 -24 -12 -82 -12 -130 -2 -116 22 -160 102 -195 25 -11
+29 -15 15 -16 -36 0 -92 -47 -105 -86 -14 -40 -18 -314 -7 -374 9 -46 57 -99
+98 -107 l31 -6 -33 -14 c-42 -18 -67 -40 -86 -78 -20 -38 -23 -340 -4 -398 13
+-38 65 -87 94 -87 27 0 28 -16 2 -40 -41 -38 -49 -118 -17 -173 20 -34 102
+-90 157 -108 23 -7 91 -13 160 -13 107 0 124 2 156 21 33 21 53 49 70 98 l7
+20 1 -20 c2 -36 41 -86 81 -104 34 -15 67 -18 213 -17 163 1 174 2 211 25 23
+15 45 40 56 64 l18 39 11 -34 c11 -34 44 -65 90 -84 30 -12 355 -12 386 1 36
+15 75 58 85 97 l11 37 32 -19 c47 -27 89 -30 134 -10 88 39 118 118 117 316 0
+133 -1 143 -24 177 -13 19 -40 43 -59 52 l-36 17 30 13 c37 16 69 51 82 90 6
+17 9 107 9 200 -2 156 -4 174 -23 205 -24 39 -69 70 -105 71 -25 1 -19 4 24
+13 37 8 84 56 96 97 8 31 8 333 0 370 -12 50 -60 89 -131 104 -27 5 -27 6 -12
+34 31 61 -3 154 -68 184 -49 24 -132 33 -270 31 -94 -2 -124 -6 -150 -21 -36
+-22 -79 -80 -71 -97 3 -6 -2 -2 -10 8 -9 11 -16 25 -16 31 0 20 -61 64 -98 71
+-48 9 -307 9 -352 0 -57 -11 -109 -69 -111 -123 -1 -24 -2 -22 -12 13 -29 101
+-66 117 -266 118 -87 1 -175 -4 -200 -11z m1104 -240 c32 -33 80 -42 242 -45
+83 -2 154 -6 158 -10 4 -3 1 -17 -6 -30 -15 -27 -20 -334 -7 -385 11 -41 62
+-92 101 -100 l31 -6 -37 -13 c-88 -31 -104 -77 -102 -299 1 -128 5 -166 18
+-192 17 -31 65 -73 86 -73 6 0 11 -4 11 -10 0 -5 -7 -10 -15 -10 -25 0 -83
+-59 -91 -93 -4 -18 -8 -75 -9 -127 -1 -52 -8 -115 -15 -140 -7 -25 -12 -51
+-11 -59 2 -9 -6 -7 -24 8 -42 33 -78 38 -256 36 -138 -1 -171 -4 -192 -18 -41
+-27 -65 -57 -73 -91 l-7 -31 -9 35 c-6 19 -20 45 -32 57 -44 43 -79 50 -262
+48 -160 -1 -173 -3 -208 -25 -23 -14 -45 -39 -56 -62 l-17 -40 -11 29 c-13 36
+-46 71 -80 85 -15 6 -68 12 -118 13 -75 2 -98 7 -135 27 -24 14 -50 23 -56 21
+-21 -7 -15 12 11 35 41 35 48 82 45 268 -4 158 -6 171 -27 202 -13 18 -40 41
+-60 51 -35 18 -36 19 -11 26 34 10 68 44 85 85 17 40 19 343 3 390 -12 32 -42
+62 -83 84 l-29 15 29 13 c68 30 94 80 94 181 0 107 -4 105 215 109 171 3 182
+4 214 27 18 13 41 42 51 65 l19 40 7 -29 c9 -39 40 -73 83 -91 40 -17 325 -20
+383 -4 45 13 98 71 99 108 0 24 2 23 17 -14 9 -22 26 -49 37 -61z"/>
+<path d="M5104 2180 c-23 -4 -53 -14 -67 -23 -15 -9 -38 -17 -52 -17 -66 0
+-149 -72 -193 -170 -23 -49 -26 -68 -26 -170 -1 -130 8 -152 82 -196 l37 -22
+-26 -7 c-35 -9 -74 -51 -87 -95 -7 -20 -10 -106 -9 -205 2 -162 3 -172 26
+-204 13 -18 42 -41 63 -51 l40 -17 -31 -11 c-40 -14 -67 -40 -85 -82 -11 -27
+-14 -78 -13 -211 2 -170 3 -177 27 -212 23 -33 38 -43 92 -61 16 -5 14 -9 -11
+-35 -29 -30 -43 -75 -37 -123 8 -67 103 -143 206 -164 80 -16 237 -11 277 9
+34 18 68 60 75 92 4 17 7 14 20 -15 19 -42 52 -74 93 -87 17 -6 107 -9 202 -8
+163 1 173 2 207 25 32 23 62 65 58 83 -1 4 2 7 8 7 5 0 12 -11 16 -24 8 -32
+51 -71 94 -84 20 -6 105 -10 200 -8 130 2 172 6 197 19 35 19 73 73 73 106 l0
+22 38 -20 c70 -37 122 -33 175 14 56 49 71 104 75 267 3 123 1 152 -14 183
+-19 41 -84 87 -111 80 -10 -3 2 4 27 15 92 43 100 67 100 288 0 159 -2 180
+-20 210 -22 35 -73 71 -105 73 -12 0 -6 5 15 11 46 13 88 53 101 98 6 21 9
+105 7 210 -3 156 -5 178 -23 202 -27 35 -69 59 -106 60 -23 1 -29 5 -23 17 14
+34 16 102 4 131 -17 41 -62 77 -112 90 -48 14 -253 18 -321 8 -74 -11 -125
+-60 -128 -123 l-1 -30 -8 34 c-10 44 -39 81 -80 105 -30 18 -53 20 -211 19
+-164 0 -180 -2 -212 -22 -40 -25 -71 -67 -70 -96 1 -12 -6 -6 -16 17 -24 52
+-47 75 -90 89 -37 13 -273 18 -347 9z m1070 -238 c37 -42 77 -51 224 -53 76 0
+150 -3 164 -6 26 -5 26 -5 11 -40 -11 -28 -14 -74 -11 -213 3 -201 8 -214 83
+-257 l39 -22 -27 -6 c-36 -9 -84 -66 -92 -108 -4 -19 -5 -110 -3 -203 2 -138
+6 -173 20 -192 20 -29 83 -73 92 -65 3 4 6 2 6 -4 0 -6 -12 -14 -27 -18 -32
+-8 -64 -39 -81 -78 -7 -16 -12 -72 -12 -128 0 -62 -6 -122 -16 -155 -15 -51
+-28 -67 -36 -44 -8 26 -81 36 -245 35 -135 -1 -174 -5 -200 -18 -31 -17 -73
+-65 -73 -86 0 -6 -4 -11 -10 -11 -5 0 -10 7 -10 15 0 24 -57 81 -92 91 -34 10
+-335 11 -375 1 -35 -9 -70 -39 -89 -77 l-17 -35 -11 26 c-30 71 -73 92 -196
+95 -79 2 -103 7 -144 28 -27 14 -54 23 -60 19 -6 -3 1 7 15 23 15 16 32 40 39
+53 15 29 20 327 7 381 -14 60 -68 109 -122 111 -19 1 -23 3 -10 6 11 2 29 6
+40 8 11 3 32 15 46 27 47 41 54 77 53 264 -1 160 -2 174 -23 208 -25 39 -66
+66 -103 66 -17 1 -13 4 15 14 78 28 108 77 111 180 3 120 -3 116 198 116 155
+0 176 2 216 22 33 16 49 31 61 59 9 22 18 39 21 39 3 0 13 -18 23 -40 13 -28
+30 -45 61 -59 37 -19 61 -21 207 -21 151 0 168 2 209 23 31 15 50 34 65 63 20
+40 20 40 29 15 5 -14 18 -37 30 -49z"/>
+</g>
+</svg>
diff --git a/tommy.rb b/tommy.rb
index c21e862..ad679dd 100644
--- a/tommy.rb
+++ b/tommy.rb
@@ -1,166 +1,171 @@
# -------------------------------------------------------------
# Tommy - Visualisation dashboard for Jenkins
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Author: Arfon Smitn (Zooniverse)
# Maintainer: Sebastien Santoro aka Dereckson
# Project: Nasqueron
# Created: 2011-09-14
# Dependencies: Sinatra
# -------------------------------------------------------------
require 'sinatra'
require 'rest-client'
require 'active_support/all'
require 'hashie'
require 'erb'
# -------------------------------------------------------------
# Table of contents
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# :: Environment
# :: Project class
# :: Controller
# :: Routes
# :: Helpers
#
# -------------------------------------------------------------
# -------------------------------------------------------------
# Environment
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HUDSON_URL = ENV['HUDSON_URL'] || 'http://username:password@my.hudsonurl.com'
# -------------------------------------------------------------
# Project class
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
##
# This class represents a defined or discrete hash for a Jenkins project.
class Project < Hashie::Dash
property :name
property :build_score
property :last_build_number
property :last_build_url
property :last_stable_build
property :health_report
property :last_complete_url
property :last_failed_url
property :colour
##
# Parses a job element of the Jenkins API.
# Returns a Project instance.
def self.parse_project(data)
project = Project.new(
name: data['displayName'].tr('-', ' '),
last_build_number: data['builds'].first['number'],
colour: data['color']
)
if data['healthReport']
project.build_score = data['healthReport'].first['score'].to_i
project.health_report = data['healthReport'].first['description']
end
unless data['lastStableBuild'].blank?
project.last_stable_build = data['lastStableBuild']['number']
end
urls = {
'lastBuild' => 'last_build_url=',
'lastCompletedBuild' => 'last_complete_url=',
'lastFailedBuild' => 'last_failed_url='
}
urls.each do |api_property, local_property|
next if data[api_property].blank?
project.send(local_property, data[api_property]['url'])
end
project
rescue NoMethodError
nil
end
##
# Parses a JSON API reply into an array of Project instances
def self.parse_incoming_json(json)
projects = []
json['jobs'].each do |job|
project = parse_project(job)
projects << project unless project.nil?
end
projects
end
##
# Determines if a build is green
def green?
last_stable_build == last_build_number
end
##
# Determines if a build is still building
def building?
colour.include?('anime')
end
end
# -------------------------------------------------------------
# Controller
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def prepare_dashboard
json = RestClient::Resource.new("#{HUDSON_URL}/api/json?depth=1")
@projects = Project.parse_incoming_json(JSON.parse(json.get))
erb :index
end
# -------------------------------------------------------------
# Routes
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
get '/' do
prepare_dashboard
end
+get '/manifest.json' do
+ content_type 'application/json'
+ erb :manifest
+end
+
get '/status' do
'ALIVE'
end
# -------------------------------------------------------------
# Helpers
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
helpers do
def css_scores
{
100 => 'best',
80 => 'better',
60 => 'good',
40 => 'bad',
0 => 'worse'
}
end
def css_for_score(score)
css_scores.each do |threshold, css_class|
return css_class if score >= threshold
end
raise 'Specify in scores a value for the lower score you can get.'
end
def css_for_project(project)
if project.green?
css_for_score(project.build_score)
elsif project.building?
'building'
else
'worst'
end
end
end
diff --git a/views/index.erb b/views/index.erb
index 9359c57..8079c2f 100644
--- a/views/index.erb
+++ b/views/index.erb
@@ -1,81 +1,90 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf8" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no" />
<meta http-equiv="refresh" content="30" />
<title>Tommy</title>
+ <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
+ <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32" />
+ <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16" />
+ <link rel="manifest" href="/manifest.json" />
+ <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5" />
+ <meta name="apple-mobile-web-app-title" content="Tommy" />
+ <meta name="application-name" content="Tommy" />
+ <meta name="theme-color" content="#ffffff" />
+
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrapper">
<% @projects.each do |project| %>
<% if project %>
<div class="project <%= css_for_project(project) %>">
<div class="heading">
<span class="name"><%= project.name %></span>
<a href="<%= project.last_build_url %>" target="_blank" class="build-number"><%= project.last_build_number %></a>
</div>
<div class="details">
<div class="health"><%= project.health_report %></div>
<div class="actions">
<a href="<%= project.last_build_url %>" target="_blank">Build</a>
<a href="<%= project.last_complete_url %>" target="_blank">Complete</a>
<a href="<%= project.last_failed_url %>" target="_blank">Failed</a>
</div>
</div>
</div>
<% else %>
<!--No project-->
<% end %>
<% end %>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
var DETAILS_CLASS = 'with-details';
var projects = $('.project');
var doc = $(document);
function toggleDetails(e) {
var target = $(this);
var hadDetails = target.hasClass(DETAILS_CLASS);
projects.removeClass(DETAILS_CLASS);
if (!hadDetails) target.addClass(DETAILS_CLASS);
}
doc.on('click', '.project', toggleDetails);
doc.on('touchstart', '.project', toggleDetails);
doc.on('keydown', function(e) {
if (e.keyCode === 27) projects.removeClass(DETAILS_CLASS);
});
// Always take up the full screen.
function adjustProjectHeights() {
var _firstTop = NaN;
for (var howManyAcross = 0; howManyAcross < projects.length; howManyAcross++) {
var offsetTop = $(projects[howManyAcross]).offset().top;
if (isNaN(_firstTop)) _firstTop = offsetTop;
if (offsetTop !== _firstTop) break;
}
projects.height(projects.parent().height() / (projects.length / howManyAcross));
}
$(window).on('resize', adjustProjectHeights);
adjustProjectHeights();
// An iPod driving an HD monitor will stretch the image.
// Compensate by shrinking it a bit.
if (~location.search.indexOf('ipad')) $('html').addClass('ipad-scale');
</script>
</body>
</html>
diff --git a/views/manifest.erb b/views/manifest.erb
new file mode 100644
index 0000000..8f187d3
--- /dev/null
+++ b/views/manifest.erb
@@ -0,0 +1,18 @@
+{
+ "name": "Tommy",
+ "icons": [
+ {
+ "src": "\/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image\/png"
+ },
+ {
+ "src": "\/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image\/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "start_url": "<%= request.base_url %>",
+ "display": "standalone"
+}
File Metadata
Details
Attached
Mime Type
image/svg+xml
Expires
Mon, Nov 18, 13:50 (2 d)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2249455
Default Alt Text
(30 KB)
Attached To
Mode
rTOMMY Tommy
Attached
Detach File
Event Timeline
Log In to Comment