diff --git a/resources/sprite/apps_blue_2x/conpherence.png b/resources/sprite/apps_blue_2x/conpherence.png new file mode 100644 index 0000000000..09150623ed Binary files /dev/null and b/resources/sprite/apps_blue_2x/conpherence.png differ diff --git a/resources/sprite/apps_blue_4x/conpherence.png b/resources/sprite/apps_blue_4x/conpherence.png new file mode 100644 index 0000000000..6b39d32ac4 Binary files /dev/null and b/resources/sprite/apps_blue_4x/conpherence.png differ diff --git a/resources/sprite/apps_dark_1x/conpherence.png b/resources/sprite/apps_dark_1x/conpherence.png new file mode 100644 index 0000000000..6819b2b261 Binary files /dev/null and b/resources/sprite/apps_dark_1x/conpherence.png differ diff --git a/resources/sprite/apps_dark_2x/conpherence.png b/resources/sprite/apps_dark_2x/conpherence.png new file mode 100644 index 0000000000..2397e6378f Binary files /dev/null and b/resources/sprite/apps_dark_2x/conpherence.png differ diff --git a/resources/sprite/apps_dark_4x/conpherence.png b/resources/sprite/apps_dark_4x/conpherence.png new file mode 100644 index 0000000000..80e1321d6c Binary files /dev/null and b/resources/sprite/apps_dark_4x/conpherence.png differ diff --git a/resources/sprite/apps_glow_2x/conpherence.png b/resources/sprite/apps_glow_2x/conpherence.png new file mode 100644 index 0000000000..8d650d4822 Binary files /dev/null and b/resources/sprite/apps_glow_2x/conpherence.png differ diff --git a/resources/sprite/apps_glow_4x/conpherence.png b/resources/sprite/apps_glow_4x/conpherence.png new file mode 100644 index 0000000000..376ef3141b Binary files /dev/null and b/resources/sprite/apps_glow_4x/conpherence.png differ diff --git a/resources/sprite/apps_lb_2x/conpherence.png b/resources/sprite/apps_lb_2x/conpherence.png new file mode 100644 index 0000000000..4f4ace2658 Binary files /dev/null and b/resources/sprite/apps_lb_2x/conpherence.png differ diff --git a/resources/sprite/apps_lb_4x/conpherence.png b/resources/sprite/apps_lb_4x/conpherence.png new file mode 100644 index 0000000000..a3cc9ef7b9 Binary files /dev/null and b/resources/sprite/apps_lb_4x/conpherence.png differ diff --git a/resources/sprite/manifest/apps-large.json b/resources/sprite/manifest/apps-large.json index f6ecda2aff..d6ee12c218 100644 --- a/resources/sprite/manifest/apps-large.json +++ b/resources/sprite/manifest/apps-large.json @@ -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" : [ diff --git a/resources/sprite/manifest/apps.json b/resources/sprite/manifest/apps.json index 5d8cb21cba..eb91d4e902 100644 --- a/resources/sprite/manifest/apps.json +++ b/resources/sprite/manifest/apps.json @@ -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" : [ diff --git a/resources/sprite/manifest/gradient.json b/resources/sprite/manifest/gradient.json index 484ab83f2b..2cb5b6e879 100644 --- a/resources/sprite/manifest/gradient.json +++ b/resources/sprite/manifest/gradient.json @@ -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" : [ diff --git a/resources/sprite/manifest/icon.json b/resources/sprite/manifest/icon.json index 6352e4ada4..184f84eb34 100644 --- a/resources/sprite/manifest/icon.json +++ b/resources/sprite/manifest/icon.json @@ -4,1007 +4,1007 @@ "action-arrow_left" : { "name" : "action-arrow_left", "rule" : ".action-arrow_left", - "hash" : "439cd6051e6aab63b62d1e47f00ad4a0" + "hash" : "18a72fcb866d409a6273883cc56b4862" }, "action-arrow_left-grey" : { "name" : "action-arrow_left-grey", "rule" : ".action-arrow_left-grey", - "hash" : "a3d0d34ef06a95685bf7a3e05eb97045" + "hash" : "200067f0f3af28260f95632eb17c373a" }, "action-arrow_left-white" : { "name" : "action-arrow_left-white", "rule" : ".action-arrow_left-white, .device-desktop .phabricator-action-view:hover .action-arrow_left", - "hash" : "e113bc929cedac55146edcf6e22f2fe0" + "hash" : "f21ee5fc3b0ad93d1ca18c71e6a62623" }, "action-arrow_right" : { "name" : "action-arrow_right", "rule" : ".action-arrow_right", - "hash" : "06b693491c0594d4e7ff537dbd725a98" + "hash" : "64fb031691e8711ec2922644831a4b05" }, "action-arrow_right-grey" : { "name" : "action-arrow_right-grey", "rule" : ".action-arrow_right-grey", - "hash" : "894f051068f9e206d96576ca6d14fd4f" + "hash" : "7d3a0c9e65b9917ccc5acf3ec1ccad2e" }, "action-arrow_right-white" : { "name" : "action-arrow_right-white", "rule" : ".action-arrow_right-white, .device-desktop .phabricator-action-view:hover .action-arrow_right", - "hash" : "aebf657073a1a85eeb0887cf32db8f08" + "hash" : "b16e8688f68d9f225aae11fa2de98f41" }, "action-attach" : { "name" : "action-attach", "rule" : ".action-attach", - "hash" : "a062d26bbe37abd305998545885fb1c0" + "hash" : "4aeca7c85a2c384c25c0a5d27aa2a41f" }, "action-attach-grey" : { "name" : "action-attach-grey", "rule" : ".action-attach-grey", - "hash" : "09eae1092a9f48ec48b8970be67351b7" + "hash" : "6d528ecda66e9919452cbca77f94d034" }, "action-attach-white" : { "name" : "action-attach-white", "rule" : ".action-attach-white, .device-desktop .phabricator-action-view:hover .action-attach", - "hash" : "1f69f442d87f6e27980229dbedfbf728" + "hash" : "75b0dcbb6f6f297b647266165bd0ac77" }, "action-blame" : { "name" : "action-blame", "rule" : ".action-blame", - "hash" : "81fbaa234aed3a379c403aa0c7f3c7eb" + "hash" : "467a17a711c501b51318b2661d38458c" }, "action-blame-grey" : { "name" : "action-blame-grey", "rule" : ".action-blame-grey", - "hash" : "4b383ffb76ee537ce9b6fadb8d2ee160" + "hash" : "b5def77f42ef0fc2eb8141f54a6c730b" }, "action-blame-white" : { "name" : "action-blame-white", "rule" : ".action-blame-white, .device-desktop .phabricator-action-view:hover .action-blame", - "hash" : "e975ef46298c46530659e12fbd012292" + "hash" : "ef8bcbb695d0af2ef18c7be1fe308641" }, "action-check" : { "name" : "action-check", "rule" : ".action-check", - "hash" : "c8b9c56214fd39a4ba99e07e1fa72e22" + "hash" : "0db35013c33b71355dc33912073d0c28" }, "action-check-grey" : { "name" : "action-check-grey", "rule" : ".action-check-grey", - "hash" : "2375808574c858425660eac59d80e29a" + "hash" : "381b82f1a08592cf1c3f23b3d12c0456" }, "action-check-white" : { "name" : "action-check-white", "rule" : ".action-check-white, .device-desktop .phabricator-action-view:hover .action-check", - "hash" : "803fbc2117621cf946af270cf5bed06b" + "hash" : "be412e3b2d3574bb04721b2f8646b67e" }, "action-comment" : { "name" : "action-comment", "rule" : ".action-comment", - "hash" : "bb9067094e0cb805dc597eb0ebdd94f9" + "hash" : "5cbd81c2469dc95048abf073d977f7e2" }, "action-comment-grey" : { "name" : "action-comment-grey", "rule" : ".action-comment-grey", - "hash" : "8d71bd6c89116ca02aef8ce830514022" + "hash" : "be352ed442c144230f65c0a4c4d56a64" }, "action-comment-white" : { "name" : "action-comment-white", "rule" : ".action-comment-white, .device-desktop .phabricator-action-view:hover .action-comment", - "hash" : "48bfa57a5b06edcf08329b47fc546071" + "hash" : "5f428fb791a23e4a8e2c15f66ff23485" }, "action-computer" : { "name" : "action-computer", "rule" : ".action-computer", - "hash" : "4e25c6822b815a2c29478082012d1237" + "hash" : "ab8e3d101f3f1a8b434d449ef1b9abd3" }, "action-computer-grey" : { "name" : "action-computer-grey", "rule" : ".action-computer-grey", - "hash" : "d2972bca3937fc49e859019c0fd6647f" + "hash" : "6ad695eb4df2f2db3268513307439280" }, "action-computer-white" : { "name" : "action-computer-white", "rule" : ".action-computer-white, .device-desktop .phabricator-action-view:hover .action-computer", - "hash" : "154afcf0ee1539c0d5a273c971a8c6e1" + "hash" : "773aaa54b567fb9de636e3d4be417b3a" }, "action-create" : { "name" : "action-create", "rule" : ".action-create", - "hash" : "5901de6f71af459888d1b277d0726916" + "hash" : "b6f1daca7830bd72f390e7d64630c366" }, "action-create-grey" : { "name" : "action-create-grey", "rule" : ".action-create-grey", - "hash" : "3efad05cb3ac57da962e2bc1c5ff2308" + "hash" : "fa830394fbf05528cd3c655ab0481d0a" }, "action-create-white" : { "name" : "action-create-white", "rule" : ".action-create-white, .device-desktop .phabricator-action-view:hover .action-create", - "hash" : "8e06e0eb1031b008ca4a32eba9934289" + "hash" : "addfa0ab79944ca318ffc57e568bae9c" }, "action-delete" : { "name" : "action-delete", "rule" : ".action-delete", - "hash" : "41bbd0d0d4cb69b2b5423367603187e3" + "hash" : "174c6a08a8a7131cef810e006b5a71e0" }, "action-delete-grey" : { "name" : "action-delete-grey", "rule" : ".action-delete-grey", - "hash" : "244047621dbeefd392c4c7f3059a9e6a" + "hash" : "e541601ce768fb2fa1a941a95ac3a7cf" }, "action-delete-white" : { "name" : "action-delete-white", "rule" : ".action-delete-white, .device-desktop .phabricator-action-view:hover .action-delete", - "hash" : "deb1e03b1aa95a07fa16ee82f9605914" + "hash" : "496e780e0470bce85116baaa3aebdab2" }, "action-disable" : { "name" : "action-disable", "rule" : ".action-disable", - "hash" : "e0db051423597acbf4611467227989f3" + "hash" : "0a0b314012bdaaa307ac70d2581c20b5" }, "action-disable-grey" : { "name" : "action-disable-grey", "rule" : ".action-disable-grey", - "hash" : "301c0440f503fba4c3e1d0adc9f8dad6" + "hash" : "c7741a4579c4e7a1c94dfd029b3e3bb0" }, "action-disable-white" : { "name" : "action-disable-white", "rule" : ".action-disable-white, .device-desktop .phabricator-action-view:hover .action-disable", - "hash" : "cb5ee0cda04760e0568e8245a807754f" + "hash" : "3f456c6f15d4aaccfe85ae73e856ca1c" }, "action-dislike" : { "name" : "action-dislike", "rule" : ".action-dislike", - "hash" : "fbacfb7af00bdbd738039643cdf5bc51" + "hash" : "846820ffc823a4899dde8f8c14203df1" }, "action-dislike-grey" : { "name" : "action-dislike-grey", "rule" : ".action-dislike-grey", - "hash" : "73fcb492401b2b18785857f843e577f0" + "hash" : "1e994ac16acba86dae2f9e94ff0df2c2" }, "action-dislike-white" : { "name" : "action-dislike-white", "rule" : ".action-dislike-white, .device-desktop .phabricator-action-view:hover .action-dislike", - "hash" : "6ea8a6df9208f9a790702d801589be7e" + "hash" : "55d374c8466370c8c5805b8135c3f416" }, "action-download" : { "name" : "action-download", "rule" : ".action-download", - "hash" : "a3edf236a8d30a71b46f5126ac32bd6e" + "hash" : "b4517953cb610ad5af5537ac5526a168" }, "action-download-alt" : { "name" : "action-download-alt", "rule" : ".action-download-alt", - "hash" : "eb4d4a8d850b7404332bd4d36067b00a" + "hash" : "7ea7b578f8da62d7aaf82b1e80f0fa96" }, "action-download-alt-grey" : { "name" : "action-download-alt-grey", "rule" : ".action-download-alt-grey", - "hash" : "e19cba41b19ed423ba72d5ec1447cdca" + "hash" : "6b06b8e24433f7b4690a0bda53441399" }, "action-download-alt-white" : { "name" : "action-download-alt-white", "rule" : ".action-download-alt-white, .device-desktop .phabricator-action-view:hover .action-download-alt", - "hash" : "40bd588c9478a92ba592eadb0cd2255d" + "hash" : "f458b2b153b9fd655bdea9c2c73ed569" }, "action-download-grey" : { "name" : "action-download-grey", "rule" : ".action-download-grey", - "hash" : "35df8e7bea8392edfad0e41ffba56204" + "hash" : "d2502bf6e4c56e8c24f564285a3d0f4e" }, "action-download-white" : { "name" : "action-download-white", "rule" : ".action-download-white, .device-desktop .phabricator-action-view:hover .action-download", - "hash" : "88650982d63c7fe1b0df57f19b73764e" + "hash" : "90ca79835936319d143ea5c3b745744e" }, "action-edit" : { "name" : "action-edit", "rule" : ".action-edit", - "hash" : "37b7c707bb18feb66fbad36cd99f82be" + "hash" : "539f11d58239683c73b275335e1cd5ee" }, "action-edit-grey" : { "name" : "action-edit-grey", "rule" : ".action-edit-grey", - "hash" : "a41905d50572da65d4c7e31c6bd5b9cb" + "hash" : "9ac07dfbc52997775aeaa4fafbf43d12" }, "action-edit-white" : { "name" : "action-edit-white", "rule" : ".action-edit-white, .device-desktop .phabricator-action-view:hover .action-edit", - "hash" : "31a23bb50808f363fb8f92ac1774348a" + "hash" : "cb83ff8b6f93bf367233960142abf744" }, "action-enable" : { "name" : "action-enable", "rule" : ".action-enable", - "hash" : "ac321d05767830df55141e143a412c59" + "hash" : "a0d81348f61019149090e89d2d126a8f" }, "action-enable-grey" : { "name" : "action-enable-grey", "rule" : ".action-enable-grey", - "hash" : "637dcb6c96460ffd8e7dc9bcce105665" + "hash" : "8d6bf1d0333b81cde5cbeb8646316863" }, "action-enable-white" : { "name" : "action-enable-white", "rule" : ".action-enable-white, .device-desktop .phabricator-action-view:hover .action-enable", - "hash" : "3856031f36cf1126c6b375419b872158" + "hash" : "6cbadeb75ede97f58a62b0bafbc7aef5" }, "action-file" : { "name" : "action-file", "rule" : ".action-file", - "hash" : "7ddd35db36264115fb7c0a219f561753" + "hash" : "95de3ed156d8e8008a464fee994a8b7a" }, "action-file-grey" : { "name" : "action-file-grey", "rule" : ".action-file-grey", - "hash" : "d1147f0cd62b48c8fca06cbe923c0330" + "hash" : "bd1b94b5ef4ea93570b5dd11f9b6fc2f" }, "action-file-white" : { "name" : "action-file-white", "rule" : ".action-file-white, .device-desktop .phabricator-action-view:hover .action-file", - "hash" : "bb5434e03f07ba3ab4db4a08c91a5a95" + "hash" : "330b3ff7217edaa7b348c1209eeb5301" }, "action-flag" : { "name" : "action-flag", "rule" : ".action-flag", - "hash" : "da0e4bc0ee0b7ca4f307e347a9fe6f85" + "hash" : "017bbfc781bfa2613ade68fd791d7b66" }, "action-flag-0" : { "name" : "action-flag-0", "rule" : ".action-flag-0", - "hash" : "e3c9d406418889ac7f219dc2e4e3695d" + "hash" : "63ae0ab21e802d2cf11c40cb239718a6" }, "action-flag-0-grey" : { "name" : "action-flag-0-grey", "rule" : ".action-flag-0-grey", - "hash" : "d48a88e9782cfc132799f8df5c828fee" + "hash" : "6a9bb10f146c2adbd5ffc8111ce959c8" }, "action-flag-0-white" : { "name" : "action-flag-0-white", "rule" : ".action-flag-0-white, .device-desktop .phabricator-action-view:hover .action-flag-0", - "hash" : "745431f4973ca195c418544375f56163" + "hash" : "f40d6750653f54ce6099c76294ab5b80" }, "action-flag-1" : { "name" : "action-flag-1", "rule" : ".action-flag-1", - "hash" : "76ec571366cba7f3440fdb1c4b9118be" + "hash" : "7f50971290dff274a11930faeeac076b" }, "action-flag-1-grey" : { "name" : "action-flag-1-grey", "rule" : ".action-flag-1-grey", - "hash" : "d5807977961d63b8c52754077a68b2e0" + "hash" : "eb6af245f22f94b81368ac24a5021cb0" }, "action-flag-1-white" : { "name" : "action-flag-1-white", "rule" : ".action-flag-1-white, .device-desktop .phabricator-action-view:hover .action-flag-1", - "hash" : "b8d0afbab58acf0a573dd28d3ad51de3" + "hash" : "c47bfa96d98672bfe5afa85a0cfbec89" }, "action-flag-2" : { "name" : "action-flag-2", "rule" : ".action-flag-2", - "hash" : "e6d3a4ecf63079d053adae81d45c4f0a" + "hash" : "63a979a0d2de57efdcf5fee2192957e1" }, "action-flag-2-grey" : { "name" : "action-flag-2-grey", "rule" : ".action-flag-2-grey", - "hash" : "516c5a8e041b65aea5ddbdb7542b3d12" + "hash" : "46d028b2ddbc26251b5fcc02ec87ca43" }, "action-flag-2-white" : { "name" : "action-flag-2-white", "rule" : ".action-flag-2-white, .device-desktop .phabricator-action-view:hover .action-flag-2", - "hash" : "7c013e587c0e7522952413749e62bd62" + "hash" : "45b1dda7b8c85546d40789ca83ed481c" }, "action-flag-3" : { "name" : "action-flag-3", "rule" : ".action-flag-3", - "hash" : "4bd5ac1c2c0ed4765000fb49811d2c68" + "hash" : "d95b847797e6ad0ae4e5719085530709" }, "action-flag-3-grey" : { "name" : "action-flag-3-grey", "rule" : ".action-flag-3-grey", - "hash" : "f471dcb2c59b7ce1ac83057e71cd3560" + "hash" : "fab7eca7e7a1e75a68a2f86a9ecb4dfd" }, "action-flag-3-white" : { "name" : "action-flag-3-white", "rule" : ".action-flag-3-white, .device-desktop .phabricator-action-view:hover .action-flag-3", - "hash" : "a8eaacbb09c261565ca05a2672b1fdd8" + "hash" : "42f994d618726c1294ac7206accdac0d" }, "action-flag-4" : { "name" : "action-flag-4", "rule" : ".action-flag-4", - "hash" : "f5e87f3bcd0617174961f25c51c7dcc7" + "hash" : "61d60e39d879436ffaa4bf3489c4be62" }, "action-flag-4-grey" : { "name" : "action-flag-4-grey", "rule" : ".action-flag-4-grey", - "hash" : "a2893da9d76f4765782064035313fb2f" + "hash" : "8dc44ff4d36f6e1e4522fc865923a4df" }, "action-flag-4-white" : { "name" : "action-flag-4-white", "rule" : ".action-flag-4-white, .device-desktop .phabricator-action-view:hover .action-flag-4", - "hash" : "5a1c34e6ccaf9f60e51867e593fe86fe" + "hash" : "e948ac8da0548c252ce32f4ff2503790" }, "action-flag-5" : { "name" : "action-flag-5", "rule" : ".action-flag-5", - "hash" : "1100ba1c1351fe594c66a7d68b4f55ce" + "hash" : "597c19fdaa99572b5d65d30d3cb81c13" }, "action-flag-5-grey" : { "name" : "action-flag-5-grey", "rule" : ".action-flag-5-grey", - "hash" : "ef2bb6c72aadb0945f9f56bf24c14174" + "hash" : "24bf02b161815f07e9bcd9e75ba141f6" }, "action-flag-5-white" : { "name" : "action-flag-5-white", "rule" : ".action-flag-5-white, .device-desktop .phabricator-action-view:hover .action-flag-5", - "hash" : "ab3f27db5a080c3aa094d6d50bece2a4" + "hash" : "55bcef156bbd099ada0c39aa796be663" }, "action-flag-6" : { "name" : "action-flag-6", "rule" : ".action-flag-6", - "hash" : "a37b3211517264f5a51c17c50d77a0df" + "hash" : "490fea784ff63de9edffb1d142db49e0" }, "action-flag-6-grey" : { "name" : "action-flag-6-grey", "rule" : ".action-flag-6-grey", - "hash" : "4dd3537f6f61a4f857149a5dea413652" + "hash" : "5b3c14db2a182eb31f1925829adac556" }, "action-flag-6-white" : { "name" : "action-flag-6-white", "rule" : ".action-flag-6-white, .device-desktop .phabricator-action-view:hover .action-flag-6", - "hash" : "49a663b600316d73c521687c69ef8bdd" + "hash" : "f251c82a144e354d241b977992aca356" }, "action-flag-7" : { "name" : "action-flag-7", "rule" : ".action-flag-7", - "hash" : "5f4d6d3df81afe0745b75f810fb4be33" + "hash" : "02c8e4bcca7b2dfd746e6414f3419130" }, "action-flag-7-grey" : { "name" : "action-flag-7-grey", "rule" : ".action-flag-7-grey", - "hash" : "dc17400b19fe344a664568e51bd4c2c1" + "hash" : "cf0b4c737ab286110e2e1e2f1619e7d1" }, "action-flag-7-white" : { "name" : "action-flag-7-white", "rule" : ".action-flag-7-white, .device-desktop .phabricator-action-view:hover .action-flag-7", - "hash" : "063e08f676e39c26b33c6cac8ae14e15" + "hash" : "bc1a5ec732b7d24e78c4dfd686347a6e" }, "action-flag-ghost" : { "name" : "action-flag-ghost", "rule" : ".action-flag-ghost", - "hash" : "3152fe67fc364d460d607e338237acf4" + "hash" : "45e3a9c7a6436fff77a26ac14fe8a2ff" }, "action-flag-ghost-grey" : { "name" : "action-flag-ghost-grey", "rule" : ".action-flag-ghost-grey", - "hash" : "56c962d3557fee90bcb6216ff9df2b84" + "hash" : "effe2cb0f7bf9d8498de00cb9d2219d5" }, "action-flag-ghost-white" : { "name" : "action-flag-ghost-white", "rule" : ".action-flag-ghost-white, .device-desktop .phabricator-action-view:hover .action-flag-ghost", - "hash" : "583261ed96dbe3452e3e6a0001aea6d8" + "hash" : "330a6db5d35105eb2a40926ac10bf050" }, "action-flag-grey" : { "name" : "action-flag-grey", "rule" : ".action-flag-grey", - "hash" : "2abe4ae06cc54bf6069bac446e5fa439" + "hash" : "19ff6ca97d5a9417711c125342bfd181" }, "action-flag-white" : { "name" : "action-flag-white", "rule" : ".action-flag-white, .device-desktop .phabricator-action-view:hover .action-flag", - "hash" : "3442002f986cb8f7e1f06183927945a3" + "hash" : "c75814a0ab1d5efd93eb04bc91ea1d70" }, "action-folder-open" : { "name" : "action-folder-open", "rule" : ".action-folder-open", - "hash" : "fa3478ecd57fd41a6a16107db86a15e9" + "hash" : "041a997bd0fe3dc0eab6974cab2f4909" }, "action-folder-open-grey" : { "name" : "action-folder-open-grey", "rule" : ".action-folder-open-grey", - "hash" : "dada2fb1cbcb8256f607eae1914219c1" + "hash" : "78861d4d04e344db11e235dfadfaa0b2" }, "action-folder-open-white" : { "name" : "action-folder-open-white", "rule" : ".action-folder-open-white, .device-desktop .phabricator-action-view:hover .action-folder-open", - "hash" : "af7843feb777d7eafc3904fe0a268ed3" + "hash" : "b6c96d025fbd7d9d2f6184ab2b5255c1" }, "action-fork" : { "name" : "action-fork", "rule" : ".action-fork", - "hash" : "15285571cef4f6251aad47c42e5f0f1c" + "hash" : "73872362aa5fa8a715bb2b282e8873a7" }, "action-fork-grey" : { "name" : "action-fork-grey", "rule" : ".action-fork-grey", - "hash" : "aa875e4018c152bed7b37c776d18660e" + "hash" : "80b616de5d415c74e2561cf85cd5563a" }, "action-fork-white" : { "name" : "action-fork-white", "rule" : ".action-fork-white, .device-desktop .phabricator-action-view:hover .action-fork", - "hash" : "a3a53c919c04ae550970ccb5477671d2" + "hash" : "ed9479c691af95386f88076a65d73b19" }, "action-herald" : { "name" : "action-herald", "rule" : ".action-herald", - "hash" : "4084564ec8592cb6c9bf840f8c7eea6a" + "hash" : "75eb507020fcb7dc6890022513648e85" }, "action-herald-grey" : { "name" : "action-herald-grey", "rule" : ".action-herald-grey", - "hash" : "bc9f0fef0b1f75ed4f20cc4359f706f5" + "hash" : "30b633461f095ac3f032eb02398ae67e" }, "action-herald-white" : { "name" : "action-herald-white", "rule" : ".action-herald-white, .device-desktop .phabricator-action-view:hover .action-herald", - "hash" : "7d773778fa6126ac05a4c6f9d85dd20d" + "hash" : "149fd50929e68d6bcf6310d9e4c316b6" }, "action-highlight" : { "name" : "action-highlight", "rule" : ".action-highlight", - "hash" : "25f8142b1c665f623f9eab935bf256ab" + "hash" : "4430cca9eab0cbd85d3ee1b5e1f29ae3" }, "action-highlight-grey" : { "name" : "action-highlight-grey", "rule" : ".action-highlight-grey", - "hash" : "0d4347b151224476548a0dc43f6d1ceb" + "hash" : "47fe828e1b61553326752209a8fba6cb" }, "action-highlight-white" : { "name" : "action-highlight-white", "rule" : ".action-highlight-white, .device-desktop .phabricator-action-view:hover .action-highlight", - "hash" : "d32f9b42dc24f41aa02c18ba5db5d65f" + "hash" : "09a52dfdf893ee63be162f0c180d31fe" }, "action-history" : { "name" : "action-history", "rule" : ".action-history", - "hash" : "69fbd6f3875ceef440a5fdd727162024" + "hash" : "6669ec72a77a09e3e8c8c5fe941810a9" }, "action-history-grey" : { "name" : "action-history-grey", "rule" : ".action-history-grey", - "hash" : "97ed21324d25b236212e33c9bfd4dc0a" + "hash" : "3146a0c0c8698ef95ad74515cc9971ad" }, "action-history-white" : { "name" : "action-history-white", "rule" : ".action-history-white, .device-desktop .phabricator-action-view:hover .action-history", - "hash" : "4ffae3b425eaf5a7aec9757bd9fb97c3" + "hash" : "07490563c7cf4e8194918c3700ca1b57" }, "action-image" : { "name" : "action-image", "rule" : ".action-image", - "hash" : "bfe9f9b16bf54a258c76cf314bb87152" + "hash" : "5f03cd1fa806db2861d93a0fba7deff7" }, "action-image-grey" : { "name" : "action-image-grey", "rule" : ".action-image-grey", - "hash" : "e11788cab503c91d3a39847165181cb8" + "hash" : "32e1008c29447da5fc4a263c1b56ce41" }, "action-image-white" : { "name" : "action-image-white", "rule" : ".action-image-white, .device-desktop .phabricator-action-view:hover .action-image", - "hash" : "de395492a2088e998f48cba698744b0f" + "hash" : "d48be030bf83013fcd3549460f197712" }, "action-like" : { "name" : "action-like", "rule" : ".action-like", - "hash" : "2afed6b1e26578bcbc23f8d1c72221ab" + "hash" : "89d7ac4a8642389bded3af9aa464b06b" }, "action-like-grey" : { "name" : "action-like-grey", "rule" : ".action-like-grey", - "hash" : "8b2baee6c58e57d61c71d48b7e52522b" + "hash" : "262bdae8449eae9ecfb58246a8457f64" }, "action-like-white" : { "name" : "action-like-white", "rule" : ".action-like-white, .device-desktop .phabricator-action-view:hover .action-like", - "hash" : "0b6dd7cb5820d65faefdc2e7a8d75acf" + "hash" : "773b180de4276644cad9688a1f0935ce" }, "action-link" : { "name" : "action-link", "rule" : ".action-link", - "hash" : "0bb7d22b7db2915c787f132bee42a71d" + "hash" : "bbaed885947840548f9b466fd97aef83" }, "action-link-grey" : { "name" : "action-link-grey", "rule" : ".action-link-grey", - "hash" : "0bfe4298307d9bd2e66a43b5d1ee6c00" + "hash" : "c3bd4b5b14e7ed7c522fd148022a9e7b" }, "action-link-white" : { "name" : "action-link-white", "rule" : ".action-link-white, .device-desktop .phabricator-action-view:hover .action-link", - "hash" : "4cc1d11240276baf1864b9209e28d794" + "hash" : "e846157dd9d0119d82b2777052acdb3d" }, "action-lint-info" : { "name" : "action-lint-info", "rule" : ".action-lint-info", - "hash" : "f3588606b991614019f2aba3e5d75867" + "hash" : "324e1d2d947862a69df78e68e4a36b1f" }, "action-lint-info-grey" : { "name" : "action-lint-info-grey", "rule" : ".action-lint-info-grey", - "hash" : "738e607d12f91a7a9bc8f9b2c13052b6" + "hash" : "76eadf42825e50f995b5d8d088ee591f" }, "action-lint-info-white" : { "name" : "action-lint-info-white", "rule" : ".action-lint-info-white, .device-desktop .phabricator-action-view:hover .action-lint-info", - "hash" : "04d9cd9ec75225136ce19ef447ebbd5a" + "hash" : "ef6d4bb883446171a1a1df66b13b2c66" }, "action-lint-ok" : { "name" : "action-lint-ok", "rule" : ".action-lint-ok", - "hash" : "d2dd1f379b71c38233c33c106867593d" + "hash" : "97b66fc1a5474f00bc1fdda6525820d5" }, "action-lint-ok-grey" : { "name" : "action-lint-ok-grey", "rule" : ".action-lint-ok-grey", - "hash" : "e7b4b0ff5593c77ecf8af929960656c1" + "hash" : "eefd06511a24992aef9e486b560c4062" }, "action-lint-ok-white" : { "name" : "action-lint-ok-white", "rule" : ".action-lint-ok-white, .device-desktop .phabricator-action-view:hover .action-lint-ok", - "hash" : "26661c20c9d68c0568e7f8e7b9a79370" + "hash" : "f2720295139147930fb78e962450075d" }, "action-lint-warning" : { "name" : "action-lint-warning", "rule" : ".action-lint-warning", - "hash" : "30f226154af0794c0e05f53129a7a8fc" + "hash" : "d0b1c5f84db953de088056db7fbe1eae" }, "action-lint-warning-grey" : { "name" : "action-lint-warning-grey", "rule" : ".action-lint-warning-grey", - "hash" : "fef17b967a78fba8c6a4f772fc8c7ab2" + "hash" : "f4f73032f5f2310d7731affba2318d5d" }, "action-lint-warning-white" : { "name" : "action-lint-warning-white", "rule" : ".action-lint-warning-white, .device-desktop .phabricator-action-view:hover .action-lint-warning", - "hash" : "acc7c971f83efb5298390bb0ebdbbdb1" + "hash" : "d540c0afe65862f5c32c934f1956ca36" }, "action-lock" : { "name" : "action-lock", "rule" : ".action-lock", - "hash" : "d79fe308c2bca2a15eb4f2b0784eaef6" + "hash" : "7ca88645707cf9cd69ace1e416c0f964" }, "action-lock-grey" : { "name" : "action-lock-grey", "rule" : ".action-lock-grey", - "hash" : "ffa7de98cd41e3db7f9ea284662de41e" + "hash" : "c95e9a3071dc3bc389c235c49a5c5388" }, "action-lock-white" : { "name" : "action-lock-white", "rule" : ".action-lock-white, .device-desktop .phabricator-action-view:hover .action-lock", - "hash" : "323f4e1dc1d38b173bbe290c27ec9bea" + "hash" : "e6f5edd8fdfadab84dd95e5582ac1db1" }, "action-love" : { "name" : "action-love", "rule" : ".action-love", - "hash" : "4b5271c2f7cbf2ae1d904a3cc5f79b09" + "hash" : "9f101bddc6deba2b128bdc7bb45d583a" }, "action-love-grey" : { "name" : "action-love-grey", "rule" : ".action-love-grey", - "hash" : "3b629d11a145bc0eb300d9ee8daaacc6" + "hash" : "615fa9c17fa8a9e0b27846f3c99fdd87" }, "action-love-white" : { "name" : "action-love-white", "rule" : ".action-love-white, .device-desktop .phabricator-action-view:hover .action-love", - "hash" : "25a8f8c240d2fcd12e8ce192c749c9cb" + "hash" : "5f92d9a4565e79b96c956f054ede993a" }, "action-merge" : { "name" : "action-merge", "rule" : ".action-merge", - "hash" : "d1465a199273ca5a7d1914b7827388aa" + "hash" : "0c7cb3934262b3374f5c94e36c826672" }, "action-merge-grey" : { "name" : "action-merge-grey", "rule" : ".action-merge-grey", - "hash" : "b04fa26d964413d9b2efe0354aa22f95" + "hash" : "e8c11bd0a92a273ba5f90fee8bd31fb6" }, "action-merge-white" : { "name" : "action-merge-white", "rule" : ".action-merge-white, .device-desktop .phabricator-action-view:hover .action-merge", - "hash" : "c89d5163d7e237cde54b833356311a1c" + "hash" : "433a26913a0db78eb707edf0dbbf0fdc" }, "action-message" : { "name" : "action-message", "rule" : ".action-message", - "hash" : "b965efb0e7bc88a5f944bfa0476eb652" + "hash" : "c14b8eb1f70855eb801c42c5f04ea5d0" }, "action-message-grey" : { "name" : "action-message-grey", "rule" : ".action-message-grey", - "hash" : "ac4c4a9265d0d4810164907222ff401c" + "hash" : "93574f7b8adadc01b036b2376e7b1eb1" }, "action-message-white" : { "name" : "action-message-white", "rule" : ".action-message-white, .device-desktop .phabricator-action-view:hover .action-message", - "hash" : "7ec19102800f71d08b3d08f31cbbaf02" + "hash" : "3fe1df81d1af648ac1e483e2a081ed62" }, "action-meta-mta" : { "name" : "action-meta-mta", "rule" : ".action-meta-mta", - "hash" : "afbb4a97071268b542634aea2eed9fdb" + "hash" : "3895ce9ea717cc0a1bcc2f93015a5c86" }, "action-meta-mta-grey" : { "name" : "action-meta-mta-grey", "rule" : ".action-meta-mta-grey", - "hash" : "bc939fa46edc09f3e8b31a06cfb18895" + "hash" : "873f04635a614bce012cfc82837b6be1" }, "action-meta-mta-white" : { "name" : "action-meta-mta-white", "rule" : ".action-meta-mta-white, .device-desktop .phabricator-action-view:hover .action-meta-mta", - "hash" : "e1f6ed22db628d691172d7589004ff8f" + "hash" : "8d1edd5f73363a7057474364850abc39" }, "action-move" : { "name" : "action-move", "rule" : ".action-move", - "hash" : "5ee19a8116be04fca2cdb2ca18848aaa" + "hash" : "fa5d4f6c263a4cad009990a3f00c1819" }, "action-move-grey" : { "name" : "action-move-grey", "rule" : ".action-move-grey", - "hash" : "9f856630044d1d87d689b8d381426391" + "hash" : "201db3f4614022b6e57c2168aa9f7298" }, "action-move-white" : { "name" : "action-move-white", "rule" : ".action-move-white, .device-desktop .phabricator-action-view:hover .action-move", - "hash" : "3f81eb8b52850b4910ecf4a8c7667ad5" + "hash" : "d7f6217f85f2cfa45d7e44bd06d3f438" }, "action-new" : { "name" : "action-new", "rule" : ".action-new", - "hash" : "dfbcbf59a5440d9a99b0c18e2010f58e" + "hash" : "62ce1bb9b7c8252f58a37c655b7ed377" }, "action-new-grey" : { "name" : "action-new-grey", "rule" : ".action-new-grey", - "hash" : "fc6c948a0019a8a63e1a36a0c21f60ef" + "hash" : "5d96082b216b783d6256ee3cc755dc87" }, "action-new-white" : { "name" : "action-new-white", "rule" : ".action-new-white, .device-desktop .phabricator-action-view:hover .action-new, .phabricator-application-launch-create:hover .phabricator-application-create-icon.action-new-grey", - "hash" : "99a86e78d0f9bd775e283484b2bba989" + "hash" : "782f8bc8dc883c0637910e5fbc3c6f9f" }, "action-none" : { "name" : "action-none", "rule" : ".action-none", - "hash" : "29ab47e45ff4d1f23786bf0c1fc20414" + "hash" : "5595f8625292cd95d1240ed429dc880c" }, "action-none-grey" : { "name" : "action-none-grey", "rule" : ".action-none-grey", - "hash" : "8d0dec138cc8bbd2da813c24a55ef8f5" + "hash" : "76d2d2e3fff56f21759d03dd5c17331c" }, "action-none-white" : { "name" : "action-none-white", "rule" : ".action-none-white, .device-desktop .phabricator-action-view:hover .action-none", - "hash" : "ee7b57ca9dcc4e87e09fbe2949ec1242" + "hash" : "69ce41011458cfbdabb1a9fb7537d087" }, "action-perflab" : { "name" : "action-perflab", "rule" : ".action-perflab", - "hash" : "233b376e3b9d43082a60ea54afa6bc18" + "hash" : "ec1acf5413f771b1f2782aa759074764" }, "action-perflab-grey" : { "name" : "action-perflab-grey", "rule" : ".action-perflab-grey", - "hash" : "fbd064b66bed85a725cbb4741d0e85b0" + "hash" : "2f7fa40824ccf254322e60e216f1d50e" }, "action-perflab-white" : { "name" : "action-perflab-white", "rule" : ".action-perflab-white, .device-desktop .phabricator-action-view:hover .action-perflab", - "hash" : "9add2d46ea13b938c631ac2a4f376e3d" + "hash" : "aac6b8b9fa044430375ba370243292cb" }, "action-preview" : { "name" : "action-preview", "rule" : ".action-preview", - "hash" : "2eb136352c63e4f0f7632f81d12d635c" + "hash" : "a33cb74fc6e1b9665ac4ff20635babe8" }, "action-preview-grey" : { "name" : "action-preview-grey", "rule" : ".action-preview-grey", - "hash" : "f7c4e6ea75fb0a9f2fe00183112db8ad" + "hash" : "4cfe3a27e5e818ea9f7805a7c1b05fa7" }, "action-preview-white" : { "name" : "action-preview-white", "rule" : ".action-preview-white, .device-desktop .phabricator-action-view:hover .action-preview", - "hash" : "71cac08ba19ee678499a9cbd5c24c6cf" + "hash" : "61523a3b9edc3d0ddfea9f399bae0fe1" }, "action-refresh" : { "name" : "action-refresh", "rule" : ".action-refresh", - "hash" : "171e46e974912cfa0b347d1e96a579c7" + "hash" : "d5d7cf16bfe862d0a101ccf216b76df1" }, "action-refresh-grey" : { "name" : "action-refresh-grey", "rule" : ".action-refresh-grey", - "hash" : "6e102669eb7b6389d7c08c838886841d" + "hash" : "b4838ee697b2a9b70dc6920da7ab3e89" }, "action-refresh-white" : { "name" : "action-refresh-white", "rule" : ".action-refresh-white, .device-desktop .phabricator-action-view:hover .action-refresh", - "hash" : "5a7dad6d45f6b47bc1175a7efa4089a1" + "hash" : "44fa7fc18a847416b9db3858e0b47737" }, "action-remove" : { "name" : "action-remove", "rule" : ".action-remove", - "hash" : "364176fcff78057741963dbf48eecbbd" + "hash" : "4c9dcad5540a611a5e05380d7982a601" }, "action-remove-grey" : { "name" : "action-remove-grey", "rule" : ".action-remove-grey", - "hash" : "b0d190ec2837c0cbdc99428178a8eddf" + "hash" : "dc0b179b0a96dd5c9f387ee41daf77a7" }, "action-remove-white" : { "name" : "action-remove-white", "rule" : ".action-remove-white, .device-desktop .phabricator-action-view:hover .action-remove", - "hash" : "e3646206c14813fca81a35de43722aae" + "hash" : "8c750027adb708e8507a51986081d309" }, "action-search" : { "name" : "action-search", "rule" : ".action-search", - "hash" : "8307439f020b262ab8443edb745ed171" + "hash" : "1340e68f4f2b55c5feee4a0241672c82" }, "action-search-grey" : { "name" : "action-search-grey", "rule" : ".action-search-grey", - "hash" : "c1ce13aab1083b20fb094b56b3deab8a" + "hash" : "a7e598337c9a8a6feb3de62247abb611" }, "action-search-white" : { "name" : "action-search-white", "rule" : ".action-search-white, .device-desktop .phabricator-action-view:hover .action-search", - "hash" : "72098d2091e6297c4253c3e45a365ec4" + "hash" : "91e764bd3ed921153ac66fc56e04b884" }, "action-start-sandcastle" : { "name" : "action-start-sandcastle", "rule" : ".action-start-sandcastle", - "hash" : "afa09dd71e0747c56e64d95e975122c8" + "hash" : "52f245ddeff53c5cf084c27b6e45b152" }, "action-start-sandcastle-grey" : { "name" : "action-start-sandcastle-grey", "rule" : ".action-start-sandcastle-grey", - "hash" : "b0912a9f2a1bcff19ab90f539107864f" + "hash" : "d41cff7a3c898616f75634c8d796cd6c" }, "action-start-sandcastle-white" : { "name" : "action-start-sandcastle-white", "rule" : ".action-start-sandcastle-white, .device-desktop .phabricator-action-view:hover .action-start-sandcastle", - "hash" : "53692026662afaafdcbaa9ab7de7aa0d" + "hash" : "04959e4bcf29b57213e5b49ab6f25aeb" }, "action-subscribe-add" : { "name" : "action-subscribe-add", "rule" : ".action-subscribe-add", - "hash" : "d2100e88f2ffc71c2df1d40049f2bf68" + "hash" : "1b166c23ed6a971d2f93d37147caf622" }, "action-subscribe-add-grey" : { "name" : "action-subscribe-add-grey", "rule" : ".action-subscribe-add-grey", - "hash" : "637094fbed70285b62cbfe9ead4bd480" + "hash" : "2b2fd9749636140f78233bef8e604d56" }, "action-subscribe-add-white" : { "name" : "action-subscribe-add-white", "rule" : ".action-subscribe-add-white, .device-desktop .phabricator-action-view:hover .action-subscribe-add", - "hash" : "75be8cd5e9622834bd6faf0c6d1db271" + "hash" : "2ca899f12f05b03c5c54cbac08d2b74d" }, "action-subscribe-auto" : { "name" : "action-subscribe-auto", "rule" : ".action-subscribe-auto", - "hash" : "95145b14f35005a0ff3224e3076a9388" + "hash" : "a6cd0083b657b924882d830cd4f91bbc" }, "action-subscribe-auto-grey" : { "name" : "action-subscribe-auto-grey", "rule" : ".action-subscribe-auto-grey", - "hash" : "12edd25560b91838642baa3529743733" + "hash" : "77ccbf046a3a39ebf20ba6e58e865438" }, "action-subscribe-auto-white" : { "name" : "action-subscribe-auto-white", "rule" : ".action-subscribe-auto-white, .device-desktop .phabricator-action-view:hover .action-subscribe-auto", - "hash" : "eda2baeaf056a2d5f46184393ec6dbca" + "hash" : "f22920740beb517bb7d33ae91462907d" }, "action-subscribe-delete" : { "name" : "action-subscribe-delete", "rule" : ".action-subscribe-delete", - "hash" : "55a16e4abd9fe661f350b5327aafed88" + "hash" : "e78959e3ed89af610da59e8ef77c799d" }, "action-subscribe-delete-grey" : { "name" : "action-subscribe-delete-grey", "rule" : ".action-subscribe-delete-grey", - "hash" : "c1c033955177120cd6adcb0d68f37e18" + "hash" : "e3e8d142bdd4d1acfebcd03c790ac5b5" }, "action-subscribe-delete-white" : { "name" : "action-subscribe-delete-white", "rule" : ".action-subscribe-delete-white, .device-desktop .phabricator-action-view:hover .action-subscribe-delete", - "hash" : "bc0d60756e5b4c141b801fb384933eab" + "hash" : "1368667fb8b115c95512eda55d7065a5" }, "action-tag" : { "name" : "action-tag", "rule" : ".action-tag", - "hash" : "069a8593574d6f847a3611b23677e667" + "hash" : "2574ffef0cafe758774e358bd6e5cd6a" }, "action-tag-grey" : { "name" : "action-tag-grey", "rule" : ".action-tag-grey", - "hash" : "544d96d3bed359a545f2eaa16687cead" + "hash" : "e8194bcfb48d63a5a8c5ce69a0a3dcc5" }, "action-tag-white" : { "name" : "action-tag-white", "rule" : ".action-tag-white, .device-desktop .phabricator-action-view:hover .action-tag", - "hash" : "e3e509127ef1a452faaa03465dd6f9c1" + "hash" : "2d54a42a650a987ce706c2d935ff33cd" }, "action-transcript" : { "name" : "action-transcript", "rule" : ".action-transcript", - "hash" : "4e76a6b1c51fcfc1b1b1ad0e7f247c3a" + "hash" : "6be4d47abddeb109216f346787face70" }, "action-transcript-grey" : { "name" : "action-transcript-grey", "rule" : ".action-transcript-grey", - "hash" : "313af234ca64b2ecc53dd1c91ce0b1c1" + "hash" : "9ed35e5d39536a4b8dd934039c742447" }, "action-transcript-white" : { "name" : "action-transcript-white", "rule" : ".action-transcript-white, .device-desktop .phabricator-action-view:hover .action-transcript", - "hash" : "39743a3d055fcd5b344eb59092006f16" + "hash" : "7c3df910499b8ddb85c2f53e0d58c0db" }, "action-undo" : { "name" : "action-undo", "rule" : ".action-undo", - "hash" : "7e860a8ec5bb760b0767ecc3114173c7" + "hash" : "f81151e242bb8ae29714bec10cb7c5f1" }, "action-undo-grey" : { "name" : "action-undo-grey", "rule" : ".action-undo-grey", - "hash" : "6c9fdd95e53b4ec05da46cf129e3c6fb" + "hash" : "8d4b0bc147b463011ec00321ba75b17f" }, "action-undo-white" : { "name" : "action-undo-white", "rule" : ".action-undo-white, .device-desktop .phabricator-action-view:hover .action-undo", - "hash" : "8b3fefbad3b5179a6b35b41617e2cef2" + "hash" : "39b777060ce1d1b0c68c550bb63d7146" }, "action-unlock" : { "name" : "action-unlock", "rule" : ".action-unlock", - "hash" : "e2ff544b4c60dcf7545755d96d23b993" + "hash" : "d7cc6ffcda62a90e455d37ca0f07d0dd" }, "action-unlock-grey" : { "name" : "action-unlock-grey", "rule" : ".action-unlock-grey", - "hash" : "d9656d004d5c516a38d75462eadf82f5" + "hash" : "efdc3048fa3a4051a43f43a915e53b0e" }, "action-unlock-white" : { "name" : "action-unlock-white", "rule" : ".action-unlock-white, .device-desktop .phabricator-action-view:hover .action-unlock", - "hash" : "a970eb7a33d2c5c71d2125b0b8e79375" + "hash" : "d0e7aff47724d94167e9bcb11eb5e6aa" }, "action-unmerge" : { "name" : "action-unmerge", "rule" : ".action-unmerge", - "hash" : "48a0128075a15f5145c343f9fe4fba2e" + "hash" : "00d417a336f6e076bb587cd4cef5eb49" }, "action-unmerge-grey" : { "name" : "action-unmerge-grey", "rule" : ".action-unmerge-grey", - "hash" : "9be17dad18c74a10122def1dabbbf1c4" + "hash" : "904a51920678c838b72c934085f339a7" }, "action-unmerge-white" : { "name" : "action-unmerge-white", "rule" : ".action-unmerge-white, .device-desktop .phabricator-action-view:hover .action-unmerge", - "hash" : "5139f358574dcd0ac5cecf412c8115fd" + "hash" : "2e5761de881642c94e641879bbde318f" }, "action-unpublish" : { "name" : "action-unpublish", "rule" : ".action-unpublish", - "hash" : "3e6211c213fec14fe152b5fabcb0f306" + "hash" : "88d21b9ce49b7ac886250df307f756ce" }, "action-unpublish-grey" : { "name" : "action-unpublish-grey", "rule" : ".action-unpublish-grey", - "hash" : "602cdfcfa89b575456aee6eb808accc4" + "hash" : "5c4fe69253100e9ca292348af13b9f3f" }, "action-unpublish-white" : { "name" : "action-unpublish-white", "rule" : ".action-unpublish-white, .device-desktop .phabricator-action-view:hover .action-unpublish", - "hash" : "b8cde193bf30d834fc90ddfd17fe56ea" + "hash" : "f663861c0776cea790d8392e4aa2fc5d" }, "action-upload" : { "name" : "action-upload", "rule" : ".action-upload", - "hash" : "e1ab661b790989b38b07eae365343c36" + "hash" : "bdd10302988fe6d2130f0dfc3b67d281" }, "action-upload-grey" : { "name" : "action-upload-grey", "rule" : ".action-upload-grey", - "hash" : "f03d83d2e4d3ae10661d430aa4f02523" + "hash" : "f376bbbbadefea220ec02ca3ae53d41a" }, "action-upload-white" : { "name" : "action-upload-white", "rule" : ".action-upload-white, .device-desktop .phabricator-action-view:hover .action-upload", - "hash" : "75a3ea84188c4b4b21aa5a656464a8d0" + "hash" : "4b31d9dc6f17bd0cd54c3dcea7a95313" }, "action-warning" : { "name" : "action-warning", "rule" : ".action-warning", - "hash" : "c1544d80d0bb28d7f9925e5ecda1165f" + "hash" : "950ac4ea5e65de41aca0788e6769650f" }, "action-warning-grey" : { "name" : "action-warning-grey", "rule" : ".action-warning-grey", - "hash" : "dccb1f52678bf74fc1eaa6a6e8dcae7a" + "hash" : "180e305268970291f6a38760deea0d4c" }, "action-warning-white" : { "name" : "action-warning-white", "rule" : ".action-warning-white, .device-desktop .phabricator-action-view:hover .action-warning", - "hash" : "57aadd4cf33bf6cb6464d243cd3e5f4d" + "hash" : "4ec3034629bc144886cd7aae5412dce2" }, "action-world" : { "name" : "action-world", "rule" : ".action-world", - "hash" : "374749ade70638672595b8a985341a34" + "hash" : "95ebc5ab6e70ab9d794f0960f2a43559" }, "action-world-grey" : { "name" : "action-world-grey", "rule" : ".action-world-grey", - "hash" : "f5fa565f8dbc81d5ac8d8f128179929b" + "hash" : "969b164f2f5580f9226f293dbcfe50bc" }, "action-world-white" : { "name" : "action-world-white", "rule" : ".action-world-white, .device-desktop .phabricator-action-view:hover .action-world", - "hash" : "b50f9d742377edf4edda3e1e78f1e558" + "hash" : "106ab6c8bc5a685cd0837baaa6c617e4" }, "remarkup-assist-text_b" : { "name" : "remarkup-assist-text_b", "rule" : ".remarkup-assist-b", - "hash" : "12c565d4934f6a777c9524baf75cebb6" + "hash" : "b2e7ba9cba2946a78ac8045d83852ade" }, "remarkup-assist-text_code" : { "name" : "remarkup-assist-text_code", "rule" : ".remarkup-assist-code", - "hash" : "f06f106cb8edb67e8b99d159d704a61a" + "hash" : "c0527e968c770450d4aa7cefe38271b8" }, "remarkup-assist-text_help" : { "name" : "remarkup-assist-text_help", "rule" : ".remarkup-assist-help", - "hash" : "9d54d8224b81de8e3ed7beac0e486257" + "hash" : "e8312c555e5f3935d8e2dcf44147b7f8" }, "remarkup-assist-text_i" : { "name" : "remarkup-assist-text_i", "rule" : ".remarkup-assist-i", - "hash" : "50f83a53f5b094d3d92b619d06fada3c" + "hash" : "19d4c474555d75d0e4739ec7097dbfa4" }, "remarkup-assist-text_image" : { "name" : "remarkup-assist-text_image", "rule" : ".remarkup-assist-image", - "hash" : "c2869e71cc7cb6178598cd41a19ababb" + "hash" : "5a560800fa31b24d18807b430797ac95" }, "remarkup-assist-text_larger" : { "name" : "remarkup-assist-text_larger", "rule" : ".remarkup-assist-larger", - "hash" : "d3165f15a1b3734e4b7088f7b74330ba" + "hash" : "5cd9c8223c99ef3409c82dfaefeebc50" }, "remarkup-assist-text_meme" : { "name" : "remarkup-assist-text_meme", "rule" : ".remarkup-assist-meme", - "hash" : "ed9c4166858ca1caedf5f8e4b8ad587e" + "hash" : "ff98a508db2348b3d46aaf8225b26862" }, "remarkup-assist-text_ol" : { "name" : "remarkup-assist-text_ol", "rule" : ".remarkup-assist-ol", - "hash" : "266b858f5ffc42760fb2e12913a5198a" + "hash" : "a2805d44ca0eac518f99109c4969f450" }, "remarkup-assist-text_table" : { "name" : "remarkup-assist-text_table", "rule" : ".remarkup-assist-table", - "hash" : "5c2961b35460b3b5b7efdd5bc4e318ca" + "hash" : "2ae3fb49af42f07038d77aa5b62862c0" }, "remarkup-assist-text_tag" : { "name" : "remarkup-assist-text_tag", "rule" : ".remarkup-assist-tag", - "hash" : "165bd3a4de8d54cf720db9bc64116d25" + "hash" : "446c23bff9fc7da885ea574f073eaf0f" }, "remarkup-assist-text_tt" : { "name" : "remarkup-assist-text_tt", "rule" : ".remarkup-assist-tt", - "hash" : "c07e6816500c9cd66fa27758cc902195" + "hash" : "77ae74c8a9a02fde5565399409dc5ab3" }, "remarkup-assist-text_ul" : { "name" : "remarkup-assist-text_ul", "rule" : ".remarkup-assist-ul", - "hash" : "26f55c0fcf9148879e3fb058ac319100" + "hash" : "cf3c6b4f809377b7eff9fcef42fc47df" } }, "scales" : [ diff --git a/resources/sprite/manifest/menu.json b/resources/sprite/manifest/menu.json index ba730a47d7..d4a6bbbe40 100644 --- a/resources/sprite/manifest/menu.json +++ b/resources/sprite/manifest/menu.json @@ -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" : [ diff --git a/resources/sprite/menu_1x/conf-hover.png b/resources/sprite/menu_1x/conf-hover.png new file mode 100644 index 0000000000..a023af58c9 Binary files /dev/null and b/resources/sprite/menu_1x/conf-hover.png differ diff --git a/resources/sprite/menu_1x/conf-off.png b/resources/sprite/menu_1x/conf-off.png new file mode 100644 index 0000000000..34674f597c Binary files /dev/null and b/resources/sprite/menu_1x/conf-off.png differ diff --git a/resources/sprite/menu_1x/conf-unseen.png b/resources/sprite/menu_1x/conf-unseen.png new file mode 100644 index 0000000000..d186116b55 Binary files /dev/null and b/resources/sprite/menu_1x/conf-unseen.png differ diff --git a/resources/sprite/menu_2x/conf-hover.png b/resources/sprite/menu_2x/conf-hover.png new file mode 100644 index 0000000000..58a986cf82 Binary files /dev/null and b/resources/sprite/menu_2x/conf-hover.png differ diff --git a/resources/sprite/menu_2x/conf-off.png b/resources/sprite/menu_2x/conf-off.png new file mode 100644 index 0000000000..f09430c20f Binary files /dev/null and b/resources/sprite/menu_2x/conf-off.png differ diff --git a/resources/sprite/menu_2x/conf-unseen.png b/resources/sprite/menu_2x/conf-unseen.png new file mode 100644 index 0000000000..f35ae10129 Binary files /dev/null and b/resources/sprite/menu_2x/conf-unseen.png differ diff --git a/resources/sql/patches/20130127.altheraldtranscript.sql b/resources/sql/patches/20130127.altheraldtranscript.sql new file mode 100644 index 0000000000..5b59c4d40b --- /dev/null +++ b/resources/sql/patches/20130127.altheraldtranscript.sql @@ -0,0 +1,3 @@ +ALTER TABLE `{$NAMESPACE}_herald`.`herald_transcript` + DROP `psth`; + diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index 30daf8e562..6edcdb0feb 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -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', ), )); diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 8cf098bb7c..5090f256e3 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -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', diff --git a/src/applications/auth/controller/PhabricatorAuthController.php b/src/applications/auth/controller/PhabricatorAuthController.php index 60dc5bcbc9..19094da148 100644 --- a/src/applications/auth/controller/PhabricatorAuthController.php +++ b/src/applications/auth/controller/PhabricatorAuthController.php @@ -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); diff --git a/src/applications/auth/controller/PhabricatorDisabledUserController.php b/src/applications/auth/controller/PhabricatorDisabledUserController.php index 08647187b5..dcd1e36abc 100644 --- a/src/applications/auth/controller/PhabricatorDisabledUserController.php +++ b/src/applications/auth/controller/PhabricatorDisabledUserController.php @@ -15,13 +15,14 @@ final class PhabricatorDisabledUserController } $failure_view = new AphrontRequestFailureView(); - $failure_view->setHeader('Account Disabled'); - $failure_view->appendChild('

Your account has been disabled.

'); + $failure_view->setHeader(pht('Account Disabled')); + $failure_view->appendChild( + '

'.pht('Your account has been disabled.').'

'); return $this->buildStandardPageResponse( $failure_view, array( - 'title' => 'Account Disabled', + 'title' => pht('Account Disabled'), )); } diff --git a/src/applications/auth/controller/PhabricatorEmailLoginController.php b/src/applications/auth/controller/PhabricatorEmailLoginController.php index bf142ea23e..e6cc6372df 100644 --- a/src/applications/auth/controller/PhabricatorEmailLoginController.php +++ b/src/applications/auth/controller/PhabricatorEmailLoginController.php @@ -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( - '

An email has been sent with a link you can use to login.

'); + '

'.pht( + 'An email has been sent with a link you can use to login.' + ).'

'); 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('

Forgot Password / Email Login

'); + $panel->appendChild(' +

'.pht('Forgot Password / Email Login').'

'); $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, )); } diff --git a/src/applications/auth/controller/PhabricatorEmailTokenController.php b/src/applications/auth/controller/PhabricatorEmailTokenController.php index 0f2187ee31..855caa37af 100644 --- a/src/applications/auth/controller/PhabricatorEmailTokenController.php +++ b/src/applications/auth/controller/PhabricatorEmailTokenController.php @@ -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( - '

The authentication information in the link you clicked is '. + '

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

'); + 'a new email.').'

'); $view->appendChild( '
'. - 'Send Another Email'. + ''. + pht('Send Another Email'). + ''. '
'); return $this->buildStandardPageResponse( $view, array( - 'title' => 'Login Failure', + 'title' => pht('Login Failure'), )); } diff --git a/src/applications/auth/controller/PhabricatorLDAPLoginController.php b/src/applications/auth/controller/PhabricatorLDAPLoginController.php index 60595be4eb..4dafe831f7 100644 --- a/src/applications/auth/controller/PhabricatorLDAPLoginController.php +++ b/src/applications/auth/controller/PhabricatorLDAPLoginController.php @@ -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( - '

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.

' + '

'.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.').'

