@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.

Merge branch 'master' into phutil_tag

(Just synchronizing master into the tag branch.)

+1620 -1143
resources/sprite/apps_blue_2x/conpherence.png

This is a binary file and will not be displayed.

resources/sprite/apps_blue_4x/conpherence.png

This is a binary file and will not be displayed.

resources/sprite/apps_dark_1x/conpherence.png

This is a binary file and will not be displayed.

resources/sprite/apps_dark_2x/conpherence.png

This is a binary file and will not be displayed.

resources/sprite/apps_dark_4x/conpherence.png

This is a binary file and will not be displayed.

resources/sprite/apps_glow_2x/conpherence.png

This is a binary file and will not be displayed.

resources/sprite/apps_glow_4x/conpherence.png

This is a binary file and will not be displayed.

resources/sprite/apps_lb_2x/conpherence.png

This is a binary file and will not be displayed.

resources/sprite/apps_lb_4x/conpherence.png

This is a binary file and will not be displayed.

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

This is a binary file and will not be displayed.

resources/sprite/menu_1x/conf-off.png

This is a binary file and will not be displayed.

resources/sprite/menu_1x/conf-unseen.png

This is a binary file and will not be displayed.

resources/sprite/menu_2x/conf-hover.png

This is a binary file and will not be displayed.

resources/sprite/menu_2x/conf-off.png

This is a binary file and will not be displayed.

resources/sprite/menu_2x/conf-unseen.png

This is a binary file and will not be displayed.

