diff --git a/resources/sprite/gradients/black-dark.png b/resources/sprite/gradients/black-dark.png new file mode 100644 index 0000000000..357183730f Binary files /dev/null and b/resources/sprite/gradients/black-dark.png differ diff --git a/resources/sprite/gradients/black-light.png b/resources/sprite/gradients/black-light.png new file mode 100644 index 0000000000..6c744f92b2 Binary files /dev/null and b/resources/sprite/gradients/black-light.png differ diff --git a/resources/sprite/gradients/blue-dark.png b/resources/sprite/gradients/blue-dark.png new file mode 100644 index 0000000000..95b44ed8a1 Binary files /dev/null and b/resources/sprite/gradients/blue-dark.png differ diff --git a/resources/sprite/gradients/blue-light.png b/resources/sprite/gradients/blue-light.png new file mode 100644 index 0000000000..95f5f0c5e2 Binary files /dev/null and b/resources/sprite/gradients/blue-light.png differ diff --git a/resources/sprite/gradients/breadcrumbs.png b/resources/sprite/gradients/breadcrumbs.png new file mode 100644 index 0000000000..ea39b776ab Binary files /dev/null and b/resources/sprite/gradients/breadcrumbs.png differ diff --git a/resources/sprite/gradients/dark-menu-label.png b/resources/sprite/gradients/dark-menu-label.png new file mode 100644 index 0000000000..30f94c868a Binary files /dev/null and b/resources/sprite/gradients/dark-menu-label.png differ diff --git a/resources/sprite/gradients/green-dark.png b/resources/sprite/gradients/green-dark.png new file mode 100644 index 0000000000..718c903318 Binary files /dev/null and b/resources/sprite/gradients/green-dark.png differ diff --git a/resources/sprite/gradients/green-light.png b/resources/sprite/gradients/green-light.png new file mode 100644 index 0000000000..3c9422da3a Binary files /dev/null and b/resources/sprite/gradients/green-light.png differ diff --git a/resources/sprite/gradients/grey-dark.png b/resources/sprite/gradients/grey-dark.png new file mode 100644 index 0000000000..d5b60e0636 Binary files /dev/null and b/resources/sprite/gradients/grey-dark.png differ diff --git a/resources/sprite/gradients/grey-light.png b/resources/sprite/gradients/grey-light.png new file mode 100644 index 0000000000..94c223aee6 Binary files /dev/null and b/resources/sprite/gradients/grey-light.png differ diff --git a/resources/sprite/manifest/gradient.json b/resources/sprite/manifest/gradient.json new file mode 100644 index 0000000000..ab96d12c96 --- /dev/null +++ b/resources/sprite/manifest/gradient.json @@ -0,0 +1,60 @@ +{ + "version" : 1, + "sprites" : { + "gradient-black-dark" : { + "name" : "gradient-black-dark", + "rule" : ".gradient-black-dark, button.black, a.black, a.black:visited", + "hash" : "b9faf8505427bb14a8c51324e13e2f81" + }, + "gradient-black-light" : { + "name" : "gradient-black-light", + "rule" : ".gradient-black-light, button.black:active, a.black:active", + "hash" : "812c3375d00ccc93c36c6df2eb565df4" + }, + "gradient-blue-dark" : { + "name" : "gradient-blue-dark", + "rule" : ".gradient-blue-dark, button, a.button, a.button:visited, input.inputsubmit", + "hash" : "adc2d0f7397374936384014c5d78550d" + }, + "gradient-blue-light" : { + "name" : "gradient-blue-light", + "rule" : ".gradient-blue-light, button:active, a.button:active", + "hash" : "91b841067a63e543a4dcd9d41e0a2e5c" + }, + "gradient-breadcrumbs" : { + "name" : "gradient-breadcrumbs", + "rule" : ".gradient-breadcrumbs", + "hash" : "688ab77f50cfbc17ec30d798efb1b39e" + }, + "gradient-dark-menu-label" : { + "name" : "gradient-dark-menu-label", + "rule" : ".gradient-dark-menu-label", + "hash" : "89a908596142d38fbe61a706694cd321" + }, + "gradient-green-dark" : { + "name" : "gradient-green-dark", + "rule" : ".gradient-green-dark, button.green, a.green, a.green:visited", + "hash" : "0d19ab593772b6b406c0db309b3a14fb" + }, + "gradient-green-light" : { + "name" : "gradient-green-light", + "rule" : ".gradient-green-light, button.green:active, a.green:active", + "hash" : "71c67916327ec7fc65149ab72c3a2924" + }, + "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" + }, + "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" + } + }, + "scales" : [ + 1 + ], + "header" : "\/**\n * @provides sprite-gradient-css\n * @generated\n *\/\n\n.sprite-gradient, button, a.button, a.button:visited, input.inputsubmit {\n background-image: url(\/rsrc\/image\/sprite-gradient.png);\n background-repeat: repeat-x;\n}\n\n@media\nonly screen and (min-device-pixel-ratio: 1.5),\nonly screen and (-webkit-min-device-pixel-ratio: 1.5) {\n .sprite-gradient, button, a.button, a.button:visited, input.inputsubmit {\n background-image: url(\/rsrc\/image\/sprite-gradient-X2.png);\n background-size: {X}px {Y}px;\n }\n}", + "type" : "repeat-x" +} diff --git a/resources/sprite/manifest/icon.json b/resources/sprite/manifest/icon.json index 62019003a3..0c53260cad 100644 --- a/resources/sprite/manifest/icon.json +++ b/resources/sprite/manifest/icon.json @@ -1,970 +1,971 @@ { "version" : 1, "sprites" : { "action-arrow_left" : { "name" : "action-arrow_left", "rule" : ".action-arrow_left", "hash" : "d4d2ea82a38975e9630d75ea36a97239" }, "action-arrow_left-grey" : { "name" : "action-arrow_left-grey", "rule" : ".action-arrow_left-grey", "hash" : "ab68a8f75c055fe43e02d9a55006ac80" }, "action-arrow_left-white" : { "name" : "action-arrow_left-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-arrow_left", "hash" : "23e5824a1e58e858d7fff622e10c9670" }, "action-arrow_right" : { "name" : "action-arrow_right", "rule" : ".action-arrow_right", "hash" : "9f23ba0505db0e199a866d1810f8156a" }, "action-arrow_right-grey" : { "name" : "action-arrow_right-grey", "rule" : ".action-arrow_right-grey", "hash" : "1d71f24b7821e63eca17d2c2501892a9" }, "action-arrow_right-white" : { "name" : "action-arrow_right-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-arrow_right", "hash" : "c36b010025e1550fda9dff1d4b677076" }, "action-attach" : { "name" : "action-attach", "rule" : ".action-attach", "hash" : "bc18c0f45652bca9b7f1d9996fef3514" }, "action-attach-grey" : { "name" : "action-attach-grey", "rule" : ".action-attach-grey", "hash" : "ba38e3af334aafa6f42ab01ef8879cef" }, "action-attach-white" : { "name" : "action-attach-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-attach", "hash" : "8f95a2a247a1b2f79c55b76bc62caedb" }, "action-blame" : { "name" : "action-blame", "rule" : ".action-blame", "hash" : "b90fd9e982c92a29b8eb61a02d9276d1" }, "action-blame-grey" : { "name" : "action-blame-grey", "rule" : ".action-blame-grey", "hash" : "dd16c414547b9ced79f95bf8481e9406" }, "action-blame-white" : { "name" : "action-blame-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-blame", "hash" : "f2d2a1a06236432903297bf58cf00138" }, "action-check" : { "name" : "action-check", "rule" : ".action-check", "hash" : "0806a6293f4b6e65112fc17484ae4f70" }, "action-check-grey" : { "name" : "action-check-grey", "rule" : ".action-check-grey", "hash" : "c10d72cc1504f9d5ffccbd26fd798518" }, "action-check-white" : { "name" : "action-check-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-check", "hash" : "6328b4abc8f44954e637c3382e859536" }, "action-comment" : { "name" : "action-comment", "rule" : ".action-comment", "hash" : "e7e0d20602f4a77e90e13e0a60974ce5" }, "action-comment-grey" : { "name" : "action-comment-grey", "rule" : ".action-comment-grey", "hash" : "a0a1f0d0d32fab29c58dcc59c2b6fcb2" }, "action-comment-white" : { "name" : "action-comment-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-comment", "hash" : "370761544111cf3d6a8878927baa9199" }, "action-computer" : { "name" : "action-computer", "rule" : ".action-computer", "hash" : "b724d76f98fff7bc187f40cc23c06bc8" }, "action-computer-grey" : { "name" : "action-computer-grey", "rule" : ".action-computer-grey", "hash" : "3c46bda86e5c60b81909c1fa1395bb14" }, "action-computer-white" : { "name" : "action-computer-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-computer", "hash" : "82cef35cbea64a3ee60a9b71f2a1c583" }, "action-create" : { "name" : "action-create", "rule" : ".action-create", "hash" : "360c79b389e5f3667f9be3ec47b3f248" }, "action-create-grey" : { "name" : "action-create-grey", "rule" : ".action-create-grey", "hash" : "03ac5c89de22f74442fab30ca777119f" }, "action-create-white" : { "name" : "action-create-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-create", "hash" : "126f91b6c84a5f6d5b60b347b690d12c" }, "action-delete" : { "name" : "action-delete", "rule" : ".action-delete", "hash" : "3bcd865dc1d46645735cd97400ff8aba" }, "action-delete-grey" : { "name" : "action-delete-grey", "rule" : ".action-delete-grey", "hash" : "272c2791dbbaa37e9240e1da45325546" }, "action-delete-white" : { "name" : "action-delete-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-delete", "hash" : "e773f5117a9a29f3fa338e7ef8dc1780" }, "action-disable" : { "name" : "action-disable", "rule" : ".action-disable", "hash" : "d9b0d16bdeaad39ccd881641c3bbd966" }, "action-disable-grey" : { "name" : "action-disable-grey", "rule" : ".action-disable-grey", "hash" : "7ff9a4502d1ae097d105b96d05e0ac64" }, "action-disable-white" : { "name" : "action-disable-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-disable", "hash" : "eae52c680ce1bc0b529a76a200cc52df" }, "action-dislike" : { "name" : "action-dislike", "rule" : ".action-dislike", "hash" : "12234ae1fff0a0cae4a3b08366dc8e76" }, "action-dislike-grey" : { "name" : "action-dislike-grey", "rule" : ".action-dislike-grey", "hash" : "b75e2fb881f80263a943aae46e866da5" }, "action-dislike-white" : { "name" : "action-dislike-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-dislike", "hash" : "045543b094cdcd888d64860869cc6e5b" }, "action-download" : { "name" : "action-download", "rule" : ".action-download", "hash" : "d833c952e92afabe38f22afd797bd930" }, "action-download-grey" : { "name" : "action-download-grey", "rule" : ".action-download-grey", "hash" : "57676a6e25d26648d1fd9a8a8f580771" }, "action-download-white" : { "name" : "action-download-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-download", "hash" : "cc5c770af0fd5a1097c743c99fd27985" }, "action-edit" : { "name" : "action-edit", "rule" : ".action-edit", "hash" : "7a689907e70134d9b959cce8b9563f78" }, "action-edit-grey" : { "name" : "action-edit-grey", "rule" : ".action-edit-grey", "hash" : "180a369e4ebfd663bac4b0f71c6fd6e0" }, "action-edit-white" : { "name" : "action-edit-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-edit", "hash" : "8c1e028cdcffd4b5f2b2b1ffbefd94aa" }, "action-enable" : { "name" : "action-enable", "rule" : ".action-enable", "hash" : "44a48b59d175cbf76ed76c5f10f37e99" }, "action-enable-grey" : { "name" : "action-enable-grey", "rule" : ".action-enable-grey", "hash" : "8bfde2b13363e83c2980bb67a756b46e" }, "action-enable-white" : { "name" : "action-enable-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-enable", "hash" : "455194cf17fcced25cbc0156951180fd" }, "action-file" : { "name" : "action-file", "rule" : ".action-file", "hash" : "ae34ce5e62b1bc3c4dc6da4f7fbf7447" }, "action-file-grey" : { "name" : "action-file-grey", "rule" : ".action-file-grey", "hash" : "1eb8c0b693fa2ee7a71fe6ef885b20eb" }, "action-file-white" : { "name" : "action-file-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-file", "hash" : "fc348080a6fa3d845f8da0dba1f0accf" }, "action-flag" : { "name" : "action-flag", "rule" : ".action-flag", "hash" : "6c005cc20af556cd6131747654444ec6" }, "action-flag-0" : { "name" : "action-flag-0", "rule" : ".action-flag-0", "hash" : "b6147505c95144f0ce6c5bc4c74a3bf3" }, "action-flag-0-grey" : { "name" : "action-flag-0-grey", "rule" : ".action-flag-0-grey", "hash" : "6422b4d1e9878dfedc7ec670ba97c9ac" }, "action-flag-0-white" : { "name" : "action-flag-0-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-flag-0", "hash" : "44e72a52052200846fcf3d7dd13d1247" }, "action-flag-1" : { "name" : "action-flag-1", "rule" : ".action-flag-1", "hash" : "7c9c162d50e8496e373b719ef7b507b6" }, "action-flag-1-grey" : { "name" : "action-flag-1-grey", "rule" : ".action-flag-1-grey", "hash" : "1bc1b824544c19f83c0c564fba07e504" }, "action-flag-1-white" : { "name" : "action-flag-1-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-flag-1", "hash" : "83e63386c1b5fe0a2580c57dcd3d5bc8" }, "action-flag-2" : { "name" : "action-flag-2", "rule" : ".action-flag-2", "hash" : "c6c1a0a1d66e4a492989af2e5a784c34" }, "action-flag-2-grey" : { "name" : "action-flag-2-grey", "rule" : ".action-flag-2-grey", "hash" : "b80cf86cae93a20a87d8cb8c742b9576" }, "action-flag-2-white" : { "name" : "action-flag-2-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-flag-2", "hash" : "86e4cdc53d9101f144455114ec01856b" }, "action-flag-3" : { "name" : "action-flag-3", "rule" : ".action-flag-3", "hash" : "8bbc031251a1834d6ede293474d62545" }, "action-flag-3-grey" : { "name" : "action-flag-3-grey", "rule" : ".action-flag-3-grey", "hash" : "0c4934d095a7a6ffa4ee734203af3616" }, "action-flag-3-white" : { "name" : "action-flag-3-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-flag-3", "hash" : "de92148b46fa30ed3e5cfdc63c941213" }, "action-flag-4" : { "name" : "action-flag-4", "rule" : ".action-flag-4", "hash" : "2ba2c89181a1f7949a1e9ac93bce41e3" }, "action-flag-4-grey" : { "name" : "action-flag-4-grey", "rule" : ".action-flag-4-grey", "hash" : "84594202eff4dd72abcf3ae30f8138b0" }, "action-flag-4-white" : { "name" : "action-flag-4-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-flag-4", "hash" : "832420753c9481e7fc0de1b16d465951" }, "action-flag-5" : { "name" : "action-flag-5", "rule" : ".action-flag-5", "hash" : "922270dee1b7b36be6845008352d34e8" }, "action-flag-5-grey" : { "name" : "action-flag-5-grey", "rule" : ".action-flag-5-grey", "hash" : "3471ceb4994112b0a6e48eeb50ad8c90" }, "action-flag-5-white" : { "name" : "action-flag-5-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-flag-5", "hash" : "d80426ed6dad58d6b557adc3b08a35c2" }, "action-flag-6" : { "name" : "action-flag-6", "rule" : ".action-flag-6", "hash" : "02c3fb78cc75105605659578e75acfc3" }, "action-flag-6-grey" : { "name" : "action-flag-6-grey", "rule" : ".action-flag-6-grey", "hash" : "8ab1cde8884759e77030c9343d177bdb" }, "action-flag-6-white" : { "name" : "action-flag-6-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-flag-6", "hash" : "40bf7e2b36e70d02fab3cdf7e7eece36" }, "action-flag-7" : { "name" : "action-flag-7", "rule" : ".action-flag-7", "hash" : "f4c757e27875d55e914608fecc190849" }, "action-flag-7-grey" : { "name" : "action-flag-7-grey", "rule" : ".action-flag-7-grey", "hash" : "d16921bf53cd5142c7fea2177511bb9e" }, "action-flag-7-white" : { "name" : "action-flag-7-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-flag-7", "hash" : "5972a5f1e3ecff9146727ebfb43c5956" }, "action-flag-ghost" : { "name" : "action-flag-ghost", "rule" : ".action-flag-ghost", "hash" : "80d651f12e09ec81435612e06e28a2e2" }, "action-flag-ghost-grey" : { "name" : "action-flag-ghost-grey", "rule" : ".action-flag-ghost-grey", "hash" : "6a5ee12fc2f0f7961e646c3a335e2703" }, "action-flag-ghost-white" : { "name" : "action-flag-ghost-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-flag-ghost", "hash" : "ff05197e8a66b1fb1037c93f3c52d866" }, "action-flag-grey" : { "name" : "action-flag-grey", "rule" : ".action-flag-grey", "hash" : "cf991807516bcdd9c175463cba0ddf6d" }, "action-flag-white" : { "name" : "action-flag-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-flag", "hash" : "bb03676086c8af46377bb61593af0baa" }, "action-folder-open" : { "name" : "action-folder-open", "rule" : ".action-folder-open", "hash" : "3626a7bee8e8e0f846c5bc1432cd21a7" }, "action-folder-open-grey" : { "name" : "action-folder-open-grey", "rule" : ".action-folder-open-grey", "hash" : "5920e7bc4385d3efe46eb0e9ba28f828" }, "action-folder-open-white" : { "name" : "action-folder-open-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-folder-open", "hash" : "5ccf5cfa0f446a522e55f64fe3ceed76" }, "action-fork" : { "name" : "action-fork", "rule" : ".action-fork", "hash" : "f2786a0553793e4eafd5088c325d3bf1" }, "action-fork-grey" : { "name" : "action-fork-grey", "rule" : ".action-fork-grey", "hash" : "b21de87ac4434cc79360d7f1f86b9feb" }, "action-fork-white" : { "name" : "action-fork-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-fork", "hash" : "68f97284072a6ff630261af74629c884" }, "action-herald" : { "name" : "action-herald", "rule" : ".action-herald", "hash" : "a09777d816e1c3ec7ca1f024413d853a" }, "action-herald-grey" : { "name" : "action-herald-grey", "rule" : ".action-herald-grey", "hash" : "b091b3f6776f0620b77f7943e2723354" }, "action-herald-white" : { "name" : "action-herald-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-herald", "hash" : "a30bd0191721e4ab028338c4c7ebdfa8" }, "action-highlight" : { "name" : "action-highlight", "rule" : ".action-highlight", "hash" : "c25f409ae6b43aa8edc28aac44bdb648" }, "action-highlight-grey" : { "name" : "action-highlight-grey", "rule" : ".action-highlight-grey", "hash" : "0638dc63d844cd03441457999486e295" }, "action-highlight-white" : { "name" : "action-highlight-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-highlight", "hash" : "27e28bec94c1652eef5c556f23aa1dd6" }, "action-history" : { "name" : "action-history", "rule" : ".action-history", "hash" : "2ce835c4d455cf7ebb7914c6387a29ab" }, "action-history-grey" : { "name" : "action-history-grey", "rule" : ".action-history-grey", "hash" : "8685d466a6450d1055bb25782316af17" }, "action-history-white" : { "name" : "action-history-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-history", "hash" : "2c57ad5babe37b8335e88c5464c5529c" }, "action-image" : { "name" : "action-image", "rule" : ".action-image", "hash" : "7e2d0b5937124146c8da254601d34d15" }, "action-image-grey" : { "name" : "action-image-grey", "rule" : ".action-image-grey", "hash" : "cc5392a9d8deb9b3a30b370924635eb1" }, "action-image-white" : { "name" : "action-image-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-image", "hash" : "66ee76f5242792c0c274980df9bd9d58" }, "action-like" : { "name" : "action-like", "rule" : ".action-like", "hash" : "f024649c9c2a82e0ad0afdd8884a2c7d" }, "action-like-grey" : { "name" : "action-like-grey", "rule" : ".action-like-grey", "hash" : "a89fdf2f499e762b97f54c507715bde6" }, "action-like-white" : { "name" : "action-like-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-like", "hash" : "bd1a5fad4c83353e476378fc1d99c6e1" }, "action-link" : { "name" : "action-link", "rule" : ".action-link", "hash" : "7c37d22aafdfd860b942d5fbcdc4975c" }, "action-link-grey" : { "name" : "action-link-grey", "rule" : ".action-link-grey", "hash" : "8139d52194b607e8c73d5a2124a28329" }, "action-link-white" : { "name" : "action-link-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-link", "hash" : "157c08f843f6f30cf3561349f8e4ddbd" }, "action-lint-info" : { "name" : "action-lint-info", "rule" : ".action-lint-info", "hash" : "65c2692a045b7446c4312e1b7331701d" }, "action-lint-info-grey" : { "name" : "action-lint-info-grey", "rule" : ".action-lint-info-grey", "hash" : "4a0ca839249567756774af56977888cb" }, "action-lint-info-white" : { "name" : "action-lint-info-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-lint-info", "hash" : "cf5a05749979f6701d4b3de53acca500" }, "action-lint-ok" : { "name" : "action-lint-ok", "rule" : ".action-lint-ok", "hash" : "7637e89a5ed282988c0427b61abb56a0" }, "action-lint-ok-grey" : { "name" : "action-lint-ok-grey", "rule" : ".action-lint-ok-grey", "hash" : "1c71c359debb765d73f1ee9b5b98ba3d" }, "action-lint-ok-white" : { "name" : "action-lint-ok-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-lint-ok", "hash" : "faaa9e076d5012af17a73f9f09b6ede8" }, "action-lint-warning" : { "name" : "action-lint-warning", "rule" : ".action-lint-warning", "hash" : "b79d4525ef1806bf0cb524a7e7490af7" }, "action-lint-warning-grey" : { "name" : "action-lint-warning-grey", "rule" : ".action-lint-warning-grey", "hash" : "c522bb48f7d328b8230b5ecc2dac3d1f" }, "action-lint-warning-white" : { "name" : "action-lint-warning-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-lint-warning", "hash" : "4a13ffad1125caf3656a276e4c40c907" }, "action-lock" : { "name" : "action-lock", "rule" : ".action-lock", "hash" : "943a4495056310f22bbbc2e64997ec74" }, "action-lock-grey" : { "name" : "action-lock-grey", "rule" : ".action-lock-grey", "hash" : "514bd65df15aaeeb35148d8c673e8718" }, "action-lock-white" : { "name" : "action-lock-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-lock", "hash" : "1cd87a6ffac7f03535faa6109e69dcfa" }, "action-love" : { "name" : "action-love", "rule" : ".action-love", "hash" : "498bcb15f80897b768762c540b51ff91" }, "action-love-grey" : { "name" : "action-love-grey", "rule" : ".action-love-grey", "hash" : "07fa2968a8d447a20d0f5ae0f42fa454" }, "action-love-white" : { "name" : "action-love-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-love", "hash" : "3fe85e0ad08e6f0151765ab5ce5624b0" }, "action-merge" : { "name" : "action-merge", "rule" : ".action-merge", "hash" : "c9ebe633aa17cc26cd454711e21e6686" }, "action-merge-grey" : { "name" : "action-merge-grey", "rule" : ".action-merge-grey", "hash" : "028f56f351b8021fe526824230170a48" }, "action-merge-white" : { "name" : "action-merge-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-merge", "hash" : "334f751f7a9531af3e383bce06a0a2ff" }, "action-message" : { "name" : "action-message", "rule" : ".action-message", "hash" : "33db2ccd98bcbbe6bf8fae278ad2c2fc" }, "action-message-grey" : { "name" : "action-message-grey", "rule" : ".action-message-grey", "hash" : "306ee80f9f635f045ce15fe0c0a684c5" }, "action-message-white" : { "name" : "action-message-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-message", "hash" : "d7ad1f04ffcd3e96cee0d81af509e77c" }, "action-meta-mta" : { "name" : "action-meta-mta", "rule" : ".action-meta-mta", "hash" : "bb8d824fef25830bda0929ae8e299147" }, "action-meta-mta-grey" : { "name" : "action-meta-mta-grey", "rule" : ".action-meta-mta-grey", "hash" : "e3e3b26c8c55628b27f9342df865edbf" }, "action-meta-mta-white" : { "name" : "action-meta-mta-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-meta-mta", "hash" : "0455c2a3f7111e88daec4ddd68c9528a" }, "action-move" : { "name" : "action-move", "rule" : ".action-move", "hash" : "4cb5767570d935747f9338b8da9399df" }, "action-move-grey" : { "name" : "action-move-grey", "rule" : ".action-move-grey", "hash" : "d8bc3bdd62fc5dbc613875c9be75d7e1" }, "action-move-white" : { "name" : "action-move-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-move", "hash" : "eb654087894d3bc7229d17b221eafcf0" }, "action-new" : { "name" : "action-new", "rule" : ".action-new", "hash" : "28a4a88aec75c601347d6dd0d9143de5" }, "action-new-grey" : { "name" : "action-new-grey", "rule" : ".action-new-grey", "hash" : "724855bb4c8eae16593ae6fba5653f7a" }, "action-new-white" : { "name" : "action-new-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-new", "hash" : "21b047ec502a24eabe1f57fda5cd2fc1" }, "action-perflab" : { "name" : "action-perflab", "rule" : ".action-perflab", "hash" : "4449e5eb4780114dbafbfe2c7be538de" }, "action-perflab-grey" : { "name" : "action-perflab-grey", "rule" : ".action-perflab-grey", "hash" : "51414c80d753daa37f7deaa2cf4e5bc6" }, "action-perflab-white" : { "name" : "action-perflab-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-perflab", "hash" : "e00e31057d557047300da57a5d07837e" }, "action-preview" : { "name" : "action-preview", "rule" : ".action-preview", "hash" : "069500f028ae272c474920785723247c" }, "action-preview-grey" : { "name" : "action-preview-grey", "rule" : ".action-preview-grey", "hash" : "522f17cdaee1af29c3073e21eb1fb7a6" }, "action-preview-white" : { "name" : "action-preview-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-preview", "hash" : "c62768ba193052c527ce7d499fd9f662" }, "action-refresh" : { "name" : "action-refresh", "rule" : ".action-refresh", "hash" : "ef02448a2a4cbe830b56d3cbd9444ffd" }, "action-refresh-grey" : { "name" : "action-refresh-grey", "rule" : ".action-refresh-grey", "hash" : "24030ea198e22ed84891fa3698d891e4" }, "action-refresh-white" : { "name" : "action-refresh-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-refresh", "hash" : "7800f18fbd6dde59e2ae91d695002318" }, "action-remove" : { "name" : "action-remove", "rule" : ".action-remove", "hash" : "69bf8194a7c539bdd6b7b8ad888d7260" }, "action-remove-grey" : { "name" : "action-remove-grey", "rule" : ".action-remove-grey", "hash" : "41abfeb5561b52b686943ac4da8f0876" }, "action-remove-white" : { "name" : "action-remove-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-remove", "hash" : "24542d8d3890c8e89b7d60d0efd99e9c" }, "action-search" : { "name" : "action-search", "rule" : ".action-search", "hash" : "8fbe318c0633c3de3ce6eb331f891d5c" }, "action-search-grey" : { "name" : "action-search-grey", "rule" : ".action-search-grey", "hash" : "a58f5ea5770836de72f67a18b2a2d92b" }, "action-search-white" : { "name" : "action-search-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-search", "hash" : "1c1a7b4ac122c6ffa56edda3c7ce35b0" }, "action-start-sandcastle" : { "name" : "action-start-sandcastle", "rule" : ".action-start-sandcastle", "hash" : "5aa74bb11fbc26b941f6fa0ed7507c64" }, "action-start-sandcastle-grey" : { "name" : "action-start-sandcastle-grey", "rule" : ".action-start-sandcastle-grey", "hash" : "a65b85198bdbed8d5563c515d475316a" }, "action-start-sandcastle-white" : { "name" : "action-start-sandcastle-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-start-sandcastle", "hash" : "b99feb063a1e56833419119f426455f0" }, "action-subscribe-add" : { "name" : "action-subscribe-add", "rule" : ".action-subscribe-add", "hash" : "5a47685848c39d5449b8ec0985a627e7" }, "action-subscribe-add-grey" : { "name" : "action-subscribe-add-grey", "rule" : ".action-subscribe-add-grey", "hash" : "a691ac944079cee6655ff9f4ab321de3" }, "action-subscribe-add-white" : { "name" : "action-subscribe-add-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-subscribe-add", "hash" : "1173fbd24131329e2e0c81893c1bd412" }, "action-subscribe-auto" : { "name" : "action-subscribe-auto", "rule" : ".action-subscribe-auto", "hash" : "01f6ea8fb35628abe6641b6e88c27c1e" }, "action-subscribe-auto-grey" : { "name" : "action-subscribe-auto-grey", "rule" : ".action-subscribe-auto-grey", "hash" : "b956dec1b5ae1d9ae6addffb3aa77a7f" }, "action-subscribe-auto-white" : { "name" : "action-subscribe-auto-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-subscribe-auto", "hash" : "8525c0d691c327ddb0500cc27bfa9822" }, "action-subscribe-delete" : { "name" : "action-subscribe-delete", "rule" : ".action-subscribe-delete", "hash" : "0d91e4d61349e9e1b7141fdc8d333d84" }, "action-subscribe-delete-grey" : { "name" : "action-subscribe-delete-grey", "rule" : ".action-subscribe-delete-grey", "hash" : "16895241e0f9e62610c99e940ee3bcbc" }, "action-subscribe-delete-white" : { "name" : "action-subscribe-delete-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-subscribe-delete", "hash" : "e9d5f98355e04b3404706581f6597569" }, "action-tag" : { "name" : "action-tag", "rule" : ".action-tag", "hash" : "d4b219d1272879dd50621439e1f33a72" }, "action-tag-grey" : { "name" : "action-tag-grey", "rule" : ".action-tag-grey", "hash" : "08507569a675ef6cc85b17870f9f2e91" }, "action-tag-white" : { "name" : "action-tag-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-tag", "hash" : "aed3d83123f33e69ae4b7338b23f7c9c" }, "action-transcript" : { "name" : "action-transcript", "rule" : ".action-transcript", "hash" : "055b6b1a2999d017fcf87f96c2796c49" }, "action-transcript-grey" : { "name" : "action-transcript-grey", "rule" : ".action-transcript-grey", "hash" : "81f66da48452c5235aa9d84edd7831d3" }, "action-transcript-white" : { "name" : "action-transcript-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-transcript", "hash" : "e56f623fdf8f059bb80c24944dec6af6" }, "action-undo" : { "name" : "action-undo", "rule" : ".action-undo", "hash" : "8f8586333203f466a681b0721cf1b57b" }, "action-undo-grey" : { "name" : "action-undo-grey", "rule" : ".action-undo-grey", "hash" : "961216a677dc6c38afe2d4e729417bfb" }, "action-undo-white" : { "name" : "action-undo-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-undo", "hash" : "97bd8f43a4db2a97d53975ce42a6232d" }, "action-unlock" : { "name" : "action-unlock", "rule" : ".action-unlock", "hash" : "f9d34e15f51777198f307d63d635e1ac" }, "action-unlock-grey" : { "name" : "action-unlock-grey", "rule" : ".action-unlock-grey", "hash" : "4e7908dc34c83a6b8dab8c4dd554a98a" }, "action-unlock-white" : { "name" : "action-unlock-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-unlock", "hash" : "ceb342bc0a17310cf58c90fd3bb53ce1" }, "action-unmerge" : { "name" : "action-unmerge", "rule" : ".action-unmerge", "hash" : "f994dd276cab26c3d5968d0b946dd8bc" }, "action-unmerge-grey" : { "name" : "action-unmerge-grey", "rule" : ".action-unmerge-grey", "hash" : "3a82fed2967d8a9d5fe9651c38055db7" }, "action-unmerge-white" : { "name" : "action-unmerge-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-unmerge", "hash" : "574e4176d9c2243050958182e487f239" }, "action-unpublish" : { "name" : "action-unpublish", "rule" : ".action-unpublish", "hash" : "c2241706bf6857b24ba1739a2fe281b1" }, "action-unpublish-grey" : { "name" : "action-unpublish-grey", "rule" : ".action-unpublish-grey", "hash" : "5c9e548386c85d63f7f21699ba54813e" }, "action-unpublish-white" : { "name" : "action-unpublish-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-unpublish", "hash" : "a37305e8ea29bc41d83d6b5a11aebe9f" }, "action-warning" : { "name" : "action-warning", "rule" : ".action-warning", "hash" : "1c0c7f76a2c43af5532f67f0f8622d7c" }, "action-warning-grey" : { "name" : "action-warning-grey", "rule" : ".action-warning-grey", "hash" : "5dc7b0cd75e629ad91437b15901d990a" }, "action-warning-white" : { "name" : "action-warning-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-warning", "hash" : "c30c2e287bab73ca454712de6cbe2502" }, "action-world" : { "name" : "action-world", "rule" : ".action-world", "hash" : "ae2bf28bf07aab51f54c1ea9beed10cb" }, "action-world-grey" : { "name" : "action-world-grey", "rule" : ".action-world-grey", "hash" : "8d332d48b945f152aaf84a7ca83cfbc2" }, "action-world-white" : { "name" : "action-world-white", "rule" : ".device-desktop .phabricator-action-view:hover .action-world", "hash" : "401df878395c514a443720a8acd1ab63" }, "remarkup-assist-text_b" : { "name" : "remarkup-assist-text_b", "rule" : ".remarkup-assist-b", "hash" : "12c565d4934f6a777c9524baf75cebb6" }, "remarkup-assist-text_code" : { "name" : "remarkup-assist-text_code", "rule" : ".remarkup-assist-code", "hash" : "f06f106cb8edb67e8b99d159d704a61a" }, "remarkup-assist-text_help" : { "name" : "remarkup-assist-text_help", "rule" : ".remarkup-assist-help", "hash" : "9d54d8224b81de8e3ed7beac0e486257" }, "remarkup-assist-text_i" : { "name" : "remarkup-assist-text_i", "rule" : ".remarkup-assist-i", "hash" : "50f83a53f5b094d3d92b619d06fada3c" }, "remarkup-assist-text_image" : { "name" : "remarkup-assist-text_image", "rule" : ".remarkup-assist-image", "hash" : "c2869e71cc7cb6178598cd41a19ababb" }, "remarkup-assist-text_larger" : { "name" : "remarkup-assist-text_larger", "rule" : ".remarkup-assist-larger", "hash" : "d3165f15a1b3734e4b7088f7b74330ba" }, "remarkup-assist-text_meme" : { "name" : "remarkup-assist-text_meme", "rule" : ".remarkup-assist-meme", "hash" : "ed9c4166858ca1caedf5f8e4b8ad587e" }, "remarkup-assist-text_ol" : { "name" : "remarkup-assist-text_ol", "rule" : ".remarkup-assist-ol", "hash" : "266b858f5ffc42760fb2e12913a5198a" }, "remarkup-assist-text_table" : { "name" : "remarkup-assist-text_table", "rule" : ".remarkup-assist-table", "hash" : "5c2961b35460b3b5b7efdd5bc4e318ca" }, "remarkup-assist-text_tag" : { "name" : "remarkup-assist-text_tag", "rule" : ".remarkup-assist-tag", "hash" : "165bd3a4de8d54cf720db9bc64116d25" }, "remarkup-assist-text_tt" : { "name" : "remarkup-assist-text_tt", "rule" : ".remarkup-assist-tt", "hash" : "c07e6816500c9cd66fa27758cc902195" }, "remarkup-assist-text_ul" : { "name" : "remarkup-assist-text_ul", "rule" : ".remarkup-assist-ul", "hash" : "26f55c0fcf9148879e3fb058ac319100" } }, "scales" : [ 1, 2 ], - "header" : "\/**\n * @provides sprite-icon-css\n * @generated\n *\/\n\n.sprite-icon {\n background-image: url(\/rsrc\/image\/sprite-icon.png);\n background-repeat: no-repeat;\n}\n\n@media\nonly screen and (min-device-pixel-ratio: 1.5),\nonly screen and (-webkit-min-device-pixel-ratio: 1.5) {\n .sprite-icon {\n background-image: url(\/rsrc\/image\/sprite-icon-X2.png);\n background-size: {X}px {Y}px;\n }\n}" + "header" : "\/**\n * @provides sprite-icon-css\n * @generated\n *\/\n\n.sprite-icon {\n background-image: url(\/rsrc\/image\/sprite-icon.png);\n background-repeat: no-repeat;\n}\n\n@media\nonly screen and (min-device-pixel-ratio: 1.5),\nonly screen and (-webkit-min-device-pixel-ratio: 1.5) {\n .sprite-icon {\n background-image: url(\/rsrc\/image\/sprite-icon-X2.png);\n background-size: {X}px {Y}px;\n }\n}", + "type" : "standard" } diff --git a/resources/sprite/manifest/menu.json b/resources/sprite/manifest/menu.json index 245e291697..75c4747934 100644 --- a/resources/sprite/manifest/menu.json +++ b/resources/sprite/manifest/menu.json @@ -1,35 +1,41 @@ { "version" : 1, "sprites" : { + "arrow-right" : { + "name" : "arrow-right", + "rule" : ".phabricator-crumb-divider", + "hash" : "a994209450dc73a80841cdd66bb59925" + }, "bubble" : { "name" : "bubble", "rule" : ".phabricator-main-menu-alert-bubble.alert-unread", - "hash" : "07bc6fd60e5c2fa14558c9101cba5261" + "hash" : "1145ac8a137a2a22517c1945fe22c517" }, "round_bubble" : { "name" : "round_bubble", "rule" : ".phabricator-main-menu-alert-bubble", - "hash" : "02de5b1c1720749a566e7a4cf7c2216c" + "hash" : "9be91cc0128997992e9001baf32c8ab8" }, "seen_have_unread" : { "name" : "seen_have_unread", "rule" : ".alert-notifications:hover .phabricator-main-menu-alert-icon", - "hash" : "d0210b3908193ee841db2eeec264a154" + "hash" : "a8a7f07caa726d7e61ef3d41f959d94d" }, "seen_read_all" : { "name" : "seen_read_all", "rule" : ".alert-notifications .phabricator-main-menu-alert-icon", - "hash" : "8d0644ec8fa33330b30b7531272e24f1" + "hash" : "4fdd4807d0c41bd4179dd43150c7fc44" }, "unseen_any" : { "name" : "unseen_any", "rule" : ".alert-notifications.alert-unread .phabricator-main-menu-alert-icon", - "hash" : "0e50bf01f640b2f8231eaef246863f0b" + "hash" : "50d946952c73028b34e0c3378ca36b17" } }, "scales" : [ 1, 2 ], - "header" : "\/**\n * @provides sprite-menu-css\n * @generated\n *\/\n\n.sprite-menu {\n background-image: url(\/rsrc\/image\/sprite-menu.png);\n background-repeat: no-repeat;\n}\n\n@media\nonly screen and (min-device-pixel-ratio: 1.5),\nonly screen and (-webkit-min-device-pixel-ratio: 1.5) {\n .sprite-menu {\n background-image: url(\/rsrc\/image\/sprite-menu-X2.png);\n background-size: {X}px {Y}px;\n }\n}" + "header" : "\/**\n * @provides sprite-menu-css\n * @generated\n *\/\n\n.sprite-menu {\n background-image: url(\/rsrc\/image\/sprite-menu.png);\n background-repeat: no-repeat;\n}\n\n@media\nonly screen and (min-device-pixel-ratio: 1.5),\nonly screen and (-webkit-min-device-pixel-ratio: 1.5) {\n .sprite-menu {\n background-image: url(\/rsrc\/image\/sprite-menu-X2.png);\n background-size: {X}px {Y}px;\n }\n}", + "type" : "standard" } diff --git a/resources/sprite/menu_1x/arrow-right.png b/resources/sprite/menu_1x/arrow-right.png new file mode 100644 index 0000000000..29d43457ce Binary files /dev/null and b/resources/sprite/menu_1x/arrow-right.png differ diff --git a/resources/sprite/notifications_1x/bubble.png b/resources/sprite/menu_1x/bubble.png similarity index 100% rename from resources/sprite/notifications_1x/bubble.png rename to resources/sprite/menu_1x/bubble.png diff --git a/resources/sprite/notifications_1x/round_bubble.png b/resources/sprite/menu_1x/round_bubble.png similarity index 100% rename from resources/sprite/notifications_1x/round_bubble.png rename to resources/sprite/menu_1x/round_bubble.png diff --git a/resources/sprite/notifications_1x/seen_have_unread.png b/resources/sprite/menu_1x/seen_have_unread.png similarity index 100% rename from resources/sprite/notifications_1x/seen_have_unread.png rename to resources/sprite/menu_1x/seen_have_unread.png diff --git a/resources/sprite/notifications_1x/seen_read_all.png b/resources/sprite/menu_1x/seen_read_all.png similarity index 100% rename from resources/sprite/notifications_1x/seen_read_all.png rename to resources/sprite/menu_1x/seen_read_all.png diff --git a/resources/sprite/notifications_1x/unseen_any.png b/resources/sprite/menu_1x/unseen_any.png similarity index 100% rename from resources/sprite/notifications_1x/unseen_any.png rename to resources/sprite/menu_1x/unseen_any.png diff --git a/resources/sprite/menu_2x/arrow-right.png b/resources/sprite/menu_2x/arrow-right.png new file mode 100644 index 0000000000..ae8784fa8c Binary files /dev/null and b/resources/sprite/menu_2x/arrow-right.png differ diff --git a/resources/sprite/notifications_2x/bubble.png b/resources/sprite/menu_2x/bubble.png similarity index 100% rename from resources/sprite/notifications_2x/bubble.png rename to resources/sprite/menu_2x/bubble.png diff --git a/resources/sprite/notifications_2x/round_bubble.png b/resources/sprite/menu_2x/round_bubble.png similarity index 100% rename from resources/sprite/notifications_2x/round_bubble.png rename to resources/sprite/menu_2x/round_bubble.png diff --git a/resources/sprite/notifications_2x/seen_have_unread.png b/resources/sprite/menu_2x/seen_have_unread.png similarity index 100% rename from resources/sprite/notifications_2x/seen_have_unread.png rename to resources/sprite/menu_2x/seen_have_unread.png diff --git a/resources/sprite/notifications_2x/seen_read_all.png b/resources/sprite/menu_2x/seen_read_all.png similarity index 100% rename from resources/sprite/notifications_2x/seen_read_all.png rename to resources/sprite/menu_2x/seen_read_all.png diff --git a/resources/sprite/notifications_2x/unseen_any.png b/resources/sprite/menu_2x/unseen_any.png similarity index 100% rename from resources/sprite/notifications_2x/unseen_any.png rename to resources/sprite/menu_2x/unseen_any.png diff --git a/scripts/celerity/generate_sprites.php b/scripts/celerity/generate_sprites.php index a53e4c3faf..a395d5b76e 100755 --- a/scripts/celerity/generate_sprites.php +++ b/scripts/celerity/generate_sprites.php @@ -1,223 +1,233 @@ #!/usr/bin/env php setTagline('regenerate CSS sprite sheets'); $args->setSynopsis(<<parseStandardArguments(); $args->parse( array( array( 'name' => 'source', 'param' => 'directory', 'help' => 'Directory with sprite sources.', ), array( 'name' => 'force', 'help' => 'Force regeneration even if sources have not changed.', ), )); $srcroot = $args->getArg('source'); if (!$srcroot) { throw new Exception( "You must specify a source directory with '--source'."); } $root = dirname(phutil_get_library_root('phabricator')); $webroot = $root.'/webroot/rsrc'; $webroot = Filesystem::readablePath($webroot); function glx($x) { return (60 + (48 * $x)); } function gly($y) { return (110 + (48 * $y)); } $sheet = new PhutilSpriteSheet(); $at = '@'; $sheet->setCSSHeader(<<setSourceFile($srcroot.'/menu_normal_1x.png') ->setSourceSize(30, 30); $menu_hover_template = id(new PhutilSprite()) ->setSourceFile($srcroot.'/menu_hover_1x.png') ->setSourceSize(30, 30); $menu_selected_template = id(new PhutilSprite()) ->setSourceFile($srcroot.'/menu_selected_1x.png') ->setSourceSize(30, 30); $menu_map = array( '' => $menu_normal_template, '-selected' => $menu_selected_template, ':hover' => $menu_hover_template, ); $icon_map = array( 'help' => array(4, 19), 'settings' => array(0, 28), 'logout' => array(3, 6), 'task' => array(1, 15), ); foreach ($icon_map as $icon => $coords) { list($x, $y) = $coords; foreach ($menu_map as $suffix => $template) { $sheet->addSprite( id(clone $template) + ->setName('menu-item-'.$icon.'-'.$suffix) ->setSourcePosition(glx($x), gly($y)) ->setTargetCSS('.main-menu-item-icon-'.$icon.$suffix)); } } $app_template_large = id(new PhutilSprite()) ->setSourceFile($srcroot.'/application_large_1x.png') ->setSourceSize(60, 60); $app_template_large_hover = id(new PhutilSprite()) ->setSourceFile($srcroot.'/application_large_hover_1x.png') ->setSourceSize(60, 60); $app_template_small = id(new PhutilSprite()) ->setSourceFile($srcroot.'/menu_normal_1x.png') ->setSourceSize(30, 30); $app_template_small_hover = id(new PhutilSprite()) ->setSourceFile($srcroot.'/menu_hover_1x.png') ->setSourceSize(30, 30); $app_template_small_selected = id(new PhutilSprite()) ->setSourceFile($srcroot.'/menu_selected_1x.png') ->setSourceSize(30, 30); $app_source_map = array( '-large' => array($app_template_large, 2), // For the application launch view, we only show hover state on the desktop // because it looks glitchy on touch devices. We show the hover state when // the surrounding is hovered, not the icon itself. '-large /* hover */' => array( $app_template_large_hover, 2, '.device-desktop .phabricator-application-launch-container:hover '), '' => array($app_template_small, 1), // Show hover state only for the desktop. ':hover' => array( $app_template_small_hover, 1, '.device-desktop ', ), '-selected' => array($app_template_small_selected, 1), ); $app_map = array( 'differential' => array(9, 1), 'fact' => array(2, 4), 'mail' => array(0, 1), 'diffusion' => array(7, 13), 'slowvote' => array(1, 4), 'phriction' => array(1, 7), 'maniphest' => array(3, 24), 'flags' => array(6, 26), 'settings' => array(9, 11), 'applications' => array(0, 34), 'default' => array(9, 9), 'people' => array(3, 0), 'ponder' => array(4, 35), 'calendar' => array(5, 4), 'files' => array(6, 3), 'projects' => array(7, 35), 'daemons' => array(7, 6), 'herald' => array(1, 5), 'countdown' => array(7, 5), 'conduit' => array(7, 30), 'feed' => array(3, 11), 'paste' => array(9, 2), 'audit' => array(8, 19), 'uiexample' => array(7, 28), 'phpast' => array(6, 31), 'owners' => array(5, 32), 'phid' => array(9, 25), 'diviner' => array(1, 35), 'repositories' => array(8, 13), 'phame' => array(8, 4), 'macro' => array(0, 31), 'releeph' => array(5, 18), 'drydock' => array(5, 25), ); $xadj = -1; foreach ($app_map as $icon => $coords) { list($x, $y) = $coords; foreach ($app_source_map as $suffix => $spec) { list($template, $scale) = $spec; if (isset($spec[2])) { $prefix = $spec[2]; } else { $prefix = ''; } $sheet->addSprite( id(clone $template) + ->setName('app-'.$icon.'-'.$suffix) ->setSourcePosition(($xadj + glx($x)) * $scale, gly($y) * $scale) ->setTargetCSS($prefix.'.app-'.$icon.$suffix)); } } $sheet->generateImage($webroot.'/image/autosprite.png'); $sheet->generateCSS($webroot.'/css/autosprite.css'); /* -( Icons Sheet )-------------------------------------------------------- */ $generator = new CeleritySpriteGenerator(); $sheets = array( 'icon' => $generator->buildIconSheet(), 'menu' => $generator->buildMenuSheet(), + 'gradient' => $generator->buildGradientSheet(), ); foreach ($sheets as $name => $sheet) { $manifest_path = $root.'/resources/sprite/manifest/'.$name.'.json'; if (!$args->getArg('force')) { if (Filesystem::pathExists($manifest_path)) { $data = Filesystem::readFile($manifest_path); $data = json_decode($data, true); if (!$sheet->needsRegeneration($data)) { continue; } } } $sheet - ->generateImage($webroot."/image/sprite-{$name}.png", 1) - ->generateImage($webroot."/image/sprite-{$name}-X2.png", 2) ->generateCSS($webroot."/css/sprite-{$name}.css") ->generateManifest($root."/resources/sprite/manifest/{$name}.json"); + + foreach ($sheet->getScales() as $scale) { + if ($scale == 1) { + $sheet_name = "sprite-{$name}.png"; + } else { + $sheet_name = "sprite-{$name}-X{$scale}.png"; + } + $sheet->generateImage("{$webroot}/image/{$sheet_name}", $scale); + } } echo "Done.\n"; diff --git a/src/infrastructure/celerity/CeleritySpriteGenerator.php b/src/infrastructure/celerity/CeleritySpriteGenerator.php index 77d588e40c..4d88b69c99 100644 --- a/src/infrastructure/celerity/CeleritySpriteGenerator.php +++ b/src/infrastructure/celerity/CeleritySpriteGenerator.php @@ -1,196 +1,276 @@ getDirectoryList('icons_1x'); $colors = array( '', 'grey', 'white', ); $scales = array( '1x' => 1, '2x' => 2, ); $template = id(new PhutilSprite()) ->setSourceSize(14, 14); $sprites = array(); foreach ($colors as $color) { foreach ($icons as $icon) { $prefix = 'icons_'; if (strlen($color)) { $prefix .= $color.'_'; } $suffix = ''; if (strlen($color)) { $suffix = '-'.$color; } $sprite = id(clone $template) ->setName('action-'.$icon.$suffix); if ($color == 'white') { $sprite->setTargetCSS( '.device-desktop .phabricator-action-view:hover .action-'.$icon); } else { $sprite->setTargetCSS('.action-'.$icon.$suffix); } foreach ($scales as $scale_key => $scale) { $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png'); $sprite->setSourceFile($path, $scale); } $sprites[] = $sprite; } } $remarkup_icons = $this->getDirectoryList('remarkup_1x'); foreach ($remarkup_icons as $icon) { $prefix = 'remarkup_'; // Strip 'text_' from these file names. $class_name = substr($icon, 5); $sprite = id(clone $template) ->setName('remarkup-assist-'.$icon) ->setTargetCSS('.remarkup-assist-'.$class_name); foreach ($scales as $scale_key => $scale) { $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png'); $sprite->setSourceFile($path, $scale); } $sprites[] = $sprite; } $sheet = $this->buildSheet('icon'); $sheet->setScales($scales); foreach ($sprites as $sprite) { $sheet->addSprite($sprite); } return $sheet; } public function buildMenuSheet() { $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, 'css' => '.alert-notifications .phabricator-main-menu-alert-icon', ), 'seen_have_unread' => array( 'x' => 14, 'y' => 14, 'css' => '.alert-notifications:hover .phabricator-main-menu-alert-icon', ), 'unseen_any' => array( 'x' => 14, 'y' => 14, 'css' => '.alert-notifications.alert-unread .phabricator-main-menu-alert-icon', ), + 'arrow-right' => array( + 'x' => 9, + 'y' => 31, + 'css' => '.phabricator-crumb-divider', + ), ); $scales = array( '1x' => 1, '2x' => 2, ); $template = new PhutilSprite(); foreach ($sources as $name => $spec) { $sprite = id(clone $template) ->setName($name) ->setSourceSize($spec['x'], $spec['y']) ->setTargetCSS($spec['css']); foreach ($scales as $scale_name => $scale) { - $path = 'notifications_'.$scale_name.'/'.$name.'.png'; + $path = 'menu_'.$scale_name.'/'.$name.'.png'; $path = $this->getPath($path); $sprite->setSourceFile($path, $scale); } $sprites[] = $sprite; } $sheet = $this->buildSheet('menu'); $sheet->setScales($scales); foreach ($sprites as $sprite) { $sheet->addSprite($sprite); } return $sheet; } + public function buildGradientSheet() { + $gradients = $this->getDirectoryList('gradients'); + + $template = new PhutilSprite(); + + $unusual_heights = array( + 'dark-menu-label' => 25, + 'breadcrumbs' => 31, + ); + + // 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_select_keys( + $gradients, + array( + 'blue-dark', + 'blue-light', + )) + $gradients; + + $extra_css = array( + 'black-dark' => ', button.black, a.black, a.black:visited', + 'black-light' => ', button.black:active, a.black:active', + 'blue-dark' => ', button, a.button, a.button:visited, input.inputsubmit', + 'blue-light' => ', button:active, a.button:active', + 'grey-dark' => ', button.grey, input.inputaux, a.grey, a.grey:visited, '. + 'a.button.disabled, button[disabled], button.disabled', + 'grey-light' => ', button.grey:active, a.grey:active, '. + 'button.grey_active, a.dropdown-open', + 'green-dark' => ', button.green, a.green, a.green:visited', + 'green-light' => ', button.green:active, a.green:active', + ); + + $sprites = array(); + foreach ($gradients as $gradient) { + $path = $this->getPath('gradients/'.$gradient.'.png'); + $sprite = id(clone $template) + ->setName('gradient-'.$gradient) + ->setSourceFile($path) + ->setTargetCSS('.gradient-'.$gradient.idx($extra_css, $gradient)); + + $sprite->setSourceSize(4, idx($unusual_heights, $gradient, 26)); + + $sprites[] = $sprite; + } + + $sheet = $this->buildSheet( + 'gradient', + PhutilSpriteSheet::TYPE_REPEAT_X, + ', button, a.button, a.button:visited, input.inputsubmit'); + foreach ($sprites as $sprite) { + $sheet->addSprite($sprite); + } + + return $sheet; + } + + private function getPath($to_path = null) { $root = dirname(phutil_get_library_root('phabricator')); return $root.'/resources/sprite/'.$to_path; } private function getDirectoryList($dir) { $path = $this->getPath($dir); $result = array(); $images = Filesystem::listDirectory($path, $include_hidden = false); foreach ($images as $image) { if (!preg_match('/\.png$/', $image)) { throw new Exception( "Expected file '{$image}' in '{$path}' to be a sprite source ". "ending in '.png'."); } $result[] = substr($image, 0, -4); } return $result; } - private function buildSheet($name) { + private function buildSheet($name, $type = null, $extra_css = '') { $sheet = new PhutilSpriteSheet(); $at = '@'; + + switch ($type) { + case PhutilSpriteSheet::TYPE_STANDARD: + default: + $type = PhutilSpriteSheet::TYPE_STANDARD; + $repeat_rule = 'no-repeat'; + break; + case PhutilSpriteSheet::TYPE_REPEAT_X: + $repeat_rule = 'repeat-x'; + break; + case PhutilSpriteSheet::TYPE_REPEAT_Y: + $repeat_rule = 'repeat-y'; + break; + } + + $sheet->setSheetType($type); $sheet->setCSSHeader(<<setBaseURI($some_uri) * ->addLabel('Cats') * ->addFilter('meow', 'Meow') * ->addFilter('purr', 'Purr') * ->addSpacer() * ->addLabel('Dogs') * ->addFilter('woof', 'Woof') * ->addFilter('bark', 'Bark'); * $valid_filter = $nav->selectFilter($user_selection, $default = 'meow'); * */ final class AphrontSideNavFilterView extends AphrontView { private $items = array(); private $baseURI; private $selectedFilter = false; private $flexNav; private $flexible; private $user; private $active; private $menu; private $crumbs; public function __construct() { $this->menu = new PhabricatorMenuView(); } public function setCrumbs(PhabricatorCrumbsView $crumbs) { $this->crumbs = $crumbs; return $this; } public function getCrumbs() { return $this->crumbs; } public function setActive($active) { $this->active = $active; return $this; } public function setUser(PhabricatorUser $user) { $this->user = $user; return $this; } public function setFlexNav($flex_nav) { $this->flexNav = $flex_nav; return $this; } public function setFlexible($flexible) { $this->flexible = $flexible; return $this; } public function getMenuView() { return $this->menu; } public function addMenuItem(PhabricatorMenuItemView $item) { $this->menu->addMenuItem($item); return $this; } public function getMenu() { return $this->menu; } public function addFilter( $key, $name, $uri = null) { $item = id(new PhabricatorMenuItemView()) ->setKey($key) ->setName($name); if ($uri) { $item->setHref($uri); } else { $href = clone $this->baseURI; $href->setPath(rtrim($href->getPath().$key, '/').'/'); $href = (string)$href; $item->setHref($href); } return $this->addMenuItem($item); } public function addCustomBlock($block) { $this->menu->appendChild($block); return $this; } public function addLabel($name) { return $this->addMenuItem( id(new PhabricatorMenuItemView()) ->setType(PhabricatorMenuItemView::TYPE_LABEL) ->setName($name)); } public function addSpacer() { return $this->addMenuItem( id(new PhabricatorMenuItemView()) ->setType(PhabricatorMenuItemView::TYPE_SPACER)); } public function setBaseURI(PhutilURI $uri) { $this->baseURI = $uri; return $this; } public function getBaseURI() { return $this->baseURI; } public function selectFilter($key, $default = null) { $this->selectedFilter = $default; if ($this->menu->getItem($key)) { $this->selectedFilter = $key; } return $this->selectedFilter; } public function getSelectedFilter() { return $this->selectedFilter; } public function render() { if ($this->menu->getItems()) { if (!$this->baseURI) { throw new Exception("Call setBaseURI() before render()!"); } if ($this->selectedFilter === false) { throw new Exception("Call selectFilter() before render()!"); } } $selected_item = $this->menu->getItem($this->selectedFilter); if ($selected_item) { $selected_item->addClass('phabricator-menu-item-selected'); } require_celerity_resource('phabricator-side-menu-view-css'); if ($this->flexNav) { return $this->renderFlexNav(); } else { return $this->renderLegacyNav(); } } private function renderFlexNav() { $user = $this->user; require_celerity_resource('phabricator-nav-view-css'); $nav_classes = array(); $nav_classes[] = 'phabricator-nav'; $nav_id = null; $drag_id = null; $content_id = celerity_generate_unique_node_id(); $local_id = null; $local_menu = null; $main_id = celerity_generate_unique_node_id(); if ($this->flexible) { $drag_id = celerity_generate_unique_node_id(); $flex_bar = phutil_render_tag( 'div', array( 'class' => 'phabricator-nav-drag', 'id' => $drag_id, ), ''); } else { $flex_bar = null; } $nav_menu = null; if ($this->menu->getItems()) { $local_id = celerity_generate_unique_node_id(); $nav_classes[] = 'has-local-nav'; $local_menu = phutil_render_tag( 'div', array( 'class' => 'phabricator-nav-col phabricator-nav-local '. 'phabricator-side-menu', 'id' => $local_id, ), self::renderSingleView($this->menu)); } $crumbs = null; if ($this->crumbs) { $crumbs = $this->crumbs->render(); $nav_classes[] = 'has-crumbs'; } Javelin::initBehavior( 'phabricator-nav', array( 'mainID' => $main_id, 'localID' => $local_id, 'dragID' => $drag_id, 'contentID' => $content_id, - 'menuSize' => ($crumbs ? 78 : 44), + 'menuSize' => ($crumbs ? 76 : 44), )); if ($this->active && $local_id) { Javelin::initBehavior( 'phabricator-active-nav', array( 'localID' => $local_id, )); } return $crumbs.phutil_render_tag( 'div', array( 'class' => implode(' ', $nav_classes), 'id' => $main_id, ), $local_menu. $flex_bar. phutil_render_tag( 'div', array( 'class' => 'phabricator-nav-content', 'id' => $content_id, ), $this->renderChildren())); } public function renderLegacyNav() { require_celerity_resource('aphront-side-nav-view-css'); return ''. ''. ''. ''. ''. '
'. self::renderSingleView($this->menu). ''. $this->renderChildren(). '
'; } } diff --git a/src/view/layout/PhabricatorCrumbView.php b/src/view/layout/PhabricatorCrumbView.php index 20d7a888d8..65f522649f 100644 --- a/src/view/layout/PhabricatorCrumbView.php +++ b/src/view/layout/PhabricatorCrumbView.php @@ -1,77 +1,77 @@ name = $name; return $this; } public function setHref($href) { $this->href = $href; return $this; } public function setIcon($icon) { $this->icon = $icon; return $this; } protected function canAppendChild() { return false; } public function setIsLastCrumb($is_last_crumb) { $this->isLastCrumb = $is_last_crumb; return $this; } public function render() { $classes = array( 'phabricator-crumb-view', ); $icon = null; if ($this->icon) { $classes[] = 'phabricator-crumb-has-icon'; $icon = phutil_render_tag( 'span', array( 'class' => 'phabricator-crumb-icon '.$this->icon, ), ''); } $name = phutil_render_tag( 'span', array( 'class' => 'phabricator-crumb-name', ), phutil_escape_html($this->name)); $divider = null; if (!$this->isLastCrumb) { $divider = phutil_render_tag( 'span', array( - 'class' => 'phabricator-crumb-divider', + 'class' => 'sprite-menu phabricator-crumb-divider', ), ''); } return phutil_render_tag( $this->href ? 'a' : 'span', array( 'href' => $this->href, 'class' => implode(' ', $classes), ), $icon.$name.$divider); } } diff --git a/src/view/layout/PhabricatorCrumbsView.php b/src/view/layout/PhabricatorCrumbsView.php index 7d4ca345c5..347aa6420c 100644 --- a/src/view/layout/PhabricatorCrumbsView.php +++ b/src/view/layout/PhabricatorCrumbsView.php @@ -1,70 +1,71 @@ crumbs[] = $crumb; return $this; } public function addAction(PhabricatorMenuItemView $action) { $this->actions[] = $action; return $this; } public function render() { require_celerity_resource('phabricator-crumbs-view-css'); $action_view = null; if ($this->actions) { $actions = array(); foreach ($this->actions as $action) { $icon = null; if ($action->getIcon()) { $icon = phutil_render_tag( 'span', array( 'class' => 'sprite-icon action-'.$action->getIcon(), ), ''); } $actions[] = phutil_render_tag( 'a', array( 'href' => $action->getHref(), 'class' => 'phabricator-crumbs-action', ), $icon.phutil_escape_html($action->getName())); } $action_view = phutil_render_tag( 'div', array( 'class' => 'phabricator-crumbs-actions', ), self::renderSingleView($actions)); } if ($this->crumbs) { last($this->crumbs)->setIsLastCrumb(true); } return phutil_render_tag( 'div', array( - 'class' => 'phabricator-crumbs-view', + 'class' => 'phabricator-crumbs-view '. + 'sprite-gradient gradient-breadcrumbs', ), $action_view. self::renderSingleView($this->crumbs)); } } diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php index 062a9a8bfb..f0e41ad9f9 100644 --- a/src/view/page/PhabricatorStandardPageView.php +++ b/src/view/page/PhabricatorStandardPageView.php @@ -1,430 +1,431 @@ applicationMenu = $application_menu; return $this; } public function getApplicationMenu() { return $this->applicationMenu; } public function setApplicationName($application_name) { $this->applicationName = $application_name; return $this; } public function setDisableConsole($disable) { $this->disableConsole = $disable; return $this; } public function getApplicationName() { return $this->applicationName; } public function setBaseURI($base_uri) { $this->baseURI = $base_uri; return $this; } public function getBaseURI() { return $this->baseURI; } public function setShowChrome($show_chrome) { $this->showChrome = $show_chrome; return $this; } public function getShowChrome() { return $this->showChrome; } public function setSearchDefaultScope($search_default_scope) { $this->searchDefaultScope = $search_default_scope; return $this; } public function getSearchDefaultScope() { return $this->searchDefaultScope; } public function appendPageObjects(array $objs) { foreach ($objs as $obj) { $this->pageObjects[] = $obj; } } public function getTitle() { $use_glyph = true; $request = $this->getRequest(); if ($request) { $user = $request->getUser(); if ($user && $user->loadPreferences()->getPreference( PhabricatorUserPreferences::PREFERENCE_TITLES) !== 'glyph') { $use_glyph = false; } } return ($use_glyph ? $this->getGlyph() : '['.$this->getApplicationName().']'). ' '.parent::getTitle(); } protected function willRenderPage() { parent::willRenderPage(); if (!$this->getRequest()) { throw new Exception( "You must set the Request to render a PhabricatorStandardPageView."); } $console = $this->getConsole(); require_celerity_resource('phabricator-core-css'); require_celerity_resource('autosprite-css'); require_celerity_resource('phabricator-core-buttons-css'); + require_celerity_resource('sprite-gradient-css'); require_celerity_resource('phabricator-standard-page-view'); Javelin::initBehavior('workflow', array()); $current_token = null; $request = $this->getRequest(); if ($request) { $user = $request->getUser(); if ($user) { $current_token = $user->getCSRFToken(); $download_form = phabricator_render_form_magic($user); $default_img_uri = PhabricatorEnv::getCDNURI( '/rsrc/image/icon/fatcow/document_black.png' ); Javelin::initBehavior( 'lightbox-attachments', array( 'defaultImageUri' => $default_img_uri, 'downloadForm' => $download_form, )); } } Javelin::initBehavior('toggle-class', array()); Javelin::initBehavior('konami', array()); Javelin::initBehavior( 'refresh-csrf', array( 'tokenName' => AphrontRequest::getCSRFTokenName(), 'header' => AphrontRequest::getCSRFHeaderName(), 'current' => $current_token, )); Javelin::initBehavior('device', array('id' => 'base-page')); if ($console) { require_celerity_resource('aphront-dark-console-css'); Javelin::initBehavior( 'dark-console', array( 'uri' => '/~/', 'request_uri' => $request ? (string) $request->getRequestURI() : '/', )); // Change this to initBehavior when there is some behavior to initialize require_celerity_resource('javelin-behavior-error-log'); } $menu = id(new PhabricatorMainMenuView()) ->setUser($request->getUser()) ->setController($this->getController()) ->setDefaultSearchScope($this->getSearchDefaultScope()); if ($this->getApplicationMenu()) { $menu->setApplicationMenu($this->getApplicationMenu()); } $this->menuContent = $menu->render(); } protected function getHead() { $monospaced = PhabricatorEnv::getEnvConfig('style.monospace'); $request = $this->getRequest(); if ($request) { $user = $request->getUser(); if ($user) { $monospaced = nonempty( $user->loadPreferences()->getPreference( PhabricatorUserPreferences::PREFERENCE_MONOSPACED), $monospaced); } } $response = CelerityAPI::getStaticResourceResponse(); $head = array( parent::getHead(), '', $response->renderSingleResource('javelin-magical-init'), ); return implode("\n", $head); } public function setGlyph($glyph) { $this->glyph = $glyph; return $this; } public function getGlyph() { return $this->glyph; } protected function willSendResponse($response) { $response = parent::willSendResponse($response); $console = $this->getRequest()->getApplicationConfiguration()->getConsole(); if ($console) { $response = str_replace( '', $console->render($this->getRequest()), $response); } return $response; } protected function getBody() { $console = $this->getConsole(); $login_stuff = null; $request = $this->getRequest(); $user = null; if ($request) { $user = $request->getUser(); // NOTE: user may not be set here if we caught an exception early // in the execution workflow. if ($user && $user->getPHID()) { $login_stuff = phutil_render_tag( 'a', array( 'href' => '/p/'.$user->getUsername().'/', ), phutil_escape_html($user->getUsername())). ' · '. '
Settings'. ' · '. phabricator_render_form( $user, array( 'action' => '/search/', 'method' => 'post', 'style' => 'display: inline', ), ''. ' in '. AphrontFormSelectControl::renderSelectTag( $this->getSearchDefaultScope(), PhabricatorSearchScope::getScopeOptions(), array( 'name' => 'scope', )). ' '. ''); } } $header_chrome = null; $footer_chrome = null; if ($this->getShowChrome()) { $header_chrome = $this->menuContent; if (!$this->getDeviceReady()) { $footer_chrome = $this->renderFooter(); } } $developer_warning = null; if (PhabricatorEnv::getEnvConfig('phabricator.show-error-callout') && DarkConsoleErrorLogPluginAPI::getErrors()) { $developer_warning = '
'. 'This page raised PHP errors. Find them in DarkConsole '. 'or the error log.'. '
'; } $agent = idx($_SERVER, 'HTTP_USER_AGENT'); // Try to guess the device resolution based on UA strings to avoid a flash // of incorrectly-styled content. $device_guess = 'device-desktop'; if (preg_match('/iPhone|iPod/', $agent)) { $device_guess = 'device-phone'; } else if (preg_match('/iPad/', $agent)) { $device_guess = 'device-tablet'; } $classes = array( 'phabricator-standard-page', $device_guess, ); $classes = implode(' ', $classes); return phutil_render_tag( 'div', array( 'id' => 'base-page', 'class' => $classes, ), $header_chrome. '
'. ($console ? '' : null). $developer_warning. parent::getBody(). '
'. '
'). $footer_chrome; } protected function getTail() { $request = $this->getRequest(); $user = $request->getUser(); $container = null; if (PhabricatorEnv::getEnvConfig('notification.enabled') && $user->isLoggedIn()) { $aphlict_object_id = celerity_generate_unique_node_id(); $aphlict_container_id = celerity_generate_unique_node_id(); $client_uri = PhabricatorEnv::getEnvConfig('notification.client-uri'); $client_uri = new PhutilURI($client_uri); if ($client_uri->getDomain() == 'localhost') { $this_host = $this->getRequest()->getHost(); $this_host = new PhutilURI('http://'.$this_host.'/'); $client_uri->setDomain($this_host->getDomain()); } $enable_debug = PhabricatorEnv::getEnvConfig('notification.debug'); Javelin::initBehavior( 'aphlict-listen', array( 'id' => $aphlict_object_id, 'containerID' => $aphlict_container_id, 'server' => $client_uri->getDomain(), 'port' => $client_uri->getPort(), 'debug' => $enable_debug, 'pageObjects' => array_fill_keys($this->pageObjects, true), )); $container = phutil_render_tag( 'div', array( 'id' => $aphlict_container_id, 'style' => 'position: absolute; width: 0; height: 0;', ), ''); } $response = CelerityAPI::getStaticResourceResponse(); $tail = array( parent::getTail(), $container, $response->renderHTMLFooter(), ); return implode("\n", $tail); } protected function getBodyClasses() { $classes = array(); if (!$this->getShowChrome()) { $classes[] = 'phabricator-chromeless-page'; } return implode(' ', $classes); } private function getConsole() { if ($this->disableConsole) { return null; } return $this->getRequest()->getApplicationConfiguration()->getConsole(); } public function renderFooter() { $console = $this->getConsole(); $foot_links = array(); $version = PhabricatorEnv::getEnvConfig('phabricator.version'); $foot_links[] = 'Phabricator '. phutil_escape_html($version); $foot_links[] = ''. 'Report a Bug'. ''; if (PhabricatorEnv::getEnvConfig('darkconsole.enabled') && !PhabricatorEnv::getEnvConfig('darkconsole.always-on')) { if ($console) { $link = javelin_render_tag( 'a', array( 'href' => '/~/', 'sigil' => 'workflow', ), 'Disable DarkConsole'); } else { $link = javelin_render_tag( 'a', array( 'href' => '/~/', 'sigil' => 'workflow', ), 'Enable DarkConsole'); } $foot_links[] = $link; } $foot_links = implode(' · ', $foot_links); return '
'. $foot_links. '
'; } } diff --git a/webroot/rsrc/css/aphront/phabricator-nav-view.css b/webroot/rsrc/css/aphront/phabricator-nav-view.css index 53ee74673b..7288b7fecf 100644 --- a/webroot/rsrc/css/aphront/phabricator-nav-view.css +++ b/webroot/rsrc/css/aphront/phabricator-nav-view.css @@ -1,112 +1,112 @@ /** * @provides phabricator-nav-view-css */ .jx-drag-col { cursor: col-resize; } .phabricator-nav-col { position: fixed; top: 44px; left: 0; bottom: 0; overflow-y: auto; overflow-x: hidden; white-space: nowrap; z-index: 3; } .has-crumbs .phabricator-nav-col { - top: 78px; + top: 76px; } .phabricator-nav-local { width: 179px; background: #ececec; border-right: 1px solid #999c9e; box-shadow: inset -3px 0 4px rgba(0, 0, 0, 0.05); background-image: url(/rsrc/image/menu_texture.png); } .device-tablet .phabricator-nav-local, .device-phone .phabricator-nav-local { display: none; } .phabricator-nav-drag { position: fixed; top: 0; left: 179px; width: 7px; bottom: 0; z-index: 4; cursor: col-resize; background: #f5f5f5; border-style: solid; border-width: 0 1px 0 1px; border-color: #fff #999c9e #fff #999c9e; box-shadow: inset -1px 0px 1px rgba(0, 0, 0, 0.15); background-image: url(/rsrc/image/divot.png); background-position: center; background-repeat: no-repeat; } .device-tablet .phabricator-nav-drag, .device-phone .phabricator-nav-drag { display: none; } .has-local-nav .phabricator-nav-content { margin-left: 180px; } .device-desktop .has-local-nav .phabricator-nav-content { margin-left: 178px; } .device-desktop .local-nav-collapsed .phabricator-nav-local { width: 0px !important; } .device-desktop .local-nav-collapsed .phabricator-nav-drag { display: none; } .device-desktop .local-nav-collapsed .phabricator-nav-content { margin-left: 2.5em !important; } .device-tablet .phabricator-nav-col, .device-phone .phabricator-nav-col { position: absolute; top: 0px; } .device-tablet .phabricator-nav-local, .device-phone .phabricator-nav-local { left: -300px; } .device-tablet .phabricator-nav, .device-phone .phabricator-nav { overflow-x: hidden; position: relative; } .device-tablet .phabricator-nav-content, .device-phone .phabricator-nav-content { width: 100%; } .device-tablet .phabricator-nav-content, .device-phone .phabricator-nav-content { margin-left: 0; position: relative; } diff --git a/webroot/rsrc/css/autosprite.css b/webroot/rsrc/css/autosprite.css index 9fdfeb6e1c..cf368baba6 100644 --- a/webroot/rsrc/css/autosprite.css +++ b/webroot/rsrc/css/autosprite.css @@ -1,717 +1,717 @@ /** * @provides autosprite-css * @generated */ .autosprite { background-image: url(/rsrc/image/autosprite.png); background-repeat: no-repeat; } .main-menu-item-icon-help { background-position: 0px 0px; } .main-menu-item-icon-help-selected { background-position: -31px 0px; } .main-menu-item-icon-help:hover { background-position: -62px 0px; } .main-menu-item-icon-settings { background-position: -93px 0px; } .main-menu-item-icon-settings-selected { background-position: -124px 0px; } .main-menu-item-icon-settings:hover { background-position: -155px 0px; } .main-menu-item-icon-logout { background-position: -186px 0px; } .main-menu-item-icon-logout-selected { background-position: -217px 0px; } .main-menu-item-icon-logout:hover { background-position: -248px 0px; } .main-menu-item-icon-task { background-position: -279px 0px; } .main-menu-item-icon-task-selected { background-position: -310px 0px; } .main-menu-item-icon-task:hover { background-position: -341px 0px; } +.app-differential-large { + background-position: 0px -186px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-differential-large /* hover */ { + background-position: -61px -186px; +} + .app-differential { background-position: -372px 0px; } .device-desktop .app-differential:hover { background-position: -403px 0px; } .app-differential-selected { background-position: -434px 0px; } +.app-fact-large { + background-position: -122px -186px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-fact-large /* hover */ { + background-position: -183px -186px; +} + .app-fact { background-position: -465px 0px; } .device-desktop .app-fact:hover { background-position: -496px 0px; } .app-fact-selected { background-position: -527px 0px; } +.app-mail-large { + background-position: -244px -186px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-mail-large /* hover */ { + background-position: -305px -186px; +} + .app-mail { background-position: -558px 0px; } .device-desktop .app-mail:hover { background-position: 0px -31px; } .app-mail-selected { background-position: -31px -31px; } +.app-diffusion-large { + background-position: -366px -186px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-diffusion-large /* hover */ { + background-position: -427px -186px; +} + .app-diffusion { background-position: -62px -31px; } .device-desktop .app-diffusion:hover { background-position: -93px -31px; } .app-diffusion-selected { background-position: -124px -31px; } +.app-slowvote-large { + background-position: -488px -186px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-slowvote-large /* hover */ { + background-position: -549px -186px; +} + .app-slowvote { background-position: -155px -31px; } .device-desktop .app-slowvote:hover { background-position: -186px -31px; } .app-slowvote-selected { background-position: -217px -31px; } +.app-phriction-large { + background-position: 0px -247px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-phriction-large /* hover */ { + background-position: -61px -247px; +} + .app-phriction { background-position: -248px -31px; } .device-desktop .app-phriction:hover { background-position: -279px -31px; } .app-phriction-selected { background-position: -310px -31px; } +.app-maniphest-large { + background-position: -122px -247px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-maniphest-large /* hover */ { + background-position: -183px -247px; +} + .app-maniphest { background-position: -341px -31px; } .device-desktop .app-maniphest:hover { background-position: -372px -31px; } .app-maniphest-selected { background-position: -403px -31px; } +.app-flags-large { + background-position: -244px -247px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-flags-large /* hover */ { + background-position: -305px -247px; +} + .app-flags { background-position: -434px -31px; } .device-desktop .app-flags:hover { background-position: -465px -31px; } .app-flags-selected { background-position: -496px -31px; } +.app-settings-large { + background-position: -366px -247px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-settings-large /* hover */ { + background-position: -427px -247px; +} + .app-settings { background-position: -527px -31px; } .device-desktop .app-settings:hover { background-position: -558px -31px; } .app-settings-selected { background-position: 0px -62px; } +.app-applications-large { + background-position: -488px -247px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-applications-large /* hover */ { + background-position: -549px -247px; +} + .app-applications { background-position: -31px -62px; } .device-desktop .app-applications:hover { background-position: -62px -62px; } .app-applications-selected { background-position: -93px -62px; } +.app-default-large { + background-position: 0px -308px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-default-large /* hover */ { + background-position: -61px -308px; +} + .app-default { background-position: -124px -62px; } .device-desktop .app-default:hover { background-position: -155px -62px; } .app-default-selected { background-position: -186px -62px; } +.app-people-large { + background-position: -122px -308px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-people-large /* hover */ { + background-position: -183px -308px; +} + .app-people { background-position: -217px -62px; } .device-desktop .app-people:hover { background-position: -248px -62px; } .app-people-selected { background-position: -279px -62px; } +.app-ponder-large { + background-position: -244px -308px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-ponder-large /* hover */ { + background-position: -305px -308px; +} + .app-ponder { background-position: -310px -62px; } .device-desktop .app-ponder:hover { background-position: -341px -62px; } .app-ponder-selected { background-position: -372px -62px; } +.app-calendar-large { + background-position: -366px -308px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-calendar-large /* hover */ { + background-position: -427px -308px; +} + .app-calendar { background-position: -403px -62px; } .device-desktop .app-calendar:hover { background-position: -434px -62px; } .app-calendar-selected { background-position: -465px -62px; } +.app-files-large { + background-position: -488px -308px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-files-large /* hover */ { + background-position: -549px -308px; +} + .app-files { background-position: -496px -62px; } .device-desktop .app-files:hover { background-position: -527px -62px; } .app-files-selected { background-position: -558px -62px; } +.app-projects-large { + background-position: 0px -369px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-projects-large /* hover */ { + background-position: -61px -369px; +} + .app-projects { background-position: 0px -93px; } .device-desktop .app-projects:hover { background-position: -31px -93px; } .app-projects-selected { background-position: -62px -93px; } +.app-daemons-large { + background-position: -122px -369px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-daemons-large /* hover */ { + background-position: -183px -369px; +} + .app-daemons { background-position: -93px -93px; } .device-desktop .app-daemons:hover { background-position: -124px -93px; } .app-daemons-selected { background-position: -155px -93px; } +.app-herald-large { + background-position: -244px -369px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-herald-large /* hover */ { + background-position: -305px -369px; +} + .app-herald { background-position: -186px -93px; } .device-desktop .app-herald:hover { background-position: -217px -93px; } .app-herald-selected { background-position: -248px -93px; } +.app-countdown-large { + background-position: -366px -369px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-countdown-large /* hover */ { + background-position: -427px -369px; +} + .app-countdown { background-position: -279px -93px; } .device-desktop .app-countdown:hover { background-position: -310px -93px; } .app-countdown-selected { background-position: -341px -93px; } +.app-conduit-large { + background-position: -488px -369px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-conduit-large /* hover */ { + background-position: 0px -430px; +} + .app-conduit { background-position: -372px -93px; } .device-desktop .app-conduit:hover { background-position: -403px -93px; } .app-conduit-selected { background-position: -434px -93px; } +.app-feed-large { + background-position: -61px -430px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-feed-large /* hover */ { + background-position: -122px -430px; +} + .app-feed { background-position: -465px -93px; } .device-desktop .app-feed:hover { background-position: -496px -93px; } .app-feed-selected { background-position: -527px -93px; } +.app-paste-large { + background-position: -183px -430px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-paste-large /* hover */ { + background-position: -244px -430px; +} + .app-paste { background-position: 0px -124px; } .device-desktop .app-paste:hover { background-position: -31px -124px; } .app-paste-selected { background-position: -62px -124px; } +.app-audit-large { + background-position: -305px -430px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-audit-large /* hover */ { + background-position: -366px -430px; +} + .app-audit { background-position: -93px -124px; } .device-desktop .app-audit:hover { background-position: -124px -124px; } .app-audit-selected { background-position: -155px -124px; } +.app-uiexample-large { + background-position: -427px -430px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-uiexample-large /* hover */ { + background-position: -488px -430px; +} + .app-uiexample { background-position: -186px -124px; } .device-desktop .app-uiexample:hover { background-position: -217px -124px; } .app-uiexample-selected { background-position: -248px -124px; } +.app-phpast-large { + background-position: 0px -491px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-phpast-large /* hover */ { + background-position: -61px -491px; +} + .app-phpast { background-position: -279px -124px; } .device-desktop .app-phpast:hover { background-position: -310px -124px; } .app-phpast-selected { background-position: -341px -124px; } +.app-owners-large { + background-position: -122px -491px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-owners-large /* hover */ { + background-position: -183px -491px; +} + .app-owners { background-position: -372px -124px; } .device-desktop .app-owners:hover { background-position: -403px -124px; } .app-owners-selected { background-position: -434px -124px; } +.app-phid-large { + background-position: -244px -491px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-phid-large /* hover */ { + background-position: -305px -491px; +} + .app-phid { background-position: -465px -124px; } .device-desktop .app-phid:hover { background-position: -496px -124px; } .app-phid-selected { background-position: -527px -124px; } +.app-diviner-large { + background-position: -366px -491px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-diviner-large /* hover */ { + background-position: -427px -491px; +} + .app-diviner { background-position: 0px -155px; } .device-desktop .app-diviner:hover { background-position: -31px -155px; } .app-diviner-selected { background-position: -62px -155px; } +.app-repositories-large { + background-position: -488px -491px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-repositories-large /* hover */ { + background-position: 0px -552px; +} + .app-repositories { background-position: -93px -155px; } .device-desktop .app-repositories:hover { background-position: -124px -155px; } .app-repositories-selected { background-position: -155px -155px; } +.app-phame-large { + background-position: -61px -552px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-phame-large /* hover */ { + background-position: -122px -552px; +} + .app-phame { background-position: -186px -155px; } .device-desktop .app-phame:hover { background-position: -217px -155px; } .app-phame-selected { background-position: -248px -155px; } +.app-macro-large { + background-position: -183px -552px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-macro-large /* hover */ { + background-position: -244px -552px; +} + .app-macro { background-position: -279px -155px; } .device-desktop .app-macro:hover { background-position: -310px -155px; } .app-macro-selected { background-position: -341px -155px; } +.app-releeph-large { + background-position: -305px -552px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-releeph-large /* hover */ { + background-position: -366px -552px; +} + .app-releeph { background-position: -372px -155px; } .device-desktop .app-releeph:hover { background-position: -403px -155px; } .app-releeph-selected { background-position: -434px -155px; } +.app-drydock-large { + background-position: -427px -552px; +} + +.device-desktop .phabricator-application-launch-container:hover .app-drydock-large /* hover */ { + background-position: -488px -552px; +} + .app-drydock { background-position: -465px -155px; } .device-desktop .app-drydock:hover { background-position: -496px -155px; } .app-drydock-selected { background-position: -527px -155px; } - -.app-differential-large { - background-position: 0px -186px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-differential-large /* hover */ { - background-position: -61px -186px; -} - -.app-fact-large { - background-position: -122px -186px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-fact-large /* hover */ { - background-position: -183px -186px; -} - -.app-mail-large { - background-position: -244px -186px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-mail-large /* hover */ { - background-position: -305px -186px; -} - -.app-diffusion-large { - background-position: -366px -186px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-diffusion-large /* hover */ { - background-position: -427px -186px; -} - -.app-slowvote-large { - background-position: -488px -186px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-slowvote-large /* hover */ { - background-position: -549px -186px; -} - -.app-phriction-large { - background-position: 0px -247px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-phriction-large /* hover */ { - background-position: -61px -247px; -} - -.app-maniphest-large { - background-position: -122px -247px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-maniphest-large /* hover */ { - background-position: -183px -247px; -} - -.app-flags-large { - background-position: -244px -247px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-flags-large /* hover */ { - background-position: -305px -247px; -} - -.app-settings-large { - background-position: -366px -247px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-settings-large /* hover */ { - background-position: -427px -247px; -} - -.app-applications-large { - background-position: -488px -247px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-applications-large /* hover */ { - background-position: -549px -247px; -} - -.app-default-large { - background-position: 0px -308px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-default-large /* hover */ { - background-position: -61px -308px; -} - -.app-people-large { - background-position: -122px -308px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-people-large /* hover */ { - background-position: -183px -308px; -} - -.app-ponder-large { - background-position: -244px -308px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-ponder-large /* hover */ { - background-position: -305px -308px; -} - -.app-calendar-large { - background-position: -366px -308px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-calendar-large /* hover */ { - background-position: -427px -308px; -} - -.app-files-large { - background-position: -488px -308px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-files-large /* hover */ { - background-position: -549px -308px; -} - -.app-projects-large { - background-position: 0px -369px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-projects-large /* hover */ { - background-position: -61px -369px; -} - -.app-daemons-large { - background-position: -122px -369px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-daemons-large /* hover */ { - background-position: -183px -369px; -} - -.app-herald-large { - background-position: -244px -369px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-herald-large /* hover */ { - background-position: -305px -369px; -} - -.app-countdown-large { - background-position: -366px -369px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-countdown-large /* hover */ { - background-position: -427px -369px; -} - -.app-conduit-large { - background-position: -488px -369px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-conduit-large /* hover */ { - background-position: 0px -430px; -} - -.app-feed-large { - background-position: -61px -430px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-feed-large /* hover */ { - background-position: -122px -430px; -} - -.app-paste-large { - background-position: -183px -430px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-paste-large /* hover */ { - background-position: -244px -430px; -} - -.app-audit-large { - background-position: -305px -430px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-audit-large /* hover */ { - background-position: -366px -430px; -} - -.app-uiexample-large { - background-position: -427px -430px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-uiexample-large /* hover */ { - background-position: -488px -430px; -} - -.app-phpast-large { - background-position: 0px -491px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-phpast-large /* hover */ { - background-position: -61px -491px; -} - -.app-owners-large { - background-position: -122px -491px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-owners-large /* hover */ { - background-position: -183px -491px; -} - -.app-phid-large { - background-position: -244px -491px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-phid-large /* hover */ { - background-position: -305px -491px; -} - -.app-diviner-large { - background-position: -366px -491px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-diviner-large /* hover */ { - background-position: -427px -491px; -} - -.app-repositories-large { - background-position: -488px -491px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-repositories-large /* hover */ { - background-position: 0px -552px; -} - -.app-phame-large { - background-position: -61px -552px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-phame-large /* hover */ { - background-position: -122px -552px; -} - -.app-macro-large { - background-position: -183px -552px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-macro-large /* hover */ { - background-position: -244px -552px; -} - -.app-releeph-large { - background-position: -305px -552px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-releeph-large /* hover */ { - background-position: -366px -552px; -} - -.app-drydock-large { - background-position: -427px -552px; -} - -.device-desktop .phabricator-application-launch-container:hover .app-drydock-large /* hover */ { - background-position: -488px -552px; -} diff --git a/webroot/rsrc/css/core/buttons.css b/webroot/rsrc/css/core/buttons.css index 51988176fb..c41695afb7 100644 --- a/webroot/rsrc/css/core/buttons.css +++ b/webroot/rsrc/css/core/buttons.css @@ -1,207 +1,189 @@ /** * @provides phabricator-core-buttons-css */ button, a.button, a.button:visited, input.inputsubmit { background-color: #19558D; - background-image: url('/rsrc/image/button_gradients.png'); - background-position: 0 -26px; color: white; text-shadow: 0 -1px #19558D; border: 1px solid #19558D; cursor: pointer; font-weight: bold; font-size: 13px; display: inline-block; padding: 3px 10px 4px; text-align: center; white-space: nowrap; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; } /* Buttons with images (full size only) */ button.icon, a.icon, a.icon:visited { padding-left: 0; position: relative; text-indent: 29px; } button:active, a.button:active { background-color: #19558D; - background-position: 0 0; } button.black, a.black, a.black:visited { background-color: #383838; - background-position: 0 -182px; border: 1px solid #333; text-shadow: 0 -1px #000; border-bottom-color: #000; } -button.black:active, -a.black:active { - background-position: 0 -156px; -} - button.green, a.green, a.green:visited { background-color: #006600; - background-position: 0 -130px; border: 1px solid #3b6e22; text-shadow: 0 -1px #006600; border-bottom-color: #2c5a15; } -button.green:active, -a.green:active { - background-position: 0 -104px; -} - button.grey, input.inputaux, a.grey, a.grey:visited, a.button.disabled, button[disabled], /* Set by JX.Workflow. */ button.disabled { background-color: #f7f7f7; - background-image: url('/rsrc/image/button_gradients.png'); - background-position: 0 -52px; border-color: #aaa; color: #333; border-bottom-color: #999; text-shadow: none; } a.disabled, button.disabled { filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0.5; opacity: 0.5; } button.grey:active, a.grey:active, button.grey_active, a.dropdown-open { background-color: #7d7d7d; - background-position: 0 -78px; color: #777; } a.button:hover { text-decoration: none; } button.small, a.small, a.small:visited { padding: 2px 7px; height: auto; font-size: 11px; line-height: 16px; } button.link { display: inline; border: none; background: transparent; font-weight: normal; padding: 0; margin: 0; font-size: inherit; border-bottom: none; text-decoration: none; text-shadow: none; color: #3b5998; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } button.link:hover { text-decoration: underline; } .dropdown-menu-frame { z-index: 32; position: absolute; width: 240px; background: #f6f6f6; border: 1px solid #999; margin-top: -1px; box-shadow: 1px 3px 1px rgba(0, 0, 0, 0.25); -moz-box-shadow: 1px 3px 1px rgba(0, 0, 0, 0.25); -webkit-box-shadow: 1px 3px 1px rgba(0, 0, 0, 0.25); } .dropdown-menu-frame a, .dropdown-menu-frame span { display: block; font-size: 11px; padding: 4px 8px; } .dropdown-menu-frame span { color: #666666; } .dropdown-menu-frame a:hover { background: #005588; color: white; text-decoration: none; } a.toggle { display: inline-block; padding: 4px 8px; font-weight: bold; line-height: 14px; color: #ffffff; text-shadow: 0 1px 0 #777; text-decoration: none; white-space: nowrap; vertical-align: baseline; background-color: #a7a7a7; font-family: 'Helvetica Neue', Helvetica, Arial; font-size: 12px; margin: 0 5px 2px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } a.toggle:hover { background-color: #bbb; } a.toggle-selected { background-color: #555; } a.toggle-fixed { cursor: default; } a.toggle-fixed:hover { background-color: #555; } diff --git a/webroot/rsrc/css/layout/phabricator-crumbs-view.css b/webroot/rsrc/css/layout/phabricator-crumbs-view.css index 167445b7b4..930a995ab7 100644 --- a/webroot/rsrc/css/layout/phabricator-crumbs-view.css +++ b/webroot/rsrc/css/layout/phabricator-crumbs-view.css @@ -1,81 +1,81 @@ /** * @provides phabricator-crumbs-view-css */ .device-phone .phabricator-crumbs-view, .device-tablet .phabricator-crumbs-view { display: none; } .phabricator-crumbs-view { - background: #e1e5eb; - border-bottom: 1px solid #c5c9ce; - height: 33px; + background-color: #d8dce2; + height: 31px; overflow: hidden; vertical-align: top; + + box-shadow: 0 1px rgba(0, 0, 0, 0.25); } .phabricator-crumbs-view, .phabricator-crumbs-view a.phabricator-crumb-view, .phabricator-crumbs-view a.phabricator-crumbs-action { color: #3d3d3d; font-weight: bold; text-decoration: none; text-shadow: 0 1px 2px rgba(255, 255, 255, 0.9); } .phabricator-crumb-view { display: inline-block; - height: 33px; - line-height: 33px; + height: 31px; + line-height: 31px; overflow: hidden; } .phabricator-crumb-icon { display: inline-block; width: 30px; height: 30px; - margin: 2px 2px 1px 8px; + margin: 1px 2px 0 8px; vertical-align: top; } .phabricator-crumbs-actions { float: right; } .phabricator-crumbs-action { display: inline-block; height: 17px; padding: 8px 14px 8px 24px; position: relative; } .phabricator-crumbs-action .sprite-icon { width: 14px; height: 14px; left: 4px; top: 9px; position: absolute; } .phabricator-crumb-divider { display: inline-block; width: 9px; - height: 33px; - background-image: url(/rsrc/image/tab_divider.png); + height: 31px; vertical-align: top; margin: 0 9px; } .temporary-icon-apps { background-image: url(/rsrc/image/button_apps.png); background-position: center center; background-repeat: no-repeat; } .temporary-icon-list { background-image: url(/rsrc/image/button_menu.png); background-position: center center; background-repeat: no-repeat; background-size: 24px 15px; } diff --git a/webroot/rsrc/css/sprite-gradient.css b/webroot/rsrc/css/sprite-gradient.css new file mode 100644 index 0000000000..19ae1ba676 --- /dev/null +++ b/webroot/rsrc/css/sprite-gradient.css @@ -0,0 +1,58 @@ +/** + * @provides sprite-gradient-css + * @generated + */ + +.sprite-gradient, button, a.button, a.button:visited, input.inputsubmit { + background-image: url(/rsrc/image/sprite-gradient.png); + background-repeat: repeat-x; +} + +@media +only screen and (min-device-pixel-ratio: 1.5), +only screen and (-webkit-min-device-pixel-ratio: 1.5) { + .sprite-gradient, button, a.button, a.button:visited, input.inputsubmit { + background-image: url(/rsrc/image/sprite-gradient-X2.png); + background-size: 4px 274px; + } +} + +.gradient-blue-dark, button, a.button, a.button:visited, input.inputsubmit { + background-position: 0px -26px; +} + +.gradient-blue-light, button:active, a.button:active { + background-position: 0px -53px; +} + +.gradient-black-dark, button.black, a.black, a.black:visited { + background-position: 0px -80px; +} + +.gradient-black-light, button.black:active, a.black:active { + background-position: 0px -107px; +} + +.gradient-breadcrumbs { + background-position: 0px -242px; +} + +.gradient-dark-menu-label { + background-position: 0px 0px; +} + +.gradient-green-dark, button.green, a.green, a.green:visited { + background-position: 0px -134px; +} + +.gradient-green-light, button.green:active, a.green:active { + background-position: 0px -161px; +} + +.gradient-grey-dark, button.grey, input.inputaux, a.grey, a.grey:visited, a.button.disabled, button[disabled], button.disabled { + background-position: 0px -188px; +} + +.gradient-grey-light, button.grey:active, a.grey:active, button.grey_active, a.dropdown-open { + background-position: 0px -215px; +} diff --git a/webroot/rsrc/css/sprite-menu.css b/webroot/rsrc/css/sprite-menu.css index a5a62bcfcb..b87710bbe7 100644 --- a/webroot/rsrc/css/sprite-menu.css +++ b/webroot/rsrc/css/sprite-menu.css @@ -1,38 +1,42 @@ /** * @provides sprite-menu-css * @generated */ .sprite-menu { background-image: url(/rsrc/image/sprite-menu.png); background-repeat: no-repeat; } @media 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: 47px 69px; + background-size: 47px 101px; } } -.alert-notifications .phabricator-main-menu-alert-icon { - background-position: 0px 0px; -} - -.alert-notifications:hover .phabricator-main-menu-alert-icon { - background-position: -15px 0px; +.phabricator-main-menu-alert-bubble { + background-position: 0px -42px; } .phabricator-main-menu-alert-bubble.alert-unread { background-position: 0px -15px; } -.phabricator-main-menu-alert-bubble { - background-position: 0px -42px; +.alert-notifications .phabricator-main-menu-alert-icon { + background-position: 0px 0px; +} + +.alert-notifications:hover .phabricator-main-menu-alert-icon { + background-position: -15px 0px; } .alert-notifications.alert-unread .phabricator-main-menu-alert-icon { background-position: -27px -42px; } + +.phabricator-crumb-divider { + background-position: 0px -69px; +} diff --git a/webroot/rsrc/image/button_content.png b/webroot/rsrc/image/button_content.png deleted file mode 100755 index 3ae1bf4fc9..0000000000 Binary files a/webroot/rsrc/image/button_content.png and /dev/null differ diff --git a/webroot/rsrc/image/button_gradients.png b/webroot/rsrc/image/button_gradients.png deleted file mode 100644 index 486bc64c15..0000000000 Binary files a/webroot/rsrc/image/button_gradients.png and /dev/null differ diff --git a/webroot/rsrc/image/sprite-gradient.png b/webroot/rsrc/image/sprite-gradient.png new file mode 100644 index 0000000000..066b0a9f6e Binary files /dev/null and b/webroot/rsrc/image/sprite-gradient.png differ diff --git a/webroot/rsrc/image/sprite-menu-X2.png b/webroot/rsrc/image/sprite-menu-X2.png index a89c3ef5ed..cf4fdcdac5 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 b471e69f18..780efad474 100644 Binary files a/webroot/rsrc/image/sprite-menu.png and b/webroot/rsrc/image/sprite-menu.png differ diff --git a/webroot/rsrc/image/sprite.png b/webroot/rsrc/image/sprite.png deleted file mode 100644 index f4cf0312ff..0000000000 Binary files a/webroot/rsrc/image/sprite.png and /dev/null differ diff --git a/webroot/rsrc/image/tab_divider.png b/webroot/rsrc/image/tab_divider.png deleted file mode 100644 index 7a49d55556..0000000000 Binary files a/webroot/rsrc/image/tab_divider.png and /dev/null differ