@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Tokens v1

Summary:
Features!

- Giving tokens.
- Taking tokens back.
- Not giving tokens.

Test Plan: See screenshots.

Reviewers: chad, vrana

Reviewed By: chad

CC: aran, btrahan

Maniphest Tasks: T2541

Differential Revision: https://secure.phabricator.com/D4964

+1758 -452
+8 -3
externals/javelinjs/src/lib/Workflow.js
··· 88 88 return; 89 89 } 90 90 91 - var t = event.getTarget(); 91 + // Get the button (which is sometimes actually another tag, like an <a />) 92 + // which triggered the event. In particular, this makes sure we get the 93 + // right node if there is a <button> with an <img /> inside it or 94 + // or something similar. 95 + var t = event.getNode('jx-workflow-button') || 96 + event.getNode('tag:button'); 92 97 if (t.name == '__cancel__' || t.name == '__close__') { 93 98 JX.Workflow._pop(); 94 99 } else { 95 - 96 100 var form = event.getNode('jx-dialog'); 97 101 var data = JX.DOM.convertFormToListOfPairs(form); 98 - data.push([t.name, true]); 102 + 103 + data.push([t.name, t.value || true]); 99 104 100 105 var active = JX.Workflow._getActiveWorkflow(); 101 106 var e = active.invoke('submit', {form: form, data: data});
+156 -156
resources/sprite/manifest/apps-large.json
··· 4 4 "app-application-blue-large" : { 5 5 "name" : "app-application-blue-large", 6 6 "rule" : ".app-application-blue-large, .phabricator-crumb-view:hover .app-application-dark-large", 7 - "hash" : "80f42a283979cef89577721ca6d9cdef" 7 + "hash" : "c8e0319f0c8a3c19bb74391785149424" 8 8 }, 9 9 "app-application-dark-large" : { 10 10 "name" : "app-application-dark-large", 11 11 "rule" : ".app-application-dark-large", 12 - "hash" : "8ab1619bcb768cc1b85106b077d29522" 12 + "hash" : "a5a904b67bdd26c15b8df07b0b0cee1a" 13 13 }, 14 14 "app-application-glow-large" : { 15 15 "name" : "app-application-glow-large", 16 16 "rule" : ".app-application-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-application-light-large", 17 - "hash" : "26aedaf7940300f18eb0ef59566a0988" 17 + "hash" : "04cd8ab1f4785d33d6c9c829dce35cb6" 18 18 }, 19 19 "app-application-light-large" : { 20 20 "name" : "app-application-light-large", 21 21 "rule" : ".app-application-light-large", 22 - "hash" : "09d4ef0cb36255291693971754ec55ee" 22 + "hash" : "8b071cf0efedda7c8c772829d31453ea" 23 23 }, 24 24 "app-audit-blue-large" : { 25 25 "name" : "app-audit-blue-large", 26 26 "rule" : ".app-audit-blue-large, .phabricator-crumb-view:hover .app-audit-dark-large", 27 - "hash" : "05941dc7d5ff156c0e899c6345f6833a" 27 + "hash" : "cfb6e6c27d6bf4bbf2e07c8d284948d7" 28 28 }, 29 29 "app-audit-dark-large" : { 30 30 "name" : "app-audit-dark-large", 31 31 "rule" : ".app-audit-dark-large", 32 - "hash" : "cbf8e6c5a580bd3b5169f30d3cd0ec6a" 32 + "hash" : "0880246fc6aa5d0cec823166af5b388f" 33 33 }, 34 34 "app-audit-glow-large" : { 35 35 "name" : "app-audit-glow-large", 36 36 "rule" : ".app-audit-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-audit-light-large", 37 - "hash" : "5ab43e357c123c05a9db85a964b20252" 37 + "hash" : "2f3896e45a05d55c3a95440dbeac9187" 38 38 }, 39 39 "app-audit-light-large" : { 40 40 "name" : "app-audit-light-large", 41 41 "rule" : ".app-audit-light-large", 42 - "hash" : "aa853bebb7a315b994f1527247e3b362" 42 + "hash" : "8dd753f716233d2f6edf553df4fde942" 43 43 }, 44 44 "app-calendar-blue-large" : { 45 45 "name" : "app-calendar-blue-large", 46 46 "rule" : ".app-calendar-blue-large, .phabricator-crumb-view:hover .app-calendar-dark-large", 47 - "hash" : "9e530feec2926878ee7eaa8a04a8607b" 47 + "hash" : "a05add9fa18df8a98cf2735cf27ec6e1" 48 48 }, 49 49 "app-calendar-dark-large" : { 50 50 "name" : "app-calendar-dark-large", 51 51 "rule" : ".app-calendar-dark-large", 52 - "hash" : "65de91c173d169bbf407c9e7cefa9715" 52 + "hash" : "5c98faf324152ec55bad6ac76f77ec00" 53 53 }, 54 54 "app-calendar-glow-large" : { 55 55 "name" : "app-calendar-glow-large", 56 56 "rule" : ".app-calendar-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-calendar-light-large", 57 - "hash" : "1dc738045b09476feebe5e705a61b7a9" 57 + "hash" : "d1a7c623c5b3d902a389fc2ea8941858" 58 58 }, 59 59 "app-calendar-light-large" : { 60 60 "name" : "app-calendar-light-large", 61 61 "rule" : ".app-calendar-light-large", 62 - "hash" : "043dab56a011f84f5affc2c7c13e3a39" 62 + "hash" : "466b97737778eff91ebd9afabac6e5a6" 63 63 }, 64 64 "app-conduit-blue-large" : { 65 65 "name" : "app-conduit-blue-large", 66 66 "rule" : ".app-conduit-blue-large, .phabricator-crumb-view:hover .app-conduit-dark-large", 67 - "hash" : "4ab937882a119bacc0206029cbd7919d" 67 + "hash" : "ed8208ab196da7da6160edbdb0be118a" 68 68 }, 69 69 "app-conduit-dark-large" : { 70 70 "name" : "app-conduit-dark-large", 71 71 "rule" : ".app-conduit-dark-large", 72 - "hash" : "34de5192c69af7a9cf3941f7b5cb088e" 72 + "hash" : "bad7559ed9928596c0241d8490e67422" 73 73 }, 74 74 "app-conduit-glow-large" : { 75 75 "name" : "app-conduit-glow-large", 76 76 "rule" : ".app-conduit-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-conduit-light-large", 77 - "hash" : "b89b969a7fba76d39c768ac8de19c964" 77 + "hash" : "072c3ca188a60e9ee08c6eb36b8628c9" 78 78 }, 79 79 "app-conduit-light-large" : { 80 80 "name" : "app-conduit-light-large", 81 81 "rule" : ".app-conduit-light-large", 82 - "hash" : "a2fd3cfe6e4e46d589e0e99f52e7f6f0" 82 + "hash" : "92047e758fac063dfb0608863ee66b7e" 83 83 }, 84 84 "app-conpherence-blue-large" : { 85 85 "name" : "app-conpherence-blue-large", 86 86 "rule" : ".app-conpherence-blue-large, .phabricator-crumb-view:hover .app-conpherence-dark-large", 87 - "hash" : "efcf3788ac60484d5920b37c1560e565" 87 + "hash" : "6b84241639e4755b450085f7eeb30cb1" 88 88 }, 89 89 "app-conpherence-dark-large" : { 90 90 "name" : "app-conpherence-dark-large", 91 91 "rule" : ".app-conpherence-dark-large", 92 - "hash" : "2722117e3da8c2dbc478d957fb21ca53" 92 + "hash" : "d9ced45f6ce7ffec0a0edb17c5e63834" 93 93 }, 94 94 "app-conpherence-glow-large" : { 95 95 "name" : "app-conpherence-glow-large", 96 96 "rule" : ".app-conpherence-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-conpherence-light-large", 97 - "hash" : "efa3c29ad40680fca2d62e0b180e709f" 97 + "hash" : "aa5d889f5d46f3b7cefc766ae5c7b904" 98 98 }, 99 99 "app-conpherence-light-large" : { 100 100 "name" : "app-conpherence-light-large", 101 101 "rule" : ".app-conpherence-light-large", 102 - "hash" : "a79e5f0094caf9f012f3e9d7a10f2bac" 102 + "hash" : "d85a049c1742fec1f95a8ebb6ca5c944" 103 103 }, 104 104 "app-countdown-blue-large" : { 105 105 "name" : "app-countdown-blue-large", 106 106 "rule" : ".app-countdown-blue-large, .phabricator-crumb-view:hover .app-countdown-dark-large", 107 - "hash" : "a4079b8e55924b7590011b35ba9bfdb0" 107 + "hash" : "d44b7acae6b6b052ac869f0176b66b89" 108 108 }, 109 109 "app-countdown-dark-large" : { 110 110 "name" : "app-countdown-dark-large", 111 111 "rule" : ".app-countdown-dark-large", 112 - "hash" : "25547923eb9927ed0c30804fafd471d3" 112 + "hash" : "dc7df8202a5fa7baf17fd446a9b5c4c5" 113 113 }, 114 114 "app-countdown-glow-large" : { 115 115 "name" : "app-countdown-glow-large", 116 116 "rule" : ".app-countdown-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-countdown-light-large", 117 - "hash" : "472fcd5cf9f292b0d2f9f275541fed18" 117 + "hash" : "3b972002d629a49a4eca9049a9b2c6ae" 118 118 }, 119 119 "app-countdown-light-large" : { 120 120 "name" : "app-countdown-light-large", 121 121 "rule" : ".app-countdown-light-large", 122 - "hash" : "24bac143e049862bed161d819990cee0" 122 + "hash" : "8f3814f70c1cb0475dd4678cc8937d91" 123 123 }, 124 124 "app-daemon-blue-large" : { 125 125 "name" : "app-daemon-blue-large", 126 126 "rule" : ".app-daemon-blue-large, .phabricator-crumb-view:hover .app-daemon-dark-large", 127 - "hash" : "beb6586864ef67a7bd7a9a159b8c2a56" 127 + "hash" : "c922a7e7ec9467ca48b2a2573904b7ce" 128 128 }, 129 129 "app-daemon-dark-large" : { 130 130 "name" : "app-daemon-dark-large", 131 131 "rule" : ".app-daemon-dark-large", 132 - "hash" : "cf2e12b2967d155c437862bbb9ce2d86" 132 + "hash" : "b2e566baac0c579563bd5bd700deb41b" 133 133 }, 134 134 "app-daemon-glow-large" : { 135 135 "name" : "app-daemon-glow-large", 136 136 "rule" : ".app-daemon-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-daemon-light-large", 137 - "hash" : "1728089df503ec805b42e262b196b616" 137 + "hash" : "1c8e2776b9b984b804f6dca073f101eb" 138 138 }, 139 139 "app-daemon-light-large" : { 140 140 "name" : "app-daemon-light-large", 141 141 "rule" : ".app-daemon-light-large", 142 - "hash" : "44328612154fbf1a2f0f6ff28cd23521" 142 + "hash" : "9c778b43f9f7380fc9bd862c097bbaa8" 143 143 }, 144 144 "app-differential-blue-large" : { 145 145 "name" : "app-differential-blue-large", 146 146 "rule" : ".app-differential-blue-large, .phabricator-crumb-view:hover .app-differential-dark-large", 147 - "hash" : "9491284c8cbf77df0795bdf9cd16651e" 147 + "hash" : "59049df6a30c816ea68d3025da79a091" 148 148 }, 149 149 "app-differential-dark-large" : { 150 150 "name" : "app-differential-dark-large", 151 151 "rule" : ".app-differential-dark-large", 152 - "hash" : "a4b2ac4d4f697896e3abe9e58501fea5" 152 + "hash" : "fd1e0f1fa97b00c7409ebfdc56cf4865" 153 153 }, 154 154 "app-differential-glow-large" : { 155 155 "name" : "app-differential-glow-large", 156 156 "rule" : ".app-differential-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-differential-light-large", 157 - "hash" : "d7e777585cc826becb64042f8bb31fc5" 157 + "hash" : "3997a58a26389e8ede8022fd05cf8b43" 158 158 }, 159 159 "app-differential-light-large" : { 160 160 "name" : "app-differential-light-large", 161 161 "rule" : ".app-differential-light-large", 162 - "hash" : "a763d63d22cac8226d8bd5656221a91b" 162 + "hash" : "b5c750e09f57a787e89f32820f791c4a" 163 163 }, 164 164 "app-diffusion-blue-large" : { 165 165 "name" : "app-diffusion-blue-large", 166 166 "rule" : ".app-diffusion-blue-large, .phabricator-crumb-view:hover .app-diffusion-dark-large", 167 - "hash" : "35e35c07ca1a151c810bb38a90496a2d" 167 + "hash" : "b982cfacfde43d3267082bca236bc72c" 168 168 }, 169 169 "app-diffusion-dark-large" : { 170 170 "name" : "app-diffusion-dark-large", 171 171 "rule" : ".app-diffusion-dark-large", 172 - "hash" : "5b3752babd557f2c9bbc0120bd9a0747" 172 + "hash" : "2eb71cde4af83347efdee542f4cadd8e" 173 173 }, 174 174 "app-diffusion-glow-large" : { 175 175 "name" : "app-diffusion-glow-large", 176 176 "rule" : ".app-diffusion-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diffusion-light-large", 177 - "hash" : "a5a682fffa03d4cdae9a86b8c79d1a81" 177 + "hash" : "55873c2e30e693e7bde0f4a90045064d" 178 178 }, 179 179 "app-diffusion-light-large" : { 180 180 "name" : "app-diffusion-light-large", 181 181 "rule" : ".app-diffusion-light-large", 182 - "hash" : "1f04606fe4f0650982327bf09bf5adc0" 182 + "hash" : "6eeb6f6df3ecd1ee923081b2d82f0505" 183 183 }, 184 184 "app-diviner-blue-large" : { 185 185 "name" : "app-diviner-blue-large", 186 186 "rule" : ".app-diviner-blue-large, .phabricator-crumb-view:hover .app-diviner-dark-large", 187 - "hash" : "97f1242c914315cf773c27bbec964335" 187 + "hash" : "bda64f504c0c2c34125758bd01c80e05" 188 188 }, 189 189 "app-diviner-dark-large" : { 190 190 "name" : "app-diviner-dark-large", 191 191 "rule" : ".app-diviner-dark-large", 192 - "hash" : "c4f0550826f60fcd48d6ebcd340184b4" 192 + "hash" : "786a865464564d66d458557c909a77ea" 193 193 }, 194 194 "app-diviner-glow-large" : { 195 195 "name" : "app-diviner-glow-large", 196 196 "rule" : ".app-diviner-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diviner-light-large", 197 - "hash" : "7f7f0e1886036d894a5b22b72872ad06" 197 + "hash" : "d173b3a659a2a4b5af5890ba70e827d1" 198 198 }, 199 199 "app-diviner-light-large" : { 200 200 "name" : "app-diviner-light-large", 201 201 "rule" : ".app-diviner-light-large", 202 - "hash" : "b13413ada716fa7d3449c38b11decd5d" 202 + "hash" : "c515bc52cb560adebce1e84bb5d917ce" 203 203 }, 204 204 "app-drydock-blue-large" : { 205 205 "name" : "app-drydock-blue-large", 206 206 "rule" : ".app-drydock-blue-large, .phabricator-crumb-view:hover .app-drydock-dark-large", 207 - "hash" : "a63aaba405583e356f00af6bc1dedfad" 207 + "hash" : "ba82e330a78dd60df033560e083601cf" 208 208 }, 209 209 "app-drydock-dark-large" : { 210 210 "name" : "app-drydock-dark-large", 211 211 "rule" : ".app-drydock-dark-large", 212 - "hash" : "a97be15640a38db803cc03215968e856" 212 + "hash" : "7a41b9668c77b85b8acf048d9e61c50a" 213 213 }, 214 214 "app-drydock-glow-large" : { 215 215 "name" : "app-drydock-glow-large", 216 216 "rule" : ".app-drydock-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-drydock-light-large", 217 - "hash" : "d7beac10376044ffda0adbe6ed01e645" 217 + "hash" : "f5866c62ecbc94ecacd1563d2780677d" 218 218 }, 219 219 "app-drydock-light-large" : { 220 220 "name" : "app-drydock-light-large", 221 221 "rule" : ".app-drydock-light-large", 222 - "hash" : "712c8fa45f964e0c4cbb69321fd1fded" 222 + "hash" : "2c1ce32d5d5291e7d3d3d6e9323a2a65" 223 223 }, 224 224 "app-fact-blue-large" : { 225 225 "name" : "app-fact-blue-large", 226 226 "rule" : ".app-fact-blue-large, .phabricator-crumb-view:hover .app-fact-dark-large", 227 - "hash" : "4b07b51e2178f12533c04c55d522d9e5" 227 + "hash" : "1e2b911cb36b0d44384487e348892ccc" 228 228 }, 229 229 "app-fact-dark-large" : { 230 230 "name" : "app-fact-dark-large", 231 231 "rule" : ".app-fact-dark-large", 232 - "hash" : "6040fe830d8f0868cdb38ee2b8ee16ac" 232 + "hash" : "5fb4a988baad433e9900f1a814b89caa" 233 233 }, 234 234 "app-fact-glow-large" : { 235 235 "name" : "app-fact-glow-large", 236 236 "rule" : ".app-fact-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-fact-light-large", 237 - "hash" : "691ab101af38d4f06421ca0b22e463d9" 237 + "hash" : "5bd7e5f2adfa0935ae97270139ec4912" 238 238 }, 239 239 "app-fact-light-large" : { 240 240 "name" : "app-fact-light-large", 241 241 "rule" : ".app-fact-light-large", 242 - "hash" : "8253f813361ba065866ee6e6e2077320" 242 + "hash" : "3bc45d399dad8ec8d55873714c42c1d7" 243 243 }, 244 244 "app-feed-blue-large" : { 245 245 "name" : "app-feed-blue-large", 246 246 "rule" : ".app-feed-blue-large, .phabricator-crumb-view:hover .app-feed-dark-large", 247 - "hash" : "462246f99422c86301b7d4faa67d9488" 247 + "hash" : "3bcdec795b38002644a8009c927a0acc" 248 248 }, 249 249 "app-feed-dark-large" : { 250 250 "name" : "app-feed-dark-large", 251 251 "rule" : ".app-feed-dark-large", 252 - "hash" : "0eecff752dc5dde55e7feaa52b7ee7d0" 252 + "hash" : "e83834eccc699399b604069b95465cff" 253 253 }, 254 254 "app-feed-glow-large" : { 255 255 "name" : "app-feed-glow-large", 256 256 "rule" : ".app-feed-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-feed-light-large", 257 - "hash" : "45fe559a997e540933c184ae570a6ddc" 257 + "hash" : "ca2fb9a2cd437b465f5d912a4d26f3e5" 258 258 }, 259 259 "app-feed-light-large" : { 260 260 "name" : "app-feed-light-large", 261 261 "rule" : ".app-feed-light-large", 262 - "hash" : "2ec6e12956fe1e1b746261bb3d0a0d36" 262 + "hash" : "e3a8add13539550ddaab62f84b30dd66" 263 263 }, 264 264 "app-files-blue-large" : { 265 265 "name" : "app-files-blue-large", 266 266 "rule" : ".app-files-blue-large, .phabricator-crumb-view:hover .app-files-dark-large", 267 - "hash" : "f9217c49be154a830303285ae64790c8" 267 + "hash" : "4505af3a9261a1ee4e00bf1d046286dd" 268 268 }, 269 269 "app-files-dark-large" : { 270 270 "name" : "app-files-dark-large", 271 271 "rule" : ".app-files-dark-large", 272 - "hash" : "78fb66b9edc99c3694325548582f0506" 272 + "hash" : "1d229c79f3b8301ca1ee38ccd9c7c142" 273 273 }, 274 274 "app-files-glow-large" : { 275 275 "name" : "app-files-glow-large", 276 276 "rule" : ".app-files-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-files-light-large", 277 - "hash" : "cabf071ace59043fc877f1e962109c83" 277 + "hash" : "4bd7617617d0af975282bdd9a399d0ab" 278 278 }, 279 279 "app-files-light-large" : { 280 280 "name" : "app-files-light-large", 281 281 "rule" : ".app-files-light-large", 282 - "hash" : "ee5503d0684ea20be40023a29589d322" 282 + "hash" : "0d8bf609759312d89e2a4b148f0701d8" 283 283 }, 284 284 "app-flags-blue-large" : { 285 285 "name" : "app-flags-blue-large", 286 286 "rule" : ".app-flags-blue-large, .phabricator-crumb-view:hover .app-flags-dark-large", 287 - "hash" : "8bbdefdaba30bf6a020f8515ee33d452" 287 + "hash" : "a6f52b520f88e4ef60b7a76fb3c2c597" 288 288 }, 289 289 "app-flags-dark-large" : { 290 290 "name" : "app-flags-dark-large", 291 291 "rule" : ".app-flags-dark-large", 292 - "hash" : "c6824e1362ec59ccf9ad8f451da466c1" 292 + "hash" : "51307234bb3c309b3ea69381e0b72b16" 293 293 }, 294 294 "app-flags-glow-large" : { 295 295 "name" : "app-flags-glow-large", 296 296 "rule" : ".app-flags-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-flags-light-large", 297 - "hash" : "e728b1018c62d24efa5d416d138cb671" 297 + "hash" : "75c1c107f4e750ef27bf50b4b51b0e00" 298 298 }, 299 299 "app-flags-light-large" : { 300 300 "name" : "app-flags-light-large", 301 301 "rule" : ".app-flags-light-large", 302 - "hash" : "4a40dc3e18011a8283840e5dfbe14dc9" 302 + "hash" : "8c198ba5bcd146595870bab777d4992e" 303 303 }, 304 304 "app-help-blue-large" : { 305 305 "name" : "app-help-blue-large", 306 306 "rule" : ".app-help-blue-large, .phabricator-crumb-view:hover .app-help-dark-large", 307 - "hash" : "703f8c674cdd22f1314ffe8977acf35b" 307 + "hash" : "a74c4f436b2e70c0e06f4224953d064a" 308 308 }, 309 309 "app-help-dark-large" : { 310 310 "name" : "app-help-dark-large", 311 311 "rule" : ".app-help-dark-large", 312 - "hash" : "601aaf7047f9db41baf7e3393b0d7aeb" 312 + "hash" : "3cbd366c4b5758e45ef07507c70f68c0" 313 313 }, 314 314 "app-help-glow-large" : { 315 315 "name" : "app-help-glow-large", 316 316 "rule" : ".app-help-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-help-light-large", 317 - "hash" : "1a2928f28cbfdcc31f411e7d2dc26447" 317 + "hash" : "c795358a116961342b206821a1b8038b" 318 318 }, 319 319 "app-help-light-large" : { 320 320 "name" : "app-help-light-large", 321 321 "rule" : ".app-help-light-large", 322 - "hash" : "c17b8e6228f844777177c5070e17dd91" 322 + "hash" : "722eceffe63605b00a5b957b5f40db98" 323 323 }, 324 324 "app-herald-blue-large" : { 325 325 "name" : "app-herald-blue-large", 326 326 "rule" : ".app-herald-blue-large, .phabricator-crumb-view:hover .app-herald-dark-large", 327 - "hash" : "4bf9b4b872e7207d66c6e80dcad47b0e" 327 + "hash" : "9edfe47e8f1f2c4f1071f4d8b6ed346d" 328 328 }, 329 329 "app-herald-dark-large" : { 330 330 "name" : "app-herald-dark-large", 331 331 "rule" : ".app-herald-dark-large", 332 - "hash" : "e19fd614bf5f904603517df957165b22" 332 + "hash" : "4b7a3ab5e0b6a04224ccb6e520e73d6e" 333 333 }, 334 334 "app-herald-glow-large" : { 335 335 "name" : "app-herald-glow-large", 336 336 "rule" : ".app-herald-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-herald-light-large", 337 - "hash" : "13ef725e4f2da68211cf9ab17740c723" 337 + "hash" : "22beef0629ee517ba1a2b822ed440d0c" 338 338 }, 339 339 "app-herald-light-large" : { 340 340 "name" : "app-herald-light-large", 341 341 "rule" : ".app-herald-light-large", 342 - "hash" : "81af2b9899db0b5c877d96016ddfa1a1" 342 + "hash" : "65bbeb68fd051b77f4871aafe2994f56" 343 343 }, 344 344 "app-home-blue-large" : { 345 345 "name" : "app-home-blue-large", 346 346 "rule" : ".app-home-blue-large, .phabricator-crumb-view:hover .app-home-dark-large", 347 - "hash" : "7011cb276b9d7d1f042d2f0393a74312" 347 + "hash" : "7df64082c33dcc3d2263772c0393be70" 348 348 }, 349 349 "app-home-dark-large" : { 350 350 "name" : "app-home-dark-large", 351 351 "rule" : ".app-home-dark-large", 352 - "hash" : "6b7f677ad630593900132f6271c41cb4" 352 + "hash" : "79acb839094adcb3ad94567c054801eb" 353 353 }, 354 354 "app-home-glow-large" : { 355 355 "name" : "app-home-glow-large", 356 356 "rule" : ".app-home-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-home-light-large", 357 - "hash" : "8b61be58e6a4f0e9e73434c40844260b" 357 + "hash" : "5af620ae48ba98ee4ee594c32ba761cb" 358 358 }, 359 359 "app-home-light-large" : { 360 360 "name" : "app-home-light-large", 361 361 "rule" : ".app-home-light-large", 362 - "hash" : "f0740b16cd3746a1234070f1785c03eb" 362 + "hash" : "181a71639319f3beda59809963384250" 363 363 }, 364 364 "app-logo-blue-large" : { 365 365 "name" : "app-logo-blue-large", 366 366 "rule" : ".app-logo-blue-large, .phabricator-crumb-view:hover .app-logo-dark-large", 367 - "hash" : "64a8124698f9441f50230f3a63364dd7" 367 + "hash" : "025f46665b079f5899ec53be09165d09" 368 368 }, 369 369 "app-logo-dark-large" : { 370 370 "name" : "app-logo-dark-large", 371 371 "rule" : ".app-logo-dark-large", 372 - "hash" : "8023a60fcba24c3f200214152a62a2c3" 372 + "hash" : "20524d2868b7b57423aa8dc27b284cac" 373 373 }, 374 374 "app-logo-glow-large" : { 375 375 "name" : "app-logo-glow-large", 376 376 "rule" : ".app-logo-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-logo-light-large", 377 - "hash" : "c742c782b92cc5fecdc1a9747568ad70" 377 + "hash" : "3969545781a17ec856bacec4ed110506" 378 378 }, 379 379 "app-logo-light-large" : { 380 380 "name" : "app-logo-light-large", 381 381 "rule" : ".app-logo-light-large", 382 - "hash" : "52fc06fb90f7ec1c29498069b1a059b2" 382 + "hash" : "bd1b66ffad9ee26019738fc00a7eb343" 383 383 }, 384 384 "app-macro-blue-large" : { 385 385 "name" : "app-macro-blue-large", 386 386 "rule" : ".app-macro-blue-large, .phabricator-crumb-view:hover .app-macro-dark-large", 387 - "hash" : "50c14fec9a7f913c8aa4a2793bf2867c" 387 + "hash" : "a6116a196718bf6cd5337b4c49de710e" 388 388 }, 389 389 "app-macro-dark-large" : { 390 390 "name" : "app-macro-dark-large", 391 391 "rule" : ".app-macro-dark-large", 392 - "hash" : "890cde6b9407d00c6394d446974674ff" 392 + "hash" : "583a495f319fb63f99400b0197832dce" 393 393 }, 394 394 "app-macro-glow-large" : { 395 395 "name" : "app-macro-glow-large", 396 396 "rule" : ".app-macro-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-macro-light-large", 397 - "hash" : "a3aaa9ebca64e5659e8c3c4eebdedd7a" 397 + "hash" : "16d2c3aeabb43a51bb5742c67c4b92a1" 398 398 }, 399 399 "app-macro-light-large" : { 400 400 "name" : "app-macro-light-large", 401 401 "rule" : ".app-macro-light-large", 402 - "hash" : "7dcba4f0560b9e197849f5540b7ec66d" 402 + "hash" : "b073066348826c93f57ba76f746e5c7e" 403 403 }, 404 404 "app-mail-blue-large" : { 405 405 "name" : "app-mail-blue-large", 406 406 "rule" : ".app-mail-blue-large, .phabricator-crumb-view:hover .app-mail-dark-large", 407 - "hash" : "a0a94c194794bb435ea3152ecb2cd42d" 407 + "hash" : "192f85bd7a5be296de7acff9bbc9bd1d" 408 408 }, 409 409 "app-mail-dark-large" : { 410 410 "name" : "app-mail-dark-large", 411 411 "rule" : ".app-mail-dark-large", 412 - "hash" : "1a1437047fd24b9bb2643435185b6f13" 412 + "hash" : "4709516a74216e0ba886a30180ad93d4" 413 413 }, 414 414 "app-mail-glow-large" : { 415 415 "name" : "app-mail-glow-large", 416 416 "rule" : ".app-mail-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-mail-light-large", 417 - "hash" : "141548cae4bf8265be9452e583be3504" 417 + "hash" : "1f0d2be98c3771791db7a9ad20784872" 418 418 }, 419 419 "app-mail-light-large" : { 420 420 "name" : "app-mail-light-large", 421 421 "rule" : ".app-mail-light-large", 422 - "hash" : "27aec2b8d5bd1fb7eba00ffbaacf1930" 422 + "hash" : "740ea3d3104365ab7bad981b13d23693" 423 423 }, 424 424 "app-maniphest-blue-large" : { 425 425 "name" : "app-maniphest-blue-large", 426 426 "rule" : ".app-maniphest-blue-large, .phabricator-crumb-view:hover .app-maniphest-dark-large", 427 - "hash" : "619ff6fea2c90a8d70b000ed0ece6e4b" 427 + "hash" : "d667667cc5216ff510cb58c359ffc2a4" 428 428 }, 429 429 "app-maniphest-dark-large" : { 430 430 "name" : "app-maniphest-dark-large", 431 431 "rule" : ".app-maniphest-dark-large", 432 - "hash" : "7a204fc2f4779eff27847bf799652140" 432 + "hash" : "acadb7737b24ecc23e892cdaab7c1fe2" 433 433 }, 434 434 "app-maniphest-glow-large" : { 435 435 "name" : "app-maniphest-glow-large", 436 436 "rule" : ".app-maniphest-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-maniphest-light-large", 437 - "hash" : "2b67eff9fb01bdf0972749532301e038" 437 + "hash" : "8dccd7ba95ddffc4e071e42b69773f5c" 438 438 }, 439 439 "app-maniphest-light-large" : { 440 440 "name" : "app-maniphest-light-large", 441 441 "rule" : ".app-maniphest-light-large", 442 - "hash" : "90ea395741410840b1b4a974f802b06c" 442 + "hash" : "0d2c71a1279686c3884c267d98bc36ba" 443 443 }, 444 444 "app-metamta-blue-large" : { 445 445 "name" : "app-metamta-blue-large", 446 446 "rule" : ".app-metamta-blue-large, .phabricator-crumb-view:hover .app-metamta-dark-large", 447 - "hash" : "48af88efc2887cc985f09d5202922df0" 447 + "hash" : "1757d281dcdbdf221ca2b2e90993dba8" 448 448 }, 449 449 "app-metamta-dark-large" : { 450 450 "name" : "app-metamta-dark-large", 451 451 "rule" : ".app-metamta-dark-large", 452 - "hash" : "bf18a2c7ef31e72dc9ce6695035baf60" 452 + "hash" : "c5f3a7468d98ebb977bfb0cc81abd5ee" 453 453 }, 454 454 "app-metamta-glow-large" : { 455 455 "name" : "app-metamta-glow-large", 456 456 "rule" : ".app-metamta-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-metamta-light-large", 457 - "hash" : "74c00295bf0d394e6427593665a271f1" 457 + "hash" : "5f7b115d45e5d3a5a5a730173366f2e4" 458 458 }, 459 459 "app-metamta-light-large" : { 460 460 "name" : "app-metamta-light-large", 461 461 "rule" : ".app-metamta-light-large", 462 - "hash" : "720cc7f66ab36770998aa4fe9ad22785" 462 + "hash" : "13ce4ca0f223cda37e3af39da8c6e564" 463 463 }, 464 464 "app-owners-blue-large" : { 465 465 "name" : "app-owners-blue-large", 466 466 "rule" : ".app-owners-blue-large, .phabricator-crumb-view:hover .app-owners-dark-large", 467 - "hash" : "ee909b2d51a3c52b38c0cca3da8d861d" 467 + "hash" : "585c128af418f94b8fbf18206605ec84" 468 468 }, 469 469 "app-owners-dark-large" : { 470 470 "name" : "app-owners-dark-large", 471 471 "rule" : ".app-owners-dark-large", 472 - "hash" : "05a6fcc603b5ee346d25b1fb25e7e695" 472 + "hash" : "b09a80f307491acbe56fb16e01956173" 473 473 }, 474 474 "app-owners-glow-large" : { 475 475 "name" : "app-owners-glow-large", 476 476 "rule" : ".app-owners-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-owners-light-large", 477 - "hash" : "4bcba14ffcdf7ac3c1968ebcc34f7e37" 477 + "hash" : "a63816e6979ec6c222a086b5d72a0b86" 478 478 }, 479 479 "app-owners-light-large" : { 480 480 "name" : "app-owners-light-large", 481 481 "rule" : ".app-owners-light-large", 482 - "hash" : "2d6b3f02f210c73242d91bdb9ef8456c" 482 + "hash" : "6b06493f46a91584e746e5034be15366" 483 483 }, 484 484 "app-paste-blue-large" : { 485 485 "name" : "app-paste-blue-large", 486 486 "rule" : ".app-paste-blue-large, .phabricator-crumb-view:hover .app-paste-dark-large", 487 - "hash" : "2ce99237cc2f064f0aa48fb1d147c781" 487 + "hash" : "4a14c100c5b78282712dd2cc619d72b4" 488 488 }, 489 489 "app-paste-dark-large" : { 490 490 "name" : "app-paste-dark-large", 491 491 "rule" : ".app-paste-dark-large", 492 - "hash" : "f566e3e0c8e6a17b7c2fc4168b079ede" 492 + "hash" : "03d3dded4964e60771c8a45549e13973" 493 493 }, 494 494 "app-paste-glow-large" : { 495 495 "name" : "app-paste-glow-large", 496 496 "rule" : ".app-paste-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-paste-light-large", 497 - "hash" : "34333bbb31fb3909461cc064ea2f72e9" 497 + "hash" : "507192b6a41abdc1a886a144cc315326" 498 498 }, 499 499 "app-paste-light-large" : { 500 500 "name" : "app-paste-light-large", 501 501 "rule" : ".app-paste-light-large", 502 - "hash" : "e77a206e1cbaf1417b4a0b9f3d67380a" 502 + "hash" : "66f1f8fe7acafaab5f608598589aaa5c" 503 503 }, 504 504 "app-people-blue-large" : { 505 505 "name" : "app-people-blue-large", 506 506 "rule" : ".app-people-blue-large, .phabricator-crumb-view:hover .app-people-dark-large", 507 - "hash" : "37fcac5bc4ad63c37d68da2c77717301" 507 + "hash" : "ed242e94b2b5698fd90261ca63aef8a6" 508 508 }, 509 509 "app-people-dark-large" : { 510 510 "name" : "app-people-dark-large", 511 511 "rule" : ".app-people-dark-large", 512 - "hash" : "01fb27eba95c01d1aadde04ea4513caa" 512 + "hash" : "b1748b3a5afacd4f8afcd5ea37352dc7" 513 513 }, 514 514 "app-people-glow-large" : { 515 515 "name" : "app-people-glow-large", 516 516 "rule" : ".app-people-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-people-light-large", 517 - "hash" : "6d859c1505f5877b86faf34385bbcd59" 517 + "hash" : "ed1b2d2d27ae8fd07d0e5e1d4002625e" 518 518 }, 519 519 "app-people-light-large" : { 520 520 "name" : "app-people-light-large", 521 521 "rule" : ".app-people-light-large", 522 - "hash" : "d1d80fddc9e6295494d12b72b4700dc5" 522 + "hash" : "f6efcbdbcee02f9f37f92774b4b0e4cf" 523 523 }, 524 524 "app-phame-blue-large" : { 525 525 "name" : "app-phame-blue-large", 526 526 "rule" : ".app-phame-blue-large, .phabricator-crumb-view:hover .app-phame-dark-large", 527 - "hash" : "f72bd35227e9ba2157852377e2d87ec4" 527 + "hash" : "d448b392b7bc927b9b5522d525fa8c49" 528 528 }, 529 529 "app-phame-dark-large" : { 530 530 "name" : "app-phame-dark-large", 531 531 "rule" : ".app-phame-dark-large", 532 - "hash" : "7bfe54cf7d885985fb7e06ad0abaf4e9" 532 + "hash" : "a7cf2f8ec22cdb675a3bc792c7c1edf6" 533 533 }, 534 534 "app-phame-glow-large" : { 535 535 "name" : "app-phame-glow-large", 536 536 "rule" : ".app-phame-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phame-light-large", 537 - "hash" : "60013586092f2c5eb5ed1f58c7f02a74" 537 + "hash" : "4587c25ff8a94fd48a1a0ca2e9fd9f42" 538 538 }, 539 539 "app-phame-light-large" : { 540 540 "name" : "app-phame-light-large", 541 541 "rule" : ".app-phame-light-large", 542 - "hash" : "5266f8774d0470adc65f610c9175a251" 542 + "hash" : "265471ec8d3c7ddeb3c269384d22243d" 543 543 }, 544 544 "app-phid-blue-large" : { 545 545 "name" : "app-phid-blue-large", 546 546 "rule" : ".app-phid-blue-large, .phabricator-crumb-view:hover .app-phid-dark-large", 547 - "hash" : "d726ca94608547ff3974a1d49e6b1012" 547 + "hash" : "b94bc233e1bcf520c65351b71794c228" 548 548 }, 549 549 "app-phid-dark-large" : { 550 550 "name" : "app-phid-dark-large", 551 551 "rule" : ".app-phid-dark-large", 552 - "hash" : "04af0c932bea8b7c36f6dc954994ea11" 552 + "hash" : "f4dfdcc8e1fde50cfcb7e07376696964" 553 553 }, 554 554 "app-phid-glow-large" : { 555 555 "name" : "app-phid-glow-large", 556 556 "rule" : ".app-phid-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phid-light-large", 557 - "hash" : "b1e8a6e4ac9ad64d34fbc7560d507e5b" 557 + "hash" : "10ec316b409b385e19800048fcb1a79e" 558 558 }, 559 559 "app-phid-light-large" : { 560 560 "name" : "app-phid-light-large", 561 561 "rule" : ".app-phid-light-large", 562 - "hash" : "0ba23a08c29e8064fdddee9112c638e3" 562 + "hash" : "0087c573b07d8badaeadcb8ad560ae9b" 563 563 }, 564 564 "app-pholio-blue-large" : { 565 565 "name" : "app-pholio-blue-large", 566 566 "rule" : ".app-pholio-blue-large, .phabricator-crumb-view:hover .app-pholio-dark-large", 567 - "hash" : "08bfdf63411a09e6be88d99128c1e9f8" 567 + "hash" : "5b8e3f47a49a0dee84c1b7c228884f0c" 568 568 }, 569 569 "app-pholio-dark-large" : { 570 570 "name" : "app-pholio-dark-large", 571 571 "rule" : ".app-pholio-dark-large", 572 - "hash" : "2a8bfa3870726691766fe3f6cb73df38" 572 + "hash" : "4a73276e5bcd9cfbb08435ed36051dff" 573 573 }, 574 574 "app-pholio-glow-large" : { 575 575 "name" : "app-pholio-glow-large", 576 576 "rule" : ".app-pholio-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-pholio-light-large", 577 - "hash" : "499b68a80e78ab5f6ebe5ba7470fbb4a" 577 + "hash" : "aca383c3c4fcec4742a11702e3427221" 578 578 }, 579 579 "app-pholio-light-large" : { 580 580 "name" : "app-pholio-light-large", 581 581 "rule" : ".app-pholio-light-large", 582 - "hash" : "9a4d4223e6e1d7a77c4545504ea0908c" 582 + "hash" : "1a3ace478c2b0f9b444005112e17c695" 583 583 }, 584 584 "app-phpast-blue-large" : { 585 585 "name" : "app-phpast-blue-large", 586 586 "rule" : ".app-phpast-blue-large, .phabricator-crumb-view:hover .app-phpast-dark-large", 587 - "hash" : "a9f4f0a62e5841b2ed669dc02694419d" 587 + "hash" : "22ba8a058d6b920a909c5f6731f301a0" 588 588 }, 589 589 "app-phpast-dark-large" : { 590 590 "name" : "app-phpast-dark-large", 591 591 "rule" : ".app-phpast-dark-large", 592 - "hash" : "1dbc83cc09d722253b634f3308608627" 592 + "hash" : "bdbfd96cb50a8b7450daf82576fcfe95" 593 593 }, 594 594 "app-phpast-glow-large" : { 595 595 "name" : "app-phpast-glow-large", 596 596 "rule" : ".app-phpast-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phpast-light-large", 597 - "hash" : "e98e4cdc93e51b0d7c1df25c01c75fac" 597 + "hash" : "ce7433350eeaee95ecf358905ad38029" 598 598 }, 599 599 "app-phpast-light-large" : { 600 600 "name" : "app-phpast-light-large", 601 601 "rule" : ".app-phpast-light-large", 602 - "hash" : "c63fb0fe3cc326f1a19e4e59c42a73f7" 602 + "hash" : "5ebd26eb5e0bc0229db5696020dd9b4a" 603 603 }, 604 604 "app-phriction-blue-large" : { 605 605 "name" : "app-phriction-blue-large", 606 606 "rule" : ".app-phriction-blue-large, .phabricator-crumb-view:hover .app-phriction-dark-large", 607 - "hash" : "55bbded073e078117369f42e05b5b5c4" 607 + "hash" : "0134e9d694ce72a6d9c554e639a6ed50" 608 608 }, 609 609 "app-phriction-dark-large" : { 610 610 "name" : "app-phriction-dark-large", 611 611 "rule" : ".app-phriction-dark-large", 612 - "hash" : "944c3a520a484580895b287eaaa103b1" 612 + "hash" : "e4f3121261bc96e00bb6b94b467582f4" 613 613 }, 614 614 "app-phriction-glow-large" : { 615 615 "name" : "app-phriction-glow-large", 616 616 "rule" : ".app-phriction-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phriction-light-large", 617 - "hash" : "84639b5ccba94daf1850a9449131a078" 617 + "hash" : "27612f55aaa40c4178a3a5a46d225947" 618 618 }, 619 619 "app-phriction-light-large" : { 620 620 "name" : "app-phriction-light-large", 621 621 "rule" : ".app-phriction-light-large", 622 - "hash" : "2ca79fdfd141b0fe00ff8b2e13df73bf" 622 + "hash" : "a56dcfca00861938d337cc2f217b33f6" 623 623 }, 624 624 "app-ponder-blue-large" : { 625 625 "name" : "app-ponder-blue-large", 626 626 "rule" : ".app-ponder-blue-large, .phabricator-crumb-view:hover .app-ponder-dark-large", 627 - "hash" : "8018fe4ebc1e9af91a8a737e0505aa5d" 627 + "hash" : "1bfc2f6150bd67cc25cbe1fbc9283f9c" 628 628 }, 629 629 "app-ponder-dark-large" : { 630 630 "name" : "app-ponder-dark-large", 631 631 "rule" : ".app-ponder-dark-large", 632 - "hash" : "1da67495789c69621f91800939ea9684" 632 + "hash" : "6efc0b3a74d2cc9eb5de96205613b640" 633 633 }, 634 634 "app-ponder-glow-large" : { 635 635 "name" : "app-ponder-glow-large", 636 636 "rule" : ".app-ponder-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-ponder-light-large", 637 - "hash" : "f73a1b5a6b688c6d3feba14193357147" 637 + "hash" : "9c2a2506e53e6a902976d504dfe94b46" 638 638 }, 639 639 "app-ponder-light-large" : { 640 640 "name" : "app-ponder-light-large", 641 641 "rule" : ".app-ponder-light-large", 642 - "hash" : "eb8b13c3bc35f36b14f33ef1158b71ab" 642 + "hash" : "595895068b10c68b0e05234570a6a268" 643 643 }, 644 644 "app-power-blue-large" : { 645 645 "name" : "app-power-blue-large", 646 646 "rule" : ".app-power-blue-large, .phabricator-crumb-view:hover .app-power-dark-large", 647 - "hash" : "743499c84546b7b35139eec60bf74c34" 647 + "hash" : "c3e03022f162f986f784b2a43c8784c7" 648 648 }, 649 649 "app-power-dark-large" : { 650 650 "name" : "app-power-dark-large", 651 651 "rule" : ".app-power-dark-large", 652 - "hash" : "1a3520a2ec255f5b7f1779ea66153ade" 652 + "hash" : "52d04564ca2cc7f3a96809e827162f3e" 653 653 }, 654 654 "app-power-glow-large" : { 655 655 "name" : "app-power-glow-large", 656 656 "rule" : ".app-power-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-power-light-large", 657 - "hash" : "3951e012561a0d5d5d2b00711b13fa9c" 657 + "hash" : "3f7719f0299abef8ba900e79fb6b5015" 658 658 }, 659 659 "app-power-light-large" : { 660 660 "name" : "app-power-light-large", 661 661 "rule" : ".app-power-light-large", 662 - "hash" : "52d04bd829dfe7477a9dc2ef916990ab" 662 + "hash" : "ffe9f181e6103eab9fc688ab84b07ad1" 663 663 }, 664 664 "app-projects-blue-large" : { 665 665 "name" : "app-projects-blue-large", 666 666 "rule" : ".app-projects-blue-large, .phabricator-crumb-view:hover .app-projects-dark-large", 667 - "hash" : "278113829ca3543b9377030555e04edc" 667 + "hash" : "494ca64479f68588823e00609496414a" 668 668 }, 669 669 "app-projects-dark-large" : { 670 670 "name" : "app-projects-dark-large", 671 671 "rule" : ".app-projects-dark-large", 672 - "hash" : "b6f043db039d4960397f76904a84e9fc" 672 + "hash" : "fa85ad644a2e289cb6bea2a67ab534f8" 673 673 }, 674 674 "app-projects-glow-large" : { 675 675 "name" : "app-projects-glow-large", 676 676 "rule" : ".app-projects-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-projects-light-large", 677 - "hash" : "3d1bf3efdbd9ccdbb73fc3a11d5d1265" 677 + "hash" : "b28bf212416595b3ba4bfb528dfaf791" 678 678 }, 679 679 "app-projects-light-large" : { 680 680 "name" : "app-projects-light-large", 681 681 "rule" : ".app-projects-light-large", 682 - "hash" : "88c73c7cb50ce7cf9cd8d33ec20c8245" 682 + "hash" : "228db63ac0e80b3cef46903a003a44df" 683 683 }, 684 684 "app-repositories-blue-large" : { 685 685 "name" : "app-repositories-blue-large", 686 686 "rule" : ".app-repositories-blue-large, .phabricator-crumb-view:hover .app-repositories-dark-large", 687 - "hash" : "0642bf1118210cef9105cc463ec3d36f" 687 + "hash" : "a83dd2186f9d92949f19a97f8f777a9c" 688 688 }, 689 689 "app-repositories-dark-large" : { 690 690 "name" : "app-repositories-dark-large", 691 691 "rule" : ".app-repositories-dark-large", 692 - "hash" : "c92eb4e857d74f1ef206ba5b184ad88c" 692 + "hash" : "30ead88c9f018797a8d5ef2f4e4221fe" 693 693 }, 694 694 "app-repositories-glow-large" : { 695 695 "name" : "app-repositories-glow-large", 696 696 "rule" : ".app-repositories-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-repositories-light-large", 697 - "hash" : "7fe40fbb4150dfbc6133c79578fc1494" 697 + "hash" : "44b04cbf1652211fbc2046c7773b4cf2" 698 698 }, 699 699 "app-repositories-light-large" : { 700 700 "name" : "app-repositories-light-large", 701 701 "rule" : ".app-repositories-light-large", 702 - "hash" : "446a7eab7b7fc07329bc21a77c438033" 702 + "hash" : "bcba180d121f9269787509ba7cdd3e48" 703 703 }, 704 704 "app-settings-blue-large" : { 705 705 "name" : "app-settings-blue-large", 706 706 "rule" : ".app-settings-blue-large, .phabricator-crumb-view:hover .app-settings-dark-large", 707 - "hash" : "4d22a7f016509777bb5b55f39198d9d7" 707 + "hash" : "c615df792c7e81b35cfbb78ece39e796" 708 708 }, 709 709 "app-settings-dark-large" : { 710 710 "name" : "app-settings-dark-large", 711 711 "rule" : ".app-settings-dark-large", 712 - "hash" : "55e0869a51f70cacdd72f2baad4b28ce" 712 + "hash" : "6c174857e23a9d169d0cb4079aa14637" 713 713 }, 714 714 "app-settings-glow-large" : { 715 715 "name" : "app-settings-glow-large", 716 716 "rule" : ".app-settings-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-settings-light-large", 717 - "hash" : "314ab0f607baa65ff6a684b1ddd4861d" 717 + "hash" : "4d8c68dc709d99141a19aad5bc483971" 718 718 }, 719 719 "app-settings-light-large" : { 720 720 "name" : "app-settings-light-large", 721 721 "rule" : ".app-settings-light-large", 722 - "hash" : "41da4708f38fae918af46505e566bd6a" 722 + "hash" : "e901b672f2a51ef286369bfea70a7e8d" 723 723 }, 724 724 "app-setup-blue-large" : { 725 725 "name" : "app-setup-blue-large", 726 726 "rule" : ".app-setup-blue-large, .phabricator-crumb-view:hover .app-setup-dark-large", 727 - "hash" : "74d2ba681cdad54b31d53f7c174f5826" 727 + "hash" : "a2f8f470c3cd928e8c1a6959ff745789" 728 728 }, 729 729 "app-setup-dark-large" : { 730 730 "name" : "app-setup-dark-large", 731 731 "rule" : ".app-setup-dark-large", 732 - "hash" : "89a94fe1ce36351d3ea81f1776fb061a" 732 + "hash" : "3183fafc1dc05b851ba902ace2dfa34d" 733 733 }, 734 734 "app-setup-glow-large" : { 735 735 "name" : "app-setup-glow-large", 736 736 "rule" : ".app-setup-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-setup-light-large", 737 - "hash" : "53942c73b14210f5bf0bfad68bcb4431" 737 + "hash" : "d91b7e5480cb4296871b9f1c4c634256" 738 738 }, 739 739 "app-setup-light-large" : { 740 740 "name" : "app-setup-light-large", 741 741 "rule" : ".app-setup-light-large", 742 - "hash" : "890dd2d7cb1e51992b202dd462d56ba6" 742 + "hash" : "419829d244a85f97d67fb45c6febd4e5" 743 743 }, 744 744 "app-slowvote-blue-large" : { 745 745 "name" : "app-slowvote-blue-large", 746 746 "rule" : ".app-slowvote-blue-large, .phabricator-crumb-view:hover .app-slowvote-dark-large", 747 - "hash" : "12299956375e7f382217ebf8c1cb8203" 747 + "hash" : "941028e7abbe491e2911fb24c4a8edca" 748 748 }, 749 749 "app-slowvote-dark-large" : { 750 750 "name" : "app-slowvote-dark-large", 751 751 "rule" : ".app-slowvote-dark-large", 752 - "hash" : "ce57e4a318e4e8d556f713b459e6d798" 752 + "hash" : "6197df3550b652011bc1a8da00005059" 753 753 }, 754 754 "app-slowvote-glow-large" : { 755 755 "name" : "app-slowvote-glow-large", 756 756 "rule" : ".app-slowvote-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-slowvote-light-large", 757 - "hash" : "dcd5be64ded69e0fdfee5364367c9b55" 757 + "hash" : "43783af8df4f99e94f0989ca149264f2" 758 758 }, 759 759 "app-slowvote-light-large" : { 760 760 "name" : "app-slowvote-light-large", 761 761 "rule" : ".app-slowvote-light-large", 762 - "hash" : "7ac2515f26b194a9fafaa6a27997be2a" 762 + "hash" : "23eb39153b5ac9b5bd91c8b800023d93" 763 763 }, 764 764 "app-uiexamples-blue-large" : { 765 765 "name" : "app-uiexamples-blue-large", 766 766 "rule" : ".app-uiexamples-blue-large, .phabricator-crumb-view:hover .app-uiexamples-dark-large", 767 - "hash" : "7add7df6b621c4af5322160bc1cd31b2" 767 + "hash" : "eabac7f7b83c47618a5f72b6f30b6410" 768 768 }, 769 769 "app-uiexamples-dark-large" : { 770 770 "name" : "app-uiexamples-dark-large", 771 771 "rule" : ".app-uiexamples-dark-large", 772 - "hash" : "d8563a5f06692a313a2eff11235d5d0d" 772 + "hash" : "31c9fb99289cc73aae73f3acad66b449" 773 773 }, 774 774 "app-uiexamples-glow-large" : { 775 775 "name" : "app-uiexamples-glow-large", 776 776 "rule" : ".app-uiexamples-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-uiexamples-light-large", 777 - "hash" : "0532cdd91b6de17ab194bd29cacfc24f" 777 + "hash" : "069e59208dad509a6c3d74d102f08ae8" 778 778 }, 779 779 "app-uiexamples-light-large" : { 780 780 "name" : "app-uiexamples-light-large", 781 781 "rule" : ".app-uiexamples-light-large", 782 - "hash" : "ee40dd0e3168f8e7fb520665a1d50f95" 782 + "hash" : "b384102bcee1b312b2e06abc5f4b27de" 783 783 } 784 784 }, 785 785 "scales" : [
+39 -39
resources/sprite/manifest/apps.json
··· 4 4 "app-application-dark" : { 5 5 "name" : "app-application-dark", 6 6 "rule" : ".app-application-dark", 7 - "hash" : "60e228106718bf6f3ee5024400d31f24" 7 + "hash" : "89f861c28e97878311885623cff3d314" 8 8 }, 9 9 "app-audit-dark" : { 10 10 "name" : "app-audit-dark", 11 11 "rule" : ".app-audit-dark", 12 - "hash" : "38339b9cc4e39cbbbea36dcf039873bb" 12 + "hash" : "2c141bc445c4fe62986cd6cff0c29b36" 13 13 }, 14 14 "app-calendar-dark" : { 15 15 "name" : "app-calendar-dark", 16 16 "rule" : ".app-calendar-dark", 17 - "hash" : "756d60566639ad1424444436a95c6a3f" 17 + "hash" : "04c61a081986f0d38cf27fc4e18bce40" 18 18 }, 19 19 "app-conduit-dark" : { 20 20 "name" : "app-conduit-dark", 21 21 "rule" : ".app-conduit-dark", 22 - "hash" : "01fba8ca32f1cfefb3516b45c9d28b40" 22 + "hash" : "7b410e96c87e7818fb93bdfa2ed9368f" 23 23 }, 24 24 "app-conpherence-dark" : { 25 25 "name" : "app-conpherence-dark", 26 26 "rule" : ".app-conpherence-dark", 27 - "hash" : "dbb6fdd5f082a604b4ef10b7eeedbfa2" 27 + "hash" : "6d65bc8da41c3a59822b31f68b9b883c" 28 28 }, 29 29 "app-countdown-dark" : { 30 30 "name" : "app-countdown-dark", 31 31 "rule" : ".app-countdown-dark", 32 - "hash" : "625f2589ee491aead58aaa5b965a7451" 32 + "hash" : "8891502317896beea6a5f9ec87eb5e2e" 33 33 }, 34 34 "app-daemon-dark" : { 35 35 "name" : "app-daemon-dark", 36 36 "rule" : ".app-daemon-dark", 37 - "hash" : "4472be3242150f06ea5bf7b45333c4c5" 37 + "hash" : "23a9a2927b368e2328dd70f95c5b1a07" 38 38 }, 39 39 "app-differential-dark" : { 40 40 "name" : "app-differential-dark", 41 41 "rule" : ".app-differential-dark", 42 - "hash" : "508401fe36d9636bdcbdcbcae253c152" 42 + "hash" : "bb7032f3c17901f242f9bbbcdc9a721c" 43 43 }, 44 44 "app-diffusion-dark" : { 45 45 "name" : "app-diffusion-dark", 46 46 "rule" : ".app-diffusion-dark", 47 - "hash" : "0a6f8c85079c4a325430197adb05967c" 47 + "hash" : "46ab6648a6ae04e4fd1a28a9afcc4996" 48 48 }, 49 49 "app-diviner-dark" : { 50 50 "name" : "app-diviner-dark", 51 51 "rule" : ".app-diviner-dark", 52 - "hash" : "08872eb1c6bb51b9727290f6fa802633" 52 + "hash" : "e21a74e866a6fc22a991b8df6efc3ca7" 53 53 }, 54 54 "app-drydock-dark" : { 55 55 "name" : "app-drydock-dark", 56 56 "rule" : ".app-drydock-dark", 57 - "hash" : "d50309da57021c676774f9bdc68c5fe7" 57 + "hash" : "ed44013d98257a23306bad9c6b24760d" 58 58 }, 59 59 "app-fact-dark" : { 60 60 "name" : "app-fact-dark", 61 61 "rule" : ".app-fact-dark", 62 - "hash" : "0c1be568e1ac05fca814718600190369" 62 + "hash" : "f373f38e784289b866ab914471c342ec" 63 63 }, 64 64 "app-feed-dark" : { 65 65 "name" : "app-feed-dark", 66 66 "rule" : ".app-feed-dark", 67 - "hash" : "830232709eedbe6ce7cdbcebf182c86c" 67 + "hash" : "c4f1765e70615c6ee4cae6e8135fb969" 68 68 }, 69 69 "app-files-dark" : { 70 70 "name" : "app-files-dark", 71 71 "rule" : ".app-files-dark", 72 - "hash" : "00f5ab7ea3e9367e378cf9f395400ed4" 72 + "hash" : "7faf45efa5b9b97e571bc66636ca1a15" 73 73 }, 74 74 "app-flags-dark" : { 75 75 "name" : "app-flags-dark", 76 76 "rule" : ".app-flags-dark", 77 - "hash" : "6382f373f7b0e70522d80ce06ef62813" 77 + "hash" : "10298f695592714e27f72ef746ffd8a9" 78 78 }, 79 79 "app-help-dark" : { 80 80 "name" : "app-help-dark", 81 81 "rule" : ".app-help-dark", 82 - "hash" : "2299a14e27d76fdf66209ef0042cc84f" 82 + "hash" : "5cf715cc566b98c87958793eebea5f35" 83 83 }, 84 84 "app-herald-dark" : { 85 85 "name" : "app-herald-dark", 86 86 "rule" : ".app-herald-dark", 87 - "hash" : "b2193b62df3bd4cf5c8de514a07fb6c3" 87 + "hash" : "e3bc39a3dd1d66a0abf4594c608a3846" 88 88 }, 89 89 "app-home-dark" : { 90 90 "name" : "app-home-dark", 91 91 "rule" : ".app-home-dark", 92 - "hash" : "88f020497fcbcf43729aa817695b174f" 92 + "hash" : "7e01fbdfa526919a2d90d2c29a6c9fa0" 93 93 }, 94 94 "app-logo-dark" : { 95 95 "name" : "app-logo-dark", 96 96 "rule" : ".app-logo-dark", 97 - "hash" : "02e71ae2421f1949f2ef075c27e052c9" 97 + "hash" : "39701e1282fd120e77b09ed9fcddc686" 98 98 }, 99 99 "app-macro-dark" : { 100 100 "name" : "app-macro-dark", 101 101 "rule" : ".app-macro-dark", 102 - "hash" : "8e0e72847a8f70eb3f8e60e7fb681c06" 102 + "hash" : "ef89457bcee666ad265de1659b9b8a62" 103 103 }, 104 104 "app-mail-dark" : { 105 105 "name" : "app-mail-dark", 106 106 "rule" : ".app-mail-dark", 107 - "hash" : "a2a792fddc44be4ae0f1a601380c8449" 107 + "hash" : "4d05a5cd4360052183e91f61967a6c57" 108 108 }, 109 109 "app-maniphest-dark" : { 110 110 "name" : "app-maniphest-dark", 111 111 "rule" : ".app-maniphest-dark", 112 - "hash" : "ea94fc7dbb2267adc33513f78916fe90" 112 + "hash" : "320da127d7f887e09965a0416d5e44d3" 113 113 }, 114 114 "app-metamta-dark" : { 115 115 "name" : "app-metamta-dark", 116 116 "rule" : ".app-metamta-dark", 117 - "hash" : "8abbb6e74d1697f950a01dcd6c8077be" 117 + "hash" : "51f100c2a7a80149404dbc8b27f595a9" 118 118 }, 119 119 "app-owners-dark" : { 120 120 "name" : "app-owners-dark", 121 121 "rule" : ".app-owners-dark", 122 - "hash" : "23b948cc1d32a0968785fbfca749dcdf" 122 + "hash" : "33c064dd3b7fc3f9eb934d0cf84f3af5" 123 123 }, 124 124 "app-paste-dark" : { 125 125 "name" : "app-paste-dark", 126 126 "rule" : ".app-paste-dark", 127 - "hash" : "9e0c1d1fe03aebcb55a4d19be051e255" 127 + "hash" : "9482649caa8e5a46d277271092517b12" 128 128 }, 129 129 "app-people-dark" : { 130 130 "name" : "app-people-dark", 131 131 "rule" : ".app-people-dark", 132 - "hash" : "0b3995fcd043b506a408de6e25ad5292" 132 + "hash" : "67245eafa79367e4e07289549cf34deb" 133 133 }, 134 134 "app-phame-dark" : { 135 135 "name" : "app-phame-dark", 136 136 "rule" : ".app-phame-dark", 137 - "hash" : "24ff4d322bce13f1c156ce5361a03a07" 137 + "hash" : "029d7d48523cc43b0404bf40ccf56f8b" 138 138 }, 139 139 "app-phid-dark" : { 140 140 "name" : "app-phid-dark", 141 141 "rule" : ".app-phid-dark", 142 - "hash" : "5a0ac05bbf36a7aeb36753d093c3c9f8" 142 + "hash" : "2099c2987fe3929ce1d9dec470c7699d" 143 143 }, 144 144 "app-pholio-dark" : { 145 145 "name" : "app-pholio-dark", 146 146 "rule" : ".app-pholio-dark", 147 - "hash" : "7d3befd1c12dd464a5f5edbef4574a5c" 147 + "hash" : "aab47c79d2e03fdcaffb6f41dc1e0f06" 148 148 }, 149 149 "app-phpast-dark" : { 150 150 "name" : "app-phpast-dark", 151 151 "rule" : ".app-phpast-dark", 152 - "hash" : "de1ad812c7a177c844fcff626b1abebf" 152 + "hash" : "e6db72b398f57d03a400c9c18bd3c412" 153 153 }, 154 154 "app-phriction-dark" : { 155 155 "name" : "app-phriction-dark", 156 156 "rule" : ".app-phriction-dark", 157 - "hash" : "8596da3f375087db6a163c98f0c968ae" 157 + "hash" : "8064272206874a324d20d956c8fb10da" 158 158 }, 159 159 "app-ponder-dark" : { 160 160 "name" : "app-ponder-dark", 161 161 "rule" : ".app-ponder-dark", 162 - "hash" : "232577eb875f383f45cb9dbd9a4e3976" 162 + "hash" : "abdb353635bed5cfd48a176b4340022f" 163 163 }, 164 164 "app-power-dark" : { 165 165 "name" : "app-power-dark", 166 166 "rule" : ".app-power-dark", 167 - "hash" : "e3708b1b4bfdfc614d9cf630943e5bef" 167 + "hash" : "d3e943d1267206963d8f9419629c5581" 168 168 }, 169 169 "app-projects-dark" : { 170 170 "name" : "app-projects-dark", 171 171 "rule" : ".app-projects-dark", 172 - "hash" : "5e799f1e95ecfd33cb67b6e4ac992043" 172 + "hash" : "6bd7c598e2f2cf0b77918a7b0fa8bd19" 173 173 }, 174 174 "app-repositories-dark" : { 175 175 "name" : "app-repositories-dark", 176 176 "rule" : ".app-repositories-dark", 177 - "hash" : "736066962e96df88eacc04d734613a0e" 177 + "hash" : "db2823a16dae198145f53e8021170740" 178 178 }, 179 179 "app-settings-dark" : { 180 180 "name" : "app-settings-dark", 181 181 "rule" : ".app-settings-dark", 182 - "hash" : "2fadcf918fb084bd3452712f700ae1a0" 182 + "hash" : "1c84d22b769730d9e8b6fcd3414de72c" 183 183 }, 184 184 "app-setup-dark" : { 185 185 "name" : "app-setup-dark", 186 186 "rule" : ".app-setup-dark", 187 - "hash" : "061b80f3555ade1c36934474b61fe76b" 187 + "hash" : "27db76695d99be0c25368dc9e0932b17" 188 188 }, 189 189 "app-slowvote-dark" : { 190 190 "name" : "app-slowvote-dark", 191 191 "rule" : ".app-slowvote-dark", 192 - "hash" : "e51cc1e6887f2deaff02d9c60aae36e0" 192 + "hash" : "0d5861fab4562ad21242e34f9a29a33e" 193 193 }, 194 194 "app-uiexamples-dark" : { 195 195 "name" : "app-uiexamples-dark", 196 196 "rule" : ".app-uiexamples-dark", 197 - "hash" : "dd919fd2c10e7d1e0915f523ac3922ce" 197 + "hash" : "6416a3d9d9007673ee558433b80692a1" 198 198 } 199 199 }, 200 200 "scales" : [
+14 -14
resources/sprite/manifest/conph.json
··· 4 4 "conpher_calendar_off" : { 5 5 "name" : "conpher_calendar_off", 6 6 "rule" : ".conpher_calendar_off", 7 - "hash" : "a8228ab90fd90f4c2500d9285179bf26" 7 + "hash" : "9ead08702b8028d28aedfa1a0dfbe43a" 8 8 }, 9 9 "conpher_calendar_on" : { 10 10 "name" : "conpher_calendar_on", 11 11 "rule" : ".conpher_calendar_on, .device-desktop .conpher_calendar_off:hover ", 12 - "hash" : "931243bc3c414782ddb2d1d9607908ba" 12 + "hash" : "f00d0854260ab1bc1a9b4f7f21a64f56" 13 13 }, 14 14 "conpher_conversation_off" : { 15 15 "name" : "conpher_conversation_off", 16 16 "rule" : ".conpher_conversation_off", 17 - "hash" : "931abb0377898297a9a603a6d280b977" 17 + "hash" : "97f9e8131c741dbba8091a92776036dd" 18 18 }, 19 19 "conpher_conversation_on" : { 20 20 "name" : "conpher_conversation_on", 21 21 "rule" : ".conpher_conversation_on, .device-desktop .conpher_conversation_off:hover ", 22 - "hash" : "0b8a39dc5019dac1975b7be2ca0ccbfa" 22 + "hash" : "01d5bae305a37debbc44f4131f0863dc" 23 23 }, 24 24 "conpher_files_off" : { 25 25 "name" : "conpher_files_off", 26 26 "rule" : ".conpher_files_off", 27 - "hash" : "de1aee01b9b47b354e6ac280ae68bae1" 27 + "hash" : "b6a89827978cf06618d4ba572953049a" 28 28 }, 29 29 "conpher_files_on" : { 30 30 "name" : "conpher_files_on", 31 31 "rule" : ".conpher_files_on, .device-desktop .conpher_files_off:hover ", 32 - "hash" : "9ccbbd5e86fd4ec87a11aee0c9ec8c60" 32 + "hash" : "05f38d8b45077a8a9b5bd21ecc15f958" 33 33 }, 34 34 "conpher_list_off" : { 35 35 "name" : "conpher_list_off", 36 36 "rule" : ".conpher_list_off", 37 - "hash" : "2611311d0c2aec04416433be74d3a30e" 37 + "hash" : "6f9b685a553e58aa67668494a88f864c" 38 38 }, 39 39 "conpher_list_on" : { 40 40 "name" : "conpher_list_on", 41 41 "rule" : ".conpher_list_on, .device-desktop .conpher_list_off:hover ", 42 - "hash" : "cee6de0301c84b0d195282642642afa0" 42 + "hash" : "7d495ee16be1162affd3a480ee4b86d4" 43 43 }, 44 44 "conpher_more_off" : { 45 45 "name" : "conpher_more_off", 46 46 "rule" : ".conpher_more_off", 47 - "hash" : "3b7099bdde20a13864b48552b11e92c3" 47 + "hash" : "c65da03207be1e69ceaa09f15a95d8f4" 48 48 }, 49 49 "conpher_more_on" : { 50 50 "name" : "conpher_more_on", 51 51 "rule" : ".conpher_more_on, .device-desktop .conpher_more_off:hover ", 52 - "hash" : "b146f0cff9c2e5f0b57f7ebcfe0704d3" 52 + "hash" : "70464cdbd30a77cad597c593ca40ab1f" 53 53 }, 54 54 "conpher_people_off" : { 55 55 "name" : "conpher_people_off", 56 56 "rule" : ".conpher_people_off", 57 - "hash" : "641a6a21aa32a12416e85caf8a22e340" 57 + "hash" : "a40f1f129d2e3c33134a4103161c0792" 58 58 }, 59 59 "conpher_people_on" : { 60 60 "name" : "conpher_people_on", 61 61 "rule" : ".conpher_people_on, .device-desktop .conpher_people_off:hover ", 62 - "hash" : "f13745fd7036564eefb1c0ebc3502a92" 62 + "hash" : "fd99a5b329ebe0144acc8fe669f0d936" 63 63 }, 64 64 "conpher_settings_off" : { 65 65 "name" : "conpher_settings_off", 66 66 "rule" : ".conpher_settings_off", 67 - "hash" : "aa9ab000d9e33e3c50c2fe70367f30b4" 67 + "hash" : "e4b389edbeb7825e4304faf7d20f7469" 68 68 }, 69 69 "conpher_settings_on" : { 70 70 "name" : "conpher_settings_on", 71 71 "rule" : ".conpher_settings_on, .device-desktop .conpher_settings_off:hover ", 72 - "hash" : "a5fe22965997f9559800ca7db5ea32c8" 72 + "hash" : "8ad76234fffb3f4cc59238ec3b4a6999" 73 73 } 74 74 }, 75 75 "scales" : [
+13 -13
resources/sprite/manifest/gradient.json
··· 4 4 "gradient-black-dark" : { 5 5 "name" : "gradient-black-dark", 6 6 "rule" : ".gradient-black-dark, button.black, a.black, a.black:visited", 7 - "hash" : "17425d8c9c53672ab2edbd236e6efd7a" 7 + "hash" : "b9faf8505427bb14a8c51324e13e2f81" 8 8 }, 9 9 "gradient-black-light" : { 10 10 "name" : "gradient-black-light", 11 11 "rule" : ".gradient-black-light, button.black:active, a.black:active", 12 - "hash" : "c4fb2231553d2894fd2c97beaa8bfe39" 12 + "hash" : "812c3375d00ccc93c36c6df2eb565df4" 13 13 }, 14 14 "gradient-blue-dark" : { 15 15 "name" : "gradient-blue-dark", 16 16 "rule" : ".gradient-blue-dark, button, a.button, a.button:visited, input.inputsubmit", 17 - "hash" : "f467612edcdbf984672287c6086492c4" 17 + "hash" : "adc2d0f7397374936384014c5d78550d" 18 18 }, 19 19 "gradient-blue-light" : { 20 20 "name" : "gradient-blue-light", 21 21 "rule" : ".gradient-blue-light, button:active, a.button:active", 22 - "hash" : "471d47c102def6db46b345310aac5a03" 22 + "hash" : "91b841067a63e543a4dcd9d41e0a2e5c" 23 23 }, 24 24 "gradient-breadcrumbs" : { 25 25 "name" : "gradient-breadcrumbs", 26 26 "rule" : ".gradient-breadcrumbs", 27 - "hash" : "3d0f8634df5bc29eaf2a5a01bae79cf1" 27 + "hash" : "688ab77f50cfbc17ec30d798efb1b39e" 28 28 }, 29 29 "gradient-dark-menu-label" : { 30 30 "name" : "gradient-dark-menu-label", 31 31 "rule" : ".gradient-dark-menu-label, .phabricator-dark-menu .phabricator-menu-item-type-label", 32 - "hash" : "e0d4a455142f9c4745d36ad8b7dd3f78" 32 + "hash" : "89a908596142d38fbe61a706694cd321" 33 33 }, 34 34 "gradient-green-dark" : { 35 35 "name" : "gradient-green-dark", 36 36 "rule" : ".gradient-green-dark, button.green, a.green, a.green:visited", 37 - "hash" : "a6719fe55b2b0e527ed32985691eab34" 37 + "hash" : "0d19ab593772b6b406c0db309b3a14fb" 38 38 }, 39 39 "gradient-green-light" : { 40 40 "name" : "gradient-green-light", 41 41 "rule" : ".gradient-green-light, button.green:active, a.green:active", 42 - "hash" : "124969cc7805bbd754005bc702e24c54" 42 + "hash" : "71c67916327ec7fc65149ab72c3a2924" 43 43 }, 44 44 "gradient-grey-dark" : { 45 45 "name" : "gradient-grey-dark", 46 46 "rule" : ".gradient-grey-dark, button.grey, input.inputaux, a.grey, a.grey:visited, a.button.disabled, button[disabled], button.disabled", 47 - "hash" : "fac28a773098fc62bf571e12b843f71a" 47 + "hash" : "32651902d28d37dca01cf067072c39c0" 48 48 }, 49 49 "gradient-grey-light" : { 50 50 "name" : "gradient-grey-light", 51 51 "rule" : ".gradient-grey-light, button.grey:active, a.grey:active, button.grey_active, a.dropdown-open", 52 - "hash" : "83c6128f59fc2e426c912c2f73f5b92b" 52 + "hash" : "c3c9ee1ed6f800a4ac86910b94687877" 53 53 }, 54 54 "gradient-menu-hover" : { 55 55 "name" : "gradient-menu-hover", 56 56 "rule" : ".gradient-menu-hover, .device-desktop .phabricator-side-menu a.phabricator-menu-item-type-link:hover, .phabricator-filetree a.phabricator-filetree-item:hover", 57 - "hash" : "e6e064156d66952180e99b00996ffc38" 57 + "hash" : "856380207ac8c5cb6770d44dceb245a8" 58 58 }, 59 59 "gradient-menu-label" : { 60 60 "name" : "gradient-menu-label", 61 61 "rule" : ".gradient-menu-label, .phabricator-side-menu .phabricator-menu-item-type-label", 62 - "hash" : "04b9943f5b06c8cb21fe6b96714e6662" 62 + "hash" : "8ad8352b077ae02820ebbbae26dc669b" 63 63 }, 64 64 "gradient-menu-selected" : { 65 65 "name" : "gradient-menu-selected", 66 66 "rule" : ".gradient-menu-selected, .phabricator-side-menu .phabricator-menu-item-selected, .device-desktop .phabricator-side-menu a.phabricator-menu-item-selected:hover, .phabricator-nav-local a.phabricator-active-nav-focus", 67 - "hash" : "9b4b039fba177b90bc26f0e6eece339d" 67 + "hash" : "815bafb94e11c23e1a419ea85dcae113" 68 68 } 69 69 }, 70 70 "scales" : [
+201 -201
resources/sprite/manifest/icon.json
··· 4 4 "action-arrow_left" : { 5 5 "name" : "action-arrow_left", 6 6 "rule" : ".action-arrow_left", 7 - "hash" : "18a72fcb866d409a6273883cc56b4862" 7 + "hash" : "439cd6051e6aab63b62d1e47f00ad4a0" 8 8 }, 9 9 "action-arrow_left-grey" : { 10 10 "name" : "action-arrow_left-grey", 11 11 "rule" : ".action-arrow_left-grey", 12 - "hash" : "200067f0f3af28260f95632eb17c373a" 12 + "hash" : "a3d0d34ef06a95685bf7a3e05eb97045" 13 13 }, 14 14 "action-arrow_left-white" : { 15 15 "name" : "action-arrow_left-white", 16 16 "rule" : ".action-arrow_left-white, .device-desktop .phabricator-action-view:hover .action-arrow_left", 17 - "hash" : "f21ee5fc3b0ad93d1ca18c71e6a62623" 17 + "hash" : "e113bc929cedac55146edcf6e22f2fe0" 18 18 }, 19 19 "action-arrow_right" : { 20 20 "name" : "action-arrow_right", 21 21 "rule" : ".action-arrow_right", 22 - "hash" : "64fb031691e8711ec2922644831a4b05" 22 + "hash" : "06b693491c0594d4e7ff537dbd725a98" 23 23 }, 24 24 "action-arrow_right-grey" : { 25 25 "name" : "action-arrow_right-grey", 26 26 "rule" : ".action-arrow_right-grey", 27 - "hash" : "7d3a0c9e65b9917ccc5acf3ec1ccad2e" 27 + "hash" : "894f051068f9e206d96576ca6d14fd4f" 28 28 }, 29 29 "action-arrow_right-white" : { 30 30 "name" : "action-arrow_right-white", 31 31 "rule" : ".action-arrow_right-white, .device-desktop .phabricator-action-view:hover .action-arrow_right", 32 - "hash" : "b16e8688f68d9f225aae11fa2de98f41" 32 + "hash" : "aebf657073a1a85eeb0887cf32db8f08" 33 33 }, 34 34 "action-attach" : { 35 35 "name" : "action-attach", 36 36 "rule" : ".action-attach", 37 - "hash" : "4aeca7c85a2c384c25c0a5d27aa2a41f" 37 + "hash" : "a062d26bbe37abd305998545885fb1c0" 38 38 }, 39 39 "action-attach-grey" : { 40 40 "name" : "action-attach-grey", 41 41 "rule" : ".action-attach-grey", 42 - "hash" : "6d528ecda66e9919452cbca77f94d034" 42 + "hash" : "09eae1092a9f48ec48b8970be67351b7" 43 43 }, 44 44 "action-attach-white" : { 45 45 "name" : "action-attach-white", 46 46 "rule" : ".action-attach-white, .device-desktop .phabricator-action-view:hover .action-attach", 47 - "hash" : "75b0dcbb6f6f297b647266165bd0ac77" 47 + "hash" : "1f69f442d87f6e27980229dbedfbf728" 48 48 }, 49 49 "action-blame" : { 50 50 "name" : "action-blame", 51 51 "rule" : ".action-blame", 52 - "hash" : "467a17a711c501b51318b2661d38458c" 52 + "hash" : "81fbaa234aed3a379c403aa0c7f3c7eb" 53 53 }, 54 54 "action-blame-grey" : { 55 55 "name" : "action-blame-grey", 56 56 "rule" : ".action-blame-grey", 57 - "hash" : "b5def77f42ef0fc2eb8141f54a6c730b" 57 + "hash" : "4b383ffb76ee537ce9b6fadb8d2ee160" 58 58 }, 59 59 "action-blame-white" : { 60 60 "name" : "action-blame-white", 61 61 "rule" : ".action-blame-white, .device-desktop .phabricator-action-view:hover .action-blame", 62 - "hash" : "ef8bcbb695d0af2ef18c7be1fe308641" 62 + "hash" : "e975ef46298c46530659e12fbd012292" 63 63 }, 64 64 "action-check" : { 65 65 "name" : "action-check", 66 66 "rule" : ".action-check", 67 - "hash" : "0db35013c33b71355dc33912073d0c28" 67 + "hash" : "c8b9c56214fd39a4ba99e07e1fa72e22" 68 68 }, 69 69 "action-check-grey" : { 70 70 "name" : "action-check-grey", 71 71 "rule" : ".action-check-grey", 72 - "hash" : "381b82f1a08592cf1c3f23b3d12c0456" 72 + "hash" : "2375808574c858425660eac59d80e29a" 73 73 }, 74 74 "action-check-white" : { 75 75 "name" : "action-check-white", 76 76 "rule" : ".action-check-white, .device-desktop .phabricator-action-view:hover .action-check", 77 - "hash" : "be412e3b2d3574bb04721b2f8646b67e" 77 + "hash" : "803fbc2117621cf946af270cf5bed06b" 78 78 }, 79 79 "action-comment" : { 80 80 "name" : "action-comment", 81 81 "rule" : ".action-comment", 82 - "hash" : "5cbd81c2469dc95048abf073d977f7e2" 82 + "hash" : "bb9067094e0cb805dc597eb0ebdd94f9" 83 83 }, 84 84 "action-comment-grey" : { 85 85 "name" : "action-comment-grey", 86 86 "rule" : ".action-comment-grey", 87 - "hash" : "be352ed442c144230f65c0a4c4d56a64" 87 + "hash" : "8d71bd6c89116ca02aef8ce830514022" 88 88 }, 89 89 "action-comment-white" : { 90 90 "name" : "action-comment-white", 91 91 "rule" : ".action-comment-white, .device-desktop .phabricator-action-view:hover .action-comment", 92 - "hash" : "5f428fb791a23e4a8e2c15f66ff23485" 92 + "hash" : "48bfa57a5b06edcf08329b47fc546071" 93 93 }, 94 94 "action-computer" : { 95 95 "name" : "action-computer", 96 96 "rule" : ".action-computer", 97 - "hash" : "ab8e3d101f3f1a8b434d449ef1b9abd3" 97 + "hash" : "4e25c6822b815a2c29478082012d1237" 98 98 }, 99 99 "action-computer-grey" : { 100 100 "name" : "action-computer-grey", 101 101 "rule" : ".action-computer-grey", 102 - "hash" : "6ad695eb4df2f2db3268513307439280" 102 + "hash" : "d2972bca3937fc49e859019c0fd6647f" 103 103 }, 104 104 "action-computer-white" : { 105 105 "name" : "action-computer-white", 106 106 "rule" : ".action-computer-white, .device-desktop .phabricator-action-view:hover .action-computer", 107 - "hash" : "773aaa54b567fb9de636e3d4be417b3a" 107 + "hash" : "154afcf0ee1539c0d5a273c971a8c6e1" 108 108 }, 109 109 "action-create" : { 110 110 "name" : "action-create", 111 111 "rule" : ".action-create", 112 - "hash" : "b6f1daca7830bd72f390e7d64630c366" 112 + "hash" : "5901de6f71af459888d1b277d0726916" 113 113 }, 114 114 "action-create-grey" : { 115 115 "name" : "action-create-grey", 116 116 "rule" : ".action-create-grey", 117 - "hash" : "fa830394fbf05528cd3c655ab0481d0a" 117 + "hash" : "3efad05cb3ac57da962e2bc1c5ff2308" 118 118 }, 119 119 "action-create-white" : { 120 120 "name" : "action-create-white", 121 121 "rule" : ".action-create-white, .device-desktop .phabricator-action-view:hover .action-create", 122 - "hash" : "addfa0ab79944ca318ffc57e568bae9c" 122 + "hash" : "8e06e0eb1031b008ca4a32eba9934289" 123 123 }, 124 124 "action-delete" : { 125 125 "name" : "action-delete", 126 126 "rule" : ".action-delete", 127 - "hash" : "174c6a08a8a7131cef810e006b5a71e0" 127 + "hash" : "41bbd0d0d4cb69b2b5423367603187e3" 128 128 }, 129 129 "action-delete-grey" : { 130 130 "name" : "action-delete-grey", 131 131 "rule" : ".action-delete-grey", 132 - "hash" : "e541601ce768fb2fa1a941a95ac3a7cf" 132 + "hash" : "244047621dbeefd392c4c7f3059a9e6a" 133 133 }, 134 134 "action-delete-white" : { 135 135 "name" : "action-delete-white", 136 136 "rule" : ".action-delete-white, .device-desktop .phabricator-action-view:hover .action-delete", 137 - "hash" : "496e780e0470bce85116baaa3aebdab2" 137 + "hash" : "deb1e03b1aa95a07fa16ee82f9605914" 138 138 }, 139 139 "action-disable" : { 140 140 "name" : "action-disable", 141 141 "rule" : ".action-disable", 142 - "hash" : "0a0b314012bdaaa307ac70d2581c20b5" 142 + "hash" : "e0db051423597acbf4611467227989f3" 143 143 }, 144 144 "action-disable-grey" : { 145 145 "name" : "action-disable-grey", 146 146 "rule" : ".action-disable-grey", 147 - "hash" : "c7741a4579c4e7a1c94dfd029b3e3bb0" 147 + "hash" : "301c0440f503fba4c3e1d0adc9f8dad6" 148 148 }, 149 149 "action-disable-white" : { 150 150 "name" : "action-disable-white", 151 151 "rule" : ".action-disable-white, .device-desktop .phabricator-action-view:hover .action-disable", 152 - "hash" : "3f456c6f15d4aaccfe85ae73e856ca1c" 152 + "hash" : "cb5ee0cda04760e0568e8245a807754f" 153 153 }, 154 154 "action-dislike" : { 155 155 "name" : "action-dislike", 156 156 "rule" : ".action-dislike", 157 - "hash" : "846820ffc823a4899dde8f8c14203df1" 157 + "hash" : "fbacfb7af00bdbd738039643cdf5bc51" 158 158 }, 159 159 "action-dislike-grey" : { 160 160 "name" : "action-dislike-grey", 161 161 "rule" : ".action-dislike-grey", 162 - "hash" : "1e994ac16acba86dae2f9e94ff0df2c2" 162 + "hash" : "73fcb492401b2b18785857f843e577f0" 163 163 }, 164 164 "action-dislike-white" : { 165 165 "name" : "action-dislike-white", 166 166 "rule" : ".action-dislike-white, .device-desktop .phabricator-action-view:hover .action-dislike", 167 - "hash" : "55d374c8466370c8c5805b8135c3f416" 167 + "hash" : "6ea8a6df9208f9a790702d801589be7e" 168 168 }, 169 169 "action-download" : { 170 170 "name" : "action-download", 171 171 "rule" : ".action-download", 172 - "hash" : "b4517953cb610ad5af5537ac5526a168" 172 + "hash" : "a3edf236a8d30a71b46f5126ac32bd6e" 173 173 }, 174 174 "action-download-alt" : { 175 175 "name" : "action-download-alt", 176 176 "rule" : ".action-download-alt", 177 - "hash" : "7ea7b578f8da62d7aaf82b1e80f0fa96" 177 + "hash" : "eb4d4a8d850b7404332bd4d36067b00a" 178 178 }, 179 179 "action-download-alt-grey" : { 180 180 "name" : "action-download-alt-grey", 181 181 "rule" : ".action-download-alt-grey", 182 - "hash" : "6b06b8e24433f7b4690a0bda53441399" 182 + "hash" : "e19cba41b19ed423ba72d5ec1447cdca" 183 183 }, 184 184 "action-download-alt-white" : { 185 185 "name" : "action-download-alt-white", 186 186 "rule" : ".action-download-alt-white, .device-desktop .phabricator-action-view:hover .action-download-alt", 187 - "hash" : "f458b2b153b9fd655bdea9c2c73ed569" 187 + "hash" : "40bd588c9478a92ba592eadb0cd2255d" 188 188 }, 189 189 "action-download-grey" : { 190 190 "name" : "action-download-grey", 191 191 "rule" : ".action-download-grey", 192 - "hash" : "d2502bf6e4c56e8c24f564285a3d0f4e" 192 + "hash" : "35df8e7bea8392edfad0e41ffba56204" 193 193 }, 194 194 "action-download-white" : { 195 195 "name" : "action-download-white", 196 196 "rule" : ".action-download-white, .device-desktop .phabricator-action-view:hover .action-download", 197 - "hash" : "90ca79835936319d143ea5c3b745744e" 197 + "hash" : "88650982d63c7fe1b0df57f19b73764e" 198 198 }, 199 199 "action-edit" : { 200 200 "name" : "action-edit", 201 201 "rule" : ".action-edit", 202 - "hash" : "539f11d58239683c73b275335e1cd5ee" 202 + "hash" : "37b7c707bb18feb66fbad36cd99f82be" 203 203 }, 204 204 "action-edit-grey" : { 205 205 "name" : "action-edit-grey", 206 206 "rule" : ".action-edit-grey", 207 - "hash" : "9ac07dfbc52997775aeaa4fafbf43d12" 207 + "hash" : "a41905d50572da65d4c7e31c6bd5b9cb" 208 208 }, 209 209 "action-edit-white" : { 210 210 "name" : "action-edit-white", 211 211 "rule" : ".action-edit-white, .device-desktop .phabricator-action-view:hover .action-edit", 212 - "hash" : "cb83ff8b6f93bf367233960142abf744" 212 + "hash" : "31a23bb50808f363fb8f92ac1774348a" 213 213 }, 214 214 "action-enable" : { 215 215 "name" : "action-enable", 216 216 "rule" : ".action-enable", 217 - "hash" : "a0d81348f61019149090e89d2d126a8f" 217 + "hash" : "ac321d05767830df55141e143a412c59" 218 218 }, 219 219 "action-enable-grey" : { 220 220 "name" : "action-enable-grey", 221 221 "rule" : ".action-enable-grey", 222 - "hash" : "8d6bf1d0333b81cde5cbeb8646316863" 222 + "hash" : "637dcb6c96460ffd8e7dc9bcce105665" 223 223 }, 224 224 "action-enable-white" : { 225 225 "name" : "action-enable-white", 226 226 "rule" : ".action-enable-white, .device-desktop .phabricator-action-view:hover .action-enable", 227 - "hash" : "6cbadeb75ede97f58a62b0bafbc7aef5" 227 + "hash" : "3856031f36cf1126c6b375419b872158" 228 228 }, 229 229 "action-file" : { 230 230 "name" : "action-file", 231 231 "rule" : ".action-file", 232 - "hash" : "95de3ed156d8e8008a464fee994a8b7a" 232 + "hash" : "7ddd35db36264115fb7c0a219f561753" 233 233 }, 234 234 "action-file-grey" : { 235 235 "name" : "action-file-grey", 236 236 "rule" : ".action-file-grey", 237 - "hash" : "bd1b94b5ef4ea93570b5dd11f9b6fc2f" 237 + "hash" : "d1147f0cd62b48c8fca06cbe923c0330" 238 238 }, 239 239 "action-file-white" : { 240 240 "name" : "action-file-white", 241 241 "rule" : ".action-file-white, .device-desktop .phabricator-action-view:hover .action-file", 242 - "hash" : "330b3ff7217edaa7b348c1209eeb5301" 242 + "hash" : "bb5434e03f07ba3ab4db4a08c91a5a95" 243 243 }, 244 244 "action-flag" : { 245 245 "name" : "action-flag", 246 246 "rule" : ".action-flag", 247 - "hash" : "017bbfc781bfa2613ade68fd791d7b66" 247 + "hash" : "da0e4bc0ee0b7ca4f307e347a9fe6f85" 248 248 }, 249 249 "action-flag-0" : { 250 250 "name" : "action-flag-0", 251 251 "rule" : ".action-flag-0", 252 - "hash" : "63ae0ab21e802d2cf11c40cb239718a6" 252 + "hash" : "e3c9d406418889ac7f219dc2e4e3695d" 253 253 }, 254 254 "action-flag-0-grey" : { 255 255 "name" : "action-flag-0-grey", 256 256 "rule" : ".action-flag-0-grey", 257 - "hash" : "6a9bb10f146c2adbd5ffc8111ce959c8" 257 + "hash" : "d48a88e9782cfc132799f8df5c828fee" 258 258 }, 259 259 "action-flag-0-white" : { 260 260 "name" : "action-flag-0-white", 261 261 "rule" : ".action-flag-0-white, .device-desktop .phabricator-action-view:hover .action-flag-0", 262 - "hash" : "f40d6750653f54ce6099c76294ab5b80" 262 + "hash" : "745431f4973ca195c418544375f56163" 263 263 }, 264 264 "action-flag-1" : { 265 265 "name" : "action-flag-1", 266 266 "rule" : ".action-flag-1", 267 - "hash" : "7f50971290dff274a11930faeeac076b" 267 + "hash" : "76ec571366cba7f3440fdb1c4b9118be" 268 268 }, 269 269 "action-flag-1-grey" : { 270 270 "name" : "action-flag-1-grey", 271 271 "rule" : ".action-flag-1-grey", 272 - "hash" : "eb6af245f22f94b81368ac24a5021cb0" 272 + "hash" : "d5807977961d63b8c52754077a68b2e0" 273 273 }, 274 274 "action-flag-1-white" : { 275 275 "name" : "action-flag-1-white", 276 276 "rule" : ".action-flag-1-white, .device-desktop .phabricator-action-view:hover .action-flag-1", 277 - "hash" : "c47bfa96d98672bfe5afa85a0cfbec89" 277 + "hash" : "b8d0afbab58acf0a573dd28d3ad51de3" 278 278 }, 279 279 "action-flag-2" : { 280 280 "name" : "action-flag-2", 281 281 "rule" : ".action-flag-2", 282 - "hash" : "63a979a0d2de57efdcf5fee2192957e1" 282 + "hash" : "e6d3a4ecf63079d053adae81d45c4f0a" 283 283 }, 284 284 "action-flag-2-grey" : { 285 285 "name" : "action-flag-2-grey", 286 286 "rule" : ".action-flag-2-grey", 287 - "hash" : "46d028b2ddbc26251b5fcc02ec87ca43" 287 + "hash" : "516c5a8e041b65aea5ddbdb7542b3d12" 288 288 }, 289 289 "action-flag-2-white" : { 290 290 "name" : "action-flag-2-white", 291 291 "rule" : ".action-flag-2-white, .device-desktop .phabricator-action-view:hover .action-flag-2", 292 - "hash" : "45b1dda7b8c85546d40789ca83ed481c" 292 + "hash" : "7c013e587c0e7522952413749e62bd62" 293 293 }, 294 294 "action-flag-3" : { 295 295 "name" : "action-flag-3", 296 296 "rule" : ".action-flag-3", 297 - "hash" : "d95b847797e6ad0ae4e5719085530709" 297 + "hash" : "4bd5ac1c2c0ed4765000fb49811d2c68" 298 298 }, 299 299 "action-flag-3-grey" : { 300 300 "name" : "action-flag-3-grey", 301 301 "rule" : ".action-flag-3-grey", 302 - "hash" : "fab7eca7e7a1e75a68a2f86a9ecb4dfd" 302 + "hash" : "f471dcb2c59b7ce1ac83057e71cd3560" 303 303 }, 304 304 "action-flag-3-white" : { 305 305 "name" : "action-flag-3-white", 306 306 "rule" : ".action-flag-3-white, .device-desktop .phabricator-action-view:hover .action-flag-3", 307 - "hash" : "42f994d618726c1294ac7206accdac0d" 307 + "hash" : "a8eaacbb09c261565ca05a2672b1fdd8" 308 308 }, 309 309 "action-flag-4" : { 310 310 "name" : "action-flag-4", 311 311 "rule" : ".action-flag-4", 312 - "hash" : "61d60e39d879436ffaa4bf3489c4be62" 312 + "hash" : "f5e87f3bcd0617174961f25c51c7dcc7" 313 313 }, 314 314 "action-flag-4-grey" : { 315 315 "name" : "action-flag-4-grey", 316 316 "rule" : ".action-flag-4-grey", 317 - "hash" : "8dc44ff4d36f6e1e4522fc865923a4df" 317 + "hash" : "a2893da9d76f4765782064035313fb2f" 318 318 }, 319 319 "action-flag-4-white" : { 320 320 "name" : "action-flag-4-white", 321 321 "rule" : ".action-flag-4-white, .device-desktop .phabricator-action-view:hover .action-flag-4", 322 - "hash" : "e948ac8da0548c252ce32f4ff2503790" 322 + "hash" : "5a1c34e6ccaf9f60e51867e593fe86fe" 323 323 }, 324 324 "action-flag-5" : { 325 325 "name" : "action-flag-5", 326 326 "rule" : ".action-flag-5", 327 - "hash" : "597c19fdaa99572b5d65d30d3cb81c13" 327 + "hash" : "1100ba1c1351fe594c66a7d68b4f55ce" 328 328 }, 329 329 "action-flag-5-grey" : { 330 330 "name" : "action-flag-5-grey", 331 331 "rule" : ".action-flag-5-grey", 332 - "hash" : "24bf02b161815f07e9bcd9e75ba141f6" 332 + "hash" : "ef2bb6c72aadb0945f9f56bf24c14174" 333 333 }, 334 334 "action-flag-5-white" : { 335 335 "name" : "action-flag-5-white", 336 336 "rule" : ".action-flag-5-white, .device-desktop .phabricator-action-view:hover .action-flag-5", 337 - "hash" : "55bcef156bbd099ada0c39aa796be663" 337 + "hash" : "ab3f27db5a080c3aa094d6d50bece2a4" 338 338 }, 339 339 "action-flag-6" : { 340 340 "name" : "action-flag-6", 341 341 "rule" : ".action-flag-6", 342 - "hash" : "490fea784ff63de9edffb1d142db49e0" 342 + "hash" : "a37b3211517264f5a51c17c50d77a0df" 343 343 }, 344 344 "action-flag-6-grey" : { 345 345 "name" : "action-flag-6-grey", 346 346 "rule" : ".action-flag-6-grey", 347 - "hash" : "5b3c14db2a182eb31f1925829adac556" 347 + "hash" : "4dd3537f6f61a4f857149a5dea413652" 348 348 }, 349 349 "action-flag-6-white" : { 350 350 "name" : "action-flag-6-white", 351 351 "rule" : ".action-flag-6-white, .device-desktop .phabricator-action-view:hover .action-flag-6", 352 - "hash" : "f251c82a144e354d241b977992aca356" 352 + "hash" : "49a663b600316d73c521687c69ef8bdd" 353 353 }, 354 354 "action-flag-7" : { 355 355 "name" : "action-flag-7", 356 356 "rule" : ".action-flag-7", 357 - "hash" : "02c8e4bcca7b2dfd746e6414f3419130" 357 + "hash" : "5f4d6d3df81afe0745b75f810fb4be33" 358 358 }, 359 359 "action-flag-7-grey" : { 360 360 "name" : "action-flag-7-grey", 361 361 "rule" : ".action-flag-7-grey", 362 - "hash" : "cf0b4c737ab286110e2e1e2f1619e7d1" 362 + "hash" : "dc17400b19fe344a664568e51bd4c2c1" 363 363 }, 364 364 "action-flag-7-white" : { 365 365 "name" : "action-flag-7-white", 366 366 "rule" : ".action-flag-7-white, .device-desktop .phabricator-action-view:hover .action-flag-7", 367 - "hash" : "bc1a5ec732b7d24e78c4dfd686347a6e" 367 + "hash" : "063e08f676e39c26b33c6cac8ae14e15" 368 368 }, 369 369 "action-flag-ghost" : { 370 370 "name" : "action-flag-ghost", 371 371 "rule" : ".action-flag-ghost", 372 - "hash" : "45e3a9c7a6436fff77a26ac14fe8a2ff" 372 + "hash" : "3152fe67fc364d460d607e338237acf4" 373 373 }, 374 374 "action-flag-ghost-grey" : { 375 375 "name" : "action-flag-ghost-grey", 376 376 "rule" : ".action-flag-ghost-grey", 377 - "hash" : "effe2cb0f7bf9d8498de00cb9d2219d5" 377 + "hash" : "56c962d3557fee90bcb6216ff9df2b84" 378 378 }, 379 379 "action-flag-ghost-white" : { 380 380 "name" : "action-flag-ghost-white", 381 381 "rule" : ".action-flag-ghost-white, .device-desktop .phabricator-action-view:hover .action-flag-ghost", 382 - "hash" : "330a6db5d35105eb2a40926ac10bf050" 382 + "hash" : "583261ed96dbe3452e3e6a0001aea6d8" 383 383 }, 384 384 "action-flag-grey" : { 385 385 "name" : "action-flag-grey", 386 386 "rule" : ".action-flag-grey", 387 - "hash" : "19ff6ca97d5a9417711c125342bfd181" 387 + "hash" : "2abe4ae06cc54bf6069bac446e5fa439" 388 388 }, 389 389 "action-flag-white" : { 390 390 "name" : "action-flag-white", 391 391 "rule" : ".action-flag-white, .device-desktop .phabricator-action-view:hover .action-flag", 392 - "hash" : "c75814a0ab1d5efd93eb04bc91ea1d70" 392 + "hash" : "3442002f986cb8f7e1f06183927945a3" 393 393 }, 394 394 "action-folder-open" : { 395 395 "name" : "action-folder-open", 396 396 "rule" : ".action-folder-open", 397 - "hash" : "041a997bd0fe3dc0eab6974cab2f4909" 397 + "hash" : "fa3478ecd57fd41a6a16107db86a15e9" 398 398 }, 399 399 "action-folder-open-grey" : { 400 400 "name" : "action-folder-open-grey", 401 401 "rule" : ".action-folder-open-grey", 402 - "hash" : "78861d4d04e344db11e235dfadfaa0b2" 402 + "hash" : "dada2fb1cbcb8256f607eae1914219c1" 403 403 }, 404 404 "action-folder-open-white" : { 405 405 "name" : "action-folder-open-white", 406 406 "rule" : ".action-folder-open-white, .device-desktop .phabricator-action-view:hover .action-folder-open", 407 - "hash" : "b6c96d025fbd7d9d2f6184ab2b5255c1" 407 + "hash" : "af7843feb777d7eafc3904fe0a268ed3" 408 408 }, 409 409 "action-fork" : { 410 410 "name" : "action-fork", 411 411 "rule" : ".action-fork", 412 - "hash" : "73872362aa5fa8a715bb2b282e8873a7" 412 + "hash" : "15285571cef4f6251aad47c42e5f0f1c" 413 413 }, 414 414 "action-fork-grey" : { 415 415 "name" : "action-fork-grey", 416 416 "rule" : ".action-fork-grey", 417 - "hash" : "80b616de5d415c74e2561cf85cd5563a" 417 + "hash" : "aa875e4018c152bed7b37c776d18660e" 418 418 }, 419 419 "action-fork-white" : { 420 420 "name" : "action-fork-white", 421 421 "rule" : ".action-fork-white, .device-desktop .phabricator-action-view:hover .action-fork", 422 - "hash" : "ed9479c691af95386f88076a65d73b19" 422 + "hash" : "a3a53c919c04ae550970ccb5477671d2" 423 423 }, 424 424 "action-herald" : { 425 425 "name" : "action-herald", 426 426 "rule" : ".action-herald", 427 - "hash" : "75eb507020fcb7dc6890022513648e85" 427 + "hash" : "4084564ec8592cb6c9bf840f8c7eea6a" 428 428 }, 429 429 "action-herald-grey" : { 430 430 "name" : "action-herald-grey", 431 431 "rule" : ".action-herald-grey", 432 - "hash" : "30b633461f095ac3f032eb02398ae67e" 432 + "hash" : "bc9f0fef0b1f75ed4f20cc4359f706f5" 433 433 }, 434 434 "action-herald-white" : { 435 435 "name" : "action-herald-white", 436 436 "rule" : ".action-herald-white, .device-desktop .phabricator-action-view:hover .action-herald", 437 - "hash" : "149fd50929e68d6bcf6310d9e4c316b6" 437 + "hash" : "7d773778fa6126ac05a4c6f9d85dd20d" 438 438 }, 439 439 "action-highlight" : { 440 440 "name" : "action-highlight", 441 441 "rule" : ".action-highlight", 442 - "hash" : "4430cca9eab0cbd85d3ee1b5e1f29ae3" 442 + "hash" : "25f8142b1c665f623f9eab935bf256ab" 443 443 }, 444 444 "action-highlight-grey" : { 445 445 "name" : "action-highlight-grey", 446 446 "rule" : ".action-highlight-grey", 447 - "hash" : "47fe828e1b61553326752209a8fba6cb" 447 + "hash" : "0d4347b151224476548a0dc43f6d1ceb" 448 448 }, 449 449 "action-highlight-white" : { 450 450 "name" : "action-highlight-white", 451 451 "rule" : ".action-highlight-white, .device-desktop .phabricator-action-view:hover .action-highlight", 452 - "hash" : "09a52dfdf893ee63be162f0c180d31fe" 452 + "hash" : "d32f9b42dc24f41aa02c18ba5db5d65f" 453 453 }, 454 454 "action-history" : { 455 455 "name" : "action-history", 456 456 "rule" : ".action-history", 457 - "hash" : "6669ec72a77a09e3e8c8c5fe941810a9" 457 + "hash" : "69fbd6f3875ceef440a5fdd727162024" 458 458 }, 459 459 "action-history-grey" : { 460 460 "name" : "action-history-grey", 461 461 "rule" : ".action-history-grey", 462 - "hash" : "3146a0c0c8698ef95ad74515cc9971ad" 462 + "hash" : "97ed21324d25b236212e33c9bfd4dc0a" 463 463 }, 464 464 "action-history-white" : { 465 465 "name" : "action-history-white", 466 466 "rule" : ".action-history-white, .device-desktop .phabricator-action-view:hover .action-history", 467 - "hash" : "07490563c7cf4e8194918c3700ca1b57" 467 + "hash" : "4ffae3b425eaf5a7aec9757bd9fb97c3" 468 468 }, 469 469 "action-image" : { 470 470 "name" : "action-image", 471 471 "rule" : ".action-image", 472 - "hash" : "5f03cd1fa806db2861d93a0fba7deff7" 472 + "hash" : "bfe9f9b16bf54a258c76cf314bb87152" 473 473 }, 474 474 "action-image-grey" : { 475 475 "name" : "action-image-grey", 476 476 "rule" : ".action-image-grey", 477 - "hash" : "32e1008c29447da5fc4a263c1b56ce41" 477 + "hash" : "e11788cab503c91d3a39847165181cb8" 478 478 }, 479 479 "action-image-white" : { 480 480 "name" : "action-image-white", 481 481 "rule" : ".action-image-white, .device-desktop .phabricator-action-view:hover .action-image", 482 - "hash" : "d48be030bf83013fcd3549460f197712" 482 + "hash" : "de395492a2088e998f48cba698744b0f" 483 483 }, 484 484 "action-like" : { 485 485 "name" : "action-like", 486 486 "rule" : ".action-like", 487 - "hash" : "89d7ac4a8642389bded3af9aa464b06b" 487 + "hash" : "2afed6b1e26578bcbc23f8d1c72221ab" 488 488 }, 489 489 "action-like-grey" : { 490 490 "name" : "action-like-grey", 491 491 "rule" : ".action-like-grey", 492 - "hash" : "262bdae8449eae9ecfb58246a8457f64" 492 + "hash" : "8b2baee6c58e57d61c71d48b7e52522b" 493 493 }, 494 494 "action-like-white" : { 495 495 "name" : "action-like-white", 496 496 "rule" : ".action-like-white, .device-desktop .phabricator-action-view:hover .action-like", 497 - "hash" : "773b180de4276644cad9688a1f0935ce" 497 + "hash" : "0b6dd7cb5820d65faefdc2e7a8d75acf" 498 498 }, 499 499 "action-link" : { 500 500 "name" : "action-link", 501 501 "rule" : ".action-link", 502 - "hash" : "bbaed885947840548f9b466fd97aef83" 502 + "hash" : "0bb7d22b7db2915c787f132bee42a71d" 503 503 }, 504 504 "action-link-grey" : { 505 505 "name" : "action-link-grey", 506 506 "rule" : ".action-link-grey", 507 - "hash" : "c3bd4b5b14e7ed7c522fd148022a9e7b" 507 + "hash" : "0bfe4298307d9bd2e66a43b5d1ee6c00" 508 508 }, 509 509 "action-link-white" : { 510 510 "name" : "action-link-white", 511 511 "rule" : ".action-link-white, .device-desktop .phabricator-action-view:hover .action-link", 512 - "hash" : "e846157dd9d0119d82b2777052acdb3d" 512 + "hash" : "4cc1d11240276baf1864b9209e28d794" 513 513 }, 514 514 "action-lint-info" : { 515 515 "name" : "action-lint-info", 516 516 "rule" : ".action-lint-info", 517 - "hash" : "324e1d2d947862a69df78e68e4a36b1f" 517 + "hash" : "f3588606b991614019f2aba3e5d75867" 518 518 }, 519 519 "action-lint-info-grey" : { 520 520 "name" : "action-lint-info-grey", 521 521 "rule" : ".action-lint-info-grey", 522 - "hash" : "76eadf42825e50f995b5d8d088ee591f" 522 + "hash" : "738e607d12f91a7a9bc8f9b2c13052b6" 523 523 }, 524 524 "action-lint-info-white" : { 525 525 "name" : "action-lint-info-white", 526 526 "rule" : ".action-lint-info-white, .device-desktop .phabricator-action-view:hover .action-lint-info", 527 - "hash" : "ef6d4bb883446171a1a1df66b13b2c66" 527 + "hash" : "04d9cd9ec75225136ce19ef447ebbd5a" 528 528 }, 529 529 "action-lint-ok" : { 530 530 "name" : "action-lint-ok", 531 531 "rule" : ".action-lint-ok", 532 - "hash" : "97b66fc1a5474f00bc1fdda6525820d5" 532 + "hash" : "d2dd1f379b71c38233c33c106867593d" 533 533 }, 534 534 "action-lint-ok-grey" : { 535 535 "name" : "action-lint-ok-grey", 536 536 "rule" : ".action-lint-ok-grey", 537 - "hash" : "eefd06511a24992aef9e486b560c4062" 537 + "hash" : "e7b4b0ff5593c77ecf8af929960656c1" 538 538 }, 539 539 "action-lint-ok-white" : { 540 540 "name" : "action-lint-ok-white", 541 541 "rule" : ".action-lint-ok-white, .device-desktop .phabricator-action-view:hover .action-lint-ok", 542 - "hash" : "f2720295139147930fb78e962450075d" 542 + "hash" : "26661c20c9d68c0568e7f8e7b9a79370" 543 543 }, 544 544 "action-lint-warning" : { 545 545 "name" : "action-lint-warning", 546 546 "rule" : ".action-lint-warning", 547 - "hash" : "d0b1c5f84db953de088056db7fbe1eae" 547 + "hash" : "30f226154af0794c0e05f53129a7a8fc" 548 548 }, 549 549 "action-lint-warning-grey" : { 550 550 "name" : "action-lint-warning-grey", 551 551 "rule" : ".action-lint-warning-grey", 552 - "hash" : "f4f73032f5f2310d7731affba2318d5d" 552 + "hash" : "fef17b967a78fba8c6a4f772fc8c7ab2" 553 553 }, 554 554 "action-lint-warning-white" : { 555 555 "name" : "action-lint-warning-white", 556 556 "rule" : ".action-lint-warning-white, .device-desktop .phabricator-action-view:hover .action-lint-warning", 557 - "hash" : "d540c0afe65862f5c32c934f1956ca36" 557 + "hash" : "acc7c971f83efb5298390bb0ebdbbdb1" 558 558 }, 559 559 "action-lock" : { 560 560 "name" : "action-lock", 561 561 "rule" : ".action-lock", 562 - "hash" : "7ca88645707cf9cd69ace1e416c0f964" 562 + "hash" : "d79fe308c2bca2a15eb4f2b0784eaef6" 563 563 }, 564 564 "action-lock-grey" : { 565 565 "name" : "action-lock-grey", 566 566 "rule" : ".action-lock-grey", 567 - "hash" : "c95e9a3071dc3bc389c235c49a5c5388" 567 + "hash" : "ffa7de98cd41e3db7f9ea284662de41e" 568 568 }, 569 569 "action-lock-white" : { 570 570 "name" : "action-lock-white", 571 571 "rule" : ".action-lock-white, .device-desktop .phabricator-action-view:hover .action-lock", 572 - "hash" : "e6f5edd8fdfadab84dd95e5582ac1db1" 572 + "hash" : "323f4e1dc1d38b173bbe290c27ec9bea" 573 573 }, 574 574 "action-love" : { 575 575 "name" : "action-love", 576 576 "rule" : ".action-love", 577 - "hash" : "9f101bddc6deba2b128bdc7bb45d583a" 577 + "hash" : "4b5271c2f7cbf2ae1d904a3cc5f79b09" 578 578 }, 579 579 "action-love-grey" : { 580 580 "name" : "action-love-grey", 581 581 "rule" : ".action-love-grey", 582 - "hash" : "615fa9c17fa8a9e0b27846f3c99fdd87" 582 + "hash" : "3b629d11a145bc0eb300d9ee8daaacc6" 583 583 }, 584 584 "action-love-white" : { 585 585 "name" : "action-love-white", 586 586 "rule" : ".action-love-white, .device-desktop .phabricator-action-view:hover .action-love", 587 - "hash" : "5f92d9a4565e79b96c956f054ede993a" 587 + "hash" : "25a8f8c240d2fcd12e8ce192c749c9cb" 588 588 }, 589 589 "action-merge" : { 590 590 "name" : "action-merge", 591 591 "rule" : ".action-merge", 592 - "hash" : "0c7cb3934262b3374f5c94e36c826672" 592 + "hash" : "d1465a199273ca5a7d1914b7827388aa" 593 593 }, 594 594 "action-merge-grey" : { 595 595 "name" : "action-merge-grey", 596 596 "rule" : ".action-merge-grey", 597 - "hash" : "e8c11bd0a92a273ba5f90fee8bd31fb6" 597 + "hash" : "b04fa26d964413d9b2efe0354aa22f95" 598 598 }, 599 599 "action-merge-white" : { 600 600 "name" : "action-merge-white", 601 601 "rule" : ".action-merge-white, .device-desktop .phabricator-action-view:hover .action-merge", 602 - "hash" : "433a26913a0db78eb707edf0dbbf0fdc" 602 + "hash" : "c89d5163d7e237cde54b833356311a1c" 603 603 }, 604 604 "action-message" : { 605 605 "name" : "action-message", 606 606 "rule" : ".action-message", 607 - "hash" : "c14b8eb1f70855eb801c42c5f04ea5d0" 607 + "hash" : "b965efb0e7bc88a5f944bfa0476eb652" 608 608 }, 609 609 "action-message-grey" : { 610 610 "name" : "action-message-grey", 611 611 "rule" : ".action-message-grey", 612 - "hash" : "93574f7b8adadc01b036b2376e7b1eb1" 612 + "hash" : "ac4c4a9265d0d4810164907222ff401c" 613 613 }, 614 614 "action-message-white" : { 615 615 "name" : "action-message-white", 616 616 "rule" : ".action-message-white, .device-desktop .phabricator-action-view:hover .action-message", 617 - "hash" : "3fe1df81d1af648ac1e483e2a081ed62" 617 + "hash" : "7ec19102800f71d08b3d08f31cbbaf02" 618 618 }, 619 619 "action-meta-mta" : { 620 620 "name" : "action-meta-mta", 621 621 "rule" : ".action-meta-mta", 622 - "hash" : "3895ce9ea717cc0a1bcc2f93015a5c86" 622 + "hash" : "afbb4a97071268b542634aea2eed9fdb" 623 623 }, 624 624 "action-meta-mta-grey" : { 625 625 "name" : "action-meta-mta-grey", 626 626 "rule" : ".action-meta-mta-grey", 627 - "hash" : "873f04635a614bce012cfc82837b6be1" 627 + "hash" : "bc939fa46edc09f3e8b31a06cfb18895" 628 628 }, 629 629 "action-meta-mta-white" : { 630 630 "name" : "action-meta-mta-white", 631 631 "rule" : ".action-meta-mta-white, .device-desktop .phabricator-action-view:hover .action-meta-mta", 632 - "hash" : "8d1edd5f73363a7057474364850abc39" 632 + "hash" : "e1f6ed22db628d691172d7589004ff8f" 633 633 }, 634 634 "action-move" : { 635 635 "name" : "action-move", 636 636 "rule" : ".action-move", 637 - "hash" : "fa5d4f6c263a4cad009990a3f00c1819" 637 + "hash" : "5ee19a8116be04fca2cdb2ca18848aaa" 638 638 }, 639 639 "action-move-grey" : { 640 640 "name" : "action-move-grey", 641 641 "rule" : ".action-move-grey", 642 - "hash" : "201db3f4614022b6e57c2168aa9f7298" 642 + "hash" : "9f856630044d1d87d689b8d381426391" 643 643 }, 644 644 "action-move-white" : { 645 645 "name" : "action-move-white", 646 646 "rule" : ".action-move-white, .device-desktop .phabricator-action-view:hover .action-move", 647 - "hash" : "d7f6217f85f2cfa45d7e44bd06d3f438" 647 + "hash" : "3f81eb8b52850b4910ecf4a8c7667ad5" 648 648 }, 649 649 "action-new" : { 650 650 "name" : "action-new", 651 651 "rule" : ".action-new", 652 - "hash" : "62ce1bb9b7c8252f58a37c655b7ed377" 652 + "hash" : "dfbcbf59a5440d9a99b0c18e2010f58e" 653 653 }, 654 654 "action-new-grey" : { 655 655 "name" : "action-new-grey", 656 656 "rule" : ".action-new-grey", 657 - "hash" : "5d96082b216b783d6256ee3cc755dc87" 657 + "hash" : "fc6c948a0019a8a63e1a36a0c21f60ef" 658 658 }, 659 659 "action-new-white" : { 660 660 "name" : "action-new-white", 661 661 "rule" : ".action-new-white, .device-desktop .phabricator-action-view:hover .action-new, .phabricator-application-launch-create:hover .phabricator-application-create-icon.action-new-grey", 662 - "hash" : "782f8bc8dc883c0637910e5fbc3c6f9f" 662 + "hash" : "99a86e78d0f9bd775e283484b2bba989" 663 663 }, 664 664 "action-none" : { 665 665 "name" : "action-none", 666 666 "rule" : ".action-none", 667 - "hash" : "5595f8625292cd95d1240ed429dc880c" 667 + "hash" : "29ab47e45ff4d1f23786bf0c1fc20414" 668 668 }, 669 669 "action-none-grey" : { 670 670 "name" : "action-none-grey", 671 671 "rule" : ".action-none-grey", 672 - "hash" : "76d2d2e3fff56f21759d03dd5c17331c" 672 + "hash" : "8d0dec138cc8bbd2da813c24a55ef8f5" 673 673 }, 674 674 "action-none-white" : { 675 675 "name" : "action-none-white", 676 676 "rule" : ".action-none-white, .device-desktop .phabricator-action-view:hover .action-none", 677 - "hash" : "69ce41011458cfbdabb1a9fb7537d087" 677 + "hash" : "ee7b57ca9dcc4e87e09fbe2949ec1242" 678 678 }, 679 679 "action-perflab" : { 680 680 "name" : "action-perflab", 681 681 "rule" : ".action-perflab", 682 - "hash" : "ec1acf5413f771b1f2782aa759074764" 682 + "hash" : "233b376e3b9d43082a60ea54afa6bc18" 683 683 }, 684 684 "action-perflab-grey" : { 685 685 "name" : "action-perflab-grey", 686 686 "rule" : ".action-perflab-grey", 687 - "hash" : "2f7fa40824ccf254322e60e216f1d50e" 687 + "hash" : "fbd064b66bed85a725cbb4741d0e85b0" 688 688 }, 689 689 "action-perflab-white" : { 690 690 "name" : "action-perflab-white", 691 691 "rule" : ".action-perflab-white, .device-desktop .phabricator-action-view:hover .action-perflab", 692 - "hash" : "aac6b8b9fa044430375ba370243292cb" 692 + "hash" : "9add2d46ea13b938c631ac2a4f376e3d" 693 693 }, 694 694 "action-preview" : { 695 695 "name" : "action-preview", 696 696 "rule" : ".action-preview", 697 - "hash" : "a33cb74fc6e1b9665ac4ff20635babe8" 697 + "hash" : "2eb136352c63e4f0f7632f81d12d635c" 698 698 }, 699 699 "action-preview-grey" : { 700 700 "name" : "action-preview-grey", 701 701 "rule" : ".action-preview-grey", 702 - "hash" : "4cfe3a27e5e818ea9f7805a7c1b05fa7" 702 + "hash" : "f7c4e6ea75fb0a9f2fe00183112db8ad" 703 703 }, 704 704 "action-preview-white" : { 705 705 "name" : "action-preview-white", 706 706 "rule" : ".action-preview-white, .device-desktop .phabricator-action-view:hover .action-preview", 707 - "hash" : "61523a3b9edc3d0ddfea9f399bae0fe1" 707 + "hash" : "71cac08ba19ee678499a9cbd5c24c6cf" 708 708 }, 709 709 "action-refresh" : { 710 710 "name" : "action-refresh", 711 711 "rule" : ".action-refresh", 712 - "hash" : "d5d7cf16bfe862d0a101ccf216b76df1" 712 + "hash" : "171e46e974912cfa0b347d1e96a579c7" 713 713 }, 714 714 "action-refresh-grey" : { 715 715 "name" : "action-refresh-grey", 716 716 "rule" : ".action-refresh-grey", 717 - "hash" : "b4838ee697b2a9b70dc6920da7ab3e89" 717 + "hash" : "6e102669eb7b6389d7c08c838886841d" 718 718 }, 719 719 "action-refresh-white" : { 720 720 "name" : "action-refresh-white", 721 721 "rule" : ".action-refresh-white, .device-desktop .phabricator-action-view:hover .action-refresh", 722 - "hash" : "44fa7fc18a847416b9db3858e0b47737" 722 + "hash" : "5a7dad6d45f6b47bc1175a7efa4089a1" 723 723 }, 724 724 "action-remove" : { 725 725 "name" : "action-remove", 726 726 "rule" : ".action-remove", 727 - "hash" : "4c9dcad5540a611a5e05380d7982a601" 727 + "hash" : "364176fcff78057741963dbf48eecbbd" 728 728 }, 729 729 "action-remove-grey" : { 730 730 "name" : "action-remove-grey", 731 731 "rule" : ".action-remove-grey", 732 - "hash" : "dc0b179b0a96dd5c9f387ee41daf77a7" 732 + "hash" : "b0d190ec2837c0cbdc99428178a8eddf" 733 733 }, 734 734 "action-remove-white" : { 735 735 "name" : "action-remove-white", 736 736 "rule" : ".action-remove-white, .device-desktop .phabricator-action-view:hover .action-remove", 737 - "hash" : "8c750027adb708e8507a51986081d309" 737 + "hash" : "e3646206c14813fca81a35de43722aae" 738 738 }, 739 739 "action-search" : { 740 740 "name" : "action-search", 741 741 "rule" : ".action-search", 742 - "hash" : "1340e68f4f2b55c5feee4a0241672c82" 742 + "hash" : "8307439f020b262ab8443edb745ed171" 743 743 }, 744 744 "action-search-grey" : { 745 745 "name" : "action-search-grey", 746 746 "rule" : ".action-search-grey", 747 - "hash" : "a7e598337c9a8a6feb3de62247abb611" 747 + "hash" : "c1ce13aab1083b20fb094b56b3deab8a" 748 748 }, 749 749 "action-search-white" : { 750 750 "name" : "action-search-white", 751 751 "rule" : ".action-search-white, .device-desktop .phabricator-action-view:hover .action-search", 752 - "hash" : "91e764bd3ed921153ac66fc56e04b884" 752 + "hash" : "72098d2091e6297c4253c3e45a365ec4" 753 753 }, 754 754 "action-start-sandcastle" : { 755 755 "name" : "action-start-sandcastle", 756 756 "rule" : ".action-start-sandcastle", 757 - "hash" : "52f245ddeff53c5cf084c27b6e45b152" 757 + "hash" : "afa09dd71e0747c56e64d95e975122c8" 758 758 }, 759 759 "action-start-sandcastle-grey" : { 760 760 "name" : "action-start-sandcastle-grey", 761 761 "rule" : ".action-start-sandcastle-grey", 762 - "hash" : "d41cff7a3c898616f75634c8d796cd6c" 762 + "hash" : "b0912a9f2a1bcff19ab90f539107864f" 763 763 }, 764 764 "action-start-sandcastle-white" : { 765 765 "name" : "action-start-sandcastle-white", 766 766 "rule" : ".action-start-sandcastle-white, .device-desktop .phabricator-action-view:hover .action-start-sandcastle", 767 - "hash" : "04959e4bcf29b57213e5b49ab6f25aeb" 767 + "hash" : "53692026662afaafdcbaa9ab7de7aa0d" 768 768 }, 769 769 "action-subscribe-add" : { 770 770 "name" : "action-subscribe-add", 771 771 "rule" : ".action-subscribe-add", 772 - "hash" : "1b166c23ed6a971d2f93d37147caf622" 772 + "hash" : "d2100e88f2ffc71c2df1d40049f2bf68" 773 773 }, 774 774 "action-subscribe-add-grey" : { 775 775 "name" : "action-subscribe-add-grey", 776 776 "rule" : ".action-subscribe-add-grey", 777 - "hash" : "2b2fd9749636140f78233bef8e604d56" 777 + "hash" : "637094fbed70285b62cbfe9ead4bd480" 778 778 }, 779 779 "action-subscribe-add-white" : { 780 780 "name" : "action-subscribe-add-white", 781 781 "rule" : ".action-subscribe-add-white, .device-desktop .phabricator-action-view:hover .action-subscribe-add", 782 - "hash" : "2ca899f12f05b03c5c54cbac08d2b74d" 782 + "hash" : "75be8cd5e9622834bd6faf0c6d1db271" 783 783 }, 784 784 "action-subscribe-auto" : { 785 785 "name" : "action-subscribe-auto", 786 786 "rule" : ".action-subscribe-auto", 787 - "hash" : "a6cd0083b657b924882d830cd4f91bbc" 787 + "hash" : "95145b14f35005a0ff3224e3076a9388" 788 788 }, 789 789 "action-subscribe-auto-grey" : { 790 790 "name" : "action-subscribe-auto-grey", 791 791 "rule" : ".action-subscribe-auto-grey", 792 - "hash" : "77ccbf046a3a39ebf20ba6e58e865438" 792 + "hash" : "12edd25560b91838642baa3529743733" 793 793 }, 794 794 "action-subscribe-auto-white" : { 795 795 "name" : "action-subscribe-auto-white", 796 796 "rule" : ".action-subscribe-auto-white, .device-desktop .phabricator-action-view:hover .action-subscribe-auto", 797 - "hash" : "f22920740beb517bb7d33ae91462907d" 797 + "hash" : "eda2baeaf056a2d5f46184393ec6dbca" 798 798 }, 799 799 "action-subscribe-delete" : { 800 800 "name" : "action-subscribe-delete", 801 801 "rule" : ".action-subscribe-delete", 802 - "hash" : "e78959e3ed89af610da59e8ef77c799d" 802 + "hash" : "55a16e4abd9fe661f350b5327aafed88" 803 803 }, 804 804 "action-subscribe-delete-grey" : { 805 805 "name" : "action-subscribe-delete-grey", 806 806 "rule" : ".action-subscribe-delete-grey", 807 - "hash" : "e3e8d142bdd4d1acfebcd03c790ac5b5" 807 + "hash" : "c1c033955177120cd6adcb0d68f37e18" 808 808 }, 809 809 "action-subscribe-delete-white" : { 810 810 "name" : "action-subscribe-delete-white", 811 811 "rule" : ".action-subscribe-delete-white, .device-desktop .phabricator-action-view:hover .action-subscribe-delete", 812 - "hash" : "1368667fb8b115c95512eda55d7065a5" 812 + "hash" : "bc0d60756e5b4c141b801fb384933eab" 813 813 }, 814 814 "action-tag" : { 815 815 "name" : "action-tag", 816 816 "rule" : ".action-tag", 817 - "hash" : "2574ffef0cafe758774e358bd6e5cd6a" 817 + "hash" : "069a8593574d6f847a3611b23677e667" 818 818 }, 819 819 "action-tag-grey" : { 820 820 "name" : "action-tag-grey", 821 821 "rule" : ".action-tag-grey", 822 - "hash" : "e8194bcfb48d63a5a8c5ce69a0a3dcc5" 822 + "hash" : "544d96d3bed359a545f2eaa16687cead" 823 823 }, 824 824 "action-tag-white" : { 825 825 "name" : "action-tag-white", 826 826 "rule" : ".action-tag-white, .device-desktop .phabricator-action-view:hover .action-tag", 827 - "hash" : "2d54a42a650a987ce706c2d935ff33cd" 827 + "hash" : "e3e509127ef1a452faaa03465dd6f9c1" 828 828 }, 829 829 "action-transcript" : { 830 830 "name" : "action-transcript", 831 831 "rule" : ".action-transcript", 832 - "hash" : "6be4d47abddeb109216f346787face70" 832 + "hash" : "4e76a6b1c51fcfc1b1b1ad0e7f247c3a" 833 833 }, 834 834 "action-transcript-grey" : { 835 835 "name" : "action-transcript-grey", 836 836 "rule" : ".action-transcript-grey", 837 - "hash" : "9ed35e5d39536a4b8dd934039c742447" 837 + "hash" : "313af234ca64b2ecc53dd1c91ce0b1c1" 838 838 }, 839 839 "action-transcript-white" : { 840 840 "name" : "action-transcript-white", 841 841 "rule" : ".action-transcript-white, .device-desktop .phabricator-action-view:hover .action-transcript", 842 - "hash" : "7c3df910499b8ddb85c2f53e0d58c0db" 842 + "hash" : "39743a3d055fcd5b344eb59092006f16" 843 843 }, 844 844 "action-undo" : { 845 845 "name" : "action-undo", 846 846 "rule" : ".action-undo", 847 - "hash" : "f81151e242bb8ae29714bec10cb7c5f1" 847 + "hash" : "7e860a8ec5bb760b0767ecc3114173c7" 848 848 }, 849 849 "action-undo-grey" : { 850 850 "name" : "action-undo-grey", 851 851 "rule" : ".action-undo-grey", 852 - "hash" : "8d4b0bc147b463011ec00321ba75b17f" 852 + "hash" : "6c9fdd95e53b4ec05da46cf129e3c6fb" 853 853 }, 854 854 "action-undo-white" : { 855 855 "name" : "action-undo-white", 856 856 "rule" : ".action-undo-white, .device-desktop .phabricator-action-view:hover .action-undo", 857 - "hash" : "39b777060ce1d1b0c68c550bb63d7146" 857 + "hash" : "8b3fefbad3b5179a6b35b41617e2cef2" 858 858 }, 859 859 "action-unlock" : { 860 860 "name" : "action-unlock", 861 861 "rule" : ".action-unlock", 862 - "hash" : "d7cc6ffcda62a90e455d37ca0f07d0dd" 862 + "hash" : "e2ff544b4c60dcf7545755d96d23b993" 863 863 }, 864 864 "action-unlock-grey" : { 865 865 "name" : "action-unlock-grey", 866 866 "rule" : ".action-unlock-grey", 867 - "hash" : "efdc3048fa3a4051a43f43a915e53b0e" 867 + "hash" : "d9656d004d5c516a38d75462eadf82f5" 868 868 }, 869 869 "action-unlock-white" : { 870 870 "name" : "action-unlock-white", 871 871 "rule" : ".action-unlock-white, .device-desktop .phabricator-action-view:hover .action-unlock", 872 - "hash" : "d0e7aff47724d94167e9bcb11eb5e6aa" 872 + "hash" : "a970eb7a33d2c5c71d2125b0b8e79375" 873 873 }, 874 874 "action-unmerge" : { 875 875 "name" : "action-unmerge", 876 876 "rule" : ".action-unmerge", 877 - "hash" : "00d417a336f6e076bb587cd4cef5eb49" 877 + "hash" : "48a0128075a15f5145c343f9fe4fba2e" 878 878 }, 879 879 "action-unmerge-grey" : { 880 880 "name" : "action-unmerge-grey", 881 881 "rule" : ".action-unmerge-grey", 882 - "hash" : "904a51920678c838b72c934085f339a7" 882 + "hash" : "9be17dad18c74a10122def1dabbbf1c4" 883 883 }, 884 884 "action-unmerge-white" : { 885 885 "name" : "action-unmerge-white", 886 886 "rule" : ".action-unmerge-white, .device-desktop .phabricator-action-view:hover .action-unmerge", 887 - "hash" : "2e5761de881642c94e641879bbde318f" 887 + "hash" : "5139f358574dcd0ac5cecf412c8115fd" 888 888 }, 889 889 "action-unpublish" : { 890 890 "name" : "action-unpublish", 891 891 "rule" : ".action-unpublish", 892 - "hash" : "88d21b9ce49b7ac886250df307f756ce" 892 + "hash" : "3e6211c213fec14fe152b5fabcb0f306" 893 893 }, 894 894 "action-unpublish-grey" : { 895 895 "name" : "action-unpublish-grey", 896 896 "rule" : ".action-unpublish-grey", 897 - "hash" : "5c4fe69253100e9ca292348af13b9f3f" 897 + "hash" : "602cdfcfa89b575456aee6eb808accc4" 898 898 }, 899 899 "action-unpublish-white" : { 900 900 "name" : "action-unpublish-white", 901 901 "rule" : ".action-unpublish-white, .device-desktop .phabricator-action-view:hover .action-unpublish", 902 - "hash" : "f663861c0776cea790d8392e4aa2fc5d" 902 + "hash" : "b8cde193bf30d834fc90ddfd17fe56ea" 903 903 }, 904 904 "action-upload" : { 905 905 "name" : "action-upload", 906 906 "rule" : ".action-upload", 907 - "hash" : "bdd10302988fe6d2130f0dfc3b67d281" 907 + "hash" : "e1ab661b790989b38b07eae365343c36" 908 908 }, 909 909 "action-upload-grey" : { 910 910 "name" : "action-upload-grey", 911 911 "rule" : ".action-upload-grey", 912 - "hash" : "f376bbbbadefea220ec02ca3ae53d41a" 912 + "hash" : "f03d83d2e4d3ae10661d430aa4f02523" 913 913 }, 914 914 "action-upload-white" : { 915 915 "name" : "action-upload-white", 916 916 "rule" : ".action-upload-white, .device-desktop .phabricator-action-view:hover .action-upload", 917 - "hash" : "4b31d9dc6f17bd0cd54c3dcea7a95313" 917 + "hash" : "75a3ea84188c4b4b21aa5a656464a8d0" 918 918 }, 919 919 "action-warning" : { 920 920 "name" : "action-warning", 921 921 "rule" : ".action-warning", 922 - "hash" : "950ac4ea5e65de41aca0788e6769650f" 922 + "hash" : "c1544d80d0bb28d7f9925e5ecda1165f" 923 923 }, 924 924 "action-warning-grey" : { 925 925 "name" : "action-warning-grey", 926 926 "rule" : ".action-warning-grey", 927 - "hash" : "180e305268970291f6a38760deea0d4c" 927 + "hash" : "dccb1f52678bf74fc1eaa6a6e8dcae7a" 928 928 }, 929 929 "action-warning-white" : { 930 930 "name" : "action-warning-white", 931 931 "rule" : ".action-warning-white, .device-desktop .phabricator-action-view:hover .action-warning", 932 - "hash" : "4ec3034629bc144886cd7aae5412dce2" 932 + "hash" : "57aadd4cf33bf6cb6464d243cd3e5f4d" 933 933 }, 934 934 "action-world" : { 935 935 "name" : "action-world", 936 936 "rule" : ".action-world", 937 - "hash" : "95ebc5ab6e70ab9d794f0960f2a43559" 937 + "hash" : "374749ade70638672595b8a985341a34" 938 938 }, 939 939 "action-world-grey" : { 940 940 "name" : "action-world-grey", 941 941 "rule" : ".action-world-grey", 942 - "hash" : "969b164f2f5580f9226f293dbcfe50bc" 942 + "hash" : "f5fa565f8dbc81d5ac8d8f128179929b" 943 943 }, 944 944 "action-world-white" : { 945 945 "name" : "action-world-white", 946 946 "rule" : ".action-world-white, .device-desktop .phabricator-action-view:hover .action-world", 947 - "hash" : "106ab6c8bc5a685cd0837baaa6c617e4" 947 + "hash" : "b50f9d742377edf4edda3e1e78f1e558" 948 948 }, 949 949 "remarkup-assist-text_b" : { 950 950 "name" : "remarkup-assist-text_b", 951 951 "rule" : ".remarkup-assist-b", 952 - "hash" : "b2e7ba9cba2946a78ac8045d83852ade" 952 + "hash" : "12c565d4934f6a777c9524baf75cebb6" 953 953 }, 954 954 "remarkup-assist-text_code" : { 955 955 "name" : "remarkup-assist-text_code", 956 956 "rule" : ".remarkup-assist-code", 957 - "hash" : "c0527e968c770450d4aa7cefe38271b8" 957 + "hash" : "f06f106cb8edb67e8b99d159d704a61a" 958 958 }, 959 959 "remarkup-assist-text_help" : { 960 960 "name" : "remarkup-assist-text_help", 961 961 "rule" : ".remarkup-assist-help", 962 - "hash" : "e8312c555e5f3935d8e2dcf44147b7f8" 962 + "hash" : "9d54d8224b81de8e3ed7beac0e486257" 963 963 }, 964 964 "remarkup-assist-text_i" : { 965 965 "name" : "remarkup-assist-text_i", 966 966 "rule" : ".remarkup-assist-i", 967 - "hash" : "19d4c474555d75d0e4739ec7097dbfa4" 967 + "hash" : "50f83a53f5b094d3d92b619d06fada3c" 968 968 }, 969 969 "remarkup-assist-text_image" : { 970 970 "name" : "remarkup-assist-text_image", 971 971 "rule" : ".remarkup-assist-image", 972 - "hash" : "5a560800fa31b24d18807b430797ac95" 972 + "hash" : "c2869e71cc7cb6178598cd41a19ababb" 973 973 }, 974 974 "remarkup-assist-text_larger" : { 975 975 "name" : "remarkup-assist-text_larger", 976 976 "rule" : ".remarkup-assist-larger", 977 - "hash" : "5cd9c8223c99ef3409c82dfaefeebc50" 977 + "hash" : "d3165f15a1b3734e4b7088f7b74330ba" 978 978 }, 979 979 "remarkup-assist-text_meme" : { 980 980 "name" : "remarkup-assist-text_meme", 981 981 "rule" : ".remarkup-assist-meme", 982 - "hash" : "ff98a508db2348b3d46aaf8225b26862" 982 + "hash" : "ed9c4166858ca1caedf5f8e4b8ad587e" 983 983 }, 984 984 "remarkup-assist-text_ol" : { 985 985 "name" : "remarkup-assist-text_ol", 986 986 "rule" : ".remarkup-assist-ol", 987 - "hash" : "a2805d44ca0eac518f99109c4969f450" 987 + "hash" : "266b858f5ffc42760fb2e12913a5198a" 988 988 }, 989 989 "remarkup-assist-text_table" : { 990 990 "name" : "remarkup-assist-text_table", 991 991 "rule" : ".remarkup-assist-table", 992 - "hash" : "2ae3fb49af42f07038d77aa5b62862c0" 992 + "hash" : "5c2961b35460b3b5b7efdd5bc4e318ca" 993 993 }, 994 994 "remarkup-assist-text_tag" : { 995 995 "name" : "remarkup-assist-text_tag", 996 996 "rule" : ".remarkup-assist-tag", 997 - "hash" : "446c23bff9fc7da885ea574f073eaf0f" 997 + "hash" : "165bd3a4de8d54cf720db9bc64116d25" 998 998 }, 999 999 "remarkup-assist-text_tt" : { 1000 1000 "name" : "remarkup-assist-text_tt", 1001 1001 "rule" : ".remarkup-assist-tt", 1002 - "hash" : "77ae74c8a9a02fde5565399409dc5ab3" 1002 + "hash" : "c07e6816500c9cd66fa27758cc902195" 1003 1003 }, 1004 1004 "remarkup-assist-text_ul" : { 1005 1005 "name" : "remarkup-assist-text_ul", 1006 1006 "rule" : ".remarkup-assist-ul", 1007 - "hash" : "cf3c6b4f809377b7eff9fcef42fc47df" 1007 + "hash" : "26f55c0fcf9148879e3fb058ac319100" 1008 1008 } 1009 1009 }, 1010 1010 "scales" : [
+10 -10
resources/sprite/manifest/menu.json
··· 4 4 "app" : { 5 5 "name" : "app", 6 6 "rule" : ".menu-icon-app", 7 - "hash" : "fc525b5b3e3ecaeda3baccc18ace5a0a" 7 + "hash" : "a389f99d9c00f688e625da71579ee90a" 8 8 }, 9 9 "arrow-right" : { 10 10 "name" : "arrow-right", 11 11 "rule" : ".phabricator-crumb-divider", 12 - "hash" : "50180da0aed206c9db2bc1547c1a158c" 12 + "hash" : "a994209450dc73a80841cdd66bb59925" 13 13 }, 14 14 "conf-hover" : { 15 15 "name" : "conf-hover", 16 16 "rule" : ".alert-notifications:hover .phabricator-main-menu-message-icon", 17 - "hash" : "febc4135b2821ae2d3f0b06aa295ca0d" 17 + "hash" : "93d734a7e87293c4fcb24f7096ed79f9" 18 18 }, 19 19 "conf-off" : { 20 20 "name" : "conf-off", 21 21 "rule" : ".alert-notifications .phabricator-main-menu-message-icon", 22 - "hash" : "dc1b05cb611eaef76a09e8cff698c99d" 22 + "hash" : "967b7aeaccc0ed5ffe9193f7c6c6f94d" 23 23 }, 24 24 "conf-unseen" : { 25 25 "name" : "conf-unseen", 26 26 "rule" : ".alert-notifications.message-unread .phabricator-main-menu-message-icon", 27 - "hash" : "1f7d54b2b9781099f867b100ebdd6c6a" 27 + "hash" : "034860de0f2e4ed924384a019077a094" 28 28 }, 29 29 "eye" : { 30 30 "name" : "eye", 31 31 "rule" : ".menu-icon-eye", 32 - "hash" : "553eb617c19b74b428558e606ff9b066" 32 + "hash" : "d598b1acb1933a86eaed3dea3347f7b0" 33 33 }, 34 34 "logo" : { 35 35 "name" : "logo", 36 36 "rule" : ".phabricator-main-menu-logo-image", 37 - "hash" : "6eadea2c3dd2ada989eba22b6769b3eb" 37 + "hash" : "c6c7ab165dce13a51ef329928c7c4aba" 38 38 }, 39 39 "seen_have_unread" : { 40 40 "name" : "seen_have_unread", 41 41 "rule" : ".alert-notifications:hover .phabricator-main-menu-alert-icon", 42 - "hash" : "03a02951857811c722732dcfff9d458e" 42 + "hash" : "a8a7f07caa726d7e61ef3d41f959d94d" 43 43 }, 44 44 "seen_read_all" : { 45 45 "name" : "seen_read_all", 46 46 "rule" : ".alert-notifications .phabricator-main-menu-alert-icon", 47 - "hash" : "f166fc60ed7a7a8ec2f41ab1af2cb3ec" 47 + "hash" : "4fdd4807d0c41bd4179dd43150c7fc44" 48 48 }, 49 49 "unseen_any" : { 50 50 "name" : "unseen_any", 51 51 "rule" : ".alert-notifications.alert-unread .phabricator-main-menu-alert-icon", 52 - "hash" : "a8643b150166a076e81a42e5893a899f" 52 + "hash" : "50d946952c73028b34e0c3378ca36b17" 53 53 } 54 54 }, 55 55 "scales" : [
+90
resources/sprite/manifest/tokens.json
··· 1 + { 2 + "version" : 1, 3 + "sprites" : { 4 + "token-coin-1" : { 5 + "name" : "token-coin-1", 6 + "rule" : ".token-coin-1", 7 + "hash" : "124174168031b47dfd98273d2d6f369a" 8 + }, 9 + "token-coin-2" : { 10 + "name" : "token-coin-2", 11 + "rule" : ".token-coin-2", 12 + "hash" : "a4811c8387caec31e4a313b32abe7026" 13 + }, 14 + "token-coin-3" : { 15 + "name" : "token-coin-3", 16 + "rule" : ".token-coin-3", 17 + "hash" : "0ecd0e9e5cce27e059a68ceb80e57e3b" 18 + }, 19 + "token-coin-4" : { 20 + "name" : "token-coin-4", 21 + "rule" : ".token-coin-4", 22 + "hash" : "d88e727312274f4bd534ee5314fba833" 23 + }, 24 + "token-heart-1" : { 25 + "name" : "token-heart-1", 26 + "rule" : ".token-heart-1", 27 + "hash" : "433df7ae11d6651a1f5d6f1c94a85c98" 28 + }, 29 + "token-heart-2" : { 30 + "name" : "token-heart-2", 31 + "rule" : ".token-heart-2", 32 + "hash" : "d582a288d9da8685f61a392aa2e288e5" 33 + }, 34 + "token-like-1" : { 35 + "name" : "token-like-1", 36 + "rule" : ".token-like-1", 37 + "hash" : "1b1fd7b15d0ee5eb95371f7ff673025b" 38 + }, 39 + "token-like-2" : { 40 + "name" : "token-like-2", 41 + "rule" : ".token-like-2", 42 + "hash" : "2ea96cf3f0f43c9efda61a3430a49d90" 43 + }, 44 + "token-medal-1" : { 45 + "name" : "token-medal-1", 46 + "rule" : ".token-medal-1", 47 + "hash" : "081e1d0e2092b8035e6d1ba1181d000e" 48 + }, 49 + "token-medal-2" : { 50 + "name" : "token-medal-2", 51 + "rule" : ".token-medal-2", 52 + "hash" : "958e386989d555a9a8b86bf16ce89cb6" 53 + }, 54 + "token-medal-3" : { 55 + "name" : "token-medal-3", 56 + "rule" : ".token-medal-3", 57 + "hash" : "da3459e708a19b4ee8bc1464fb2b4423" 58 + }, 59 + "token-medal-4" : { 60 + "name" : "token-medal-4", 61 + "rule" : ".token-medal-4", 62 + "hash" : "84ac1a2000629dd0399f8083c4fa882b" 63 + }, 64 + "token-misc-1" : { 65 + "name" : "token-misc-1", 66 + "rule" : ".token-misc-1", 67 + "hash" : "fc021cdb987939a90c101691c9270736" 68 + }, 69 + "token-misc-2" : { 70 + "name" : "token-misc-2", 71 + "rule" : ".token-misc-2", 72 + "hash" : "cdb68aa37c891238c083dab250ea40b7" 73 + }, 74 + "token-misc-3" : { 75 + "name" : "token-misc-3", 76 + "rule" : ".token-misc-3", 77 + "hash" : "0596b11b19dcdf20e7fb2a38e9f6c704" 78 + }, 79 + "token-misc-4" : { 80 + "name" : "token-misc-4", 81 + "rule" : ".token-misc-4", 82 + "hash" : "45f756d650ee729d3593b5afb3351611" 83 + } 84 + }, 85 + "scales" : [ 86 + 1 87 + ], 88 + "header" : "\/**\n * @provides sprite-tokens-css\n * @generated\n *\/\n\n.sprite-tokens {\n background-image: url(\/rsrc\/image\/sprite-tokens.png);\n background-repeat: no-repeat;\n}\n\n\n", 89 + "type" : "standard" 90 + }
resources/sprite/tokens_1x/coin-1.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/coin-2.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/coin-3.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/coin-4.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/heart-1.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/heart-2.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/like-1.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/like-2.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/medal-1.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/medal-2.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/medal-3.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/medal-4.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/misc-1.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/misc-2.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/misc-3.png

This is a binary file and will not be displayed.

resources/sprite/tokens_1x/misc-4.png

This is a binary file and will not be displayed.

+18
resources/sql/patches/20130214.token.sql
··· 1 + CREATE TABLE {$NAMESPACE}_token.token_given ( 2 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 4 + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 5 + tokenPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 6 + dateCreated INT UNSIGNED NOT NULL, 7 + dateModified INT UNSIGNED NOT NULL, 8 + UNIQUE KEY `key_all` (objectPHID, authorPHID), 9 + KEY `key_author` (authorPHID), 10 + KEY `key_token` (tokenPHID) 11 + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 12 + 13 + CREATE TABLE {$NAMESPACE}_token.token_count ( 14 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 15 + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 16 + tokenCount INT NOT NULL, 17 + UNIQUE KEY `key_objectPHID` (objectPHID) 18 + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+1
scripts/celerity/generate_sprites.php
··· 32 32 'apps' => $generator->buildAppsSheet(), 33 33 'conph' => $generator->buildConpherenceSheet(), 34 34 'apps-large' => $generator->buildAppsLargeSheet(), 35 + 'tokens' => $generator->buildTokenSheet(), 35 36 // TODO: @chad: should we actually remove this? 36 37 // 'apps-xlarge' => $generator->buildAppsXLargeSheet(), 37 38 'gradient' => $generator->buildGradientSheet(),
+27 -2
src/__celerity_resource_map__.php
··· 532 532 'disk' => '/rsrc/image/sprite-menu.png', 533 533 'type' => 'png', 534 534 ), 535 + '/rsrc/image/sprite-tokens.png' => 536 + array( 537 + 'hash' => '67c46fd75c885b76ecbfe46e71a476cc', 538 + 'uri' => '/res/67c46fd7/rsrc/image/sprite-tokens.png', 539 + 'disk' => '/rsrc/image/sprite-tokens.png', 540 + 'type' => 'png', 541 + ), 535 542 '/rsrc/image/texture/dark-menu-hover.png' => 536 543 array( 537 544 'hash' => 'a214a732644be34872e895b338b5d639', ··· 2861 2868 ), 2862 2869 'phabricator-pinboard-view-css' => 2863 2870 array( 2864 - 'uri' => '/res/fdb2470f/rsrc/css/layout/phabricator-pinboard-view.css', 2871 + 'uri' => '/res/b954ccbf/rsrc/css/layout/phabricator-pinboard-view.css', 2865 2872 'type' => 'css', 2866 2873 'requires' => 2867 2874 array( ··· 3336 3343 ), 3337 3344 'sprite-conpher-css' => 3338 3345 array( 3339 - 'uri' => '/res/89821322/rsrc/css/sprite-conph.css', 3346 + 'uri' => '/res/f640f0c5/rsrc/css/sprite-conph.css', 3340 3347 'type' => 'css', 3341 3348 'requires' => 3342 3349 array( ··· 3370 3377 ), 3371 3378 'disk' => '/rsrc/css/sprite-menu.css', 3372 3379 ), 3380 + 'sprite-tokens-css' => 3381 + array( 3382 + 'uri' => '/res/9ae0de5b/rsrc/css/sprite-tokens.css', 3383 + 'type' => 'css', 3384 + 'requires' => 3385 + array( 3386 + ), 3387 + 'disk' => '/rsrc/css/sprite-tokens.css', 3388 + ), 3373 3389 'stripe-core' => 3374 3390 array( 3375 3391 'uri' => '/res/3b0f0ad4/rsrc/js/stripe/stripe_core.js', ··· 3396 3412 array( 3397 3413 ), 3398 3414 'disk' => '/rsrc/css/core/syntax.css', 3415 + ), 3416 + 'tokens-css' => 3417 + array( 3418 + 'uri' => '/res/c1f6113c/rsrc/css/application/tokens/tokens.css', 3419 + 'type' => 'css', 3420 + 'requires' => 3421 + array( 3422 + ), 3423 + 'disk' => '/rsrc/css/application/tokens/tokens.css', 3399 3424 ), 3400 3425 ), array( 3401 3426 'packages' =>
+48 -1
src/__phutil_library_map__.php
··· 182 182 'ConduitAPI_repository_create_Method' => 'applications/repository/conduit/ConduitAPI_repository_create_Method.php', 183 183 'ConduitAPI_repository_query_Method' => 'applications/repository/conduit/ConduitAPI_repository_query_Method.php', 184 184 'ConduitAPI_slowvote_info_Method' => 'applications/slowvote/conduit/ConduitAPI_slowvote_info_Method.php', 185 + 'ConduitAPI_token_Method' => 'applications/tokens/conduit/ConduitAPI_token_Method.php', 186 + 'ConduitAPI_token_give_Method' => 'applications/tokens/conduit/ConduitAPI_token_give_Method.php', 187 + 'ConduitAPI_token_given_Method' => 'applications/tokens/conduit/ConduitAPI_token_given_Method.php', 188 + 'ConduitAPI_token_query_Method' => 'applications/tokens/conduit/ConduitAPI_token_query_Method.php', 185 189 'ConduitAPI_user_Method' => 'applications/people/conduit/ConduitAPI_user_Method.php', 186 190 'ConduitAPI_user_addstatus_Method' => 'applications/people/conduit/ConduitAPI_user_addstatus_Method.php', 187 191 'ConduitAPI_user_disable_Method' => 'applications/people/conduit/ConduitAPI_user_disable_Method.php', ··· 664 668 'PhabricatorApplicationSlowvote' => 'applications/slowvote/application/PhabricatorApplicationSlowvote.php', 665 669 'PhabricatorApplicationStatusView' => 'applications/meta/view/PhabricatorApplicationStatusView.php', 666 670 'PhabricatorApplicationSubscriptions' => 'applications/subscriptions/application/PhabricatorApplicationSubscriptions.php', 671 + 'PhabricatorApplicationTokens' => 'applications/tokens/application/PhabricatorApplicationTokens.php', 667 672 'PhabricatorApplicationTransaction' => 'applications/transactions/storage/PhabricatorApplicationTransaction.php', 668 673 'PhabricatorApplicationTransactionComment' => 'applications/transactions/storage/PhabricatorApplicationTransactionComment.php', 669 674 'PhabricatorApplicationTransactionCommentEditController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php', ··· 1323 1328 'PhabricatorTimelineIterator' => 'infrastructure/daemon/timeline/cursor/PhabricatorTimelineIterator.php', 1324 1329 'PhabricatorTimelineView' => 'view/layout/PhabricatorTimelineView.php', 1325 1330 'PhabricatorTimer' => 'applications/countdown/storage/PhabricatorTimer.php', 1331 + 'PhabricatorToken' => 'applications/tokens/storage/PhabricatorToken.php', 1332 + 'PhabricatorTokenController' => 'applications/tokens/controller/PhabricatorTokenController.php', 1333 + 'PhabricatorTokenCount' => 'applications/tokens/storage/PhabricatorTokenCount.php', 1334 + 'PhabricatorTokenDAO' => 'applications/tokens/storage/PhabricatorTokenDAO.php', 1335 + 'PhabricatorTokenGiveController' => 'applications/tokens/controller/PhabricatorTokenGiveController.php', 1336 + 'PhabricatorTokenGiven' => 'applications/tokens/storage/PhabricatorTokenGiven.php', 1337 + 'PhabricatorTokenGivenController' => 'applications/tokens/controller/PhabricatorTokenGivenController.php', 1338 + 'PhabricatorTokenGivenEditor' => 'applications/tokens/editor/PhabricatorTokenGivenEditor.php', 1339 + 'PhabricatorTokenGivenQuery' => 'applications/tokens/query/PhabricatorTokenGivenQuery.php', 1340 + 'PhabricatorTokenQuery' => 'applications/tokens/query/PhabricatorTokenQuery.php', 1341 + 'PhabricatorTokenReceiverInterface' => 'applications/tokens/interface/PhabricatorTokenReceiverInterface.php', 1342 + 'PhabricatorTokenUIEventListener' => 'applications/tokens/event/PhabricatorTokenUIEventListener.php', 1326 1343 'PhabricatorTransactionView' => 'view/layout/PhabricatorTransactionView.php', 1327 1344 'PhabricatorTransactions' => 'applications/transactions/constants/PhabricatorTransactions.php', 1328 1345 'PhabricatorTransformedFile' => 'applications/files/storage/PhabricatorTransformedFile.php', ··· 1683 1700 'ConduitAPI_repository_create_Method' => 'ConduitAPI_repository_Method', 1684 1701 'ConduitAPI_repository_query_Method' => 'ConduitAPI_repository_Method', 1685 1702 'ConduitAPI_slowvote_info_Method' => 'ConduitAPIMethod', 1703 + 'ConduitAPI_token_Method' => 'ConduitAPIMethod', 1704 + 'ConduitAPI_token_give_Method' => 'ConduitAPI_token_Method', 1705 + 'ConduitAPI_token_given_Method' => 'ConduitAPI_token_Method', 1706 + 'ConduitAPI_token_query_Method' => 'ConduitAPI_token_Method', 1686 1707 'ConduitAPI_user_Method' => 'ConduitAPIMethod', 1687 1708 'ConduitAPI_user_addstatus_Method' => 'ConduitAPI_user_Method', 1688 1709 'ConduitAPI_user_disable_Method' => 'ConduitAPI_user_Method', ··· 1817 1838 'DifferentialReviewedByFieldSpecification' => 'DifferentialFieldSpecification', 1818 1839 'DifferentialReviewerStatsTestCase' => 'PhabricatorTestCase', 1819 1840 'DifferentialReviewersFieldSpecification' => 'DifferentialFieldSpecification', 1820 - 'DifferentialRevision' => 'DifferentialDAO', 1841 + 'DifferentialRevision' => 1842 + array( 1843 + 0 => 'DifferentialDAO', 1844 + 1 => 'PhabricatorTokenReceiverInterface', 1845 + 2 => 'PhabricatorPolicyInterface', 1846 + ), 1821 1847 'DifferentialRevisionCommentListView' => 'AphrontView', 1822 1848 'DifferentialRevisionCommentView' => 'AphrontView', 1823 1849 'DifferentialRevisionDetailView' => 'AphrontView', ··· 2112 2138 'PhabricatorApplicationSlowvote' => 'PhabricatorApplication', 2113 2139 'PhabricatorApplicationStatusView' => 'AphrontView', 2114 2140 'PhabricatorApplicationSubscriptions' => 'PhabricatorApplication', 2141 + 'PhabricatorApplicationTokens' => 'PhabricatorApplication', 2115 2142 'PhabricatorApplicationTransaction' => 2116 2143 array( 2117 2144 0 => 'PhabricatorLiskDAO', ··· 2741 2768 'PhabricatorTimelineIterator' => 'Iterator', 2742 2769 'PhabricatorTimelineView' => 'AphrontView', 2743 2770 'PhabricatorTimer' => 'PhabricatorCountdownDAO', 2771 + 'PhabricatorToken' => 2772 + array( 2773 + 0 => 'PhabricatorTokenDAO', 2774 + 1 => 'PhabricatorPolicyInterface', 2775 + ), 2776 + 'PhabricatorTokenController' => 'PhabricatorController', 2777 + 'PhabricatorTokenCount' => 'PhabricatorTokenDAO', 2778 + 'PhabricatorTokenDAO' => 'PhabricatorLiskDAO', 2779 + 'PhabricatorTokenGiveController' => 'PhabricatorTokenController', 2780 + 'PhabricatorTokenGiven' => 2781 + array( 2782 + 0 => 'PhabricatorTokenDAO', 2783 + 1 => 'PhabricatorPolicyInterface', 2784 + ), 2785 + 'PhabricatorTokenGivenController' => 'PhabricatorTokenController', 2786 + 'PhabricatorTokenGivenEditor' => 'PhabricatorEditor', 2787 + 'PhabricatorTokenGivenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 2788 + 'PhabricatorTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 2789 + 'PhabricatorTokenUIEventListener' => 'PhutilEventListener', 2744 2790 'PhabricatorTransactionView' => 'AphrontView', 2745 2791 'PhabricatorTransformedFile' => 'PhabricatorFileDAO', 2746 2792 'PhabricatorTranslationsConfigOptions' => 'PhabricatorApplicationConfigOptions', ··· 2853 2899 1 => 'PhabricatorMarkupInterface', 2854 2900 2 => 'PhabricatorPolicyInterface', 2855 2901 3 => 'PhabricatorSubscribableInterface', 2902 + 4 => 'PhabricatorTokenReceiverInterface', 2856 2903 ), 2857 2904 'PholioMockCommentController' => 'PholioController', 2858 2905 'PholioMockEditController' => 'PholioController',
+17 -1
src/applications/differential/storage/DifferentialRevision.php
··· 1 1 <?php 2 2 3 - final class DifferentialRevision extends DifferentialDAO { 3 + final class DifferentialRevision extends DifferentialDAO 4 + implements PhabricatorTokenReceiverInterface, PhabricatorPolicyInterface { 4 5 5 6 protected $title; 6 7 protected $originalTitle; ··· 309 310 public function attachHashes(array $hashes) { 310 311 $this->hashes = $hashes; 311 312 return $this; 313 + } 314 + 315 + public function getCapabilities() { 316 + return array( 317 + PhabricatorPolicyCapability::CAN_VIEW, 318 + PhabricatorPolicyCapability::CAN_EDIT, 319 + ); 320 + } 321 + 322 + public function getPolicy($capability) { 323 + return PhabricatorPolicies::POLICY_USER; 324 + } 325 + 326 + public function hasAutomaticCapability($capability, PhabricatorUser $user) { 327 + return false; 312 328 } 313 329 314 330 }
+4 -1
src/applications/differential/view/DifferentialRevisionDetailView.php
··· 58 58 $actions->addAction($obj); 59 59 } 60 60 61 - $properties = new PhabricatorPropertyListView(); 61 + $properties = id(new PhabricatorPropertyListView()) 62 + ->setUser($user) 63 + ->setObject($revision); 64 + 62 65 $status = $revision->getStatus(); 63 66 $local_vcs = $this->getDiff()->getSourceControlSystem(); 64 67
+5 -1
src/applications/maniphest/controller/ManiphestTaskDetailController.php
··· 424 424 425 425 $viewer = $this->getRequest()->getUser(); 426 426 427 - $view = new PhabricatorPropertyListView(); 427 + $view = id(new PhabricatorPropertyListView()) 428 + ->setUser($viewer) 429 + ->setObject($task); 428 430 429 431 $view->addProperty( 430 432 pht('Assigned To'), ··· 510 512 pht('Files'), 511 513 $file_view->render()); 512 514 } 515 + 516 + $view->invokeWillRenderEvent(); 513 517 514 518 if (strlen($task->getDescription())) { 515 519 $view->addSectionHeader(pht('Description'));
+23 -1
src/applications/maniphest/storage/ManiphestTask.php
··· 4 4 * @group maniphest 5 5 */ 6 6 final class ManiphestTask extends ManiphestDAO 7 - implements PhabricatorMarkupInterface { 7 + implements 8 + PhabricatorMarkupInterface, 9 + PhabricatorPolicyInterface, 10 + PhabricatorTokenReceiverInterface { 8 11 9 12 const MARKUP_FIELD_DESCRIPTION = 'markup:desc'; 10 13 ··· 259 262 */ 260 263 public function shouldUseMarkupCache($field) { 261 264 return (bool)$this->getID(); 265 + } 266 + 267 + 268 + /* -( Policy Interface )--------------------------------------------------- */ 269 + 270 + 271 + public function getCapabilities() { 272 + return array( 273 + PhabricatorPolicyCapability::CAN_VIEW, 274 + PhabricatorPolicyCapability::CAN_EDIT, 275 + ); 276 + } 277 + 278 + public function getPolicy($capability) { 279 + return PhabricatorPolicies::POLICY_USER; 280 + } 281 + 282 + public function hasAutomaticCapability($capability, PhabricatorUser $user) { 283 + return false; 262 284 } 263 285 264 286 }
+5 -1
src/applications/pholio/controller/PholioMockViewController.php
··· 122 122 123 123 $user = $this->getRequest()->getUser(); 124 124 125 - $properties = new PhabricatorPropertyListView(); 125 + $properties = id(new PhabricatorPropertyListView()) 126 + ->setUser($user) 127 + ->setObject($mock); 126 128 127 129 $properties->addProperty( 128 130 pht('Author'), ··· 153 155 $properties->addProperty( 154 156 pht('Subscribers'), 155 157 $sub_view); 158 + 159 + $properties->invokeWillRenderEvent(); 156 160 157 161 $properties->addTextContent( 158 162 $engine->getOutput($mock, PholioMock::MARKUP_FIELD_DESCRIPTION));
+2 -1
src/applications/pholio/storage/PholioMock.php
··· 7 7 implements 8 8 PhabricatorMarkupInterface, 9 9 PhabricatorPolicyInterface, 10 - PhabricatorSubscribableInterface { 10 + PhabricatorSubscribableInterface, 11 + PhabricatorTokenReceiverInterface { 11 12 12 13 const MARKUP_FIELD_DESCRIPTION = 'markup:description'; 13 14
+45
src/applications/tokens/application/PhabricatorApplicationTokens.php
··· 1 + <?php 2 + 3 + final class PhabricatorApplicationTokens extends PhabricatorApplication { 4 + 5 + public function getName() { 6 + return pht('Tokens'); 7 + } 8 + 9 + public function isBeta() { 10 + return true; 11 + } 12 + 13 + public function getBaseURI() { 14 + return '/token/'; 15 + } 16 + 17 + public function getTitleGlyph() { 18 + return "\xE2\x99\xA6"; 19 + } 20 + 21 + public function getShortDescription() { 22 + return pht('Acquire Trinkets'); 23 + } 24 + 25 + public function getApplicationGroup() { 26 + return self::GROUP_UTILITIES; 27 + } 28 + 29 + public function getRoutes() { 30 + return array( 31 + '/token/' => array( 32 + '' => 'PhabricatorTokenGivenController', 33 + 'given/' => 'PhabricatorTokenGivenController', 34 + 'give/(?<phid>[^/]+)/' => 'PhabricatorTokenGiveController', 35 + ), 36 + ); 37 + } 38 + 39 + public function getEventListeners() { 40 + return array( 41 + new PhabricatorTokenUIEventListener(), 42 + ); 43 + } 44 + 45 + }
+41
src/applications/tokens/conduit/ConduitAPI_token_Method.php
··· 1 + <?php 2 + 3 + abstract class ConduitAPI_token_Method extends ConduitAPIMethod { 4 + 5 + public function getMethodStatus() { 6 + return self::METHOD_STATUS_UNSTABLE; 7 + } 8 + 9 + public function buildTokenDicts(array $tokens) { 10 + assert_instances_of($tokens, 'PhabricatorToken'); 11 + 12 + $list = array(); 13 + foreach ($tokens as $token) { 14 + $list[] = array( 15 + 'id' => $token->getID(), 16 + 'name' => $token->getName(), 17 + 'phid' => $token->getPHID(), 18 + ); 19 + } 20 + 21 + return $list; 22 + } 23 + 24 + public function buildTokenGivenDicts(array $tokens_given) { 25 + assert_instances_of($tokens_given, 'PhabricatorTokenGiven'); 26 + 27 + $list = array(); 28 + foreach ($tokens_given as $given) { 29 + $list[] = array( 30 + 'authorPHID' => $given->getAuthorPHID(), 31 + 'objectPHID' => $given->getObjectPHID(), 32 + 'tokenPHID' => $given->getTokenPHID(), 33 + 'dateCreated' => $given->getDateCreated(), 34 + ); 35 + } 36 + 37 + return $list; 38 + } 39 + 40 + 41 + }
+37
src/applications/tokens/conduit/ConduitAPI_token_give_Method.php
··· 1 + <?php 2 + 3 + final class ConduitAPI_token_give_Method extends ConduitAPI_token_Method { 4 + 5 + public function getMethodDescription() { 6 + return pht('Give or change a token.'); 7 + } 8 + 9 + public function defineParamTypes() { 10 + return array( 11 + 'tokenPHID' => 'phid|null', 12 + 'objectPHID' => 'phid', 13 + ); 14 + } 15 + 16 + public function defineErrorTypes() { 17 + return array(); 18 + } 19 + 20 + public function defineReturnType() { 21 + return 'void'; 22 + } 23 + 24 + public function execute(ConduitAPIRequest $request) { 25 + $editor = id(new PhabricatorTokenGivenEditor()) 26 + ->setActor($request->getUser()); 27 + 28 + if ($request->getValue('tokenPHID')) { 29 + $editor->addToken( 30 + $request->getValue('objectPHID'), 31 + $request->getValue('tokenPHID')); 32 + } else { 33 + $editor->deleteToken($request->getValue('objectPHID')); 34 + } 35 + } 36 + 37 + }
+49
src/applications/tokens/conduit/ConduitAPI_token_given_Method.php
··· 1 + <?php 2 + 3 + final class ConduitAPI_token_given_Method extends ConduitAPI_token_Method { 4 + 5 + public function getMethodDescription() { 6 + return pht('Query tokens given to objects.'); 7 + } 8 + 9 + public function defineParamTypes() { 10 + return array( 11 + 'authorPHIDs' => 'list<phid>', 12 + 'objectPHIDs' => 'list<phid>', 13 + 'tokenPHIDs' => 'list<phid>', 14 + ); 15 + } 16 + 17 + public function defineErrorTypes() { 18 + return array(); 19 + } 20 + 21 + public function defineReturnType() { 22 + return 'list<dict>'; 23 + } 24 + 25 + public function execute(ConduitAPIRequest $request) { 26 + $query = id(new PhabricatorTokenGivenQuery()) 27 + ->setViewer($request->getUser()); 28 + 29 + $author_phids = $request->getValue('authorPHIDs'); 30 + if ($author_phids) { 31 + $query->withAuthorPHIDs($author_phids); 32 + } 33 + 34 + $object_phids = $request->getValue('objectPHIDs'); 35 + if ($object_phids) { 36 + $query->withObjectPHIDs($object_phids); 37 + } 38 + 39 + $token_phids = $request->getValue('tokenPHIDs'); 40 + if ($token_phids) { 41 + $query->withTokenPHIDs($token_phids); 42 + } 43 + 44 + $given = $query->execute(); 45 + 46 + return $this->buildTokenGivenDicts($given); 47 + } 48 + 49 + }
+30
src/applications/tokens/conduit/ConduitAPI_token_query_Method.php
··· 1 + <?php 2 + 3 + final class ConduitAPI_token_query_Method extends ConduitAPI_token_Method { 4 + 5 + public function getMethodDescription() { 6 + return pht('Query tokens.'); 7 + } 8 + 9 + public function defineParamTypes() { 10 + return array(); 11 + } 12 + 13 + public function defineReturnType() { 14 + return 'list<dict>'; 15 + } 16 + 17 + public function defineErrorTypes() { 18 + return array(); 19 + } 20 + 21 + public function execute(ConduitAPIRequest $request) { 22 + $query = id(new PhabricatorTokenQuery()) 23 + ->setViewer($request->getUser()); 24 + 25 + $tokens = $query->execute(); 26 + 27 + return $this->buildTokenDicts($tokens); 28 + } 29 + 30 + }
+16
src/applications/tokens/controller/PhabricatorTokenController.php
··· 1 + <?php 2 + 3 + abstract class PhabricatorTokenController extends PhabricatorController { 4 + 5 + 6 + protected function buildSideNav() { 7 + $nav = new AphrontSideNavFilterView(); 8 + $nav->setBaseURI(new PhutilURI($this->getApplicationURI())); 9 + 10 + $nav->addFilter('given/', pht('Tokens Given')); 11 + 12 + return $nav; 13 + } 14 + 15 + 16 + }
+116
src/applications/tokens/controller/PhabricatorTokenGiveController.php
··· 1 + <?php 2 + 3 + final class PhabricatorTokenGiveController extends PhabricatorTokenController { 4 + 5 + private $phid; 6 + 7 + public function willProcessRequest(array $data) { 8 + $this->phid = $data['phid']; 9 + } 10 + 11 + public function processRequest() { 12 + $request = $this->getRequest(); 13 + $user = $request->getUser(); 14 + 15 + $handle = PhabricatorObjectHandleData::loadOneHandle($this->phid, $user); 16 + if (!$handle->isComplete()) { 17 + return new Aphront404Response(); 18 + } 19 + 20 + $current = id(new PhabricatorTokenGivenQuery()) 21 + ->setViewer($user) 22 + ->withAuthorPHIDs(array($user->getPHID())) 23 + ->withObjectPHIDs(array($handle->getPHID())) 24 + ->execute(); 25 + 26 + if ($current) { 27 + $is_give = false; 28 + $title = pht('Rescind Token'); 29 + } else { 30 + $is_give = true; 31 + $title = pht('Give Token'); 32 + } 33 + 34 + $done_uri = $handle->getURI(); 35 + if ($request->isDialogFormPost()) { 36 + if ($is_give) { 37 + $token_phid = $request->getStr('tokenPHID'); 38 + $editor = id(new PhabricatorTokenGivenEditor()) 39 + ->setActor($user) 40 + ->addToken($handle->getPHID(), $token_phid); 41 + } else { 42 + $editor = id(new PhabricatorTokenGivenEditor()) 43 + ->setActor($user) 44 + ->deleteToken($handle->getPHID()); 45 + } 46 + 47 + return id(new AphrontReloadResponse())->setURI($done_uri); 48 + } 49 + 50 + if ($is_give) { 51 + $dialog = $this->buildGiveTokenDialog(); 52 + } else { 53 + $dialog = $this->buildRescindTokenDialog(head($current)); 54 + } 55 + 56 + $dialog->setUser($user); 57 + $dialog->addCancelButton($done_uri); 58 + 59 + return id(new AphrontDialogResponse())->setDialog($dialog); 60 + } 61 + 62 + private function buildGiveTokenDialog() { 63 + $user = $this->getRequest()->getUser(); 64 + 65 + $tokens = id(new PhabricatorTokenQuery()) 66 + ->setViewer($user) 67 + ->execute(); 68 + 69 + $buttons = array(); 70 + $ii = 0; 71 + foreach ($tokens as $token) { 72 + $buttons[] = javelin_tag( 73 + 'button', 74 + array( 75 + 'class' => 'token-button', 76 + 'name' => 'tokenPHID', 77 + 'value' => $token->getPHID(), 78 + 'type' => 'submit', 79 + 'sigil' => 'has-tooltip', 80 + 'meta' => array( 81 + 'tip' => $token->getName(), 82 + ) 83 + ), 84 + $token->renderIcon()); 85 + if ((++$ii % 4) == 0) { 86 + $buttons[] = phutil_tag('br'); 87 + } 88 + } 89 + 90 + $buttons = phutil_tag( 91 + 'div', 92 + array( 93 + 'class' => 'token-grid', 94 + ), 95 + $buttons); 96 + 97 + $dialog = new AphrontDialogView(); 98 + $dialog->setTitle(pht('Give Token')); 99 + $dialog->appendChild($buttons); 100 + 101 + return $dialog; 102 + } 103 + 104 + private function buildRescindTokenDialog(PhabricatorTokenGiven $token_given) { 105 + $dialog = new AphrontDialogView(); 106 + $dialog->setTitle(pht('Rescind Token')); 107 + 108 + $dialog->appendChild( 109 + pht('Really rescind this lovely token?')); 110 + 111 + $dialog->addSubmitButton(pht('Rescind Token')); 112 + 113 + return $dialog; 114 + } 115 + 116 + }
+79
src/applications/tokens/controller/PhabricatorTokenGivenController.php
··· 1 + <?php 2 + 3 + final class PhabricatorTokenGivenController extends PhabricatorTokenController { 4 + 5 + public function processRequest() { 6 + $request = $this->getRequest(); 7 + $user = $request->getUser(); 8 + 9 + $pager = id(new AphrontCursorPagerView()) 10 + ->setURI(new PhutilURI($this->getApplicationURI('/given/'))); 11 + 12 + $tokens_given = id(new PhabricatorTokenGivenQuery()) 13 + ->setViewer($user) 14 + ->setLimit(100) 15 + ->executeWithCursorPager($pager); 16 + 17 + $handles = array(); 18 + if ($tokens_given) { 19 + $object_phids = mpull($tokens_given, 'getObjectPHID'); 20 + $user_phids = mpull($tokens_given, 'getAuthorPHID'); 21 + $handle_phids = array_merge($object_phids, $user_phids); 22 + $handles = id(new PhabricatorObjectHandleData($handle_phids)) 23 + ->setViewer($user) 24 + ->loadHandles(); 25 + } 26 + 27 + $tokens = array(); 28 + if ($tokens_given) { 29 + $token_phids = mpull($tokens_given, 'getTokenPHID'); 30 + $tokens = id(new PhabricatorTokenQuery()) 31 + ->setViewer($user) 32 + ->withPHIDs($token_phids) 33 + ->execute(); 34 + $tokens = mpull($tokens, null, 'getPHID'); 35 + } 36 + 37 + $list = new PhabricatorObjectItemListView(); 38 + foreach ($tokens_given as $token_given) { 39 + $handle = $handles[$token_given->getObjectPHID()]; 40 + $token = idx($tokens, $token_given->getTokenPHID()); 41 + 42 + $item = id(new PhabricatorObjectItemView()); 43 + $item->setHeader($handle->getFullName()); 44 + $item->setHref($handle->getURI()); 45 + 46 + $item->addAttribute($token->renderIcon()); 47 + 48 + $item->addAttribute( 49 + pht( 50 + 'Given by %s on %s', 51 + $handles[$token_given->getAuthorPHID()]->renderLink(), 52 + phabricator_date($token_given->getDateCreated(), $user))); 53 + 54 + $list->addItem($item); 55 + } 56 + 57 + $title = pht('Tokens Given'); 58 + 59 + $nav = $this->buildSideNav(); 60 + $nav->setCrumbs( 61 + $this->buildApplicationCrumbs() 62 + ->addCrumb( 63 + id(new PhabricatorCrumbView()) 64 + ->setName($title))); 65 + $nav->selectFilter('given/'); 66 + 67 + $nav->appendChild($list); 68 + $nav->appendChild($pager); 69 + 70 + return $this->buildApplicationPage( 71 + $nav, 72 + array( 73 + 'title' => $title, 74 + 'device' => true, 75 + )); 76 + } 77 + 78 + 79 + }
+91
src/applications/tokens/editor/PhabricatorTokenGivenEditor.php
··· 1 + <?php 2 + 3 + final class PhabricatorTokenGivenEditor 4 + extends PhabricatorEditor { 5 + 6 + public function addToken($object_phid, $token_phid) { 7 + $token = $this->validateToken($token_phid); 8 + $handle = $this->validateObject($object_phid); 9 + 10 + $actor = $this->requireActor(); 11 + 12 + $token_given = id(new PhabricatorTokenGiven()) 13 + ->setAuthorPHID($actor->getPHID()) 14 + ->setObjectPHID($handle->getPHID()) 15 + ->setTokenPHID($token->getPHID()); 16 + 17 + $token_given->openTransaction(); 18 + 19 + $this->executeDeleteToken($handle); 20 + 21 + $token_given->save(); 22 + 23 + queryfx( 24 + $token_given->establishConnection('w'), 25 + 'INSERT INTO %T (objectPHID, tokenCount) VALUES (%s, 1) 26 + ON DUPLICATE KEY UPDATE tokenCount = tokenCount + 1', 27 + id(new PhabricatorTokenCount())->getTableName(), 28 + $handle->getPHID()); 29 + 30 + $token_given->saveTransaction(); 31 + 32 + return $token_given; 33 + } 34 + 35 + public function deleteToken($object_phid) { 36 + $handle = $this->validateObject($object_phid); 37 + 38 + return $this->executeDeleteToken($handle); 39 + } 40 + 41 + private function executeDeleteToken(PhabricatorObjectHandle $handle) { 42 + $actor = $this->requireActor(); 43 + 44 + $token_given = id(new PhabricatorTokenGiven())->loadOneWhere( 45 + 'authorPHID = %s AND objectPHID = %s', 46 + $actor->getPHID(), 47 + $handle->getPHID()); 48 + if (!$token_given) { 49 + return; 50 + } 51 + 52 + $token_given->openTransaction(); 53 + 54 + $token_given->delete(); 55 + 56 + queryfx( 57 + $token_given->establishConnection('w'), 58 + 'INSERT INTO %T (objectPHID, tokenCount) VALUES (%s, 0) 59 + ON DUPLICATE KEY UPDATE tokenCount = tokenCount - 1', 60 + id(new PhabricatorTokenCount())->getTableName(), 61 + $handle->getPHID()); 62 + 63 + $token_given->saveTransaction(); 64 + } 65 + 66 + private function validateToken($token_phid) { 67 + $tokens = id(new PhabricatorTokenQuery()) 68 + ->setViewer($this->requireActor()) 69 + ->withPHIDs(array($token_phid)) 70 + ->execute(); 71 + 72 + if (empty($tokens)) { 73 + throw new Exception("No such token!"); 74 + } 75 + 76 + return head($tokens); 77 + } 78 + 79 + private function validateObject($object_phid) { 80 + $handle = PhabricatorObjectHandleData::loadOneHandle( 81 + $object_phid, 82 + $this->requireActor()); 83 + 84 + if (!$handle->isComplete()) { 85 + throw new Exception("No such object!"); 86 + } 87 + 88 + return $handle; 89 + } 90 + 91 + }
+121
src/applications/tokens/event/PhabricatorTokenUIEventListener.php
··· 1 + <?php 2 + 3 + final class PhabricatorTokenUIEventListener 4 + extends PhutilEventListener { 5 + 6 + public function register() { 7 + $this->listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS); 8 + $this->listen(PhabricatorEventType::TYPE_UI_WILLRENDERPROPERTIES); 9 + } 10 + 11 + public function handleEvent(PhutilEvent $event) { 12 + switch ($event->getType()) { 13 + case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS: 14 + $this->handleActionEvent($event); 15 + break; 16 + case PhabricatorEventType::TYPE_UI_WILLRENDERPROPERTIES: 17 + $this->handlePropertyEvent($event); 18 + break; 19 + } 20 + } 21 + 22 + private function handleActionEvent($event) { 23 + $user = $event->getUser(); 24 + $object = $event->getValue('object'); 25 + 26 + if (!$object || !$object->getPHID()) { 27 + // No object, or the object has no PHID yet.. 28 + return; 29 + } 30 + 31 + if (!($object instanceof PhabricatorTokenReceiverInterface)) { 32 + // This object isn't a token receiver. 33 + return; 34 + } 35 + 36 + $current = id(new PhabricatorTokenGivenQuery()) 37 + ->setViewer($user) 38 + ->withAuthorPHIDs(array($user->getPHID())) 39 + ->withObjectPHIDs(array($object->getPHID())) 40 + ->execute(); 41 + 42 + if (!$current) { 43 + $token_action = id(new PhabricatorActionView()) 44 + ->setUser($user) 45 + ->setWorkflow(true) 46 + ->setHref('/token/give/'.$object->getPHID().'/') 47 + ->setName(pht('Give Token')) 48 + ->setIcon('like'); 49 + } else { 50 + $token_action = id(new PhabricatorActionView()) 51 + ->setUser($user) 52 + ->setWorkflow(true) 53 + ->setHref('/token/give/'.$object->getPHID().'/') 54 + ->setName(pht('Rescind Token')) 55 + ->setIcon('dislike'); 56 + } 57 + 58 + $actions = $event->getValue('actions'); 59 + $actions[] = $token_action; 60 + $event->setValue('actions', $actions); 61 + } 62 + 63 + private function handlePropertyEvent($event) { 64 + $user = $event->getUser(); 65 + $object = $event->getValue('object'); 66 + 67 + if (!$object || !$object->getPHID()) { 68 + // No object, or the object has no PHID yet.. 69 + return; 70 + } 71 + 72 + if (!($object instanceof PhabricatorTokenReceiverInterface)) { 73 + // This object isn't a token receiver. 74 + return; 75 + } 76 + 77 + $limit = 1; 78 + 79 + $tokens_given = id(new PhabricatorTokenGivenQuery()) 80 + ->setViewer($user) 81 + ->withObjectPHIDs(array($object->getPHID())) 82 + ->execute(); 83 + 84 + if (!$tokens_given) { 85 + return; 86 + } 87 + 88 + $tokens = id(new PhabricatorTokenQuery()) 89 + ->setViewer($user) 90 + ->withPHIDs(mpull($tokens_given, 'getTokenPHID')) 91 + ->execute(); 92 + $tokens = mpull($tokens, null, 'getPHID'); 93 + 94 + $author_phids = mpull($tokens_given, 'getAuthorPHID'); 95 + $handles = id(new PhabricatorObjectHandleData($author_phids)) 96 + ->loadHandles(); 97 + 98 + $list = array(); 99 + foreach ($tokens_given as $token_given) { 100 + if (!idx($tokens, $token_given->getTokenPHID())) { 101 + continue; 102 + } 103 + 104 + $token = $tokens[$token_given->getTokenPHID()]; 105 + 106 + $list[] = javelin_tag( 107 + 'span', 108 + array( 109 + 'sigil' => 'has-tooltip', 110 + 'meta' => array( 111 + 'tip' => $handles[$token_given->getAuthorPHID()]->getName(), 112 + ), 113 + ), 114 + $token->renderIcon()); 115 + } 116 + 117 + $view = $event->getValue('view'); 118 + $view->addProperty(pht('Tokens'), $list); 119 + } 120 + 121 + }
+5
src/applications/tokens/interface/PhabricatorTokenReceiverInterface.php
··· 1 + <?php 2 + 3 + interface PhabricatorTokenReceiverInterface { 4 + 5 + }
+89
src/applications/tokens/query/PhabricatorTokenGivenQuery.php
··· 1 + <?php 2 + 3 + final class PhabricatorTokenGivenQuery 4 + extends PhabricatorCursorPagedPolicyAwareQuery { 5 + 6 + private $authorPHIDs; 7 + private $objectPHIDs; 8 + private $tokenPHIDs; 9 + 10 + public function withTokenPHIDs(array $token_phids) { 11 + $this->tokenPHIDs = $token_phids; 12 + return $this; 13 + } 14 + 15 + public function withObjectPHIDs(array $object_phids) { 16 + $this->objectPHIDs = $object_phids; 17 + return $this; 18 + } 19 + 20 + public function withAuthorPHIDs(array $author_phids) { 21 + $this->authorPHIDs = $author_phids; 22 + return $this; 23 + } 24 + 25 + public function loadPage() { 26 + $table = new PhabricatorTokenGiven(); 27 + $conn_r = $table->establishConnection('r'); 28 + 29 + $rows = queryfx_all( 30 + $conn_r, 31 + 'SELECT * FROM %T %Q %Q %Q', 32 + $table->getTableName(), 33 + $this->buildWhereClause($conn_r), 34 + $this->buildOrderClause($conn_r), 35 + $this->buildLimitClause($conn_r)); 36 + 37 + return $table->loadAllFromArray($rows); 38 + } 39 + 40 + private function buildWhereClause(AphrontDatabaseConnection $conn_r) { 41 + $where = array(); 42 + 43 + if ($this->authorPHIDs) { 44 + $where[] = qsprintf( 45 + $conn_r, 46 + 'authorPHID IN (%Ls)', 47 + $this->authorPHIDs); 48 + } 49 + 50 + if ($this->objectPHIDs) { 51 + $where[] = qsprintf( 52 + $conn_r, 53 + 'objectPHID IN (%Ls)', 54 + $this->objectPHIDs); 55 + } 56 + 57 + if ($this->tokenPHIDs) { 58 + $where[] = qsprintf( 59 + $conn_r, 60 + 'tokenPHID IN (%Ls)', 61 + $this->tokenPHIDs); 62 + } 63 + 64 + return $this->formatWhereClause($where); 65 + } 66 + 67 + public function willFilterPage(array $results) { 68 + $object_phids = array_filter(mpull($results, 'getObjectPHID')); 69 + if (!$object_phids) { 70 + return array(); 71 + } 72 + 73 + $objects = id(new PhabricatorObjectHandleData($object_phids)) 74 + ->setViewer($this->getViewer()) 75 + ->loadObjects(); 76 + 77 + foreach ($results as $key => $result) { 78 + $phid = $result->getObjectPHID(); 79 + if (empty($objects[$phid])) { 80 + unset($results[$key]); 81 + } else { 82 + $result->attachObject($objects[$phid]); 83 + } 84 + } 85 + 86 + return $results; 87 + } 88 + 89 + }
+62
src/applications/tokens/query/PhabricatorTokenQuery.php
··· 1 + <?php 2 + 3 + final class PhabricatorTokenQuery 4 + extends PhabricatorCursorPagedPolicyAwareQuery { 5 + 6 + private $phids; 7 + 8 + public function withPHIDs(array $phids) { 9 + $this->phids = $phids; 10 + return $this; 11 + } 12 + 13 + public function loadPage() { 14 + $tokens = $this->getBuiltinTokens(); 15 + 16 + if ($this->phids) { 17 + $map = array_fill_keys($this->phids, true); 18 + foreach ($tokens as $key => $token) { 19 + if (empty($map[$token->getPHID()])) { 20 + unset($tokens[$key]); 21 + } 22 + } 23 + } 24 + 25 + return $tokens; 26 + } 27 + 28 + private function getBuiltinTokens() { 29 + $specs = array( 30 + array('like-1', pht('Like')), 31 + array('like-2', pht('Dislike')), 32 + array('heart-1', pht('Love')), 33 + array('heart-2', pht('Heartbreak')), 34 + array('medal-1', pht('Orange Medal')), 35 + array('medal-2', pht('Grey Medal')), 36 + array('medal-3', pht('Yellow Medal')), 37 + array('medal-4', pht('Manufacturing Defect?')), 38 + array('coin-1', pht('Haypence')), 39 + array('coin-2', pht('Piece of Eight')), 40 + array('coin-3', pht('Doubloon')), 41 + array('coin-4', pht('Mountain of Wealth')), 42 + array('misc-1', pht('Pterodactyl')), 43 + array('misc-2', pht('Evil Spooky Haunted Tree')), 44 + array('misc-3', pht('Baby Tequila')), 45 + array('misc-4', pht('The World Burns')), 46 + ); 47 + 48 + $tokens = array(); 49 + foreach ($specs as $id => $spec) { 50 + list($image, $name) = $spec; 51 + 52 + $token = id(new PhabricatorToken()) 53 + ->setID($id) 54 + ->setName($name) 55 + ->setPHID('PHID-TOKN-'.$image); 56 + $tokens[] = $token; 57 + } 58 + 59 + return $tokens; 60 + } 61 + 62 + }
+46
src/applications/tokens/storage/PhabricatorToken.php
··· 1 + <?php 2 + 3 + final class PhabricatorToken extends PhabricatorTokenDAO 4 + implements PhabricatorPolicyInterface { 5 + 6 + protected $phid; 7 + protected $name; 8 + protected $filePHID; 9 + 10 + public function getConfiguration() { 11 + return array( 12 + self::CONFIG_AUX_PHID => true, 13 + ) + parent::getConfiguration(); 14 + } 15 + 16 + public function getCapabilities() { 17 + return array( 18 + PhabricatorPolicyCapability::CAN_VIEW, 19 + ); 20 + } 21 + 22 + public function getPolicy($capability) { 23 + return PhabricatorPolicies::POLICY_USER; 24 + } 25 + 26 + public function hasAutomaticCapability($capability, PhabricatorUser $viewer) { 27 + return false; 28 + } 29 + 30 + public function renderIcon() { 31 + // TODO: Maybe move to a View class? 32 + 33 + require_celerity_resource('sprite-tokens-css'); 34 + require_celerity_resource('tokens-css'); 35 + 36 + $sprite = substr($this->getPHID(), 10); 37 + 38 + return phutil_tag( 39 + 'div', 40 + array( 41 + 'class' => 'sprite-tokens token-icon token-'.$sprite, 42 + ), 43 + ''); 44 + } 45 + 46 + }
+15
src/applications/tokens/storage/PhabricatorTokenCount.php
··· 1 + <?php 2 + 3 + final class PhabricatorTokenCount extends PhabricatorTokenDAO { 4 + 5 + protected $objectPHID; 6 + protected $tokenCount; 7 + 8 + public function getConfiguration() { 9 + return array( 10 + self::CONFIG_IDS => self::IDS_MANUAL, 11 + self::CONFIG_TIMESTAMPS => false, 12 + ) + parent::getConfiguration(); 13 + } 14 + 15 + }
+9
src/applications/tokens/storage/PhabricatorTokenDAO.php
··· 1 + <?php 2 + 3 + abstract class PhabricatorTokenDAO extends PhabricatorLiskDAO { 4 + 5 + public function getApplicationName() { 6 + return 'token'; 7 + } 8 + 9 + }
+54
src/applications/tokens/storage/PhabricatorTokenGiven.php
··· 1 + <?php 2 + 3 + final class PhabricatorTokenGiven extends PhabricatorTokenDAO 4 + implements PhabricatorPolicyInterface { 5 + 6 + protected $authorPHID; 7 + protected $objectPHID; 8 + protected $tokenPHID; 9 + 10 + private $object; 11 + 12 + public function attachObject(PhabricatorTokenReceiverInterface $object) { 13 + $this->object = $object; 14 + return $this; 15 + } 16 + 17 + public function getObject() { 18 + if ($this->object === null) { 19 + throw new Exception("Call attachObject() before getObject()!"); 20 + } 21 + return $this->object; 22 + } 23 + 24 + public function getCapabilities() { 25 + return array( 26 + PhabricatorPolicyCapability::CAN_VIEW, 27 + PhabricatorPolicyCapability::CAN_EDIT, 28 + ); 29 + } 30 + 31 + public function getPolicy($capability) { 32 + switch ($capability) { 33 + case PhabricatorPolicyCapability::CAN_VIEW: 34 + return $this->getObject()->getPolicy($capability); 35 + default: 36 + return PhabricatorPolicies::POLICY_NOONE; 37 + } 38 + } 39 + 40 + public function hasAutomaticCapability($capability, PhabricatorUser $user) { 41 + switch ($capability) { 42 + case PhabricatorPolicyCapability::CAN_VIEW: 43 + return $this->getObject()->hasAutomaticCapability( 44 + $capability, 45 + $user); 46 + default: 47 + if ($user->getPHID() == $this->authorPHID) { 48 + return true; 49 + } 50 + return false; 51 + } 52 + } 53 + 54 + }
+28 -1
src/infrastructure/celerity/CeleritySpriteGenerator.php
··· 176 176 return $sheet; 177 177 } 178 178 179 + public function buildTokenSheet() { 180 + $tokens = $this->getDirectoryList('tokens_1x'); 181 + 182 + $template = id(new PhutilSprite()) 183 + ->setSourceSize(16, 16); 184 + 185 + $sprites = array(); 186 + foreach ($tokens as $token) { 187 + $path = $this->getPath('tokens_1x/'.$token.'.png'); 188 + 189 + $sprite = id(clone $template) 190 + ->setName('token-'.$token) 191 + ->setTargetCSS('.token-'.$token) 192 + ->setSourceFile($path, 1); 193 + 194 + $sprites[] = $sprite; 195 + } 196 + 197 + $sheet = $this->buildSheet('tokens', false); 198 + foreach ($sprites as $sprite) { 199 + $sheet->addSprite($sprite); 200 + } 201 + 202 + return $sheet; 203 + } 204 + 205 + 179 206 public function buildConpherenceSheet() { 180 207 $icons = $this->getDirectoryList('conpher_1x'); 181 208 $scales = array( ··· 186 213 ->setSourceSize(32, 32); 187 214 188 215 $sprites = array(); 189 - foreach ($icons as $icon) { 216 + foreach ($icons as $icon) { 190 217 $color = preg_match('/_on/', $icon) ? 'on' : 'off'; 191 218 192 219 $prefix = 'conpher_';
+1
src/infrastructure/events/constant/PhabricatorEventType.php
··· 29 29 const TYPE_UI_WILLRENDEROBJECTS = 'ui.willRenderObjects'; 30 30 const TYPE_UI_DDIDRENDEROBJECT = 'ui.didRenderObject'; 31 31 const TYPE_UI_DIDRENDEROBJECTS = 'ui.didRenderObjects'; 32 + const TYPE_UI_WILLRENDERPROPERTIES = 'ui.willRenderProperties'; 32 33 33 34 const TYPE_PEOPLE_DIDRENDERMENU = 'people.didRenderMenu'; 34 35 }
+12 -4
src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
··· 163 163 'type' => 'db', 164 164 'name' => 'conpherence', 165 165 ), 166 + 'db.config' => array( 167 + 'type' => 'db', 168 + 'name' => 'config', 169 + ), 170 + 'db.token' => array( 171 + 'type' => 'db', 172 + 'name' => 'token', 173 + ), 166 174 '0000.legacy.sql' => array( 167 175 'type' => 'sql', 168 176 'name' => $this->getPatchPath('0000.legacy.sql'), ··· 1068 1076 'type' => 'sql', 1069 1077 'name' => $this->getPatchPath('20121220.generalcache.sql'), 1070 1078 ), 1071 - 'db.config' => array( 1072 - 'type' => 'db', 1073 - 'name' => 'config', 1074 - ), 1075 1079 '20121226.config.sql' => array( 1076 1080 'type' => 'sql', 1077 1081 'name' => $this->getPatchPath('20121226.config.sql'), ··· 1116 1120 '20130214.chatlogchannelid.sql' => array( 1117 1121 'type' => 'sql', 1118 1122 'name' => $this->getPatchPath('20130214.chatlogchannelid.sql'), 1123 + ), 1124 + '20130214.token.sql' => array( 1125 + 'type' => 'sql', 1126 + 'name' => $this->getPatchPath('20130214.token.sql'), 1119 1127 ), 1120 1128 ); 1121 1129 }
+25
src/view/layout/PhabricatorPropertyListView.php
··· 4 4 5 5 private $parts = array(); 6 6 private $hasKeyboardShortcuts; 7 + private $object; 8 + private $invokedWillRenderEvent; 7 9 8 10 protected function canAppendChild() { 9 11 return false; 12 + } 13 + 14 + public function setObject($object) { 15 + $this->object = $object; 16 + return $this; 10 17 } 11 18 12 19 public function setHasKeyboardShortcuts($has_keyboard_shortcuts) { ··· 52 59 return $this; 53 60 } 54 61 62 + public function invokeWillRenderEvent() { 63 + if ($this->object && $this->getUser() && !$this->invokedWillRenderEvent) { 64 + $event = new PhabricatorEvent( 65 + PhabricatorEventType::TYPE_UI_WILLRENDERPROPERTIES, 66 + array( 67 + 'object' => $this->object, 68 + 'view' => $this, 69 + )); 70 + $event->setUser($this->getUser()); 71 + PhutilEventEngine::dispatchEvent($event); 72 + } 73 + $this->invokedWillRenderEvent = true; 74 + } 75 + 76 + 77 + 55 78 public function render() { 79 + $this->invokeWillRenderEvent(); 80 + 56 81 require_celerity_resource('phabricator-property-list-view-css'); 57 82 58 83 $items = array();
+27
webroot/rsrc/css/application/tokens/tokens.css
··· 1 + /** 2 + * @provides tokens-css 3 + */ 4 + 5 + .token-icon { 6 + position: relative; 7 + display: inline-block; 8 + width: 16px; 9 + height: 16px; 10 + } 11 + 12 + button.token-button { 13 + background: #f6f6f6; 14 + border: 1px solid #333333; 15 + position: relative; 16 + width: 16px; 17 + height: 16px; 18 + padding: 16px; 19 + margin: 8px; 20 + text-shadow: none; 21 + box-shadow: none; 22 + box-sizing: content-box; 23 + } 24 + 25 + .token-grid { 26 + text-align: center; 27 + }
+1
webroot/rsrc/css/layout/phabricator-pinboard-view.css
··· 5 5 .phabricator-pinboard-view { 6 6 padding: 20px; 7 7 overflow: hidden; 8 + margin: 1em 0; 8 9 } 9 10 10 11 .phabricator-pinboard-item-view {
+2 -2
webroot/rsrc/css/sprite-conph.css
··· 4 4 */ 5 5 6 6 .sprite-conpher { 7 - background-image: url(/rsrc/image/sprite-conph.png); 7 + background-image: url(/rsrc/image/sprite-conpher.png); 8 8 background-repeat: no-repeat; 9 9 } 10 10 ··· 12 12 only screen and (min-device-pixel-ratio: 1.5), 13 13 only screen and (-webkit-min-device-pixel-ratio: 1.5) { 14 14 .sprite-conpher { 15 - background-image: url(/rsrc/image/sprite-conph-X2.png); 15 + background-image: url(/rsrc/image/sprite-conpher-X2.png); 16 16 background-size: 132px 132px; 17 17 } 18 18 }
+76
webroot/rsrc/css/sprite-tokens.css
··· 1 + /** 2 + * @provides sprite-tokens-css 3 + * @generated 4 + */ 5 + 6 + .sprite-tokens { 7 + background-image: url(/rsrc/image/sprite-tokens.png); 8 + background-repeat: no-repeat; 9 + } 10 + 11 + 12 + 13 + 14 + .token-coin-1 { 15 + background-position: 0px 0px; 16 + } 17 + 18 + .token-coin-2 { 19 + background-position: -17px 0px; 20 + } 21 + 22 + .token-coin-3 { 23 + background-position: -34px 0px; 24 + } 25 + 26 + .token-coin-4 { 27 + background-position: -51px 0px; 28 + } 29 + 30 + .token-heart-1 { 31 + background-position: 0px -17px; 32 + } 33 + 34 + .token-heart-2 { 35 + background-position: -17px -17px; 36 + } 37 + 38 + .token-like-1 { 39 + background-position: -34px -17px; 40 + } 41 + 42 + .token-like-2 { 43 + background-position: -51px -17px; 44 + } 45 + 46 + .token-medal-1 { 47 + background-position: 0px -34px; 48 + } 49 + 50 + .token-medal-2 { 51 + background-position: -17px -34px; 52 + } 53 + 54 + .token-medal-3 { 55 + background-position: -34px -34px; 56 + } 57 + 58 + .token-medal-4 { 59 + background-position: -51px -34px; 60 + } 61 + 62 + .token-misc-1 { 63 + background-position: 0px -51px; 64 + } 65 + 66 + .token-misc-2 { 67 + background-position: -17px -51px; 68 + } 69 + 70 + .token-misc-3 { 71 + background-position: -34px -51px; 72 + } 73 + 74 + .token-misc-4 { 75 + background-position: -51px -51px; 76 + }
webroot/rsrc/image/sprite-tokens.png

This is a binary file and will not be displayed.