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

View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

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

View file

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

View file

@ -22,18 +22,18 @@ final class PhabricatorEmailLoginController
if ($request->isFormPost()) {
$e_email = null;
$e_captcha = 'Again';
$e_captcha = pht('Again');
$captcha_ok = AphrontFormRecaptchaControl::processCaptcha($request);
if (!$captcha_ok) {
$errors[] = "Captcha response is incorrect, try again.";
$e_captcha = 'Invalid';
$errors[] = pht("Captcha response is incorrect, try again.");
$e_captcha = pht('Invalid');
}
$email = $request->getStr('email');
if (!strlen($email)) {
$errors[] = "You must provide an email address.";
$e_email = 'Required';
$errors[] = pht("You must provide an email address.");
$e_email = pht('Required');
}
if (!$errors) {
@ -53,8 +53,9 @@ final class PhabricatorEmailLoginController
}
if (!$target_user) {
$errors[] = "There is no account associated with that email address.";
$e_email = "Invalid";
$errors[] =
pht("There is no account associated with that email address.");
$e_email = pht("Invalid");
}
if (!$errors) {
@ -96,13 +97,15 @@ EOBODY;
$mail->saveAndSend();
$view = new AphrontRequestFailureView();
$view->setHeader('Check Your Email');
$view->setHeader(pht('Check Your Email'));
$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(
$view,
array(
'title' => 'Email Sent',
'title' => pht('Email Sent'),
));
}
}
@ -115,38 +118,41 @@ EOBODY;
->setUser($request->getUser())
->appendChild(
id(new AphrontFormTextControl())
->setLabel('Email')
->setLabel(pht('Email'))
->setName('email')
->setValue($request->getStr('email'))
->setError($e_email))
->appendChild(
id(new AphrontFormRecaptchaControl())
->setLabel('Captcha')
->setLabel(pht('Captcha'))
->setError($e_captcha))
->appendChild(
id(new AphrontFormSubmitControl())
->setValue('Send Email'));
->setValue(pht('Send Email')));
$error_view = null;
if ($errors) {
$error_view = new AphrontErrorView();
$error_view->setTitle('Login Error');
$error_view->setTitle(pht('Login Error'));
$error_view->setErrors($errors);
}
$panel = new AphrontPanelView();
$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->setNoBackground();
return $this->buildStandardPageResponse(
return $this->buildApplicationPage(
array(
$error_view,
$panel,
),
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)) {
$view = new AphrontRequestFailureView();
$view->setHeader('Unable to Login');
$view->setHeader(pht('Unable to Login'));
$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 '.
'entire link into your browser. You can try again, or request '.
'a new email.</p>');
'a new email.').'</p>');
$view->appendChild(
'<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>');
return $this->buildStandardPageResponse(
$view,
array(
'title' => 'Login Failure',
'title' => pht('Login Failure'),
));
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -30,21 +30,25 @@ final class PhabricatorMustVerifyEmailController
$email->sendVerificationEmail($user);
$sent = new AphrontErrorView();
$sent->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
$sent->setTitle('Email Sent');
$sent->appendChild(
'<p>Another verification email was sent to <strong>'.
phutil_escape_html($email_address).'</strong>.</p>');
$sent->setTitle(pht('Email Sent'));
$sent->appendChild('<p>'.
pht('Another verification email was sent to <strong>%s</strong>.',
phutil_escape_html($email_address)).'</p>');
}
$error_view = new AphrontRequestFailureView();
$error_view->setHeader('Check Your Email');
$error_view->setHeader(pht('Check Your Email'));
$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 '.
'inbox (<strong>'.phutil_escape_html($email_address).'</strong>).</p>');
'inbox (<strong>%s</strong>).', phutil_escape_html($email_address)).
'</p>');
$error_view->appendChild(
'<p>If you did not receive an email, you can click the button below '.
'to try sending another one.</p>');
'<p>'.
pht('If you did not receive an email, you can click the button below '.
'to try sending another one.').
'</p>');
$error_view->appendChild(
'<div class="aphront-failure-continue">'.
phabricator_render_form(
@ -57,17 +61,18 @@ final class PhabricatorMustVerifyEmailController
'button',
array(
),
'Send Another Email')).
pht('Send Another Email'))).
'</div>');
return $this->buildStandardPageResponse(
return $this->buildApplicationPage(
array(
$sent,
$error_view,
),
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()) {
$dialog = new AphrontDialogView();
$dialog->setUser($current_user);
$dialog->setTitle('Already Linked to Another Account');
$dialog->appendChild(
hsprintf(
'<p>The %s account you just authorized is already linked to '.
$dialog->setTitle(pht('Already Linked to Another Account'));
$dialog->appendChild('<p>'.
pht(
'The %s account you just authorized is already linked to '.
'another Phabricator account. Before you can associate your %s '.
'account with this Phabriactor account, you must unlink it from '.
'the Phabricator account it is currently linked to.</p>',
$provider_name,
$provider_name));
phutil_escape_html($provider_name),
phutil_escape_html($provider_name))).'</p>';
$dialog->addCancelButton($provider->getSettingsPanelURI());
return id(new AphrontDialogResponse())->setDialog($dialog);
@ -95,14 +95,15 @@ final class PhabricatorOAuthLoginController
if ($existing_oauth) {
$dialog = new AphrontDialogView();
$dialog->setUser($current_user);
$dialog->setTitle('Already Linked to an Account From This Provider');
$dialog->appendChild(
hsprintf(
'<p>The account you are logged in with is already linked to a %s '.
$dialog->setTitle(
pht('Already Linked to an Account From This Provider'));
$dialog->appendChild('<p>'.
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 '.
'must unlink the old account.</p>',
$provider_name,
$provider_name));
phutil_escape_html($provider_name),
phutil_escape_html($provider_name))).'</p>';
$dialog->addCancelButton($provider->getSettingsPanelURI());
return id(new AphrontDialogResponse())->setDialog($dialog);
}
@ -110,11 +111,11 @@ final class PhabricatorOAuthLoginController
if (!$request->isDialogFormPost()) {
$dialog = new AphrontDialogView();
$dialog->setUser($current_user);
$dialog->setTitle('Link '.$provider_name.' Account');
$dialog->setTitle(pht('Link %s Account', $provider_name));
$dialog->appendChild(
hsprintf(
pht(
'<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('expires', $oauth_info->getTokenExpires());
$dialog->addHiddenInput('state', $this->oauthState);
@ -168,14 +169,14 @@ final class PhabricatorOAuthLoginController
if ($known_email) {
$dialog = new AphrontDialogView();
$dialog->setUser($current_user);
$dialog->setTitle('Already Linked to Another Account');
$dialog->appendChild(
hsprintf(
'<p>The %s account you just authorized has an email address which '.
$dialog->setTitle(pht('Already Linked to Another Account'));
$dialog->appendChild('<p>'.
pht(
'The %s account you just authorized has an email address which '.
'is already in use by another Phabricator account. To link the '.
'accounts, log in to your Phabricator account and then go to '.
'Settings.</p>',
$provider_name));
'Settings.',
phutil_escape_html($provider_name))).'</p>';
$user = id(new PhabricatorUser())
->loadOneWhere('phid = %s', $known_email->getUserPHID());
@ -189,9 +190,9 @@ final class PhabricatorOAuthLoginController
->getProviderName();
}
$dialog->appendChild(
hsprintf(
pht(
'<p>The account is associated with: %s.</p>',
implode(', ', $providers)));
implode(', ', phutil_escape_html($providers))));
}
$dialog->addCancelButton('/login/');
@ -203,14 +204,14 @@ final class PhabricatorOAuthLoginController
if (!$provider->isProviderRegistrationEnabled()) {
$dialog = new AphrontDialogView();
$dialog->setUser($current_user);
$dialog->setTitle('No Account Registration With '.$provider_name);
$dialog->appendChild(
hsprintf(
'<p>You can not register a new account using %s; you can only use '.
$dialog->setTitle(pht('No Account Registration with %s', $provider_name));
$dialog->appendChild('<p>'.
pht(
'You can not register a new account using %s; you can only use '.
'your %s account to log into an existing Phabricator account which '.
'you have registered through other means.</p>',
$provider_name,
$provider_name));
'you have registered through other means.',
phutil_escape_html($provider_name),
phutil_escape_html($provider_name))).'</p>';
$dialog->addCancelButton('/login/');
return id(new AphrontDialogResponse())->setDialog($dialog);
@ -242,7 +243,7 @@ final class PhabricatorOAuthLoginController
return $this->buildStandardPageResponse(
$view,
array(
'title' => $provider_name.' Auth Failed',
'title' => pht('Auth Failed'),
));
}

View file

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

View file

@ -45,10 +45,10 @@ final class PhabricatorOAuthDefaultRegistrationController
$user->setUsername($request->getStr('username'));
$username = $user->getUsername();
if (!strlen($user->getUsername())) {
$e_username = 'Required';
$errors[] = 'Username is required.';
$e_username = pht('Required');
$errors[] = pht('Username is required.');
} else if (!PhabricatorUser::validateUsername($username)) {
$e_username = 'Invalid';
$e_username = pht('Invalid');
$errors[] = PhabricatorUser::describeValidUsername();
} else {
$e_username = null;
@ -57,8 +57,8 @@ final class PhabricatorOAuthDefaultRegistrationController
if (!$new_email) {
$new_email = trim($request->getStr('email'));
if (!$new_email) {
$e_email = 'Required';
$errors[] = 'Email is required.';
$e_email = pht('Required');
$errors[] = pht('Email is required.');
} else {
$e_email = null;
}
@ -67,7 +67,7 @@ final class PhabricatorOAuthDefaultRegistrationController
if ($new_email) {
$email_ok = PhabricatorUserEmail::isAllowedAddress($new_email);
if (!$email_ok) {
$e_email = 'Invalid';
$e_email = pht('Invalid');
$errors[] = PhabricatorUserEmail::describeAllowedAddresses();
}
}
@ -75,8 +75,8 @@ final class PhabricatorOAuthDefaultRegistrationController
if (!strlen($user->getRealName())) {
$user->setRealName($request->getStr('realname'));
if (!strlen($user->getRealName())) {
$e_realname = 'Required';
$errors[] = 'Real name is required.';
$e_realname = pht('Required');
$errors[] = pht('Real name is required.');
} else {
$e_realname = null;
}
@ -142,11 +142,11 @@ final class PhabricatorOAuthDefaultRegistrationController
$new_email);
if ($same_username) {
$e_username = 'Duplicate';
$errors[] = 'That username or email is not unique.';
$e_username = pht('Duplicate');
$errors[] = pht('That username or email is not unique.');
} else if ($same_email) {
$e_email = 'Duplicate';
$errors[] = 'That email is not unique.';
$e_email = pht('Duplicate');
$errors[] = pht('That email is not unique.');
} else {
throw $exception;
}
@ -157,7 +157,7 @@ final class PhabricatorOAuthDefaultRegistrationController
$error_view = null;
if ($errors) {
$error_view = new AphrontErrorView();
$error_view->setTitle('Registration Failed');
$error_view->setTitle(pht('Registration Failed'));
$error_view->setErrors($errors);
}
@ -176,7 +176,7 @@ final class PhabricatorOAuthDefaultRegistrationController
->setAction($action_path)
->appendChild(
id(new AphrontFormTextControl())
->setLabel('Username')
->setLabel(pht('Username'))
->setName('username')
->setValue($user->getUsername())
->setError($e_username));
@ -184,7 +184,7 @@ final class PhabricatorOAuthDefaultRegistrationController
if ($show_email_input) {
$form->appendChild(
id(new AphrontFormTextControl())
->setLabel('Email')
->setLabel(pht('Email'))
->setName('email')
->setValue($request->getStr('email'))
->setCaption(PhabricatorUserEmail::describeAllowedAddresses())
@ -194,7 +194,7 @@ final class PhabricatorOAuthDefaultRegistrationController
if ($provider->retrieveUserRealName() === null) {
$form->appendChild(
id(new AphrontFormTextControl())
->setLabel('Real Name')
->setLabel(pht('Real Name'))
->setName('realname')
->setValue($request->getStr('realname'))
->setError($e_realname));
@ -203,20 +203,22 @@ final class PhabricatorOAuthDefaultRegistrationController
$form
->appendChild(
id(new AphrontFormSubmitControl())
->setValue('Create Account'));
->setValue(pht('Create Account')));
$panel = new AphrontPanelView();
$panel->setHeader('Create New Account');
$panel->setHeader(pht('Create New Account'));
$panel->setWidth(AphrontPanelView::WIDTH_FORM);
$panel->appendChild($form);
$panel->setNoBackground();
return $this->buildStandardPageResponse(
return $this->buildApplicationPage(
array(
$error_view,
$panel,
),
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;
$view = new AphrontRequestFailureView();
$view->setHeader($provider_name.' Auth Failed');
$view->setHeader(pht('%s Auth Failed', $provider_name));
if ($this->request) {
$view->appendChild(
hsprintf(
@ -79,7 +79,7 @@ final class PhabricatorOAuthFailureView extends AphrontView {
$view->appendChild(
'<div class="aphront-failure-continue">'.
$diagnose.
'<a href="/login/" class="button">Continue</a>'.
'<a href="/login/" class="button">'.pht('Continue').'</a>'.
'</div>');
return $view->render();

View file

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

View file

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

View file

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

View file

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

View file

@ -235,6 +235,13 @@ EODOC
pht(
'Controls whether Phabricator sends email "From" users.'))
->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)
->setBoolOptions(
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_participant_query = id(new ConpherenceParticipantQuery())
->withParticipantPHIDs(array($user->getPHID()));
$unread = $unread_participant_query
$unread = id(new ConpherenceParticipantQuery())
->withParticipantPHIDs(array($user->getPHID()))
->withParticipationStatus($unread_status)
->execute();

View file

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

View file

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

View file

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

View file

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

View file

@ -5,6 +5,42 @@
*/
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() {
$types = parent::getTransactionTypes();
@ -120,33 +156,40 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
}
protected function supportsMail() {
return false;
return true;
}
/* TODO
protected function buildReplyHandler(PhabricatorLiskDAO $object) {
return id(new ConpherenceReplyHandler())
->setActor($this->getActor())
->setMailReceiver($object);
}
protected function buildMailTemplate(PhabricatorLiskDAO $object) {
$id = $object->getID();
$title = $object->getTitle();
if (!$title) {
$title = pht(
'%s sent you a message.',
$this->getActor()->getUserName()
);
}
$phid = $object->getPHID();
$original_name = $object->getOriginalName();
return id(new PhabricatorMetaMTAMail())
->setSubject("C{$id}: {$title}")
->addHeader('Thread-Topic', "C{$id}: {$phid}");
->setSubject("E{$id}: {$title}")
->addHeader('Thread-Topic', "E{$id}: {$phid}");
}
protected function getMailTo(PhabricatorLiskDAO $object) {
$participants = $object->getParticipants();
$participants[$this->requireActor()->getPHID()] = true;
return array_keys($participants);
}
protected function getMailCC(PhabricatorLiskDAO $object) {
return array();
}
protected function buildMailBody(
PhabricatorLiskDAO $object,
array $xactions) {
@ -162,7 +205,6 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
protected function getMailSubjectPrefix() {
return PhabricatorEnv::getEnvConfig('metamta.conpherence.subject-prefix');
}
*/
protected function supportsFeed() {
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 $dateTouched;
public function markUpToDate() {
public function markUpToDate(ConpherenceTransaction $xaction) {
if (!$this->isUpToDate()) {
$this->setParticipationStatus(ConpherenceParticipationStatus::UP_TO_DATE);
$this->setBehindTransactionPHID($xaction->getPHID());
$this->save();
}
return $this;

View file

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

View file

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

View file

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

View file

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

View file

@ -28,6 +28,12 @@ final class PhabricatorMetaMTAReceiveController
array(
'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->processReceivedMail();

View file

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

View file

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

View file

@ -804,7 +804,7 @@ final class PhabricatorMetaMTAMail extends PhabricatorMetaMTADAO {
return array();
}
$phids = array_combine($phids, $phids);
$phids = array_fuse($phids);
// 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)
? 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;
$receiver_name = null;
@ -276,10 +276,7 @@ final class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
$expect_hash = self::computeMailHash($receiver->getMailKey(), $check_phid);
// See note at computeOldMailHash().
$old_hash = self::computeOldMailHash($receiver->getMailKey(), $check_phid);
if ($expect_hash != $hash && $old_hash != $hash) {
if ($expect_hash != $hash) {
return $this->setMessage("Invalid mail hash!")->save();
}
@ -292,6 +289,9 @@ final class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
} else if ($receiver instanceof PhabricatorRepositoryCommit) {
$handler = PhabricatorAuditCommentEditor::newReplyHandlerForCommit(
$receiver);
} else if ($receiver instanceof ConpherenceThread) {
$handler = id(new ConpherenceReplyHandler())
->setMailReceiver($receiver);
}
$handler->setActor($user);
@ -334,6 +334,9 @@ final class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
case 'C':
$class_obj = new PhabricatorRepositoryCommit();
break;
case 'E':
$class_obj = new ConpherenceThread();
break;
default:
return null;
}
@ -348,20 +351,6 @@ final class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
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
* necessary, since sometimes it will have formatting like

View file

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

View file

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

View file

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

View file

@ -10,6 +10,9 @@ final class PholioMockQuery
private $phids;
private $authorPHIDs;
private $needCoverFiles;
private $needImages;
public function withIDs(array $ids) {
$this->ids = $ids;
return $this;
@ -37,7 +40,17 @@ final class PholioMockQuery
$this->buildOrderClause($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) {
@ -69,4 +82,49 @@ final class PholioMockQuery
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 $sequence;
private $file;
/* -( PhabricatorMarkupInterface )----------------------------------------- */
@ -39,4 +40,16 @@ final class PholioImage extends PholioDAO
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 $mailKey;
private $images;
private $coverFile;
public function getConfiguration() {
return array(
self::CONFIG_AUX_PHID => true,
@ -37,6 +40,31 @@ final class PholioMock extends PholioDAO
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 )-------------------- */

View file

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

View file

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

View file

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

View file

@ -154,19 +154,9 @@ final class PhrictionEditController
->setErrors($errors);
}
$delete_button = null;
if ($document->getID()) {
$panel_header = 'Edit Phriction Document';
$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 {
$panel_header = 'Create New Phriction Document';
$submit_button = 'Create Document';
@ -240,10 +230,6 @@ final class PhrictionEditController
->setHeader($panel_header)
->appendChild($form);
if ($delete_button) {
$panel->addButton($delete_button);
}
$preview_panel =
'<div class="aphront-panel-preview aphront-panel-preview-wide">
<div class="phriction-document-preview-header">

View file

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

View file

@ -15,6 +15,7 @@ abstract class PhabricatorApplicationTransactionEditor
private $isNewObject;
private $mentionedPHIDs;
private $continueOnNoEffect;
private $parentMessageID;
private $isPreview;
@ -40,6 +41,18 @@ abstract class PhabricatorApplicationTransactionEditor
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() {
return $this->isNewObject;
}
@ -509,7 +522,7 @@ abstract class PhabricatorApplicationTransactionEditor
protected function getPHIDTransactionNewValue(
PhabricatorApplicationTransaction $xaction) {
$old = array_combine($xaction->getOldValue(), $xaction->getOldValue());
$old = array_fuse($xaction->getOldValue());
$new = $xaction->getNewValue();
$new_add = idx($new, '+', array());
@ -518,7 +531,7 @@ abstract class PhabricatorApplicationTransactionEditor
unset($new['-']);
$new_set = idx($new, '=', null);
if ($new_set !== null) {
$new_set = array_combine($new_set, $new_set);
$new_set = array_fuse($new_set);
}
unset($new['=']);
@ -669,8 +682,9 @@ abstract class PhabricatorApplicationTransactionEditor
->setIsBulk(true)
->setBody($body->render());
// TODO
// ->setParentMessageID(...)
if ($this->getParentMessageID()) {
$template->setParentMessageID($this->getParentMessageID());
}
$mails = $this
->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.
# Edit `src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php` and
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
(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
run a script:
# Shell
export PHABRICATOR_ENV=custom/exampleconfig
```
# Shell
export PHABRICATOR_ENV=custom/exampleconfig
# Apache
SetEnv PHABRICATOR_ENV custom/exampleconfig
# Apache
SetEnv PHABRICATOR_ENV custom/exampleconfig
# nginx
fastcgi_param PHABRICATOR_ENV "custom/exampleconfig";
# nginx
fastcgi_param PHABRICATOR_ENV "custom/exampleconfig";
# lighttpd
setenv.add-environment = (
"PHABRICATOR_ENV" => "custom/exampleconfig",
)
# lighttpd
setenv.add-environment = (
"PHABRICATOR_ENV" => "custom/exampleconfig",
)
```
After creating and selecting a configuration file, restart your webserver. Any
configuration you set should take effect immediately, and your file should be

View file

@ -87,16 +87,6 @@ final class CeleritySpriteGenerator {
$sprites = 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(
'x' => 14,
'y' => 14,
@ -135,6 +125,25 @@ final class CeleritySpriteGenerator {
'y' => 25,
'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(
@ -183,7 +192,7 @@ final class CeleritySpriteGenerator {
// 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
// have the same specificity but appear later.
$gradients = array_combine($gradients, $gradients);
$gradients = array_fuse($gradients);
$gradients = array_select_keys(
$gradients,
array(

View file

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

View file

@ -55,10 +55,20 @@ final class PhabricatorRemarkupRuleEmbedFile
case 'full':
$attrs['src'] = $file->getBestURI();
$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;
case 'thumb':
default:
$attrs['src'] = $file->getPreview220URI();
$attrs['width'] = '220';
$options['image_class'] = 'phabricator-remarkup-embed-image';
break;
}

View file

@ -29,10 +29,20 @@ final class PhabricatorRemarkupRuleImageMacro
$phid = $this->images[$matches[1]];
$file = id(new PhabricatorFile())->loadOneWhere('phid = %s', $phid);
$style = null;
$src_uri = null;
if ($file) {
$src_uri = $file->getBestURI();
} else {
$src_uri = null;
$file_data = $file->getMetadata();
$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(
@ -41,6 +51,7 @@ final class PhabricatorRemarkupRuleImageMacro
'src' => $src_uri,
'alt' => $matches[1],
'title' => $matches[1],
'style' => $style,
));
return $this->getEngine()->storeText($img);
} else {

View file

@ -1093,6 +1093,10 @@ final class PhabricatorBuiltinPatchList extends PhabricatorSQLPatchList {
'type' => '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 $severity;
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) {
$this->title = $title;
@ -32,6 +41,15 @@ final class AphrontErrorView extends AphrontView {
return $this;
}
private function getBaseClass() {
if ($this->getInsideDialogue()) {
$class = 'aphront-error-view-dialogue';
} else {
$class = 'aphront-error-view';
}
return $class;
}
final public function render() {
require_celerity_resource('aphront-error-view-css');
@ -69,15 +87,16 @@ final class AphrontErrorView extends AphrontView {
$this->severity = nonempty($this->severity, self::SEVERITY_ERROR);
$more_classes = array();
$more_classes[] = 'aphront-error-severity-'.$this->severity;
$more_classes = implode(' ', $more_classes);
$classes = array();
$classes[] = $this->getBaseClass();
$classes[] = 'aphront-error-severity-'.$this->severity;
$classes = implode(' ', $classes);
return phutil_render_tag(
'div',
array(
'id' => $this->id,
'class' => 'aphront-error-view '.$more_classes,
'class' => $classes,
),
array(
$title,

View file

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

View file

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

View file

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

View file

@ -292,6 +292,59 @@ final class PhabricatorMainMenuView extends AphrontView {
require_celerity_resource('phabricator-notification-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();
$dropdown_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) {
$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) {

View file

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

View file

@ -41,8 +41,6 @@
.phabricator-main-menu-logo {
display: inline-block;
position: relative;
height: 44px;
width: 139px;
margin-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 {
position: absolute;
left: 60px;
right: 60px;
top: 10px;
height: 34px;
text-align: center;
margin-left: 60px;
}
.phabricator-main-menu-alert-bubble {
.phabricator-main-menu-alerts {
display: inline-block;
position: relative;
width: 26px;
height: 26px;
margin-bottom: 9px;
border-radius: 15px;
background: rgba(0,0,0,.2);
height: 20px;
padding: 3px 10px;
margin-top: 9px;
}
.phabricator-main-menu-alert-bubble.alert-unread {
width: 46px;
}
.phabricator-main-menu-alert-icon {
position: absolute;
.phabricator-main-menu-alert-icon,
.phabricator-main-menu-message-icon {
width: 14px;
height: 14px;
top: 5px;
left: 6px;
display: block;
float: left;
margin: 2px 0 0 0;
}
.phabricator-main-menu-alert-count {
position: absolute;
.alert-notifications .phabricator-main-menu-message-icon {
margin: 3px 0 0 8px;
}
.phabricator-main-menu-alert-count,
.phabricator-main-menu-message-count {
font-weight: bold;
line-height: 22px;
top: 1px;
right: 8px;
left: 20px;
line-height: 20px;
color: #ffffff;
text-align: center;
display: none;
float: left;
margin-left: 3px;
}
.phabricator-main-menu-alert-item {
width: 26px;
height: 26px;
margin: 9px;
display: block;
}
.alert-unread .phabricator-main-menu-alert-count {
.alert-unread .phabricator-main-menu-alert-count,
.message-unread .phabricator-main-menu-message-count {
display: block;
}

View file

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

View file

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

View file

@ -3,9 +3,12 @@
*/
.no-conpherences-menu-item {
color: #ffffff;
color: #a1a5a9;
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,

View file

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

View file

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

View file

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

View file

@ -31,7 +31,7 @@
}
.phabricator-source-code-summary {
margin-bottom: 4px;
padding-bottom: 8px;
}
/* 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;
}
.app-countdown-light-large {
.app-conpherence-light-large {
background-position: -116px -29px;
}
.app-countdown-dark-large {
.app-conpherence-dark-large {
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;
}
.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;
}
.app-daemon-light-large {
.app-countdown-light-large {
background-position: -232px -29px;
}
.app-daemon-dark-large {
.app-countdown-dark-large {
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;
}
.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;
}
.app-differential-light-large {
.app-daemon-light-large {
background-position: 0px -58px;
}
.app-differential-dark-large {
.app-daemon-dark-large {
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;
}
.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;
}
.app-diffusion-light-large {
.app-differential-light-large {
background-position: -116px -58px;
}
.app-diffusion-dark-large {
.app-differential-dark-large {
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;
}
.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;
}
.app-diviner-light-large {
.app-diffusion-light-large {
background-position: -232px -58px;
}
.app-diviner-dark-large {
.app-diffusion-dark-large {
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;
}
.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;
}
.app-drydock-light-large {
.app-diviner-light-large {
background-position: 0px -87px;
}
.app-drydock-dark-large {
.app-diviner-dark-large {
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;
}
.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;
}
.app-fact-light-large {
.app-drydock-light-large {
background-position: -116px -87px;
}
.app-fact-dark-large {
.app-drydock-dark-large {
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;
}
.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;
}
.app-feed-light-large {
.app-fact-light-large {
background-position: -232px -87px;
}
.app-feed-dark-large {
.app-fact-dark-large {
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;
}
.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;
}
.app-files-light-large {
.app-feed-light-large {
background-position: 0px -116px;
}
.app-files-dark-large {
.app-feed-dark-large {
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;
}
.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;
}
.app-flags-light-large {
.app-files-light-large {
background-position: -116px -116px;
}
.app-flags-dark-large {
.app-files-dark-large {
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;
}
.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;
}
.app-help-light-large {
.app-flags-light-large {
background-position: -232px -116px;
}
.app-help-dark-large {
.app-flags-dark-large {
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;
}
.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;
}
.app-herald-light-large {
.app-help-light-large {
background-position: 0px -145px;
}
.app-herald-dark-large {
.app-help-dark-large {
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;
}
.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;
}
.app-home-light-large {
.app-herald-light-large {
background-position: -116px -145px;
}
.app-home-dark-large {
.app-herald-dark-large {
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;
}
.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;
}
.app-logo-light-large {
.app-home-light-large {
background-position: -232px -145px;
}
.app-logo-dark-large {
.app-home-dark-large {
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;
}
.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;
}
.app-macro-light-large {
.app-logo-light-large {
background-position: 0px -174px;
}
.app-macro-dark-large {
.app-logo-dark-large {
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;
}
.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;
}
.app-mail-light-large {
.app-macro-light-large {
background-position: -116px -174px;
}
.app-mail-dark-large {
.app-macro-dark-large {
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;
}
.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;
}
.app-maniphest-light-large {
.app-mail-light-large {
background-position: -232px -174px;
}
.app-maniphest-dark-large {
.app-mail-dark-large {
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;
}
.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;
}
.app-metamta-light-large {
.app-maniphest-light-large {
background-position: 0px -203px;
}
.app-metamta-dark-large {
.app-maniphest-dark-large {
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;
}
.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;
}
.app-owners-light-large {
.app-metamta-light-large {
background-position: -116px -203px;
}
.app-owners-dark-large {
.app-metamta-dark-large {
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;
}
.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;
}
.app-paste-light-large {
.app-owners-light-large {
background-position: -232px -203px;
}
.app-paste-dark-large {
.app-owners-dark-large {
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;
}
.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;
}
.app-people-light-large {
.app-paste-light-large {
background-position: 0px -232px;
}
.app-people-dark-large {
.app-paste-dark-large {
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;
}
.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;
}
.app-phame-light-large {
.app-people-light-large {
background-position: -116px -232px;
}
.app-phame-dark-large {
.app-people-dark-large {
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;
}
.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;
}
.app-phid-light-large {
.app-phame-light-large {
background-position: -232px -232px;
}
.app-phid-dark-large {
.app-phame-dark-large {
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;
}
.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;
}
.app-pholio-light-large {
.app-phid-light-large {
background-position: 0px -261px;
}
.app-pholio-dark-large {
.app-phid-dark-large {
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;
}
.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;
}
.app-phpast-light-large {
.app-pholio-light-large {
background-position: -116px -261px;
}
.app-phpast-dark-large {
.app-pholio-dark-large {
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;
}
.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;
}
.app-phriction-light-large {
.app-phpast-light-large {
background-position: -232px -261px;
}
.app-phriction-dark-large {
.app-phpast-dark-large {
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;
}
.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;
}
.app-ponder-light-large {
.app-phriction-light-large {
background-position: 0px -290px;
}
.app-ponder-dark-large {
.app-phriction-dark-large {
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;
}
.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;
}
.app-power-light-large {
.app-ponder-light-large {
background-position: -116px -290px;
}
.app-power-dark-large {
.app-ponder-dark-large {
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;
}
.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;
}
.app-projects-light-large {
.app-power-light-large {
background-position: -232px -290px;
}
.app-projects-dark-large {
.app-power-dark-large {
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;
}
.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;
}
.app-repositories-light-large {
.app-projects-light-large {
background-position: 0px -319px;
}
.app-repositories-dark-large {
.app-projects-dark-large {
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;
}
.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;
}
.app-settings-light-large {
.app-repositories-light-large {
background-position: -116px -319px;
}
.app-settings-dark-large {
.app-repositories-dark-large {
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;
}
.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;
}
.app-setup-light-large {
.app-settings-light-large {
background-position: -232px -319px;
}
.app-setup-dark-large {
.app-settings-dark-large {
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;
}
.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;
}
.app-slowvote-light-large {
.app-setup-light-large {
background-position: 0px -348px;
}
.app-slowvote-dark-large {
.app-setup-dark-large {
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;
}
.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;
}
.app-uiexamples-light-large {
.app-slowvote-light-large {
background-position: -116px -348px;
}
.app-uiexamples-dark-large {
.app-slowvote-dark-large {
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;
}
.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;
}
.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;
}
.app-countdown-dark {
.app-conpherence-dark {
background-position: -60px 0px;
}
.app-daemon-dark {
.app-countdown-dark {
background-position: -75px 0px;
}
.app-differential-dark {
.app-daemon-dark {
background-position: 0px -15px;
}
.app-diffusion-dark {
.app-differential-dark {
background-position: -15px -15px;
}
.app-diviner-dark {
.app-diffusion-dark {
background-position: -30px -15px;
}
.app-drydock-dark {
.app-diviner-dark {
background-position: -45px -15px;
}
.app-fact-dark {
.app-drydock-dark {
background-position: -60px -15px;
}
.app-feed-dark {
.app-fact-dark {
background-position: -75px -15px;
}
.app-files-dark {
.app-feed-dark {
background-position: 0px -30px;
}
.app-flags-dark {
.app-files-dark {
background-position: -15px -30px;
}
.app-help-dark {
.app-flags-dark {
background-position: -30px -30px;
}
.app-herald-dark {
.app-help-dark {
background-position: -45px -30px;
}
.app-home-dark {
.app-herald-dark {
background-position: -60px -30px;
}
.app-logo-dark {
.app-home-dark {
background-position: -75px -30px;
}
.app-macro-dark {
.app-logo-dark {
background-position: 0px -45px;
}
.app-mail-dark {
.app-macro-dark {
background-position: -15px -45px;
}
.app-maniphest-dark {
.app-mail-dark {
background-position: -30px -45px;
}
.app-metamta-dark {
.app-maniphest-dark {
background-position: -45px -45px;
}
.app-owners-dark {
.app-metamta-dark {
background-position: -60px -45px;
}
.app-paste-dark {
.app-owners-dark {
background-position: -75px -45px;
}
.app-people-dark {
.app-paste-dark {
background-position: 0px -60px;
}
.app-phame-dark {
.app-people-dark {
background-position: -15px -60px;
}
.app-phid-dark {
.app-phame-dark {
background-position: -30px -60px;
}
.app-pholio-dark {
.app-phid-dark {
background-position: -45px -60px;
}
.app-phpast-dark {
.app-pholio-dark {
background-position: -60px -60px;
}
.app-phriction-dark {
.app-phpast-dark {
background-position: -75px -60px;
}
.app-ponder-dark {
.app-phriction-dark {
background-position: 0px -75px;
}
.app-power-dark {
.app-ponder-dark {
background-position: -15px -75px;
}
.app-projects-dark {
.app-power-dark {
background-position: -30px -75px;
}
.app-repositories-dark {
.app-projects-dark {
background-position: -45px -75px;
}
.app-settings-dark {
.app-repositories-dark {
background-position: -60px -75px;
}
.app-setup-dark {
.app-settings-dark {
background-position: -75px -75px;
}
.app-slowvote-dark {
.app-setup-dark {
background-position: 0px -90px;
}
.app-uiexamples-dark {
.app-slowvote-dark {
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) {
.sprite-menu {
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 {
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 {
background-position: -27px -68px;
background-position: -30px 0px;
}
.phabricator-crumb-divider {
background-position: 0px -95px;
background-position: 0px -56px;
}
.menu-icon-eye {
background-position: -47px -41px;
background-position: -10px -56px;
}
.menu-icon-app {
background-position: -42px -68px;
background-position: -35px -56px;
}
.phabricator-main-menu-logo-image {
background-position: 0px -30px;
}
.alert-notifications .phabricator-main-menu-message-icon {
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