+3
resources/sql/patches/20130127.altheraldtranscript.sql
··· 1 + ALTER TABLE `{$NAMESPACE}_herald`.`herald_transcript` 2 + DROP `psth`; 3 +
+95 -87
src/__celerity_resource_map__.php
··· 7 7 */ 8 8 9 9 celerity_register_resource_map(array( 10 + '/rsrc/image/actions/edit.png' => 11 + array( 12 + 'hash' => 'ae90914d120ac3838ddc633b480343f3', 13 + 'uri' => '/res/ae90914d/rsrc/image/actions/edit.png', 14 + 'disk' => '/rsrc/image/actions/edit.png', 15 + 'type' => 'png', 16 + ), 10 17 '/rsrc/image/avatar.png' => 11 18 array( 12 19 'hash' => '1c5f255071537f05406adee86717ff27', ··· 436 443 ), 437 444 '/rsrc/image/sprite-apps-X2.png' => 438 445 array( 439 - 'hash' => '984f8159dfc5bae465aa48a6ee5f00fe', 440 - 'uri' => '/res/984f8159/rsrc/image/sprite-apps-X2.png', 446 + 'hash' => '361e64ded74eee1094127c7878c2c385', 447 + 'uri' => '/res/361e64de/rsrc/image/sprite-apps-X2.png', 441 448 'disk' => '/rsrc/image/sprite-apps-X2.png', 442 449 'type' => 'png', 443 450 ), 444 451 '/rsrc/image/sprite-apps-large-X2.png' => 445 452 array( 446 - 'hash' => 'b215a44c77664577d8edf0d2ac9a8cfd', 447 - 'uri' => '/res/b215a44c/rsrc/image/sprite-apps-large-X2.png', 453 + 'hash' => '73507e04b4bd4d1e8e7544f7c424fc0f', 454 + 'uri' => '/res/73507e04/rsrc/image/sprite-apps-large-X2.png', 448 455 'disk' => '/rsrc/image/sprite-apps-large-X2.png', 449 456 'type' => 'png', 450 457 ), 451 458 '/rsrc/image/sprite-apps-large.png' => 452 459 array( 453 - 'hash' => 'f60b55b3d4a2b87169444d88a9f629c6', 454 - 'uri' => '/res/f60b55b3/rsrc/image/sprite-apps-large.png', 460 + 'hash' => '6a5aade6134954171f2f1f8507270632', 461 + 'uri' => '/res/6a5aade6/rsrc/image/sprite-apps-large.png', 455 462 'disk' => '/rsrc/image/sprite-apps-large.png', 456 463 'type' => 'png', 457 464 ), ··· 464 471 ), 465 472 '/rsrc/image/sprite-apps.png' => 466 473 array( 467 - 'hash' => '7a13551ec085fff5438c621ca5213d8e', 468 - 'uri' => '/res/7a13551e/rsrc/image/sprite-apps.png', 474 + 'hash' => '5e76c53e9f61755e5d3e7befa9d73ae5', 475 + 'uri' => '/res/5e76c53e/rsrc/image/sprite-apps.png', 469 476 'disk' => '/rsrc/image/sprite-apps.png', 470 477 'type' => 'png', 471 478 ), ··· 492 499 ), 493 500 '/rsrc/image/sprite-menu-X2.png' => 494 501 array( 495 - 'hash' => '11017d94e949aa169361b966716e8729', 496 - 'uri' => '/res/11017d94/rsrc/image/sprite-menu-X2.png', 502 + 'hash' => 'ad544a9287ca73b9e0d3f549834701ee', 503 + 'uri' => '/res/ad544a92/rsrc/image/sprite-menu-X2.png', 497 504 'disk' => '/rsrc/image/sprite-menu-X2.png', 498 505 'type' => 'png', 499 506 ), 500 507 '/rsrc/image/sprite-menu.png' => 501 508 array( 502 - 'hash' => 'ba0f7d61f49ea50e9c3ff93b160e14c5', 503 - 'uri' => '/res/ba0f7d61/rsrc/image/sprite-menu.png', 509 + 'hash' => '8a6822c29bfa6f33db1c1b8b02b5c6d3', 510 + 'uri' => '/res/8a6822c2/rsrc/image/sprite-menu.png', 504 511 'disk' => '/rsrc/image/sprite-menu.png', 505 512 'type' => 'png', 506 513 ), ··· 609 616 ), 610 617 'aphront-error-view-css' => 611 618 array( 612 - 'uri' => '/res/048ed376/rsrc/css/aphront/error-view.css', 619 + 'uri' => '/res/5f43a7c5/rsrc/css/aphront/error-view.css', 613 620 'type' => 'css', 614 621 'requires' => 615 622 array( ··· 718 725 ), 719 726 'config-options-css' => 720 727 array( 721 - 'uri' => '/res/6f7f64e8/rsrc/css/application/config/config-options.css', 728 + 'uri' => '/res/e6c21f2f/rsrc/css/application/config/config-options.css', 722 729 'type' => 'css', 723 730 'requires' => 724 731 array( ··· 727 734 ), 728 735 'conpherence-header-pane-css' => 729 736 array( 730 - 'uri' => '/res/e50e02c8/rsrc/css/application/conpherence/header-pane.css', 737 + 'uri' => '/res/4b8aebd2/rsrc/css/application/conpherence/header-pane.css', 731 738 'type' => 'css', 732 739 'requires' => 733 740 array( ··· 736 743 ), 737 744 'conpherence-menu-css' => 738 745 array( 739 - 'uri' => '/res/02b20456/rsrc/css/application/conpherence/menu.css', 746 + 'uri' => '/res/0dc6b412/rsrc/css/application/conpherence/menu.css', 740 747 'type' => 'css', 741 748 'requires' => 742 749 array( ··· 745 752 ), 746 753 'conpherence-message-pane-css' => 747 754 array( 748 - 'uri' => '/res/799dc191/rsrc/css/application/conpherence/message-pane.css', 755 + 'uri' => '/res/88b1927c/rsrc/css/application/conpherence/message-pane.css', 749 756 'type' => 'css', 750 757 'requires' => 751 758 array( ··· 763 770 ), 764 771 'conpherence-widget-pane-css' => 765 772 array( 766 - 'uri' => '/res/7af40cac/rsrc/css/application/conpherence/widget-pane.css', 773 + 'uri' => '/res/b3e6a558/rsrc/css/application/conpherence/widget-pane.css', 767 774 'type' => 'css', 768 775 'requires' => 769 776 array( ··· 1023 1030 ), 1024 1031 'javelin-behavior-aphront-drag-and-drop' => 1025 1032 array( 1026 - 'uri' => '/res/84a67d72/rsrc/js/application/core/behavior-drag-and-drop.js', 1033 + 'uri' => '/res/3d809b40/rsrc/js/application/core/behavior-drag-and-drop.js', 1027 1034 'type' => 'js', 1028 1035 'requires' => 1029 1036 array( 1030 1037 0 => 'javelin-behavior', 1031 1038 1 => 'javelin-dom', 1032 - 2 => 'phabricator-drag-and-drop-file-upload', 1039 + 2 => 'phabricator-file-upload', 1040 + 3 => 'phabricator-drag-and-drop-file-upload', 1033 1041 ), 1034 1042 'disk' => '/rsrc/js/application/core/behavior-drag-and-drop.js', 1035 1043 ), ··· 2705 2713 ), 2706 2714 'phabricator-main-menu-view' => 2707 2715 array( 2708 - 'uri' => '/res/a38edb46/rsrc/css/application/base/main-menu-view.css', 2716 + 'uri' => '/res/38ec42d4/rsrc/css/application/base/main-menu-view.css', 2709 2717 'type' => 'css', 2710 2718 'requires' => 2711 2719 array( ··· 2766 2774 ), 2767 2775 'phabricator-object-item-list-view-css' => 2768 2776 array( 2769 - 'uri' => '/res/1f9c7ebb/rsrc/css/layout/phabricator-object-item-list-view.css', 2777 + 'uri' => '/res/2fb97c5c/rsrc/css/layout/phabricator-object-item-list-view.css', 2770 2778 'type' => 'css', 2771 2779 'requires' => 2772 2780 array( ··· 2920 2928 ), 2921 2929 'phabricator-source-code-view-css' => 2922 2930 array( 2923 - 'uri' => '/res/87935c75/rsrc/css/layout/phabricator-source-code-view.css', 2931 + 'uri' => '/res/9373e769/rsrc/css/layout/phabricator-source-code-view.css', 2924 2932 'type' => 'css', 2925 2933 'requires' => 2926 2934 array( ··· 3256 3264 ), 3257 3265 'sprite-apps-css' => 3258 3266 array( 3259 - 'uri' => '/res/2d8a940e/rsrc/css/sprite-apps.css', 3267 + 'uri' => '/res/8de495b4/rsrc/css/sprite-apps.css', 3260 3268 'type' => 'css', 3261 3269 'requires' => 3262 3270 array( ··· 3265 3273 ), 3266 3274 'sprite-apps-large-css' => 3267 3275 array( 3268 - 'uri' => '/res/6b528e03/rsrc/css/sprite-apps-large.css', 3276 + 'uri' => '/res/174143b7/rsrc/css/sprite-apps-large.css', 3269 3277 'type' => 'css', 3270 3278 'requires' => 3271 3279 array( ··· 3301 3309 ), 3302 3310 'sprite-menu-css' => 3303 3311 array( 3304 - 'uri' => '/res/3d9f75af/rsrc/css/sprite-menu.css', 3312 + 'uri' => '/res/8e6624b0/rsrc/css/sprite-menu.css', 3305 3313 'type' => 'css', 3306 3314 'requires' => 3307 3315 array( ··· 3338 3346 ), array( 3339 3347 'packages' => 3340 3348 array( 3341 - '8fd19266' => 3349 + '023adc14' => 3342 3350 array( 3343 3351 'name' => 'core.pkg.css', 3344 3352 'symbols' => ··· 3382 3390 36 => 'phabricator-object-item-list-view-css', 3383 3391 37 => 'global-drag-and-drop-css', 3384 3392 ), 3385 - 'uri' => '/res/pkg/8fd19266/core.pkg.css', 3393 + 'uri' => '/res/pkg/023adc14/core.pkg.css', 3386 3394 'type' => 'css', 3387 3395 ), 3388 3396 '66dca903' => ··· 3462 3470 'uri' => '/res/pkg/ec01d039/differential.pkg.css', 3463 3471 'type' => 'css', 3464 3472 ), 3465 - 'ac53d36a' => 3473 + '310cd201' => 3466 3474 array( 3467 3475 'name' => 'differential.pkg.js', 3468 3476 'symbols' => ··· 3487 3495 17 => 'javelin-behavior-differential-toggle-files', 3488 3496 18 => 'javelin-behavior-differential-user-select', 3489 3497 ), 3490 - 'uri' => '/res/pkg/ac53d36a/differential.pkg.js', 3498 + 'uri' => '/res/pkg/310cd201/differential.pkg.js', 3491 3499 'type' => 'js', 3492 3500 ), 3493 3501 'c8ce2d88' => ··· 3572 3580 'reverse' => 3573 3581 array( 3574 3582 'aphront-attached-file-view-css' => 'e30a3fa8', 3575 - 'aphront-crumbs-view-css' => '8fd19266', 3576 - 'aphront-dialog-view-css' => '8fd19266', 3577 - 'aphront-error-view-css' => '8fd19266', 3578 - 'aphront-form-view-css' => '8fd19266', 3583 + 'aphront-crumbs-view-css' => '023adc14', 3584 + 'aphront-dialog-view-css' => '023adc14', 3585 + 'aphront-error-view-css' => '023adc14', 3586 + 'aphront-form-view-css' => '023adc14', 3579 3587 'aphront-headsup-action-list-view-css' => 'ec01d039', 3580 - 'aphront-headsup-view-css' => '8fd19266', 3581 - 'aphront-list-filter-view-css' => '8fd19266', 3582 - 'aphront-pager-view-css' => '8fd19266', 3583 - 'aphront-panel-view-css' => '8fd19266', 3584 - 'aphront-table-view-css' => '8fd19266', 3585 - 'aphront-tokenizer-control-css' => '8fd19266', 3586 - 'aphront-tooltip-css' => '8fd19266', 3587 - 'aphront-typeahead-control-css' => '8fd19266', 3588 + 'aphront-headsup-view-css' => '023adc14', 3589 + 'aphront-list-filter-view-css' => '023adc14', 3590 + 'aphront-pager-view-css' => '023adc14', 3591 + 'aphront-panel-view-css' => '023adc14', 3592 + 'aphront-table-view-css' => '023adc14', 3593 + 'aphront-tokenizer-control-css' => '023adc14', 3594 + 'aphront-tooltip-css' => '023adc14', 3595 + 'aphront-typeahead-control-css' => '023adc14', 3588 3596 'differential-changeset-view-css' => 'ec01d039', 3589 3597 'differential-core-view-css' => 'ec01d039', 3590 - 'differential-inline-comment-editor' => 'ac53d36a', 3598 + 'differential-inline-comment-editor' => '310cd201', 3591 3599 'differential-local-commits-view-css' => 'ec01d039', 3592 3600 'differential-results-table-css' => 'ec01d039', 3593 3601 'differential-revision-add-comment-css' => 'ec01d039', ··· 3598 3606 'differential-table-of-contents-css' => 'ec01d039', 3599 3607 'diffusion-commit-view-css' => 'c8ce2d88', 3600 3608 'diffusion-icons-css' => 'c8ce2d88', 3601 - 'global-drag-and-drop-css' => '8fd19266', 3609 + 'global-drag-and-drop-css' => '023adc14', 3602 3610 'inline-comment-summary-css' => 'ec01d039', 3603 3611 'javelin-aphlict' => '66dca903', 3604 3612 'javelin-behavior' => 'fbeded59', 3605 3613 'javelin-behavior-aphlict-dropdown' => '66dca903', 3606 3614 'javelin-behavior-aphlict-listen' => '66dca903', 3607 3615 'javelin-behavior-aphront-basic-tokenizer' => '66dca903', 3608 - 'javelin-behavior-aphront-drag-and-drop' => 'ac53d36a', 3609 - 'javelin-behavior-aphront-drag-and-drop-textarea' => 'ac53d36a', 3616 + 'javelin-behavior-aphront-drag-and-drop' => '310cd201', 3617 + 'javelin-behavior-aphront-drag-and-drop-textarea' => '310cd201', 3610 3618 'javelin-behavior-aphront-form-disable-on-submit' => '66dca903', 3611 3619 'javelin-behavior-audit-preview' => 'f96657b8', 3612 3620 'javelin-behavior-dark-console' => '8edbada5', 3613 3621 'javelin-behavior-dark-console-ajax' => '8edbada5', 3614 3622 'javelin-behavior-device' => '66dca903', 3615 - 'javelin-behavior-differential-accept-with-errors' => 'ac53d36a', 3616 - 'javelin-behavior-differential-add-reviewers-and-ccs' => 'ac53d36a', 3617 - 'javelin-behavior-differential-comment-jump' => 'ac53d36a', 3618 - 'javelin-behavior-differential-diff-radios' => 'ac53d36a', 3619 - 'javelin-behavior-differential-dropdown-menus' => 'ac53d36a', 3620 - 'javelin-behavior-differential-edit-inline-comments' => 'ac53d36a', 3621 - 'javelin-behavior-differential-feedback-preview' => 'ac53d36a', 3622 - 'javelin-behavior-differential-keyboard-navigation' => 'ac53d36a', 3623 - 'javelin-behavior-differential-populate' => 'ac53d36a', 3624 - 'javelin-behavior-differential-show-more' => 'ac53d36a', 3625 - 'javelin-behavior-differential-toggle-files' => 'ac53d36a', 3626 - 'javelin-behavior-differential-user-select' => 'ac53d36a', 3623 + 'javelin-behavior-differential-accept-with-errors' => '310cd201', 3624 + 'javelin-behavior-differential-add-reviewers-and-ccs' => '310cd201', 3625 + 'javelin-behavior-differential-comment-jump' => '310cd201', 3626 + 'javelin-behavior-differential-diff-radios' => '310cd201', 3627 + 'javelin-behavior-differential-dropdown-menus' => '310cd201', 3628 + 'javelin-behavior-differential-edit-inline-comments' => '310cd201', 3629 + 'javelin-behavior-differential-feedback-preview' => '310cd201', 3630 + 'javelin-behavior-differential-keyboard-navigation' => '310cd201', 3631 + 'javelin-behavior-differential-populate' => '310cd201', 3632 + 'javelin-behavior-differential-show-more' => '310cd201', 3633 + 'javelin-behavior-differential-toggle-files' => '310cd201', 3634 + 'javelin-behavior-differential-user-select' => '310cd201', 3627 3635 'javelin-behavior-diffusion-commit-graph' => 'f96657b8', 3628 3636 'javelin-behavior-diffusion-pull-lastmodified' => 'f96657b8', 3629 3637 'javelin-behavior-error-log' => '8edbada5', ··· 3640 3648 'javelin-behavior-phabricator-home-reveal-tiles' => '66dca903', 3641 3649 'javelin-behavior-phabricator-keyboard-shortcuts' => '66dca903', 3642 3650 'javelin-behavior-phabricator-nav' => '66dca903', 3643 - 'javelin-behavior-phabricator-object-selector' => 'ac53d36a', 3651 + 'javelin-behavior-phabricator-object-selector' => '310cd201', 3644 3652 'javelin-behavior-phabricator-oncopy' => '66dca903', 3645 3653 'javelin-behavior-phabricator-remarkup-assist' => '66dca903', 3646 3654 'javelin-behavior-phabricator-search-typeahead' => '66dca903', 3647 3655 'javelin-behavior-phabricator-tooltips' => '66dca903', 3648 3656 'javelin-behavior-phabricator-watch-anchor' => '66dca903', 3649 3657 'javelin-behavior-refresh-csrf' => '66dca903', 3650 - 'javelin-behavior-repository-crossreference' => 'ac53d36a', 3658 + 'javelin-behavior-repository-crossreference' => '310cd201', 3651 3659 'javelin-behavior-toggle-class' => '66dca903', 3652 3660 'javelin-behavior-workflow' => '66dca903', 3653 3661 'javelin-dom' => 'fbeded59', ··· 3668 3676 'javelin-util' => 'fbeded59', 3669 3677 'javelin-vector' => 'fbeded59', 3670 3678 'javelin-workflow' => 'fbeded59', 3671 - 'lightbox-attachment-css' => '8fd19266', 3679 + 'lightbox-attachment-css' => '023adc14', 3672 3680 'maniphest-task-summary-css' => 'e30a3fa8', 3673 3681 'maniphest-transaction-detail-css' => 'e30a3fa8', 3674 3682 'phabricator-busy' => '66dca903', 3675 3683 'phabricator-content-source-view-css' => 'ec01d039', 3676 - 'phabricator-core-buttons-css' => '8fd19266', 3677 - 'phabricator-core-css' => '8fd19266', 3678 - 'phabricator-crumbs-view-css' => '8fd19266', 3679 - 'phabricator-directory-css' => '8fd19266', 3680 - 'phabricator-drag-and-drop-file-upload' => 'ac53d36a', 3684 + 'phabricator-core-buttons-css' => '023adc14', 3685 + 'phabricator-core-css' => '023adc14', 3686 + 'phabricator-crumbs-view-css' => '023adc14', 3687 + 'phabricator-directory-css' => '023adc14', 3688 + 'phabricator-drag-and-drop-file-upload' => '310cd201', 3681 3689 'phabricator-dropdown-menu' => '66dca903', 3682 3690 'phabricator-file-upload' => '66dca903', 3683 - 'phabricator-filetree-view-css' => '8fd19266', 3684 - 'phabricator-flag-css' => '8fd19266', 3685 - 'phabricator-form-view-css' => '8fd19266', 3686 - 'phabricator-header-view-css' => '8fd19266', 3687 - 'phabricator-jump-nav' => '8fd19266', 3691 + 'phabricator-filetree-view-css' => '023adc14', 3692 + 'phabricator-flag-css' => '023adc14', 3693 + 'phabricator-form-view-css' => '023adc14', 3694 + 'phabricator-header-view-css' => '023adc14', 3695 + 'phabricator-jump-nav' => '023adc14', 3688 3696 'phabricator-keyboard-shortcut' => '66dca903', 3689 3697 'phabricator-keyboard-shortcut-manager' => '66dca903', 3690 - 'phabricator-main-menu-view' => '8fd19266', 3698 + 'phabricator-main-menu-view' => '023adc14', 3691 3699 'phabricator-menu-item' => '66dca903', 3692 - 'phabricator-nav-view-css' => '8fd19266', 3700 + 'phabricator-nav-view-css' => '023adc14', 3693 3701 'phabricator-notification' => '66dca903', 3694 - 'phabricator-notification-css' => '8fd19266', 3695 - 'phabricator-notification-menu-css' => '8fd19266', 3696 - 'phabricator-object-item-list-view-css' => '8fd19266', 3702 + 'phabricator-notification-css' => '023adc14', 3703 + 'phabricator-notification-menu-css' => '023adc14', 3704 + 'phabricator-object-item-list-view-css' => '023adc14', 3697 3705 'phabricator-object-selector-css' => 'ec01d039', 3698 3706 'phabricator-paste-file-upload' => '66dca903', 3699 3707 'phabricator-prefab' => '66dca903', 3700 3708 'phabricator-project-tag-css' => 'e30a3fa8', 3701 - 'phabricator-remarkup-css' => '8fd19266', 3702 - 'phabricator-shaped-request' => 'ac53d36a', 3703 - 'phabricator-side-menu-view-css' => '8fd19266', 3704 - 'phabricator-standard-page-view' => '8fd19266', 3709 + 'phabricator-remarkup-css' => '023adc14', 3710 + 'phabricator-shaped-request' => '310cd201', 3711 + 'phabricator-side-menu-view-css' => '023adc14', 3712 + 'phabricator-standard-page-view' => '023adc14', 3705 3713 'phabricator-textareautils' => '66dca903', 3706 3714 'phabricator-tooltip' => '66dca903', 3707 - 'phabricator-transaction-view-css' => '8fd19266', 3708 - 'phabricator-zindex-css' => '8fd19266', 3709 - 'sprite-apps-large-css' => '8fd19266', 3710 - 'sprite-gradient-css' => '8fd19266', 3711 - 'sprite-icon-css' => '8fd19266', 3712 - 'sprite-menu-css' => '8fd19266', 3713 - 'syntax-highlighting-css' => '8fd19266', 3715 + 'phabricator-transaction-view-css' => '023adc14', 3716 + 'phabricator-zindex-css' => '023adc14', 3717 + 'sprite-apps-large-css' => '023adc14', 3718 + 'sprite-gradient-css' => '023adc14', 3719 + 'sprite-icon-css' => '023adc14', 3720 + 'sprite-menu-css' => '023adc14', 3721 + 'syntax-highlighting-css' => '023adc14', 3714 3722 ), 3715 3723 ));
+4
src/__phutil_library_map__.php
··· 195 195 'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php', 196 196 'ConduitException' => 'applications/conduit/protocol/ConduitException.php', 197 197 'ConduitSSHWorkflow' => 'applications/conduit/ssh/ConduitSSHWorkflow.php', 198 + 'ConpherenceConfigOptions' => 'applications/conpherence/config/ConpherenceConfigOptions.php', 198 199 'ConpherenceConstants' => 'applications/conpherence/constants/ConpherenceConstants.php', 199 200 'ConpherenceController' => 'applications/conpherence/controller/ConpherenceController.php', 200 201 'ConpherenceDAO' => 'applications/conpherence/storage/ConpherenceDAO.php', ··· 205 206 'ConpherenceParticipant' => 'applications/conpherence/storage/ConpherenceParticipant.php', 206 207 'ConpherenceParticipantQuery' => 'applications/conpherence/query/ConpherenceParticipantQuery.php', 207 208 'ConpherenceParticipationStatus' => 'applications/conpherence/constants/ConpherenceParticipationStatus.php', 209 + 'ConpherenceReplyHandler' => 'applications/conpherence/mail/ConpherenceReplyHandler.php', 208 210 'ConpherenceThread' => 'applications/conpherence/storage/ConpherenceThread.php', 209 211 'ConpherenceThreadQuery' => 'applications/conpherence/query/ConpherenceThreadQuery.php', 210 212 'ConpherenceTransaction' => 'applications/conpherence/storage/ConpherenceTransaction.php', ··· 1666 1668 'ConduitCallTestCase' => 'PhabricatorTestCase', 1667 1669 'ConduitException' => 'Exception', 1668 1670 'ConduitSSHWorkflow' => 'PhabricatorSSHWorkflow', 1671 + 'ConpherenceConfigOptions' => 'PhabricatorApplicationConfigOptions', 1669 1672 'ConpherenceController' => 'PhabricatorController', 1670 1673 'ConpherenceDAO' => 'PhabricatorLiskDAO', 1671 1674 'ConpherenceEditor' => 'PhabricatorApplicationTransactionEditor', ··· 1675 1678 'ConpherenceParticipant' => 'ConpherenceDAO', 1676 1679 'ConpherenceParticipantQuery' => 'PhabricatorOffsetPagedQuery', 1677 1680 'ConpherenceParticipationStatus' => 'ConpherenceConstants', 1681 + 'ConpherenceReplyHandler' => 'PhabricatorMailReplyHandler', 1678 1682 'ConpherenceThread' => 1679 1683 array( 1680 1684 0 => 'ConpherenceDAO',
+1 -1
src/applications/auth/controller/PhabricatorAuthController.php
··· 5 5 public function buildStandardPageResponse($view, array $data) { 6 6 $page = $this->buildStandardPageView(); 7 7 8 - $page->setApplicationName('Login'); 8 + $page->setApplicationName(pht('Login')); 9 9 $page->setBaseURI('/login/'); 10 10 $page->setTitle(idx($data, 'title')); 11 11 $page->appendChild($view);
+4 -3
src/applications/auth/controller/PhabricatorDisabledUserController.php
··· 15 15 } 16 16 17 17 $failure_view = new AphrontRequestFailureView(); 18 - $failure_view->setHeader('Account Disabled'); 19 - $failure_view->appendChild('<p>Your account has been disabled.</p>'); 18 + $failure_view->setHeader(pht('Account Disabled')); 19 + $failure_view->appendChild( 20 + '<p>'.pht('Your account has been disabled.').'</p>'); 20 21 21 22 return $this->buildStandardPageResponse( 22 23 $failure_view, 23 24 array( 24 - 'title' => 'Account Disabled', 25 + 'title' => pht('Account Disabled'), 25 26 )); 26 27 } 27 28
+23 -17
src/applications/auth/controller/PhabricatorEmailLoginController.php
··· 22 22 23 23 if ($request->isFormPost()) { 24 24 $e_email = null; 25 - $e_captcha = 'Again'; 25 + $e_captcha = pht('Again'); 26 26 27 27 $captcha_ok = AphrontFormRecaptchaControl::processCaptcha($request); 28 28 if (!$captcha_ok) { 29 - $errors[] = "Captcha response is incorrect, try again."; 30 - $e_captcha = 'Invalid'; 29 + $errors[] = pht("Captcha response is incorrect, try again."); 30 + $e_captcha = pht('Invalid'); 31 31 } 32 32 33 33 $email = $request->getStr('email'); 34 34 if (!strlen($email)) { 35 - $errors[] = "You must provide an email address."; 36 - $e_email = 'Required'; 35 + $errors[] = pht("You must provide an email address."); 36 + $e_email = pht('Required'); 37 37 } 38 38 39 39 if (!$errors) { ··· 53 53 } 54 54 55 55 if (!$target_user) { 56 - $errors[] = "There is no account associated with that email address."; 57 - $e_email = "Invalid"; 56 + $errors[] = 57 + pht("There is no account associated with that email address."); 58 + $e_email = pht("Invalid"); 58 59 } 59 60 60 61 if (!$errors) { ··· 96 97 $mail->saveAndSend(); 97 98 98 99 $view = new AphrontRequestFailureView(); 99 - $view->setHeader('Check Your Email'); 100 + $view->setHeader(pht('Check Your Email')); 100 101 $view->appendChild( 101 - '<p>An email has been sent with a link you can use to login.</p>'); 102 + '<p>'.pht( 103 + 'An email has been sent with a link you can use to login.' 104 + ).'</p>'); 102 105 return $this->buildStandardPageResponse( 103 106 $view, 104 107 array( 105 - 'title' => 'Email Sent', 108 + 'title' => pht('Email Sent'), 106 109 )); 107 110 } 108 111 } ··· 115 118 ->setUser($request->getUser()) 116 119 ->appendChild( 117 120 id(new AphrontFormTextControl()) 118 - ->setLabel('Email') 121 + ->setLabel(pht('Email')) 119 122 ->setName('email') 120 123 ->setValue($request->getStr('email')) 121 124 ->setError($e_email)) 122 125 ->appendChild( 123 126 id(new AphrontFormRecaptchaControl()) 124 - ->setLabel('Captcha') 127 + ->setLabel(pht('Captcha')) 125 128 ->setError($e_captcha)) 126 129 ->appendChild( 127 130 id(new AphrontFormSubmitControl()) 128 - ->setValue('Send Email')); 131 + ->setValue(pht('Send Email'))); 129 132 130 133 $error_view = null; 131 134 if ($errors) { 132 135 $error_view = new AphrontErrorView(); 133 - $error_view->setTitle('Login Error'); 136 + $error_view->setTitle(pht('Login Error')); 134 137 $error_view->setErrors($errors); 135 138 } 136 139 137 140 138 141 $panel = new AphrontPanelView(); 139 142 $panel->setWidth(AphrontPanelView::WIDTH_FORM); 140 - $panel->appendChild('<h1>Forgot Password / Email Login</h1>'); 143 + $panel->appendChild(' 144 + <h1>'.pht('Forgot Password / Email Login').'</h1>'); 141 145 $panel->appendChild($email_auth); 146 + $panel->setNoBackground(); 142 147 143 - return $this->buildStandardPageResponse( 148 + return $this->buildApplicationPage( 144 149 array( 145 150 $error_view, 146 151 $panel, 147 152 ), 148 153 array( 149 - 'title' => 'Create New Account', 154 + 'title' => pht('Forgot Password'), 155 + 'device' => true, 150 156 )); 151 157 } 152 158
+7 -5
src/applications/auth/controller/PhabricatorEmailTokenController.php
··· 49 49 !$target_user->validateEmailToken($target_email, $token)) { 50 50 51 51 $view = new AphrontRequestFailureView(); 52 - $view->setHeader('Unable to Login'); 52 + $view->setHeader(pht('Unable to Login')); 53 53 $view->appendChild( 54 - '<p>The authentication information in the link you clicked is '. 54 + '<p>'.pht('The authentication information in the link you clicked is '. 55 55 'invalid or out of date. Make sure you are copy-and-pasting the '. 56 56 'entire link into your browser. You can try again, or request '. 57 - 'a new email.</p>'); 57 + 'a new email.').'</p>'); 58 58 $view->appendChild( 59 59 '<div class="aphront-failure-continue">'. 60 - '<a class="button" href="/login/email/">Send Another Email</a>'. 60 + '<a class="button" href="/login/email/">'. 61 + pht('Send Another Email'). 62 + '</a>'. 61 63 '</div>'); 62 64 63 65 return $this->buildStandardPageResponse( 64 66 $view, 65 67 array( 66 - 'title' => 'Login Failure', 68 + 'title' => pht('Login Failure'), 67 69 )); 68 70 } 69 71
+16 -13
src/applications/auth/controller/PhabricatorLDAPLoginController.php
··· 42 42 $existing_ldap) { 43 43 $dialog = new AphrontDialogView(); 44 44 $dialog->setUser($current_user); 45 - $dialog->setTitle('Already Linked to Another Account'); 45 + $dialog->setTitle(pht('Already Linked to Another Account')); 46 46 $dialog->appendChild( 47 - '<p>The LDAP account you just authorized is already linked to '. 48 - 'another Phabricator account. Before you can link it to a '. 49 - 'different LDAP account, you must unlink the old account.</p>' 47 + '<p>'.pht('The LDAP account you just authorized is already '. 48 + 'linked toanother Phabricator account. Before you can link it '. 49 + 'to a different LDAP account, you must unlink the old '. 50 + 'account.').'</p>' 50 51 ); 51 52 $dialog->addCancelButton('/settings/panel/ldap/'); 52 53 ··· 60 61 if (!$request->isDialogFormPost()) { 61 62 $dialog = new AphrontDialogView(); 62 63 $dialog->setUser($current_user); 63 - $dialog->setTitle('Link LDAP Account'); 64 + $dialog->setTitle(pht('Link LDAP Account')); 64 65 $dialog->appendChild( 65 - '<p>Link your LDAP account to your Phabricator account?</p>'); 66 + '<p>'. 67 + pht('Link your LDAP account to your Phabricator account?'). 68 + '</p>'); 66 69 $dialog->addHiddenInput('username', $request->getStr('username')); 67 70 $dialog->addHiddenInput('password', $request->getStr('password')); 68 - $dialog->addSubmitButton('Link Accounts'); 71 + $dialog->addSubmitButton(pht('Link Accounts')); 69 72 $dialog->addCancelButton('/settings/panel/ldap/'); 70 73 71 74 return id(new AphrontDialogResponse())->setDialog($dialog); ··· 116 119 ->setAction('/ldap/login/') 117 120 ->appendChild( 118 121 id(new AphrontFormTextControl()) 119 - ->setLabel('LDAP username') 122 + ->setLabel(pht('LDAP username')) 120 123 ->setName('username') 121 124 ->setValue($ldap_username)) 122 125 ->appendChild( 123 126 id(new AphrontFormPasswordControl()) 124 - ->setLabel('Password') 127 + ->setLabel(pht('Password')) 125 128 ->setName('password')); 126 129 127 130 $ldap_form 128 131 ->appendChild( 129 132 id(new AphrontFormSubmitControl()) 130 - ->setValue('Login')); 133 + ->setValue(pht('Login'))); 131 134 132 135 $panel = new AphrontPanelView(); 133 136 $panel->setWidth(AphrontPanelView::WIDTH_FORM); 134 - $panel->appendChild('<h1>LDAP login</h1>'); 137 + $panel->appendChild('<h1>'.pht('LDAP login').'</h1>'); 135 138 $panel->appendChild($ldap_form); 136 139 137 140 if (isset($errors) && count($errors) > 0) { 138 141 $error_view = new AphrontErrorView(); 139 - $error_view->setTitle('Login Failed'); 142 + $error_view->setTitle(pht('Login Failed')); 140 143 $error_view->setErrors($errors); 141 144 } 142 145 ··· 146 149 $panel, 147 150 ), 148 151 array( 149 - 'title' => 'Login', 152 + 'title' => pht('Login'), 150 153 )); 151 154 } 152 155
+20 -20
src/applications/auth/controller/PhabricatorLDAPRegistrationController.php
··· 63 63 $user->setUsername($request->getStr('username')); 64 64 $username = $user->getUsername(); 65 65 if (!strlen($user->getUsername())) { 66 - $e_username = 'Required'; 67 - $errors[] = 'Username is required.'; 66 + $e_username = pht('Required'); 67 + $errors[] = pht('Username is required.'); 68 68 } else if (!PhabricatorUser::validateUsername($username)) { 69 - $e_username = 'Invalid'; 69 + $e_username = pht('Invalid'); 70 70 $errors[] = PhabricatorUser::describeValidUsername(); 71 71 } else { 72 72 $e_username = null; ··· 75 75 if (!$new_email) { 76 76 $new_email = trim($request->getStr('email')); 77 77 if (!$new_email) { 78 - $e_email = 'Required'; 79 - $errors[] = 'Email is required.'; 78 + $e_email = pht('Required'); 79 + $errors[] = pht('Email is required.'); 80 80 } else { 81 81 $e_email = null; 82 82 } ··· 84 84 85 85 if ($new_email) { 86 86 if (!PhabricatorUserEmail::isAllowedAddress($new_email)) { 87 - $e_email = 'Invalid'; 87 + $e_email = pht('Invalid'); 88 88 $errors[] = PhabricatorUserEmail::describeAllowedAddresses(); 89 89 } 90 90 } ··· 92 92 if (!strlen($user->getRealName())) { 93 93 $user->setRealName($request->getStr('realname')); 94 94 if (!strlen($user->getRealName())) { 95 - $e_realname = 'Required'; 96 - $errors[] = 'Real name is required.'; 95 + $e_realname = pht('Required'); 96 + $errors[] = pht('Real name is required.'); 97 97 } else { 98 98 $e_realname = null; 99 99 } ··· 137 137 $new_email); 138 138 139 139 if ($same_username) { 140 - $e_username = 'Duplicate'; 141 - $errors[] = 'That username or email is not unique.'; 140 + $e_username = pht('Duplicate'); 141 + $errors[] = pht('That username or email is not unique.'); 142 142 } else if ($same_email) { 143 - $e_email = 'Duplicate'; 144 - $errors[] = 'That email is not unique.'; 143 + $e_email = pht('Duplicate'); 144 + $errors[] = pht('That email is not unique.'); 145 145 } else { 146 146 throw $exception; 147 147 } ··· 153 153 $error_view = null; 154 154 if ($errors) { 155 155 $error_view = new AphrontErrorView(); 156 - $error_view->setTitle('Registration Failed'); 156 + $error_view->setTitle(pht('Registration Failed')); 157 157 $error_view->setErrors($errors); 158 158 } 159 159 ··· 169 169 ->setAction($action_path) 170 170 ->appendChild( 171 171 id(new AphrontFormTextControl()) 172 - ->setLabel('Username') 172 + ->setLabel(pht('Username')) 173 173 ->setName('username') 174 174 ->setValue($user->getUsername()) 175 175 ->setError($e_username)); 176 176 177 177 $form->appendChild( 178 178 id(new AphrontFormPasswordControl()) 179 - ->setLabel('Password') 179 + ->setLabel(pht('Password')) 180 180 ->setName('password')); 181 181 182 182 if ($show_email_input) { 183 183 $form->appendChild( 184 184 id(new AphrontFormTextControl()) 185 - ->setLabel('Email') 185 + ->setLabel(pht('Email')) 186 186 ->setName('email') 187 187 ->setValue($request->getStr('email')) 188 188 ->setError($e_email)); ··· 191 191 if ($provider->retrieveUserRealName() === null) { 192 192 $form->appendChild( 193 193 id(new AphrontFormTextControl()) 194 - ->setLabel('Real Name') 194 + ->setLabel(pht('Real Name')) 195 195 ->setName('realname') 196 196 ->setValue($request->getStr('realname')) 197 197 ->setError($e_realname)); ··· 200 200 $form 201 201 ->appendChild( 202 202 id(new AphrontFormSubmitControl()) 203 - ->setValue('Create Account')); 203 + ->setValue(pht('Create Account'))); 204 204 205 205 $panel = new AphrontPanelView(); 206 - $panel->setHeader('Create New Account'); 206 + $panel->setHeader(pht('Create New Account')); 207 207 $panel->setWidth(AphrontPanelView::WIDTH_FORM); 208 208 $panel->appendChild($form); 209 209 ··· 213 213 $panel, 214 214 ), 215 215 array( 216 - 'title' => 'Create New Account', 216 + 'title' => pht('Create New Account'), 217 217 )); 218 218 } 219 219
+4 -4
src/applications/auth/controller/PhabricatorLDAPUnlinkController.php
··· 17 17 if (!$request->isDialogFormPost()) { 18 18 $dialog = new AphrontDialogView(); 19 19 $dialog->setUser($user); 20 - $dialog->setTitle('Really unlink account?'); 20 + $dialog->setTitle(pht('Really unlink account?')); 21 21 $dialog->appendChild( 22 - '<p><strong>You will not be able to login</strong> using this account '. 23 - 'once you unlink it. Continue?</p>'); 24 - $dialog->addSubmitButton('Unlink Account'); 22 + '<p>'.pht('You will not be able to login using this account '. 23 + 'once you unlink it. Continue?').'</p>'); 24 + $dialog->addSubmitButton(pht('Unlink Account')); 25 25 $dialog->addCancelButton('/settings/panel/ldap/'); 26 26 27 27 return id(new AphrontDialogResponse())->setDialog($dialog);
+38 -33
src/applications/auth/controller/PhabricatorLoginController.php
··· 28 28 29 29 $dialog = new AphrontDialogView(); 30 30 $dialog->setUser($user); 31 - $dialog->setTitle('Login Required'); 32 - $dialog->appendChild('<p>You must login to continue.</p>'); 33 - $dialog->addSubmitButton('Login'); 34 - $dialog->addCancelButton('/', 'Cancel'); 31 + $dialog->setTitle(pht('Login Required')); 32 + $dialog->appendChild('<p>'.pht('You must login to continue.').'</p>'); 33 + $dialog->addSubmitButton(pht('Login')); 34 + $dialog->addCancelButton('/', pht('Cancel')); 35 35 36 36 return id(new AphrontDialogResponse())->setDialog($dialog); 37 37 } ··· 62 62 $request->clearCookie('phsid'); 63 63 64 64 $error_view = new AphrontErrorView(); 65 - $error_view->setTitle('Invalid Session'); 65 + $error_view->setTitle(pht('Invalid Session')); 66 66 $error_view->setErrors(array( 67 - "Your login session is invalid. Try logging in again. If that ". 68 - "doesn't work, clear your browser cookies." 67 + pht("Your login session is invalid. Try logging in again. If that ". 68 + "doesn't work, clear your browser cookies.") 69 69 )); 70 70 } 71 71 ··· 100 100 $require_captcha = true; 101 101 if (!AphrontFormRecaptchaControl::processCaptcha($request)) { 102 102 if (AphrontFormRecaptchaControl::hasCaptchaResponse($request)) { 103 - $e_captcha = 'Invalid'; 104 - $errors[] = 'CAPTCHA was not entered correctly.'; 103 + $e_captcha = pht('Invalid'); 104 + $errors[] = pht('CAPTCHA was not entered correctly.'); 105 105 } else { 106 - $e_captcha = 'Required'; 107 - $errors[] = 'Too many login failures recently. You must '. 108 - 'submit a CAPTCHA with your login request.'; 106 + $e_captcha = pht('Required'); 107 + $errors[] = pht('Too many login failures recently. You must '. 108 + 'submit a CAPTCHA with your login request.'); 109 109 } 110 110 } 111 111 } ··· 128 128 $envelope = new PhutilOpaqueEnvelope($request->getStr('password')); 129 129 130 130 if (!$user || !$user->comparePassword($envelope)) { 131 - $errors[] = 'Bad username/password.'; 131 + $errors[] = pht('Bad username/password.'); 132 132 } 133 133 } 134 134 ··· 160 160 161 161 if ($errors) { 162 162 $error_view = new AphrontErrorView(); 163 - $error_view->setTitle('Login Failed'); 163 + $error_view->setTitle(pht('Login Failed')); 164 164 $error_view->setErrors($errors); 165 165 } 166 166 ··· 170 170 ->setAction('/login/') 171 171 ->appendChild( 172 172 id(new AphrontFormTextControl()) 173 - ->setLabel('Username/Email') 173 + ->setLabel(pht('Username/Email')) 174 174 ->setName('username_or_email') 175 175 ->setValue($username_or_email)) 176 176 ->appendChild( 177 177 id(new AphrontFormPasswordControl()) 178 - ->setLabel('Password') 178 + ->setLabel(pht('Password')) 179 179 ->setName('password') 180 180 ->setCaption( 181 181 '<a href="/login/email/">'. 182 - 'Forgot your password? / Email Login</a>')); 182 + pht('Forgot your password? / Email Login').'</a>')); 183 183 184 184 if ($require_captcha) { 185 185 $form->appendChild( ··· 190 190 $form 191 191 ->appendChild( 192 192 id(new AphrontFormSubmitControl()) 193 - ->setValue('Login')); 193 + ->setValue(pht('Login'))); 194 194 195 195 196 196 // $panel->setCreateButton('Register New Account', '/login/register/'); ··· 206 206 ->setAction('/ldap/login/') 207 207 ->appendChild( 208 208 id(new AphrontFormTextControl()) 209 - ->setLabel('LDAP username') 209 + ->setLabel(pht('LDAP username')) 210 210 ->setName('username') 211 211 ->setValue($username_or_email)) 212 212 ->appendChild( 213 213 id(new AphrontFormPasswordControl()) 214 - ->setLabel('Password') 214 + ->setLabel(pht('Password')) 215 215 ->setName('password')); 216 216 217 217 $ldap_form 218 218 ->appendChild( 219 219 id(new AphrontFormSubmitControl()) 220 - ->setValue('Login')); 220 + ->setValue(pht('Login'))); 221 221 222 222 $forms['LDAP Login'] = $ldap_form; 223 223 } ··· 243 243 // CSRF for logged-out users is vaugely tricky. 244 244 245 245 if ($provider->isProviderRegistrationEnabled()) { 246 - $title = "Login or Register with {$provider_name}"; 247 - $body = 'Login or register for Phabricator using your '. 248 - phutil_escape_html($provider_name).' account.'; 249 - $button = "Login or Register with {$provider_name}"; 246 + $title = pht("Login or Register with %s", 247 + phutil_escape_html($provider_name)); 248 + $body = pht('Login or register for Phabricator using your %s account.', 249 + phutil_escape_html($provider_name)); 250 + $button = pht("Login or Register with %s", 251 + phutil_escape_html($provider_name)); 250 252 } else { 251 - $title = "Login with {$provider_name}"; 252 - $body = 'Login to your existing Phabricator account using your '. 253 - phutil_escape_html($provider_name).' account.<br /><br />'. 254 - '<strong>You can not use '. 255 - phutil_escape_html($provider_name).' to register a new '. 256 - 'account.</strong>'; 257 - $button = "Login with {$provider_name}"; 253 + $title = pht("Login with %s", 254 + phutil_escape_html($provider_name)); 255 + $body = pht('Login to your existing Phabricator account using your '. 256 + '%s account.', phutil_escape_html($provider_name)). 257 + '<br /><br />'. 258 + '<strong>'. 259 + pht('You can not use %s to register a new account.', 260 + phutil_escape_html($provider_name)). 261 + '</strong>'; 262 + $button = pht("Log in with %s", phutil_escape_html($provider_name)); 258 263 } 259 264 260 265 $auth_form = new AphrontFormView(); ··· 298 303 $panel, 299 304 ), 300 305 array( 301 - 'title' => 'Login', 306 + 'title' => pht('Login'), 302 307 'device' => true 303 308 )); 304 309 }
+5 -5
src/applications/auth/controller/PhabricatorLoginValidateController.php
··· 48 48 $list = '<ul>'.implode("\n", $list).'</ul>'; 49 49 50 50 $view = new AphrontRequestFailureView(); 51 - $view->setHeader('Login Failed'); 51 + $view->setHeader(pht('Login Failed')); 52 52 $view->appendChild( 53 - '<p>Login failed:</p>'. 53 + '<p>'.pht('Login failed:').'</p>'. 54 54 $list. 55 - '<p><strong>Clear your cookies</strong> and try again.</p>'); 55 + '<p>'.pht('<strong>Clear your cookies</strong> and try again.').'</p>'); 56 56 $view->appendChild( 57 57 '<div class="aphront-failure-continue">'. 58 - '<a class="button" href="/login/">Try Again</a>'. 58 + '<a class="button" href="/login/">'.pht('Try Again').'</a>'. 59 59 '</div>'); 60 60 return $this->buildStandardPageResponse( 61 61 $view, 62 62 array( 63 - 'title' => 'Login Failed', 63 + 'title' => pht('Login Failed'), 64 64 )); 65 65 } 66 66
+3 -3
src/applications/auth/controller/PhabricatorLogoutController.php
··· 45 45 if ($user->getPHID()) { 46 46 $dialog = id(new AphrontDialogView()) 47 47 ->setUser($user) 48 - ->setTitle('Log out of Phabricator?') 49 - ->appendChild('<p>Are you sure you want to log out?</p>') 50 - ->addSubmitButton('Log Out') 48 + ->setTitle(pht('Log out of Phabricator?')) 49 + ->appendChild('<p>'.pht('Are you sure you want to log out?').'</p>') 50 + ->addSubmitButton(pht('Logout')) 51 51 ->addCancelButton('/'); 52 52 53 53 return id(new AphrontDialogResponse())->setDialog($dialog);
+17 -12
src/applications/auth/controller/PhabricatorMustVerifyEmailController.php
··· 30 30 $email->sendVerificationEmail($user); 31 31 $sent = new AphrontErrorView(); 32 32 $sent->setSeverity(AphrontErrorView::SEVERITY_NOTICE); 33 - $sent->setTitle('Email Sent'); 34 - $sent->appendChild( 35 - '<p>Another verification email was sent to <strong>'. 36 - phutil_escape_html($email_address).'</strong>.</p>'); 33 + $sent->setTitle(pht('Email Sent')); 34 + $sent->appendChild('<p>'. 35 + pht('Another verification email was sent to <strong>%s</strong>.', 36 + phutil_escape_html($email_address)).'</p>'); 37 37 } 38 38 39 39 $error_view = new AphrontRequestFailureView(); 40 - $error_view->setHeader('Check Your Email'); 40 + $error_view->setHeader(pht('Check Your Email')); 41 41 $error_view->appendChild( 42 - '<p>You must verify your email address to login. You should have a new '. 42 + '<p>'. 43 + pht('You must verify your email address to login. You should have a new '. 43 44 'email message from Phabricator with verification instructions in your '. 44 - 'inbox (<strong>'.phutil_escape_html($email_address).'</strong>).</p>'); 45 + 'inbox (<strong>%s</strong>).', phutil_escape_html($email_address)). 46 + '</p>'); 45 47 $error_view->appendChild( 46 - '<p>If you did not receive an email, you can click the button below '. 47 - 'to try sending another one.</p>'); 48 + '<p>'. 49 + pht('If you did not receive an email, you can click the button below '. 50 + 'to try sending another one.'). 51 + '</p>'); 48 52 $error_view->appendChild( 49 53 '<div class="aphront-failure-continue">'. 50 54 phabricator_render_form( ··· 57 61 'button', 58 62 array( 59 63 ), 60 - 'Send Another Email')). 64 + pht('Send Another Email'))). 61 65 '</div>'); 62 66 63 67 64 - return $this->buildStandardPageResponse( 68 + return $this->buildApplicationPage( 65 69 array( 66 70 $sent, 67 71 $error_view, 68 72 ), 69 73 array( 70 - 'title' => 'Must Verify Email', 74 + 'title' => pht('Must Verify Email'), 75 + 'device' => true 71 76 )); 72 77 } 73 78
+32 -31
src/applications/auth/controller/PhabricatorOAuthLoginController.php
··· 68 68 if ($oauth_info->getUserID() != $current_user->getID()) { 69 69 $dialog = new AphrontDialogView(); 70 70 $dialog->setUser($current_user); 71 - $dialog->setTitle('Already Linked to Another Account'); 72 - $dialog->appendChild( 73 - hsprintf( 74 - '<p>The %s account you just authorized is already linked to '. 71 + $dialog->setTitle(pht('Already Linked to Another Account')); 72 + $dialog->appendChild('<p>'. 73 + pht( 74 + 'The %s account you just authorized is already linked to '. 75 75 'another Phabricator account. Before you can associate your %s '. 76 76 'account with this Phabriactor account, you must unlink it from '. 77 77 'the Phabricator account it is currently linked to.</p>', 78 - $provider_name, 79 - $provider_name)); 78 + phutil_escape_html($provider_name), 79 + phutil_escape_html($provider_name))).'</p>'; 80 80 $dialog->addCancelButton($provider->getSettingsPanelURI()); 81 81 82 82 return id(new AphrontDialogResponse())->setDialog($dialog); ··· 95 95 if ($existing_oauth) { 96 96 $dialog = new AphrontDialogView(); 97 97 $dialog->setUser($current_user); 98 - $dialog->setTitle('Already Linked to an Account From This Provider'); 99 - $dialog->appendChild( 100 - hsprintf( 101 - '<p>The account you are logged in with is already linked to a %s '. 98 + $dialog->setTitle( 99 + pht('Already Linked to an Account From This Provider')); 100 + $dialog->appendChild('<p>'. 101 + pht( 102 + 'The account you are logged in with is already linked to a %s '. 102 103 'account. Before you can link it to a different %s account, you '. 103 104 'must unlink the old account.</p>', 104 - $provider_name, 105 - $provider_name)); 105 + phutil_escape_html($provider_name), 106 + phutil_escape_html($provider_name))).'</p>'; 106 107 $dialog->addCancelButton($provider->getSettingsPanelURI()); 107 108 return id(new AphrontDialogResponse())->setDialog($dialog); 108 109 } ··· 110 111 if (!$request->isDialogFormPost()) { 111 112 $dialog = new AphrontDialogView(); 112 113 $dialog->setUser($current_user); 113 - $dialog->setTitle('Link '.$provider_name.' Account'); 114 + $dialog->setTitle(pht('Link %s Account', $provider_name)); 114 115 $dialog->appendChild( 115 - hsprintf( 116 + pht( 116 117 '<p>Link your %s account to your Phabricator account?</p>', 117 - $provider_name)); 118 + phutil_escape_html($provider_name))); 118 119 $dialog->addHiddenInput('confirm_token', $provider->getAccessToken()); 119 120 $dialog->addHiddenInput('expires', $oauth_info->getTokenExpires()); 120 121 $dialog->addHiddenInput('state', $this->oauthState); ··· 168 169 if ($known_email) { 169 170 $dialog = new AphrontDialogView(); 170 171 $dialog->setUser($current_user); 171 - $dialog->setTitle('Already Linked to Another Account'); 172 - $dialog->appendChild( 173 - hsprintf( 174 - '<p>The %s account you just authorized has an email address which '. 172 + $dialog->setTitle(pht('Already Linked to Another Account')); 173 + $dialog->appendChild('<p>'. 174 + pht( 175 + 'The %s account you just authorized has an email address which '. 175 176 'is already in use by another Phabricator account. To link the '. 176 177 'accounts, log in to your Phabricator account and then go to '. 177 - 'Settings.</p>', 178 - $provider_name)); 178 + 'Settings.', 179 + phutil_escape_html($provider_name))).'</p>'; 179 180 180 181 $user = id(new PhabricatorUser()) 181 182 ->loadOneWhere('phid = %s', $known_email->getUserPHID()); ··· 189 190 ->getProviderName(); 190 191 } 191 192 $dialog->appendChild( 192 - hsprintf( 193 + pht( 193 194 '<p>The account is associated with: %s.</p>', 194 - implode(', ', $providers))); 195 + implode(', ', phutil_escape_html($providers)))); 195 196 } 196 197 197 198 $dialog->addCancelButton('/login/'); ··· 203 204 if (!$provider->isProviderRegistrationEnabled()) { 204 205 $dialog = new AphrontDialogView(); 205 206 $dialog->setUser($current_user); 206 - $dialog->setTitle('No Account Registration With '.$provider_name); 207 - $dialog->appendChild( 208 - hsprintf( 209 - '<p>You can not register a new account using %s; you can only use '. 207 + $dialog->setTitle(pht('No Account Registration with %s', $provider_name)); 208 + $dialog->appendChild('<p>'. 209 + pht( 210 + 'You can not register a new account using %s; you can only use '. 210 211 'your %s account to log into an existing Phabricator account which '. 211 - 'you have registered through other means.</p>', 212 - $provider_name, 213 - $provider_name)); 212 + 'you have registered through other means.', 213 + phutil_escape_html($provider_name), 214 + phutil_escape_html($provider_name))).'</p>'; 214 215 $dialog->addCancelButton('/login/'); 215 216 216 217 return id(new AphrontDialogResponse())->setDialog($dialog); ··· 242 243 return $this->buildStandardPageResponse( 243 244 $view, 244 245 array( 245 - 'title' => $provider_name.' Auth Failed', 246 + 'title' => pht('Auth Failed'), 246 247 )); 247 248 } 248 249
+5 -5
src/applications/auth/controller/PhabricatorOAuthUnlinkController.php
··· 16 16 17 17 if ($provider->isProviderLinkPermanent()) { 18 18 throw new Exception( 19 - "You may not unlink accounts from this OAuth provider."); 19 + pht("You may not unlink accounts from this OAuth provider.")); 20 20 } 21 21 22 22 $provider_key = $provider->getProviderKey(); ··· 33 33 if (!$request->isDialogFormPost()) { 34 34 $dialog = new AphrontDialogView(); 35 35 $dialog->setUser($user); 36 - $dialog->setTitle('Really unlink account?'); 36 + $dialog->setTitle(pht('Really unlink account?')); 37 37 $dialog->appendChild( 38 - '<p><strong>You will not be able to login</strong> using this account '. 39 - 'once you unlink it. Continue?</p>'); 40 - $dialog->addSubmitButton('Unlink Account'); 38 + '<p>'.pht('You will not be able to login using this account '. 39 + 'once you unlink it. Continue?').'</p>'); 40 + $dialog->addSubmitButton(pht('Unlink Account')); 41 41 $dialog->addCancelButton($provider->getSettingsPanelURI()); 42 42 43 43 return id(new AphrontDialogResponse())->setDialog($dialog);
+22 -20
src/applications/auth/controller/oauthregistration/PhabricatorOAuthDefaultRegistrationController.php
··· 45 45 $user->setUsername($request->getStr('username')); 46 46 $username = $user->getUsername(); 47 47 if (!strlen($user->getUsername())) { 48 - $e_username = 'Required'; 49 - $errors[] = 'Username is required.'; 48 + $e_username = pht('Required'); 49 + $errors[] = pht('Username is required.'); 50 50 } else if (!PhabricatorUser::validateUsername($username)) { 51 - $e_username = 'Invalid'; 51 + $e_username = pht('Invalid'); 52 52 $errors[] = PhabricatorUser::describeValidUsername(); 53 53 } else { 54 54 $e_username = null; ··· 57 57 if (!$new_email) { 58 58 $new_email = trim($request->getStr('email')); 59 59 if (!$new_email) { 60 - $e_email = 'Required'; 61 - $errors[] = 'Email is required.'; 60 + $e_email = pht('Required'); 61 + $errors[] = pht('Email is required.'); 62 62 } else { 63 63 $e_email = null; 64 64 } ··· 67 67 if ($new_email) { 68 68 $email_ok = PhabricatorUserEmail::isAllowedAddress($new_email); 69 69 if (!$email_ok) { 70 - $e_email = 'Invalid'; 70 + $e_email = pht('Invalid'); 71 71 $errors[] = PhabricatorUserEmail::describeAllowedAddresses(); 72 72 } 73 73 } ··· 75 75 if (!strlen($user->getRealName())) { 76 76 $user->setRealName($request->getStr('realname')); 77 77 if (!strlen($user->getRealName())) { 78 - $e_realname = 'Required'; 79 - $errors[] = 'Real name is required.'; 78 + $e_realname = pht('Required'); 79 + $errors[] = pht('Real name is required.'); 80 80 } else { 81 81 $e_realname = null; 82 82 } ··· 142 142 $new_email); 143 143 144 144 if ($same_username) { 145 - $e_username = 'Duplicate'; 146 - $errors[] = 'That username or email is not unique.'; 145 + $e_username = pht('Duplicate'); 146 + $errors[] = pht('That username or email is not unique.'); 147 147 } else if ($same_email) { 148 - $e_email = 'Duplicate'; 149 - $errors[] = 'That email is not unique.'; 148 + $e_email = pht('Duplicate'); 149 + $errors[] = pht('That email is not unique.'); 150 150 } else { 151 151 throw $exception; 152 152 } ··· 157 157 $error_view = null; 158 158 if ($errors) { 159 159 $error_view = new AphrontErrorView(); 160 - $error_view->setTitle('Registration Failed'); 160 + $error_view->setTitle(pht('Registration Failed')); 161 161 $error_view->setErrors($errors); 162 162 } 163 163 ··· 176 176 ->setAction($action_path) 177 177 ->appendChild( 178 178 id(new AphrontFormTextControl()) 179 - ->setLabel('Username') 179 + ->setLabel(pht('Username')) 180 180 ->setName('username') 181 181 ->setValue($user->getUsername()) 182 182 ->setError($e_username)); ··· 184 184 if ($show_email_input) { 185 185 $form->appendChild( 186 186 id(new AphrontFormTextControl()) 187 - ->setLabel('Email') 187 + ->setLabel(pht('Email')) 188 188 ->setName('email') 189 189 ->setValue($request->getStr('email')) 190 190 ->setCaption(PhabricatorUserEmail::describeAllowedAddresses()) ··· 194 194 if ($provider->retrieveUserRealName() === null) { 195 195 $form->appendChild( 196 196 id(new AphrontFormTextControl()) 197 - ->setLabel('Real Name') 197 + ->setLabel(pht('Real Name')) 198 198 ->setName('realname') 199 199 ->setValue($request->getStr('realname')) 200 200 ->setError($e_realname)); ··· 203 203 $form 204 204 ->appendChild( 205 205 id(new AphrontFormSubmitControl()) 206 - ->setValue('Create Account')); 206 + ->setValue(pht('Create Account'))); 207 207 208 208 $panel = new AphrontPanelView(); 209 - $panel->setHeader('Create New Account'); 209 + $panel->setHeader(pht('Create New Account')); 210 210 $panel->setWidth(AphrontPanelView::WIDTH_FORM); 211 211 $panel->appendChild($form); 212 + $panel->setNoBackground(); 212 213 213 - return $this->buildStandardPageResponse( 214 + return $this->buildApplicationPage( 214 215 array( 215 216 $error_view, 216 217 $panel, 217 218 ), 218 219 array( 219 - 'title' => 'Create New Account', 220 + 'title' => pht('Create New Account'), 221 + 'device' => true 220 222 )); 221 223 } 222 224
+2 -2
src/applications/auth/view/PhabricatorOAuthFailureView.php
··· 29 29 $diagnose = null; 30 30 31 31 $view = new AphrontRequestFailureView(); 32 - $view->setHeader($provider_name.' Auth Failed'); 32 + $view->setHeader(pht('%s Auth Failed', $provider_name)); 33 33 if ($this->request) { 34 34 $view->appendChild( 35 35 hsprintf( ··· 79 79 $view->appendChild( 80 80 '<div class="aphront-failure-continue">'. 81 81 $diagnose. 82 - '<a href="/login/" class="button">Continue</a>'. 82 + '<a href="/login/" class="button">'.pht('Continue').'</a>'. 83 83 '</div>'); 84 84 85 85 return $view->render();
-1
src/applications/config/controller/PhabricatorConfigAllController.php
··· 84 84 $nav->appendChild($panel); 85 85 86 86 87 - 88 87 return $this->buildApplicationPage( 89 88 $nav, 90 89 array(
+1
src/applications/config/controller/PhabricatorConfigGroupController.php
··· 72 72 $engine->process(); 73 73 74 74 $list = new PhabricatorObjectItemListView(); 75 + $list->setStackable(); 75 76 foreach ($options as $option) { 76 77 $summary = $engine->getOutput($option, 'summary'); 77 78
+1
src/applications/config/controller/PhabricatorConfigIssueListController.php
··· 48 48 private function buildIssueList(array $issues) { 49 49 assert_instances_of($issues, 'PhabricatorSetupIssue'); 50 50 $list = new PhabricatorObjectItemListView(); 51 + $list->setStackable(); 51 52 52 53 foreach ($issues as $issue) { 53 54 $href = $this->getApplicationURI('/issue/'.$issue->getIssueKey().'/');
+1
src/applications/config/controller/PhabricatorConfigListController.php
··· 46 46 assert_instances_of($groups, 'PhabricatorApplicationConfigOptions'); 47 47 48 48 $list = new PhabricatorObjectItemListView(); 49 + $list->setStackable(); 49 50 $groups = msort($groups, 'getName'); 50 51 foreach ($groups as $group) { 51 52 $item = id(new PhabricatorObjectItemView())
+7
src/applications/config/option/PhabricatorMetaMTAConfigOptions.php
··· 235 235 pht( 236 236 'Controls whether Phabricator sends email "From" users.')) 237 237 ->setDescription($send_as_user_desc), 238 + $this->newOption( 239 + 'metamta.reply-handler-domain', 240 + 'string', 241 + 'phabricator.example.com') 242 + ->setDescription(pht( 243 + 'Domain used for reply email addresses. Some applications can '. 244 + 'configure this domain.')), 238 245 $this->newOption('metamta.reply.show-hints', 'bool', true) 239 246 ->setBoolOptions( 240 247 array(
+24
src/applications/conpherence/config/ConpherenceConfigOptions.php
··· 1 + <?php 2 + 3 + final class ConpherenceConfigOptions 4 + extends PhabricatorApplicationConfigOptions { 5 + 6 + public function getName() { 7 + return pht('Copherence'); 8 + } 9 + 10 + public function getDescription() { 11 + return pht('Configure Conpherence messaging.'); 12 + } 13 + 14 + public function getOptions() { 15 + return array( 16 + $this->newOption( 17 + 'metamta.conpherence.subject-prefix', 18 + 'string', 19 + '[Conpherence]') 20 + ->setDescription(pht('Subject prefix for Conpherence mail.')), 21 + ); 22 + } 23 + 24 + }
+2 -3
src/applications/conpherence/controller/ConpherenceController.php
··· 65 65 } 66 66 67 67 $unread_status = ConpherenceParticipationStatus::BEHIND; 68 - $unread_participant_query = id(new ConpherenceParticipantQuery()) 69 - ->withParticipantPHIDs(array($user->getPHID())); 70 - $unread = $unread_participant_query 68 + $unread = id(new ConpherenceParticipantQuery()) 69 + ->withParticipantPHIDs(array($user->getPHID())) 71 70 ->withParticipationStatus($unread_status) 72 71 ->execute(); 73 72
-4
src/applications/conpherence/controller/ConpherenceListController.php
··· 41 41 } 42 42 $this->setSelectedConpherencePHID($conpherence->getPHID()); 43 43 44 - $read_status = ConpherenceParticipationStatus::UP_TO_DATE; 45 44 $participant = $conpherence->getParticipant($user->getPHID()); 46 - $write_guard = AphrontWriteGuard::beginScopedUnguardedWrites(); 47 - $participant->markUpToDate(); 48 - unset($write_guard); 49 45 $current_selection_epoch = $participant->getDateTouched(); 50 46 } 51 47
+5 -5
src/applications/conpherence/controller/ConpherenceNewController.php
··· 60 60 $xactions[] = id(new ConpherenceTransaction()) 61 61 ->setTransactionType(ConpherenceTransactionType::TYPE_PARTICIPANTS) 62 62 ->setNewValue(array('+' => $participants)); 63 + if ($files) { 64 + $xactions[] = id(new ConpherenceTransaction()) 65 + ->setTransactionType(ConpherenceTransactionType::TYPE_FILES) 66 + ->setNewValue(array('+' => mpull($files, 'getPHID'))); 67 + } 63 68 $xactions[] = id(new ConpherenceTransaction()) 64 69 ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT) 65 70 ->attachComment( ··· 67 72 ->setContent($message) 68 73 ->setConpherencePHID($conpherence->getPHID()) 69 74 ); 70 - if ($files) { 71 - $xactions[] = id(new ConpherenceTransaction()) 72 - ->setTransactionType(ConpherenceTransactionType::TYPE_FILES) 73 - ->setNewValue(array('+' => mpull($files, 'getPHID'))); 74 - } 75 75 $content_source = PhabricatorContentSource::newForSource( 76 76 PhabricatorContentSource::SOURCE_WEB, 77 77 array(
+42 -73
src/applications/conpherence/controller/ConpherenceUpdateController.php
··· 35 35 36 36 $updated = false; 37 37 $error_view = null; 38 - $e_image = null; 38 + $e_file = array(); 39 39 $errors = array(); 40 40 if ($request->isFormPost()) { 41 41 $content_source = PhabricatorContentSource::newForSource( ··· 43 43 array( 44 44 'ip' => $request->getRemoteAddr() 45 45 )); 46 + $editor = id(new ConpherenceEditor()) 47 + ->setContentSource($content_source) 48 + ->setActor($user); 46 49 47 50 $action = $request->getStr('action'); 48 51 switch ($action) { 49 52 case 'message': 50 53 $message = $request->getStr('text'); 51 - $files = array(); 52 - $file_phids = 53 - PhabricatorMarkupEngine::extractFilePHIDsFromEmbeddedFiles( 54 - array($message) 55 - ); 56 - if ($file_phids) { 57 - $files = id(new PhabricatorFileQuery()) 58 - ->setViewer($user) 59 - ->withPHIDs($file_phids) 60 - ->execute(); 61 - } 62 - $xactions = array(); 63 - if ($files) { 64 - $xactions[] = id(new ConpherenceTransaction()) 65 - ->setTransactionType(ConpherenceTransactionType::TYPE_FILES) 66 - ->setNewValue(array('+' => mpull($files, 'getPHID'))); 67 - } 68 - $xactions[] = id(new ConpherenceTransaction()) 69 - ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT) 70 - ->attachComment( 71 - id(new ConpherenceTransactionComment()) 72 - ->setContent($message) 73 - ->setConpherencePHID($conpherence->getPHID()) 74 - ); 54 + $xactions = $editor->generateTransactionsFromText( 55 + $conpherence, 56 + $message 57 + ); 75 58 $time = time(); 76 59 $conpherence->openTransaction(); 77 - $xactions = id(new ConpherenceEditor()) 78 - ->setContentSource($content_source) 79 - ->setActor($user) 80 - ->applyTransactions($conpherence, $xactions); 60 + $xactions = $editor->applyTransactions($conpherence, $xactions); 81 61 $last_xaction = end($xactions); 82 62 $xaction_phid = $last_xaction->getPHID(); 83 63 $behind = ConpherenceParticipationStatus::BEHIND; ··· 100 80 break; 101 81 case 'metadata': 102 82 $xactions = array(); 103 - $default_image = $request->getExists('default_image'); 104 - if ($default_image) { 105 - $image_phid = null; 106 - $xactions[] = id(new ConpherenceTransaction()) 107 - ->setTransactionType(ConpherenceTransactionType::TYPE_PICTURE) 108 - ->setNewValue($image_phid); 109 - } else if (!empty($_FILES['image'])) { 110 - $err = idx($_FILES['image'], 'error'); 111 - if ($err != UPLOAD_ERR_NO_FILE) { 112 - $file = PhabricatorFile::newFromPHPUpload( 113 - $_FILES['image'], 114 - array( 115 - 'authorPHID' => $user->getPHID(), 116 - )); 117 - $okay = $file->isTransformableImage(); 118 - if ($okay) { 119 - $xformer = new PhabricatorImageTransformer(); 120 - $xformed = $xformer->executeThumbTransform( 121 - $file, 122 - $x = 50, 123 - $y = 50); 124 - $image_phid = $xformed->getPHID(); 125 - $xactions[] = id(new ConpherenceTransaction()) 126 - ->setTransactionType(ConpherenceTransactionType::TYPE_PICTURE) 127 - ->setNewValue($image_phid); 128 - } else { 129 - $e_image = pht('Not Supported'); 130 - $errors[] = 131 - pht('This server only supports these image formats: %s.', 83 + $images = $request->getArr('image'); 84 + if ($images) { 85 + // just take the first one 86 + $file_phid = reset($images); 87 + $file = id(new PhabricatorFileQuery()) 88 + ->setViewer($user) 89 + ->withPHIDs(array($file_phid)) 90 + ->executeOne(); 91 + $okay = $file->isTransformableImage(); 92 + if ($okay) { 93 + $xformer = new PhabricatorImageTransformer(); 94 + $xformed = $xformer->executeThumbTransform( 95 + $file, 96 + $x = 50, 97 + $y = 50); 98 + $image_phid = $xformed->getPHID(); 99 + $xactions[] = id(new ConpherenceTransaction()) 100 + ->setTransactionType(ConpherenceTransactionType::TYPE_PICTURE) 101 + ->setNewValue($image_phid); 102 + } else { 103 + $e_file[] = $file; 104 + $errors[] = 105 + pht('This server only supports these image formats: %s.', 132 106 implode(', ', $supported_formats)); 133 - } 134 107 } 135 108 } 136 109 $title = $request->getStr('title'); ··· 142 115 143 116 if ($xactions) { 144 117 $conpherence->openTransaction(); 145 - $xactions = id(new ConpherenceEditor()) 146 - ->setContentSource($content_source) 147 - ->setActor($user) 118 + $xactions = $editor 148 119 ->setContinueOnNoEffect(true) 149 120 ->applyTransactions($conpherence, $xactions); 150 121 $updated = $conpherence->saveTransaction(); ··· 169 140 if ($errors) { 170 141 $error_view = id(new AphrontErrorView()) 171 142 ->setTitle(pht('Errors editing conpherence.')) 143 + ->setInsideDialogue(true) 172 144 ->setErrors($errors); 173 145 } 174 146 ··· 190 162 ) 191 163 ) 192 164 ->appendChild( 193 - id(new AphrontFormImageControl()) 165 + id(new AphrontFormDragAndDropUploadControl()) 194 166 ->setLabel(pht('Change Image')) 195 167 ->setName('image') 168 + ->setValue($e_file) 196 169 ->setCaption('Supported formats: '.implode(', ', $supported_formats)) 197 - ->setError($e_image) 198 - ); 170 + ); 199 171 200 - // TODO -- fix javelin so we can upload files from a workflow 201 172 require_celerity_resource('conpherence-update-css'); 202 - return $this->buildStandardPageResponse( 203 - array( 204 - $error_view, 173 + return id(new AphrontDialogResponse()) 174 + ->setDialog( 205 175 id(new AphrontDialogView()) 206 176 ->setUser($user) 207 177 ->setTitle(pht('Update Conpherence')) 208 178 ->setWidth(AphrontDialogView::WIDTH_FORM) 209 179 ->setSubmitURI($this->getApplicationURI('update/'.$conpherence_id.'/')) 210 180 ->addHiddenInput('action', 'metadata') 181 + ->appendChild($error_view) 211 182 ->appendChild($form) 212 183 ->addSubmitButton() 213 - ->addCancelButton($this->getApplicationURI($conpherence->getID().'/')), 214 - ), 215 - array() 216 - ); 184 + ->addCancelButton($this->getApplicationURI($conpherence->getID().'/')) 185 + ); 217 186 } 218 187 }
+9 -3
src/applications/conpherence/controller/ConpherenceViewController.php
··· 49 49 $this->setConpherence($conpherence); 50 50 51 51 $participant = $conpherence->getParticipant($user->getPHID()); 52 + $transactions = $conpherence->getTransactions(); 53 + $latest_transaction = end($transactions); 52 54 $write_guard = AphrontWriteGuard::beginScopedUnguardedWrites(); 53 - $participant->markUpToDate(); 55 + $participant->markUpToDate($latest_transaction); 54 56 unset($write_guard); 55 57 56 58 $header = $this->renderHeaderPaneContent(); ··· 69 71 $edit_href = $this->getApplicationURI('update/'.$conpherence->getID().'/'); 70 72 71 73 $header = 72 - phutil_render_tag( 74 + javelin_render_tag( 73 75 'a', 74 76 array( 75 77 'class' => 'edit', 76 78 'href' => $edit_href, 79 + 'sigil' => 'workflow', 77 80 ), 78 - pht('edit...') 81 + '' 79 82 ). 80 83 phutil_render_tag( 81 84 'div', ··· 112 115 113 116 $transactions = $conpherence->getTransactions(); 114 117 foreach ($transactions as $transaction) { 118 + if ($transaction->shouldHide()) { 119 + continue; 120 + } 115 121 $rendered_transactions[] = id(new ConpherenceTransactionView()) 116 122 ->setUser($user) 117 123 ->setConpherenceTransaction($transaction)
+50 -8
src/applications/conpherence/editor/ConpherenceEditor.php
··· 5 5 */ 6 6 final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor { 7 7 8 + public function generateTransactionsFromText( 9 + ConpherenceThread $conpherence, 10 + $text) { 11 + 12 + $files = array(); 13 + $file_phids = 14 + PhabricatorMarkupEngine::extractFilePHIDsFromEmbeddedFiles( 15 + array($text) 16 + ); 17 + // Since these are extracted from text, we might be re-including the 18 + // same file -- e.g. a mock under discussion. Filter files we 19 + // already have. 20 + $existing_file_phids = $conpherence->getFilePHIDs(); 21 + $file_phids = array_diff($file_phids, $existing_file_phids); 22 + if ($file_phids) { 23 + $files = id(new PhabricatorFileQuery()) 24 + ->setViewer($this->getActor()) 25 + ->withPHIDs($file_phids) 26 + ->execute(); 27 + } 28 + $xactions = array(); 29 + if ($files) { 30 + $xactions[] = id(new ConpherenceTransaction()) 31 + ->setTransactionType(ConpherenceTransactionType::TYPE_FILES) 32 + ->setNewValue(array('+' => mpull($files, 'getPHID'))); 33 + } 34 + $xactions[] = id(new ConpherenceTransaction()) 35 + ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT) 36 + ->attachComment( 37 + id(new ConpherenceTransactionComment()) 38 + ->setContent($text) 39 + ->setConpherencePHID($conpherence->getPHID()) 40 + ); 41 + return $xactions; 42 + } 43 + 8 44 public function getTransactionTypes() { 9 45 $types = parent::getTransactionTypes(); 10 46 ··· 120 156 } 121 157 122 158 protected function supportsMail() { 123 - return false; 159 + return true; 124 160 } 125 161 126 - /* TODO 127 - 128 162 protected function buildReplyHandler(PhabricatorLiskDAO $object) { 129 163 return id(new ConpherenceReplyHandler()) 164 + ->setActor($this->getActor()) 130 165 ->setMailReceiver($object); 131 166 } 132 167 133 168 protected function buildMailTemplate(PhabricatorLiskDAO $object) { 134 169 $id = $object->getID(); 135 170 $title = $object->getTitle(); 171 + if (!$title) { 172 + $title = pht( 173 + '%s sent you a message.', 174 + $this->getActor()->getUserName() 175 + ); 176 + } 136 177 $phid = $object->getPHID(); 137 - $original_name = $object->getOriginalName(); 138 178 139 179 return id(new PhabricatorMetaMTAMail()) 140 - ->setSubject("C{$id}: {$title}") 141 - ->addHeader('Thread-Topic', "C{$id}: {$phid}"); 180 + ->setSubject("E{$id}: {$title}") 181 + ->addHeader('Thread-Topic', "E{$id}: {$phid}"); 142 182 } 143 183 144 184 protected function getMailTo(PhabricatorLiskDAO $object) { 145 185 $participants = $object->getParticipants(); 146 - $participants[$this->requireActor()->getPHID()] = true; 147 186 return array_keys($participants); 187 + } 188 + 189 + protected function getMailCC(PhabricatorLiskDAO $object) { 190 + return array(); 148 191 } 149 192 150 193 protected function buildMailBody( ··· 162 205 protected function getMailSubjectPrefix() { 163 206 return PhabricatorEnv::getEnvConfig('metamta.conpherence.subject-prefix'); 164 207 } 165 - */ 166 208 167 209 protected function supportsFeed() { 168 210 return false;
+80
src/applications/conpherence/mail/ConpherenceReplyHandler.php
··· 1 + <?php 2 + 3 + /** 4 + * @group conpherence 5 + */ 6 + final class ConpherenceReplyHandler extends PhabricatorMailReplyHandler { 7 + 8 + public function validateMailReceiver($mail_receiver) { 9 + if (!($mail_receiver instanceof ConpherenceThread)) { 10 + throw new Exception("Mail receiver is not a ConpherenceThread!"); 11 + } 12 + } 13 + 14 + public function getPrivateReplyHandlerEmailAddress( 15 + PhabricatorObjectHandle $handle) { 16 + return $this->getDefaultPrivateReplyHandlerEmailAddress($handle, 'E'); 17 + } 18 + 19 + public function getPublicReplyHandlerEmailAddress() { 20 + return $this->getDefaultPublicReplyHandlerEmailAddress('E'); 21 + } 22 + 23 + public function getReplyHandlerInstructions() { 24 + if ($this->supportsReplies()) { 25 + return pht('Reply to comment and attach files.'); 26 + } else { 27 + return null; 28 + } 29 + } 30 + 31 + protected function receiveEmail(PhabricatorMetaMTAReceivedMail $mail) { 32 + $conpherence = $this->getMailReceiver(); 33 + $user = $this->getActor(); 34 + if (!$conpherence->getPHID()) { 35 + $conpherence 36 + ->attachParticipants(array()) 37 + ->attachFilePHIDs(array()); 38 + } else { 39 + $edge_type = PhabricatorEdgeConfig::TYPE_OBJECT_HAS_FILE; 40 + $file_phids = PhabricatorEdgeQuery::loadDestinationPHIDs( 41 + $conpherence->getPHID(), 42 + $edge_type 43 + ); 44 + $conpherence->attachFilePHIDs($file_phids); 45 + $participants = id(new ConpherenceParticipant()) 46 + ->loadAllWhere('conpherencePHID = %s', $conpherence->getPHID()); 47 + $participants = mpull($participants, null, 'getParticipantPHID'); 48 + $conpherence->attachParticipants($participants); 49 + } 50 + 51 + $content_source = PhabricatorContentSource::newForSource( 52 + PhabricatorContentSource::SOURCE_EMAIL, 53 + array( 54 + 'id' => $mail->getID(), 55 + )); 56 + 57 + $editor = id(new ConpherenceEditor()) 58 + ->setActor($user) 59 + ->setContentSource($content_source) 60 + ->setParentMessageID($mail->getMessageID()); 61 + 62 + $body = $mail->getCleanTextBody(); 63 + $body = trim($body); 64 + $file_phids = $mail->getAttachments(); 65 + $body = $this->enhanceBodyWithAttachments( 66 + $body, 67 + $file_phids, 68 + '{F%d}' 69 + ); 70 + $xactions = $editor->generateTransactionsFromText( 71 + $conpherence, 72 + $body 73 + ); 74 + 75 + $editor->applyTransactions($conpherence, $xactions); 76 + 77 + return null; 78 + } 79 + 80 + }
+2 -1
src/applications/conpherence/storage/ConpherenceParticipant.php
··· 11 11 protected $behindTransactionPHID; 12 12 protected $dateTouched; 13 13 14 - public function markUpToDate() { 14 + public function markUpToDate(ConpherenceTransaction $xaction) { 15 15 if (!$this->isUpToDate()) { 16 16 $this->setParticipationStatus(ConpherenceParticipationStatus::UP_TO_DATE); 17 + $this->setBehindTransactionPHID($xaction->getPHID()); 17 18 $this->save(); 18 19 } 19 20 return $this;
+7 -4
src/applications/conpherence/storage/ConpherenceThread.php
··· 189 189 } 190 190 // fallthrough intentionally here 191 191 case ConpherenceTransactionType::TYPE_FILES: 192 - default: 193 - if ($behind_transaction_phid && 194 - $transaction->getPHID() != $behind_transaction_phid) { 195 - $unread_count++; 192 + if ($behind_transaction_phid) { 193 + $unread_count++; 194 + if ($transaction->getPHID() == $behind_transaction_phid) { 195 + break 2; 196 196 } 197 + } 197 198 if ($unread_count > $max_count) { 198 199 break 2; 199 200 } 200 201 break; 202 + default: 203 + continue 2; 201 204 } 202 205 if ($snippet && !$behind_transaction_phid) { 203 206 break;
+2 -1
src/applications/conpherence/storage/ConpherenceTransaction.php
··· 29 29 return ($old === null); 30 30 case ConpherenceTransactionType::TYPE_TITLE: 31 31 case ConpherenceTransactionType::TYPE_PICTURE: 32 + return false; 32 33 case ConpherenceTransactionType::TYPE_FILES: 33 - return false; 34 + return true; 34 35 } 35 36 36 37 return parent::shouldHide();
+1 -1
src/applications/differential/editor/DifferentialCommentEditor.php
··· 109 109 $revision->loadRelationships(); 110 110 $reviewer_phids = $revision->getReviewers(); 111 111 if ($reviewer_phids) { 112 - $reviewer_phids = array_combine($reviewer_phids, $reviewer_phids); 112 + $reviewer_phids = array_fuse($reviewer_phids); 113 113 } 114 114 115 115 $metadata = array();
+4 -4
src/applications/macro/controller/PhabricatorMacroListController.php
··· 36 36 if ($has_search) { 37 37 $macros = queryfx_all( 38 38 $conn, 39 - 'SELECT m.* 40 - FROM '.implode(' JOIN ', $join).' 41 - WHERE '.implode(' AND ', $where)); 39 + 'SELECT m.* FROM %Q WHERE %Q', 40 + implode(' JOIN ', $join), 41 + implode(' AND ', $where)); 42 42 $macros = $macro_table->loadAllFromArray($macros); 43 43 $nodata = pht('There are no macros matching the filter.'); 44 44 } else { ··· 65 65 } 66 66 67 67 if ($authors) { 68 - $author_phids = array_combine($authors, $authors); 68 + $author_phids = array_fuse($authors); 69 69 } else { 70 70 $author_phids = array(); 71 71 }
+6
src/applications/metamta/controller/PhabricatorMetaMTAReceiveController.php
··· 28 28 array( 29 29 'text' => $request->getStr('body'), 30 30 )); 31 + 32 + // Make up some unique value, since this column isn't nullable. 33 + $received->setMessageIDHash( 34 + PhabricatorHash::digestForIndex( 35 + Filesystem::readRandomBytes(12))); 36 + 31 37 $received->save(); 32 38 33 39 $received->processReceivedMail();
+2
src/applications/metamta/controller/PhabricatorMetaMTASendGridReceiveController.php
··· 39 39 'text' => $request->getStr('text'), 40 40 'html' => $request->getStr('from'), 41 41 )); 42 + $received->setMessageIDHash( 43 + PhabricatorHash::digestForIndex($received->getMessageID())); 42 44 43 45 $file_phids = array(); 44 46 foreach ($_FILES as $file_raw) {
+10 -4
src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php
··· 37 37 abstract public function validateMailReceiver($mail_receiver); 38 38 abstract public function getPrivateReplyHandlerEmailAddress( 39 39 PhabricatorObjectHandle $handle); 40 - abstract public function getReplyHandlerDomain(); 40 + public function getReplyHandlerDomain() { 41 + return PhabricatorEnv::getEnvConfig( 42 + 'metamta.reply-handler-domain' 43 + ); 44 + } 41 45 abstract public function getReplyHandlerInstructions(); 42 46 abstract protected function receiveEmail( 43 47 PhabricatorMetaMTAReceivedMail $mail); ··· 291 295 return $this->getSingleReplyHandlerPrefix($address); 292 296 } 293 297 294 - final protected function enhanceBodyWithAttachments($body, 295 - array $attachments) { 298 + final protected function enhanceBodyWithAttachments( 299 + $body, 300 + array $attachments, 301 + $format = '- {F%d, layout=link}') { 296 302 if (!$attachments) { 297 303 return $body; 298 304 } ··· 306 312 } 307 313 308 314 foreach ($files as $file) { 309 - $file_str = sprintf('- {F%d, layout=link}', $file->getID()); 315 + $file_str = sprintf($format, $file->getID()); 310 316 $body .= $file_str."\n"; 311 317 } 312 318
+1 -1
src/applications/metamta/storage/PhabricatorMetaMTAMail.php
··· 804 804 return array(); 805 805 } 806 806 807 - $phids = array_combine($phids, $phids); 807 + $phids = array_fuse($phids); 808 808 809 809 810 810 // Exclude PHIDs explicitly marked for exclusion. We use this to prevent
+8 -19
src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php
··· 93 93 $prefixPattern = ($single_handle_prefix) 94 94 ? preg_quote($single_handle_prefix, '/') . '\+' 95 95 : ''; 96 - $pattern = "/^{$prefixPattern}((?:D|T|C)\d+)\+([\w]+)\+([a-f0-9]{16})@/U"; 96 + $pattern = "/^{$prefixPattern}((?:D|T|C|E)\d+)\+([\w]+)\+([a-f0-9]{16})@/U"; 97 97 98 98 $phabricator_address = null; 99 99 $receiver_name = null; ··· 276 276 277 277 $expect_hash = self::computeMailHash($receiver->getMailKey(), $check_phid); 278 278 279 - // See note at computeOldMailHash(). 280 - $old_hash = self::computeOldMailHash($receiver->getMailKey(), $check_phid); 281 - 282 - if ($expect_hash != $hash && $old_hash != $hash) { 279 + if ($expect_hash != $hash) { 283 280 return $this->setMessage("Invalid mail hash!")->save(); 284 281 } 285 282 ··· 292 289 } else if ($receiver instanceof PhabricatorRepositoryCommit) { 293 290 $handler = PhabricatorAuditCommentEditor::newReplyHandlerForCommit( 294 291 $receiver); 292 + } else if ($receiver instanceof ConpherenceThread) { 293 + $handler = id(new ConpherenceReplyHandler()) 294 + ->setMailReceiver($receiver); 295 295 } 296 296 297 297 $handler->setActor($user); ··· 334 334 case 'C': 335 335 $class_obj = new PhabricatorRepositoryCommit(); 336 336 break; 337 + case 'E': 338 + $class_obj = new ConpherenceThread(); 339 + break; 337 340 default: 338 341 return null; 339 342 } ··· 345 348 $global_mail_key = PhabricatorEnv::getEnvConfig('phabricator.mail-key'); 346 349 347 350 $hash = PhabricatorHash::digest($mail_key.$global_mail_key.$phid); 348 - return substr($hash, 0, 16); 349 - } 350 - 351 - public static function computeOldMailHash($mail_key, $phid) { 352 - 353 - // TODO: Remove this method entirely in a couple of months. We've moved from 354 - // plain sha1 to sha1+hmac to make the codebase more auditable for good uses 355 - // of hash functions, but still accept the old hashes on email replies to 356 - // avoid breaking things. Once we've been sending only hmac hashes for a 357 - // while, remove this and start rejecting old hashes. See T547. 358 - 359 - $global_mail_key = PhabricatorEnv::getEnvConfig('phabricator.mail-key'); 360 - 361 - $hash = sha1($mail_key.$global_mail_key.$phid); 362 351 return substr($hash, 0, 16); 363 352 } 364 353
+1 -1
src/applications/phid/handle/PhabricatorObjectHandleData.php
··· 388 388 if (empty($entries[$phid])) { 389 389 $handle->setName('Unknown Config Entry'); 390 390 } else { 391 - $entry = $entry[$phid]; 391 + $entry = $entries[$phid]; 392 392 $handle->setName($entry->getKey()); 393 393 $handle->setURI('/config/edit/'.$entry->getKey()); 394 394 $handle->setFullName($entry->getKey());
+4 -2
src/applications/pholio/controller/PholioMockListController.php
··· 16 16 $user = $request->getUser(); 17 17 18 18 $query = id(new PholioMockQuery()) 19 - ->setViewer($user); 19 + ->setViewer($user) 20 + ->needCoverFiles(true); 20 21 21 22 $nav = $this->buildSideNav(); 22 23 $filter = $nav->selectFilter('view/'.$this->view, 'view/all'); ··· 38 39 $board->addItem( 39 40 id(new PhabricatorPinboardItemView()) 40 41 ->setHeader($mock->getName()) 41 - ->setURI('/M'.$mock->getID())); 42 + ->setURI('/M'.$mock->getID()) 43 + ->setImageURI($mock->getCoverFile()->getThumb160x120URI())); 42 44 } 43 45 44 46 $header = id(new PhabricatorHeaderView())
+2
src/applications/pholio/controller/PholioMockViewController.php
··· 18 18 $mock = id(new PholioMockQuery()) 19 19 ->setViewer($user) 20 20 ->withIDs(array($this->id)) 21 + ->needImages(true) 22 + ->needCoverFiles(true) 21 23 ->executeOne(); 22 24 23 25 if (!$mock) {
+59 -1
src/applications/pholio/query/PholioMockQuery.php
··· 10 10 private $phids; 11 11 private $authorPHIDs; 12 12 13 + private $needCoverFiles; 14 + private $needImages; 15 + 13 16 public function withIDs(array $ids) { 14 17 $this->ids = $ids; 15 18 return $this; ··· 37 40 $this->buildOrderClause($conn_r), 38 41 $this->buildLimitClause($conn_r)); 39 42 40 - return $table->loadAllFromArray($data); 43 + $mocks = $table->loadAllFromArray($data); 44 + 45 + if ($mocks && $this->needImages) { 46 + $this->loadImages($mocks); 47 + } 48 + if ($mocks && $this->needCoverFiles) { 49 + $this->loadCoverFiles($mocks); 50 + } 51 + 52 + 53 + return $mocks; 41 54 } 42 55 43 56 private function buildWhereClause(AphrontDatabaseConnection $conn_r) { ··· 69 82 return $this->formatWhereClause($where); 70 83 } 71 84 85 + public function needCoverFiles($need_cover_files) { 86 + $this->needCoverFiles = $need_cover_files; 87 + return $this; 88 + } 89 + 90 + public function needImages($need_images) { 91 + $this->needImages = $need_images; 92 + return $this; 93 + } 94 + 95 + public function loadImages(array $mocks) { 96 + assert_instances_of($mocks, 'PholioMock'); 97 + 98 + $mock_ids = mpull($mocks, 'getID'); 99 + $all_images = id(new PholioImage())->loadAllWhere( 100 + 'mockID IN (%Ld)', 101 + $mock_ids); 102 + 103 + $file_phids = mpull($all_images, 'getFilePHID'); 104 + $all_files = mpull(id(new PhabricatorFile())->loadAllWhere( 105 + 'phid IN (%Ls)', 106 + $file_phids), null, 'getPHID'); 107 + 108 + foreach ($all_images as $image) { 109 + $image->attachFile($all_files[$image->getFilePHID()]); 110 + } 111 + 112 + $image_groups = mgroup($all_images, 'getMockID'); 113 + 114 + foreach ($mocks as $mock) { 115 + $mock->attachImages($image_groups[$mock->getID()]); 116 + } 117 + } 118 + 119 + public function loadCoverFiles(array $mocks) { 120 + assert_instances_of($mocks, 'PholioMock'); 121 + $cover_file_phids = mpull($mocks, 'getCoverPHID'); 122 + $cover_files = mpull(id(new PhabricatorFile())->loadAllWhere( 123 + 'phid IN (%Ls)', 124 + $cover_file_phids), null, 'getPHID'); 125 + 126 + foreach ($mocks as $mock) { 127 + $mock->attachCoverFile($cover_files[$mock->getCoverPHID()]); 128 + } 129 + } 72 130 }
+13
src/applications/pholio/storage/PholioImage.php
··· 14 14 protected $description = ''; 15 15 protected $sequence; 16 16 17 + private $file; 17 18 18 19 /* -( PhabricatorMarkupInterface )----------------------------------------- */ 19 20 ··· 37 38 38 39 public function shouldUseMarkupCache($field) { 39 40 return (bool)$this->getID(); 41 + } 42 + 43 + public function attachFile(PhabricatorFile $file) { 44 + $this->file = $file; 45 + return $this; 46 + } 47 + 48 + public function getFile() { 49 + if ($this->file === null) { 50 + throw new Exception("Call attachFile() before getFile()!"); 51 + } 52 + return $this->file; 40 53 } 41 54 42 55 }
+28
src/applications/pholio/storage/PholioMock.php
··· 20 20 protected $coverPHID; 21 21 protected $mailKey; 22 22 23 + private $images; 24 + private $coverFile; 25 + 23 26 public function getConfiguration() { 24 27 return array( 25 28 self::CONFIG_AUX_PHID => true, ··· 35 38 $this->setMailKey(Filesystem::readRandomCharacters(20)); 36 39 } 37 40 return parent::save(); 41 + } 42 + 43 + public function attachImages(array $images) { 44 + assert_instances_of($images, 'PholioImage'); 45 + $this->images = $images; 46 + return $this; 47 + } 48 + 49 + public function getImages() { 50 + if ($this->images === null) { 51 + throw new Exception("Call attachImages() before getImages()!"); 52 + } 53 + return $this->images; 54 + } 55 + 56 + public function attachCoverFile(PhabricatorFile $file) { 57 + $this->coverFile = $file; 58 + return $this; 59 + } 60 + 61 + public function getCoverFile() { 62 + if ($this->coverFile === null) { 63 + throw new Exception("Call attachCoverFile() before getCoverFile()!"); 64 + } 65 + return $this->coverFile; 38 66 } 39 67 40 68
+1 -7
src/applications/pholio/view/PholioMockImagesView.php
··· 13 13 throw new Exception("Call setMock() before render()!"); 14 14 } 15 15 16 - $image = id(new PholioImage())->loadOneWhere( 17 - "mockid=%d", 18 - $this->mock->getID()); 19 - 20 - $file = id(new PhabricatorFile())->loadOneWhere( 21 - "phid=%s", 22 - $image->getFilePHID()); 16 + $file = head($this->mock->getImages())->getFile(); 23 17 24 18 $image_tag = phutil_tag( 25 19 'img',
+1 -1
src/applications/phortune/control/PhortuneMonthYearExpiryControl.php
··· 59 59 60 60 $current_year = $this->getCurrentYear(); 61 61 $years = range($current_year, $current_year + 20); 62 - $years = array_combine($years, $years); 62 + $years = array_fuse($years); 63 63 64 64 if ($this->getMonthInputValue()) { 65 65 $selected_month = $this->getMonthInputValue();
+17 -6
src/applications/phriction/controller/PhrictionDocumentController.php
··· 215 215 216 216 $slug = PhabricatorSlug::normalize($this->slug); 217 217 218 - return id(new PhabricatorActionListView()) 218 + $action_view = id(new PhabricatorActionListView()) 219 219 ->setUser($user) 220 220 ->setObject($document) 221 221 ->addAction( 222 222 id(new PhabricatorActionView()) 223 223 ->setName(pht('Edit Document')) 224 224 ->setIcon('edit') 225 - ->setHref('/phriction/edit/'.$document->getID().'/')) 226 - ->addAction( 225 + ->setHref('/phriction/edit/'.$document->getID().'/')); 226 + 227 + if ($document->getStatus() == PhrictionDocumentStatus::STATUS_EXISTS) { 228 + $action_view->addAction( 229 + id(new PhabricatorActionView()) 230 + ->setName(pht('Delete Document')) 231 + ->setIcon('delete') 232 + ->setHref('/phriction/delete/'.$document->getID().'/') 233 + ->setWorkflow(true)); 234 + } 235 + 236 + return 237 + $action_view->addAction( 227 238 id(new PhabricatorActionView()) 228 - ->setName(pht('View History')) 229 - ->setIcon('history') 230 - ->setHref(PhrictionDocument::getSlugURI($slug, 'history'))); 239 + ->setName(pht('View History')) 240 + ->setIcon('history') 241 + ->setHref(PhrictionDocument::getSlugURI($slug, 'history'))); 231 242 } 232 243 233 244 private function renderChildren($slug) {
-14
src/applications/phriction/controller/PhrictionEditController.php
··· 154 154 ->setErrors($errors); 155 155 } 156 156 157 - $delete_button = null; 158 157 if ($document->getID()) { 159 158 $panel_header = 'Edit Phriction Document'; 160 159 $submit_button = 'Save Changes'; 161 - if ($document->getStatus() != PhrictionDocumentStatus::STATUS_DELETED) { 162 - $delete_button = phutil_tag( 163 - 'a', 164 - array( 165 - 'href' => '/phriction/delete/'.$document->getID().'/', 166 - 'class' => 'grey button', 167 - ), 168 - 'Delete Document'); 169 - } 170 160 } else { 171 161 $panel_header = 'Create New Phriction Document'; 172 162 $submit_button = 'Create Document'; ··· 239 229 ->setWidth(AphrontPanelView::WIDTH_WIDE) 240 230 ->setHeader($panel_header) 241 231 ->appendChild($form); 242 - 243 - if ($delete_button) { 244 - $panel->addButton($delete_button); 245 - } 246 232 247 233 $preview_panel = 248 234 '<div class="aphront-panel-preview aphront-panel-preview-wide">
+1 -1
src/applications/settings/panel/PhabricatorSettingsPanelAccount.php
··· 62 62 } 63 63 64 64 $timezone_ids = DateTimeZone::listIdentifiers(); 65 - $timezone_id_map = array_combine($timezone_ids, $timezone_ids); 65 + $timezone_id_map = array_fuse($timezone_ids); 66 66 67 67 $form = new AphrontFormView(); 68 68 $form
+18 -4
src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
··· 15 15 private $isNewObject; 16 16 private $mentionedPHIDs; 17 17 private $continueOnNoEffect; 18 + private $parentMessageID; 18 19 19 20 private $isPreview; 20 21 ··· 38 39 39 40 public function getContinueOnNoEffect() { 40 41 return $this->continueOnNoEffect; 42 + } 43 + 44 + /** 45 + * Not strictly necessary, but reply handlers ideally set this value to 46 + * make email threading work better. 47 + */ 48 + public function setParentMessageID($parent_message_id) { 49 + $this->parentMessageID = $parent_message_id; 50 + return $this; 51 + } 52 + public function getParentMessageID() { 53 + return $this->parentMessageID; 41 54 } 42 55 43 56 protected function getIsNewObject() { ··· 509 522 protected function getPHIDTransactionNewValue( 510 523 PhabricatorApplicationTransaction $xaction) { 511 524 512 - $old = array_combine($xaction->getOldValue(), $xaction->getOldValue()); 525 + $old = array_fuse($xaction->getOldValue()); 513 526 514 527 $new = $xaction->getNewValue(); 515 528 $new_add = idx($new, '+', array()); ··· 518 531 unset($new['-']); 519 532 $new_set = idx($new, '=', null); 520 533 if ($new_set !== null) { 521 - $new_set = array_combine($new_set, $new_set); 534 + $new_set = array_fuse($new_set); 522 535 } 523 536 unset($new['=']); 524 537 ··· 669 682 ->setIsBulk(true) 670 683 ->setBody($body->render()); 671 684 672 - // TODO 673 - // ->setParentMessageID(...) 685 + if ($this->getParentMessageID()) { 686 + $template->setParentMessageID($this->getParentMessageID()); 687 + } 674 688 675 689 $mails = $this 676 690 ->buildReplyHandler($object)
+1 -1
src/docs/developer/database.diviner
··· 151 151 - Name all indexes so it is possible to delete them later. 152 152 # Edit `src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php` and 153 153 add your patch to @{method@phabricator:PhabricatorBuiltinPatchList::getPatches}. 154 - # Run `bin/storage/upgrade`. 154 + # Run `bin/storage upgrade`. 155 155 156 156 It is also possible to create more complex patches in PHP for data migration 157 157 (due to schema changes or otherwise.) However, the schema changes themselves
+12 -10
src/docs/userguide/advanced_configuration.diviner
··· 91 91 to be set in your webserver environment, and also in your shell whenever you 92 92 run a script: 93 93 94 - # Shell 95 - export PHABRICATOR_ENV=custom/exampleconfig 94 + ``` 95 + # Shell 96 + export PHABRICATOR_ENV=custom/exampleconfig 96 97 97 - # Apache 98 - SetEnv PHABRICATOR_ENV custom/exampleconfig 98 + # Apache 99 + SetEnv PHABRICATOR_ENV custom/exampleconfig 99 100 100 - # nginx 101 - fastcgi_param PHABRICATOR_ENV "custom/exampleconfig"; 101 + # nginx 102 + fastcgi_param PHABRICATOR_ENV "custom/exampleconfig"; 102 103 103 - # lighttpd 104 - setenv.add-environment = ( 105 - "PHABRICATOR_ENV" => "custom/exampleconfig", 106 - ) 104 + # lighttpd 105 + setenv.add-environment = ( 106 + "PHABRICATOR_ENV" => "custom/exampleconfig", 107 + ) 108 + ``` 107 109 108 110 After creating and selecting a configuration file, restart your webserver. Any 109 111 configuration you set should take effect immediately, and your file should be
+20 -11
src/infrastructure/celerity/CeleritySpriteGenerator.php
··· 87 87 $sprites = array(); 88 88 89 89 $sources = array( 90 - 'round_bubble' => array( 91 - 'x' => 26, 92 - 'y' => 26, 93 - 'css' => '.phabricator-main-menu-alert-bubble' 94 - ), 95 - 'bubble' => array( 96 - 'x' => 46, 97 - 'y' => 26, 98 - 'css' => '.phabricator-main-menu-alert-bubble.alert-unread' 99 - ), 100 90 'seen_read_all' => array( 101 91 'x' => 14, 102 92 'y' => 14, ··· 135 125 'y' => 25, 136 126 'css' => '.phabricator-main-menu-logo-image', 137 127 ), 128 + 'conf-off' => array( 129 + 'x' => 14, 130 + 'y' => 14, 131 + 'css' => 132 + '.alert-notifications .phabricator-main-menu-message-icon', 133 + ), 134 + 'conf-hover' => array( 135 + 'x' => 14, 136 + 'y' => 14, 137 + 'css' => 138 + '.alert-notifications:hover .phabricator-main-menu-message-icon', 139 + ), 140 + 'conf-unseen' => array( 141 + 'x' => 14, 142 + 'y' => 14, 143 + 'css' => 144 + '.alert-notifications.message-unread '. 145 + '.phabricator-main-menu-message-icon', 146 + ), 138 147 ); 139 148 140 149 $scales = array( ··· 183 192 // Reorder the sprites so less-specific rules generate earlier in the sheet. 184 193 // Otherwise we end up with blue "a.black" buttons because the blue rules 185 194 // have the same specificity but appear later. 186 - $gradients = array_combine($gradients, $gradients); 195 + $gradients = array_fuse($gradients); 187 196 $gradients = array_select_keys( 188 197 $gradients, 189 198 array(
+1 -1
src/infrastructure/daemon/workers/PhabricatorWorker.php
··· 102 102 final public static function waitForTasks(array $task_ids) { 103 103 $task_table = new PhabricatorWorkerActiveTask(); 104 104 105 - $waiting = array_combine($task_ids, $task_ids); 105 + $waiting = array_fuse($task_ids); 106 106 while ($waiting) { 107 107 $conn_w = $task_table->establishConnection('w'); 108 108
+10
src/infrastructure/markup/rule/PhabricatorRemarkupRuleEmbedFile.php
··· 55 55 case 'full': 56 56 $attrs['src'] = $file->getBestURI(); 57 57 $options['image_class'] = null; 58 + $file_data = $file->getMetadata(); 59 + $height = idx($file_data, PhabricatorFile::METADATA_IMAGE_HEIGHT); 60 + if ($height) { 61 + $attrs['height'] = $height; 62 + } 63 + $width = idx($file_data, PhabricatorFile::METADATA_IMAGE_WIDTH); 64 + if ($width) { 65 + $attrs['width'] = $width; 66 + } 58 67 break; 59 68 case 'thumb': 60 69 default: 61 70 $attrs['src'] = $file->getPreview220URI(); 71 + $attrs['width'] = '220'; 62 72 $options['image_class'] = 'phabricator-remarkup-embed-image'; 63 73 break; 64 74 }
+13 -2
src/infrastructure/markup/rule/PhabricatorRemarkupRuleImageMacro.php
··· 29 29 $phid = $this->images[$matches[1]]; 30 30 31 31 $file = id(new PhabricatorFile())->loadOneWhere('phid = %s', $phid); 32 + $style = null; 33 + $src_uri = null; 32 34 if ($file) { 33 35 $src_uri = $file->getBestURI(); 34 - } else { 35 - $src_uri = null; 36 + $file_data = $file->getMetadata(); 37 + $height = idx($file_data,PhabricatorFile::METADATA_IMAGE_HEIGHT); 38 + $width = idx($file_data, PhabricatorFile::METADATA_IMAGE_WIDTH); 39 + if ($height && $width) { 40 + $style = sprintf( 41 + 'height: %dpx; width: %dpx;', 42 + $height, 43 + $width 44 + ); 45 + } 36 46 } 37 47 38 48 $img = phutil_tag( ··· 41 51 'src' => $src_uri, 42 52 'alt' => $matches[1], 43 53 'title' => $matches[1], 54 + 'style' => $style, 44 55 )); 45 56 return $this->getEngine()->storeText($img); 46 57 } else {
+4
src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
··· 1093 1093 'type' => 'sql', 1094 1094 'name' => $this->getPatchPath('20130111.conpherence.sql'), 1095 1095 ), 1096 + '20130127.altheraldtranscript.sql' => array( 1097 + 'type' => 'sql', 1098 + 'name' => $this->getPatchPath('20130127.altheraldtranscript.sql'), 1099 + ), 1096 1100 ); 1097 1101 } 1098 1102
+23 -4
src/view/form/AphrontErrorView.php
··· 11 11 private $errors; 12 12 private $severity; 13 13 private $id; 14 + private $insideDialogue; 15 + 16 + public function setInsideDialogue($inside_dialogue) { 17 + $this->insideDialogue = $inside_dialogue; 18 + return $this; 19 + } 20 + public function getInsideDialogue() { 21 + return $this->insideDialogue; 22 + } 14 23 15 24 public function setTitle($title) { 16 25 $this->title = $title; ··· 32 41 return $this; 33 42 } 34 43 44 + private function getBaseClass() { 45 + if ($this->getInsideDialogue()) { 46 + $class = 'aphront-error-view-dialogue'; 47 + } else { 48 + $class = 'aphront-error-view'; 49 + } 50 + return $class; 51 + } 52 + 35 53 final public function render() { 36 54 37 55 require_celerity_resource('aphront-error-view-css'); ··· 69 87 70 88 $this->severity = nonempty($this->severity, self::SEVERITY_ERROR); 71 89 72 - $more_classes = array(); 73 - $more_classes[] = 'aphront-error-severity-'.$this->severity; 74 - $more_classes = implode(' ', $more_classes); 90 + $classes = array(); 91 + $classes[] = $this->getBaseClass(); 92 + $classes[] = 'aphront-error-severity-'.$this->severity; 93 + $classes = implode(' ', $classes); 75 94 76 95 return phutil_render_tag( 77 96 'div', 78 97 array( 79 98 'id' => $this->id, 80 - 'class' => 'aphront-error-view '.$more_classes, 99 + 'class' => $classes, 81 100 ), 82 101 array( 83 102 $title,
+2 -2
src/view/form/control/AphrontFormDateControl.php
··· 181 181 $max_year = $this->getMaxYear(); 182 182 183 183 $days = range(1, 31); 184 - $days = array_combine($days, $days); 184 + $days = array_fuse($days); 185 185 186 186 $months = array( 187 187 1 => 'Jan', ··· 199 199 ); 200 200 201 201 $years = range($this->getMinYear(), $this->getMaxYear()); 202 - $years = array_combine($years, $years); 202 + $years = array_fuse($years); 203 203 204 204 $days_sel = AphrontFormSelectControl::renderSelectTag( 205 205 $this->getDayInputValue(),
+14 -2
src/view/layout/PhabricatorObjectItemListView.php
··· 5 5 private $header; 6 6 private $items; 7 7 private $pager; 8 + private $stackable; 8 9 private $noDataString; 9 10 10 11 public function setHeader($header) { ··· 27 28 return $this; 28 29 } 29 30 31 + public function setStackable() { 32 + $this->stackable = true; 33 + return $this; 34 + } 35 + 30 36 public function render() { 31 37 require_celerity_resource('phabricator-object-item-list-view-css'); 32 38 39 + $classes = array(); 33 40 $header = null; 34 41 if (strlen($this->header)) { 35 42 $header = phutil_tag( ··· 55 62 $pager = $this->renderSingleView($this->pager); 56 63 } 57 64 65 + $classes[] = 'phabricator-object-item-list-view'; 66 + if ($this->stackable) { 67 + $classes[] = 'phabricator-object-list-stackable'; 68 + } 69 + 58 70 return phutil_render_tag( 59 - 'div', 71 + 'ul', 60 72 array( 61 - 'class' => 'phabricator-object-item-list-view', 73 + 'class' => implode(' ', $classes), 62 74 ), 63 75 $header.$items.$pager); 64 76 }
+1 -1
src/view/layout/PhabricatorObjectItemView.php
··· 166 166 $header.$attrs.$this->renderChildren()); 167 167 168 168 return phutil_tag( 169 - 'div', 169 + 'li', 170 170 array( 171 171 'class' => implode(' ', $classes), 172 172 ),
+55 -6
src/view/page/menu/PhabricatorMainMenuView.php
··· 292 292 require_celerity_resource('phabricator-notification-menu-css'); 293 293 require_celerity_resource('sprite-menu-css'); 294 294 295 + $container_classes = array( 296 + 'sprite-menu', 297 + 'alert-notifications', 298 + ); 299 + 300 + $conpherence = id(new PhabricatorApplicationConpherence())->isBeta(); 301 + $allow_beta = 302 + PhabricatorEnv::getEnvConfig('phabricator.show-beta-applications'); 303 + $message_tag = ''; 304 + 305 + if (!$conpherence || $allow_beta) { 306 + $message_id = celerity_generate_unique_node_id(); 307 + $message_count_id = celerity_generate_unique_node_id(); 308 + 309 + $unread_status = ConpherenceParticipationStatus::BEHIND; 310 + $unread = id(new ConpherenceParticipantQuery()) 311 + ->withParticipantPHIDs(array($user->getPHID())) 312 + ->withParticipationStatus($unread_status) 313 + ->execute(); 314 + $message_count_number = count($unread); 315 + if ($message_count_number > 999) { 316 + $message_count_number = "\xE2\x88\x9E"; 317 + } 318 + 319 + $message_count_tag = phutil_render_tag( 320 + 'span', 321 + array( 322 + 'id' => $message_count_id, 323 + 'class' => 'phabricator-main-menu-message-count' 324 + ), 325 + phutil_escape_html($message_count_number)); 326 + 327 + $message_icon_tag = phutil_render_tag( 328 + 'span', 329 + array( 330 + 'class' => 'sprite-menu phabricator-main-menu-message-icon', 331 + ), 332 + ''); 333 + 334 + if ($message_count_number) { 335 + $container_classes[] = 'message-unread'; 336 + } 337 + 338 + $message_tag = phutil_render_tag( 339 + 'a', 340 + array( 341 + 'href' => '/conpherence/', 342 + 'class' => implode(' ', $container_classes), 343 + 'id' => $message_id, 344 + ), 345 + $message_icon_tag.$message_count_tag); 346 + } 347 + 295 348 $count_id = celerity_generate_unique_node_id(); 296 349 $dropdown_id = celerity_generate_unique_node_id(); 297 350 $bubble_id = celerity_generate_unique_node_id(); ··· 318 371 ), 319 372 ''); 320 373 321 - $container_classes = array( 322 - 'phabricator-main-menu-alert-bubble', 323 - 'sprite-menu', 324 - 'alert-notifications', 325 - ); 326 374 if ($count_number) { 327 375 $container_classes[] = 'alert-unread'; 328 376 } ··· 354 402 ), 355 403 ''); 356 404 357 - return array($bubble_tag, $notification_dropdown); 405 + return array( 406 + $bubble_tag.$message_tag, $notification_dropdown); 358 407 } 359 408 360 409 private function renderMenuIcon($name) {
+9 -2
webroot/rsrc/css/aphront/error-view.css
··· 2 2 * @provides aphront-error-view-css 3 3 */ 4 4 5 + .aphront-error-view, 6 + .aphront-error-view-dialogue { 7 + border-style: solid; 8 + border-width: 1px; 9 + } 10 + 5 11 .aphront-error-view { 6 12 margin: 20px; 7 - border-style: solid; 8 - border-width: 1px; 13 + } 14 + .aphront-error-view-dialogue { 15 + margin: 0px 0px 16px 0px; 9 16 } 10 17 11 18 .device-phone .aphront-error-view {
+23 -39
webroot/rsrc/css/application/base/main-menu-view.css
··· 41 41 42 42 .phabricator-main-menu-logo { 43 43 display: inline-block; 44 - position: relative; 45 - height: 44px; 46 44 width: 139px; 47 45 margin-right: 6px; 48 46 padding-right: 6px; ··· 248 246 249 247 */ 250 248 251 - .device-desktop .phabricator-main-menu-alerts { 252 - display: inline-block; 253 - } 254 - 255 249 .device .phabricator-main-menu-alerts { 256 - position: absolute; 257 - left: 60px; 258 - right: 60px; 259 - top: 10px; 260 - height: 34px; 261 - text-align: center; 250 + margin-left: 60px; 262 251 } 263 252 264 - .phabricator-main-menu-alert-bubble { 253 + .phabricator-main-menu-alerts { 265 254 display: inline-block; 266 - position: relative; 267 - width: 26px; 268 - height: 26px; 269 - margin-bottom: 9px; 255 + border-radius: 15px; 256 + background: rgba(0,0,0,.2); 257 + height: 20px; 258 + padding: 3px 10px; 259 + margin-top: 9px; 270 260 } 271 261 272 - .phabricator-main-menu-alert-bubble.alert-unread { 273 - width: 46px; 274 - } 275 - 276 - .phabricator-main-menu-alert-icon { 277 - position: absolute; 262 + .phabricator-main-menu-alert-icon, 263 + .phabricator-main-menu-message-icon { 278 264 width: 14px; 279 265 height: 14px; 280 - top: 5px; 281 - left: 6px; 266 + display: block; 267 + float: left; 268 + margin: 2px 0 0 0; 269 + } 270 + 271 + .alert-notifications .phabricator-main-menu-message-icon { 272 + margin: 3px 0 0 8px; 282 273 } 283 274 284 - .phabricator-main-menu-alert-count { 285 - position: absolute; 275 + .phabricator-main-menu-alert-count, 276 + .phabricator-main-menu-message-count { 286 277 font-weight: bold; 287 - line-height: 22px; 288 - top: 1px; 289 - right: 8px; 290 - left: 20px; 278 + line-height: 20px; 291 279 color: #ffffff; 292 280 text-align: center; 293 281 display: none; 282 + float: left; 283 + margin-left: 3px; 294 284 } 295 285 296 - .phabricator-main-menu-alert-item { 297 - width: 26px; 298 - height: 26px; 299 - margin: 9px; 300 - display: block; 301 - } 302 - 303 - .alert-unread .phabricator-main-menu-alert-count { 286 + .alert-unread .phabricator-main-menu-alert-count, 287 + .message-unread .phabricator-main-menu-message-count { 304 288 display: block; 305 289 } 306 290
+2 -2
webroot/rsrc/css/application/config/config-options.css
··· 38 38 } 39 39 40 40 .config-options-current-value { 41 - padding: 0 6px 2px; 41 + padding: 0 10px 8px; 42 42 white-space: pre-wrap; 43 43 } 44 44 45 45 .config-options-current-value span { 46 - color: #666666; 46 + color: #777; 47 47 }
+15 -6
webroot/rsrc/css/application/conpherence/header-pane.css
··· 2 2 * @provides conpherence-header-pane-css 3 3 */ 4 4 5 + #conpherence-main-pane { 6 + position: relative; 7 + } 8 + 5 9 .conpherence-header-pane { 6 10 border-bottom: 1px solid #ccc; 7 11 background: #fff; 8 - height: 50px; 12 + height: 80px; 9 13 width: 100%; 10 14 } 11 15 12 16 .conpherence-header-pane .edit { 13 - position: relative; 14 17 float: right; 15 18 margin: 16px 16px 0px 0px; 19 + height: 50px; 20 + width: 50px; 21 + background-image: url('/rsrc/image/actions/edit.png'); 16 22 } 17 23 18 24 .conpherence-header-pane .header-image { 19 25 position: absolute; 26 + top: 15px; 27 + left: 15px; 20 28 height: 50px; 21 29 width: 50px; 22 30 } ··· 24 32 .conpherence-header-pane .title { 25 33 position: relative; 26 34 font-size: 16px; 27 - left: 62px; 28 - top: 6px; 35 + font-weight: bold; 36 + left: 77px; 37 + top: 21px; 29 38 max-width: 80%; 30 39 overflow-x: auto; 31 40 } 32 41 33 42 .conpherence-header-pane .subtitle { 34 43 position: relative; 35 - left: 62px; 36 - top: 6px; 44 + left: 77px; 45 + top: 21px; 37 46 color: #bfbfbf; 38 47 max-width: 80%; 39 48 }
+5 -2
webroot/rsrc/css/application/conpherence/menu.css
··· 3 3 */ 4 4 5 5 .no-conpherences-menu-item { 6 - color: #ffffff; 6 + color: #a1a5a9; 7 7 border-top: solid 1px #3B3D3E; 8 - padding: 20px 0px 20px 66px; 8 + padding: 20px 0; 9 + margin: 0px auto; 10 + width: 320px; 11 + text-align: center; 9 12 } 10 13 11 14 .conpherence-menu .phabricator-nav-column-background,
+13 -9
webroot/rsrc/css/application/conpherence/message-pane.css
··· 15 15 position: fixed; 16 16 left: 320px; 17 17 right: 321px; 18 - top: 94px; 19 - bottom: 225px; 18 + top: 124px; 19 + bottom: 142px; 20 20 overflow-y: auto; 21 + box-shadow: inset 1px 5px 5px rgba(0,0,0,0.1); 21 22 } 22 23 23 24 .conpherence-message-pane .phabricator-form-view { 24 25 border-width: 0; 25 26 background: none; 26 - height: 224px; 27 + height: 143px; 27 28 padding: 0; 28 29 position: fixed; 29 30 bottom: 0; ··· 46 47 } 47 48 48 49 .conpherence-message-pane .phabricator-transaction-view { 49 - margin: 1em 1.25em 1em 1.25em; 50 - display: block; 50 + margin: 10px 0 10px 15px; 51 51 } 52 52 53 53 .conpherence-message-pane .phabricator-transaction-detail { ··· 67 67 } 68 68 69 69 .conpherence-message-pane .conpherence-edited .phabricator-transaction-content { 70 - font-size: 12px; 71 - padding: 0em 1em 0em 1em; 70 + padding: 0 1em 0 1em; 72 71 margin-top: -4px; 73 72 } 74 73 ··· 82 81 .conpherence-message-pane .remarkup-assist-bar { 83 82 border-width: 1px 0 0; 84 83 border-color: #CCC; 84 + border-bottom: transparent; 85 85 } 86 86 87 87 .conpherence-message-pane .remarkup-assist-textarea { 88 - border-width: 1px 0 1px 0; 89 - border-color: #CCC; 88 + border-width: 0 0 1px 0; 89 + border-color: #e7e7e7; 90 90 } 91 91 92 92 .conpherence-message-pane .remarkup-assist-textarea:focus { 93 93 outline: none; 94 94 } 95 95 96 + .conpherence-message-pane .aphront-form-input textarea { 97 + padding: 6px; 98 + height: 6em; 99 + }
+2 -1
webroot/rsrc/css/application/conpherence/widget-pane.css
··· 5 5 .conpherence-widget-pane { 6 6 position: fixed; 7 7 right: 0px; 8 - top: 94px; 8 + top: 125px; 9 9 width: 320px; 10 10 height: 100%; 11 11 border-width: 0 0 0 1px; 12 12 border-color: #CCC; 13 13 border-style: solid; 14 + background: url('/rsrc/image/texture/dust_background.jpg'); 14 15 } 15 16 16 17 .conpherence-widget-pane .aphront-form-input {
+16 -7
webroot/rsrc/css/layout/phabricator-object-item-list-view.css
··· 7 7 background: #f4f5f6; 8 8 } 9 9 10 + .phabricator-object-item-list-view.phabricator-object-list-stackable .phabricator-object-item { 11 + margin: -1px 0 0 0; 12 + } 13 + 10 14 .device-desktop .phabricator-object-item-list-view { 11 15 padding: 20px; 12 16 } ··· 14 18 .phabricator-object-item { 15 19 background: #ffffff; 16 20 border-style: solid; 17 - border-color: #d7d7d7 #e4e3e4 #bcbcbd #d7d7d7; 21 + border-color: #c0c5d1; 18 22 border-width: 1px 1px 1px 3px; 19 - margin: 3px 0; 23 + margin: 5px 0; 20 24 21 25 overflow: hidden; 22 26 box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.10); 27 + } 28 + 29 + .phabricator-object-list-stackable .phabricator-object-item { 30 + border-width: 1px; 23 31 } 24 32 25 33 .device-desktop .phabricator-object-item { ··· 28 36 29 37 .phabricator-object-item-name { 30 38 display: block; 31 - padding: 4px 8px 4px; 39 + padding: 8px 10px 2px; 32 40 font-weight: bold; 41 + font-size: 14px; 33 42 } 34 43 35 44 .phabricator-object-item-content { ··· 43 52 */ 44 53 45 54 .phabricator-object-item-attributes { 46 - padding: 0px 8px 4px; 55 + padding: 0px 10px 8px; 47 56 } 48 57 49 58 .phabricator-object-item-attribute { 50 59 display: inline; 51 - color: #555555; 52 - font-size: 11px; 60 + color: #777; 61 + font-size: 13px; 53 62 } 54 63 55 64 .phabricator-object-item-attribute-spacer { ··· 66 75 67 76 .phabricator-object-item-icons { 68 77 float: right; 69 - padding: 2px 4px 0; 78 + padding: 10px 10px 0; 70 79 } 71 80 72 81 /* NOTE: The main content is an "overflow: hidden" div which we give a right
+1 -1
webroot/rsrc/css/layout/phabricator-source-code-view.css
··· 31 31 } 32 32 33 33 .phabricator-source-code-summary { 34 - margin-bottom: 4px; 34 + padding-bottom: 8px; 35 35 } 36 36 37 37 /* If a Paste has enormously long lines, truncate them in the summary on the
+152 -136
webroot/rsrc/css/sprite-apps-large.css
··· 82 82 background-position: -87px -29px; 83 83 } 84 84 85 - .app-countdown-light-large { 85 + .app-conpherence-light-large { 86 86 background-position: -116px -29px; 87 87 } 88 88 89 - .app-countdown-dark-large { 89 + .app-conpherence-dark-large { 90 90 background-position: -145px -29px; 91 91 } 92 92 93 - .app-countdown-blue-large, .phabricator-crumb-view:hover .app-countdown-dark-large { 93 + .app-conpherence-blue-large, .phabricator-crumb-view:hover .app-conpherence-dark-large { 94 94 background-position: -174px -29px; 95 95 } 96 96 97 - .app-countdown-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-countdown-light-large { 97 + .app-conpherence-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-conpherence-light-large { 98 98 background-position: -203px -29px; 99 99 } 100 100 101 - .app-daemon-light-large { 101 + .app-countdown-light-large { 102 102 background-position: -232px -29px; 103 103 } 104 104 105 - .app-daemon-dark-large { 105 + .app-countdown-dark-large { 106 106 background-position: -261px -29px; 107 107 } 108 108 109 - .app-daemon-blue-large, .phabricator-crumb-view:hover .app-daemon-dark-large { 109 + .app-countdown-blue-large, .phabricator-crumb-view:hover .app-countdown-dark-large { 110 110 background-position: -290px -29px; 111 111 } 112 112 113 - .app-daemon-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-daemon-light-large { 113 + .app-countdown-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-countdown-light-large { 114 114 background-position: -319px -29px; 115 115 } 116 116 117 - .app-differential-light-large { 117 + .app-daemon-light-large { 118 118 background-position: 0px -58px; 119 119 } 120 120 121 - .app-differential-dark-large { 121 + .app-daemon-dark-large { 122 122 background-position: -29px -58px; 123 123 } 124 124 125 - .app-differential-blue-large, .phabricator-crumb-view:hover .app-differential-dark-large { 125 + .app-daemon-blue-large, .phabricator-crumb-view:hover .app-daemon-dark-large { 126 126 background-position: -58px -58px; 127 127 } 128 128 129 - .app-differential-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-differential-light-large { 129 + .app-daemon-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-daemon-light-large { 130 130 background-position: -87px -58px; 131 131 } 132 132 133 - .app-diffusion-light-large { 133 + .app-differential-light-large { 134 134 background-position: -116px -58px; 135 135 } 136 136 137 - .app-diffusion-dark-large { 137 + .app-differential-dark-large { 138 138 background-position: -145px -58px; 139 139 } 140 140 141 - .app-diffusion-blue-large, .phabricator-crumb-view:hover .app-diffusion-dark-large { 141 + .app-differential-blue-large, .phabricator-crumb-view:hover .app-differential-dark-large { 142 142 background-position: -174px -58px; 143 143 } 144 144 145 - .app-diffusion-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diffusion-light-large { 145 + .app-differential-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-differential-light-large { 146 146 background-position: -203px -58px; 147 147 } 148 148 149 - .app-diviner-light-large { 149 + .app-diffusion-light-large { 150 150 background-position: -232px -58px; 151 151 } 152 152 153 - .app-diviner-dark-large { 153 + .app-diffusion-dark-large { 154 154 background-position: -261px -58px; 155 155 } 156 156 157 - .app-diviner-blue-large, .phabricator-crumb-view:hover .app-diviner-dark-large { 157 + .app-diffusion-blue-large, .phabricator-crumb-view:hover .app-diffusion-dark-large { 158 158 background-position: -290px -58px; 159 159 } 160 160 161 - .app-diviner-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diviner-light-large { 161 + .app-diffusion-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diffusion-light-large { 162 162 background-position: -319px -58px; 163 163 } 164 164 165 - .app-drydock-light-large { 165 + .app-diviner-light-large { 166 166 background-position: 0px -87px; 167 167 } 168 168 169 - .app-drydock-dark-large { 169 + .app-diviner-dark-large { 170 170 background-position: -29px -87px; 171 171 } 172 172 173 - .app-drydock-blue-large, .phabricator-crumb-view:hover .app-drydock-dark-large { 173 + .app-diviner-blue-large, .phabricator-crumb-view:hover .app-diviner-dark-large { 174 174 background-position: -58px -87px; 175 175 } 176 176 177 - .app-drydock-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-drydock-light-large { 177 + .app-diviner-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diviner-light-large { 178 178 background-position: -87px -87px; 179 179 } 180 180 181 - .app-fact-light-large { 181 + .app-drydock-light-large { 182 182 background-position: -116px -87px; 183 183 } 184 184 185 - .app-fact-dark-large { 185 + .app-drydock-dark-large { 186 186 background-position: -145px -87px; 187 187 } 188 188 189 - .app-fact-blue-large, .phabricator-crumb-view:hover .app-fact-dark-large { 189 + .app-drydock-blue-large, .phabricator-crumb-view:hover .app-drydock-dark-large { 190 190 background-position: -174px -87px; 191 191 } 192 192 193 - .app-fact-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-fact-light-large { 193 + .app-drydock-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-drydock-light-large { 194 194 background-position: -203px -87px; 195 195 } 196 196 197 - .app-feed-light-large { 197 + .app-fact-light-large { 198 198 background-position: -232px -87px; 199 199 } 200 200 201 - .app-feed-dark-large { 201 + .app-fact-dark-large { 202 202 background-position: -261px -87px; 203 203 } 204 204 205 - .app-feed-blue-large, .phabricator-crumb-view:hover .app-feed-dark-large { 205 + .app-fact-blue-large, .phabricator-crumb-view:hover .app-fact-dark-large { 206 206 background-position: -290px -87px; 207 207 } 208 208 209 - .app-feed-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-feed-light-large { 209 + .app-fact-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-fact-light-large { 210 210 background-position: -319px -87px; 211 211 } 212 212 213 - .app-files-light-large { 213 + .app-feed-light-large { 214 214 background-position: 0px -116px; 215 215 } 216 216 217 - .app-files-dark-large { 217 + .app-feed-dark-large { 218 218 background-position: -29px -116px; 219 219 } 220 220 221 - .app-files-blue-large, .phabricator-crumb-view:hover .app-files-dark-large { 221 + .app-feed-blue-large, .phabricator-crumb-view:hover .app-feed-dark-large { 222 222 background-position: -58px -116px; 223 223 } 224 224 225 - .app-files-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-files-light-large { 225 + .app-feed-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-feed-light-large { 226 226 background-position: -87px -116px; 227 227 } 228 228 229 - .app-flags-light-large { 229 + .app-files-light-large { 230 230 background-position: -116px -116px; 231 231 } 232 232 233 - .app-flags-dark-large { 233 + .app-files-dark-large { 234 234 background-position: -145px -116px; 235 235 } 236 236 237 - .app-flags-blue-large, .phabricator-crumb-view:hover .app-flags-dark-large { 237 + .app-files-blue-large, .phabricator-crumb-view:hover .app-files-dark-large { 238 238 background-position: -174px -116px; 239 239 } 240 240 241 - .app-flags-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-flags-light-large { 241 + .app-files-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-files-light-large { 242 242 background-position: -203px -116px; 243 243 } 244 244 245 - .app-help-light-large { 245 + .app-flags-light-large { 246 246 background-position: -232px -116px; 247 247 } 248 248 249 - .app-help-dark-large { 249 + .app-flags-dark-large { 250 250 background-position: -261px -116px; 251 251 } 252 252 253 - .app-help-blue-large, .phabricator-crumb-view:hover .app-help-dark-large { 253 + .app-flags-blue-large, .phabricator-crumb-view:hover .app-flags-dark-large { 254 254 background-position: -290px -116px; 255 255 } 256 256 257 - .app-help-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-help-light-large { 257 + .app-flags-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-flags-light-large { 258 258 background-position: -319px -116px; 259 259 } 260 260 261 - .app-herald-light-large { 261 + .app-help-light-large { 262 262 background-position: 0px -145px; 263 263 } 264 264 265 - .app-herald-dark-large { 265 + .app-help-dark-large { 266 266 background-position: -29px -145px; 267 267 } 268 268 269 - .app-herald-blue-large, .phabricator-crumb-view:hover .app-herald-dark-large { 269 + .app-help-blue-large, .phabricator-crumb-view:hover .app-help-dark-large { 270 270 background-position: -58px -145px; 271 271 } 272 272 273 - .app-herald-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-herald-light-large { 273 + .app-help-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-help-light-large { 274 274 background-position: -87px -145px; 275 275 } 276 276 277 - .app-home-light-large { 277 + .app-herald-light-large { 278 278 background-position: -116px -145px; 279 279 } 280 280 281 - .app-home-dark-large { 281 + .app-herald-dark-large { 282 282 background-position: -145px -145px; 283 283 } 284 284 285 - .app-home-blue-large, .phabricator-crumb-view:hover .app-home-dark-large { 285 + .app-herald-blue-large, .phabricator-crumb-view:hover .app-herald-dark-large { 286 286 background-position: -174px -145px; 287 287 } 288 288 289 - .app-home-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-home-light-large { 289 + .app-herald-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-herald-light-large { 290 290 background-position: -203px -145px; 291 291 } 292 292 293 - .app-logo-light-large { 293 + .app-home-light-large { 294 294 background-position: -232px -145px; 295 295 } 296 296 297 - .app-logo-dark-large { 297 + .app-home-dark-large { 298 298 background-position: -261px -145px; 299 299 } 300 300 301 - .app-logo-blue-large, .phabricator-crumb-view:hover .app-logo-dark-large { 301 + .app-home-blue-large, .phabricator-crumb-view:hover .app-home-dark-large { 302 302 background-position: -290px -145px; 303 303 } 304 304 305 - .app-logo-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-logo-light-large { 305 + .app-home-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-home-light-large { 306 306 background-position: -319px -145px; 307 307 } 308 308 309 - .app-macro-light-large { 309 + .app-logo-light-large { 310 310 background-position: 0px -174px; 311 311 } 312 312 313 - .app-macro-dark-large { 313 + .app-logo-dark-large { 314 314 background-position: -29px -174px; 315 315 } 316 316 317 - .app-macro-blue-large, .phabricator-crumb-view:hover .app-macro-dark-large { 317 + .app-logo-blue-large, .phabricator-crumb-view:hover .app-logo-dark-large { 318 318 background-position: -58px -174px; 319 319 } 320 320 321 - .app-macro-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-macro-light-large { 321 + .app-logo-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-logo-light-large { 322 322 background-position: -87px -174px; 323 323 } 324 324 325 - .app-mail-light-large { 325 + .app-macro-light-large { 326 326 background-position: -116px -174px; 327 327 } 328 328 329 - .app-mail-dark-large { 329 + .app-macro-dark-large { 330 330 background-position: -145px -174px; 331 331 } 332 332 333 - .app-mail-blue-large, .phabricator-crumb-view:hover .app-mail-dark-large { 333 + .app-macro-blue-large, .phabricator-crumb-view:hover .app-macro-dark-large { 334 334 background-position: -174px -174px; 335 335 } 336 336 337 - .app-mail-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-mail-light-large { 337 + .app-macro-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-macro-light-large { 338 338 background-position: -203px -174px; 339 339 } 340 340 341 - .app-maniphest-light-large { 341 + .app-mail-light-large { 342 342 background-position: -232px -174px; 343 343 } 344 344 345 - .app-maniphest-dark-large { 345 + .app-mail-dark-large { 346 346 background-position: -261px -174px; 347 347 } 348 348 349 - .app-maniphest-blue-large, .phabricator-crumb-view:hover .app-maniphest-dark-large { 349 + .app-mail-blue-large, .phabricator-crumb-view:hover .app-mail-dark-large { 350 350 background-position: -290px -174px; 351 351 } 352 352 353 - .app-maniphest-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-maniphest-light-large { 353 + .app-mail-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-mail-light-large { 354 354 background-position: -319px -174px; 355 355 } 356 356 357 - .app-metamta-light-large { 357 + .app-maniphest-light-large { 358 358 background-position: 0px -203px; 359 359 } 360 360 361 - .app-metamta-dark-large { 361 + .app-maniphest-dark-large { 362 362 background-position: -29px -203px; 363 363 } 364 364 365 - .app-metamta-blue-large, .phabricator-crumb-view:hover .app-metamta-dark-large { 365 + .app-maniphest-blue-large, .phabricator-crumb-view:hover .app-maniphest-dark-large { 366 366 background-position: -58px -203px; 367 367 } 368 368 369 - .app-metamta-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-metamta-light-large { 369 + .app-maniphest-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-maniphest-light-large { 370 370 background-position: -87px -203px; 371 371 } 372 372 373 - .app-owners-light-large { 373 + .app-metamta-light-large { 374 374 background-position: -116px -203px; 375 375 } 376 376 377 - .app-owners-dark-large { 377 + .app-metamta-dark-large { 378 378 background-position: -145px -203px; 379 379 } 380 380 381 - .app-owners-blue-large, .phabricator-crumb-view:hover .app-owners-dark-large { 381 + .app-metamta-blue-large, .phabricator-crumb-view:hover .app-metamta-dark-large { 382 382 background-position: -174px -203px; 383 383 } 384 384 385 - .app-owners-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-owners-light-large { 385 + .app-metamta-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-metamta-light-large { 386 386 background-position: -203px -203px; 387 387 } 388 388 389 - .app-paste-light-large { 389 + .app-owners-light-large { 390 390 background-position: -232px -203px; 391 391 } 392 392 393 - .app-paste-dark-large { 393 + .app-owners-dark-large { 394 394 background-position: -261px -203px; 395 395 } 396 396 397 - .app-paste-blue-large, .phabricator-crumb-view:hover .app-paste-dark-large { 397 + .app-owners-blue-large, .phabricator-crumb-view:hover .app-owners-dark-large { 398 398 background-position: -290px -203px; 399 399 } 400 400 401 - .app-paste-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-paste-light-large { 401 + .app-owners-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-owners-light-large { 402 402 background-position: -319px -203px; 403 403 } 404 404 405 - .app-people-light-large { 405 + .app-paste-light-large { 406 406 background-position: 0px -232px; 407 407 } 408 408 409 - .app-people-dark-large { 409 + .app-paste-dark-large { 410 410 background-position: -29px -232px; 411 411 } 412 412 413 - .app-people-blue-large, .phabricator-crumb-view:hover .app-people-dark-large { 413 + .app-paste-blue-large, .phabricator-crumb-view:hover .app-paste-dark-large { 414 414 background-position: -58px -232px; 415 415 } 416 416 417 - .app-people-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-people-light-large { 417 + .app-paste-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-paste-light-large { 418 418 background-position: -87px -232px; 419 419 } 420 420 421 - .app-phame-light-large { 421 + .app-people-light-large { 422 422 background-position: -116px -232px; 423 423 } 424 424 425 - .app-phame-dark-large { 425 + .app-people-dark-large { 426 426 background-position: -145px -232px; 427 427 } 428 428 429 - .app-phame-blue-large, .phabricator-crumb-view:hover .app-phame-dark-large { 429 + .app-people-blue-large, .phabricator-crumb-view:hover .app-people-dark-large { 430 430 background-position: -174px -232px; 431 431 } 432 432 433 - .app-phame-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phame-light-large { 433 + .app-people-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-people-light-large { 434 434 background-position: -203px -232px; 435 435 } 436 436 437 - .app-phid-light-large { 437 + .app-phame-light-large { 438 438 background-position: -232px -232px; 439 439 } 440 440 441 - .app-phid-dark-large { 441 + .app-phame-dark-large { 442 442 background-position: -261px -232px; 443 443 } 444 444 445 - .app-phid-blue-large, .phabricator-crumb-view:hover .app-phid-dark-large { 445 + .app-phame-blue-large, .phabricator-crumb-view:hover .app-phame-dark-large { 446 446 background-position: -290px -232px; 447 447 } 448 448 449 - .app-phid-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phid-light-large { 449 + .app-phame-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phame-light-large { 450 450 background-position: -319px -232px; 451 451 } 452 452 453 - .app-pholio-light-large { 453 + .app-phid-light-large { 454 454 background-position: 0px -261px; 455 455 } 456 456 457 - .app-pholio-dark-large { 457 + .app-phid-dark-large { 458 458 background-position: -29px -261px; 459 459 } 460 460 461 - .app-pholio-blue-large, .phabricator-crumb-view:hover .app-pholio-dark-large { 461 + .app-phid-blue-large, .phabricator-crumb-view:hover .app-phid-dark-large { 462 462 background-position: -58px -261px; 463 463 } 464 464 465 - .app-pholio-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-pholio-light-large { 465 + .app-phid-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phid-light-large { 466 466 background-position: -87px -261px; 467 467 } 468 468 469 - .app-phpast-light-large { 469 + .app-pholio-light-large { 470 470 background-position: -116px -261px; 471 471 } 472 472 473 - .app-phpast-dark-large { 473 + .app-pholio-dark-large { 474 474 background-position: -145px -261px; 475 475 } 476 476 477 - .app-phpast-blue-large, .phabricator-crumb-view:hover .app-phpast-dark-large { 477 + .app-pholio-blue-large, .phabricator-crumb-view:hover .app-pholio-dark-large { 478 478 background-position: -174px -261px; 479 479 } 480 480 481 - .app-phpast-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phpast-light-large { 481 + .app-pholio-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-pholio-light-large { 482 482 background-position: -203px -261px; 483 483 } 484 484 485 - .app-phriction-light-large { 485 + .app-phpast-light-large { 486 486 background-position: -232px -261px; 487 487 } 488 488 489 - .app-phriction-dark-large { 489 + .app-phpast-dark-large { 490 490 background-position: -261px -261px; 491 491 } 492 492 493 - .app-phriction-blue-large, .phabricator-crumb-view:hover .app-phriction-dark-large { 493 + .app-phpast-blue-large, .phabricator-crumb-view:hover .app-phpast-dark-large { 494 494 background-position: -290px -261px; 495 495 } 496 496 497 - .app-phriction-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phriction-light-large { 497 + .app-phpast-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phpast-light-large { 498 498 background-position: -319px -261px; 499 499 } 500 500 501 - .app-ponder-light-large { 501 + .app-phriction-light-large { 502 502 background-position: 0px -290px; 503 503 } 504 504 505 - .app-ponder-dark-large { 505 + .app-phriction-dark-large { 506 506 background-position: -29px -290px; 507 507 } 508 508 509 - .app-ponder-blue-large, .phabricator-crumb-view:hover .app-ponder-dark-large { 509 + .app-phriction-blue-large, .phabricator-crumb-view:hover .app-phriction-dark-large { 510 510 background-position: -58px -290px; 511 511 } 512 512 513 - .app-ponder-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-ponder-light-large { 513 + .app-phriction-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phriction-light-large { 514 514 background-position: -87px -290px; 515 515 } 516 516 517 - .app-power-light-large { 517 + .app-ponder-light-large { 518 518 background-position: -116px -290px; 519 519 } 520 520 521 - .app-power-dark-large { 521 + .app-ponder-dark-large { 522 522 background-position: -145px -290px; 523 523 } 524 524 525 - .app-power-blue-large, .phabricator-crumb-view:hover .app-power-dark-large { 525 + .app-ponder-blue-large, .phabricator-crumb-view:hover .app-ponder-dark-large { 526 526 background-position: -174px -290px; 527 527 } 528 528 529 - .app-power-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-power-light-large { 529 + .app-ponder-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-ponder-light-large { 530 530 background-position: -203px -290px; 531 531 } 532 532 533 - .app-projects-light-large { 533 + .app-power-light-large { 534 534 background-position: -232px -290px; 535 535 } 536 536 537 - .app-projects-dark-large { 537 + .app-power-dark-large { 538 538 background-position: -261px -290px; 539 539 } 540 540 541 - .app-projects-blue-large, .phabricator-crumb-view:hover .app-projects-dark-large { 541 + .app-power-blue-large, .phabricator-crumb-view:hover .app-power-dark-large { 542 542 background-position: -290px -290px; 543 543 } 544 544 545 - .app-projects-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-projects-light-large { 545 + .app-power-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-power-light-large { 546 546 background-position: -319px -290px; 547 547 } 548 548 549 - .app-repositories-light-large { 549 + .app-projects-light-large { 550 550 background-position: 0px -319px; 551 551 } 552 552 553 - .app-repositories-dark-large { 553 + .app-projects-dark-large { 554 554 background-position: -29px -319px; 555 555 } 556 556 557 - .app-repositories-blue-large, .phabricator-crumb-view:hover .app-repositories-dark-large { 557 + .app-projects-blue-large, .phabricator-crumb-view:hover .app-projects-dark-large { 558 558 background-position: -58px -319px; 559 559 } 560 560 561 - .app-repositories-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-repositories-light-large { 561 + .app-projects-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-projects-light-large { 562 562 background-position: -87px -319px; 563 563 } 564 564 565 - .app-settings-light-large { 565 + .app-repositories-light-large { 566 566 background-position: -116px -319px; 567 567 } 568 568 569 - .app-settings-dark-large { 569 + .app-repositories-dark-large { 570 570 background-position: -145px -319px; 571 571 } 572 572 573 - .app-settings-blue-large, .phabricator-crumb-view:hover .app-settings-dark-large { 573 + .app-repositories-blue-large, .phabricator-crumb-view:hover .app-repositories-dark-large { 574 574 background-position: -174px -319px; 575 575 } 576 576 577 - .app-settings-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-settings-light-large { 577 + .app-repositories-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-repositories-light-large { 578 578 background-position: -203px -319px; 579 579 } 580 580 581 - .app-setup-light-large { 581 + .app-settings-light-large { 582 582 background-position: -232px -319px; 583 583 } 584 584 585 - .app-setup-dark-large { 585 + .app-settings-dark-large { 586 586 background-position: -261px -319px; 587 587 } 588 588 589 - .app-setup-blue-large, .phabricator-crumb-view:hover .app-setup-dark-large { 589 + .app-settings-blue-large, .phabricator-crumb-view:hover .app-settings-dark-large { 590 590 background-position: -290px -319px; 591 591 } 592 592 593 - .app-setup-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-setup-light-large { 593 + .app-settings-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-settings-light-large { 594 594 background-position: -319px -319px; 595 595 } 596 596 597 - .app-slowvote-light-large { 597 + .app-setup-light-large { 598 598 background-position: 0px -348px; 599 599 } 600 600 601 - .app-slowvote-dark-large { 601 + .app-setup-dark-large { 602 602 background-position: -29px -348px; 603 603 } 604 604 605 - .app-slowvote-blue-large, .phabricator-crumb-view:hover .app-slowvote-dark-large { 605 + .app-setup-blue-large, .phabricator-crumb-view:hover .app-setup-dark-large { 606 606 background-position: -58px -348px; 607 607 } 608 608 609 - .app-slowvote-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-slowvote-light-large { 609 + .app-setup-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-setup-light-large { 610 610 background-position: -87px -348px; 611 611 } 612 612 613 - .app-uiexamples-light-large { 613 + .app-slowvote-light-large { 614 614 background-position: -116px -348px; 615 615 } 616 616 617 - .app-uiexamples-dark-large { 617 + .app-slowvote-dark-large { 618 618 background-position: -145px -348px; 619 619 } 620 620 621 - .app-uiexamples-blue-large, .phabricator-crumb-view:hover .app-uiexamples-dark-large { 621 + .app-slowvote-blue-large, .phabricator-crumb-view:hover .app-slowvote-dark-large { 622 622 background-position: -174px -348px; 623 623 } 624 624 625 - .app-uiexamples-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-uiexamples-light-large { 625 + .app-slowvote-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-slowvote-light-large { 626 626 background-position: -203px -348px; 627 627 } 628 + 629 + .app-uiexamples-light-large { 630 + background-position: -232px -348px; 631 + } 632 + 633 + .app-uiexamples-dark-large { 634 + background-position: -261px -348px; 635 + } 636 + 637 + .app-uiexamples-blue-large, .phabricator-crumb-view:hover .app-uiexamples-dark-large { 638 + background-position: -290px -348px; 639 + } 640 + 641 + .app-uiexamples-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-uiexamples-light-large { 642 + background-position: -319px -348px; 643 + }
+38 -34
webroot/rsrc/css/sprite-apps.css
··· 34 34 background-position: -45px 0px; 35 35 } 36 36 37 - .app-countdown-dark { 37 + .app-conpherence-dark { 38 38 background-position: -60px 0px; 39 39 } 40 40 41 - .app-daemon-dark { 41 + .app-countdown-dark { 42 42 background-position: -75px 0px; 43 43 } 44 44 45 - .app-differential-dark { 45 + .app-daemon-dark { 46 46 background-position: 0px -15px; 47 47 } 48 48 49 - .app-diffusion-dark { 49 + .app-differential-dark { 50 50 background-position: -15px -15px; 51 51 } 52 52 53 - .app-diviner-dark { 53 + .app-diffusion-dark { 54 54 background-position: -30px -15px; 55 55 } 56 56 57 - .app-drydock-dark { 57 + .app-diviner-dark { 58 58 background-position: -45px -15px; 59 59 } 60 60 61 - .app-fact-dark { 61 + .app-drydock-dark { 62 62 background-position: -60px -15px; 63 63 } 64 64 65 - .app-feed-dark { 65 + .app-fact-dark { 66 66 background-position: -75px -15px; 67 67 } 68 68 69 - .app-files-dark { 69 + .app-feed-dark { 70 70 background-position: 0px -30px; 71 71 } 72 72 73 - .app-flags-dark { 73 + .app-files-dark { 74 74 background-position: -15px -30px; 75 75 } 76 76 77 - .app-help-dark { 77 + .app-flags-dark { 78 78 background-position: -30px -30px; 79 79 } 80 80 81 - .app-herald-dark { 81 + .app-help-dark { 82 82 background-position: -45px -30px; 83 83 } 84 84 85 - .app-home-dark { 85 + .app-herald-dark { 86 86 background-position: -60px -30px; 87 87 } 88 88 89 - .app-logo-dark { 89 + .app-home-dark { 90 90 background-position: -75px -30px; 91 91 } 92 92 93 - .app-macro-dark { 93 + .app-logo-dark { 94 94 background-position: 0px -45px; 95 95 } 96 96 97 - .app-mail-dark { 97 + .app-macro-dark { 98 98 background-position: -15px -45px; 99 99 } 100 100 101 - .app-maniphest-dark { 101 + .app-mail-dark { 102 102 background-position: -30px -45px; 103 103 } 104 104 105 - .app-metamta-dark { 105 + .app-maniphest-dark { 106 106 background-position: -45px -45px; 107 107 } 108 108 109 - .app-owners-dark { 109 + .app-metamta-dark { 110 110 background-position: -60px -45px; 111 111 } 112 112 113 - .app-paste-dark { 113 + .app-owners-dark { 114 114 background-position: -75px -45px; 115 115 } 116 116 117 - .app-people-dark { 117 + .app-paste-dark { 118 118 background-position: 0px -60px; 119 119 } 120 120 121 - .app-phame-dark { 121 + .app-people-dark { 122 122 background-position: -15px -60px; 123 123 } 124 124 125 - .app-phid-dark { 125 + .app-phame-dark { 126 126 background-position: -30px -60px; 127 127 } 128 128 129 - .app-pholio-dark { 129 + .app-phid-dark { 130 130 background-position: -45px -60px; 131 131 } 132 132 133 - .app-phpast-dark { 133 + .app-pholio-dark { 134 134 background-position: -60px -60px; 135 135 } 136 136 137 - .app-phriction-dark { 137 + .app-phpast-dark { 138 138 background-position: -75px -60px; 139 139 } 140 140 141 - .app-ponder-dark { 141 + .app-phriction-dark { 142 142 background-position: 0px -75px; 143 143 } 144 144 145 - .app-power-dark { 145 + .app-ponder-dark { 146 146 background-position: -15px -75px; 147 147 } 148 148 149 - .app-projects-dark { 149 + .app-power-dark { 150 150 background-position: -30px -75px; 151 151 } 152 152 153 - .app-repositories-dark { 153 + .app-projects-dark { 154 154 background-position: -45px -75px; 155 155 } 156 156 157 - .app-settings-dark { 157 + .app-repositories-dark { 158 158 background-position: -60px -75px; 159 159 } 160 160 161 - .app-setup-dark { 161 + .app-settings-dark { 162 162 background-position: -75px -75px; 163 + } 164 + 165 + .app-setup-dark { 166 + background-position: 0px -90px; 163 167 } 164 168 165 169 .app-slowvote-dark { 166 - background-position: 0px -90px; 170 + background-position: -15px -90px; 167 171 } 168 172 169 173 .app-uiexamples-dark { 170 - background-position: -15px -90px; 174 + background-position: -30px -90px; 171 175 }
+17 -13
webroot/rsrc/css/sprite-menu.css
··· 13 13 only screen and (-webkit-min-device-pixel-ratio: 1.5) { 14 14 .sprite-menu { 15 15 background-image: url(/rsrc/image/sprite-menu-X2.png); 16 - background-size: 140px 127px; 16 + background-size: 140px 88px; 17 17 } 18 18 } 19 19 20 20 21 - .phabricator-main-menu-alert-bubble { 22 - background-position: 0px -68px; 23 - } 24 - 25 - .phabricator-main-menu-alert-bubble.alert-unread { 26 - background-position: 0px -41px; 27 - } 28 - 29 21 .alert-notifications .phabricator-main-menu-alert-icon { 30 22 background-position: 0px 0px; 31 23 } ··· 35 27 } 36 28 37 29 .alert-notifications.alert-unread .phabricator-main-menu-alert-icon { 38 - background-position: -27px -68px; 30 + background-position: -30px 0px; 39 31 } 40 32 41 33 .phabricator-crumb-divider { 42 - background-position: 0px -95px; 34 + background-position: 0px -56px; 43 35 } 44 36 45 37 .menu-icon-eye { 46 - background-position: -47px -41px; 38 + background-position: -10px -56px; 47 39 } 48 40 49 41 .menu-icon-app { 50 - background-position: -42px -68px; 42 + background-position: -35px -56px; 51 43 } 52 44 53 45 .phabricator-main-menu-logo-image { 46 + background-position: 0px -30px; 47 + } 48 + 49 + .alert-notifications .phabricator-main-menu-message-icon { 54 50 background-position: 0px -15px; 55 51 } 52 + 53 + .alert-notifications:hover .phabricator-main-menu-message-icon { 54 + background-position: -15px -15px; 55 + } 56 + 57 + .alert-notifications.message-unread .phabricator-main-menu-message-icon { 58 + background-position: -30px -15px; 59 + }
webroot/rsrc/image/actions/edit.png

This is a binary file and will not be displayed.

webroot/rsrc/image/sprite-apps-X2.png

This is a binary file and will not be displayed.

webroot/rsrc/image/sprite-apps-large-X2.png

This is a binary file and will not be displayed.

webroot/rsrc/image/sprite-apps-large.png

This is a binary file and will not be displayed.

webroot/rsrc/image/sprite-apps.png

This is a binary file and will not be displayed.

webroot/rsrc/image/sprite-menu-X2.png

This is a binary file and will not be displayed.

webroot/rsrc/image/sprite-menu.png

This is a binary file and will not be displayed.

+10 -1
webroot/rsrc/js/application/core/behavior-drag-and-drop.js
··· 2 2 * @provides javelin-behavior-aphront-drag-and-drop 3 3 * @requires javelin-behavior 4 4 * javelin-dom 5 + * phabricator-file-upload 5 6 * phabricator-drag-and-drop-file-upload 6 7 */ 7 8 ··· 16 17 // Show the control, since we have browser support. 17 18 JX.$(config.control).style.display = ''; 18 19 19 - var files = config.value || {}; 20 + var files = {}; 21 + if (config.value) { 22 + for (var k in config.value) { 23 + var file = config.value[k]; 24 + files[k] = new JX.PhabricatorFileUpload() 25 + .setPHID(file.phid) 26 + .setMarkup(file.html); 27 + } 28 + } 20 29 var pending = 0; 21 30 22 31 var list = JX.$(config.list);