' ); $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( - '

Link your LDAP account to your Phabricator account?

'); + '

'. + pht('Link your LDAP account to your Phabricator account?'). + '

'); $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('

LDAP login

'); + $panel->appendChild('

'.pht('LDAP login').'

'); $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'), )); } diff --git a/src/applications/auth/controller/PhabricatorLDAPRegistrationController.php b/src/applications/auth/controller/PhabricatorLDAPRegistrationController.php index 1fde2ef450..e52eea2134 100644 --- a/src/applications/auth/controller/PhabricatorLDAPRegistrationController.php +++ b/src/applications/auth/controller/PhabricatorLDAPRegistrationController.php @@ -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'), )); } diff --git a/src/applications/auth/controller/PhabricatorLDAPUnlinkController.php b/src/applications/auth/controller/PhabricatorLDAPUnlinkController.php index 180c20ce73..44cad5a398 100644 --- a/src/applications/auth/controller/PhabricatorLDAPUnlinkController.php +++ b/src/applications/auth/controller/PhabricatorLDAPUnlinkController.php @@ -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( - '

You will not be able to login using this account '. - 'once you unlink it. Continue?

'); - $dialog->addSubmitButton('Unlink Account'); + '

'.pht('You will not be able to login using this account '. + 'once you unlink it. Continue?').'

