1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-01-10 23:01:04 +01:00

Merge branch 'master' into phutil_tag

(Just synchronizing master into the tag branch.)
This commit is contained in:
epriestley 2013-01-27 06:01:27 -08:00
commit f9030885c4
105 changed files with 1620 additions and 1143 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

View file

@ -4,762 +4,782 @@
"app-application-blue-large" : { "app-application-blue-large" : {
"name" : "app-application-blue-large", "name" : "app-application-blue-large",
"rule" : ".app-application-blue-large, .phabricator-crumb-view:hover .app-application-dark-large", "rule" : ".app-application-blue-large, .phabricator-crumb-view:hover .app-application-dark-large",
"hash" : "c8e0319f0c8a3c19bb74391785149424" "hash" : "80f42a283979cef89577721ca6d9cdef"
}, },
"app-application-dark-large" : { "app-application-dark-large" : {
"name" : "app-application-dark-large", "name" : "app-application-dark-large",
"rule" : ".app-application-dark-large", "rule" : ".app-application-dark-large",
"hash" : "a5a904b67bdd26c15b8df07b0b0cee1a" "hash" : "8ab1619bcb768cc1b85106b077d29522"
}, },
"app-application-glow-large" : { "app-application-glow-large" : {
"name" : "app-application-glow-large", "name" : "app-application-glow-large",
"rule" : ".app-application-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-application-light-large", "rule" : ".app-application-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-application-light-large",
"hash" : "04cd8ab1f4785d33d6c9c829dce35cb6" "hash" : "26aedaf7940300f18eb0ef59566a0988"
}, },
"app-application-light-large" : { "app-application-light-large" : {
"name" : "app-application-light-large", "name" : "app-application-light-large",
"rule" : ".app-application-light-large", "rule" : ".app-application-light-large",
"hash" : "8b071cf0efedda7c8c772829d31453ea" "hash" : "09d4ef0cb36255291693971754ec55ee"
}, },
"app-audit-blue-large" : { "app-audit-blue-large" : {
"name" : "app-audit-blue-large", "name" : "app-audit-blue-large",
"rule" : ".app-audit-blue-large, .phabricator-crumb-view:hover .app-audit-dark-large", "rule" : ".app-audit-blue-large, .phabricator-crumb-view:hover .app-audit-dark-large",
"hash" : "cfb6e6c27d6bf4bbf2e07c8d284948d7" "hash" : "05941dc7d5ff156c0e899c6345f6833a"
}, },
"app-audit-dark-large" : { "app-audit-dark-large" : {
"name" : "app-audit-dark-large", "name" : "app-audit-dark-large",
"rule" : ".app-audit-dark-large", "rule" : ".app-audit-dark-large",
"hash" : "0880246fc6aa5d0cec823166af5b388f" "hash" : "cbf8e6c5a580bd3b5169f30d3cd0ec6a"
}, },
"app-audit-glow-large" : { "app-audit-glow-large" : {
"name" : "app-audit-glow-large", "name" : "app-audit-glow-large",
"rule" : ".app-audit-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-audit-light-large", "rule" : ".app-audit-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-audit-light-large",
"hash" : "2f3896e45a05d55c3a95440dbeac9187" "hash" : "5ab43e357c123c05a9db85a964b20252"
}, },
"app-audit-light-large" : { "app-audit-light-large" : {
"name" : "app-audit-light-large", "name" : "app-audit-light-large",
"rule" : ".app-audit-light-large", "rule" : ".app-audit-light-large",
"hash" : "8dd753f716233d2f6edf553df4fde942" "hash" : "aa853bebb7a315b994f1527247e3b362"
}, },
"app-calendar-blue-large" : { "app-calendar-blue-large" : {
"name" : "app-calendar-blue-large", "name" : "app-calendar-blue-large",
"rule" : ".app-calendar-blue-large, .phabricator-crumb-view:hover .app-calendar-dark-large", "rule" : ".app-calendar-blue-large, .phabricator-crumb-view:hover .app-calendar-dark-large",
"hash" : "a05add9fa18df8a98cf2735cf27ec6e1" "hash" : "9e530feec2926878ee7eaa8a04a8607b"
}, },
"app-calendar-dark-large" : { "app-calendar-dark-large" : {
"name" : "app-calendar-dark-large", "name" : "app-calendar-dark-large",
"rule" : ".app-calendar-dark-large", "rule" : ".app-calendar-dark-large",
"hash" : "5c98faf324152ec55bad6ac76f77ec00" "hash" : "65de91c173d169bbf407c9e7cefa9715"
}, },
"app-calendar-glow-large" : { "app-calendar-glow-large" : {
"name" : "app-calendar-glow-large", "name" : "app-calendar-glow-large",
"rule" : ".app-calendar-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-calendar-light-large", "rule" : ".app-calendar-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-calendar-light-large",
"hash" : "d1a7c623c5b3d902a389fc2ea8941858" "hash" : "1dc738045b09476feebe5e705a61b7a9"
}, },
"app-calendar-light-large" : { "app-calendar-light-large" : {
"name" : "app-calendar-light-large", "name" : "app-calendar-light-large",
"rule" : ".app-calendar-light-large", "rule" : ".app-calendar-light-large",
"hash" : "466b97737778eff91ebd9afabac6e5a6" "hash" : "043dab56a011f84f5affc2c7c13e3a39"
}, },
"app-conduit-blue-large" : { "app-conduit-blue-large" : {
"name" : "app-conduit-blue-large", "name" : "app-conduit-blue-large",
"rule" : ".app-conduit-blue-large, .phabricator-crumb-view:hover .app-conduit-dark-large", "rule" : ".app-conduit-blue-large, .phabricator-crumb-view:hover .app-conduit-dark-large",
"hash" : "ed8208ab196da7da6160edbdb0be118a" "hash" : "4ab937882a119bacc0206029cbd7919d"
}, },
"app-conduit-dark-large" : { "app-conduit-dark-large" : {
"name" : "app-conduit-dark-large", "name" : "app-conduit-dark-large",
"rule" : ".app-conduit-dark-large", "rule" : ".app-conduit-dark-large",
"hash" : "bad7559ed9928596c0241d8490e67422" "hash" : "34de5192c69af7a9cf3941f7b5cb088e"
}, },
"app-conduit-glow-large" : { "app-conduit-glow-large" : {
"name" : "app-conduit-glow-large", "name" : "app-conduit-glow-large",
"rule" : ".app-conduit-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-conduit-light-large", "rule" : ".app-conduit-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-conduit-light-large",
"hash" : "072c3ca188a60e9ee08c6eb36b8628c9" "hash" : "b89b969a7fba76d39c768ac8de19c964"
}, },
"app-conduit-light-large" : { "app-conduit-light-large" : {
"name" : "app-conduit-light-large", "name" : "app-conduit-light-large",
"rule" : ".app-conduit-light-large", "rule" : ".app-conduit-light-large",
"hash" : "92047e758fac063dfb0608863ee66b7e" "hash" : "a2fd3cfe6e4e46d589e0e99f52e7f6f0"
},
"app-conpherence-blue-large" : {
"name" : "app-conpherence-blue-large",
"rule" : ".app-conpherence-blue-large, .phabricator-crumb-view:hover .app-conpherence-dark-large",
"hash" : "efcf3788ac60484d5920b37c1560e565"
},
"app-conpherence-dark-large" : {
"name" : "app-conpherence-dark-large",
"rule" : ".app-conpherence-dark-large",
"hash" : "2722117e3da8c2dbc478d957fb21ca53"
},
"app-conpherence-glow-large" : {
"name" : "app-conpherence-glow-large",
"rule" : ".app-conpherence-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-conpherence-light-large",
"hash" : "efa3c29ad40680fca2d62e0b180e709f"
},
"app-conpherence-light-large" : {
"name" : "app-conpherence-light-large",
"rule" : ".app-conpherence-light-large",
"hash" : "a79e5f0094caf9f012f3e9d7a10f2bac"
}, },
"app-countdown-blue-large" : { "app-countdown-blue-large" : {
"name" : "app-countdown-blue-large", "name" : "app-countdown-blue-large",
"rule" : ".app-countdown-blue-large, .phabricator-crumb-view:hover .app-countdown-dark-large", "rule" : ".app-countdown-blue-large, .phabricator-crumb-view:hover .app-countdown-dark-large",
"hash" : "d44b7acae6b6b052ac869f0176b66b89" "hash" : "a4079b8e55924b7590011b35ba9bfdb0"
}, },
"app-countdown-dark-large" : { "app-countdown-dark-large" : {
"name" : "app-countdown-dark-large", "name" : "app-countdown-dark-large",
"rule" : ".app-countdown-dark-large", "rule" : ".app-countdown-dark-large",
"hash" : "dc7df8202a5fa7baf17fd446a9b5c4c5" "hash" : "25547923eb9927ed0c30804fafd471d3"
}, },
"app-countdown-glow-large" : { "app-countdown-glow-large" : {
"name" : "app-countdown-glow-large", "name" : "app-countdown-glow-large",
"rule" : ".app-countdown-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-countdown-light-large", "rule" : ".app-countdown-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-countdown-light-large",
"hash" : "3b972002d629a49a4eca9049a9b2c6ae" "hash" : "472fcd5cf9f292b0d2f9f275541fed18"
}, },
"app-countdown-light-large" : { "app-countdown-light-large" : {
"name" : "app-countdown-light-large", "name" : "app-countdown-light-large",
"rule" : ".app-countdown-light-large", "rule" : ".app-countdown-light-large",
"hash" : "8f3814f70c1cb0475dd4678cc8937d91" "hash" : "24bac143e049862bed161d819990cee0"
}, },
"app-daemon-blue-large" : { "app-daemon-blue-large" : {
"name" : "app-daemon-blue-large", "name" : "app-daemon-blue-large",
"rule" : ".app-daemon-blue-large, .phabricator-crumb-view:hover .app-daemon-dark-large", "rule" : ".app-daemon-blue-large, .phabricator-crumb-view:hover .app-daemon-dark-large",
"hash" : "c922a7e7ec9467ca48b2a2573904b7ce" "hash" : "beb6586864ef67a7bd7a9a159b8c2a56"
}, },
"app-daemon-dark-large" : { "app-daemon-dark-large" : {
"name" : "app-daemon-dark-large", "name" : "app-daemon-dark-large",
"rule" : ".app-daemon-dark-large", "rule" : ".app-daemon-dark-large",
"hash" : "b2e566baac0c579563bd5bd700deb41b" "hash" : "cf2e12b2967d155c437862bbb9ce2d86"
}, },
"app-daemon-glow-large" : { "app-daemon-glow-large" : {
"name" : "app-daemon-glow-large", "name" : "app-daemon-glow-large",
"rule" : ".app-daemon-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-daemon-light-large", "rule" : ".app-daemon-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-daemon-light-large",
"hash" : "1c8e2776b9b984b804f6dca073f101eb" "hash" : "1728089df503ec805b42e262b196b616"
}, },
"app-daemon-light-large" : { "app-daemon-light-large" : {
"name" : "app-daemon-light-large", "name" : "app-daemon-light-large",
"rule" : ".app-daemon-light-large", "rule" : ".app-daemon-light-large",
"hash" : "9c778b43f9f7380fc9bd862c097bbaa8" "hash" : "44328612154fbf1a2f0f6ff28cd23521"
}, },
"app-differential-blue-large" : { "app-differential-blue-large" : {
"name" : "app-differential-blue-large", "name" : "app-differential-blue-large",
"rule" : ".app-differential-blue-large, .phabricator-crumb-view:hover .app-differential-dark-large", "rule" : ".app-differential-blue-large, .phabricator-crumb-view:hover .app-differential-dark-large",
"hash" : "59049df6a30c816ea68d3025da79a091" "hash" : "9491284c8cbf77df0795bdf9cd16651e"
}, },
"app-differential-dark-large" : { "app-differential-dark-large" : {
"name" : "app-differential-dark-large", "name" : "app-differential-dark-large",
"rule" : ".app-differential-dark-large", "rule" : ".app-differential-dark-large",
"hash" : "fd1e0f1fa97b00c7409ebfdc56cf4865" "hash" : "a4b2ac4d4f697896e3abe9e58501fea5"
}, },
"app-differential-glow-large" : { "app-differential-glow-large" : {
"name" : "app-differential-glow-large", "name" : "app-differential-glow-large",
"rule" : ".app-differential-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-differential-light-large", "rule" : ".app-differential-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-differential-light-large",
"hash" : "3997a58a26389e8ede8022fd05cf8b43" "hash" : "d7e777585cc826becb64042f8bb31fc5"
}, },
"app-differential-light-large" : { "app-differential-light-large" : {
"name" : "app-differential-light-large", "name" : "app-differential-light-large",
"rule" : ".app-differential-light-large", "rule" : ".app-differential-light-large",
"hash" : "b5c750e09f57a787e89f32820f791c4a" "hash" : "a763d63d22cac8226d8bd5656221a91b"
}, },
"app-diffusion-blue-large" : { "app-diffusion-blue-large" : {
"name" : "app-diffusion-blue-large", "name" : "app-diffusion-blue-large",
"rule" : ".app-diffusion-blue-large, .phabricator-crumb-view:hover .app-diffusion-dark-large", "rule" : ".app-diffusion-blue-large, .phabricator-crumb-view:hover .app-diffusion-dark-large",
"hash" : "b982cfacfde43d3267082bca236bc72c" "hash" : "35e35c07ca1a151c810bb38a90496a2d"
}, },
"app-diffusion-dark-large" : { "app-diffusion-dark-large" : {
"name" : "app-diffusion-dark-large", "name" : "app-diffusion-dark-large",
"rule" : ".app-diffusion-dark-large", "rule" : ".app-diffusion-dark-large",
"hash" : "2eb71cde4af83347efdee542f4cadd8e" "hash" : "5b3752babd557f2c9bbc0120bd9a0747"
}, },
"app-diffusion-glow-large" : { "app-diffusion-glow-large" : {
"name" : "app-diffusion-glow-large", "name" : "app-diffusion-glow-large",
"rule" : ".app-diffusion-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diffusion-light-large", "rule" : ".app-diffusion-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diffusion-light-large",
"hash" : "55873c2e30e693e7bde0f4a90045064d" "hash" : "a5a682fffa03d4cdae9a86b8c79d1a81"
}, },
"app-diffusion-light-large" : { "app-diffusion-light-large" : {
"name" : "app-diffusion-light-large", "name" : "app-diffusion-light-large",
"rule" : ".app-diffusion-light-large", "rule" : ".app-diffusion-light-large",
"hash" : "6eeb6f6df3ecd1ee923081b2d82f0505" "hash" : "1f04606fe4f0650982327bf09bf5adc0"
}, },
"app-diviner-blue-large" : { "app-diviner-blue-large" : {
"name" : "app-diviner-blue-large", "name" : "app-diviner-blue-large",
"rule" : ".app-diviner-blue-large, .phabricator-crumb-view:hover .app-diviner-dark-large", "rule" : ".app-diviner-blue-large, .phabricator-crumb-view:hover .app-diviner-dark-large",
"hash" : "bda64f504c0c2c34125758bd01c80e05" "hash" : "97f1242c914315cf773c27bbec964335"
}, },
"app-diviner-dark-large" : { "app-diviner-dark-large" : {
"name" : "app-diviner-dark-large", "name" : "app-diviner-dark-large",
"rule" : ".app-diviner-dark-large", "rule" : ".app-diviner-dark-large",
"hash" : "786a865464564d66d458557c909a77ea" "hash" : "c4f0550826f60fcd48d6ebcd340184b4"
}, },
"app-diviner-glow-large" : { "app-diviner-glow-large" : {
"name" : "app-diviner-glow-large", "name" : "app-diviner-glow-large",
"rule" : ".app-diviner-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diviner-light-large", "rule" : ".app-diviner-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diviner-light-large",
"hash" : "d173b3a659a2a4b5af5890ba70e827d1" "hash" : "7f7f0e1886036d894a5b22b72872ad06"
}, },
"app-diviner-light-large" : { "app-diviner-light-large" : {
"name" : "app-diviner-light-large", "name" : "app-diviner-light-large",
"rule" : ".app-diviner-light-large", "rule" : ".app-diviner-light-large",
"hash" : "c515bc52cb560adebce1e84bb5d917ce" "hash" : "b13413ada716fa7d3449c38b11decd5d"
}, },
"app-drydock-blue-large" : { "app-drydock-blue-large" : {
"name" : "app-drydock-blue-large", "name" : "app-drydock-blue-large",
"rule" : ".app-drydock-blue-large, .phabricator-crumb-view:hover .app-drydock-dark-large", "rule" : ".app-drydock-blue-large, .phabricator-crumb-view:hover .app-drydock-dark-large",
"hash" : "ba82e330a78dd60df033560e083601cf" "hash" : "a63aaba405583e356f00af6bc1dedfad"
}, },
"app-drydock-dark-large" : { "app-drydock-dark-large" : {
"name" : "app-drydock-dark-large", "name" : "app-drydock-dark-large",
"rule" : ".app-drydock-dark-large", "rule" : ".app-drydock-dark-large",
"hash" : "7a41b9668c77b85b8acf048d9e61c50a" "hash" : "a97be15640a38db803cc03215968e856"
}, },
"app-drydock-glow-large" : { "app-drydock-glow-large" : {
"name" : "app-drydock-glow-large", "name" : "app-drydock-glow-large",
"rule" : ".app-drydock-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-drydock-light-large", "rule" : ".app-drydock-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-drydock-light-large",
"hash" : "f5866c62ecbc94ecacd1563d2780677d" "hash" : "d7beac10376044ffda0adbe6ed01e645"
}, },
"app-drydock-light-large" : { "app-drydock-light-large" : {
"name" : "app-drydock-light-large", "name" : "app-drydock-light-large",
"rule" : ".app-drydock-light-large", "rule" : ".app-drydock-light-large",
"hash" : "2c1ce32d5d5291e7d3d3d6e9323a2a65" "hash" : "712c8fa45f964e0c4cbb69321fd1fded"
}, },
"app-fact-blue-large" : { "app-fact-blue-large" : {
"name" : "app-fact-blue-large", "name" : "app-fact-blue-large",
"rule" : ".app-fact-blue-large, .phabricator-crumb-view:hover .app-fact-dark-large", "rule" : ".app-fact-blue-large, .phabricator-crumb-view:hover .app-fact-dark-large",
"hash" : "1e2b911cb36b0d44384487e348892ccc" "hash" : "4b07b51e2178f12533c04c55d522d9e5"
}, },
"app-fact-dark-large" : { "app-fact-dark-large" : {
"name" : "app-fact-dark-large", "name" : "app-fact-dark-large",
"rule" : ".app-fact-dark-large", "rule" : ".app-fact-dark-large",
"hash" : "5fb4a988baad433e9900f1a814b89caa" "hash" : "6040fe830d8f0868cdb38ee2b8ee16ac"
}, },
"app-fact-glow-large" : { "app-fact-glow-large" : {
"name" : "app-fact-glow-large", "name" : "app-fact-glow-large",
"rule" : ".app-fact-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-fact-light-large", "rule" : ".app-fact-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-fact-light-large",
"hash" : "5bd7e5f2adfa0935ae97270139ec4912" "hash" : "691ab101af38d4f06421ca0b22e463d9"
}, },
"app-fact-light-large" : { "app-fact-light-large" : {
"name" : "app-fact-light-large", "name" : "app-fact-light-large",
"rule" : ".app-fact-light-large", "rule" : ".app-fact-light-large",
"hash" : "3bc45d399dad8ec8d55873714c42c1d7" "hash" : "8253f813361ba065866ee6e6e2077320"
}, },
"app-feed-blue-large" : { "app-feed-blue-large" : {
"name" : "app-feed-blue-large", "name" : "app-feed-blue-large",
"rule" : ".app-feed-blue-large, .phabricator-crumb-view:hover .app-feed-dark-large", "rule" : ".app-feed-blue-large, .phabricator-crumb-view:hover .app-feed-dark-large",
"hash" : "3bcdec795b38002644a8009c927a0acc" "hash" : "462246f99422c86301b7d4faa67d9488"
}, },
"app-feed-dark-large" : { "app-feed-dark-large" : {
"name" : "app-feed-dark-large", "name" : "app-feed-dark-large",
"rule" : ".app-feed-dark-large", "rule" : ".app-feed-dark-large",
"hash" : "e83834eccc699399b604069b95465cff" "hash" : "0eecff752dc5dde55e7feaa52b7ee7d0"
}, },
"app-feed-glow-large" : { "app-feed-glow-large" : {
"name" : "app-feed-glow-large", "name" : "app-feed-glow-large",
"rule" : ".app-feed-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-feed-light-large", "rule" : ".app-feed-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-feed-light-large",
"hash" : "ca2fb9a2cd437b465f5d912a4d26f3e5" "hash" : "45fe559a997e540933c184ae570a6ddc"
}, },
"app-feed-light-large" : { "app-feed-light-large" : {
"name" : "app-feed-light-large", "name" : "app-feed-light-large",
"rule" : ".app-feed-light-large", "rule" : ".app-feed-light-large",
"hash" : "e3a8add13539550ddaab62f84b30dd66" "hash" : "2ec6e12956fe1e1b746261bb3d0a0d36"
}, },
"app-files-blue-large" : { "app-files-blue-large" : {
"name" : "app-files-blue-large", "name" : "app-files-blue-large",
"rule" : ".app-files-blue-large, .phabricator-crumb-view:hover .app-files-dark-large", "rule" : ".app-files-blue-large, .phabricator-crumb-view:hover .app-files-dark-large",
"hash" : "4505af3a9261a1ee4e00bf1d046286dd" "hash" : "f9217c49be154a830303285ae64790c8"
}, },
"app-files-dark-large" : { "app-files-dark-large" : {
"name" : "app-files-dark-large", "name" : "app-files-dark-large",
"rule" : ".app-files-dark-large", "rule" : ".app-files-dark-large",
"hash" : "1d229c79f3b8301ca1ee38ccd9c7c142" "hash" : "78fb66b9edc99c3694325548582f0506"
}, },
"app-files-glow-large" : { "app-files-glow-large" : {
"name" : "app-files-glow-large", "name" : "app-files-glow-large",
"rule" : ".app-files-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-files-light-large", "rule" : ".app-files-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-files-light-large",
"hash" : "4bd7617617d0af975282bdd9a399d0ab" "hash" : "cabf071ace59043fc877f1e962109c83"
}, },
"app-files-light-large" : { "app-files-light-large" : {
"name" : "app-files-light-large", "name" : "app-files-light-large",
"rule" : ".app-files-light-large", "rule" : ".app-files-light-large",
"hash" : "0d8bf609759312d89e2a4b148f0701d8" "hash" : "ee5503d0684ea20be40023a29589d322"
}, },
"app-flags-blue-large" : { "app-flags-blue-large" : {
"name" : "app-flags-blue-large", "name" : "app-flags-blue-large",
"rule" : ".app-flags-blue-large, .phabricator-crumb-view:hover .app-flags-dark-large", "rule" : ".app-flags-blue-large, .phabricator-crumb-view:hover .app-flags-dark-large",
"hash" : "a6f52b520f88e4ef60b7a76fb3c2c597" "hash" : "8bbdefdaba30bf6a020f8515ee33d452"
}, },
"app-flags-dark-large" : { "app-flags-dark-large" : {
"name" : "app-flags-dark-large", "name" : "app-flags-dark-large",
"rule" : ".app-flags-dark-large", "rule" : ".app-flags-dark-large",
"hash" : "51307234bb3c309b3ea69381e0b72b16" "hash" : "c6824e1362ec59ccf9ad8f451da466c1"
}, },
"app-flags-glow-large" : { "app-flags-glow-large" : {
"name" : "app-flags-glow-large", "name" : "app-flags-glow-large",
"rule" : ".app-flags-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-flags-light-large", "rule" : ".app-flags-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-flags-light-large",
"hash" : "75c1c107f4e750ef27bf50b4b51b0e00" "hash" : "e728b1018c62d24efa5d416d138cb671"
}, },
"app-flags-light-large" : { "app-flags-light-large" : {
"name" : "app-flags-light-large", "name" : "app-flags-light-large",
"rule" : ".app-flags-light-large", "rule" : ".app-flags-light-large",
"hash" : "8c198ba5bcd146595870bab777d4992e" "hash" : "4a40dc3e18011a8283840e5dfbe14dc9"
}, },
"app-help-blue-large" : { "app-help-blue-large" : {
"name" : "app-help-blue-large", "name" : "app-help-blue-large",
"rule" : ".app-help-blue-large, .phabricator-crumb-view:hover .app-help-dark-large", "rule" : ".app-help-blue-large, .phabricator-crumb-view:hover .app-help-dark-large",
"hash" : "a74c4f436b2e70c0e06f4224953d064a" "hash" : "703f8c674cdd22f1314ffe8977acf35b"
}, },
"app-help-dark-large" : { "app-help-dark-large" : {
"name" : "app-help-dark-large", "name" : "app-help-dark-large",
"rule" : ".app-help-dark-large", "rule" : ".app-help-dark-large",
"hash" : "3cbd366c4b5758e45ef07507c70f68c0" "hash" : "601aaf7047f9db41baf7e3393b0d7aeb"
}, },
"app-help-glow-large" : { "app-help-glow-large" : {
"name" : "app-help-glow-large", "name" : "app-help-glow-large",
"rule" : ".app-help-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-help-light-large", "rule" : ".app-help-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-help-light-large",
"hash" : "c795358a116961342b206821a1b8038b" "hash" : "1a2928f28cbfdcc31f411e7d2dc26447"
}, },
"app-help-light-large" : { "app-help-light-large" : {
"name" : "app-help-light-large", "name" : "app-help-light-large",
"rule" : ".app-help-light-large", "rule" : ".app-help-light-large",
"hash" : "722eceffe63605b00a5b957b5f40db98" "hash" : "c17b8e6228f844777177c5070e17dd91"
}, },
"app-herald-blue-large" : { "app-herald-blue-large" : {
"name" : "app-herald-blue-large", "name" : "app-herald-blue-large",
"rule" : ".app-herald-blue-large, .phabricator-crumb-view:hover .app-herald-dark-large", "rule" : ".app-herald-blue-large, .phabricator-crumb-view:hover .app-herald-dark-large",
"hash" : "9edfe47e8f1f2c4f1071f4d8b6ed346d" "hash" : "4bf9b4b872e7207d66c6e80dcad47b0e"
}, },
"app-herald-dark-large" : { "app-herald-dark-large" : {
"name" : "app-herald-dark-large", "name" : "app-herald-dark-large",
"rule" : ".app-herald-dark-large", "rule" : ".app-herald-dark-large",
"hash" : "4b7a3ab5e0b6a04224ccb6e520e73d6e" "hash" : "e19fd614bf5f904603517df957165b22"
}, },
"app-herald-glow-large" : { "app-herald-glow-large" : {
"name" : "app-herald-glow-large", "name" : "app-herald-glow-large",
"rule" : ".app-herald-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-herald-light-large", "rule" : ".app-herald-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-herald-light-large",
"hash" : "22beef0629ee517ba1a2b822ed440d0c" "hash" : "13ef725e4f2da68211cf9ab17740c723"
}, },
"app-herald-light-large" : { "app-herald-light-large" : {
"name" : "app-herald-light-large", "name" : "app-herald-light-large",
"rule" : ".app-herald-light-large", "rule" : ".app-herald-light-large",
"hash" : "65bbeb68fd051b77f4871aafe2994f56" "hash" : "81af2b9899db0b5c877d96016ddfa1a1"
}, },
"app-home-blue-large" : { "app-home-blue-large" : {
"name" : "app-home-blue-large", "name" : "app-home-blue-large",
"rule" : ".app-home-blue-large, .phabricator-crumb-view:hover .app-home-dark-large", "rule" : ".app-home-blue-large, .phabricator-crumb-view:hover .app-home-dark-large",
"hash" : "7df64082c33dcc3d2263772c0393be70" "hash" : "7011cb276b9d7d1f042d2f0393a74312"
}, },
"app-home-dark-large" : { "app-home-dark-large" : {
"name" : "app-home-dark-large", "name" : "app-home-dark-large",
"rule" : ".app-home-dark-large", "rule" : ".app-home-dark-large",
"hash" : "79acb839094adcb3ad94567c054801eb" "hash" : "6b7f677ad630593900132f6271c41cb4"
}, },
"app-home-glow-large" : { "app-home-glow-large" : {
"name" : "app-home-glow-large", "name" : "app-home-glow-large",
"rule" : ".app-home-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-home-light-large", "rule" : ".app-home-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-home-light-large",
"hash" : "5af620ae48ba98ee4ee594c32ba761cb" "hash" : "8b61be58e6a4f0e9e73434c40844260b"
}, },
"app-home-light-large" : { "app-home-light-large" : {
"name" : "app-home-light-large", "name" : "app-home-light-large",
"rule" : ".app-home-light-large", "rule" : ".app-home-light-large",
"hash" : "181a71639319f3beda59809963384250" "hash" : "f0740b16cd3746a1234070f1785c03eb"
}, },
"app-logo-blue-large" : { "app-logo-blue-large" : {
"name" : "app-logo-blue-large", "name" : "app-logo-blue-large",
"rule" : ".app-logo-blue-large, .phabricator-crumb-view:hover .app-logo-dark-large", "rule" : ".app-logo-blue-large, .phabricator-crumb-view:hover .app-logo-dark-large",
"hash" : "025f46665b079f5899ec53be09165d09" "hash" : "64a8124698f9441f50230f3a63364dd7"
}, },
"app-logo-dark-large" : { "app-logo-dark-large" : {
"name" : "app-logo-dark-large", "name" : "app-logo-dark-large",
"rule" : ".app-logo-dark-large", "rule" : ".app-logo-dark-large",
"hash" : "20524d2868b7b57423aa8dc27b284cac" "hash" : "8023a60fcba24c3f200214152a62a2c3"
}, },
"app-logo-glow-large" : { "app-logo-glow-large" : {
"name" : "app-logo-glow-large", "name" : "app-logo-glow-large",
"rule" : ".app-logo-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-logo-light-large", "rule" : ".app-logo-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-logo-light-large",
"hash" : "3969545781a17ec856bacec4ed110506" "hash" : "c742c782b92cc5fecdc1a9747568ad70"
}, },
"app-logo-light-large" : { "app-logo-light-large" : {
"name" : "app-logo-light-large", "name" : "app-logo-light-large",
"rule" : ".app-logo-light-large", "rule" : ".app-logo-light-large",
"hash" : "bd1b66ffad9ee26019738fc00a7eb343" "hash" : "52fc06fb90f7ec1c29498069b1a059b2"
}, },
"app-macro-blue-large" : { "app-macro-blue-large" : {
"name" : "app-macro-blue-large", "name" : "app-macro-blue-large",
"rule" : ".app-macro-blue-large, .phabricator-crumb-view:hover .app-macro-dark-large", "rule" : ".app-macro-blue-large, .phabricator-crumb-view:hover .app-macro-dark-large",
"hash" : "a6116a196718bf6cd5337b4c49de710e" "hash" : "50c14fec9a7f913c8aa4a2793bf2867c"
}, },
"app-macro-dark-large" : { "app-macro-dark-large" : {
"name" : "app-macro-dark-large", "name" : "app-macro-dark-large",
"rule" : ".app-macro-dark-large", "rule" : ".app-macro-dark-large",
"hash" : "583a495f319fb63f99400b0197832dce" "hash" : "890cde6b9407d00c6394d446974674ff"
}, },
"app-macro-glow-large" : { "app-macro-glow-large" : {
"name" : "app-macro-glow-large", "name" : "app-macro-glow-large",
"rule" : ".app-macro-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-macro-light-large", "rule" : ".app-macro-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-macro-light-large",
"hash" : "16d2c3aeabb43a51bb5742c67c4b92a1" "hash" : "a3aaa9ebca64e5659e8c3c4eebdedd7a"
}, },
"app-macro-light-large" : { "app-macro-light-large" : {
"name" : "app-macro-light-large", "name" : "app-macro-light-large",
"rule" : ".app-macro-light-large", "rule" : ".app-macro-light-large",
"hash" : "b073066348826c93f57ba76f746e5c7e" "hash" : "7dcba4f0560b9e197849f5540b7ec66d"
}, },
"app-mail-blue-large" : { "app-mail-blue-large" : {
"name" : "app-mail-blue-large", "name" : "app-mail-blue-large",
"rule" : ".app-mail-blue-large, .phabricator-crumb-view:hover .app-mail-dark-large", "rule" : ".app-mail-blue-large, .phabricator-crumb-view:hover .app-mail-dark-large",
"hash" : "192f85bd7a5be296de7acff9bbc9bd1d" "hash" : "a0a94c194794bb435ea3152ecb2cd42d"
}, },
"app-mail-dark-large" : { "app-mail-dark-large" : {
"name" : "app-mail-dark-large", "name" : "app-mail-dark-large",
"rule" : ".app-mail-dark-large", "rule" : ".app-mail-dark-large",
"hash" : "4709516a74216e0ba886a30180ad93d4" "hash" : "1a1437047fd24b9bb2643435185b6f13"
}, },
"app-mail-glow-large" : { "app-mail-glow-large" : {
"name" : "app-mail-glow-large", "name" : "app-mail-glow-large",
"rule" : ".app-mail-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-mail-light-large", "rule" : ".app-mail-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-mail-light-large",
"hash" : "1f0d2be98c3771791db7a9ad20784872" "hash" : "141548cae4bf8265be9452e583be3504"
}, },
"app-mail-light-large" : { "app-mail-light-large" : {
"name" : "app-mail-light-large", "name" : "app-mail-light-large",
"rule" : ".app-mail-light-large", "rule" : ".app-mail-light-large",
"hash" : "740ea3d3104365ab7bad981b13d23693" "hash" : "27aec2b8d5bd1fb7eba00ffbaacf1930"
}, },
"app-maniphest-blue-large" : { "app-maniphest-blue-large" : {
"name" : "app-maniphest-blue-large", "name" : "app-maniphest-blue-large",
"rule" : ".app-maniphest-blue-large, .phabricator-crumb-view:hover .app-maniphest-dark-large", "rule" : ".app-maniphest-blue-large, .phabricator-crumb-view:hover .app-maniphest-dark-large",
"hash" : "d667667cc5216ff510cb58c359ffc2a4" "hash" : "619ff6fea2c90a8d70b000ed0ece6e4b"
}, },
"app-maniphest-dark-large" : { "app-maniphest-dark-large" : {
"name" : "app-maniphest-dark-large", "name" : "app-maniphest-dark-large",
"rule" : ".app-maniphest-dark-large", "rule" : ".app-maniphest-dark-large",
"hash" : "acadb7737b24ecc23e892cdaab7c1fe2" "hash" : "7a204fc2f4779eff27847bf799652140"
}, },
"app-maniphest-glow-large" : { "app-maniphest-glow-large" : {
"name" : "app-maniphest-glow-large", "name" : "app-maniphest-glow-large",
"rule" : ".app-maniphest-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-maniphest-light-large", "rule" : ".app-maniphest-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-maniphest-light-large",
"hash" : "8dccd7ba95ddffc4e071e42b69773f5c" "hash" : "2b67eff9fb01bdf0972749532301e038"
}, },
"app-maniphest-light-large" : { "app-maniphest-light-large" : {
"name" : "app-maniphest-light-large", "name" : "app-maniphest-light-large",
"rule" : ".app-maniphest-light-large", "rule" : ".app-maniphest-light-large",
"hash" : "0d2c71a1279686c3884c267d98bc36ba" "hash" : "90ea395741410840b1b4a974f802b06c"
}, },
"app-metamta-blue-large" : { "app-metamta-blue-large" : {
"name" : "app-metamta-blue-large", "name" : "app-metamta-blue-large",
"rule" : ".app-metamta-blue-large, .phabricator-crumb-view:hover .app-metamta-dark-large", "rule" : ".app-metamta-blue-large, .phabricator-crumb-view:hover .app-metamta-dark-large",
"hash" : "1757d281dcdbdf221ca2b2e90993dba8" "hash" : "48af88efc2887cc985f09d5202922df0"
}, },
"app-metamta-dark-large" : { "app-metamta-dark-large" : {
"name" : "app-metamta-dark-large", "name" : "app-metamta-dark-large",
"rule" : ".app-metamta-dark-large", "rule" : ".app-metamta-dark-large",
"hash" : "c5f3a7468d98ebb977bfb0cc81abd5ee" "hash" : "bf18a2c7ef31e72dc9ce6695035baf60"
}, },
"app-metamta-glow-large" : { "app-metamta-glow-large" : {
"name" : "app-metamta-glow-large", "name" : "app-metamta-glow-large",
"rule" : ".app-metamta-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-metamta-light-large", "rule" : ".app-metamta-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-metamta-light-large",
"hash" : "5f7b115d45e5d3a5a5a730173366f2e4" "hash" : "74c00295bf0d394e6427593665a271f1"
}, },
"app-metamta-light-large" : { "app-metamta-light-large" : {
"name" : "app-metamta-light-large", "name" : "app-metamta-light-large",
"rule" : ".app-metamta-light-large", "rule" : ".app-metamta-light-large",
"hash" : "13ce4ca0f223cda37e3af39da8c6e564" "hash" : "720cc7f66ab36770998aa4fe9ad22785"
}, },
"app-owners-blue-large" : { "app-owners-blue-large" : {
"name" : "app-owners-blue-large", "name" : "app-owners-blue-large",
"rule" : ".app-owners-blue-large, .phabricator-crumb-view:hover .app-owners-dark-large", "rule" : ".app-owners-blue-large, .phabricator-crumb-view:hover .app-owners-dark-large",
"hash" : "585c128af418f94b8fbf18206605ec84" "hash" : "ee909b2d51a3c52b38c0cca3da8d861d"
}, },
"app-owners-dark-large" : { "app-owners-dark-large" : {
"name" : "app-owners-dark-large", "name" : "app-owners-dark-large",
"rule" : ".app-owners-dark-large", "rule" : ".app-owners-dark-large",
"hash" : "b09a80f307491acbe56fb16e01956173" "hash" : "05a6fcc603b5ee346d25b1fb25e7e695"
}, },
"app-owners-glow-large" : { "app-owners-glow-large" : {
"name" : "app-owners-glow-large", "name" : "app-owners-glow-large",
"rule" : ".app-owners-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-owners-light-large", "rule" : ".app-owners-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-owners-light-large",
"hash" : "a63816e6979ec6c222a086b5d72a0b86" "hash" : "4bcba14ffcdf7ac3c1968ebcc34f7e37"
}, },
"app-owners-light-large" : { "app-owners-light-large" : {
"name" : "app-owners-light-large", "name" : "app-owners-light-large",
"rule" : ".app-owners-light-large", "rule" : ".app-owners-light-large",
"hash" : "6b06493f46a91584e746e5034be15366" "hash" : "2d6b3f02f210c73242d91bdb9ef8456c"
}, },
"app-paste-blue-large" : { "app-paste-blue-large" : {
"name" : "app-paste-blue-large", "name" : "app-paste-blue-large",
"rule" : ".app-paste-blue-large, .phabricator-crumb-view:hover .app-paste-dark-large", "rule" : ".app-paste-blue-large, .phabricator-crumb-view:hover .app-paste-dark-large",
"hash" : "4a14c100c5b78282712dd2cc619d72b4" "hash" : "2ce99237cc2f064f0aa48fb1d147c781"
}, },
"app-paste-dark-large" : { "app-paste-dark-large" : {
"name" : "app-paste-dark-large", "name" : "app-paste-dark-large",
"rule" : ".app-paste-dark-large", "rule" : ".app-paste-dark-large",
"hash" : "03d3dded4964e60771c8a45549e13973" "hash" : "f566e3e0c8e6a17b7c2fc4168b079ede"
}, },
"app-paste-glow-large" : { "app-paste-glow-large" : {
"name" : "app-paste-glow-large", "name" : "app-paste-glow-large",
"rule" : ".app-paste-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-paste-light-large", "rule" : ".app-paste-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-paste-light-large",
"hash" : "507192b6a41abdc1a886a144cc315326" "hash" : "34333bbb31fb3909461cc064ea2f72e9"
}, },
"app-paste-light-large" : { "app-paste-light-large" : {
"name" : "app-paste-light-large", "name" : "app-paste-light-large",
"rule" : ".app-paste-light-large", "rule" : ".app-paste-light-large",
"hash" : "66f1f8fe7acafaab5f608598589aaa5c" "hash" : "e77a206e1cbaf1417b4a0b9f3d67380a"
}, },
"app-people-blue-large" : { "app-people-blue-large" : {
"name" : "app-people-blue-large", "name" : "app-people-blue-large",
"rule" : ".app-people-blue-large, .phabricator-crumb-view:hover .app-people-dark-large", "rule" : ".app-people-blue-large, .phabricator-crumb-view:hover .app-people-dark-large",
"hash" : "ed242e94b2b5698fd90261ca63aef8a6" "hash" : "37fcac5bc4ad63c37d68da2c77717301"
}, },
"app-people-dark-large" : { "app-people-dark-large" : {
"name" : "app-people-dark-large", "name" : "app-people-dark-large",
"rule" : ".app-people-dark-large", "rule" : ".app-people-dark-large",
"hash" : "b1748b3a5afacd4f8afcd5ea37352dc7" "hash" : "01fb27eba95c01d1aadde04ea4513caa"
}, },
"app-people-glow-large" : { "app-people-glow-large" : {
"name" : "app-people-glow-large", "name" : "app-people-glow-large",
"rule" : ".app-people-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-people-light-large", "rule" : ".app-people-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-people-light-large",
"hash" : "ed1b2d2d27ae8fd07d0e5e1d4002625e" "hash" : "6d859c1505f5877b86faf34385bbcd59"
}, },
"app-people-light-large" : { "app-people-light-large" : {
"name" : "app-people-light-large", "name" : "app-people-light-large",
"rule" : ".app-people-light-large", "rule" : ".app-people-light-large",
"hash" : "f6efcbdbcee02f9f37f92774b4b0e4cf" "hash" : "d1d80fddc9e6295494d12b72b4700dc5"
}, },
"app-phame-blue-large" : { "app-phame-blue-large" : {
"name" : "app-phame-blue-large", "name" : "app-phame-blue-large",
"rule" : ".app-phame-blue-large, .phabricator-crumb-view:hover .app-phame-dark-large", "rule" : ".app-phame-blue-large, .phabricator-crumb-view:hover .app-phame-dark-large",
"hash" : "d448b392b7bc927b9b5522d525fa8c49" "hash" : "f72bd35227e9ba2157852377e2d87ec4"
}, },
"app-phame-dark-large" : { "app-phame-dark-large" : {
"name" : "app-phame-dark-large", "name" : "app-phame-dark-large",
"rule" : ".app-phame-dark-large", "rule" : ".app-phame-dark-large",
"hash" : "a7cf2f8ec22cdb675a3bc792c7c1edf6" "hash" : "7bfe54cf7d885985fb7e06ad0abaf4e9"
}, },
"app-phame-glow-large" : { "app-phame-glow-large" : {
"name" : "app-phame-glow-large", "name" : "app-phame-glow-large",
"rule" : ".app-phame-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phame-light-large", "rule" : ".app-phame-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phame-light-large",
"hash" : "4587c25ff8a94fd48a1a0ca2e9fd9f42" "hash" : "60013586092f2c5eb5ed1f58c7f02a74"
}, },
"app-phame-light-large" : { "app-phame-light-large" : {
"name" : "app-phame-light-large", "name" : "app-phame-light-large",
"rule" : ".app-phame-light-large", "rule" : ".app-phame-light-large",
"hash" : "265471ec8d3c7ddeb3c269384d22243d" "hash" : "5266f8774d0470adc65f610c9175a251"
}, },
"app-phid-blue-large" : { "app-phid-blue-large" : {
"name" : "app-phid-blue-large", "name" : "app-phid-blue-large",
"rule" : ".app-phid-blue-large, .phabricator-crumb-view:hover .app-phid-dark-large", "rule" : ".app-phid-blue-large, .phabricator-crumb-view:hover .app-phid-dark-large",
"hash" : "b94bc233e1bcf520c65351b71794c228" "hash" : "d726ca94608547ff3974a1d49e6b1012"
}, },
"app-phid-dark-large" : { "app-phid-dark-large" : {
"name" : "app-phid-dark-large", "name" : "app-phid-dark-large",
"rule" : ".app-phid-dark-large", "rule" : ".app-phid-dark-large",
"hash" : "f4dfdcc8e1fde50cfcb7e07376696964" "hash" : "04af0c932bea8b7c36f6dc954994ea11"
}, },
"app-phid-glow-large" : { "app-phid-glow-large" : {
"name" : "app-phid-glow-large", "name" : "app-phid-glow-large",
"rule" : ".app-phid-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phid-light-large", "rule" : ".app-phid-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phid-light-large",
"hash" : "10ec316b409b385e19800048fcb1a79e" "hash" : "b1e8a6e4ac9ad64d34fbc7560d507e5b"
}, },
"app-phid-light-large" : { "app-phid-light-large" : {
"name" : "app-phid-light-large", "name" : "app-phid-light-large",
"rule" : ".app-phid-light-large", "rule" : ".app-phid-light-large",
"hash" : "0087c573b07d8badaeadcb8ad560ae9b" "hash" : "0ba23a08c29e8064fdddee9112c638e3"
}, },
"app-pholio-blue-large" : { "app-pholio-blue-large" : {
"name" : "app-pholio-blue-large", "name" : "app-pholio-blue-large",
"rule" : ".app-pholio-blue-large, .phabricator-crumb-view:hover .app-pholio-dark-large", "rule" : ".app-pholio-blue-large, .phabricator-crumb-view:hover .app-pholio-dark-large",
"hash" : "5b8e3f47a49a0dee84c1b7c228884f0c" "hash" : "08bfdf63411a09e6be88d99128c1e9f8"
}, },
"app-pholio-dark-large" : { "app-pholio-dark-large" : {
"name" : "app-pholio-dark-large", "name" : "app-pholio-dark-large",
"rule" : ".app-pholio-dark-large", "rule" : ".app-pholio-dark-large",
"hash" : "4a73276e5bcd9cfbb08435ed36051dff" "hash" : "2a8bfa3870726691766fe3f6cb73df38"
}, },
"app-pholio-glow-large" : { "app-pholio-glow-large" : {
"name" : "app-pholio-glow-large", "name" : "app-pholio-glow-large",
"rule" : ".app-pholio-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-pholio-light-large", "rule" : ".app-pholio-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-pholio-light-large",
"hash" : "aca383c3c4fcec4742a11702e3427221" "hash" : "499b68a80e78ab5f6ebe5ba7470fbb4a"
}, },
"app-pholio-light-large" : { "app-pholio-light-large" : {
"name" : "app-pholio-light-large", "name" : "app-pholio-light-large",
"rule" : ".app-pholio-light-large", "rule" : ".app-pholio-light-large",
"hash" : "1a3ace478c2b0f9b444005112e17c695" "hash" : "9a4d4223e6e1d7a77c4545504ea0908c"
}, },
"app-phpast-blue-large" : { "app-phpast-blue-large" : {
"name" : "app-phpast-blue-large", "name" : "app-phpast-blue-large",
"rule" : ".app-phpast-blue-large, .phabricator-crumb-view:hover .app-phpast-dark-large", "rule" : ".app-phpast-blue-large, .phabricator-crumb-view:hover .app-phpast-dark-large",
"hash" : "22ba8a058d6b920a909c5f6731f301a0" "hash" : "a9f4f0a62e5841b2ed669dc02694419d"
}, },
"app-phpast-dark-large" : { "app-phpast-dark-large" : {
"name" : "app-phpast-dark-large", "name" : "app-phpast-dark-large",
"rule" : ".app-phpast-dark-large", "rule" : ".app-phpast-dark-large",
"hash" : "bdbfd96cb50a8b7450daf82576fcfe95" "hash" : "1dbc83cc09d722253b634f3308608627"
}, },
"app-phpast-glow-large" : { "app-phpast-glow-large" : {
"name" : "app-phpast-glow-large", "name" : "app-phpast-glow-large",
"rule" : ".app-phpast-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phpast-light-large", "rule" : ".app-phpast-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phpast-light-large",
"hash" : "ce7433350eeaee95ecf358905ad38029" "hash" : "e98e4cdc93e51b0d7c1df25c01c75fac"
}, },
"app-phpast-light-large" : { "app-phpast-light-large" : {
"name" : "app-phpast-light-large", "name" : "app-phpast-light-large",
"rule" : ".app-phpast-light-large", "rule" : ".app-phpast-light-large",
"hash" : "5ebd26eb5e0bc0229db5696020dd9b4a" "hash" : "c63fb0fe3cc326f1a19e4e59c42a73f7"
}, },
"app-phriction-blue-large" : { "app-phriction-blue-large" : {
"name" : "app-phriction-blue-large", "name" : "app-phriction-blue-large",
"rule" : ".app-phriction-blue-large, .phabricator-crumb-view:hover .app-phriction-dark-large", "rule" : ".app-phriction-blue-large, .phabricator-crumb-view:hover .app-phriction-dark-large",
"hash" : "0134e9d694ce72a6d9c554e639a6ed50" "hash" : "55bbded073e078117369f42e05b5b5c4"
}, },
"app-phriction-dark-large" : { "app-phriction-dark-large" : {
"name" : "app-phriction-dark-large", "name" : "app-phriction-dark-large",
"rule" : ".app-phriction-dark-large", "rule" : ".app-phriction-dark-large",
"hash" : "e4f3121261bc96e00bb6b94b467582f4" "hash" : "944c3a520a484580895b287eaaa103b1"
}, },
"app-phriction-glow-large" : { "app-phriction-glow-large" : {
"name" : "app-phriction-glow-large", "name" : "app-phriction-glow-large",
"rule" : ".app-phriction-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phriction-light-large", "rule" : ".app-phriction-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phriction-light-large",
"hash" : "27612f55aaa40c4178a3a5a46d225947" "hash" : "84639b5ccba94daf1850a9449131a078"
}, },
"app-phriction-light-large" : { "app-phriction-light-large" : {
"name" : "app-phriction-light-large", "name" : "app-phriction-light-large",
"rule" : ".app-phriction-light-large", "rule" : ".app-phriction-light-large",
"hash" : "a56dcfca00861938d337cc2f217b33f6" "hash" : "2ca79fdfd141b0fe00ff8b2e13df73bf"
}, },
"app-ponder-blue-large" : { "app-ponder-blue-large" : {
"name" : "app-ponder-blue-large", "name" : "app-ponder-blue-large",
"rule" : ".app-ponder-blue-large, .phabricator-crumb-view:hover .app-ponder-dark-large", "rule" : ".app-ponder-blue-large, .phabricator-crumb-view:hover .app-ponder-dark-large",
"hash" : "1bfc2f6150bd67cc25cbe1fbc9283f9c" "hash" : "8018fe4ebc1e9af91a8a737e0505aa5d"
}, },
"app-ponder-dark-large" : { "app-ponder-dark-large" : {
"name" : "app-ponder-dark-large", "name" : "app-ponder-dark-large",
"rule" : ".app-ponder-dark-large", "rule" : ".app-ponder-dark-large",
"hash" : "6efc0b3a74d2cc9eb5de96205613b640" "hash" : "1da67495789c69621f91800939ea9684"
}, },
"app-ponder-glow-large" : { "app-ponder-glow-large" : {
"name" : "app-ponder-glow-large", "name" : "app-ponder-glow-large",
"rule" : ".app-ponder-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-ponder-light-large", "rule" : ".app-ponder-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-ponder-light-large",
"hash" : "9c2a2506e53e6a902976d504dfe94b46" "hash" : "f73a1b5a6b688c6d3feba14193357147"
}, },
"app-ponder-light-large" : { "app-ponder-light-large" : {
"name" : "app-ponder-light-large", "name" : "app-ponder-light-large",
"rule" : ".app-ponder-light-large", "rule" : ".app-ponder-light-large",
"hash" : "595895068b10c68b0e05234570a6a268" "hash" : "eb8b13c3bc35f36b14f33ef1158b71ab"
}, },
"app-power-blue-large" : { "app-power-blue-large" : {
"name" : "app-power-blue-large", "name" : "app-power-blue-large",
"rule" : ".app-power-blue-large, .phabricator-crumb-view:hover .app-power-dark-large", "rule" : ".app-power-blue-large, .phabricator-crumb-view:hover .app-power-dark-large",
"hash" : "c3e03022f162f986f784b2a43c8784c7" "hash" : "743499c84546b7b35139eec60bf74c34"
}, },
"app-power-dark-large" : { "app-power-dark-large" : {
"name" : "app-power-dark-large", "name" : "app-power-dark-large",
"rule" : ".app-power-dark-large", "rule" : ".app-power-dark-large",
"hash" : "52d04564ca2cc7f3a96809e827162f3e" "hash" : "1a3520a2ec255f5b7f1779ea66153ade"
}, },
"app-power-glow-large" : { "app-power-glow-large" : {
"name" : "app-power-glow-large", "name" : "app-power-glow-large",
"rule" : ".app-power-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-power-light-large", "rule" : ".app-power-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-power-light-large",
"hash" : "3f7719f0299abef8ba900e79fb6b5015" "hash" : "3951e012561a0d5d5d2b00711b13fa9c"
}, },
"app-power-light-large" : { "app-power-light-large" : {
"name" : "app-power-light-large", "name" : "app-power-light-large",
"rule" : ".app-power-light-large", "rule" : ".app-power-light-large",
"hash" : "ffe9f181e6103eab9fc688ab84b07ad1" "hash" : "52d04bd829dfe7477a9dc2ef916990ab"
}, },
"app-projects-blue-large" : { "app-projects-blue-large" : {
"name" : "app-projects-blue-large", "name" : "app-projects-blue-large",
"rule" : ".app-projects-blue-large, .phabricator-crumb-view:hover .app-projects-dark-large", "rule" : ".app-projects-blue-large, .phabricator-crumb-view:hover .app-projects-dark-large",
"hash" : "494ca64479f68588823e00609496414a" "hash" : "278113829ca3543b9377030555e04edc"
}, },
"app-projects-dark-large" : { "app-projects-dark-large" : {
"name" : "app-projects-dark-large", "name" : "app-projects-dark-large",
"rule" : ".app-projects-dark-large", "rule" : ".app-projects-dark-large",
"hash" : "fa85ad644a2e289cb6bea2a67ab534f8" "hash" : "b6f043db039d4960397f76904a84e9fc"
}, },
"app-projects-glow-large" : { "app-projects-glow-large" : {
"name" : "app-projects-glow-large", "name" : "app-projects-glow-large",
"rule" : ".app-projects-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-projects-light-large", "rule" : ".app-projects-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-projects-light-large",
"hash" : "b28bf212416595b3ba4bfb528dfaf791" "hash" : "3d1bf3efdbd9ccdbb73fc3a11d5d1265"
}, },
"app-projects-light-large" : { "app-projects-light-large" : {
"name" : "app-projects-light-large", "name" : "app-projects-light-large",
"rule" : ".app-projects-light-large", "rule" : ".app-projects-light-large",
"hash" : "228db63ac0e80b3cef46903a003a44df" "hash" : "88c73c7cb50ce7cf9cd8d33ec20c8245"
}, },
"app-repositories-blue-large" : { "app-repositories-blue-large" : {
"name" : "app-repositories-blue-large", "name" : "app-repositories-blue-large",
"rule" : ".app-repositories-blue-large, .phabricator-crumb-view:hover .app-repositories-dark-large", "rule" : ".app-repositories-blue-large, .phabricator-crumb-view:hover .app-repositories-dark-large",
"hash" : "a83dd2186f9d92949f19a97f8f777a9c" "hash" : "0642bf1118210cef9105cc463ec3d36f"
}, },
"app-repositories-dark-large" : { "app-repositories-dark-large" : {
"name" : "app-repositories-dark-large", "name" : "app-repositories-dark-large",
"rule" : ".app-repositories-dark-large", "rule" : ".app-repositories-dark-large",
"hash" : "30ead88c9f018797a8d5ef2f4e4221fe" "hash" : "c92eb4e857d74f1ef206ba5b184ad88c"
}, },
"app-repositories-glow-large" : { "app-repositories-glow-large" : {
"name" : "app-repositories-glow-large", "name" : "app-repositories-glow-large",
"rule" : ".app-repositories-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-repositories-light-large", "rule" : ".app-repositories-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-repositories-light-large",
"hash" : "44b04cbf1652211fbc2046c7773b4cf2" "hash" : "7fe40fbb4150dfbc6133c79578fc1494"
}, },
"app-repositories-light-large" : { "app-repositories-light-large" : {
"name" : "app-repositories-light-large", "name" : "app-repositories-light-large",
"rule" : ".app-repositories-light-large", "rule" : ".app-repositories-light-large",
"hash" : "bcba180d121f9269787509ba7cdd3e48" "hash" : "446a7eab7b7fc07329bc21a77c438033"
}, },
"app-settings-blue-large" : { "app-settings-blue-large" : {
"name" : "app-settings-blue-large", "name" : "app-settings-blue-large",
"rule" : ".app-settings-blue-large, .phabricator-crumb-view:hover .app-settings-dark-large", "rule" : ".app-settings-blue-large, .phabricator-crumb-view:hover .app-settings-dark-large",
"hash" : "c615df792c7e81b35cfbb78ece39e796" "hash" : "4d22a7f016509777bb5b55f39198d9d7"
}, },
"app-settings-dark-large" : { "app-settings-dark-large" : {
"name" : "app-settings-dark-large", "name" : "app-settings-dark-large",
"rule" : ".app-settings-dark-large", "rule" : ".app-settings-dark-large",
"hash" : "6c174857e23a9d169d0cb4079aa14637" "hash" : "55e0869a51f70cacdd72f2baad4b28ce"
}, },
"app-settings-glow-large" : { "app-settings-glow-large" : {
"name" : "app-settings-glow-large", "name" : "app-settings-glow-large",
"rule" : ".app-settings-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-settings-light-large", "rule" : ".app-settings-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-settings-light-large",
"hash" : "4d8c68dc709d99141a19aad5bc483971" "hash" : "314ab0f607baa65ff6a684b1ddd4861d"
}, },
"app-settings-light-large" : { "app-settings-light-large" : {
"name" : "app-settings-light-large", "name" : "app-settings-light-large",
"rule" : ".app-settings-light-large", "rule" : ".app-settings-light-large",
"hash" : "e901b672f2a51ef286369bfea70a7e8d" "hash" : "41da4708f38fae918af46505e566bd6a"
}, },
"app-setup-blue-large" : { "app-setup-blue-large" : {
"name" : "app-setup-blue-large", "name" : "app-setup-blue-large",
"rule" : ".app-setup-blue-large, .phabricator-crumb-view:hover .app-setup-dark-large", "rule" : ".app-setup-blue-large, .phabricator-crumb-view:hover .app-setup-dark-large",
"hash" : "a2f8f470c3cd928e8c1a6959ff745789" "hash" : "74d2ba681cdad54b31d53f7c174f5826"
}, },
"app-setup-dark-large" : { "app-setup-dark-large" : {
"name" : "app-setup-dark-large", "name" : "app-setup-dark-large",
"rule" : ".app-setup-dark-large", "rule" : ".app-setup-dark-large",
"hash" : "3183fafc1dc05b851ba902ace2dfa34d" "hash" : "89a94fe1ce36351d3ea81f1776fb061a"
}, },
"app-setup-glow-large" : { "app-setup-glow-large" : {
"name" : "app-setup-glow-large", "name" : "app-setup-glow-large",
"rule" : ".app-setup-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-setup-light-large", "rule" : ".app-setup-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-setup-light-large",
"hash" : "d91b7e5480cb4296871b9f1c4c634256" "hash" : "53942c73b14210f5bf0bfad68bcb4431"
}, },
"app-setup-light-large" : { "app-setup-light-large" : {
"name" : "app-setup-light-large", "name" : "app-setup-light-large",
"rule" : ".app-setup-light-large", "rule" : ".app-setup-light-large",
"hash" : "419829d244a85f97d67fb45c6febd4e5" "hash" : "890dd2d7cb1e51992b202dd462d56ba6"
}, },
"app-slowvote-blue-large" : { "app-slowvote-blue-large" : {
"name" : "app-slowvote-blue-large", "name" : "app-slowvote-blue-large",
"rule" : ".app-slowvote-blue-large, .phabricator-crumb-view:hover .app-slowvote-dark-large", "rule" : ".app-slowvote-blue-large, .phabricator-crumb-view:hover .app-slowvote-dark-large",
"hash" : "941028e7abbe491e2911fb24c4a8edca" "hash" : "12299956375e7f382217ebf8c1cb8203"
}, },
"app-slowvote-dark-large" : { "app-slowvote-dark-large" : {
"name" : "app-slowvote-dark-large", "name" : "app-slowvote-dark-large",
"rule" : ".app-slowvote-dark-large", "rule" : ".app-slowvote-dark-large",
"hash" : "6197df3550b652011bc1a8da00005059" "hash" : "ce57e4a318e4e8d556f713b459e6d798"
}, },
"app-slowvote-glow-large" : { "app-slowvote-glow-large" : {
"name" : "app-slowvote-glow-large", "name" : "app-slowvote-glow-large",
"rule" : ".app-slowvote-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-slowvote-light-large", "rule" : ".app-slowvote-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-slowvote-light-large",
"hash" : "43783af8df4f99e94f0989ca149264f2" "hash" : "dcd5be64ded69e0fdfee5364367c9b55"
}, },
"app-slowvote-light-large" : { "app-slowvote-light-large" : {
"name" : "app-slowvote-light-large", "name" : "app-slowvote-light-large",
"rule" : ".app-slowvote-light-large", "rule" : ".app-slowvote-light-large",
"hash" : "23eb39153b5ac9b5bd91c8b800023d93" "hash" : "7ac2515f26b194a9fafaa6a27997be2a"
}, },
"app-uiexamples-blue-large" : { "app-uiexamples-blue-large" : {
"name" : "app-uiexamples-blue-large", "name" : "app-uiexamples-blue-large",
"rule" : ".app-uiexamples-blue-large, .phabricator-crumb-view:hover .app-uiexamples-dark-large", "rule" : ".app-uiexamples-blue-large, .phabricator-crumb-view:hover .app-uiexamples-dark-large",
"hash" : "eabac7f7b83c47618a5f72b6f30b6410" "hash" : "7add7df6b621c4af5322160bc1cd31b2"
}, },
"app-uiexamples-dark-large" : { "app-uiexamples-dark-large" : {
"name" : "app-uiexamples-dark-large", "name" : "app-uiexamples-dark-large",
"rule" : ".app-uiexamples-dark-large", "rule" : ".app-uiexamples-dark-large",
"hash" : "31c9fb99289cc73aae73f3acad66b449" "hash" : "d8563a5f06692a313a2eff11235d5d0d"
}, },
"app-uiexamples-glow-large" : { "app-uiexamples-glow-large" : {
"name" : "app-uiexamples-glow-large", "name" : "app-uiexamples-glow-large",
"rule" : ".app-uiexamples-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-uiexamples-light-large", "rule" : ".app-uiexamples-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-uiexamples-light-large",
"hash" : "069e59208dad509a6c3d74d102f08ae8" "hash" : "0532cdd91b6de17ab194bd29cacfc24f"
}, },
"app-uiexamples-light-large" : { "app-uiexamples-light-large" : {
"name" : "app-uiexamples-light-large", "name" : "app-uiexamples-light-large",
"rule" : ".app-uiexamples-light-large", "rule" : ".app-uiexamples-light-large",
"hash" : "b384102bcee1b312b2e06abc5f4b27de" "hash" : "ee40dd0e3168f8e7fb520665a1d50f95"
} }
}, },
"scales" : [ "scales" : [

View file

@ -4,192 +4,197 @@
"app-application-dark" : { "app-application-dark" : {
"name" : "app-application-dark", "name" : "app-application-dark",
"rule" : ".app-application-dark", "rule" : ".app-application-dark",
"hash" : "89f861c28e97878311885623cff3d314" "hash" : "60e228106718bf6f3ee5024400d31f24"
}, },
"app-audit-dark" : { "app-audit-dark" : {
"name" : "app-audit-dark", "name" : "app-audit-dark",
"rule" : ".app-audit-dark", "rule" : ".app-audit-dark",
"hash" : "2c141bc445c4fe62986cd6cff0c29b36" "hash" : "38339b9cc4e39cbbbea36dcf039873bb"
}, },
"app-calendar-dark" : { "app-calendar-dark" : {
"name" : "app-calendar-dark", "name" : "app-calendar-dark",
"rule" : ".app-calendar-dark", "rule" : ".app-calendar-dark",
"hash" : "04c61a081986f0d38cf27fc4e18bce40" "hash" : "756d60566639ad1424444436a95c6a3f"
}, },
"app-conduit-dark" : { "app-conduit-dark" : {
"name" : "app-conduit-dark", "name" : "app-conduit-dark",
"rule" : ".app-conduit-dark", "rule" : ".app-conduit-dark",
"hash" : "7b410e96c87e7818fb93bdfa2ed9368f" "hash" : "01fba8ca32f1cfefb3516b45c9d28b40"
},
"app-conpherence-dark" : {
"name" : "app-conpherence-dark",
"rule" : ".app-conpherence-dark",
"hash" : "dbb6fdd5f082a604b4ef10b7eeedbfa2"
}, },
"app-countdown-dark" : { "app-countdown-dark" : {
"name" : "app-countdown-dark", "name" : "app-countdown-dark",
"rule" : ".app-countdown-dark", "rule" : ".app-countdown-dark",
"hash" : "8891502317896beea6a5f9ec87eb5e2e" "hash" : "625f2589ee491aead58aaa5b965a7451"
}, },
"app-daemon-dark" : { "app-daemon-dark" : {
"name" : "app-daemon-dark", "name" : "app-daemon-dark",
"rule" : ".app-daemon-dark", "rule" : ".app-daemon-dark",
"hash" : "23a9a2927b368e2328dd70f95c5b1a07" "hash" : "4472be3242150f06ea5bf7b45333c4c5"
}, },
"app-differential-dark" : { "app-differential-dark" : {
"name" : "app-differential-dark", "name" : "app-differential-dark",
"rule" : ".app-differential-dark", "rule" : ".app-differential-dark",
"hash" : "bb7032f3c17901f242f9bbbcdc9a721c" "hash" : "508401fe36d9636bdcbdcbcae253c152"
}, },
"app-diffusion-dark" : { "app-diffusion-dark" : {
"name" : "app-diffusion-dark", "name" : "app-diffusion-dark",
"rule" : ".app-diffusion-dark", "rule" : ".app-diffusion-dark",
"hash" : "46ab6648a6ae04e4fd1a28a9afcc4996" "hash" : "0a6f8c85079c4a325430197adb05967c"
}, },
"app-diviner-dark" : { "app-diviner-dark" : {
"name" : "app-diviner-dark", "name" : "app-diviner-dark",
"rule" : ".app-diviner-dark", "rule" : ".app-diviner-dark",
"hash" : "e21a74e866a6fc22a991b8df6efc3ca7" "hash" : "08872eb1c6bb51b9727290f6fa802633"
}, },
"app-drydock-dark" : { "app-drydock-dark" : {
"name" : "app-drydock-dark", "name" : "app-drydock-dark",
"rule" : ".app-drydock-dark", "rule" : ".app-drydock-dark",
"hash" : "ed44013d98257a23306bad9c6b24760d" "hash" : "d50309da57021c676774f9bdc68c5fe7"
}, },
"app-fact-dark" : { "app-fact-dark" : {
"name" : "app-fact-dark", "name" : "app-fact-dark",
"rule" : ".app-fact-dark", "rule" : ".app-fact-dark",
"hash" : "f373f38e784289b866ab914471c342ec" "hash" : "0c1be568e1ac05fca814718600190369"
}, },
"app-feed-dark" : { "app-feed-dark" : {
"name" : "app-feed-dark", "name" : "app-feed-dark",
"rule" : ".app-feed-dark", "rule" : ".app-feed-dark",
"hash" : "c4f1765e70615c6ee4cae6e8135fb969" "hash" : "830232709eedbe6ce7cdbcebf182c86c"
}, },
"app-files-dark" : { "app-files-dark" : {
"name" : "app-files-dark", "name" : "app-files-dark",
"rule" : ".app-files-dark", "rule" : ".app-files-dark",
"hash" : "7faf45efa5b9b97e571bc66636ca1a15" "hash" : "00f5ab7ea3e9367e378cf9f395400ed4"
}, },
"app-flags-dark" : { "app-flags-dark" : {
"name" : "app-flags-dark", "name" : "app-flags-dark",
"rule" : ".app-flags-dark", "rule" : ".app-flags-dark",
"hash" : "10298f695592714e27f72ef746ffd8a9" "hash" : "6382f373f7b0e70522d80ce06ef62813"
}, },
"app-help-dark" : { "app-help-dark" : {
"name" : "app-help-dark", "name" : "app-help-dark",
"rule" : ".app-help-dark", "rule" : ".app-help-dark",
"hash" : "5cf715cc566b98c87958793eebea5f35" "hash" : "2299a14e27d76fdf66209ef0042cc84f"
}, },
"app-herald-dark" : { "app-herald-dark" : {
"name" : "app-herald-dark", "name" : "app-herald-dark",
"rule" : ".app-herald-dark", "rule" : ".app-herald-dark",
"hash" : "e3bc39a3dd1d66a0abf4594c608a3846" "hash" : "b2193b62df3bd4cf5c8de514a07fb6c3"
}, },
"app-home-dark" : { "app-home-dark" : {
"name" : "app-home-dark", "name" : "app-home-dark",
"rule" : ".app-home-dark", "rule" : ".app-home-dark",
"hash" : "7e01fbdfa526919a2d90d2c29a6c9fa0" "hash" : "88f020497fcbcf43729aa817695b174f"
}, },
"app-logo-dark" : { "app-logo-dark" : {
"name" : "app-logo-dark", "name" : "app-logo-dark",
"rule" : ".app-logo-dark", "rule" : ".app-logo-dark",
"hash" : "39701e1282fd120e77b09ed9fcddc686" "hash" : "02e71ae2421f1949f2ef075c27e052c9"
}, },
"app-macro-dark" : { "app-macro-dark" : {
"name" : "app-macro-dark", "name" : "app-macro-dark",
"rule" : ".app-macro-dark", "rule" : ".app-macro-dark",
"hash" : "ef89457bcee666ad265de1659b9b8a62" "hash" : "8e0e72847a8f70eb3f8e60e7fb681c06"
}, },
"app-mail-dark" : { "app-mail-dark" : {
"name" : "app-mail-dark", "name" : "app-mail-dark",
"rule" : ".app-mail-dark", "rule" : ".app-mail-dark",
"hash" : "4d05a5cd4360052183e91f61967a6c57" "hash" : "a2a792fddc44be4ae0f1a601380c8449"
}, },
"app-maniphest-dark" : { "app-maniphest-dark" : {
"name" : "app-maniphest-dark", "name" : "app-maniphest-dark",
"rule" : ".app-maniphest-dark", "rule" : ".app-maniphest-dark",
"hash" : "320da127d7f887e09965a0416d5e44d3" "hash" : "ea94fc7dbb2267adc33513f78916fe90"
}, },
"app-metamta-dark" : { "app-metamta-dark" : {
"name" : "app-metamta-dark", "name" : "app-metamta-dark",
"rule" : ".app-metamta-dark", "rule" : ".app-metamta-dark",
"hash" : "51f100c2a7a80149404dbc8b27f595a9" "hash" : "8abbb6e74d1697f950a01dcd6c8077be"
}, },
"app-owners-dark" : { "app-owners-dark" : {
"name" : "app-owners-dark", "name" : "app-owners-dark",
"rule" : ".app-owners-dark", "rule" : ".app-owners-dark",
"hash" : "33c064dd3b7fc3f9eb934d0cf84f3af5" "hash" : "23b948cc1d32a0968785fbfca749dcdf"
}, },
"app-paste-dark" : { "app-paste-dark" : {
"name" : "app-paste-dark", "name" : "app-paste-dark",
"rule" : ".app-paste-dark", "rule" : ".app-paste-dark",
"hash" : "9482649caa8e5a46d277271092517b12" "hash" : "9e0c1d1fe03aebcb55a4d19be051e255"
}, },
"app-people-dark" : { "app-people-dark" : {
"name" : "app-people-dark", "name" : "app-people-dark",
"rule" : ".app-people-dark", "rule" : ".app-people-dark",
"hash" : "67245eafa79367e4e07289549cf34deb" "hash" : "0b3995fcd043b506a408de6e25ad5292"
}, },
"app-phame-dark" : { "app-phame-dark" : {
"name" : "app-phame-dark", "name" : "app-phame-dark",
"rule" : ".app-phame-dark", "rule" : ".app-phame-dark",
"hash" : "029d7d48523cc43b0404bf40ccf56f8b" "hash" : "24ff4d322bce13f1c156ce5361a03a07"
}, },
"app-phid-dark" : { "app-phid-dark" : {
"name" : "app-phid-dark", "name" : "app-phid-dark",
"rule" : ".app-phid-dark", "rule" : ".app-phid-dark",
"hash" : "2099c2987fe3929ce1d9dec470c7699d" "hash" : "5a0ac05bbf36a7aeb36753d093c3c9f8"
}, },
"app-pholio-dark" : { "app-pholio-dark" : {
"name" : "app-pholio-dark", "name" : "app-pholio-dark",
"rule" : ".app-pholio-dark", "rule" : ".app-pholio-dark",
"hash" : "aab47c79d2e03fdcaffb6f41dc1e0f06" "hash" : "7d3befd1c12dd464a5f5edbef4574a5c"
}, },
"app-phpast-dark" : { "app-phpast-dark" : {
"name" : "app-phpast-dark", "name" : "app-phpast-dark",
"rule" : ".app-phpast-dark", "rule" : ".app-phpast-dark",
"hash" : "e6db72b398f57d03a400c9c18bd3c412" "hash" : "de1ad812c7a177c844fcff626b1abebf"
}, },
"app-phriction-dark" : { "app-phriction-dark" : {
"name" : "app-phriction-dark", "name" : "app-phriction-dark",
"rule" : ".app-phriction-dark", "rule" : ".app-phriction-dark",
"hash" : "8064272206874a324d20d956c8fb10da" "hash" : "8596da3f375087db6a163c98f0c968ae"
}, },
"app-ponder-dark" : { "app-ponder-dark" : {
"name" : "app-ponder-dark", "name" : "app-ponder-dark",
"rule" : ".app-ponder-dark", "rule" : ".app-ponder-dark",
"hash" : "abdb353635bed5cfd48a176b4340022f" "hash" : "232577eb875f383f45cb9dbd9a4e3976"
}, },
"app-power-dark" : { "app-power-dark" : {
"name" : "app-power-dark", "name" : "app-power-dark",
"rule" : ".app-power-dark", "rule" : ".app-power-dark",
"hash" : "d3e943d1267206963d8f9419629c5581" "hash" : "e3708b1b4bfdfc614d9cf630943e5bef"
}, },
"app-projects-dark" : { "app-projects-dark" : {
"name" : "app-projects-dark", "name" : "app-projects-dark",
"rule" : ".app-projects-dark", "rule" : ".app-projects-dark",
"hash" : "6bd7c598e2f2cf0b77918a7b0fa8bd19" "hash" : "5e799f1e95ecfd33cb67b6e4ac992043"
}, },
"app-repositories-dark" : { "app-repositories-dark" : {
"name" : "app-repositories-dark", "name" : "app-repositories-dark",
"rule" : ".app-repositories-dark", "rule" : ".app-repositories-dark",
"hash" : "db2823a16dae198145f53e8021170740" "hash" : "736066962e96df88eacc04d734613a0e"
}, },
"app-settings-dark" : { "app-settings-dark" : {
"name" : "app-settings-dark", "name" : "app-settings-dark",
"rule" : ".app-settings-dark", "rule" : ".app-settings-dark",
"hash" : "1c84d22b769730d9e8b6fcd3414de72c" "hash" : "2fadcf918fb084bd3452712f700ae1a0"
}, },
"app-setup-dark" : { "app-setup-dark" : {
"name" : "app-setup-dark", "name" : "app-setup-dark",
"rule" : ".app-setup-dark", "rule" : ".app-setup-dark",
"hash" : "27db76695d99be0c25368dc9e0932b17" "hash" : "061b80f3555ade1c36934474b61fe76b"
}, },
"app-slowvote-dark" : { "app-slowvote-dark" : {
"name" : "app-slowvote-dark", "name" : "app-slowvote-dark",
"rule" : ".app-slowvote-dark", "rule" : ".app-slowvote-dark",
"hash" : "0d5861fab4562ad21242e34f9a29a33e" "hash" : "e51cc1e6887f2deaff02d9c60aae36e0"
}, },
"app-uiexamples-dark" : { "app-uiexamples-dark" : {
"name" : "app-uiexamples-dark", "name" : "app-uiexamples-dark",
"rule" : ".app-uiexamples-dark", "rule" : ".app-uiexamples-dark",
"hash" : "6416a3d9d9007673ee558433b80692a1" "hash" : "dd919fd2c10e7d1e0915f523ac3922ce"
} }
}, },
"scales" : [ "scales" : [

View file

@ -4,67 +4,67 @@
"gradient-black-dark" : { "gradient-black-dark" : {
"name" : "gradient-black-dark", "name" : "gradient-black-dark",
"rule" : ".gradient-black-dark, button.black, a.black, a.black:visited", "rule" : ".gradient-black-dark, button.black, a.black, a.black:visited",
"hash" : "b9faf8505427bb14a8c51324e13e2f81" "hash" : "17425d8c9c53672ab2edbd236e6efd7a"
}, },
"gradient-black-light" : { "gradient-black-light" : {
"name" : "gradient-black-light", "name" : "gradient-black-light",
"rule" : ".gradient-black-light, button.black:active, a.black:active", "rule" : ".gradient-black-light, button.black:active, a.black:active",
"hash" : "812c3375d00ccc93c36c6df2eb565df4" "hash" : "c4fb2231553d2894fd2c97beaa8bfe39"
}, },
"gradient-blue-dark" : { "gradient-blue-dark" : {
"name" : "gradient-blue-dark", "name" : "gradient-blue-dark",
"rule" : ".gradient-blue-dark, button, a.button, a.button:visited, input.inputsubmit", "rule" : ".gradient-blue-dark, button, a.button, a.button:visited, input.inputsubmit",
"hash" : "adc2d0f7397374936384014c5d78550d" "hash" : "f467612edcdbf984672287c6086492c4"
}, },
"gradient-blue-light" : { "gradient-blue-light" : {
"name" : "gradient-blue-light", "name" : "gradient-blue-light",
"rule" : ".gradient-blue-light, button:active, a.button:active", "rule" : ".gradient-blue-light, button:active, a.button:active",
"hash" : "91b841067a63e543a4dcd9d41e0a2e5c" "hash" : "471d47c102def6db46b345310aac5a03"
}, },
"gradient-breadcrumbs" : { "gradient-breadcrumbs" : {
"name" : "gradient-breadcrumbs", "name" : "gradient-breadcrumbs",
"rule" : ".gradient-breadcrumbs", "rule" : ".gradient-breadcrumbs",
"hash" : "688ab77f50cfbc17ec30d798efb1b39e" "hash" : "3d0f8634df5bc29eaf2a5a01bae79cf1"
}, },
"gradient-dark-menu-label" : { "gradient-dark-menu-label" : {
"name" : "gradient-dark-menu-label", "name" : "gradient-dark-menu-label",
"rule" : ".gradient-dark-menu-label, .phabricator-dark-menu .phabricator-menu-item-type-label", "rule" : ".gradient-dark-menu-label, .phabricator-dark-menu .phabricator-menu-item-type-label",
"hash" : "89a908596142d38fbe61a706694cd321" "hash" : "e0d4a455142f9c4745d36ad8b7dd3f78"
}, },
"gradient-green-dark" : { "gradient-green-dark" : {
"name" : "gradient-green-dark", "name" : "gradient-green-dark",
"rule" : ".gradient-green-dark, button.green, a.green, a.green:visited", "rule" : ".gradient-green-dark, button.green, a.green, a.green:visited",
"hash" : "0d19ab593772b6b406c0db309b3a14fb" "hash" : "a6719fe55b2b0e527ed32985691eab34"
}, },
"gradient-green-light" : { "gradient-green-light" : {
"name" : "gradient-green-light", "name" : "gradient-green-light",
"rule" : ".gradient-green-light, button.green:active, a.green:active", "rule" : ".gradient-green-light, button.green:active, a.green:active",
"hash" : "71c67916327ec7fc65149ab72c3a2924" "hash" : "124969cc7805bbd754005bc702e24c54"
}, },
"gradient-grey-dark" : { "gradient-grey-dark" : {
"name" : "gradient-grey-dark", "name" : "gradient-grey-dark",
"rule" : ".gradient-grey-dark, button.grey, input.inputaux, a.grey, a.grey:visited, a.button.disabled, button[disabled], button.disabled", "rule" : ".gradient-grey-dark, button.grey, input.inputaux, a.grey, a.grey:visited, a.button.disabled, button[disabled], button.disabled",
"hash" : "32651902d28d37dca01cf067072c39c0" "hash" : "fac28a773098fc62bf571e12b843f71a"
}, },
"gradient-grey-light" : { "gradient-grey-light" : {
"name" : "gradient-grey-light", "name" : "gradient-grey-light",
"rule" : ".gradient-grey-light, button.grey:active, a.grey:active, button.grey_active, a.dropdown-open", "rule" : ".gradient-grey-light, button.grey:active, a.grey:active, button.grey_active, a.dropdown-open",
"hash" : "c3c9ee1ed6f800a4ac86910b94687877" "hash" : "83c6128f59fc2e426c912c2f73f5b92b"
}, },
"gradient-menu-hover" : { "gradient-menu-hover" : {
"name" : "gradient-menu-hover", "name" : "gradient-menu-hover",
"rule" : ".gradient-menu-hover, .device-desktop .phabricator-side-menu a.phabricator-menu-item-type-link:hover, .phabricator-filetree a.phabricator-filetree-item:hover", "rule" : ".gradient-menu-hover, .device-desktop .phabricator-side-menu a.phabricator-menu-item-type-link:hover, .phabricator-filetree a.phabricator-filetree-item:hover",
"hash" : "856380207ac8c5cb6770d44dceb245a8" "hash" : "e6e064156d66952180e99b00996ffc38"
}, },
"gradient-menu-label" : { "gradient-menu-label" : {
"name" : "gradient-menu-label", "name" : "gradient-menu-label",
"rule" : ".gradient-menu-label, .phabricator-side-menu .phabricator-menu-item-type-label", "rule" : ".gradient-menu-label, .phabricator-side-menu .phabricator-menu-item-type-label",
"hash" : "8ad8352b077ae02820ebbbae26dc669b" "hash" : "04b9943f5b06c8cb21fe6b96714e6662"
}, },
"gradient-menu-selected" : { "gradient-menu-selected" : {
"name" : "gradient-menu-selected", "name" : "gradient-menu-selected",
"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", "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",
"hash" : "815bafb94e11c23e1a419ea85dcae113" "hash" : "9b4b039fba177b90bc26f0e6eece339d"
} }
}, },
"scales" : [ "scales" : [

File diff suppressed because it is too large Load diff

View file

@ -4,47 +4,52 @@
"app" : { "app" : {
"name" : "app", "name" : "app",
"rule" : ".menu-icon-app", "rule" : ".menu-icon-app",
"hash" : "a389f99d9c00f688e625da71579ee90a" "hash" : "fc525b5b3e3ecaeda3baccc18ace5a0a"
}, },
"arrow-right" : { "arrow-right" : {
"name" : "arrow-right", "name" : "arrow-right",
"rule" : ".phabricator-crumb-divider", "rule" : ".phabricator-crumb-divider",
"hash" : "a994209450dc73a80841cdd66bb59925" "hash" : "50180da0aed206c9db2bc1547c1a158c"
}, },
"bubble" : { "conf-hover" : {
"name" : "bubble", "name" : "conf-hover",
"rule" : ".phabricator-main-menu-alert-bubble.alert-unread", "rule" : ".alert-notifications:hover .phabricator-main-menu-message-icon",
"hash" : "1145ac8a137a2a22517c1945fe22c517" "hash" : "febc4135b2821ae2d3f0b06aa295ca0d"
},
"conf-off" : {
"name" : "conf-off",
"rule" : ".alert-notifications .phabricator-main-menu-message-icon",
"hash" : "dc1b05cb611eaef76a09e8cff698c99d"
},
"conf-unseen" : {
"name" : "conf-unseen",
"rule" : ".alert-notifications.message-unread .phabricator-main-menu-message-icon",
"hash" : "1f7d54b2b9781099f867b100ebdd6c6a"
}, },
"eye" : { "eye" : {
"name" : "eye", "name" : "eye",
"rule" : ".menu-icon-eye", "rule" : ".menu-icon-eye",
"hash" : "d598b1acb1933a86eaed3dea3347f7b0" "hash" : "553eb617c19b74b428558e606ff9b066"
}, },
"logo" : { "logo" : {
"name" : "logo", "name" : "logo",
"rule" : ".phabricator-main-menu-logo-image", "rule" : ".phabricator-main-menu-logo-image",
"hash" : "c6c7ab165dce13a51ef329928c7c4aba" "hash" : "6eadea2c3dd2ada989eba22b6769b3eb"
},
"round_bubble" : {
"name" : "round_bubble",
"rule" : ".phabricator-main-menu-alert-bubble",
"hash" : "9be91cc0128997992e9001baf32c8ab8"
}, },
"seen_have_unread" : { "seen_have_unread" : {
"name" : "seen_have_unread", "name" : "seen_have_unread",
"rule" : ".alert-notifications:hover .phabricator-main-menu-alert-icon", "rule" : ".alert-notifications:hover .phabricator-main-menu-alert-icon",
"hash" : "a8a7f07caa726d7e61ef3d41f959d94d" "hash" : "03a02951857811c722732dcfff9d458e"
}, },
"seen_read_all" : { "seen_read_all" : {
"name" : "seen_read_all", "name" : "seen_read_all",
"rule" : ".alert-notifications .phabricator-main-menu-alert-icon", "rule" : ".alert-notifications .phabricator-main-menu-alert-icon",
"hash" : "4fdd4807d0c41bd4179dd43150c7fc44" "hash" : "f166fc60ed7a7a8ec2f41ab1af2cb3ec"
}, },
"unseen_any" : { "unseen_any" : {
"name" : "unseen_any", "name" : "unseen_any",
"rule" : ".alert-notifications.alert-unread .phabricator-main-menu-alert-icon", "rule" : ".alert-notifications.alert-unread .phabricator-main-menu-alert-icon",
"hash" : "50d946952c73028b34e0c3378ca36b17" "hash" : "a8643b150166a076e81a42e5893a899f"
} }
}, },
"scales" : [ "scales" : [

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,3 @@
ALTER TABLE `{$NAMESPACE}_herald`.`herald_transcript`
DROP `psth`;

View file

@ -7,6 +7,13 @@
*/ */
celerity_register_resource_map(array( celerity_register_resource_map(array(
'/rsrc/image/actions/edit.png' =>
array(
'hash' => 'ae90914d120ac3838ddc633b480343f3',
'uri' => '/res/ae90914d/rsrc/image/actions/edit.png',
'disk' => '/rsrc/image/actions/edit.png',
'type' => 'png',
),
'/rsrc/image/avatar.png' => '/rsrc/image/avatar.png' =>
array( array(
'hash' => '1c5f255071537f05406adee86717ff27', 'hash' => '1c5f255071537f05406adee86717ff27',
@ -436,22 +443,22 @@ celerity_register_resource_map(array(
), ),
'/rsrc/image/sprite-apps-X2.png' => '/rsrc/image/sprite-apps-X2.png' =>
array( array(
'hash' => '984f8159dfc5bae465aa48a6ee5f00fe', 'hash' => '361e64ded74eee1094127c7878c2c385',
'uri' => '/res/984f8159/rsrc/image/sprite-apps-X2.png', 'uri' => '/res/361e64de/rsrc/image/sprite-apps-X2.png',
'disk' => '/rsrc/image/sprite-apps-X2.png', 'disk' => '/rsrc/image/sprite-apps-X2.png',
'type' => 'png', 'type' => 'png',
), ),
'/rsrc/image/sprite-apps-large-X2.png' => '/rsrc/image/sprite-apps-large-X2.png' =>
array( array(
'hash' => 'b215a44c77664577d8edf0d2ac9a8cfd', 'hash' => '73507e04b4bd4d1e8e7544f7c424fc0f',
'uri' => '/res/b215a44c/rsrc/image/sprite-apps-large-X2.png', 'uri' => '/res/73507e04/rsrc/image/sprite-apps-large-X2.png',
'disk' => '/rsrc/image/sprite-apps-large-X2.png', 'disk' => '/rsrc/image/sprite-apps-large-X2.png',
'type' => 'png', 'type' => 'png',
), ),
'/rsrc/image/sprite-apps-large.png' => '/rsrc/image/sprite-apps-large.png' =>
array( array(
'hash' => 'f60b55b3d4a2b87169444d88a9f629c6', 'hash' => '6a5aade6134954171f2f1f8507270632',
'uri' => '/res/f60b55b3/rsrc/image/sprite-apps-large.png', 'uri' => '/res/6a5aade6/rsrc/image/sprite-apps-large.png',
'disk' => '/rsrc/image/sprite-apps-large.png', 'disk' => '/rsrc/image/sprite-apps-large.png',
'type' => 'png', 'type' => 'png',
), ),
@ -464,8 +471,8 @@ celerity_register_resource_map(array(
), ),
'/rsrc/image/sprite-apps.png' => '/rsrc/image/sprite-apps.png' =>
array( array(
'hash' => '7a13551ec085fff5438c621ca5213d8e', 'hash' => '5e76c53e9f61755e5d3e7befa9d73ae5',
'uri' => '/res/7a13551e/rsrc/image/sprite-apps.png', 'uri' => '/res/5e76c53e/rsrc/image/sprite-apps.png',
'disk' => '/rsrc/image/sprite-apps.png', 'disk' => '/rsrc/image/sprite-apps.png',
'type' => 'png', 'type' => 'png',
), ),
@ -492,15 +499,15 @@ celerity_register_resource_map(array(
), ),
'/rsrc/image/sprite-menu-X2.png' => '/rsrc/image/sprite-menu-X2.png' =>
array( array(
'hash' => '11017d94e949aa169361b966716e8729', 'hash' => 'ad544a9287ca73b9e0d3f549834701ee',
'uri' => '/res/11017d94/rsrc/image/sprite-menu-X2.png', 'uri' => '/res/ad544a92/rsrc/image/sprite-menu-X2.png',
'disk' => '/rsrc/image/sprite-menu-X2.png', 'disk' => '/rsrc/image/sprite-menu-X2.png',
'type' => 'png', 'type' => 'png',
), ),
'/rsrc/image/sprite-menu.png' => '/rsrc/image/sprite-menu.png' =>
array( array(
'hash' => 'ba0f7d61f49ea50e9c3ff93b160e14c5', 'hash' => '8a6822c29bfa6f33db1c1b8b02b5c6d3',
'uri' => '/res/ba0f7d61/rsrc/image/sprite-menu.png', 'uri' => '/res/8a6822c2/rsrc/image/sprite-menu.png',
'disk' => '/rsrc/image/sprite-menu.png', 'disk' => '/rsrc/image/sprite-menu.png',
'type' => 'png', 'type' => 'png',
), ),
@ -609,7 +616,7 @@ celerity_register_resource_map(array(
), ),
'aphront-error-view-css' => 'aphront-error-view-css' =>
array( array(
'uri' => '/res/048ed376/rsrc/css/aphront/error-view.css', 'uri' => '/res/5f43a7c5/rsrc/css/aphront/error-view.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -718,7 +725,7 @@ celerity_register_resource_map(array(
), ),
'config-options-css' => 'config-options-css' =>
array( array(
'uri' => '/res/6f7f64e8/rsrc/css/application/config/config-options.css', 'uri' => '/res/e6c21f2f/rsrc/css/application/config/config-options.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -727,7 +734,7 @@ celerity_register_resource_map(array(
), ),
'conpherence-header-pane-css' => 'conpherence-header-pane-css' =>
array( array(
'uri' => '/res/e50e02c8/rsrc/css/application/conpherence/header-pane.css', 'uri' => '/res/4b8aebd2/rsrc/css/application/conpherence/header-pane.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -736,7 +743,7 @@ celerity_register_resource_map(array(
), ),
'conpherence-menu-css' => 'conpherence-menu-css' =>
array( array(
'uri' => '/res/02b20456/rsrc/css/application/conpherence/menu.css', 'uri' => '/res/0dc6b412/rsrc/css/application/conpherence/menu.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -745,7 +752,7 @@ celerity_register_resource_map(array(
), ),
'conpherence-message-pane-css' => 'conpherence-message-pane-css' =>
array( array(
'uri' => '/res/799dc191/rsrc/css/application/conpherence/message-pane.css', 'uri' => '/res/88b1927c/rsrc/css/application/conpherence/message-pane.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -763,7 +770,7 @@ celerity_register_resource_map(array(
), ),
'conpherence-widget-pane-css' => 'conpherence-widget-pane-css' =>
array( array(
'uri' => '/res/7af40cac/rsrc/css/application/conpherence/widget-pane.css', 'uri' => '/res/b3e6a558/rsrc/css/application/conpherence/widget-pane.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -1023,13 +1030,14 @@ celerity_register_resource_map(array(
), ),
'javelin-behavior-aphront-drag-and-drop' => 'javelin-behavior-aphront-drag-and-drop' =>
array( array(
'uri' => '/res/84a67d72/rsrc/js/application/core/behavior-drag-and-drop.js', 'uri' => '/res/3d809b40/rsrc/js/application/core/behavior-drag-and-drop.js',
'type' => 'js', 'type' => 'js',
'requires' => 'requires' =>
array( array(
0 => 'javelin-behavior', 0 => 'javelin-behavior',
1 => 'javelin-dom', 1 => 'javelin-dom',
2 => 'phabricator-drag-and-drop-file-upload', 2 => 'phabricator-file-upload',
3 => 'phabricator-drag-and-drop-file-upload',
), ),
'disk' => '/rsrc/js/application/core/behavior-drag-and-drop.js', 'disk' => '/rsrc/js/application/core/behavior-drag-and-drop.js',
), ),
@ -2705,7 +2713,7 @@ celerity_register_resource_map(array(
), ),
'phabricator-main-menu-view' => 'phabricator-main-menu-view' =>
array( array(
'uri' => '/res/a38edb46/rsrc/css/application/base/main-menu-view.css', 'uri' => '/res/38ec42d4/rsrc/css/application/base/main-menu-view.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -2766,7 +2774,7 @@ celerity_register_resource_map(array(
), ),
'phabricator-object-item-list-view-css' => 'phabricator-object-item-list-view-css' =>
array( array(
'uri' => '/res/1f9c7ebb/rsrc/css/layout/phabricator-object-item-list-view.css', 'uri' => '/res/2fb97c5c/rsrc/css/layout/phabricator-object-item-list-view.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -2920,7 +2928,7 @@ celerity_register_resource_map(array(
), ),
'phabricator-source-code-view-css' => 'phabricator-source-code-view-css' =>
array( array(
'uri' => '/res/87935c75/rsrc/css/layout/phabricator-source-code-view.css', 'uri' => '/res/9373e769/rsrc/css/layout/phabricator-source-code-view.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -3256,7 +3264,7 @@ celerity_register_resource_map(array(
), ),
'sprite-apps-css' => 'sprite-apps-css' =>
array( array(
'uri' => '/res/2d8a940e/rsrc/css/sprite-apps.css', 'uri' => '/res/8de495b4/rsrc/css/sprite-apps.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -3265,7 +3273,7 @@ celerity_register_resource_map(array(
), ),
'sprite-apps-large-css' => 'sprite-apps-large-css' =>
array( array(
'uri' => '/res/6b528e03/rsrc/css/sprite-apps-large.css', 'uri' => '/res/174143b7/rsrc/css/sprite-apps-large.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -3301,7 +3309,7 @@ celerity_register_resource_map(array(
), ),
'sprite-menu-css' => 'sprite-menu-css' =>
array( array(
'uri' => '/res/3d9f75af/rsrc/css/sprite-menu.css', 'uri' => '/res/8e6624b0/rsrc/css/sprite-menu.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -3338,7 +3346,7 @@ celerity_register_resource_map(array(
), array( ), array(
'packages' => 'packages' =>
array( array(
'8fd19266' => '023adc14' =>
array( array(
'name' => 'core.pkg.css', 'name' => 'core.pkg.css',
'symbols' => 'symbols' =>
@ -3382,7 +3390,7 @@ celerity_register_resource_map(array(
36 => 'phabricator-object-item-list-view-css', 36 => 'phabricator-object-item-list-view-css',
37 => 'global-drag-and-drop-css', 37 => 'global-drag-and-drop-css',
), ),
'uri' => '/res/pkg/8fd19266/core.pkg.css', 'uri' => '/res/pkg/023adc14/core.pkg.css',
'type' => 'css', 'type' => 'css',
), ),
'66dca903' => '66dca903' =>
@ -3462,7 +3470,7 @@ celerity_register_resource_map(array(
'uri' => '/res/pkg/ec01d039/differential.pkg.css', 'uri' => '/res/pkg/ec01d039/differential.pkg.css',
'type' => 'css', 'type' => 'css',
), ),
'ac53d36a' => '310cd201' =>
array( array(
'name' => 'differential.pkg.js', 'name' => 'differential.pkg.js',
'symbols' => 'symbols' =>
@ -3487,7 +3495,7 @@ celerity_register_resource_map(array(
17 => 'javelin-behavior-differential-toggle-files', 17 => 'javelin-behavior-differential-toggle-files',
18 => 'javelin-behavior-differential-user-select', 18 => 'javelin-behavior-differential-user-select',
), ),
'uri' => '/res/pkg/ac53d36a/differential.pkg.js', 'uri' => '/res/pkg/310cd201/differential.pkg.js',
'type' => 'js', 'type' => 'js',
), ),
'c8ce2d88' => 'c8ce2d88' =>
@ -3572,22 +3580,22 @@ celerity_register_resource_map(array(
'reverse' => 'reverse' =>
array( array(
'aphront-attached-file-view-css' => 'e30a3fa8', 'aphront-attached-file-view-css' => 'e30a3fa8',
'aphront-crumbs-view-css' => '8fd19266', 'aphront-crumbs-view-css' => '023adc14',
'aphront-dialog-view-css' => '8fd19266', 'aphront-dialog-view-css' => '023adc14',
'aphront-error-view-css' => '8fd19266', 'aphront-error-view-css' => '023adc14',
'aphront-form-view-css' => '8fd19266', 'aphront-form-view-css' => '023adc14',
'aphront-headsup-action-list-view-css' => 'ec01d039', 'aphront-headsup-action-list-view-css' => 'ec01d039',
'aphront-headsup-view-css' => '8fd19266', 'aphront-headsup-view-css' => '023adc14',
'aphront-list-filter-view-css' => '8fd19266', 'aphront-list-filter-view-css' => '023adc14',
'aphront-pager-view-css' => '8fd19266', 'aphront-pager-view-css' => '023adc14',
'aphront-panel-view-css' => '8fd19266', 'aphront-panel-view-css' => '023adc14',
'aphront-table-view-css' => '8fd19266', 'aphront-table-view-css' => '023adc14',
'aphront-tokenizer-control-css' => '8fd19266', 'aphront-tokenizer-control-css' => '023adc14',
'aphront-tooltip-css' => '8fd19266', 'aphront-tooltip-css' => '023adc14',
'aphront-typeahead-control-css' => '8fd19266', 'aphront-typeahead-control-css' => '023adc14',
'differential-changeset-view-css' => 'ec01d039', 'differential-changeset-view-css' => 'ec01d039',
'differential-core-view-css' => 'ec01d039', 'differential-core-view-css' => 'ec01d039',
'differential-inline-comment-editor' => 'ac53d36a', 'differential-inline-comment-editor' => '310cd201',
'differential-local-commits-view-css' => 'ec01d039', 'differential-local-commits-view-css' => 'ec01d039',
'differential-results-table-css' => 'ec01d039', 'differential-results-table-css' => 'ec01d039',
'differential-revision-add-comment-css' => 'ec01d039', 'differential-revision-add-comment-css' => 'ec01d039',
@ -3598,32 +3606,32 @@ celerity_register_resource_map(array(
'differential-table-of-contents-css' => 'ec01d039', 'differential-table-of-contents-css' => 'ec01d039',
'diffusion-commit-view-css' => 'c8ce2d88', 'diffusion-commit-view-css' => 'c8ce2d88',
'diffusion-icons-css' => 'c8ce2d88', 'diffusion-icons-css' => 'c8ce2d88',
'global-drag-and-drop-css' => '8fd19266', 'global-drag-and-drop-css' => '023adc14',
'inline-comment-summary-css' => 'ec01d039', 'inline-comment-summary-css' => 'ec01d039',
'javelin-aphlict' => '66dca903', 'javelin-aphlict' => '66dca903',
'javelin-behavior' => 'fbeded59', 'javelin-behavior' => 'fbeded59',
'javelin-behavior-aphlict-dropdown' => '66dca903', 'javelin-behavior-aphlict-dropdown' => '66dca903',
'javelin-behavior-aphlict-listen' => '66dca903', 'javelin-behavior-aphlict-listen' => '66dca903',
'javelin-behavior-aphront-basic-tokenizer' => '66dca903', 'javelin-behavior-aphront-basic-tokenizer' => '66dca903',
'javelin-behavior-aphront-drag-and-drop' => 'ac53d36a', 'javelin-behavior-aphront-drag-and-drop' => '310cd201',
'javelin-behavior-aphront-drag-and-drop-textarea' => 'ac53d36a', 'javelin-behavior-aphront-drag-and-drop-textarea' => '310cd201',
'javelin-behavior-aphront-form-disable-on-submit' => '66dca903', 'javelin-behavior-aphront-form-disable-on-submit' => '66dca903',
'javelin-behavior-audit-preview' => 'f96657b8', 'javelin-behavior-audit-preview' => 'f96657b8',
'javelin-behavior-dark-console' => '8edbada5', 'javelin-behavior-dark-console' => '8edbada5',
'javelin-behavior-dark-console-ajax' => '8edbada5', 'javelin-behavior-dark-console-ajax' => '8edbada5',
'javelin-behavior-device' => '66dca903', 'javelin-behavior-device' => '66dca903',
'javelin-behavior-differential-accept-with-errors' => 'ac53d36a', 'javelin-behavior-differential-accept-with-errors' => '310cd201',
'javelin-behavior-differential-add-reviewers-and-ccs' => 'ac53d36a', 'javelin-behavior-differential-add-reviewers-and-ccs' => '310cd201',
'javelin-behavior-differential-comment-jump' => 'ac53d36a', 'javelin-behavior-differential-comment-jump' => '310cd201',
'javelin-behavior-differential-diff-radios' => 'ac53d36a', 'javelin-behavior-differential-diff-radios' => '310cd201',
'javelin-behavior-differential-dropdown-menus' => 'ac53d36a', 'javelin-behavior-differential-dropdown-menus' => '310cd201',
'javelin-behavior-differential-edit-inline-comments' => 'ac53d36a', 'javelin-behavior-differential-edit-inline-comments' => '310cd201',
'javelin-behavior-differential-feedback-preview' => 'ac53d36a', 'javelin-behavior-differential-feedback-preview' => '310cd201',
'javelin-behavior-differential-keyboard-navigation' => 'ac53d36a', 'javelin-behavior-differential-keyboard-navigation' => '310cd201',
'javelin-behavior-differential-populate' => 'ac53d36a', 'javelin-behavior-differential-populate' => '310cd201',
'javelin-behavior-differential-show-more' => 'ac53d36a', 'javelin-behavior-differential-show-more' => '310cd201',
'javelin-behavior-differential-toggle-files' => 'ac53d36a', 'javelin-behavior-differential-toggle-files' => '310cd201',
'javelin-behavior-differential-user-select' => 'ac53d36a', 'javelin-behavior-differential-user-select' => '310cd201',
'javelin-behavior-diffusion-commit-graph' => 'f96657b8', 'javelin-behavior-diffusion-commit-graph' => 'f96657b8',
'javelin-behavior-diffusion-pull-lastmodified' => 'f96657b8', 'javelin-behavior-diffusion-pull-lastmodified' => 'f96657b8',
'javelin-behavior-error-log' => '8edbada5', 'javelin-behavior-error-log' => '8edbada5',
@ -3640,14 +3648,14 @@ celerity_register_resource_map(array(
'javelin-behavior-phabricator-home-reveal-tiles' => '66dca903', 'javelin-behavior-phabricator-home-reveal-tiles' => '66dca903',
'javelin-behavior-phabricator-keyboard-shortcuts' => '66dca903', 'javelin-behavior-phabricator-keyboard-shortcuts' => '66dca903',
'javelin-behavior-phabricator-nav' => '66dca903', 'javelin-behavior-phabricator-nav' => '66dca903',
'javelin-behavior-phabricator-object-selector' => 'ac53d36a', 'javelin-behavior-phabricator-object-selector' => '310cd201',
'javelin-behavior-phabricator-oncopy' => '66dca903', 'javelin-behavior-phabricator-oncopy' => '66dca903',
'javelin-behavior-phabricator-remarkup-assist' => '66dca903', 'javelin-behavior-phabricator-remarkup-assist' => '66dca903',
'javelin-behavior-phabricator-search-typeahead' => '66dca903', 'javelin-behavior-phabricator-search-typeahead' => '66dca903',
'javelin-behavior-phabricator-tooltips' => '66dca903', 'javelin-behavior-phabricator-tooltips' => '66dca903',
'javelin-behavior-phabricator-watch-anchor' => '66dca903', 'javelin-behavior-phabricator-watch-anchor' => '66dca903',
'javelin-behavior-refresh-csrf' => '66dca903', 'javelin-behavior-refresh-csrf' => '66dca903',
'javelin-behavior-repository-crossreference' => 'ac53d36a', 'javelin-behavior-repository-crossreference' => '310cd201',
'javelin-behavior-toggle-class' => '66dca903', 'javelin-behavior-toggle-class' => '66dca903',
'javelin-behavior-workflow' => '66dca903', 'javelin-behavior-workflow' => '66dca903',
'javelin-dom' => 'fbeded59', 'javelin-dom' => 'fbeded59',
@ -3668,48 +3676,48 @@ celerity_register_resource_map(array(
'javelin-util' => 'fbeded59', 'javelin-util' => 'fbeded59',
'javelin-vector' => 'fbeded59', 'javelin-vector' => 'fbeded59',
'javelin-workflow' => 'fbeded59', 'javelin-workflow' => 'fbeded59',
'lightbox-attachment-css' => '8fd19266', 'lightbox-attachment-css' => '023adc14',
'maniphest-task-summary-css' => 'e30a3fa8', 'maniphest-task-summary-css' => 'e30a3fa8',
'maniphest-transaction-detail-css' => 'e30a3fa8', 'maniphest-transaction-detail-css' => 'e30a3fa8',
'phabricator-busy' => '66dca903', 'phabricator-busy' => '66dca903',
'phabricator-content-source-view-css' => 'ec01d039', 'phabricator-content-source-view-css' => 'ec01d039',
'phabricator-core-buttons-css' => '8fd19266', 'phabricator-core-buttons-css' => '023adc14',
'phabricator-core-css' => '8fd19266', 'phabricator-core-css' => '023adc14',
'phabricator-crumbs-view-css' => '8fd19266', 'phabricator-crumbs-view-css' => '023adc14',
'phabricator-directory-css' => '8fd19266', 'phabricator-directory-css' => '023adc14',
'phabricator-drag-and-drop-file-upload' => 'ac53d36a', 'phabricator-drag-and-drop-file-upload' => '310cd201',
'phabricator-dropdown-menu' => '66dca903', 'phabricator-dropdown-menu' => '66dca903',
'phabricator-file-upload' => '66dca903', 'phabricator-file-upload' => '66dca903',
'phabricator-filetree-view-css' => '8fd19266', 'phabricator-filetree-view-css' => '023adc14',
'phabricator-flag-css' => '8fd19266', 'phabricator-flag-css' => '023adc14',
'phabricator-form-view-css' => '8fd19266', 'phabricator-form-view-css' => '023adc14',
'phabricator-header-view-css' => '8fd19266', 'phabricator-header-view-css' => '023adc14',
'phabricator-jump-nav' => '8fd19266', 'phabricator-jump-nav' => '023adc14',
'phabricator-keyboard-shortcut' => '66dca903', 'phabricator-keyboard-shortcut' => '66dca903',
'phabricator-keyboard-shortcut-manager' => '66dca903', 'phabricator-keyboard-shortcut-manager' => '66dca903',
'phabricator-main-menu-view' => '8fd19266', 'phabricator-main-menu-view' => '023adc14',
'phabricator-menu-item' => '66dca903', 'phabricator-menu-item' => '66dca903',
'phabricator-nav-view-css' => '8fd19266', 'phabricator-nav-view-css' => '023adc14',
'phabricator-notification' => '66dca903', 'phabricator-notification' => '66dca903',
'phabricator-notification-css' => '8fd19266', 'phabricator-notification-css' => '023adc14',
'phabricator-notification-menu-css' => '8fd19266', 'phabricator-notification-menu-css' => '023adc14',
'phabricator-object-item-list-view-css' => '8fd19266', 'phabricator-object-item-list-view-css' => '023adc14',
'phabricator-object-selector-css' => 'ec01d039', 'phabricator-object-selector-css' => 'ec01d039',
'phabricator-paste-file-upload' => '66dca903', 'phabricator-paste-file-upload' => '66dca903',
'phabricator-prefab' => '66dca903', 'phabricator-prefab' => '66dca903',
'phabricator-project-tag-css' => 'e30a3fa8', 'phabricator-project-tag-css' => 'e30a3fa8',
'phabricator-remarkup-css' => '8fd19266', 'phabricator-remarkup-css' => '023adc14',
'phabricator-shaped-request' => 'ac53d36a', 'phabricator-shaped-request' => '310cd201',
'phabricator-side-menu-view-css' => '8fd19266', 'phabricator-side-menu-view-css' => '023adc14',
'phabricator-standard-page-view' => '8fd19266', 'phabricator-standard-page-view' => '023adc14',
'phabricator-textareautils' => '66dca903', 'phabricator-textareautils' => '66dca903',
'phabricator-tooltip' => '66dca903', 'phabricator-tooltip' => '66dca903',
'phabricator-transaction-view-css' => '8fd19266', 'phabricator-transaction-view-css' => '023adc14',
'phabricator-zindex-css' => '8fd19266', 'phabricator-zindex-css' => '023adc14',
'sprite-apps-large-css' => '8fd19266', 'sprite-apps-large-css' => '023adc14',
'sprite-gradient-css' => '8fd19266', 'sprite-gradient-css' => '023adc14',
'sprite-icon-css' => '8fd19266', 'sprite-icon-css' => '023adc14',
'sprite-menu-css' => '8fd19266', 'sprite-menu-css' => '023adc14',
'syntax-highlighting-css' => '8fd19266', 'syntax-highlighting-css' => '023adc14',
), ),
)); ));

View file

@ -195,6 +195,7 @@ phutil_register_library_map(array(
'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php', 'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php',
'ConduitException' => 'applications/conduit/protocol/ConduitException.php', 'ConduitException' => 'applications/conduit/protocol/ConduitException.php',
'ConduitSSHWorkflow' => 'applications/conduit/ssh/ConduitSSHWorkflow.php', 'ConduitSSHWorkflow' => 'applications/conduit/ssh/ConduitSSHWorkflow.php',
'ConpherenceConfigOptions' => 'applications/conpherence/config/ConpherenceConfigOptions.php',
'ConpherenceConstants' => 'applications/conpherence/constants/ConpherenceConstants.php', 'ConpherenceConstants' => 'applications/conpherence/constants/ConpherenceConstants.php',
'ConpherenceController' => 'applications/conpherence/controller/ConpherenceController.php', 'ConpherenceController' => 'applications/conpherence/controller/ConpherenceController.php',
'ConpherenceDAO' => 'applications/conpherence/storage/ConpherenceDAO.php', 'ConpherenceDAO' => 'applications/conpherence/storage/ConpherenceDAO.php',
@ -205,6 +206,7 @@ phutil_register_library_map(array(
'ConpherenceParticipant' => 'applications/conpherence/storage/ConpherenceParticipant.php', 'ConpherenceParticipant' => 'applications/conpherence/storage/ConpherenceParticipant.php',
'ConpherenceParticipantQuery' => 'applications/conpherence/query/ConpherenceParticipantQuery.php', 'ConpherenceParticipantQuery' => 'applications/conpherence/query/ConpherenceParticipantQuery.php',
'ConpherenceParticipationStatus' => 'applications/conpherence/constants/ConpherenceParticipationStatus.php', 'ConpherenceParticipationStatus' => 'applications/conpherence/constants/ConpherenceParticipationStatus.php',
'ConpherenceReplyHandler' => 'applications/conpherence/mail/ConpherenceReplyHandler.php',
'ConpherenceThread' => 'applications/conpherence/storage/ConpherenceThread.php', 'ConpherenceThread' => 'applications/conpherence/storage/ConpherenceThread.php',
'ConpherenceThreadQuery' => 'applications/conpherence/query/ConpherenceThreadQuery.php', 'ConpherenceThreadQuery' => 'applications/conpherence/query/ConpherenceThreadQuery.php',
'ConpherenceTransaction' => 'applications/conpherence/storage/ConpherenceTransaction.php', 'ConpherenceTransaction' => 'applications/conpherence/storage/ConpherenceTransaction.php',
@ -1666,6 +1668,7 @@ phutil_register_library_map(array(
'ConduitCallTestCase' => 'PhabricatorTestCase', 'ConduitCallTestCase' => 'PhabricatorTestCase',
'ConduitException' => 'Exception', 'ConduitException' => 'Exception',
'ConduitSSHWorkflow' => 'PhabricatorSSHWorkflow', 'ConduitSSHWorkflow' => 'PhabricatorSSHWorkflow',
'ConpherenceConfigOptions' => 'PhabricatorApplicationConfigOptions',
'ConpherenceController' => 'PhabricatorController', 'ConpherenceController' => 'PhabricatorController',
'ConpherenceDAO' => 'PhabricatorLiskDAO', 'ConpherenceDAO' => 'PhabricatorLiskDAO',
'ConpherenceEditor' => 'PhabricatorApplicationTransactionEditor', 'ConpherenceEditor' => 'PhabricatorApplicationTransactionEditor',
@ -1675,6 +1678,7 @@ phutil_register_library_map(array(
'ConpherenceParticipant' => 'ConpherenceDAO', 'ConpherenceParticipant' => 'ConpherenceDAO',
'ConpherenceParticipantQuery' => 'PhabricatorOffsetPagedQuery', 'ConpherenceParticipantQuery' => 'PhabricatorOffsetPagedQuery',
'ConpherenceParticipationStatus' => 'ConpherenceConstants', 'ConpherenceParticipationStatus' => 'ConpherenceConstants',
'ConpherenceReplyHandler' => 'PhabricatorMailReplyHandler',
'ConpherenceThread' => 'ConpherenceThread' =>
array( array(
0 => 'ConpherenceDAO', 0 => 'ConpherenceDAO',

View file

@ -5,7 +5,7 @@ abstract class PhabricatorAuthController extends PhabricatorController {
public function buildStandardPageResponse($view, array $data) { public function buildStandardPageResponse($view, array $data) {
$page = $this->buildStandardPageView(); $page = $this->buildStandardPageView();
$page->setApplicationName('Login'); $page->setApplicationName(pht('Login'));
$page->setBaseURI('/login/'); $page->setBaseURI('/login/');
$page->setTitle(idx($data, 'title')); $page->setTitle(idx($data, 'title'));
$page->appendChild($view); $page->appendChild($view);

View file

@ -15,13 +15,14 @@ final class PhabricatorDisabledUserController
} }
$failure_view = new AphrontRequestFailureView(); $failure_view = new AphrontRequestFailureView();
$failure_view->setHeader('Account Disabled'); $failure_view->setHeader(pht('Account Disabled'));
$failure_view->appendChild('<p>Your account has been disabled.</p>'); $failure_view->appendChild(
'<p>'.pht('Your account has been disabled.').'</p>');
return $this->buildStandardPageResponse( return $this->buildStandardPageResponse(
$failure_view, $failure_view,
array( array(
'title' => 'Account Disabled', 'title' => pht('Account Disabled'),
)); ));
} }

View file

@ -22,18 +22,18 @@ final class PhabricatorEmailLoginController
if ($request->isFormPost()) { if ($request->isFormPost()) {
$e_email = null; $e_email = null;
$e_captcha = 'Again'; $e_captcha = pht('Again');
$captcha_ok = AphrontFormRecaptchaControl::processCaptcha($request); $captcha_ok = AphrontFormRecaptchaControl::processCaptcha($request);
if (!$captcha_ok) { if (!$captcha_ok) {
$errors[] = "Captcha response is incorrect, try again."; $errors[] = pht("Captcha response is incorrect, try again.");
$e_captcha = 'Invalid'; $e_captcha = pht('Invalid');
} }
$email = $request->getStr('email'); $email = $request->getStr('email');
if (!strlen($email)) { if (!strlen($email)) {
$errors[] = "You must provide an email address."; $errors[] = pht("You must provide an email address.");
$e_email = 'Required'; $e_email = pht('Required');
} }
if (!$errors) { if (!$errors) {
@ -53,8 +53,9 @@ final class PhabricatorEmailLoginController
} }
if (!$target_user) { if (!$target_user) {
$errors[] = "There is no account associated with that email address."; $errors[] =
$e_email = "Invalid"; pht("There is no account associated with that email address.");
$e_email = pht("Invalid");
} }
if (!$errors) { if (!$errors) {
@ -96,13 +97,15 @@ EOBODY;
$mail->saveAndSend(); $mail->saveAndSend();
$view = new AphrontRequestFailureView(); $view = new AphrontRequestFailureView();
$view->setHeader('Check Your Email'); $view->setHeader(pht('Check Your Email'));
$view->appendChild( $view->appendChild(
'<p>An email has been sent with a link you can use to login.</p>'); '<p>'.pht(
'An email has been sent with a link you can use to login.'
).'</p>');
return $this->buildStandardPageResponse( return $this->buildStandardPageResponse(
$view, $view,
array( array(
'title' => 'Email Sent', 'title' => pht('Email Sent'),
)); ));
} }
} }
@ -115,38 +118,41 @@ EOBODY;
->setUser($request->getUser()) ->setUser($request->getUser())
->appendChild( ->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel('Email') ->setLabel(pht('Email'))
->setName('email') ->setName('email')
->setValue($request->getStr('email')) ->setValue($request->getStr('email'))
->setError($e_email)) ->setError($e_email))
->appendChild( ->appendChild(
id(new AphrontFormRecaptchaControl()) id(new AphrontFormRecaptchaControl())
->setLabel('Captcha') ->setLabel(pht('Captcha'))
->setError($e_captcha)) ->setError($e_captcha))
->appendChild( ->appendChild(
id(new AphrontFormSubmitControl()) id(new AphrontFormSubmitControl())
->setValue('Send Email')); ->setValue(pht('Send Email')));
$error_view = null; $error_view = null;
if ($errors) { if ($errors) {
$error_view = new AphrontErrorView(); $error_view = new AphrontErrorView();
$error_view->setTitle('Login Error'); $error_view->setTitle(pht('Login Error'));
$error_view->setErrors($errors); $error_view->setErrors($errors);
} }
$panel = new AphrontPanelView(); $panel = new AphrontPanelView();
$panel->setWidth(AphrontPanelView::WIDTH_FORM); $panel->setWidth(AphrontPanelView::WIDTH_FORM);
$panel->appendChild('<h1>Forgot Password / Email Login</h1>'); $panel->appendChild('
<h1>'.pht('Forgot Password / Email Login').'</h1>');
$panel->appendChild($email_auth); $panel->appendChild($email_auth);
$panel->setNoBackground();
return $this->buildStandardPageResponse( return $this->buildApplicationPage(
array( array(
$error_view, $error_view,
$panel, $panel,
), ),
array( array(
'title' => 'Create New Account', 'title' => pht('Forgot Password'),
'device' => true,
)); ));
} }

View file

@ -49,21 +49,23 @@ final class PhabricatorEmailTokenController
!$target_user->validateEmailToken($target_email, $token)) { !$target_user->validateEmailToken($target_email, $token)) {
$view = new AphrontRequestFailureView(); $view = new AphrontRequestFailureView();
$view->setHeader('Unable to Login'); $view->setHeader(pht('Unable to Login'));
$view->appendChild( $view->appendChild(
'<p>The authentication information in the link you clicked is '. '<p>'.pht('The authentication information in the link you clicked is '.
'invalid or out of date. Make sure you are copy-and-pasting the '. 'invalid or out of date. Make sure you are copy-and-pasting the '.
'entire link into your browser. You can try again, or request '. 'entire link into your browser. You can try again, or request '.
'a new email.</p>'); 'a new email.').'</p>');
$view->appendChild( $view->appendChild(
'<div class="aphront-failure-continue">'. '<div class="aphront-failure-continue">'.
'<a class="button" href="/login/email/">Send Another Email</a>'. '<a class="button" href="/login/email/">'.
pht('Send Another Email').
'</a>'.
'</div>'); '</div>');
return $this->buildStandardPageResponse( return $this->buildStandardPageResponse(
$view, $view,
array( array(
'title' => 'Login Failure', 'title' => pht('Login Failure'),
)); ));
} }

View file

@ -42,11 +42,12 @@ final class PhabricatorLDAPLoginController extends PhabricatorAuthController {
$existing_ldap) { $existing_ldap) {
$dialog = new AphrontDialogView(); $dialog = new AphrontDialogView();
$dialog->setUser($current_user); $dialog->setUser($current_user);
$dialog->setTitle('Already Linked to Another Account'); $dialog->setTitle(pht('Already Linked to Another Account'));
$dialog->appendChild( $dialog->appendChild(
'<p>The LDAP account you just authorized is already linked to '. '<p>'.pht('The LDAP account you just authorized is already '.
'another Phabricator account. Before you can link it to a '. 'linked toanother Phabricator account. Before you can link it '.
'different LDAP account, you must unlink the old account.</p>' 'to a different LDAP account, you must unlink the old '.
'account.').'</p>'
); );
$dialog->addCancelButton('/settings/panel/ldap/'); $dialog->addCancelButton('/settings/panel/ldap/');
@ -60,12 +61,14 @@ final class PhabricatorLDAPLoginController extends PhabricatorAuthController {
if (!$request->isDialogFormPost()) { if (!$request->isDialogFormPost()) {
$dialog = new AphrontDialogView(); $dialog = new AphrontDialogView();
$dialog->setUser($current_user); $dialog->setUser($current_user);
$dialog->setTitle('Link LDAP Account'); $dialog->setTitle(pht('Link LDAP Account'));
$dialog->appendChild( $dialog->appendChild(
'<p>Link your LDAP account to your Phabricator account?</p>'); '<p>'.
pht('Link your LDAP account to your Phabricator account?').
'</p>');
$dialog->addHiddenInput('username', $request->getStr('username')); $dialog->addHiddenInput('username', $request->getStr('username'));
$dialog->addHiddenInput('password', $request->getStr('password')); $dialog->addHiddenInput('password', $request->getStr('password'));
$dialog->addSubmitButton('Link Accounts'); $dialog->addSubmitButton(pht('Link Accounts'));
$dialog->addCancelButton('/settings/panel/ldap/'); $dialog->addCancelButton('/settings/panel/ldap/');
return id(new AphrontDialogResponse())->setDialog($dialog); return id(new AphrontDialogResponse())->setDialog($dialog);
@ -116,27 +119,27 @@ final class PhabricatorLDAPLoginController extends PhabricatorAuthController {
->setAction('/ldap/login/') ->setAction('/ldap/login/')
->appendChild( ->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel('LDAP username') ->setLabel(pht('LDAP username'))
->setName('username') ->setName('username')
->setValue($ldap_username)) ->setValue($ldap_username))
->appendChild( ->appendChild(
id(new AphrontFormPasswordControl()) id(new AphrontFormPasswordControl())
->setLabel('Password') ->setLabel(pht('Password'))
->setName('password')); ->setName('password'));
$ldap_form $ldap_form
->appendChild( ->appendChild(
id(new AphrontFormSubmitControl()) id(new AphrontFormSubmitControl())
->setValue('Login')); ->setValue(pht('Login')));
$panel = new AphrontPanelView(); $panel = new AphrontPanelView();
$panel->setWidth(AphrontPanelView::WIDTH_FORM); $panel->setWidth(AphrontPanelView::WIDTH_FORM);
$panel->appendChild('<h1>LDAP login</h1>'); $panel->appendChild('<h1>'.pht('LDAP login').'</h1>');
$panel->appendChild($ldap_form); $panel->appendChild($ldap_form);
if (isset($errors) && count($errors) > 0) { if (isset($errors) && count($errors) > 0) {
$error_view = new AphrontErrorView(); $error_view = new AphrontErrorView();
$error_view->setTitle('Login Failed'); $error_view->setTitle(pht('Login Failed'));
$error_view->setErrors($errors); $error_view->setErrors($errors);
} }
@ -146,7 +149,7 @@ final class PhabricatorLDAPLoginController extends PhabricatorAuthController {
$panel, $panel,
), ),
array( array(
'title' => 'Login', 'title' => pht('Login'),
)); ));
} }

View file

@ -63,10 +63,10 @@ extends PhabricatorAuthController {
$user->setUsername($request->getStr('username')); $user->setUsername($request->getStr('username'));
$username = $user->getUsername(); $username = $user->getUsername();
if (!strlen($user->getUsername())) { if (!strlen($user->getUsername())) {
$e_username = 'Required'; $e_username = pht('Required');
$errors[] = 'Username is required.'; $errors[] = pht('Username is required.');
} else if (!PhabricatorUser::validateUsername($username)) { } else if (!PhabricatorUser::validateUsername($username)) {
$e_username = 'Invalid'; $e_username = pht('Invalid');
$errors[] = PhabricatorUser::describeValidUsername(); $errors[] = PhabricatorUser::describeValidUsername();
} else { } else {
$e_username = null; $e_username = null;
@ -75,8 +75,8 @@ extends PhabricatorAuthController {
if (!$new_email) { if (!$new_email) {
$new_email = trim($request->getStr('email')); $new_email = trim($request->getStr('email'));
if (!$new_email) { if (!$new_email) {
$e_email = 'Required'; $e_email = pht('Required');
$errors[] = 'Email is required.'; $errors[] = pht('Email is required.');
} else { } else {
$e_email = null; $e_email = null;
} }
@ -84,7 +84,7 @@ extends PhabricatorAuthController {
if ($new_email) { if ($new_email) {
if (!PhabricatorUserEmail::isAllowedAddress($new_email)) { if (!PhabricatorUserEmail::isAllowedAddress($new_email)) {
$e_email = 'Invalid'; $e_email = pht('Invalid');
$errors[] = PhabricatorUserEmail::describeAllowedAddresses(); $errors[] = PhabricatorUserEmail::describeAllowedAddresses();
} }
} }
@ -92,8 +92,8 @@ extends PhabricatorAuthController {
if (!strlen($user->getRealName())) { if (!strlen($user->getRealName())) {
$user->setRealName($request->getStr('realname')); $user->setRealName($request->getStr('realname'));
if (!strlen($user->getRealName())) { if (!strlen($user->getRealName())) {
$e_realname = 'Required'; $e_realname = pht('Required');
$errors[] = 'Real name is required.'; $errors[] = pht('Real name is required.');
} else { } else {
$e_realname = null; $e_realname = null;
} }
@ -137,11 +137,11 @@ extends PhabricatorAuthController {
$new_email); $new_email);
if ($same_username) { if ($same_username) {
$e_username = 'Duplicate'; $e_username = pht('Duplicate');
$errors[] = 'That username or email is not unique.'; $errors[] = pht('That username or email is not unique.');
} else if ($same_email) { } else if ($same_email) {
$e_email = 'Duplicate'; $e_email = pht('Duplicate');
$errors[] = 'That email is not unique.'; $errors[] = pht('That email is not unique.');
} else { } else {
throw $exception; throw $exception;
} }
@ -153,7 +153,7 @@ extends PhabricatorAuthController {
$error_view = null; $error_view = null;
if ($errors) { if ($errors) {
$error_view = new AphrontErrorView(); $error_view = new AphrontErrorView();
$error_view->setTitle('Registration Failed'); $error_view->setTitle(pht('Registration Failed'));
$error_view->setErrors($errors); $error_view->setErrors($errors);
} }
@ -169,20 +169,20 @@ extends PhabricatorAuthController {
->setAction($action_path) ->setAction($action_path)
->appendChild( ->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel('Username') ->setLabel(pht('Username'))
->setName('username') ->setName('username')
->setValue($user->getUsername()) ->setValue($user->getUsername())
->setError($e_username)); ->setError($e_username));
$form->appendChild( $form->appendChild(
id(new AphrontFormPasswordControl()) id(new AphrontFormPasswordControl())
->setLabel('Password') ->setLabel(pht('Password'))
->setName('password')); ->setName('password'));
if ($show_email_input) { if ($show_email_input) {
$form->appendChild( $form->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel('Email') ->setLabel(pht('Email'))
->setName('email') ->setName('email')
->setValue($request->getStr('email')) ->setValue($request->getStr('email'))
->setError($e_email)); ->setError($e_email));
@ -191,7 +191,7 @@ extends PhabricatorAuthController {
if ($provider->retrieveUserRealName() === null) { if ($provider->retrieveUserRealName() === null) {
$form->appendChild( $form->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel('Real Name') ->setLabel(pht('Real Name'))
->setName('realname') ->setName('realname')
->setValue($request->getStr('realname')) ->setValue($request->getStr('realname'))
->setError($e_realname)); ->setError($e_realname));
@ -200,10 +200,10 @@ extends PhabricatorAuthController {
$form $form
->appendChild( ->appendChild(
id(new AphrontFormSubmitControl()) id(new AphrontFormSubmitControl())
->setValue('Create Account')); ->setValue(pht('Create Account')));
$panel = new AphrontPanelView(); $panel = new AphrontPanelView();
$panel->setHeader('Create New Account'); $panel->setHeader(pht('Create New Account'));
$panel->setWidth(AphrontPanelView::WIDTH_FORM); $panel->setWidth(AphrontPanelView::WIDTH_FORM);
$panel->appendChild($form); $panel->appendChild($form);
@ -213,7 +213,7 @@ extends PhabricatorAuthController {
$panel, $panel,
), ),
array( array(
'title' => 'Create New Account', 'title' => pht('Create New Account'),
)); ));
} }

View file

@ -17,11 +17,11 @@ final class PhabricatorLDAPUnlinkController extends PhabricatorAuthController {
if (!$request->isDialogFormPost()) { if (!$request->isDialogFormPost()) {
$dialog = new AphrontDialogView(); $dialog = new AphrontDialogView();
$dialog->setUser($user); $dialog->setUser($user);
$dialog->setTitle('Really unlink account?'); $dialog->setTitle(pht('Really unlink account?'));
$dialog->appendChild( $dialog->appendChild(
'<p><strong>You will not be able to login</strong> using this account '. '<p>'.pht('You will not be able to login using this account '.
'once you unlink it. Continue?</p>'); 'once you unlink it. Continue?').'</p>');
$dialog->addSubmitButton('Unlink Account'); $dialog->addSubmitButton(pht('Unlink Account'));
$dialog->addCancelButton('/settings/panel/ldap/'); $dialog->addCancelButton('/settings/panel/ldap/');
return id(new AphrontDialogResponse())->setDialog($dialog); return id(new AphrontDialogResponse())->setDialog($dialog);

View file

@ -28,10 +28,10 @@ final class PhabricatorLoginController
$dialog = new AphrontDialogView(); $dialog = new AphrontDialogView();
$dialog->setUser($user); $dialog->setUser($user);
$dialog->setTitle('Login Required'); $dialog->setTitle(pht('Login Required'));
$dialog->appendChild('<p>You must login to continue.</p>'); $dialog->appendChild('<p>'.pht('You must login to continue.').'</p>');
$dialog->addSubmitButton('Login'); $dialog->addSubmitButton(pht('Login'));
$dialog->addCancelButton('/', 'Cancel'); $dialog->addCancelButton('/', pht('Cancel'));
return id(new AphrontDialogResponse())->setDialog($dialog); return id(new AphrontDialogResponse())->setDialog($dialog);
} }
@ -62,10 +62,10 @@ final class PhabricatorLoginController
$request->clearCookie('phsid'); $request->clearCookie('phsid');
$error_view = new AphrontErrorView(); $error_view = new AphrontErrorView();
$error_view->setTitle('Invalid Session'); $error_view->setTitle(pht('Invalid Session'));
$error_view->setErrors(array( $error_view->setErrors(array(
"Your login session is invalid. Try logging in again. If that ". pht("Your login session is invalid. Try logging in again. If that ".
"doesn't work, clear your browser cookies." "doesn't work, clear your browser cookies.")
)); ));
} }
@ -100,12 +100,12 @@ final class PhabricatorLoginController
$require_captcha = true; $require_captcha = true;
if (!AphrontFormRecaptchaControl::processCaptcha($request)) { if (!AphrontFormRecaptchaControl::processCaptcha($request)) {
if (AphrontFormRecaptchaControl::hasCaptchaResponse($request)) { if (AphrontFormRecaptchaControl::hasCaptchaResponse($request)) {
$e_captcha = 'Invalid'; $e_captcha = pht('Invalid');
$errors[] = 'CAPTCHA was not entered correctly.'; $errors[] = pht('CAPTCHA was not entered correctly.');
} else { } else {
$e_captcha = 'Required'; $e_captcha = pht('Required');
$errors[] = 'Too many login failures recently. You must '. $errors[] = pht('Too many login failures recently. You must '.
'submit a CAPTCHA with your login request.'; 'submit a CAPTCHA with your login request.');
} }
} }
} }
@ -128,7 +128,7 @@ final class PhabricatorLoginController
$envelope = new PhutilOpaqueEnvelope($request->getStr('password')); $envelope = new PhutilOpaqueEnvelope($request->getStr('password'));
if (!$user || !$user->comparePassword($envelope)) { if (!$user || !$user->comparePassword($envelope)) {
$errors[] = 'Bad username/password.'; $errors[] = pht('Bad username/password.');
} }
} }
@ -160,7 +160,7 @@ final class PhabricatorLoginController
if ($errors) { if ($errors) {
$error_view = new AphrontErrorView(); $error_view = new AphrontErrorView();
$error_view->setTitle('Login Failed'); $error_view->setTitle(pht('Login Failed'));
$error_view->setErrors($errors); $error_view->setErrors($errors);
} }
@ -170,16 +170,16 @@ final class PhabricatorLoginController
->setAction('/login/') ->setAction('/login/')
->appendChild( ->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel('Username/Email') ->setLabel(pht('Username/Email'))
->setName('username_or_email') ->setName('username_or_email')
->setValue($username_or_email)) ->setValue($username_or_email))
->appendChild( ->appendChild(
id(new AphrontFormPasswordControl()) id(new AphrontFormPasswordControl())
->setLabel('Password') ->setLabel(pht('Password'))
->setName('password') ->setName('password')
->setCaption( ->setCaption(
'<a href="/login/email/">'. '<a href="/login/email/">'.
'Forgot your password? / Email Login</a>')); pht('Forgot your password? / Email Login').'</a>'));
if ($require_captcha) { if ($require_captcha) {
$form->appendChild( $form->appendChild(
@ -190,7 +190,7 @@ final class PhabricatorLoginController
$form $form
->appendChild( ->appendChild(
id(new AphrontFormSubmitControl()) id(new AphrontFormSubmitControl())
->setValue('Login')); ->setValue(pht('Login')));
// $panel->setCreateButton('Register New Account', '/login/register/'); // $panel->setCreateButton('Register New Account', '/login/register/');
@ -206,18 +206,18 @@ final class PhabricatorLoginController
->setAction('/ldap/login/') ->setAction('/ldap/login/')
->appendChild( ->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel('LDAP username') ->setLabel(pht('LDAP username'))
->setName('username') ->setName('username')
->setValue($username_or_email)) ->setValue($username_or_email))
->appendChild( ->appendChild(
id(new AphrontFormPasswordControl()) id(new AphrontFormPasswordControl())
->setLabel('Password') ->setLabel(pht('Password'))
->setName('password')); ->setName('password'));
$ldap_form $ldap_form
->appendChild( ->appendChild(
id(new AphrontFormSubmitControl()) id(new AphrontFormSubmitControl())
->setValue('Login')); ->setValue(pht('Login')));
$forms['LDAP Login'] = $ldap_form; $forms['LDAP Login'] = $ldap_form;
} }
@ -243,18 +243,23 @@ final class PhabricatorLoginController
// CSRF for logged-out users is vaugely tricky. // CSRF for logged-out users is vaugely tricky.
if ($provider->isProviderRegistrationEnabled()) { if ($provider->isProviderRegistrationEnabled()) {
$title = "Login or Register with {$provider_name}"; $title = pht("Login or Register with %s",
$body = 'Login or register for Phabricator using your '. phutil_escape_html($provider_name));
phutil_escape_html($provider_name).' account.'; $body = pht('Login or register for Phabricator using your %s account.',
$button = "Login or Register with {$provider_name}"; phutil_escape_html($provider_name));
$button = pht("Login or Register with %s",
phutil_escape_html($provider_name));
} else { } else {
$title = "Login with {$provider_name}"; $title = pht("Login with %s",
$body = 'Login to your existing Phabricator account using your '. phutil_escape_html($provider_name));
phutil_escape_html($provider_name).' account.<br /><br />'. $body = pht('Login to your existing Phabricator account using your '.
'<strong>You can not use '. '%s account.', phutil_escape_html($provider_name)).
phutil_escape_html($provider_name).' to register a new '. '<br /><br />'.
'account.</strong>'; '<strong>'.
$button = "Login with {$provider_name}"; pht('You can not use %s to register a new account.',
phutil_escape_html($provider_name)).
'</strong>';
$button = pht("Log in with %s", phutil_escape_html($provider_name));
} }
$auth_form = new AphrontFormView(); $auth_form = new AphrontFormView();
@ -298,7 +303,7 @@ final class PhabricatorLoginController
$panel, $panel,
), ),
array( array(
'title' => 'Login', 'title' => pht('Login'),
'device' => true 'device' => true
)); ));
} }

View file

@ -48,19 +48,19 @@ final class PhabricatorLoginValidateController
$list = '<ul>'.implode("\n", $list).'</ul>'; $list = '<ul>'.implode("\n", $list).'</ul>';
$view = new AphrontRequestFailureView(); $view = new AphrontRequestFailureView();
$view->setHeader('Login Failed'); $view->setHeader(pht('Login Failed'));
$view->appendChild( $view->appendChild(
'<p>Login failed:</p>'. '<p>'.pht('Login failed:').'</p>'.
$list. $list.
'<p><strong>Clear your cookies</strong> and try again.</p>'); '<p>'.pht('<strong>Clear your cookies</strong> and try again.').'</p>');
$view->appendChild( $view->appendChild(
'<div class="aphront-failure-continue">'. '<div class="aphront-failure-continue">'.
'<a class="button" href="/login/">Try Again</a>'. '<a class="button" href="/login/">'.pht('Try Again').'</a>'.
'</div>'); '</div>');
return $this->buildStandardPageResponse( return $this->buildStandardPageResponse(
$view, $view,
array( array(
'title' => 'Login Failed', 'title' => pht('Login Failed'),
)); ));
} }

View file

@ -45,9 +45,9 @@ final class PhabricatorLogoutController
if ($user->getPHID()) { if ($user->getPHID()) {
$dialog = id(new AphrontDialogView()) $dialog = id(new AphrontDialogView())
->setUser($user) ->setUser($user)
->setTitle('Log out of Phabricator?') ->setTitle(pht('Log out of Phabricator?'))
->appendChild('<p>Are you sure you want to log out?</p>') ->appendChild('<p>'.pht('Are you sure you want to log out?').'</p>')
->addSubmitButton('Log Out') ->addSubmitButton(pht('Logout'))
->addCancelButton('/'); ->addCancelButton('/');
return id(new AphrontDialogResponse())->setDialog($dialog); return id(new AphrontDialogResponse())->setDialog($dialog);

View file

@ -30,21 +30,25 @@ final class PhabricatorMustVerifyEmailController
$email->sendVerificationEmail($user); $email->sendVerificationEmail($user);
$sent = new AphrontErrorView(); $sent = new AphrontErrorView();
$sent->setSeverity(AphrontErrorView::SEVERITY_NOTICE); $sent->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
$sent->setTitle('Email Sent'); $sent->setTitle(pht('Email Sent'));
$sent->appendChild( $sent->appendChild('<p>'.
'<p>Another verification email was sent to <strong>'. pht('Another verification email was sent to <strong>%s</strong>.',
phutil_escape_html($email_address).'</strong>.</p>'); phutil_escape_html($email_address)).'</p>');
} }
$error_view = new AphrontRequestFailureView(); $error_view = new AphrontRequestFailureView();
$error_view->setHeader('Check Your Email'); $error_view->setHeader(pht('Check Your Email'));
$error_view->appendChild( $error_view->appendChild(
'<p>You must verify your email address to login. You should have a new '. '<p>'.
pht('You must verify your email address to login. You should have a new '.
'email message from Phabricator with verification instructions in your '. 'email message from Phabricator with verification instructions in your '.
'inbox (<strong>'.phutil_escape_html($email_address).'</strong>).</p>'); 'inbox (<strong>%s</strong>).', phutil_escape_html($email_address)).
'</p>');
$error_view->appendChild( $error_view->appendChild(
'<p>If you did not receive an email, you can click the button below '. '<p>'.
'to try sending another one.</p>'); pht('If you did not receive an email, you can click the button below '.
'to try sending another one.').
'</p>');
$error_view->appendChild( $error_view->appendChild(
'<div class="aphront-failure-continue">'. '<div class="aphront-failure-continue">'.
phabricator_render_form( phabricator_render_form(
@ -57,17 +61,18 @@ final class PhabricatorMustVerifyEmailController
'button', 'button',
array( array(
), ),
'Send Another Email')). pht('Send Another Email'))).
'</div>'); '</div>');
return $this->buildStandardPageResponse( return $this->buildApplicationPage(
array( array(
$sent, $sent,
$error_view, $error_view,
), ),
array( array(
'title' => 'Must Verify Email', 'title' => pht('Must Verify Email'),
'device' => true
)); ));
} }

View file

@ -68,15 +68,15 @@ final class PhabricatorOAuthLoginController
if ($oauth_info->getUserID() != $current_user->getID()) { if ($oauth_info->getUserID() != $current_user->getID()) {
$dialog = new AphrontDialogView(); $dialog = new AphrontDialogView();
$dialog->setUser($current_user); $dialog->setUser($current_user);
$dialog->setTitle('Already Linked to Another Account'); $dialog->setTitle(pht('Already Linked to Another Account'));
$dialog->appendChild( $dialog->appendChild('<p>'.
hsprintf( pht(
'<p>The %s account you just authorized is already linked to '. 'The %s account you just authorized is already linked to '.
'another Phabricator account. Before you can associate your %s '. 'another Phabricator account. Before you can associate your %s '.
'account with this Phabriactor account, you must unlink it from '. 'account with this Phabriactor account, you must unlink it from '.
'the Phabricator account it is currently linked to.</p>', 'the Phabricator account it is currently linked to.</p>',
$provider_name, phutil_escape_html($provider_name),
$provider_name)); phutil_escape_html($provider_name))).'</p>';
$dialog->addCancelButton($provider->getSettingsPanelURI()); $dialog->addCancelButton($provider->getSettingsPanelURI());
return id(new AphrontDialogResponse())->setDialog($dialog); return id(new AphrontDialogResponse())->setDialog($dialog);
@ -95,14 +95,15 @@ final class PhabricatorOAuthLoginController
if ($existing_oauth) { if ($existing_oauth) {
$dialog = new AphrontDialogView(); $dialog = new AphrontDialogView();
$dialog->setUser($current_user); $dialog->setUser($current_user);
$dialog->setTitle('Already Linked to an Account From This Provider'); $dialog->setTitle(
$dialog->appendChild( pht('Already Linked to an Account From This Provider'));
hsprintf( $dialog->appendChild('<p>'.
'<p>The account you are logged in with is already linked to a %s '. pht(
'The account you are logged in with is already linked to a %s '.
'account. Before you can link it to a different %s account, you '. 'account. Before you can link it to a different %s account, you '.
'must unlink the old account.</p>', 'must unlink the old account.</p>',
$provider_name, phutil_escape_html($provider_name),
$provider_name)); phutil_escape_html($provider_name))).'</p>';
$dialog->addCancelButton($provider->getSettingsPanelURI()); $dialog->addCancelButton($provider->getSettingsPanelURI());
return id(new AphrontDialogResponse())->setDialog($dialog); return id(new AphrontDialogResponse())->setDialog($dialog);
} }
@ -110,11 +111,11 @@ final class PhabricatorOAuthLoginController
if (!$request->isDialogFormPost()) { if (!$request->isDialogFormPost()) {
$dialog = new AphrontDialogView(); $dialog = new AphrontDialogView();
$dialog->setUser($current_user); $dialog->setUser($current_user);
$dialog->setTitle('Link '.$provider_name.' Account'); $dialog->setTitle(pht('Link %s Account', $provider_name));
$dialog->appendChild( $dialog->appendChild(
hsprintf( pht(
'<p>Link your %s account to your Phabricator account?</p>', '<p>Link your %s account to your Phabricator account?</p>',
$provider_name)); phutil_escape_html($provider_name)));
$dialog->addHiddenInput('confirm_token', $provider->getAccessToken()); $dialog->addHiddenInput('confirm_token', $provider->getAccessToken());
$dialog->addHiddenInput('expires', $oauth_info->getTokenExpires()); $dialog->addHiddenInput('expires', $oauth_info->getTokenExpires());
$dialog->addHiddenInput('state', $this->oauthState); $dialog->addHiddenInput('state', $this->oauthState);
@ -168,14 +169,14 @@ final class PhabricatorOAuthLoginController
if ($known_email) { if ($known_email) {
$dialog = new AphrontDialogView(); $dialog = new AphrontDialogView();
$dialog->setUser($current_user); $dialog->setUser($current_user);
$dialog->setTitle('Already Linked to Another Account'); $dialog->setTitle(pht('Already Linked to Another Account'));
$dialog->appendChild( $dialog->appendChild('<p>'.
hsprintf( pht(
'<p>The %s account you just authorized has an email address which '. 'The %s account you just authorized has an email address which '.
'is already in use by another Phabricator account. To link the '. 'is already in use by another Phabricator account. To link the '.
'accounts, log in to your Phabricator account and then go to '. 'accounts, log in to your Phabricator account and then go to '.
'Settings.</p>', 'Settings.',
$provider_name)); phutil_escape_html($provider_name))).'</p>';
$user = id(new PhabricatorUser()) $user = id(new PhabricatorUser())
->loadOneWhere('phid = %s', $known_email->getUserPHID()); ->loadOneWhere('phid = %s', $known_email->getUserPHID());
@ -189,9 +190,9 @@ final class PhabricatorOAuthLoginController
->getProviderName(); ->getProviderName();
} }
$dialog->appendChild( $dialog->appendChild(
hsprintf( pht(
'<p>The account is associated with: %s.</p>', '<p>The account is associated with: %s.</p>',
implode(', ', $providers))); implode(', ', phutil_escape_html($providers))));
} }
$dialog->addCancelButton('/login/'); $dialog->addCancelButton('/login/');
@ -203,14 +204,14 @@ final class PhabricatorOAuthLoginController
if (!$provider->isProviderRegistrationEnabled()) { if (!$provider->isProviderRegistrationEnabled()) {
$dialog = new AphrontDialogView(); $dialog = new AphrontDialogView();
$dialog->setUser($current_user); $dialog->setUser($current_user);
$dialog->setTitle('No Account Registration With '.$provider_name); $dialog->setTitle(pht('No Account Registration with %s', $provider_name));
$dialog->appendChild( $dialog->appendChild('<p>'.
hsprintf( pht(
'<p>You can not register a new account using %s; you can only use '. 'You can not register a new account using %s; you can only use '.
'your %s account to log into an existing Phabricator account which '. 'your %s account to log into an existing Phabricator account which '.
'you have registered through other means.</p>', 'you have registered through other means.',
$provider_name, phutil_escape_html($provider_name),
$provider_name)); phutil_escape_html($provider_name))).'</p>';
$dialog->addCancelButton('/login/'); $dialog->addCancelButton('/login/');
return id(new AphrontDialogResponse())->setDialog($dialog); return id(new AphrontDialogResponse())->setDialog($dialog);
@ -242,7 +243,7 @@ final class PhabricatorOAuthLoginController
return $this->buildStandardPageResponse( return $this->buildStandardPageResponse(
$view, $view,
array( array(
'title' => $provider_name.' Auth Failed', 'title' => pht('Auth Failed'),
)); ));
} }

View file

@ -16,7 +16,7 @@ final class PhabricatorOAuthUnlinkController extends PhabricatorAuthController {
if ($provider->isProviderLinkPermanent()) { if ($provider->isProviderLinkPermanent()) {
throw new Exception( throw new Exception(
"You may not unlink accounts from this OAuth provider."); pht("You may not unlink accounts from this OAuth provider."));
} }
$provider_key = $provider->getProviderKey(); $provider_key = $provider->getProviderKey();
@ -33,11 +33,11 @@ final class PhabricatorOAuthUnlinkController extends PhabricatorAuthController {
if (!$request->isDialogFormPost()) { if (!$request->isDialogFormPost()) {
$dialog = new AphrontDialogView(); $dialog = new AphrontDialogView();
$dialog->setUser($user); $dialog->setUser($user);
$dialog->setTitle('Really unlink account?'); $dialog->setTitle(pht('Really unlink account?'));
$dialog->appendChild( $dialog->appendChild(
'<p><strong>You will not be able to login</strong> using this account '. '<p>'.pht('You will not be able to login using this account '.
'once you unlink it. Continue?</p>'); 'once you unlink it. Continue?').'</p>');
$dialog->addSubmitButton('Unlink Account'); $dialog->addSubmitButton(pht('Unlink Account'));
$dialog->addCancelButton($provider->getSettingsPanelURI()); $dialog->addCancelButton($provider->getSettingsPanelURI());
return id(new AphrontDialogResponse())->setDialog($dialog); return id(new AphrontDialogResponse())->setDialog($dialog);

View file

@ -45,10 +45,10 @@ final class PhabricatorOAuthDefaultRegistrationController
$user->setUsername($request->getStr('username')); $user->setUsername($request->getStr('username'));
$username = $user->getUsername(); $username = $user->getUsername();
if (!strlen($user->getUsername())) { if (!strlen($user->getUsername())) {
$e_username = 'Required'; $e_username = pht('Required');
$errors[] = 'Username is required.'; $errors[] = pht('Username is required.');
} else if (!PhabricatorUser::validateUsername($username)) { } else if (!PhabricatorUser::validateUsername($username)) {
$e_username = 'Invalid'; $e_username = pht('Invalid');
$errors[] = PhabricatorUser::describeValidUsername(); $errors[] = PhabricatorUser::describeValidUsername();
} else { } else {
$e_username = null; $e_username = null;
@ -57,8 +57,8 @@ final class PhabricatorOAuthDefaultRegistrationController
if (!$new_email) { if (!$new_email) {
$new_email = trim($request->getStr('email')); $new_email = trim($request->getStr('email'));
if (!$new_email) { if (!$new_email) {
$e_email = 'Required'; $e_email = pht('Required');
$errors[] = 'Email is required.'; $errors[] = pht('Email is required.');
} else { } else {
$e_email = null; $e_email = null;
} }
@ -67,7 +67,7 @@ final class PhabricatorOAuthDefaultRegistrationController
if ($new_email) { if ($new_email) {
$email_ok = PhabricatorUserEmail::isAllowedAddress($new_email); $email_ok = PhabricatorUserEmail::isAllowedAddress($new_email);
if (!$email_ok) { if (!$email_ok) {
$e_email = 'Invalid'; $e_email = pht('Invalid');
$errors[] = PhabricatorUserEmail::describeAllowedAddresses(); $errors[] = PhabricatorUserEmail::describeAllowedAddresses();
} }
} }
@ -75,8 +75,8 @@ final class PhabricatorOAuthDefaultRegistrationController
if (!strlen($user->getRealName())) { if (!strlen($user->getRealName())) {
$user->setRealName($request->getStr('realname')); $user->setRealName($request->getStr('realname'));
if (!strlen($user->getRealName())) { if (!strlen($user->getRealName())) {
$e_realname = 'Required'; $e_realname = pht('Required');
$errors[] = 'Real name is required.'; $errors[] = pht('Real name is required.');
} else { } else {
$e_realname = null; $e_realname = null;
} }
@ -142,11 +142,11 @@ final class PhabricatorOAuthDefaultRegistrationController
$new_email); $new_email);
if ($same_username) { if ($same_username) {
$e_username = 'Duplicate'; $e_username = pht('Duplicate');
$errors[] = 'That username or email is not unique.'; $errors[] = pht('That username or email is not unique.');
} else if ($same_email) { } else if ($same_email) {
$e_email = 'Duplicate'; $e_email = pht('Duplicate');
$errors[] = 'That email is not unique.'; $errors[] = pht('That email is not unique.');
} else { } else {
throw $exception; throw $exception;
} }
@ -157,7 +157,7 @@ final class PhabricatorOAuthDefaultRegistrationController
$error_view = null; $error_view = null;
if ($errors) { if ($errors) {
$error_view = new AphrontErrorView(); $error_view = new AphrontErrorView();
$error_view->setTitle('Registration Failed'); $error_view->setTitle(pht('Registration Failed'));
$error_view->setErrors($errors); $error_view->setErrors($errors);
} }
@ -176,7 +176,7 @@ final class PhabricatorOAuthDefaultRegistrationController
->setAction($action_path) ->setAction($action_path)
->appendChild( ->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel('Username') ->setLabel(pht('Username'))
->setName('username') ->setName('username')
->setValue($user->getUsername()) ->setValue($user->getUsername())
->setError($e_username)); ->setError($e_username));
@ -184,7 +184,7 @@ final class PhabricatorOAuthDefaultRegistrationController
if ($show_email_input) { if ($show_email_input) {
$form->appendChild( $form->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel('Email') ->setLabel(pht('Email'))
->setName('email') ->setName('email')
->setValue($request->getStr('email')) ->setValue($request->getStr('email'))
->setCaption(PhabricatorUserEmail::describeAllowedAddresses()) ->setCaption(PhabricatorUserEmail::describeAllowedAddresses())
@ -194,7 +194,7 @@ final class PhabricatorOAuthDefaultRegistrationController
if ($provider->retrieveUserRealName() === null) { if ($provider->retrieveUserRealName() === null) {
$form->appendChild( $form->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel('Real Name') ->setLabel(pht('Real Name'))
->setName('realname') ->setName('realname')
->setValue($request->getStr('realname')) ->setValue($request->getStr('realname'))
->setError($e_realname)); ->setError($e_realname));
@ -203,20 +203,22 @@ final class PhabricatorOAuthDefaultRegistrationController
$form $form
->appendChild( ->appendChild(
id(new AphrontFormSubmitControl()) id(new AphrontFormSubmitControl())
->setValue('Create Account')); ->setValue(pht('Create Account')));
$panel = new AphrontPanelView(); $panel = new AphrontPanelView();
$panel->setHeader('Create New Account'); $panel->setHeader(pht('Create New Account'));
$panel->setWidth(AphrontPanelView::WIDTH_FORM); $panel->setWidth(AphrontPanelView::WIDTH_FORM);
$panel->appendChild($form); $panel->appendChild($form);
$panel->setNoBackground();
return $this->buildStandardPageResponse( return $this->buildApplicationPage(
array( array(
$error_view, $error_view,
$panel, $panel,
), ),
array( array(
'title' => 'Create New Account', 'title' => pht('Create New Account'),
'device' => true
)); ));
} }

View file

@ -29,7 +29,7 @@ final class PhabricatorOAuthFailureView extends AphrontView {
$diagnose = null; $diagnose = null;
$view = new AphrontRequestFailureView(); $view = new AphrontRequestFailureView();
$view->setHeader($provider_name.' Auth Failed'); $view->setHeader(pht('%s Auth Failed', $provider_name));
if ($this->request) { if ($this->request) {
$view->appendChild( $view->appendChild(
hsprintf( hsprintf(
@ -79,7 +79,7 @@ final class PhabricatorOAuthFailureView extends AphrontView {
$view->appendChild( $view->appendChild(
'<div class="aphront-failure-continue">'. '<div class="aphront-failure-continue">'.
$diagnose. $diagnose.
'<a href="/login/" class="button">Continue</a>'. '<a href="/login/" class="button">'.pht('Continue').'</a>'.
'</div>'); '</div>');
return $view->render(); return $view->render();

View file

@ -84,7 +84,6 @@ final class PhabricatorConfigAllController
$nav->appendChild($panel); $nav->appendChild($panel);
return $this->buildApplicationPage( return $this->buildApplicationPage(
$nav, $nav,
array( array(

View file

@ -72,6 +72,7 @@ final class PhabricatorConfigGroupController
$engine->process(); $engine->process();
$list = new PhabricatorObjectItemListView(); $list = new PhabricatorObjectItemListView();
$list->setStackable();
foreach ($options as $option) { foreach ($options as $option) {
$summary = $engine->getOutput($option, 'summary'); $summary = $engine->getOutput($option, 'summary');

View file

@ -48,6 +48,7 @@ final class PhabricatorConfigIssueListController
private function buildIssueList(array $issues) { private function buildIssueList(array $issues) {
assert_instances_of($issues, 'PhabricatorSetupIssue'); assert_instances_of($issues, 'PhabricatorSetupIssue');
$list = new PhabricatorObjectItemListView(); $list = new PhabricatorObjectItemListView();
$list->setStackable();
foreach ($issues as $issue) { foreach ($issues as $issue) {
$href = $this->getApplicationURI('/issue/'.$issue->getIssueKey().'/'); $href = $this->getApplicationURI('/issue/'.$issue->getIssueKey().'/');

View file

@ -46,6 +46,7 @@ final class PhabricatorConfigListController
assert_instances_of($groups, 'PhabricatorApplicationConfigOptions'); assert_instances_of($groups, 'PhabricatorApplicationConfigOptions');
$list = new PhabricatorObjectItemListView(); $list = new PhabricatorObjectItemListView();
$list->setStackable();
$groups = msort($groups, 'getName'); $groups = msort($groups, 'getName');
foreach ($groups as $group) { foreach ($groups as $group) {
$item = id(new PhabricatorObjectItemView()) $item = id(new PhabricatorObjectItemView())

View file

@ -235,6 +235,13 @@ EODOC
pht( pht(
'Controls whether Phabricator sends email "From" users.')) 'Controls whether Phabricator sends email "From" users.'))
->setDescription($send_as_user_desc), ->setDescription($send_as_user_desc),
$this->newOption(
'metamta.reply-handler-domain',
'string',
'phabricator.example.com')
->setDescription(pht(
'Domain used for reply email addresses. Some applications can '.
'configure this domain.')),
$this->newOption('metamta.reply.show-hints', 'bool', true) $this->newOption('metamta.reply.show-hints', 'bool', true)
->setBoolOptions( ->setBoolOptions(
array( array(

View file

@ -0,0 +1,24 @@
<?php
final class ConpherenceConfigOptions
extends PhabricatorApplicationConfigOptions {
public function getName() {
return pht('Copherence');
}
public function getDescription() {
return pht('Configure Conpherence messaging.');
}
public function getOptions() {
return array(
$this->newOption(
'metamta.conpherence.subject-prefix',
'string',
'[Conpherence]')
->setDescription(pht('Subject prefix for Conpherence mail.')),
);
}
}

View file

@ -65,9 +65,8 @@ abstract class ConpherenceController extends PhabricatorController {
} }
$unread_status = ConpherenceParticipationStatus::BEHIND; $unread_status = ConpherenceParticipationStatus::BEHIND;
$unread_participant_query = id(new ConpherenceParticipantQuery()) $unread = id(new ConpherenceParticipantQuery())
->withParticipantPHIDs(array($user->getPHID())); ->withParticipantPHIDs(array($user->getPHID()))
$unread = $unread_participant_query
->withParticipationStatus($unread_status) ->withParticipationStatus($unread_status)
->execute(); ->execute();

View file

@ -41,11 +41,7 @@ final class ConpherenceListController extends
} }
$this->setSelectedConpherencePHID($conpherence->getPHID()); $this->setSelectedConpherencePHID($conpherence->getPHID());
$read_status = ConpherenceParticipationStatus::UP_TO_DATE;
$participant = $conpherence->getParticipant($user->getPHID()); $participant = $conpherence->getParticipant($user->getPHID());
$write_guard = AphrontWriteGuard::beginScopedUnguardedWrites();
$participant->markUpToDate();
unset($write_guard);
$current_selection_epoch = $participant->getDateTouched(); $current_selection_epoch = $participant->getDateTouched();
} }

View file

@ -60,6 +60,11 @@ final class ConpherenceNewController extends ConpherenceController {
$xactions[] = id(new ConpherenceTransaction()) $xactions[] = id(new ConpherenceTransaction())
->setTransactionType(ConpherenceTransactionType::TYPE_PARTICIPANTS) ->setTransactionType(ConpherenceTransactionType::TYPE_PARTICIPANTS)
->setNewValue(array('+' => $participants)); ->setNewValue(array('+' => $participants));
if ($files) {
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(ConpherenceTransactionType::TYPE_FILES)
->setNewValue(array('+' => mpull($files, 'getPHID')));
}
$xactions[] = id(new ConpherenceTransaction()) $xactions[] = id(new ConpherenceTransaction())
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT) ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
->attachComment( ->attachComment(
@ -67,11 +72,6 @@ final class ConpherenceNewController extends ConpherenceController {
->setContent($message) ->setContent($message)
->setConpherencePHID($conpherence->getPHID()) ->setConpherencePHID($conpherence->getPHID())
); );
if ($files) {
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(ConpherenceTransactionType::TYPE_FILES)
->setNewValue(array('+' => mpull($files, 'getPHID')));
}
$content_source = PhabricatorContentSource::newForSource( $content_source = PhabricatorContentSource::newForSource(
PhabricatorContentSource::SOURCE_WEB, PhabricatorContentSource::SOURCE_WEB,
array( array(

View file

@ -35,7 +35,7 @@ final class ConpherenceUpdateController extends
$updated = false; $updated = false;
$error_view = null; $error_view = null;
$e_image = null; $e_file = array();
$errors = array(); $errors = array();
if ($request->isFormPost()) { if ($request->isFormPost()) {
$content_source = PhabricatorContentSource::newForSource( $content_source = PhabricatorContentSource::newForSource(
@ -43,41 +43,21 @@ final class ConpherenceUpdateController extends
array( array(
'ip' => $request->getRemoteAddr() 'ip' => $request->getRemoteAddr()
)); ));
$editor = id(new ConpherenceEditor())
->setContentSource($content_source)
->setActor($user);
$action = $request->getStr('action'); $action = $request->getStr('action');
switch ($action) { switch ($action) {
case 'message': case 'message':
$message = $request->getStr('text'); $message = $request->getStr('text');
$files = array(); $xactions = $editor->generateTransactionsFromText(
$file_phids = $conpherence,
PhabricatorMarkupEngine::extractFilePHIDsFromEmbeddedFiles( $message
array($message) );
);
if ($file_phids) {
$files = id(new PhabricatorFileQuery())
->setViewer($user)
->withPHIDs($file_phids)
->execute();
}
$xactions = array();
if ($files) {
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(ConpherenceTransactionType::TYPE_FILES)
->setNewValue(array('+' => mpull($files, 'getPHID')));
}
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
->attachComment(
id(new ConpherenceTransactionComment())
->setContent($message)
->setConpherencePHID($conpherence->getPHID())
);
$time = time(); $time = time();
$conpherence->openTransaction(); $conpherence->openTransaction();
$xactions = id(new ConpherenceEditor()) $xactions = $editor->applyTransactions($conpherence, $xactions);
->setContentSource($content_source)
->setActor($user)
->applyTransactions($conpherence, $xactions);
$last_xaction = end($xactions); $last_xaction = end($xactions);
$xaction_phid = $last_xaction->getPHID(); $xaction_phid = $last_xaction->getPHID();
$behind = ConpherenceParticipationStatus::BEHIND; $behind = ConpherenceParticipationStatus::BEHIND;
@ -100,37 +80,30 @@ final class ConpherenceUpdateController extends
break; break;
case 'metadata': case 'metadata':
$xactions = array(); $xactions = array();
$default_image = $request->getExists('default_image'); $images = $request->getArr('image');
if ($default_image) { if ($images) {
$image_phid = null; // just take the first one
$xactions[] = id(new ConpherenceTransaction()) $file_phid = reset($images);
->setTransactionType(ConpherenceTransactionType::TYPE_PICTURE) $file = id(new PhabricatorFileQuery())
->setNewValue($image_phid); ->setViewer($user)
} else if (!empty($_FILES['image'])) { ->withPHIDs(array($file_phid))
$err = idx($_FILES['image'], 'error'); ->executeOne();
if ($err != UPLOAD_ERR_NO_FILE) { $okay = $file->isTransformableImage();
$file = PhabricatorFile::newFromPHPUpload( if ($okay) {
$_FILES['image'], $xformer = new PhabricatorImageTransformer();
array( $xformed = $xformer->executeThumbTransform(
'authorPHID' => $user->getPHID(), $file,
)); $x = 50,
$okay = $file->isTransformableImage(); $y = 50);
if ($okay) { $image_phid = $xformed->getPHID();
$xformer = new PhabricatorImageTransformer(); $xactions[] = id(new ConpherenceTransaction())
$xformed = $xformer->executeThumbTransform( ->setTransactionType(ConpherenceTransactionType::TYPE_PICTURE)
$file, ->setNewValue($image_phid);
$x = 50, } else {
$y = 50); $e_file[] = $file;
$image_phid = $xformed->getPHID(); $errors[] =
$xactions[] = id(new ConpherenceTransaction()) pht('This server only supports these image formats: %s.',
->setTransactionType(ConpherenceTransactionType::TYPE_PICTURE)
->setNewValue($image_phid);
} else {
$e_image = pht('Not Supported');
$errors[] =
pht('This server only supports these image formats: %s.',
implode(', ', $supported_formats)); implode(', ', $supported_formats));
}
} }
} }
$title = $request->getStr('title'); $title = $request->getStr('title');
@ -142,9 +115,7 @@ final class ConpherenceUpdateController extends
if ($xactions) { if ($xactions) {
$conpherence->openTransaction(); $conpherence->openTransaction();
$xactions = id(new ConpherenceEditor()) $xactions = $editor
->setContentSource($content_source)
->setActor($user)
->setContinueOnNoEffect(true) ->setContinueOnNoEffect(true)
->applyTransactions($conpherence, $xactions); ->applyTransactions($conpherence, $xactions);
$updated = $conpherence->saveTransaction(); $updated = $conpherence->saveTransaction();
@ -169,6 +140,7 @@ final class ConpherenceUpdateController extends
if ($errors) { if ($errors) {
$error_view = id(new AphrontErrorView()) $error_view = id(new AphrontErrorView())
->setTitle(pht('Errors editing conpherence.')) ->setTitle(pht('Errors editing conpherence.'))
->setInsideDialogue(true)
->setErrors($errors); ->setErrors($errors);
} }
@ -190,29 +162,26 @@ final class ConpherenceUpdateController extends
) )
) )
->appendChild( ->appendChild(
id(new AphrontFormImageControl()) id(new AphrontFormDragAndDropUploadControl())
->setLabel(pht('Change Image')) ->setLabel(pht('Change Image'))
->setName('image') ->setName('image')
->setValue($e_file)
->setCaption('Supported formats: '.implode(', ', $supported_formats)) ->setCaption('Supported formats: '.implode(', ', $supported_formats))
->setError($e_image) );
);
// TODO -- fix javelin so we can upload files from a workflow
require_celerity_resource('conpherence-update-css'); require_celerity_resource('conpherence-update-css');
return $this->buildStandardPageResponse( return id(new AphrontDialogResponse())
array( ->setDialog(
$error_view,
id(new AphrontDialogView()) id(new AphrontDialogView())
->setUser($user) ->setUser($user)
->setTitle(pht('Update Conpherence')) ->setTitle(pht('Update Conpherence'))
->setWidth(AphrontDialogView::WIDTH_FORM) ->setWidth(AphrontDialogView::WIDTH_FORM)
->setSubmitURI($this->getApplicationURI('update/'.$conpherence_id.'/')) ->setSubmitURI($this->getApplicationURI('update/'.$conpherence_id.'/'))
->addHiddenInput('action', 'metadata') ->addHiddenInput('action', 'metadata')
->appendChild($error_view)
->appendChild($form) ->appendChild($form)
->addSubmitButton() ->addSubmitButton()
->addCancelButton($this->getApplicationURI($conpherence->getID().'/')), ->addCancelButton($this->getApplicationURI($conpherence->getID().'/'))
), );
array()
);
} }
} }

View file

@ -49,8 +49,10 @@ final class ConpherenceViewController extends
$this->setConpherence($conpherence); $this->setConpherence($conpherence);
$participant = $conpherence->getParticipant($user->getPHID()); $participant = $conpherence->getParticipant($user->getPHID());
$transactions = $conpherence->getTransactions();
$latest_transaction = end($transactions);
$write_guard = AphrontWriteGuard::beginScopedUnguardedWrites(); $write_guard = AphrontWriteGuard::beginScopedUnguardedWrites();
$participant->markUpToDate(); $participant->markUpToDate($latest_transaction);
unset($write_guard); unset($write_guard);
$header = $this->renderHeaderPaneContent(); $header = $this->renderHeaderPaneContent();
@ -69,13 +71,14 @@ final class ConpherenceViewController extends
$edit_href = $this->getApplicationURI('update/'.$conpherence->getID().'/'); $edit_href = $this->getApplicationURI('update/'.$conpherence->getID().'/');
$header = $header =
phutil_render_tag( javelin_render_tag(
'a', 'a',
array( array(
'class' => 'edit', 'class' => 'edit',
'href' => $edit_href, 'href' => $edit_href,
'sigil' => 'workflow',
), ),
pht('edit...') ''
). ).
phutil_render_tag( phutil_render_tag(
'div', 'div',
@ -112,6 +115,9 @@ final class ConpherenceViewController extends
$transactions = $conpherence->getTransactions(); $transactions = $conpherence->getTransactions();
foreach ($transactions as $transaction) { foreach ($transactions as $transaction) {
if ($transaction->shouldHide()) {
continue;
}
$rendered_transactions[] = id(new ConpherenceTransactionView()) $rendered_transactions[] = id(new ConpherenceTransactionView())
->setUser($user) ->setUser($user)
->setConpherenceTransaction($transaction) ->setConpherenceTransaction($transaction)

View file

@ -5,6 +5,42 @@
*/ */
final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor { final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
public function generateTransactionsFromText(
ConpherenceThread $conpherence,
$text) {
$files = array();
$file_phids =
PhabricatorMarkupEngine::extractFilePHIDsFromEmbeddedFiles(
array($text)
);
// Since these are extracted from text, we might be re-including the
// same file -- e.g. a mock under discussion. Filter files we
// already have.
$existing_file_phids = $conpherence->getFilePHIDs();
$file_phids = array_diff($file_phids, $existing_file_phids);
if ($file_phids) {
$files = id(new PhabricatorFileQuery())
->setViewer($this->getActor())
->withPHIDs($file_phids)
->execute();
}
$xactions = array();
if ($files) {
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(ConpherenceTransactionType::TYPE_FILES)
->setNewValue(array('+' => mpull($files, 'getPHID')));
}
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
->attachComment(
id(new ConpherenceTransactionComment())
->setContent($text)
->setConpherencePHID($conpherence->getPHID())
);
return $xactions;
}
public function getTransactionTypes() { public function getTransactionTypes() {
$types = parent::getTransactionTypes(); $types = parent::getTransactionTypes();
@ -120,33 +156,40 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
} }
protected function supportsMail() { protected function supportsMail() {
return false; return true;
} }
/* TODO
protected function buildReplyHandler(PhabricatorLiskDAO $object) { protected function buildReplyHandler(PhabricatorLiskDAO $object) {
return id(new ConpherenceReplyHandler()) return id(new ConpherenceReplyHandler())
->setActor($this->getActor())
->setMailReceiver($object); ->setMailReceiver($object);
} }
protected function buildMailTemplate(PhabricatorLiskDAO $object) { protected function buildMailTemplate(PhabricatorLiskDAO $object) {
$id = $object->getID(); $id = $object->getID();
$title = $object->getTitle(); $title = $object->getTitle();
if (!$title) {
$title = pht(
'%s sent you a message.',
$this->getActor()->getUserName()
);
}
$phid = $object->getPHID(); $phid = $object->getPHID();
$original_name = $object->getOriginalName();
return id(new PhabricatorMetaMTAMail()) return id(new PhabricatorMetaMTAMail())
->setSubject("C{$id}: {$title}") ->setSubject("E{$id}: {$title}")
->addHeader('Thread-Topic', "C{$id}: {$phid}"); ->addHeader('Thread-Topic', "E{$id}: {$phid}");
} }
protected function getMailTo(PhabricatorLiskDAO $object) { protected function getMailTo(PhabricatorLiskDAO $object) {
$participants = $object->getParticipants(); $participants = $object->getParticipants();
$participants[$this->requireActor()->getPHID()] = true;
return array_keys($participants); return array_keys($participants);
} }
protected function getMailCC(PhabricatorLiskDAO $object) {
return array();
}
protected function buildMailBody( protected function buildMailBody(
PhabricatorLiskDAO $object, PhabricatorLiskDAO $object,
array $xactions) { array $xactions) {
@ -162,7 +205,6 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
protected function getMailSubjectPrefix() { protected function getMailSubjectPrefix() {
return PhabricatorEnv::getEnvConfig('metamta.conpherence.subject-prefix'); return PhabricatorEnv::getEnvConfig('metamta.conpherence.subject-prefix');
} }
*/
protected function supportsFeed() { protected function supportsFeed() {
return false; return false;

View file

@ -0,0 +1,80 @@
<?php
/**
* @group conpherence
*/
final class ConpherenceReplyHandler extends PhabricatorMailReplyHandler {
public function validateMailReceiver($mail_receiver) {
if (!($mail_receiver instanceof ConpherenceThread)) {
throw new Exception("Mail receiver is not a ConpherenceThread!");
}
}
public function getPrivateReplyHandlerEmailAddress(
PhabricatorObjectHandle $handle) {
return $this->getDefaultPrivateReplyHandlerEmailAddress($handle, 'E');
}
public function getPublicReplyHandlerEmailAddress() {
return $this->getDefaultPublicReplyHandlerEmailAddress('E');
}
public function getReplyHandlerInstructions() {
if ($this->supportsReplies()) {
return pht('Reply to comment and attach files.');
} else {
return null;
}
}
protected function receiveEmail(PhabricatorMetaMTAReceivedMail $mail) {
$conpherence = $this->getMailReceiver();
$user = $this->getActor();
if (!$conpherence->getPHID()) {
$conpherence
->attachParticipants(array())
->attachFilePHIDs(array());
} else {
$edge_type = PhabricatorEdgeConfig::TYPE_OBJECT_HAS_FILE;
$file_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
$conpherence->getPHID(),
$edge_type
);
$conpherence->attachFilePHIDs($file_phids);
$participants = id(new ConpherenceParticipant())
->loadAllWhere('conpherencePHID = %s', $conpherence->getPHID());
$participants = mpull($participants, null, 'getParticipantPHID');
$conpherence->attachParticipants($participants);
}
$content_source = PhabricatorContentSource::newForSource(
PhabricatorContentSource::SOURCE_EMAIL,
array(
'id' => $mail->getID(),
));
$editor = id(new ConpherenceEditor())
->setActor($user)
->setContentSource($content_source)
->setParentMessageID($mail->getMessageID());
$body = $mail->getCleanTextBody();
$body = trim($body);
$file_phids = $mail->getAttachments();
$body = $this->enhanceBodyWithAttachments(
$body,
$file_phids,
'{F%d}'
);
$xactions = $editor->generateTransactionsFromText(
$conpherence,
$body
);
$editor->applyTransactions($conpherence, $xactions);
return null;
}
}

View file

@ -11,9 +11,10 @@ final class ConpherenceParticipant extends ConpherenceDAO {
protected $behindTransactionPHID; protected $behindTransactionPHID;
protected $dateTouched; protected $dateTouched;
public function markUpToDate() { public function markUpToDate(ConpherenceTransaction $xaction) {
if (!$this->isUpToDate()) { if (!$this->isUpToDate()) {
$this->setParticipationStatus(ConpherenceParticipationStatus::UP_TO_DATE); $this->setParticipationStatus(ConpherenceParticipationStatus::UP_TO_DATE);
$this->setBehindTransactionPHID($xaction->getPHID());
$this->save(); $this->save();
} }
return $this; return $this;

View file

@ -189,15 +189,18 @@ final class ConpherenceThread extends ConpherenceDAO
} }
// fallthrough intentionally here // fallthrough intentionally here
case ConpherenceTransactionType::TYPE_FILES: case ConpherenceTransactionType::TYPE_FILES:
default: if ($behind_transaction_phid) {
if ($behind_transaction_phid && $unread_count++;
$transaction->getPHID() != $behind_transaction_phid) { if ($transaction->getPHID() == $behind_transaction_phid) {
$unread_count++; break 2;
} }
}
if ($unread_count > $max_count) { if ($unread_count > $max_count) {
break 2; break 2;
} }
break; break;
default:
continue 2;
} }
if ($snippet && !$behind_transaction_phid) { if ($snippet && !$behind_transaction_phid) {
break; break;

View file

@ -29,8 +29,9 @@ final class ConpherenceTransaction extends PhabricatorApplicationTransaction {
return ($old === null); return ($old === null);
case ConpherenceTransactionType::TYPE_TITLE: case ConpherenceTransactionType::TYPE_TITLE:
case ConpherenceTransactionType::TYPE_PICTURE: case ConpherenceTransactionType::TYPE_PICTURE:
case ConpherenceTransactionType::TYPE_FILES:
return false; return false;
case ConpherenceTransactionType::TYPE_FILES:
return true;
} }
return parent::shouldHide(); return parent::shouldHide();

View file

@ -109,7 +109,7 @@ final class DifferentialCommentEditor extends PhabricatorEditor {
$revision->loadRelationships(); $revision->loadRelationships();
$reviewer_phids = $revision->getReviewers(); $reviewer_phids = $revision->getReviewers();
if ($reviewer_phids) { if ($reviewer_phids) {
$reviewer_phids = array_combine($reviewer_phids, $reviewer_phids); $reviewer_phids = array_fuse($reviewer_phids);
} }
$metadata = array(); $metadata = array();

View file

@ -36,9 +36,9 @@ final class PhabricatorMacroListController
if ($has_search) { if ($has_search) {
$macros = queryfx_all( $macros = queryfx_all(
$conn, $conn,
'SELECT m.* 'SELECT m.* FROM %Q WHERE %Q',
FROM '.implode(' JOIN ', $join).' implode(' JOIN ', $join),
WHERE '.implode(' AND ', $where)); implode(' AND ', $where));
$macros = $macro_table->loadAllFromArray($macros); $macros = $macro_table->loadAllFromArray($macros);
$nodata = pht('There are no macros matching the filter.'); $nodata = pht('There are no macros matching the filter.');
} else { } else {
@ -65,7 +65,7 @@ final class PhabricatorMacroListController
} }
if ($authors) { if ($authors) {
$author_phids = array_combine($authors, $authors); $author_phids = array_fuse($authors);
} else { } else {
$author_phids = array(); $author_phids = array();
} }

View file

@ -28,6 +28,12 @@ final class PhabricatorMetaMTAReceiveController
array( array(
'text' => $request->getStr('body'), 'text' => $request->getStr('body'),
)); ));
// Make up some unique value, since this column isn't nullable.
$received->setMessageIDHash(
PhabricatorHash::digestForIndex(
Filesystem::readRandomBytes(12)));
$received->save(); $received->save();
$received->processReceivedMail(); $received->processReceivedMail();

View file

@ -39,6 +39,8 @@ final class PhabricatorMetaMTASendGridReceiveController
'text' => $request->getStr('text'), 'text' => $request->getStr('text'),
'html' => $request->getStr('from'), 'html' => $request->getStr('from'),
)); ));
$received->setMessageIDHash(
PhabricatorHash::digestForIndex($received->getMessageID()));
$file_phids = array(); $file_phids = array();
foreach ($_FILES as $file_raw) { foreach ($_FILES as $file_raw) {

View file

@ -37,7 +37,11 @@ abstract class PhabricatorMailReplyHandler {
abstract public function validateMailReceiver($mail_receiver); abstract public function validateMailReceiver($mail_receiver);
abstract public function getPrivateReplyHandlerEmailAddress( abstract public function getPrivateReplyHandlerEmailAddress(
PhabricatorObjectHandle $handle); PhabricatorObjectHandle $handle);
abstract public function getReplyHandlerDomain(); public function getReplyHandlerDomain() {
return PhabricatorEnv::getEnvConfig(
'metamta.reply-handler-domain'
);
}
abstract public function getReplyHandlerInstructions(); abstract public function getReplyHandlerInstructions();
abstract protected function receiveEmail( abstract protected function receiveEmail(
PhabricatorMetaMTAReceivedMail $mail); PhabricatorMetaMTAReceivedMail $mail);
@ -291,8 +295,10 @@ EOBODY;
return $this->getSingleReplyHandlerPrefix($address); return $this->getSingleReplyHandlerPrefix($address);
} }
final protected function enhanceBodyWithAttachments($body, final protected function enhanceBodyWithAttachments(
array $attachments) { $body,
array $attachments,
$format = '- {F%d, layout=link}') {
if (!$attachments) { if (!$attachments) {
return $body; return $body;
} }
@ -306,7 +312,7 @@ EOBODY;
} }
foreach ($files as $file) { foreach ($files as $file) {
$file_str = sprintf('- {F%d, layout=link}', $file->getID()); $file_str = sprintf($format, $file->getID());
$body .= $file_str."\n"; $body .= $file_str."\n";
} }

View file

@ -804,7 +804,7 @@ final class PhabricatorMetaMTAMail extends PhabricatorMetaMTADAO {
return array(); return array();
} }
$phids = array_combine($phids, $phids); $phids = array_fuse($phids);
// Exclude PHIDs explicitly marked for exclusion. We use this to prevent // Exclude PHIDs explicitly marked for exclusion. We use this to prevent

View file

@ -93,7 +93,7 @@ final class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
$prefixPattern = ($single_handle_prefix) $prefixPattern = ($single_handle_prefix)
? preg_quote($single_handle_prefix, '/') . '\+' ? preg_quote($single_handle_prefix, '/') . '\+'
: ''; : '';
$pattern = "/^{$prefixPattern}((?:D|T|C)\d+)\+([\w]+)\+([a-f0-9]{16})@/U"; $pattern = "/^{$prefixPattern}((?:D|T|C|E)\d+)\+([\w]+)\+([a-f0-9]{16})@/U";
$phabricator_address = null; $phabricator_address = null;
$receiver_name = null; $receiver_name = null;
@ -276,10 +276,7 @@ final class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
$expect_hash = self::computeMailHash($receiver->getMailKey(), $check_phid); $expect_hash = self::computeMailHash($receiver->getMailKey(), $check_phid);
// See note at computeOldMailHash(). if ($expect_hash != $hash) {
$old_hash = self::computeOldMailHash($receiver->getMailKey(), $check_phid);
if ($expect_hash != $hash && $old_hash != $hash) {
return $this->setMessage("Invalid mail hash!")->save(); return $this->setMessage("Invalid mail hash!")->save();
} }
@ -292,6 +289,9 @@ final class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
} else if ($receiver instanceof PhabricatorRepositoryCommit) { } else if ($receiver instanceof PhabricatorRepositoryCommit) {
$handler = PhabricatorAuditCommentEditor::newReplyHandlerForCommit( $handler = PhabricatorAuditCommentEditor::newReplyHandlerForCommit(
$receiver); $receiver);
} else if ($receiver instanceof ConpherenceThread) {
$handler = id(new ConpherenceReplyHandler())
->setMailReceiver($receiver);
} }
$handler->setActor($user); $handler->setActor($user);
@ -334,6 +334,9 @@ final class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
case 'C': case 'C':
$class_obj = new PhabricatorRepositoryCommit(); $class_obj = new PhabricatorRepositoryCommit();
break; break;
case 'E':
$class_obj = new ConpherenceThread();
break;
default: default:
return null; return null;
} }
@ -348,20 +351,6 @@ final class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
return substr($hash, 0, 16); return substr($hash, 0, 16);
} }
public static function computeOldMailHash($mail_key, $phid) {
// TODO: Remove this method entirely in a couple of months. We've moved from
// plain sha1 to sha1+hmac to make the codebase more auditable for good uses
// of hash functions, but still accept the old hashes on email replies to
// avoid breaking things. Once we've been sending only hmac hashes for a
// while, remove this and start rejecting old hashes. See T547.
$global_mail_key = PhabricatorEnv::getEnvConfig('phabricator.mail-key');
$hash = sha1($mail_key.$global_mail_key.$phid);
return substr($hash, 0, 16);
}
/** /**
* Strip an email address down to the actual user@domain.tld part if * Strip an email address down to the actual user@domain.tld part if
* necessary, since sometimes it will have formatting like * necessary, since sometimes it will have formatting like

View file

@ -388,7 +388,7 @@ final class PhabricatorObjectHandleData {
if (empty($entries[$phid])) { if (empty($entries[$phid])) {
$handle->setName('Unknown Config Entry'); $handle->setName('Unknown Config Entry');
} else { } else {
$entry = $entry[$phid]; $entry = $entries[$phid];
$handle->setName($entry->getKey()); $handle->setName($entry->getKey());
$handle->setURI('/config/edit/'.$entry->getKey()); $handle->setURI('/config/edit/'.$entry->getKey());
$handle->setFullName($entry->getKey()); $handle->setFullName($entry->getKey());

View file

@ -16,7 +16,8 @@ final class PholioMockListController extends PholioController {
$user = $request->getUser(); $user = $request->getUser();
$query = id(new PholioMockQuery()) $query = id(new PholioMockQuery())
->setViewer($user); ->setViewer($user)
->needCoverFiles(true);
$nav = $this->buildSideNav(); $nav = $this->buildSideNav();
$filter = $nav->selectFilter('view/'.$this->view, 'view/all'); $filter = $nav->selectFilter('view/'.$this->view, 'view/all');
@ -38,7 +39,8 @@ final class PholioMockListController extends PholioController {
$board->addItem( $board->addItem(
id(new PhabricatorPinboardItemView()) id(new PhabricatorPinboardItemView())
->setHeader($mock->getName()) ->setHeader($mock->getName())
->setURI('/M'.$mock->getID())); ->setURI('/M'.$mock->getID())
->setImageURI($mock->getCoverFile()->getThumb160x120URI()));
} }
$header = id(new PhabricatorHeaderView()) $header = id(new PhabricatorHeaderView())

View file

@ -18,6 +18,8 @@ final class PholioMockViewController extends PholioController {
$mock = id(new PholioMockQuery()) $mock = id(new PholioMockQuery())
->setViewer($user) ->setViewer($user)
->withIDs(array($this->id)) ->withIDs(array($this->id))
->needImages(true)
->needCoverFiles(true)
->executeOne(); ->executeOne();
if (!$mock) { if (!$mock) {

View file

@ -10,6 +10,9 @@ final class PholioMockQuery
private $phids; private $phids;
private $authorPHIDs; private $authorPHIDs;
private $needCoverFiles;
private $needImages;
public function withIDs(array $ids) { public function withIDs(array $ids) {
$this->ids = $ids; $this->ids = $ids;
return $this; return $this;
@ -37,7 +40,17 @@ final class PholioMockQuery
$this->buildOrderClause($conn_r), $this->buildOrderClause($conn_r),
$this->buildLimitClause($conn_r)); $this->buildLimitClause($conn_r));
return $table->loadAllFromArray($data); $mocks = $table->loadAllFromArray($data);
if ($mocks && $this->needImages) {
$this->loadImages($mocks);
}
if ($mocks && $this->needCoverFiles) {
$this->loadCoverFiles($mocks);
}
return $mocks;
} }
private function buildWhereClause(AphrontDatabaseConnection $conn_r) { private function buildWhereClause(AphrontDatabaseConnection $conn_r) {
@ -69,4 +82,49 @@ final class PholioMockQuery
return $this->formatWhereClause($where); return $this->formatWhereClause($where);
} }
public function needCoverFiles($need_cover_files) {
$this->needCoverFiles = $need_cover_files;
return $this;
}
public function needImages($need_images) {
$this->needImages = $need_images;
return $this;
}
public function loadImages(array $mocks) {
assert_instances_of($mocks, 'PholioMock');
$mock_ids = mpull($mocks, 'getID');
$all_images = id(new PholioImage())->loadAllWhere(
'mockID IN (%Ld)',
$mock_ids);
$file_phids = mpull($all_images, 'getFilePHID');
$all_files = mpull(id(new PhabricatorFile())->loadAllWhere(
'phid IN (%Ls)',
$file_phids), null, 'getPHID');
foreach ($all_images as $image) {
$image->attachFile($all_files[$image->getFilePHID()]);
}
$image_groups = mgroup($all_images, 'getMockID');
foreach ($mocks as $mock) {
$mock->attachImages($image_groups[$mock->getID()]);
}
}
public function loadCoverFiles(array $mocks) {
assert_instances_of($mocks, 'PholioMock');
$cover_file_phids = mpull($mocks, 'getCoverPHID');
$cover_files = mpull(id(new PhabricatorFile())->loadAllWhere(
'phid IN (%Ls)',
$cover_file_phids), null, 'getPHID');
foreach ($mocks as $mock) {
$mock->attachCoverFile($cover_files[$mock->getCoverPHID()]);
}
}
} }

View file

@ -14,6 +14,7 @@ final class PholioImage extends PholioDAO
protected $description = ''; protected $description = '';
protected $sequence; protected $sequence;
private $file;
/* -( PhabricatorMarkupInterface )----------------------------------------- */ /* -( PhabricatorMarkupInterface )----------------------------------------- */
@ -39,4 +40,16 @@ final class PholioImage extends PholioDAO
return (bool)$this->getID(); return (bool)$this->getID();
} }
public function attachFile(PhabricatorFile $file) {
$this->file = $file;
return $this;
}
public function getFile() {
if ($this->file === null) {
throw new Exception("Call attachFile() before getFile()!");
}
return $this->file;
}
} }

View file

@ -20,6 +20,9 @@ final class PholioMock extends PholioDAO
protected $coverPHID; protected $coverPHID;
protected $mailKey; protected $mailKey;
private $images;
private $coverFile;
public function getConfiguration() { public function getConfiguration() {
return array( return array(
self::CONFIG_AUX_PHID => true, self::CONFIG_AUX_PHID => true,
@ -37,6 +40,31 @@ final class PholioMock extends PholioDAO
return parent::save(); return parent::save();
} }
public function attachImages(array $images) {
assert_instances_of($images, 'PholioImage');
$this->images = $images;
return $this;
}
public function getImages() {
if ($this->images === null) {
throw new Exception("Call attachImages() before getImages()!");
}
return $this->images;
}
public function attachCoverFile(PhabricatorFile $file) {
$this->coverFile = $file;
return $this;
}
public function getCoverFile() {
if ($this->coverFile === null) {
throw new Exception("Call attachCoverFile() before getCoverFile()!");
}
return $this->coverFile;
}
/* -( PhabricatorSubscribableInterface Implementation )-------------------- */ /* -( PhabricatorSubscribableInterface Implementation )-------------------- */

View file

@ -13,13 +13,7 @@ final class PholioMockImagesView extends AphrontView {
throw new Exception("Call setMock() before render()!"); throw new Exception("Call setMock() before render()!");
} }
$image = id(new PholioImage())->loadOneWhere( $file = head($this->mock->getImages())->getFile();
"mockid=%d",
$this->mock->getID());
$file = id(new PhabricatorFile())->loadOneWhere(
"phid=%s",
$image->getFilePHID());
$image_tag = phutil_tag( $image_tag = phutil_tag(
'img', 'img',

View file

@ -59,7 +59,7 @@ final class PhortuneMonthYearExpiryControl extends AphrontFormControl {
$current_year = $this->getCurrentYear(); $current_year = $this->getCurrentYear();
$years = range($current_year, $current_year + 20); $years = range($current_year, $current_year + 20);
$years = array_combine($years, $years); $years = array_fuse($years);
if ($this->getMonthInputValue()) { if ($this->getMonthInputValue()) {
$selected_month = $this->getMonthInputValue(); $selected_month = $this->getMonthInputValue();

View file

@ -215,19 +215,30 @@ final class PhrictionDocumentController
$slug = PhabricatorSlug::normalize($this->slug); $slug = PhabricatorSlug::normalize($this->slug);
return id(new PhabricatorActionListView()) $action_view = id(new PhabricatorActionListView())
->setUser($user) ->setUser($user)
->setObject($document) ->setObject($document)
->addAction( ->addAction(
id(new PhabricatorActionView()) id(new PhabricatorActionView())
->setName(pht('Edit Document')) ->setName(pht('Edit Document'))
->setIcon('edit') ->setIcon('edit')
->setHref('/phriction/edit/'.$document->getID().'/')) ->setHref('/phriction/edit/'.$document->getID().'/'));
->addAction(
if ($document->getStatus() == PhrictionDocumentStatus::STATUS_EXISTS) {
$action_view->addAction(
id(new PhabricatorActionView()) id(new PhabricatorActionView())
->setName(pht('View History')) ->setName(pht('Delete Document'))
->setIcon('history') ->setIcon('delete')
->setHref(PhrictionDocument::getSlugURI($slug, 'history'))); ->setHref('/phriction/delete/'.$document->getID().'/')
->setWorkflow(true));
}
return
$action_view->addAction(
id(new PhabricatorActionView())
->setName(pht('View History'))
->setIcon('history')
->setHref(PhrictionDocument::getSlugURI($slug, 'history')));
} }
private function renderChildren($slug) { private function renderChildren($slug) {

View file

@ -154,19 +154,9 @@ final class PhrictionEditController
->setErrors($errors); ->setErrors($errors);
} }
$delete_button = null;
if ($document->getID()) { if ($document->getID()) {
$panel_header = 'Edit Phriction Document'; $panel_header = 'Edit Phriction Document';
$submit_button = 'Save Changes'; $submit_button = 'Save Changes';
if ($document->getStatus() != PhrictionDocumentStatus::STATUS_DELETED) {
$delete_button = phutil_tag(
'a',
array(
'href' => '/phriction/delete/'.$document->getID().'/',
'class' => 'grey button',
),
'Delete Document');
}
} else { } else {
$panel_header = 'Create New Phriction Document'; $panel_header = 'Create New Phriction Document';
$submit_button = 'Create Document'; $submit_button = 'Create Document';
@ -240,10 +230,6 @@ final class PhrictionEditController
->setHeader($panel_header) ->setHeader($panel_header)
->appendChild($form); ->appendChild($form);
if ($delete_button) {
$panel->addButton($delete_button);
}
$preview_panel = $preview_panel =
'<div class="aphront-panel-preview aphront-panel-preview-wide"> '<div class="aphront-panel-preview aphront-panel-preview-wide">
<div class="phriction-document-preview-header"> <div class="phriction-document-preview-header">

View file

@ -62,7 +62,7 @@ final class PhabricatorSettingsPanelAccount
} }
$timezone_ids = DateTimeZone::listIdentifiers(); $timezone_ids = DateTimeZone::listIdentifiers();
$timezone_id_map = array_combine($timezone_ids, $timezone_ids); $timezone_id_map = array_fuse($timezone_ids);
$form = new AphrontFormView(); $form = new AphrontFormView();
$form $form

View file

@ -15,6 +15,7 @@ abstract class PhabricatorApplicationTransactionEditor
private $isNewObject; private $isNewObject;
private $mentionedPHIDs; private $mentionedPHIDs;
private $continueOnNoEffect; private $continueOnNoEffect;
private $parentMessageID;
private $isPreview; private $isPreview;
@ -40,6 +41,18 @@ abstract class PhabricatorApplicationTransactionEditor
return $this->continueOnNoEffect; return $this->continueOnNoEffect;
} }
/**
* Not strictly necessary, but reply handlers ideally set this value to
* make email threading work better.
*/
public function setParentMessageID($parent_message_id) {
$this->parentMessageID = $parent_message_id;
return $this;
}
public function getParentMessageID() {
return $this->parentMessageID;
}
protected function getIsNewObject() { protected function getIsNewObject() {
return $this->isNewObject; return $this->isNewObject;
} }
@ -509,7 +522,7 @@ abstract class PhabricatorApplicationTransactionEditor
protected function getPHIDTransactionNewValue( protected function getPHIDTransactionNewValue(
PhabricatorApplicationTransaction $xaction) { PhabricatorApplicationTransaction $xaction) {
$old = array_combine($xaction->getOldValue(), $xaction->getOldValue()); $old = array_fuse($xaction->getOldValue());
$new = $xaction->getNewValue(); $new = $xaction->getNewValue();
$new_add = idx($new, '+', array()); $new_add = idx($new, '+', array());
@ -518,7 +531,7 @@ abstract class PhabricatorApplicationTransactionEditor
unset($new['-']); unset($new['-']);
$new_set = idx($new, '=', null); $new_set = idx($new, '=', null);
if ($new_set !== null) { if ($new_set !== null) {
$new_set = array_combine($new_set, $new_set); $new_set = array_fuse($new_set);
} }
unset($new['=']); unset($new['=']);
@ -669,8 +682,9 @@ abstract class PhabricatorApplicationTransactionEditor
->setIsBulk(true) ->setIsBulk(true)
->setBody($body->render()); ->setBody($body->render());
// TODO if ($this->getParentMessageID()) {
// ->setParentMessageID(...) $template->setParentMessageID($this->getParentMessageID());
}
$mails = $this $mails = $this
->buildReplyHandler($object) ->buildReplyHandler($object)

View file

@ -151,7 +151,7 @@ such as PHID columns. Otherwise, use `COLLATE utf8_general_ci`.
- Name all indexes so it is possible to delete them later. - Name all indexes so it is possible to delete them later.
# Edit `src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php` and # Edit `src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php` and
add your patch to @{method@phabricator:PhabricatorBuiltinPatchList::getPatches}. add your patch to @{method@phabricator:PhabricatorBuiltinPatchList::getPatches}.
# Run `bin/storage/upgrade`. # Run `bin/storage upgrade`.
It is also possible to create more complex patches in PHP for data migration It is also possible to create more complex patches in PHP for data migration
(due to schema changes or otherwise.) However, the schema changes themselves (due to schema changes or otherwise.) However, the schema changes themselves

View file

@ -91,19 +91,21 @@ involved but may be easier in some deployment environments. Note that this needs
to be set in your webserver environment, and also in your shell whenever you to be set in your webserver environment, and also in your shell whenever you
run a script: run a script:
# Shell ```
export PHABRICATOR_ENV=custom/exampleconfig # Shell
export PHABRICATOR_ENV=custom/exampleconfig
# Apache # Apache
SetEnv PHABRICATOR_ENV custom/exampleconfig SetEnv PHABRICATOR_ENV custom/exampleconfig
# nginx # nginx
fastcgi_param PHABRICATOR_ENV "custom/exampleconfig"; fastcgi_param PHABRICATOR_ENV "custom/exampleconfig";
# lighttpd # lighttpd
setenv.add-environment = ( setenv.add-environment = (
"PHABRICATOR_ENV" => "custom/exampleconfig", "PHABRICATOR_ENV" => "custom/exampleconfig",
) )
```
After creating and selecting a configuration file, restart your webserver. Any After creating and selecting a configuration file, restart your webserver. Any
configuration you set should take effect immediately, and your file should be configuration you set should take effect immediately, and your file should be

View file

@ -87,16 +87,6 @@ final class CeleritySpriteGenerator {
$sprites = array(); $sprites = array();
$sources = array( $sources = array(
'round_bubble' => array(
'x' => 26,
'y' => 26,
'css' => '.phabricator-main-menu-alert-bubble'
),
'bubble' => array(
'x' => 46,
'y' => 26,
'css' => '.phabricator-main-menu-alert-bubble.alert-unread'
),
'seen_read_all' => array( 'seen_read_all' => array(
'x' => 14, 'x' => 14,
'y' => 14, 'y' => 14,
@ -135,6 +125,25 @@ final class CeleritySpriteGenerator {
'y' => 25, 'y' => 25,
'css' => '.phabricator-main-menu-logo-image', 'css' => '.phabricator-main-menu-logo-image',
), ),
'conf-off' => array(
'x' => 14,
'y' => 14,
'css' =>
'.alert-notifications .phabricator-main-menu-message-icon',
),
'conf-hover' => array(
'x' => 14,
'y' => 14,
'css' =>
'.alert-notifications:hover .phabricator-main-menu-message-icon',
),
'conf-unseen' => array(
'x' => 14,
'y' => 14,
'css' =>
'.alert-notifications.message-unread '.
'.phabricator-main-menu-message-icon',
),
); );
$scales = array( $scales = array(
@ -183,7 +192,7 @@ final class CeleritySpriteGenerator {
// Reorder the sprites so less-specific rules generate earlier in the sheet. // Reorder the sprites so less-specific rules generate earlier in the sheet.
// Otherwise we end up with blue "a.black" buttons because the blue rules // Otherwise we end up with blue "a.black" buttons because the blue rules
// have the same specificity but appear later. // have the same specificity but appear later.
$gradients = array_combine($gradients, $gradients); $gradients = array_fuse($gradients);
$gradients = array_select_keys( $gradients = array_select_keys(
$gradients, $gradients,
array( array(

View file

@ -102,7 +102,7 @@ abstract class PhabricatorWorker {
final public static function waitForTasks(array $task_ids) { final public static function waitForTasks(array $task_ids) {
$task_table = new PhabricatorWorkerActiveTask(); $task_table = new PhabricatorWorkerActiveTask();
$waiting = array_combine($task_ids, $task_ids); $waiting = array_fuse($task_ids);
while ($waiting) { while ($waiting) {
$conn_w = $task_table->establishConnection('w'); $conn_w = $task_table->establishConnection('w');

View file

@ -55,10 +55,20 @@ final class PhabricatorRemarkupRuleEmbedFile
case 'full': case 'full':
$attrs['src'] = $file->getBestURI(); $attrs['src'] = $file->getBestURI();
$options['image_class'] = null; $options['image_class'] = null;
$file_data = $file->getMetadata();
$height = idx($file_data, PhabricatorFile::METADATA_IMAGE_HEIGHT);
if ($height) {
$attrs['height'] = $height;
}
$width = idx($file_data, PhabricatorFile::METADATA_IMAGE_WIDTH);
if ($width) {
$attrs['width'] = $width;
}
break; break;
case 'thumb': case 'thumb':
default: default:
$attrs['src'] = $file->getPreview220URI(); $attrs['src'] = $file->getPreview220URI();
$attrs['width'] = '220';
$options['image_class'] = 'phabricator-remarkup-embed-image'; $options['image_class'] = 'phabricator-remarkup-embed-image';
break; break;
} }

View file

@ -29,10 +29,20 @@ final class PhabricatorRemarkupRuleImageMacro
$phid = $this->images[$matches[1]]; $phid = $this->images[$matches[1]];
$file = id(new PhabricatorFile())->loadOneWhere('phid = %s', $phid); $file = id(new PhabricatorFile())->loadOneWhere('phid = %s', $phid);
$style = null;
$src_uri = null;
if ($file) { if ($file) {
$src_uri = $file->getBestURI(); $src_uri = $file->getBestURI();
} else { $file_data = $file->getMetadata();
$src_uri = null; $height = idx($file_data,PhabricatorFile::METADATA_IMAGE_HEIGHT);
$width = idx($file_data, PhabricatorFile::METADATA_IMAGE_WIDTH);
if ($height && $width) {
$style = sprintf(
'height: %dpx; width: %dpx;',
$height,
$width
);
}
} }
$img = phutil_tag( $img = phutil_tag(
@ -41,6 +51,7 @@ final class PhabricatorRemarkupRuleImageMacro
'src' => $src_uri, 'src' => $src_uri,
'alt' => $matches[1], 'alt' => $matches[1],
'title' => $matches[1], 'title' => $matches[1],
'style' => $style,
)); ));
return $this->getEngine()->storeText($img); return $this->getEngine()->storeText($img);
} else { } else {

View file

@ -1093,6 +1093,10 @@ final class PhabricatorBuiltinPatchList extends PhabricatorSQLPatchList {
'type' => 'sql', 'type' => 'sql',
'name' => $this->getPatchPath('20130111.conpherence.sql'), 'name' => $this->getPatchPath('20130111.conpherence.sql'),
), ),
'20130127.altheraldtranscript.sql' => array(
'type' => 'sql',
'name' => $this->getPatchPath('20130127.altheraldtranscript.sql'),
),
); );
} }

View file

@ -11,6 +11,15 @@ final class AphrontErrorView extends AphrontView {
private $errors; private $errors;
private $severity; private $severity;
private $id; private $id;
private $insideDialogue;
public function setInsideDialogue($inside_dialogue) {
$this->insideDialogue = $inside_dialogue;
return $this;
}
public function getInsideDialogue() {
return $this->insideDialogue;
}
public function setTitle($title) { public function setTitle($title) {
$this->title = $title; $this->title = $title;
@ -32,6 +41,15 @@ final class AphrontErrorView extends AphrontView {
return $this; return $this;
} }
private function getBaseClass() {
if ($this->getInsideDialogue()) {
$class = 'aphront-error-view-dialogue';
} else {
$class = 'aphront-error-view';
}
return $class;
}
final public function render() { final public function render() {
require_celerity_resource('aphront-error-view-css'); require_celerity_resource('aphront-error-view-css');
@ -69,15 +87,16 @@ final class AphrontErrorView extends AphrontView {
$this->severity = nonempty($this->severity, self::SEVERITY_ERROR); $this->severity = nonempty($this->severity, self::SEVERITY_ERROR);
$more_classes = array(); $classes = array();
$more_classes[] = 'aphront-error-severity-'.$this->severity; $classes[] = $this->getBaseClass();
$more_classes = implode(' ', $more_classes); $classes[] = 'aphront-error-severity-'.$this->severity;
$classes = implode(' ', $classes);
return phutil_render_tag( return phutil_render_tag(
'div', 'div',
array( array(
'id' => $this->id, 'id' => $this->id,
'class' => 'aphront-error-view '.$more_classes, 'class' => $classes,
), ),
array( array(
$title, $title,

View file

@ -181,7 +181,7 @@ final class AphrontFormDateControl extends AphrontFormControl {
$max_year = $this->getMaxYear(); $max_year = $this->getMaxYear();
$days = range(1, 31); $days = range(1, 31);
$days = array_combine($days, $days); $days = array_fuse($days);
$months = array( $months = array(
1 => 'Jan', 1 => 'Jan',
@ -199,7 +199,7 @@ final class AphrontFormDateControl extends AphrontFormControl {
); );
$years = range($this->getMinYear(), $this->getMaxYear()); $years = range($this->getMinYear(), $this->getMaxYear());
$years = array_combine($years, $years); $years = array_fuse($years);
$days_sel = AphrontFormSelectControl::renderSelectTag( $days_sel = AphrontFormSelectControl::renderSelectTag(
$this->getDayInputValue(), $this->getDayInputValue(),

View file

@ -5,6 +5,7 @@ final class PhabricatorObjectItemListView extends AphrontView {
private $header; private $header;
private $items; private $items;
private $pager; private $pager;
private $stackable;
private $noDataString; private $noDataString;
public function setHeader($header) { public function setHeader($header) {
@ -27,9 +28,15 @@ final class PhabricatorObjectItemListView extends AphrontView {
return $this; return $this;
} }
public function setStackable() {
$this->stackable = true;
return $this;
}
public function render() { public function render() {
require_celerity_resource('phabricator-object-item-list-view-css'); require_celerity_resource('phabricator-object-item-list-view-css');
$classes = array();
$header = null; $header = null;
if (strlen($this->header)) { if (strlen($this->header)) {
$header = phutil_tag( $header = phutil_tag(
@ -55,10 +62,15 @@ final class PhabricatorObjectItemListView extends AphrontView {
$pager = $this->renderSingleView($this->pager); $pager = $this->renderSingleView($this->pager);
} }
$classes[] = 'phabricator-object-item-list-view';
if ($this->stackable) {
$classes[] = 'phabricator-object-list-stackable';
}
return phutil_render_tag( return phutil_render_tag(
'div', 'ul',
array( array(
'class' => 'phabricator-object-item-list-view', 'class' => implode(' ', $classes),
), ),
$header.$items.$pager); $header.$items.$pager);
} }

View file

@ -166,7 +166,7 @@ final class PhabricatorObjectItemView extends AphrontView {
$header.$attrs.$this->renderChildren()); $header.$attrs.$this->renderChildren());
return phutil_tag( return phutil_tag(
'div', 'li',
array( array(
'class' => implode(' ', $classes), 'class' => implode(' ', $classes),
), ),

View file

@ -292,6 +292,59 @@ final class PhabricatorMainMenuView extends AphrontView {
require_celerity_resource('phabricator-notification-menu-css'); require_celerity_resource('phabricator-notification-menu-css');
require_celerity_resource('sprite-menu-css'); require_celerity_resource('sprite-menu-css');
$container_classes = array(
'sprite-menu',
'alert-notifications',
);
$conpherence = id(new PhabricatorApplicationConpherence())->isBeta();
$allow_beta =
PhabricatorEnv::getEnvConfig('phabricator.show-beta-applications');
$message_tag = '';
if (!$conpherence || $allow_beta) {
$message_id = celerity_generate_unique_node_id();
$message_count_id = celerity_generate_unique_node_id();
$unread_status = ConpherenceParticipationStatus::BEHIND;
$unread = id(new ConpherenceParticipantQuery())
->withParticipantPHIDs(array($user->getPHID()))
->withParticipationStatus($unread_status)
->execute();
$message_count_number = count($unread);
if ($message_count_number > 999) {
$message_count_number = "\xE2\x88\x9E";
}
$message_count_tag = phutil_render_tag(
'span',
array(
'id' => $message_count_id,
'class' => 'phabricator-main-menu-message-count'
),
phutil_escape_html($message_count_number));
$message_icon_tag = phutil_render_tag(
'span',
array(
'class' => 'sprite-menu phabricator-main-menu-message-icon',
),
'');
if ($message_count_number) {
$container_classes[] = 'message-unread';
}
$message_tag = phutil_render_tag(
'a',
array(
'href' => '/conpherence/',
'class' => implode(' ', $container_classes),
'id' => $message_id,
),
$message_icon_tag.$message_count_tag);
}
$count_id = celerity_generate_unique_node_id(); $count_id = celerity_generate_unique_node_id();
$dropdown_id = celerity_generate_unique_node_id(); $dropdown_id = celerity_generate_unique_node_id();
$bubble_id = celerity_generate_unique_node_id(); $bubble_id = celerity_generate_unique_node_id();
@ -318,11 +371,6 @@ final class PhabricatorMainMenuView extends AphrontView {
), ),
''); '');
$container_classes = array(
'phabricator-main-menu-alert-bubble',
'sprite-menu',
'alert-notifications',
);
if ($count_number) { if ($count_number) {
$container_classes[] = 'alert-unread'; $container_classes[] = 'alert-unread';
} }
@ -354,7 +402,8 @@ final class PhabricatorMainMenuView extends AphrontView {
), ),
''); '');
return array($bubble_tag, $notification_dropdown); return array(
$bubble_tag.$message_tag, $notification_dropdown);
} }
private function renderMenuIcon($name) { private function renderMenuIcon($name) {

View file

@ -2,12 +2,19 @@
* @provides aphront-error-view-css * @provides aphront-error-view-css
*/ */
.aphront-error-view { .aphront-error-view,
margin: 20px; .aphront-error-view-dialogue {
border-style: solid; border-style: solid;
border-width: 1px; border-width: 1px;
} }
.aphront-error-view {
margin: 20px;
}
.aphront-error-view-dialogue {
margin: 0px 0px 16px 0px;
}
.device-phone .aphront-error-view { .device-phone .aphront-error-view {
margin: 10px; margin: 10px;
} }

View file

@ -41,8 +41,6 @@
.phabricator-main-menu-logo { .phabricator-main-menu-logo {
display: inline-block; display: inline-block;
position: relative;
height: 44px;
width: 139px; width: 139px;
margin-right: 6px; margin-right: 6px;
padding-right: 6px; padding-right: 6px;
@ -248,59 +246,45 @@ a:hover .phabricator-main-search-typeahead-result .result-type {
*/ */
.device-desktop .phabricator-main-menu-alerts {
display: inline-block;
}
.device .phabricator-main-menu-alerts { .device .phabricator-main-menu-alerts {
position: absolute; margin-left: 60px;
left: 60px;
right: 60px;
top: 10px;
height: 34px;
text-align: center;
} }
.phabricator-main-menu-alert-bubble { .phabricator-main-menu-alerts {
display: inline-block; display: inline-block;
position: relative; border-radius: 15px;
width: 26px; background: rgba(0,0,0,.2);
height: 26px; height: 20px;
margin-bottom: 9px; padding: 3px 10px;
margin-top: 9px;
} }
.phabricator-main-menu-alert-bubble.alert-unread { .phabricator-main-menu-alert-icon,
width: 46px; .phabricator-main-menu-message-icon {
}
.phabricator-main-menu-alert-icon {
position: absolute;
width: 14px; width: 14px;
height: 14px; height: 14px;
top: 5px; display: block;
left: 6px; float: left;
margin: 2px 0 0 0;
} }
.phabricator-main-menu-alert-count { .alert-notifications .phabricator-main-menu-message-icon {
position: absolute; margin: 3px 0 0 8px;
}
.phabricator-main-menu-alert-count,
.phabricator-main-menu-message-count {
font-weight: bold; font-weight: bold;
line-height: 22px; line-height: 20px;
top: 1px;
right: 8px;
left: 20px;
color: #ffffff; color: #ffffff;
text-align: center; text-align: center;
display: none; display: none;
float: left;
margin-left: 3px;
} }
.phabricator-main-menu-alert-item { .alert-unread .phabricator-main-menu-alert-count,
width: 26px; .message-unread .phabricator-main-menu-message-count {
height: 26px;
margin: 9px;
display: block;
}
.alert-unread .phabricator-main-menu-alert-count {
display: block; display: block;
} }

View file

@ -38,10 +38,10 @@
} }
.config-options-current-value { .config-options-current-value {
padding: 0 6px 2px; padding: 0 10px 8px;
white-space: pre-wrap; white-space: pre-wrap;
} }
.config-options-current-value span { .config-options-current-value span {
color: #666666; color: #777;
} }

View file

@ -2,21 +2,29 @@
* @provides conpherence-header-pane-css * @provides conpherence-header-pane-css
*/ */
#conpherence-main-pane {
position: relative;
}
.conpherence-header-pane { .conpherence-header-pane {
border-bottom: 1px solid #ccc; border-bottom: 1px solid #ccc;
background: #fff; background: #fff;
height: 50px; height: 80px;
width: 100%; width: 100%;
} }
.conpherence-header-pane .edit { .conpherence-header-pane .edit {
position: relative;
float: right; float: right;
margin: 16px 16px 0px 0px; margin: 16px 16px 0px 0px;
height: 50px;
width: 50px;
background-image: url('/rsrc/image/actions/edit.png');
} }
.conpherence-header-pane .header-image { .conpherence-header-pane .header-image {
position: absolute; position: absolute;
top: 15px;
left: 15px;
height: 50px; height: 50px;
width: 50px; width: 50px;
} }
@ -24,16 +32,17 @@
.conpherence-header-pane .title { .conpherence-header-pane .title {
position: relative; position: relative;
font-size: 16px; font-size: 16px;
left: 62px; font-weight: bold;
top: 6px; left: 77px;
top: 21px;
max-width: 80%; max-width: 80%;
overflow-x: auto; overflow-x: auto;
} }
.conpherence-header-pane .subtitle { .conpherence-header-pane .subtitle {
position: relative; position: relative;
left: 62px; left: 77px;
top: 6px; top: 21px;
color: #bfbfbf; color: #bfbfbf;
max-width: 80%; max-width: 80%;
} }

View file

@ -3,9 +3,12 @@
*/ */
.no-conpherences-menu-item { .no-conpherences-menu-item {
color: #ffffff; color: #a1a5a9;
border-top: solid 1px #3B3D3E; border-top: solid 1px #3B3D3E;
padding: 20px 0px 20px 66px; padding: 20px 0;
margin: 0px auto;
width: 320px;
text-align: center;
} }
.conpherence-menu .phabricator-nav-column-background, .conpherence-menu .phabricator-nav-column-background,

View file

@ -15,15 +15,16 @@
position: fixed; position: fixed;
left: 320px; left: 320px;
right: 321px; right: 321px;
top: 94px; top: 124px;
bottom: 225px; bottom: 142px;
overflow-y: auto; overflow-y: auto;
box-shadow: inset 1px 5px 5px rgba(0,0,0,0.1);
} }
.conpherence-message-pane .phabricator-form-view { .conpherence-message-pane .phabricator-form-view {
border-width: 0; border-width: 0;
background: none; background: none;
height: 224px; height: 143px;
padding: 0; padding: 0;
position: fixed; position: fixed;
bottom: 0; bottom: 0;
@ -46,8 +47,7 @@
} }
.conpherence-message-pane .phabricator-transaction-view { .conpherence-message-pane .phabricator-transaction-view {
margin: 1em 1.25em 1em 1.25em; margin: 10px 0 10px 15px;
display: block;
} }
.conpherence-message-pane .phabricator-transaction-detail { .conpherence-message-pane .phabricator-transaction-detail {
@ -67,8 +67,7 @@
} }
.conpherence-message-pane .conpherence-edited .phabricator-transaction-content { .conpherence-message-pane .conpherence-edited .phabricator-transaction-content {
font-size: 12px; padding: 0 1em 0 1em;
padding: 0em 1em 0em 1em;
margin-top: -4px; margin-top: -4px;
} }
@ -82,14 +81,19 @@
.conpherence-message-pane .remarkup-assist-bar { .conpherence-message-pane .remarkup-assist-bar {
border-width: 1px 0 0; border-width: 1px 0 0;
border-color: #CCC; border-color: #CCC;
border-bottom: transparent;
} }
.conpherence-message-pane .remarkup-assist-textarea { .conpherence-message-pane .remarkup-assist-textarea {
border-width: 1px 0 1px 0; border-width: 0 0 1px 0;
border-color: #CCC; border-color: #e7e7e7;
} }
.conpherence-message-pane .remarkup-assist-textarea:focus { .conpherence-message-pane .remarkup-assist-textarea:focus {
outline: none; outline: none;
} }
.conpherence-message-pane .aphront-form-input textarea {
padding: 6px;
height: 6em;
}

View file

@ -5,12 +5,13 @@
.conpherence-widget-pane { .conpherence-widget-pane {
position: fixed; position: fixed;
right: 0px; right: 0px;
top: 94px; top: 125px;
width: 320px; width: 320px;
height: 100%; height: 100%;
border-width: 0 0 0 1px; border-width: 0 0 0 1px;
border-color: #CCC; border-color: #CCC;
border-style: solid; border-style: solid;
background: url('/rsrc/image/texture/dust_background.jpg');
} }
.conpherence-widget-pane .aphront-form-input { .conpherence-widget-pane .aphront-form-input {

View file

@ -7,6 +7,10 @@
background: #f4f5f6; background: #f4f5f6;
} }
.phabricator-object-item-list-view.phabricator-object-list-stackable .phabricator-object-item {
margin: -1px 0 0 0;
}
.device-desktop .phabricator-object-item-list-view { .device-desktop .phabricator-object-item-list-view {
padding: 20px; padding: 20px;
} }
@ -14,22 +18,27 @@
.phabricator-object-item { .phabricator-object-item {
background: #ffffff; background: #ffffff;
border-style: solid; border-style: solid;
border-color: #d7d7d7 #e4e3e4 #bcbcbd #d7d7d7; border-color: #c0c5d1;
border-width: 1px 1px 1px 3px; border-width: 1px 1px 1px 3px;
margin: 3px 0; margin: 5px 0;
overflow: hidden; overflow: hidden;
box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.10); box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.10);
} }
.phabricator-object-list-stackable .phabricator-object-item {
border-width: 1px;
}
.device-desktop .phabricator-object-item { .device-desktop .phabricator-object-item {
margin: 0 0 5px 0; margin: 0 0 5px 0;
} }
.phabricator-object-item-name { .phabricator-object-item-name {
display: block; display: block;
padding: 4px 8px 4px; padding: 8px 10px 2px;
font-weight: bold; font-weight: bold;
font-size: 14px;
} }
.phabricator-object-item-content { .phabricator-object-item-content {
@ -43,13 +52,13 @@
*/ */
.phabricator-object-item-attributes { .phabricator-object-item-attributes {
padding: 0px 8px 4px; padding: 0px 10px 8px;
} }
.phabricator-object-item-attribute { .phabricator-object-item-attribute {
display: inline; display: inline;
color: #555555; color: #777;
font-size: 11px; font-size: 13px;
} }
.phabricator-object-item-attribute-spacer { .phabricator-object-item-attribute-spacer {
@ -66,7 +75,7 @@
.phabricator-object-item-icons { .phabricator-object-item-icons {
float: right; float: right;
padding: 2px 4px 0; padding: 10px 10px 0;
} }
/* NOTE: The main content is an "overflow: hidden" div which we give a right /* NOTE: The main content is an "overflow: hidden" div which we give a right

View file

@ -31,7 +31,7 @@
} }
.phabricator-source-code-summary { .phabricator-source-code-summary {
margin-bottom: 4px; padding-bottom: 8px;
} }
/* If a Paste has enormously long lines, truncate them in the summary on the /* If a Paste has enormously long lines, truncate them in the summary on the

View file

@ -82,546 +82,562 @@ only screen and (-webkit-min-device-pixel-ratio: 1.5) {
background-position: -87px -29px; background-position: -87px -29px;
} }
.app-countdown-light-large { .app-conpherence-light-large {
background-position: -116px -29px; background-position: -116px -29px;
} }
.app-countdown-dark-large { .app-conpherence-dark-large {
background-position: -145px -29px; background-position: -145px -29px;
} }
.app-countdown-blue-large, .phabricator-crumb-view:hover .app-countdown-dark-large { .app-conpherence-blue-large, .phabricator-crumb-view:hover .app-conpherence-dark-large {
background-position: -174px -29px; background-position: -174px -29px;
} }
.app-countdown-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-countdown-light-large { .app-conpherence-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-conpherence-light-large {
background-position: -203px -29px; background-position: -203px -29px;
} }
.app-daemon-light-large { .app-countdown-light-large {
background-position: -232px -29px; background-position: -232px -29px;
} }
.app-daemon-dark-large { .app-countdown-dark-large {
background-position: -261px -29px; background-position: -261px -29px;
} }
.app-daemon-blue-large, .phabricator-crumb-view:hover .app-daemon-dark-large { .app-countdown-blue-large, .phabricator-crumb-view:hover .app-countdown-dark-large {
background-position: -290px -29px; background-position: -290px -29px;
} }
.app-daemon-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-daemon-light-large { .app-countdown-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-countdown-light-large {
background-position: -319px -29px; background-position: -319px -29px;
} }
.app-differential-light-large { .app-daemon-light-large {
background-position: 0px -58px; background-position: 0px -58px;
} }
.app-differential-dark-large { .app-daemon-dark-large {
background-position: -29px -58px; background-position: -29px -58px;
} }
.app-differential-blue-large, .phabricator-crumb-view:hover .app-differential-dark-large { .app-daemon-blue-large, .phabricator-crumb-view:hover .app-daemon-dark-large {
background-position: -58px -58px; background-position: -58px -58px;
} }
.app-differential-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-differential-light-large { .app-daemon-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-daemon-light-large {
background-position: -87px -58px; background-position: -87px -58px;
} }
.app-diffusion-light-large { .app-differential-light-large {
background-position: -116px -58px; background-position: -116px -58px;
} }
.app-diffusion-dark-large { .app-differential-dark-large {
background-position: -145px -58px; background-position: -145px -58px;
} }
.app-diffusion-blue-large, .phabricator-crumb-view:hover .app-diffusion-dark-large { .app-differential-blue-large, .phabricator-crumb-view:hover .app-differential-dark-large {
background-position: -174px -58px; background-position: -174px -58px;
} }
.app-diffusion-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diffusion-light-large { .app-differential-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-differential-light-large {
background-position: -203px -58px; background-position: -203px -58px;
} }
.app-diviner-light-large { .app-diffusion-light-large {
background-position: -232px -58px; background-position: -232px -58px;
} }
.app-diviner-dark-large { .app-diffusion-dark-large {
background-position: -261px -58px; background-position: -261px -58px;
} }
.app-diviner-blue-large, .phabricator-crumb-view:hover .app-diviner-dark-large { .app-diffusion-blue-large, .phabricator-crumb-view:hover .app-diffusion-dark-large {
background-position: -290px -58px; background-position: -290px -58px;
} }
.app-diviner-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diviner-light-large { .app-diffusion-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diffusion-light-large {
background-position: -319px -58px; background-position: -319px -58px;
} }
.app-drydock-light-large { .app-diviner-light-large {
background-position: 0px -87px; background-position: 0px -87px;
} }
.app-drydock-dark-large { .app-diviner-dark-large {
background-position: -29px -87px; background-position: -29px -87px;
} }
.app-drydock-blue-large, .phabricator-crumb-view:hover .app-drydock-dark-large { .app-diviner-blue-large, .phabricator-crumb-view:hover .app-diviner-dark-large {
background-position: -58px -87px; background-position: -58px -87px;
} }
.app-drydock-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-drydock-light-large { .app-diviner-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diviner-light-large {
background-position: -87px -87px; background-position: -87px -87px;
} }
.app-fact-light-large { .app-drydock-light-large {
background-position: -116px -87px; background-position: -116px -87px;
} }
.app-fact-dark-large { .app-drydock-dark-large {
background-position: -145px -87px; background-position: -145px -87px;
} }
.app-fact-blue-large, .phabricator-crumb-view:hover .app-fact-dark-large { .app-drydock-blue-large, .phabricator-crumb-view:hover .app-drydock-dark-large {
background-position: -174px -87px; background-position: -174px -87px;
} }
.app-fact-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-fact-light-large { .app-drydock-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-drydock-light-large {
background-position: -203px -87px; background-position: -203px -87px;
} }
.app-feed-light-large { .app-fact-light-large {
background-position: -232px -87px; background-position: -232px -87px;
} }
.app-feed-dark-large { .app-fact-dark-large {
background-position: -261px -87px; background-position: -261px -87px;
} }
.app-feed-blue-large, .phabricator-crumb-view:hover .app-feed-dark-large { .app-fact-blue-large, .phabricator-crumb-view:hover .app-fact-dark-large {
background-position: -290px -87px; background-position: -290px -87px;
} }
.app-feed-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-feed-light-large { .app-fact-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-fact-light-large {
background-position: -319px -87px; background-position: -319px -87px;
} }
.app-files-light-large { .app-feed-light-large {
background-position: 0px -116px; background-position: 0px -116px;
} }
.app-files-dark-large { .app-feed-dark-large {
background-position: -29px -116px; background-position: -29px -116px;
} }
.app-files-blue-large, .phabricator-crumb-view:hover .app-files-dark-large { .app-feed-blue-large, .phabricator-crumb-view:hover .app-feed-dark-large {
background-position: -58px -116px; background-position: -58px -116px;
} }
.app-files-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-files-light-large { .app-feed-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-feed-light-large {
background-position: -87px -116px; background-position: -87px -116px;
} }
.app-flags-light-large { .app-files-light-large {
background-position: -116px -116px; background-position: -116px -116px;
} }
.app-flags-dark-large { .app-files-dark-large {
background-position: -145px -116px; background-position: -145px -116px;
} }
.app-flags-blue-large, .phabricator-crumb-view:hover .app-flags-dark-large { .app-files-blue-large, .phabricator-crumb-view:hover .app-files-dark-large {
background-position: -174px -116px; background-position: -174px -116px;
} }
.app-flags-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-flags-light-large { .app-files-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-files-light-large {
background-position: -203px -116px; background-position: -203px -116px;
} }
.app-help-light-large { .app-flags-light-large {
background-position: -232px -116px; background-position: -232px -116px;
} }
.app-help-dark-large { .app-flags-dark-large {
background-position: -261px -116px; background-position: -261px -116px;
} }
.app-help-blue-large, .phabricator-crumb-view:hover .app-help-dark-large { .app-flags-blue-large, .phabricator-crumb-view:hover .app-flags-dark-large {
background-position: -290px -116px; background-position: -290px -116px;
} }
.app-help-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-help-light-large { .app-flags-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-flags-light-large {
background-position: -319px -116px; background-position: -319px -116px;
} }
.app-herald-light-large { .app-help-light-large {
background-position: 0px -145px; background-position: 0px -145px;
} }
.app-herald-dark-large { .app-help-dark-large {
background-position: -29px -145px; background-position: -29px -145px;
} }
.app-herald-blue-large, .phabricator-crumb-view:hover .app-herald-dark-large { .app-help-blue-large, .phabricator-crumb-view:hover .app-help-dark-large {
background-position: -58px -145px; background-position: -58px -145px;
} }
.app-herald-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-herald-light-large { .app-help-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-help-light-large {
background-position: -87px -145px; background-position: -87px -145px;
} }
.app-home-light-large { .app-herald-light-large {
background-position: -116px -145px; background-position: -116px -145px;
} }
.app-home-dark-large { .app-herald-dark-large {
background-position: -145px -145px; background-position: -145px -145px;
} }
.app-home-blue-large, .phabricator-crumb-view:hover .app-home-dark-large { .app-herald-blue-large, .phabricator-crumb-view:hover .app-herald-dark-large {
background-position: -174px -145px; background-position: -174px -145px;
} }
.app-home-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-home-light-large { .app-herald-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-herald-light-large {
background-position: -203px -145px; background-position: -203px -145px;
} }
.app-logo-light-large { .app-home-light-large {
background-position: -232px -145px; background-position: -232px -145px;
} }
.app-logo-dark-large { .app-home-dark-large {
background-position: -261px -145px; background-position: -261px -145px;
} }
.app-logo-blue-large, .phabricator-crumb-view:hover .app-logo-dark-large { .app-home-blue-large, .phabricator-crumb-view:hover .app-home-dark-large {
background-position: -290px -145px; background-position: -290px -145px;
} }
.app-logo-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-logo-light-large { .app-home-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-home-light-large {
background-position: -319px -145px; background-position: -319px -145px;
} }
.app-macro-light-large { .app-logo-light-large {
background-position: 0px -174px; background-position: 0px -174px;
} }
.app-macro-dark-large { .app-logo-dark-large {
background-position: -29px -174px; background-position: -29px -174px;
} }
.app-macro-blue-large, .phabricator-crumb-view:hover .app-macro-dark-large { .app-logo-blue-large, .phabricator-crumb-view:hover .app-logo-dark-large {
background-position: -58px -174px; background-position: -58px -174px;
} }
.app-macro-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-macro-light-large { .app-logo-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-logo-light-large {
background-position: -87px -174px; background-position: -87px -174px;
} }
.app-mail-light-large { .app-macro-light-large {
background-position: -116px -174px; background-position: -116px -174px;
} }
.app-mail-dark-large { .app-macro-dark-large {
background-position: -145px -174px; background-position: -145px -174px;
} }
.app-mail-blue-large, .phabricator-crumb-view:hover .app-mail-dark-large { .app-macro-blue-large, .phabricator-crumb-view:hover .app-macro-dark-large {
background-position: -174px -174px; background-position: -174px -174px;
} }
.app-mail-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-mail-light-large { .app-macro-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-macro-light-large {
background-position: -203px -174px; background-position: -203px -174px;
} }
.app-maniphest-light-large { .app-mail-light-large {
background-position: -232px -174px; background-position: -232px -174px;
} }
.app-maniphest-dark-large { .app-mail-dark-large {
background-position: -261px -174px; background-position: -261px -174px;
} }
.app-maniphest-blue-large, .phabricator-crumb-view:hover .app-maniphest-dark-large { .app-mail-blue-large, .phabricator-crumb-view:hover .app-mail-dark-large {
background-position: -290px -174px; background-position: -290px -174px;
} }
.app-maniphest-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-maniphest-light-large { .app-mail-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-mail-light-large {
background-position: -319px -174px; background-position: -319px -174px;
} }
.app-metamta-light-large { .app-maniphest-light-large {
background-position: 0px -203px; background-position: 0px -203px;
} }
.app-metamta-dark-large { .app-maniphest-dark-large {
background-position: -29px -203px; background-position: -29px -203px;
} }
.app-metamta-blue-large, .phabricator-crumb-view:hover .app-metamta-dark-large { .app-maniphest-blue-large, .phabricator-crumb-view:hover .app-maniphest-dark-large {
background-position: -58px -203px; background-position: -58px -203px;
} }
.app-metamta-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-metamta-light-large { .app-maniphest-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-maniphest-light-large {
background-position: -87px -203px; background-position: -87px -203px;
} }
.app-owners-light-large { .app-metamta-light-large {
background-position: -116px -203px; background-position: -116px -203px;
} }
.app-owners-dark-large { .app-metamta-dark-large {
background-position: -145px -203px; background-position: -145px -203px;
} }
.app-owners-blue-large, .phabricator-crumb-view:hover .app-owners-dark-large { .app-metamta-blue-large, .phabricator-crumb-view:hover .app-metamta-dark-large {
background-position: -174px -203px; background-position: -174px -203px;
} }
.app-owners-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-owners-light-large { .app-metamta-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-metamta-light-large {
background-position: -203px -203px; background-position: -203px -203px;
} }
.app-paste-light-large { .app-owners-light-large {
background-position: -232px -203px; background-position: -232px -203px;
} }
.app-paste-dark-large { .app-owners-dark-large {
background-position: -261px -203px; background-position: -261px -203px;
} }
.app-paste-blue-large, .phabricator-crumb-view:hover .app-paste-dark-large { .app-owners-blue-large, .phabricator-crumb-view:hover .app-owners-dark-large {
background-position: -290px -203px; background-position: -290px -203px;
} }
.app-paste-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-paste-light-large { .app-owners-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-owners-light-large {
background-position: -319px -203px; background-position: -319px -203px;
} }
.app-people-light-large { .app-paste-light-large {
background-position: 0px -232px; background-position: 0px -232px;
} }
.app-people-dark-large { .app-paste-dark-large {
background-position: -29px -232px; background-position: -29px -232px;
} }
.app-people-blue-large, .phabricator-crumb-view:hover .app-people-dark-large { .app-paste-blue-large, .phabricator-crumb-view:hover .app-paste-dark-large {
background-position: -58px -232px; background-position: -58px -232px;
} }
.app-people-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-people-light-large { .app-paste-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-paste-light-large {
background-position: -87px -232px; background-position: -87px -232px;
} }
.app-phame-light-large { .app-people-light-large {
background-position: -116px -232px; background-position: -116px -232px;
} }
.app-phame-dark-large { .app-people-dark-large {
background-position: -145px -232px; background-position: -145px -232px;
} }
.app-phame-blue-large, .phabricator-crumb-view:hover .app-phame-dark-large { .app-people-blue-large, .phabricator-crumb-view:hover .app-people-dark-large {
background-position: -174px -232px; background-position: -174px -232px;
} }
.app-phame-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phame-light-large { .app-people-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-people-light-large {
background-position: -203px -232px; background-position: -203px -232px;
} }
.app-phid-light-large { .app-phame-light-large {
background-position: -232px -232px; background-position: -232px -232px;
} }
.app-phid-dark-large { .app-phame-dark-large {
background-position: -261px -232px; background-position: -261px -232px;
} }
.app-phid-blue-large, .phabricator-crumb-view:hover .app-phid-dark-large { .app-phame-blue-large, .phabricator-crumb-view:hover .app-phame-dark-large {
background-position: -290px -232px; background-position: -290px -232px;
} }
.app-phid-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phid-light-large { .app-phame-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phame-light-large {
background-position: -319px -232px; background-position: -319px -232px;
} }
.app-pholio-light-large { .app-phid-light-large {
background-position: 0px -261px; background-position: 0px -261px;
} }
.app-pholio-dark-large { .app-phid-dark-large {
background-position: -29px -261px; background-position: -29px -261px;
} }
.app-pholio-blue-large, .phabricator-crumb-view:hover .app-pholio-dark-large { .app-phid-blue-large, .phabricator-crumb-view:hover .app-phid-dark-large {
background-position: -58px -261px; background-position: -58px -261px;
} }
.app-pholio-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-pholio-light-large { .app-phid-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phid-light-large {
background-position: -87px -261px; background-position: -87px -261px;
} }
.app-phpast-light-large { .app-pholio-light-large {
background-position: -116px -261px; background-position: -116px -261px;
} }
.app-phpast-dark-large { .app-pholio-dark-large {
background-position: -145px -261px; background-position: -145px -261px;
} }
.app-phpast-blue-large, .phabricator-crumb-view:hover .app-phpast-dark-large { .app-pholio-blue-large, .phabricator-crumb-view:hover .app-pholio-dark-large {
background-position: -174px -261px; background-position: -174px -261px;
} }
.app-phpast-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phpast-light-large { .app-pholio-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-pholio-light-large {
background-position: -203px -261px; background-position: -203px -261px;
} }
.app-phriction-light-large { .app-phpast-light-large {
background-position: -232px -261px; background-position: -232px -261px;
} }
.app-phriction-dark-large { .app-phpast-dark-large {
background-position: -261px -261px; background-position: -261px -261px;
} }
.app-phriction-blue-large, .phabricator-crumb-view:hover .app-phriction-dark-large { .app-phpast-blue-large, .phabricator-crumb-view:hover .app-phpast-dark-large {
background-position: -290px -261px; background-position: -290px -261px;
} }
.app-phriction-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phriction-light-large { .app-phpast-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phpast-light-large {
background-position: -319px -261px; background-position: -319px -261px;
} }
.app-ponder-light-large { .app-phriction-light-large {
background-position: 0px -290px; background-position: 0px -290px;
} }
.app-ponder-dark-large { .app-phriction-dark-large {
background-position: -29px -290px; background-position: -29px -290px;
} }
.app-ponder-blue-large, .phabricator-crumb-view:hover .app-ponder-dark-large { .app-phriction-blue-large, .phabricator-crumb-view:hover .app-phriction-dark-large {
background-position: -58px -290px; background-position: -58px -290px;
} }
.app-ponder-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-ponder-light-large { .app-phriction-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phriction-light-large {
background-position: -87px -290px; background-position: -87px -290px;
} }
.app-power-light-large { .app-ponder-light-large {
background-position: -116px -290px; background-position: -116px -290px;
} }
.app-power-dark-large { .app-ponder-dark-large {
background-position: -145px -290px; background-position: -145px -290px;
} }
.app-power-blue-large, .phabricator-crumb-view:hover .app-power-dark-large { .app-ponder-blue-large, .phabricator-crumb-view:hover .app-ponder-dark-large {
background-position: -174px -290px; background-position: -174px -290px;
} }
.app-power-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-power-light-large { .app-ponder-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-ponder-light-large {
background-position: -203px -290px; background-position: -203px -290px;
} }
.app-projects-light-large { .app-power-light-large {
background-position: -232px -290px; background-position: -232px -290px;
} }
.app-projects-dark-large { .app-power-dark-large {
background-position: -261px -290px; background-position: -261px -290px;
} }
.app-projects-blue-large, .phabricator-crumb-view:hover .app-projects-dark-large { .app-power-blue-large, .phabricator-crumb-view:hover .app-power-dark-large {
background-position: -290px -290px; background-position: -290px -290px;
} }
.app-projects-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-projects-light-large { .app-power-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-power-light-large {
background-position: -319px -290px; background-position: -319px -290px;
} }
.app-repositories-light-large { .app-projects-light-large {
background-position: 0px -319px; background-position: 0px -319px;
} }
.app-repositories-dark-large { .app-projects-dark-large {
background-position: -29px -319px; background-position: -29px -319px;
} }
.app-repositories-blue-large, .phabricator-crumb-view:hover .app-repositories-dark-large { .app-projects-blue-large, .phabricator-crumb-view:hover .app-projects-dark-large {
background-position: -58px -319px; background-position: -58px -319px;
} }
.app-repositories-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-repositories-light-large { .app-projects-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-projects-light-large {
background-position: -87px -319px; background-position: -87px -319px;
} }
.app-settings-light-large { .app-repositories-light-large {
background-position: -116px -319px; background-position: -116px -319px;
} }
.app-settings-dark-large { .app-repositories-dark-large {
background-position: -145px -319px; background-position: -145px -319px;
} }
.app-settings-blue-large, .phabricator-crumb-view:hover .app-settings-dark-large { .app-repositories-blue-large, .phabricator-crumb-view:hover .app-repositories-dark-large {
background-position: -174px -319px; background-position: -174px -319px;
} }
.app-settings-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-settings-light-large { .app-repositories-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-repositories-light-large {
background-position: -203px -319px; background-position: -203px -319px;
} }
.app-setup-light-large { .app-settings-light-large {
background-position: -232px -319px; background-position: -232px -319px;
} }
.app-setup-dark-large { .app-settings-dark-large {
background-position: -261px -319px; background-position: -261px -319px;
} }
.app-setup-blue-large, .phabricator-crumb-view:hover .app-setup-dark-large { .app-settings-blue-large, .phabricator-crumb-view:hover .app-settings-dark-large {
background-position: -290px -319px; background-position: -290px -319px;
} }
.app-setup-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-setup-light-large { .app-settings-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-settings-light-large {
background-position: -319px -319px; background-position: -319px -319px;
} }
.app-slowvote-light-large { .app-setup-light-large {
background-position: 0px -348px; background-position: 0px -348px;
} }
.app-slowvote-dark-large { .app-setup-dark-large {
background-position: -29px -348px; background-position: -29px -348px;
} }
.app-slowvote-blue-large, .phabricator-crumb-view:hover .app-slowvote-dark-large { .app-setup-blue-large, .phabricator-crumb-view:hover .app-setup-dark-large {
background-position: -58px -348px; background-position: -58px -348px;
} }
.app-slowvote-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-slowvote-light-large { .app-setup-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-setup-light-large {
background-position: -87px -348px; background-position: -87px -348px;
} }
.app-uiexamples-light-large { .app-slowvote-light-large {
background-position: -116px -348px; background-position: -116px -348px;
} }
.app-uiexamples-dark-large { .app-slowvote-dark-large {
background-position: -145px -348px; background-position: -145px -348px;
} }
.app-uiexamples-blue-large, .phabricator-crumb-view:hover .app-uiexamples-dark-large { .app-slowvote-blue-large, .phabricator-crumb-view:hover .app-slowvote-dark-large {
background-position: -174px -348px; background-position: -174px -348px;
} }
.app-uiexamples-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-uiexamples-light-large { .app-slowvote-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-slowvote-light-large {
background-position: -203px -348px; background-position: -203px -348px;
} }
.app-uiexamples-light-large {
background-position: -232px -348px;
}
.app-uiexamples-dark-large {
background-position: -261px -348px;
}
.app-uiexamples-blue-large, .phabricator-crumb-view:hover .app-uiexamples-dark-large {
background-position: -290px -348px;
}
.app-uiexamples-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-uiexamples-light-large {
background-position: -319px -348px;
}

View file

@ -34,138 +34,142 @@ only screen and (-webkit-min-device-pixel-ratio: 1.5) {
background-position: -45px 0px; background-position: -45px 0px;
} }
.app-countdown-dark { .app-conpherence-dark {
background-position: -60px 0px; background-position: -60px 0px;
} }
.app-daemon-dark { .app-countdown-dark {
background-position: -75px 0px; background-position: -75px 0px;
} }
.app-differential-dark { .app-daemon-dark {
background-position: 0px -15px; background-position: 0px -15px;
} }
.app-diffusion-dark { .app-differential-dark {
background-position: -15px -15px; background-position: -15px -15px;
} }
.app-diviner-dark { .app-diffusion-dark {
background-position: -30px -15px; background-position: -30px -15px;
} }
.app-drydock-dark { .app-diviner-dark {
background-position: -45px -15px; background-position: -45px -15px;
} }
.app-fact-dark { .app-drydock-dark {
background-position: -60px -15px; background-position: -60px -15px;
} }
.app-feed-dark { .app-fact-dark {
background-position: -75px -15px; background-position: -75px -15px;
} }
.app-files-dark { .app-feed-dark {
background-position: 0px -30px; background-position: 0px -30px;
} }
.app-flags-dark { .app-files-dark {
background-position: -15px -30px; background-position: -15px -30px;
} }
.app-help-dark { .app-flags-dark {
background-position: -30px -30px; background-position: -30px -30px;
} }
.app-herald-dark { .app-help-dark {
background-position: -45px -30px; background-position: -45px -30px;
} }
.app-home-dark { .app-herald-dark {
background-position: -60px -30px; background-position: -60px -30px;
} }
.app-logo-dark { .app-home-dark {
background-position: -75px -30px; background-position: -75px -30px;
} }
.app-macro-dark { .app-logo-dark {
background-position: 0px -45px; background-position: 0px -45px;
} }
.app-mail-dark { .app-macro-dark {
background-position: -15px -45px; background-position: -15px -45px;
} }
.app-maniphest-dark { .app-mail-dark {
background-position: -30px -45px; background-position: -30px -45px;
} }
.app-metamta-dark { .app-maniphest-dark {
background-position: -45px -45px; background-position: -45px -45px;
} }
.app-owners-dark { .app-metamta-dark {
background-position: -60px -45px; background-position: -60px -45px;
} }
.app-paste-dark { .app-owners-dark {
background-position: -75px -45px; background-position: -75px -45px;
} }
.app-people-dark { .app-paste-dark {
background-position: 0px -60px; background-position: 0px -60px;
} }
.app-phame-dark { .app-people-dark {
background-position: -15px -60px; background-position: -15px -60px;
} }
.app-phid-dark { .app-phame-dark {
background-position: -30px -60px; background-position: -30px -60px;
} }
.app-pholio-dark { .app-phid-dark {
background-position: -45px -60px; background-position: -45px -60px;
} }
.app-phpast-dark { .app-pholio-dark {
background-position: -60px -60px; background-position: -60px -60px;
} }
.app-phriction-dark { .app-phpast-dark {
background-position: -75px -60px; background-position: -75px -60px;
} }
.app-ponder-dark { .app-phriction-dark {
background-position: 0px -75px; background-position: 0px -75px;
} }
.app-power-dark { .app-ponder-dark {
background-position: -15px -75px; background-position: -15px -75px;
} }
.app-projects-dark { .app-power-dark {
background-position: -30px -75px; background-position: -30px -75px;
} }
.app-repositories-dark { .app-projects-dark {
background-position: -45px -75px; background-position: -45px -75px;
} }
.app-settings-dark { .app-repositories-dark {
background-position: -60px -75px; background-position: -60px -75px;
} }
.app-setup-dark { .app-settings-dark {
background-position: -75px -75px; background-position: -75px -75px;
} }
.app-slowvote-dark { .app-setup-dark {
background-position: 0px -90px; background-position: 0px -90px;
} }
.app-uiexamples-dark { .app-slowvote-dark {
background-position: -15px -90px; background-position: -15px -90px;
} }
.app-uiexamples-dark {
background-position: -30px -90px;
}

View file

@ -13,19 +13,11 @@ only screen and (min-device-pixel-ratio: 1.5),
only screen and (-webkit-min-device-pixel-ratio: 1.5) { only screen and (-webkit-min-device-pixel-ratio: 1.5) {
.sprite-menu { .sprite-menu {
background-image: url(/rsrc/image/sprite-menu-X2.png); background-image: url(/rsrc/image/sprite-menu-X2.png);
background-size: 140px 127px; background-size: 140px 88px;
} }
} }
.phabricator-main-menu-alert-bubble {
background-position: 0px -68px;
}
.phabricator-main-menu-alert-bubble.alert-unread {
background-position: 0px -41px;
}
.alert-notifications .phabricator-main-menu-alert-icon { .alert-notifications .phabricator-main-menu-alert-icon {
background-position: 0px 0px; background-position: 0px 0px;
} }
@ -35,21 +27,33 @@ only screen and (-webkit-min-device-pixel-ratio: 1.5) {
} }
.alert-notifications.alert-unread .phabricator-main-menu-alert-icon { .alert-notifications.alert-unread .phabricator-main-menu-alert-icon {
background-position: -27px -68px; background-position: -30px 0px;
} }
.phabricator-crumb-divider { .phabricator-crumb-divider {
background-position: 0px -95px; background-position: 0px -56px;
} }
.menu-icon-eye { .menu-icon-eye {
background-position: -47px -41px; background-position: -10px -56px;
} }
.menu-icon-app { .menu-icon-app {
background-position: -42px -68px; background-position: -35px -56px;
} }
.phabricator-main-menu-logo-image { .phabricator-main-menu-logo-image {
background-position: 0px -30px;
}
.alert-notifications .phabricator-main-menu-message-icon {
background-position: 0px -15px; background-position: 0px -15px;
} }
.alert-notifications:hover .phabricator-main-menu-message-icon {
background-position: -15px -15px;
}
.alert-notifications.message-unread .phabricator-main-menu-message-icon {
background-position: -30px -15px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

After

Width:  |  Height:  |  Size: 222 KiB

Some files were not shown because too many files have changed in this diff Show more