Page MenuHomestyx hydra

No OneTemporary

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
<?php
require_once dirname(dirname(__FILE__)).'/__init_script__.php';
$args = new PhutilArgumentParser($argv);
$args->setTagline('regenerate CSS sprite sheets');
$args->setSynopsis(<<<EOHELP
**sprites**
Rebuild CSS sprite sheets.
EOHELP
);
$args->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(<<<EOCSS
/**
* @provides autosprite-css
* {$at}generated
*/
.autosprite {
background-image: url(/rsrc/image/autosprite.png);
background-repeat: no-repeat;
}
EOCSS
);
$menu_normal_template = id(new PhutilSprite())
->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 <a> 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 @@
<?php
final class CeleritySpriteGenerator {
public function buildIconSheet() {
$icons = $this->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(<<<EOCSS
/**
* @provides sprite-{$name}-css
* {$at}generated
*/
-.sprite-{$name} {
+.sprite-{$name}{$extra_css} {
background-image: url(/rsrc/image/sprite-{$name}.png);
- background-repeat: no-repeat;
+ background-repeat: {$repeat_rule};
}
@media
only screen and (min-device-pixel-ratio: 1.5),
only screen and (-webkit-min-device-pixel-ratio: 1.5) {
- .sprite-{$name} {
+ .sprite-{$name}{$extra_css} {
background-image: url(/rsrc/image/sprite-{$name}-X2.png);
background-size: {X}px {Y}px;
}
}
EOCSS
);
return $sheet;
}
}
diff --git a/src/view/layout/AphrontSideNavFilterView.php b/src/view/layout/AphrontSideNavFilterView.php
index e58ea5fbee..7ca5ea53d1 100644
--- a/src/view/layout/AphrontSideNavFilterView.php
+++ b/src/view/layout/AphrontSideNavFilterView.php
@@ -1,265 +1,265 @@
<?php
/**
* Like an @{class:AphrontSideNavView}, but with a little bit of logic for the
* common case where you're using the side nav to filter some view of objects.
*
* For example:
*
* $nav = new AphrontSideNavFilterView();
* $nav
* ->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
'<table class="aphront-side-nav-view phabricator-side-menu">'.
'<tr>'.
'<th class="aphront-side-nav-navigation">'.
self::renderSingleView($this->menu).
'</th>'.
'<td class="aphront-side-nav-content">'.
$this->renderChildren().
'</td>'.
'</tr>'.
'</table>';
}
}
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 @@
<?php
final class PhabricatorCrumbView extends AphrontView {
private $name;
private $href;
private $icon;
private $isLastCrumb;
public function setName($name) {
$this->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 @@
<?php
final class PhabricatorCrumbsView extends AphrontView {
private $crumbs = array();
private $actions = array();
protected function canAppendChild() {
return false;
}
public function addCrumb(PhabricatorCrumbView $crumb) {
$this->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 @@
<?php
/**
* This is a standard Phabricator page with menus, Javelin, DarkConsole, and
* basic styles.
*
*/
final class PhabricatorStandardPageView extends PhabricatorBarePageView {
private $baseURI;
private $applicationName;
private $glyph;
private $menuContent;
private $showChrome = true;
private $disableConsole;
private $searchDefaultScope;
private $pageObjects = array();
private $applicationMenu;
public function setApplicationMenu(PhabricatorMenuView $application_menu) {
$this->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(),
'<style type="text/css">'.
'.PhabricatorMonospaced { font: '.$monospaced.'; }'.
'</style>',
$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(
'<darkconsole />',
$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())).
' &middot; '.
'<a href="/settings/">Settings</a>'.
' &middot; '.
phabricator_render_form(
$user,
array(
'action' => '/search/',
'method' => 'post',
'style' => 'display: inline',
),
'<div class="menu-section menu-section-search">'.
'<div class="menu-search-container">'.
'<input type="text" name="query" id="standard-search-box" />'.
'<button id="standard-search-button">Search</button>'.
'</div>'.
'</div>'.
' in '.
AphrontFormSelectControl::renderSelectTag(
$this->getSearchDefaultScope(),
PhabricatorSearchScope::getScopeOptions(),
array(
'name' => 'scope',
)).
' '.
'<button>Search</button>');
}
}
$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 =
'<div class="aphront-developer-error-callout">'.
'This page raised PHP errors. Find them in DarkConsole '.
'or the error log.'.
'</div>';
}
$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.
'<div class="phabricator-standard-page-body">'.
($console ? '<darkconsole />' : null).
$developer_warning.
parent::getBody().
'<div style="clear: both;"></div>'.
'</div>').
$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[] =
'<a href="http://phabricator.org/">Phabricator</a> '.
phutil_escape_html($version);
$foot_links[] =
'<a href="https://secure.phabricator.com/maniphest/task/create/">'.
'Report a Bug'.
'</a>';
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(' &middot; ', $foot_links);
return
'<div class="phabricator-page-foot">'.
$foot_links.
'</div>';
}
}
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

File Metadata

Mime Type
text/x-diff
Expires
Fri, Oct 31, 6:07 AM (9 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
312023
Default Alt Text
(119 KB)

Event Timeline