'); + $dialog->addSubmitButton(pht('Unlink Account')); $dialog->addCancelButton('/settings/panel/ldap/'); return id(new AphrontDialogResponse())->setDialog($dialog); diff --git a/src/applications/auth/controller/PhabricatorLoginController.php b/src/applications/auth/controller/PhabricatorLoginController.php index 6bc87c5aab..c4bda38a77 100644 --- a/src/applications/auth/controller/PhabricatorLoginController.php +++ b/src/applications/auth/controller/PhabricatorLoginController.php @@ -28,10 +28,10 @@ final class PhabricatorLoginController $dialog = new AphrontDialogView(); $dialog->setUser($user); - $dialog->setTitle('Login Required'); - $dialog->appendChild('

You must login to continue.

'); - $dialog->addSubmitButton('Login'); - $dialog->addCancelButton('/', 'Cancel'); + $dialog->setTitle(pht('Login Required')); + $dialog->appendChild('

'.pht('You must login to continue.').'

'); + $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( ''. - 'Forgot your password? / Email Login')); + pht('Forgot your password? / Email Login').'')); 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.

'. - 'You can not use '. - phutil_escape_html($provider_name).' to register a new '. - 'account.'; - $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)). + '

'. + ''. + pht('You can not use %s to register a new account.', + phutil_escape_html($provider_name)). + ''; + $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 )); } diff --git a/src/applications/auth/controller/PhabricatorLoginValidateController.php b/src/applications/auth/controller/PhabricatorLoginValidateController.php index 7ddc737011..9423199711 100644 --- a/src/applications/auth/controller/PhabricatorLoginValidateController.php +++ b/src/applications/auth/controller/PhabricatorLoginValidateController.php @@ -48,19 +48,19 @@ final class PhabricatorLoginValidateController $list = ''; $view = new AphrontRequestFailureView(); - $view->setHeader('Login Failed'); + $view->setHeader(pht('Login Failed')); $view->appendChild( - '

Login failed:

'. + '

'.pht('Login failed:').'

'. $list. - '

Clear your cookies and try again.

'); + '

'.pht('Clear your cookies and try again.').'

'); $view->appendChild( '
'. - 'Try Again'. + ''.pht('Try Again').''. '
'); return $this->buildStandardPageResponse( $view, array( - 'title' => 'Login Failed', + 'title' => pht('Login Failed'), )); } diff --git a/src/applications/auth/controller/PhabricatorLogoutController.php b/src/applications/auth/controller/PhabricatorLogoutController.php index fc3e9c8dc5..e2cc5410fa 100644 --- a/src/applications/auth/controller/PhabricatorLogoutController.php +++ b/src/applications/auth/controller/PhabricatorLogoutController.php @@ -45,9 +45,9 @@ final class PhabricatorLogoutController if ($user->getPHID()) { $dialog = id(new AphrontDialogView()) ->setUser($user) - ->setTitle('Log out of Phabricator?') - ->appendChild('

Are you sure you want to log out?

') - ->addSubmitButton('Log Out') + ->setTitle(pht('Log out of Phabricator?')) + ->appendChild('

'.pht('Are you sure you want to log out?').'

') + ->addSubmitButton(pht('Logout')) ->addCancelButton('/'); return id(new AphrontDialogResponse())->setDialog($dialog); diff --git a/src/applications/auth/controller/PhabricatorMustVerifyEmailController.php b/src/applications/auth/controller/PhabricatorMustVerifyEmailController.php index 58655c2e8b..21af745ed2 100644 --- a/src/applications/auth/controller/PhabricatorMustVerifyEmailController.php +++ b/src/applications/auth/controller/PhabricatorMustVerifyEmailController.php @@ -30,21 +30,25 @@ final class PhabricatorMustVerifyEmailController $email->sendVerificationEmail($user); $sent = new AphrontErrorView(); $sent->setSeverity(AphrontErrorView::SEVERITY_NOTICE); - $sent->setTitle('Email Sent'); - $sent->appendChild( - '

Another verification email was sent to '. - phutil_escape_html($email_address).'.

'); + $sent->setTitle(pht('Email Sent')); + $sent->appendChild('

'. + pht('Another verification email was sent to %s.', + phutil_escape_html($email_address)).'

'); } $error_view = new AphrontRequestFailureView(); - $error_view->setHeader('Check Your Email'); + $error_view->setHeader(pht('Check Your Email')); $error_view->appendChild( - '

You must verify your email address to login. You should have a new '. + '

'. + pht('You must verify your email address to login. You should have a new '. 'email message from Phabricator with verification instructions in your '. - 'inbox ('.phutil_escape_html($email_address).').

'); + 'inbox (%s).', phutil_escape_html($email_address)). + '

'); $error_view->appendChild( - '

If you did not receive an email, you can click the button below '. - 'to try sending another one.

'); + '

'. + pht('If you did not receive an email, you can click the button below '. + 'to try sending another one.'). + '

'); $error_view->appendChild( '
'. phabricator_render_form( @@ -57,17 +61,18 @@ final class PhabricatorMustVerifyEmailController 'button', array( ), - 'Send Another Email')). + pht('Send Another Email'))). '
'); - return $this->buildStandardPageResponse( + return $this->buildApplicationPage( array( $sent, $error_view, ), array( - 'title' => 'Must Verify Email', + 'title' => pht('Must Verify Email'), + 'device' => true )); } diff --git a/src/applications/auth/controller/PhabricatorOAuthLoginController.php b/src/applications/auth/controller/PhabricatorOAuthLoginController.php index 09be7d076e..2a6c9da6e1 100644 --- a/src/applications/auth/controller/PhabricatorOAuthLoginController.php +++ b/src/applications/auth/controller/PhabricatorOAuthLoginController.php @@ -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( - '

The %s account you just authorized is already linked to '. + $dialog->setTitle(pht('Already Linked to Another Account')); + $dialog->appendChild('

'. + 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.

', - $provider_name, - $provider_name)); + phutil_escape_html($provider_name), + phutil_escape_html($provider_name))).'

'; $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( - '

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('

'. + 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.

', - $provider_name, - $provider_name)); + phutil_escape_html($provider_name), + phutil_escape_html($provider_name))).'

'; $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( '

Link your %s account to your Phabricator account?

', - $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( - '

The %s account you just authorized has an email address which '. + $dialog->setTitle(pht('Already Linked to Another Account')); + $dialog->appendChild('

'. + 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.

', - $provider_name)); + 'Settings.', + phutil_escape_html($provider_name))).'

'; $user = id(new PhabricatorUser()) ->loadOneWhere('phid = %s', $known_email->getUserPHID()); @@ -189,9 +190,9 @@ final class PhabricatorOAuthLoginController ->getProviderName(); } $dialog->appendChild( - hsprintf( + pht( '

The account is associated with: %s.

', - 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( - '

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('

'. + 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.

', - $provider_name, - $provider_name)); + 'you have registered through other means.', + phutil_escape_html($provider_name), + phutil_escape_html($provider_name))).'

'; $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'), )); } diff --git a/src/applications/auth/controller/PhabricatorOAuthUnlinkController.php b/src/applications/auth/controller/PhabricatorOAuthUnlinkController.php index 816dae4bba..bff01b251b 100644 --- a/src/applications/auth/controller/PhabricatorOAuthUnlinkController.php +++ b/src/applications/auth/controller/PhabricatorOAuthUnlinkController.php @@ -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( - '

You will not be able to login using this account '. - 'once you unlink it. Continue?

'); - $dialog->addSubmitButton('Unlink Account'); + '

'.pht('You will not be able to login using this account '. + 'once you unlink it. Continue?').'

'); + $dialog->addSubmitButton(pht('Unlink Account')); $dialog->addCancelButton($provider->getSettingsPanelURI()); return id(new AphrontDialogResponse())->setDialog($dialog); diff --git a/src/applications/auth/controller/oauthregistration/PhabricatorOAuthDefaultRegistrationController.php b/src/applications/auth/controller/oauthregistration/PhabricatorOAuthDefaultRegistrationController.php index a88c27fd91..6b81024bf7 100644 --- a/src/applications/auth/controller/oauthregistration/PhabricatorOAuthDefaultRegistrationController.php +++ b/src/applications/auth/controller/oauthregistration/PhabricatorOAuthDefaultRegistrationController.php @@ -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 )); } diff --git a/src/applications/auth/view/PhabricatorOAuthFailureView.php b/src/applications/auth/view/PhabricatorOAuthFailureView.php index 4853410dbd..b8fa2afd2f 100644 --- a/src/applications/auth/view/PhabricatorOAuthFailureView.php +++ b/src/applications/auth/view/PhabricatorOAuthFailureView.php @@ -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( '
'. $diagnose. - 'Continue'. + ''.pht('Continue').''. '
'); return $view->render(); diff --git a/src/applications/config/controller/PhabricatorConfigAllController.php b/src/applications/config/controller/PhabricatorConfigAllController.php index e140ffc9ef..e7b46c7c3c 100644 --- a/src/applications/config/controller/PhabricatorConfigAllController.php +++ b/src/applications/config/controller/PhabricatorConfigAllController.php @@ -84,7 +84,6 @@ final class PhabricatorConfigAllController $nav->appendChild($panel); - return $this->buildApplicationPage( $nav, array( diff --git a/src/applications/config/controller/PhabricatorConfigGroupController.php b/src/applications/config/controller/PhabricatorConfigGroupController.php index 2f53b30496..2e6ca6f4a4 100644 --- a/src/applications/config/controller/PhabricatorConfigGroupController.php +++ b/src/applications/config/controller/PhabricatorConfigGroupController.php @@ -72,6 +72,7 @@ final class PhabricatorConfigGroupController $engine->process(); $list = new PhabricatorObjectItemListView(); + $list->setStackable(); foreach ($options as $option) { $summary = $engine->getOutput($option, 'summary'); diff --git a/src/applications/config/controller/PhabricatorConfigIssueListController.php b/src/applications/config/controller/PhabricatorConfigIssueListController.php index eb4c9998da..aee0f7a26e 100644 --- a/src/applications/config/controller/PhabricatorConfigIssueListController.php +++ b/src/applications/config/controller/PhabricatorConfigIssueListController.php @@ -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().'/'); diff --git a/src/applications/config/controller/PhabricatorConfigListController.php b/src/applications/config/controller/PhabricatorConfigListController.php index 2513633c32..1561531f42 100644 --- a/src/applications/config/controller/PhabricatorConfigListController.php +++ b/src/applications/config/controller/PhabricatorConfigListController.php @@ -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()) diff --git a/src/applications/config/option/PhabricatorMetaMTAConfigOptions.php b/src/applications/config/option/PhabricatorMetaMTAConfigOptions.php index 19437ffffe..452f1ed32f 100644 --- a/src/applications/config/option/PhabricatorMetaMTAConfigOptions.php +++ b/src/applications/config/option/PhabricatorMetaMTAConfigOptions.php @@ -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( diff --git a/src/applications/conpherence/config/ConpherenceConfigOptions.php b/src/applications/conpherence/config/ConpherenceConfigOptions.php new file mode 100644 index 0000000000..77d2cda2b4 --- /dev/null +++ b/src/applications/conpherence/config/ConpherenceConfigOptions.php @@ -0,0 +1,24 @@ +newOption( + 'metamta.conpherence.subject-prefix', + 'string', + '[Conpherence]') + ->setDescription(pht('Subject prefix for Conpherence mail.')), + ); + } + +} diff --git a/src/applications/conpherence/controller/ConpherenceController.php b/src/applications/conpherence/controller/ConpherenceController.php index 6c537f0006..fbe8e3cd6a 100644 --- a/src/applications/conpherence/controller/ConpherenceController.php +++ b/src/applications/conpherence/controller/ConpherenceController.php @@ -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(); diff --git a/src/applications/conpherence/controller/ConpherenceListController.php b/src/applications/conpherence/controller/ConpherenceListController.php index 73f845c94c..46bae21db9 100644 --- a/src/applications/conpherence/controller/ConpherenceListController.php +++ b/src/applications/conpherence/controller/ConpherenceListController.php @@ -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(); } diff --git a/src/applications/conpherence/controller/ConpherenceNewController.php b/src/applications/conpherence/controller/ConpherenceNewController.php index a167304e63..ded3b75f6f 100644 --- a/src/applications/conpherence/controller/ConpherenceNewController.php +++ b/src/applications/conpherence/controller/ConpherenceNewController.php @@ -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( diff --git a/src/applications/conpherence/controller/ConpherenceUpdateController.php b/src/applications/conpherence/controller/ConpherenceUpdateController.php index baa2fc92ef..69e35a5701 100644 --- a/src/applications/conpherence/controller/ConpherenceUpdateController.php +++ b/src/applications/conpherence/controller/ConpherenceUpdateController.php @@ -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().'/')) + ); } } diff --git a/src/applications/conpherence/controller/ConpherenceViewController.php b/src/applications/conpherence/controller/ConpherenceViewController.php index a36e1ab766..9f1b37bd15 100644 --- a/src/applications/conpherence/controller/ConpherenceViewController.php +++ b/src/applications/conpherence/controller/ConpherenceViewController.php @@ -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) diff --git a/src/applications/conpherence/editor/ConpherenceEditor.php b/src/applications/conpherence/editor/ConpherenceEditor.php index 93344d2215..9304e0f14e 100644 --- a/src/applications/conpherence/editor/ConpherenceEditor.php +++ b/src/applications/conpherence/editor/ConpherenceEditor.php @@ -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; diff --git a/src/applications/conpherence/mail/ConpherenceReplyHandler.php b/src/applications/conpherence/mail/ConpherenceReplyHandler.php new file mode 100644 index 0000000000..f7de36cb25 --- /dev/null +++ b/src/applications/conpherence/mail/ConpherenceReplyHandler.php @@ -0,0 +1,80 @@ +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; + } + +} diff --git a/src/applications/conpherence/storage/ConpherenceParticipant.php b/src/applications/conpherence/storage/ConpherenceParticipant.php index e21d6204ad..be897c11fe 100644 --- a/src/applications/conpherence/storage/ConpherenceParticipant.php +++ b/src/applications/conpherence/storage/ConpherenceParticipant.php @@ -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; diff --git a/src/applications/conpherence/storage/ConpherenceThread.php b/src/applications/conpherence/storage/ConpherenceThread.php index c5c2c4723a..1b80aec1a5 100644 --- a/src/applications/conpherence/storage/ConpherenceThread.php +++ b/src/applications/conpherence/storage/ConpherenceThread.php @@ -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; diff --git a/src/applications/conpherence/storage/ConpherenceTransaction.php b/src/applications/conpherence/storage/ConpherenceTransaction.php index c75ee7cd1f..9b242275c6 100644 --- a/src/applications/conpherence/storage/ConpherenceTransaction.php +++ b/src/applications/conpherence/storage/ConpherenceTransaction.php @@ -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(); diff --git a/src/applications/differential/editor/DifferentialCommentEditor.php b/src/applications/differential/editor/DifferentialCommentEditor.php index 386a0d9e22..8054b791c5 100644 --- a/src/applications/differential/editor/DifferentialCommentEditor.php +++ b/src/applications/differential/editor/DifferentialCommentEditor.php @@ -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(); diff --git a/src/applications/macro/controller/PhabricatorMacroListController.php b/src/applications/macro/controller/PhabricatorMacroListController.php index 4a7560ec89..0ed1bebc77 100644 --- a/src/applications/macro/controller/PhabricatorMacroListController.php +++ b/src/applications/macro/controller/PhabricatorMacroListController.php @@ -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(); } diff --git a/src/applications/metamta/controller/PhabricatorMetaMTAReceiveController.php b/src/applications/metamta/controller/PhabricatorMetaMTAReceiveController.php index 6afb4b3c17..2ae211e2ad 100644 --- a/src/applications/metamta/controller/PhabricatorMetaMTAReceiveController.php +++ b/src/applications/metamta/controller/PhabricatorMetaMTAReceiveController.php @@ -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(); diff --git a/src/applications/metamta/controller/PhabricatorMetaMTASendGridReceiveController.php b/src/applications/metamta/controller/PhabricatorMetaMTASendGridReceiveController.php index 4b81a3c08b..fbd86a2871 100644 --- a/src/applications/metamta/controller/PhabricatorMetaMTASendGridReceiveController.php +++ b/src/applications/metamta/controller/PhabricatorMetaMTASendGridReceiveController.php @@ -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) { diff --git a/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php b/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php index 20d4436073..51784d7b96 100644 --- a/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php +++ b/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php @@ -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"; } diff --git a/src/applications/metamta/storage/PhabricatorMetaMTAMail.php b/src/applications/metamta/storage/PhabricatorMetaMTAMail.php index 86f02f427e..7b98dd4299 100644 --- a/src/applications/metamta/storage/PhabricatorMetaMTAMail.php +++ b/src/applications/metamta/storage/PhabricatorMetaMTAMail.php @@ -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 diff --git a/src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php b/src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php index 6ee4df4a76..ca7dee2acf 100644 --- a/src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php +++ b/src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php @@ -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 diff --git a/src/applications/phid/handle/PhabricatorObjectHandleData.php b/src/applications/phid/handle/PhabricatorObjectHandleData.php index aad3a4a326..8b216e8f5a 100644 --- a/src/applications/phid/handle/PhabricatorObjectHandleData.php +++ b/src/applications/phid/handle/PhabricatorObjectHandleData.php @@ -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()); diff --git a/src/applications/pholio/controller/PholioMockListController.php b/src/applications/pholio/controller/PholioMockListController.php index 943eab946a..5c456ec53d 100644 --- a/src/applications/pholio/controller/PholioMockListController.php +++ b/src/applications/pholio/controller/PholioMockListController.php @@ -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()) diff --git a/src/applications/pholio/controller/PholioMockViewController.php b/src/applications/pholio/controller/PholioMockViewController.php index b15149ac34..0bf0022fe1 100644 --- a/src/applications/pholio/controller/PholioMockViewController.php +++ b/src/applications/pholio/controller/PholioMockViewController.php @@ -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) { diff --git a/src/applications/pholio/query/PholioMockQuery.php b/src/applications/pholio/query/PholioMockQuery.php index 5aa6a5911b..bbd56e9f5f 100644 --- a/src/applications/pholio/query/PholioMockQuery.php +++ b/src/applications/pholio/query/PholioMockQuery.php @@ -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()]); + } + } } diff --git a/src/applications/pholio/storage/PholioImage.php b/src/applications/pholio/storage/PholioImage.php index 5525ff45a5..62e1862be1 100644 --- a/src/applications/pholio/storage/PholioImage.php +++ b/src/applications/pholio/storage/PholioImage.php @@ -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; + } + } diff --git a/src/applications/pholio/storage/PholioMock.php b/src/applications/pholio/storage/PholioMock.php index 177771c95e..986c9685da 100644 --- a/src/applications/pholio/storage/PholioMock.php +++ b/src/applications/pholio/storage/PholioMock.php @@ -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 )-------------------- */ diff --git a/src/applications/pholio/view/PholioMockImagesView.php b/src/applications/pholio/view/PholioMockImagesView.php index 5658fded90..5b6a28c7fb 100644 --- a/src/applications/pholio/view/PholioMockImagesView.php +++ b/src/applications/pholio/view/PholioMockImagesView.php @@ -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', diff --git a/src/applications/phortune/control/PhortuneMonthYearExpiryControl.php b/src/applications/phortune/control/PhortuneMonthYearExpiryControl.php index 34aea2791f..a4701aa11c 100644 --- a/src/applications/phortune/control/PhortuneMonthYearExpiryControl.php +++ b/src/applications/phortune/control/PhortuneMonthYearExpiryControl.php @@ -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(); diff --git a/src/applications/phriction/controller/PhrictionDocumentController.php b/src/applications/phriction/controller/PhrictionDocumentController.php index f3c89e9c1c..2e9fe01800 100644 --- a/src/applications/phriction/controller/PhrictionDocumentController.php +++ b/src/applications/phriction/controller/PhrictionDocumentController.php @@ -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) { diff --git a/src/applications/phriction/controller/PhrictionEditController.php b/src/applications/phriction/controller/PhrictionEditController.php index 72a6f50c0f..43b8c3824a 100644 --- a/src/applications/phriction/controller/PhrictionEditController.php +++ b/src/applications/phriction/controller/PhrictionEditController.php @@ -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 = '
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelAccount.php b/src/applications/settings/panel/PhabricatorSettingsPanelAccount.php index 1e2d588016..72b58dae2a 100644 --- a/src/applications/settings/panel/PhabricatorSettingsPanelAccount.php +++ b/src/applications/settings/panel/PhabricatorSettingsPanelAccount.php @@ -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 diff --git a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php index ec717468d3..7a3d07fd77 100644 --- a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php +++ b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php @@ -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) diff --git a/src/docs/developer/database.diviner b/src/docs/developer/database.diviner index 027bca2db5..59a49d852e 100644 --- a/src/docs/developer/database.diviner +++ b/src/docs/developer/database.diviner @@ -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 diff --git a/src/docs/userguide/advanced_configuration.diviner b/src/docs/userguide/advanced_configuration.diviner index 1a40c064d8..e5792ac880 100644 --- a/src/docs/userguide/advanced_configuration.diviner +++ b/src/docs/userguide/advanced_configuration.diviner @@ -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 diff --git a/src/infrastructure/celerity/CeleritySpriteGenerator.php b/src/infrastructure/celerity/CeleritySpriteGenerator.php index deaffac9c7..c6b2ac23d0 100644 --- a/src/infrastructure/celerity/CeleritySpriteGenerator.php +++ b/src/infrastructure/celerity/CeleritySpriteGenerator.php @@ -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( diff --git a/src/infrastructure/daemon/workers/PhabricatorWorker.php b/src/infrastructure/daemon/workers/PhabricatorWorker.php index 685771622c..3cf3159ca7 100644 --- a/src/infrastructure/daemon/workers/PhabricatorWorker.php +++ b/src/infrastructure/daemon/workers/PhabricatorWorker.php @@ -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'); diff --git a/src/infrastructure/markup/rule/PhabricatorRemarkupRuleEmbedFile.php b/src/infrastructure/markup/rule/PhabricatorRemarkupRuleEmbedFile.php index 6adc7958f8..42fce61dd5 100644 --- a/src/infrastructure/markup/rule/PhabricatorRemarkupRuleEmbedFile.php +++ b/src/infrastructure/markup/rule/PhabricatorRemarkupRuleEmbedFile.php @@ -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; } diff --git a/src/infrastructure/markup/rule/PhabricatorRemarkupRuleImageMacro.php b/src/infrastructure/markup/rule/PhabricatorRemarkupRuleImageMacro.php index 0216850355..849f537501 100644 --- a/src/infrastructure/markup/rule/PhabricatorRemarkupRuleImageMacro.php +++ b/src/infrastructure/markup/rule/PhabricatorRemarkupRuleImageMacro.php @@ -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 { diff --git a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php index 5344eef6a2..9c1dee01f2 100644 --- a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php +++ b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php @@ -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'), + ), ); } diff --git a/src/view/form/AphrontErrorView.php b/src/view/form/AphrontErrorView.php index 0ff078261b..06fa19ceb7 100644 --- a/src/view/form/AphrontErrorView.php +++ b/src/view/form/AphrontErrorView.php @@ -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, diff --git a/src/view/form/control/AphrontFormDateControl.php b/src/view/form/control/AphrontFormDateControl.php index afe989f854..27166c8440 100644 --- a/src/view/form/control/AphrontFormDateControl.php +++ b/src/view/form/control/AphrontFormDateControl.php @@ -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(), diff --git a/src/view/layout/PhabricatorObjectItemListView.php b/src/view/layout/PhabricatorObjectItemListView.php index a145b7ba43..0059f136ff 100644 --- a/src/view/layout/PhabricatorObjectItemListView.php +++ b/src/view/layout/PhabricatorObjectItemListView.php @@ -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); } diff --git a/src/view/layout/PhabricatorObjectItemView.php b/src/view/layout/PhabricatorObjectItemView.php index 662e63a783..fe8940320e 100644 --- a/src/view/layout/PhabricatorObjectItemView.php +++ b/src/view/layout/PhabricatorObjectItemView.php @@ -166,7 +166,7 @@ final class PhabricatorObjectItemView extends AphrontView { $header.$attrs.$this->renderChildren()); return phutil_tag( - 'div', + 'li', array( 'class' => implode(' ', $classes), ), diff --git a/src/view/page/menu/PhabricatorMainMenuView.php b/src/view/page/menu/PhabricatorMainMenuView.php index b029e2cc8b..a16e813575 100644 --- a/src/view/page/menu/PhabricatorMainMenuView.php +++ b/src/view/page/menu/PhabricatorMainMenuView.php @@ -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) { diff --git a/webroot/rsrc/css/aphront/error-view.css b/webroot/rsrc/css/aphront/error-view.css index 23b969bd35..529b4e3efb 100644 --- a/webroot/rsrc/css/aphront/error-view.css +++ b/webroot/rsrc/css/aphront/error-view.css @@ -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; } diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css index cea71e0170..6ce50a0004 100644 --- a/webroot/rsrc/css/application/base/main-menu-view.css +++ b/webroot/rsrc/css/application/base/main-menu-view.css @@ -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; } diff --git a/webroot/rsrc/css/application/config/config-options.css b/webroot/rsrc/css/application/config/config-options.css index f7ba294c92..e821dc57ef 100644 --- a/webroot/rsrc/css/application/config/config-options.css +++ b/webroot/rsrc/css/application/config/config-options.css @@ -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; } diff --git a/webroot/rsrc/css/application/conpherence/header-pane.css b/webroot/rsrc/css/application/conpherence/header-pane.css index 37acd45523..d007091de3 100644 --- a/webroot/rsrc/css/application/conpherence/header-pane.css +++ b/webroot/rsrc/css/application/conpherence/header-pane.css @@ -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%; } diff --git a/webroot/rsrc/css/application/conpherence/menu.css b/webroot/rsrc/css/application/conpherence/menu.css index 07417b8be9..0558de8204 100644 --- a/webroot/rsrc/css/application/conpherence/menu.css +++ b/webroot/rsrc/css/application/conpherence/menu.css @@ -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, diff --git a/webroot/rsrc/css/application/conpherence/message-pane.css b/webroot/rsrc/css/application/conpherence/message-pane.css index 25975815c3..e714b9f37f 100644 --- a/webroot/rsrc/css/application/conpherence/message-pane.css +++ b/webroot/rsrc/css/application/conpherence/message-pane.css @@ -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; +} diff --git a/webroot/rsrc/css/application/conpherence/widget-pane.css b/webroot/rsrc/css/application/conpherence/widget-pane.css index 9c5a3c0c8f..224adc2db5 100644 --- a/webroot/rsrc/css/application/conpherence/widget-pane.css +++ b/webroot/rsrc/css/application/conpherence/widget-pane.css @@ -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 { diff --git a/webroot/rsrc/css/layout/phabricator-object-item-list-view.css b/webroot/rsrc/css/layout/phabricator-object-item-list-view.css index 25c01eabb6..adc8c3ee8a 100644 --- a/webroot/rsrc/css/layout/phabricator-object-item-list-view.css +++ b/webroot/rsrc/css/layout/phabricator-object-item-list-view.css @@ -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 diff --git a/webroot/rsrc/css/layout/phabricator-source-code-view.css b/webroot/rsrc/css/layout/phabricator-source-code-view.css index f12e248c2b..fcd4058225 100644 --- a/webroot/rsrc/css/layout/phabricator-source-code-view.css +++ b/webroot/rsrc/css/layout/phabricator-source-code-view.css @@ -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 diff --git a/webroot/rsrc/css/sprite-apps-large.css b/webroot/rsrc/css/sprite-apps-large.css index 62746eca15..6d35b7d401 100644 --- a/webroot/rsrc/css/sprite-apps-large.css +++ b/webroot/rsrc/css/sprite-apps-large.css @@ -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; +} diff --git a/webroot/rsrc/css/sprite-apps.css b/webroot/rsrc/css/sprite-apps.css index 3d113f1703..2ed08533c2 100644 --- a/webroot/rsrc/css/sprite-apps.css +++ b/webroot/rsrc/css/sprite-apps.css @@ -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; +} diff --git a/webroot/rsrc/css/sprite-menu.css b/webroot/rsrc/css/sprite-menu.css index dfa3a84e16..367081901b 100644 --- a/webroot/rsrc/css/sprite-menu.css +++ b/webroot/rsrc/css/sprite-menu.css @@ -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; +} diff --git a/webroot/rsrc/image/actions/edit.png b/webroot/rsrc/image/actions/edit.png new file mode 100644 index 0000000000..b12c39f62c Binary files /dev/null and b/webroot/rsrc/image/actions/edit.png differ diff --git a/webroot/rsrc/image/sprite-apps-X2.png b/webroot/rsrc/image/sprite-apps-X2.png index 9c55c92c98..5557ad7d11 100644 Binary files a/webroot/rsrc/image/sprite-apps-X2.png and b/webroot/rsrc/image/sprite-apps-X2.png differ diff --git a/webroot/rsrc/image/sprite-apps-large-X2.png b/webroot/rsrc/image/sprite-apps-large-X2.png index 6502108978..9893a221f7 100644 Binary files a/webroot/rsrc/image/sprite-apps-large-X2.png and b/webroot/rsrc/image/sprite-apps-large-X2.png differ diff --git a/webroot/rsrc/image/sprite-apps-large.png b/webroot/rsrc/image/sprite-apps-large.png index 7b1dd2180d..e3fd9c766a 100644 Binary files a/webroot/rsrc/image/sprite-apps-large.png and b/webroot/rsrc/image/sprite-apps-large.png differ diff --git a/webroot/rsrc/image/sprite-apps.png b/webroot/rsrc/image/sprite-apps.png index f652203bc1..d941c561f5 100644 Binary files a/webroot/rsrc/image/sprite-apps.png and b/webroot/rsrc/image/sprite-apps.png differ diff --git a/webroot/rsrc/image/sprite-menu-X2.png b/webroot/rsrc/image/sprite-menu-X2.png index dde32caa00..7152466947 100644 Binary files a/webroot/rsrc/image/sprite-menu-X2.png and b/webroot/rsrc/image/sprite-menu-X2.png differ diff --git a/webroot/rsrc/image/sprite-menu.png b/webroot/rsrc/image/sprite-menu.png index dc89ff9ecf..4eb96afad6 100644 Binary files a/webroot/rsrc/image/sprite-menu.png and b/webroot/rsrc/image/sprite-menu.png differ diff --git a/webroot/rsrc/js/application/core/behavior-drag-and-drop.js b/webroot/rsrc/js/application/core/behavior-drag-and-drop.js index 4e115e1826..c5e8432910 100644 --- a/webroot/rsrc/js/application/core/behavior-drag-and-drop.js +++ b/webroot/rsrc/js/application/core/behavior-drag-and-drop.js @@ -2,6 +2,7 @@ * @provides javelin-behavior-aphront-drag-and-drop * @requires javelin-behavior * javelin-dom + * phabricator-file-upload * phabricator-drag-and-drop-file-upload */ @@ -16,7 +17,15 @@ JX.behavior('aphront-drag-and-drop', function(config) { // Show the control, since we have browser support. JX.$(config.control).style.display = ''; - var files = config.value || {}; + var files = {}; + if (config.value) { + for (var k in config.value) { + var file = config.value[k]; + files[k] = new JX.PhabricatorFileUpload() + .setPHID(file.phid) + .setMarkup(file.html); + } + } var pending = 0; var list = JX.$(config.list);