diff --git a/resources/sprite/manifest/icon.json b/resources/sprite/manifest/icon.json index c12971f2e0..62019003a3 100644 --- a/resources/sprite/manifest/icon.json +++ b/resources/sprite/manifest/icon.json @@ -1,196 +1,970 @@ { - "sprites" : [ - "action-arrow_left", - "action-arrow_left-grey", - "action-arrow_left-white", - "action-arrow_right", - "action-arrow_right-grey", - "action-arrow_right-white", - "action-attach", - "action-attach-grey", - "action-attach-white", - "action-blame", - "action-blame-grey", - "action-blame-white", - "action-check", - "action-check-grey", - "action-check-white", - "action-comment", - "action-comment-grey", - "action-comment-white", - "action-computer", - "action-computer-grey", - "action-computer-white", - "action-create", - "action-create-grey", - "action-create-white", - "action-delete", - "action-delete-grey", - "action-delete-white", - "action-disable", - "action-disable-grey", - "action-disable-white", - "action-dislike", - "action-dislike-grey", - "action-dislike-white", - "action-download", - "action-download-grey", - "action-download-white", - "action-edit", - "action-edit-grey", - "action-edit-white", - "action-enable", - "action-enable-grey", - "action-enable-white", - "action-file", - "action-file-grey", - "action-file-white", - "action-flag", - "action-flag-0", - "action-flag-0-grey", - "action-flag-0-white", - "action-flag-1", - "action-flag-1-grey", - "action-flag-1-white", - "action-flag-2", - "action-flag-2-grey", - "action-flag-2-white", - "action-flag-3", - "action-flag-3-grey", - "action-flag-3-white", - "action-flag-4", - "action-flag-4-grey", - "action-flag-4-white", - "action-flag-5", - "action-flag-5-grey", - "action-flag-5-white", - "action-flag-6", - "action-flag-6-grey", - "action-flag-6-white", - "action-flag-7", - "action-flag-7-grey", - "action-flag-7-white", - "action-flag-ghost", - "action-flag-ghost-grey", - "action-flag-ghost-white", - "action-flag-grey", - "action-flag-white", - "action-folder-open", - "action-folder-open-grey", - "action-folder-open-white", - "action-fork", - "action-fork-grey", - "action-fork-white", - "action-herald", - "action-herald-grey", - "action-herald-white", - "action-highlight", - "action-highlight-grey", - "action-highlight-white", - "action-history", - "action-history-grey", - "action-history-white", - "action-image", - "action-image-grey", - "action-image-white", - "action-like", - "action-like-grey", - "action-like-white", - "action-link", - "action-link-grey", - "action-link-white", - "action-lint-info", - "action-lint-info-grey", - "action-lint-info-white", - "action-lint-ok", - "action-lint-ok-grey", - "action-lint-ok-white", - "action-lint-warning", - "action-lint-warning-grey", - "action-lint-warning-white", - "action-lock", - "action-lock-grey", - "action-lock-white", - "action-love", - "action-love-grey", - "action-love-white", - "action-merge", - "action-merge-grey", - "action-merge-white", - "action-message", - "action-message-grey", - "action-message-white", - "action-meta-mta", - "action-meta-mta-grey", - "action-meta-mta-white", - "action-move", - "action-move-grey", - "action-move-white", - "action-new", - "action-new-grey", - "action-new-white", - "action-perflab", - "action-perflab-grey", - "action-perflab-white", - "action-preview", - "action-preview-grey", - "action-preview-white", - "action-refresh", - "action-refresh-grey", - "action-refresh-white", - "action-remove", - "action-remove-grey", - "action-remove-white", - "action-search", - "action-search-grey", - "action-search-white", - "action-start-sandcastle", - "action-start-sandcastle-grey", - "action-start-sandcastle-white", - "action-subscribe-add", - "action-subscribe-add-grey", - "action-subscribe-add-white", - "action-subscribe-auto", - "action-subscribe-auto-grey", - "action-subscribe-auto-white", - "action-subscribe-delete", - "action-subscribe-delete-grey", - "action-subscribe-delete-white", - "action-tag", - "action-tag-grey", - "action-tag-white", - "action-transcript", - "action-transcript-grey", - "action-transcript-white", - "action-undo", - "action-undo-grey", - "action-undo-white", - "action-unlock", - "action-unlock-grey", - "action-unlock-white", - "action-unmerge", - "action-unmerge-grey", - "action-unmerge-white", - "action-unpublish", - "action-unpublish-grey", - "action-unpublish-white", - "action-warning", - "action-warning-grey", - "action-warning-white", - "action-world", - "action-world-grey", - "action-world-white", - "remarkup-assist-text_b", - "remarkup-assist-text_code", - "remarkup-assist-text_help", - "remarkup-assist-text_i", - "remarkup-assist-text_image", - "remarkup-assist-text_larger", - "remarkup-assist-text_meme", - "remarkup-assist-text_ol", - "remarkup-assist-text_table", - "remarkup-assist-text_tag", - "remarkup-assist-text_tt", - "remarkup-assist-text_ul" - ] + "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}" } diff --git a/resources/sprite/manifest/menu.json b/resources/sprite/manifest/menu.json new file mode 100644 index 0000000000..245e291697 --- /dev/null +++ b/resources/sprite/manifest/menu.json @@ -0,0 +1,35 @@ +{ + "version" : 1, + "sprites" : { + "bubble" : { + "name" : "bubble", + "rule" : ".phabricator-main-menu-alert-bubble.alert-unread", + "hash" : "07bc6fd60e5c2fa14558c9101cba5261" + }, + "round_bubble" : { + "name" : "round_bubble", + "rule" : ".phabricator-main-menu-alert-bubble", + "hash" : "02de5b1c1720749a566e7a4cf7c2216c" + }, + "seen_have_unread" : { + "name" : "seen_have_unread", + "rule" : ".alert-notifications:hover .phabricator-main-menu-alert-icon", + "hash" : "d0210b3908193ee841db2eeec264a154" + }, + "seen_read_all" : { + "name" : "seen_read_all", + "rule" : ".alert-notifications .phabricator-main-menu-alert-icon", + "hash" : "8d0644ec8fa33330b30b7531272e24f1" + }, + "unseen_any" : { + "name" : "unseen_any", + "rule" : ".alert-notifications.alert-unread .phabricator-main-menu-alert-icon", + "hash" : "0e50bf01f640b2f8231eaef246863f0b" + } + }, + "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}" +} diff --git a/resources/sprite/notifications_1x/bubble.png b/resources/sprite/notifications_1x/bubble.png new file mode 100644 index 0000000000..a6c047cb42 Binary files /dev/null and b/resources/sprite/notifications_1x/bubble.png differ diff --git a/resources/sprite/notifications_1x/round_bubble.png b/resources/sprite/notifications_1x/round_bubble.png new file mode 100644 index 0000000000..2d2fce1f37 Binary files /dev/null and b/resources/sprite/notifications_1x/round_bubble.png differ diff --git a/resources/sprite/notifications_1x/seen_have_unread.png b/resources/sprite/notifications_1x/seen_have_unread.png new file mode 100644 index 0000000000..f07716bd9e Binary files /dev/null and b/resources/sprite/notifications_1x/seen_have_unread.png differ diff --git a/resources/sprite/notifications_1x/seen_read_all.png b/resources/sprite/notifications_1x/seen_read_all.png new file mode 100644 index 0000000000..db8cdb8b66 Binary files /dev/null and b/resources/sprite/notifications_1x/seen_read_all.png differ diff --git a/resources/sprite/notifications_1x/unseen_any.png b/resources/sprite/notifications_1x/unseen_any.png new file mode 100644 index 0000000000..f645cd32b3 Binary files /dev/null and b/resources/sprite/notifications_1x/unseen_any.png differ diff --git a/resources/sprite/notifications_2x/bubble.png b/resources/sprite/notifications_2x/bubble.png new file mode 100644 index 0000000000..f09dca68b2 Binary files /dev/null and b/resources/sprite/notifications_2x/bubble.png differ diff --git a/resources/sprite/notifications_2x/round_bubble.png b/resources/sprite/notifications_2x/round_bubble.png new file mode 100644 index 0000000000..0837ba4b7e Binary files /dev/null and b/resources/sprite/notifications_2x/round_bubble.png differ diff --git a/resources/sprite/notifications_2x/seen_have_unread.png b/resources/sprite/notifications_2x/seen_have_unread.png new file mode 100644 index 0000000000..af875015f7 Binary files /dev/null and b/resources/sprite/notifications_2x/seen_have_unread.png differ diff --git a/resources/sprite/notifications_2x/seen_read_all.png b/resources/sprite/notifications_2x/seen_read_all.png new file mode 100644 index 0000000000..f490620930 Binary files /dev/null and b/resources/sprite/notifications_2x/seen_read_all.png differ diff --git a/resources/sprite/notifications_2x/unseen_any.png b/resources/sprite/notifications_2x/unseen_any.png new file mode 100644 index 0000000000..d2a7d2617c Binary files /dev/null and b/resources/sprite/notifications_2x/unseen_any.png differ diff --git a/scripts/celerity/generate_sprites.php b/scripts/celerity/generate_sprites.php index 0a101eed4a..a53e4c3faf 100755 --- a/scripts/celerity/generate_sprites.php +++ b/scripts/celerity/generate_sprites.php @@ -18,7 +18,11 @@ $args->parse( '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'); @@ -76,7 +80,6 @@ $icon_map = array( 'help' => array(4, 19), 'settings' => array(0, 28), 'logout' => array(3, 6), - 'notifications' => array(5, 20), 'task' => array(1, 15), ); @@ -193,12 +196,28 @@ $sheet->generateCSS($webroot.'/css/autosprite.css'); $generator = new CeleritySpriteGenerator(); -$generator - ->buildIconSheet() - ->setScales(array(1, 2)) - ->generateImage($webroot.'/image/sprite-icon.png', 1) - ->generateImage($webroot.'/image/sprite-icon-X2.png', 2) - ->generateCSS($webroot.'/css/sprite-icon.css') - ->generateManifest($root.'/resources/sprite/manifest/icon.json'); +$sheets = array( + 'icon' => $generator->buildIconSheet(), + 'menu' => $generator->buildMenuSheet(), +); + +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"); +} echo "Done.\n"; diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index a57c849851..c6285acfc8 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -51,8 +51,8 @@ celerity_register_resource_map(array( ), '/rsrc/image/autosprite.png' => array( - 'hash' => '0b1fd04e70272fe946dff765237d132a', - 'uri' => '/res/0b1fd04e/rsrc/image/autosprite.png', + 'hash' => '7d4b49765c805bad0e2b59c0b578d975', + 'uri' => '/res/7d4b4976/rsrc/image/autosprite.png', 'disk' => '/rsrc/image/autosprite.png', 'type' => 'png', ), @@ -546,6 +546,20 @@ celerity_register_resource_map(array( 'disk' => '/rsrc/image/sprite-icon.png', 'type' => 'png', ), + '/rsrc/image/sprite-menu-X2.png' => + array( + 'hash' => 'a7d32533fc67766ed44acc37bb1c8b64', + 'uri' => '/res/a7d32533/rsrc/image/sprite-menu-X2.png', + 'disk' => '/rsrc/image/sprite-menu-X2.png', + 'type' => 'png', + ), + '/rsrc/image/sprite-menu.png' => + array( + 'hash' => '0b2d293e89259d70aacb0c92a49e6a0c', + 'uri' => '/res/0b2d293e/rsrc/image/sprite-menu.png', + 'disk' => '/rsrc/image/sprite-menu.png', + 'type' => 'png', + ), '/rsrc/image/sprite.png' => array( 'hash' => '8c6200d3191c0deea30f22e7b8166b15', @@ -734,7 +748,7 @@ celerity_register_resource_map(array( ), 'autosprite-css' => array( - 'uri' => '/res/e1084d7c/rsrc/css/autosprite.css', + 'uri' => '/res/dc17189f/rsrc/css/autosprite.css', 'type' => 'css', 'requires' => array( @@ -951,7 +965,7 @@ celerity_register_resource_map(array( ), 'javelin-behavior-aphlict-dropdown' => array( - 'uri' => '/res/dc8f194b/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js', + 'uri' => '/res/e9b6fd18/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js', 'type' => 'js', 'requires' => array( @@ -2588,7 +2602,7 @@ celerity_register_resource_map(array( ), 'phabricator-main-menu-view' => array( - 'uri' => '/res/8c3aaa49/rsrc/css/application/base/main-menu-view.css', + 'uri' => '/res/1a088c24/rsrc/css/application/base/main-menu-view.css', 'type' => 'css', 'requires' => array( @@ -3110,6 +3124,15 @@ celerity_register_resource_map(array( ), 'disk' => '/rsrc/css/sprite-icon.css', ), + 'sprite-menu-css' => + array( + 'uri' => '/res/d0239d8c/rsrc/css/sprite-menu.css', + 'type' => 'css', + 'requires' => + array( + ), + 'disk' => '/rsrc/css/sprite-menu.css', + ), 'stripe-core' => array( 'uri' => '/res/3b0f0ad4/rsrc/js/stripe/stripe_core.js', @@ -3140,7 +3163,7 @@ celerity_register_resource_map(array( ), array( 'packages' => array( - '230c5ef4' => + 'a567467a' => array( 'name' => 'core.pkg.css', 'symbols' => @@ -3179,10 +3202,10 @@ celerity_register_resource_map(array( 31 => 'phabricator-filetree-view-css', 32 => 'phabricator-nav-view-css', ), - 'uri' => '/res/pkg/230c5ef4/core.pkg.css', + 'uri' => '/res/pkg/a567467a/core.pkg.css', 'type' => 'css', ), - 'd223b82c' => + 'a29ae2c4' => array( 'name' => 'core.pkg.js', 'symbols' => @@ -3219,7 +3242,7 @@ celerity_register_resource_map(array( 29 => 'phabricator-textareautils', 30 => 'phabricator-file-upload', ), - 'uri' => '/res/pkg/d223b82c/core.pkg.js', + 'uri' => '/res/pkg/a29ae2c4/core.pkg.js', 'type' => 'js', ), '3c5efda9' => @@ -3369,21 +3392,21 @@ celerity_register_resource_map(array( 'reverse' => array( 'aphront-attached-file-view-css' => '7839ae2d', - 'aphront-crumbs-view-css' => '230c5ef4', - 'aphront-dialog-view-css' => '230c5ef4', - 'aphront-error-view-css' => '230c5ef4', - 'aphront-form-view-css' => '230c5ef4', + 'aphront-crumbs-view-css' => 'a567467a', + 'aphront-dialog-view-css' => 'a567467a', + 'aphront-error-view-css' => 'a567467a', + 'aphront-form-view-css' => 'a567467a', 'aphront-headsup-action-list-view-css' => '47549184', - 'aphront-headsup-view-css' => '230c5ef4', - 'aphront-list-filter-view-css' => '230c5ef4', - 'aphront-pager-view-css' => '230c5ef4', - 'aphront-panel-view-css' => '230c5ef4', - 'aphront-side-nav-view-css' => '230c5ef4', - 'aphront-table-view-css' => '230c5ef4', - 'aphront-tokenizer-control-css' => '230c5ef4', - 'aphront-tooltip-css' => '230c5ef4', - 'aphront-typeahead-control-css' => '230c5ef4', - 'autosprite-css' => '230c5ef4', + 'aphront-headsup-view-css' => 'a567467a', + 'aphront-list-filter-view-css' => 'a567467a', + 'aphront-pager-view-css' => 'a567467a', + 'aphront-panel-view-css' => 'a567467a', + 'aphront-side-nav-view-css' => 'a567467a', + 'aphront-table-view-css' => 'a567467a', + 'aphront-tokenizer-control-css' => 'a567467a', + 'aphront-tooltip-css' => 'a567467a', + 'aphront-typeahead-control-css' => 'a567467a', + 'autosprite-css' => 'a567467a', 'differential-changeset-view-css' => '47549184', 'differential-core-view-css' => '47549184', 'differential-inline-comment-editor' => '7ecd31fa', @@ -3398,18 +3421,18 @@ celerity_register_resource_map(array( 'diffusion-commit-view-css' => 'c8ce2d88', 'diffusion-icons-css' => 'c8ce2d88', 'inline-comment-summary-css' => '47549184', - 'javelin-aphlict' => 'd223b82c', + 'javelin-aphlict' => 'a29ae2c4', 'javelin-behavior' => '20727878', - 'javelin-behavior-aphlict-dropdown' => 'd223b82c', - 'javelin-behavior-aphlict-listen' => 'd223b82c', - 'javelin-behavior-aphront-basic-tokenizer' => 'd223b82c', + 'javelin-behavior-aphlict-dropdown' => 'a29ae2c4', + 'javelin-behavior-aphlict-listen' => 'a29ae2c4', + 'javelin-behavior-aphront-basic-tokenizer' => 'a29ae2c4', 'javelin-behavior-aphront-drag-and-drop' => '7ecd31fa', 'javelin-behavior-aphront-drag-and-drop-textarea' => '7ecd31fa', - 'javelin-behavior-aphront-form-disable-on-submit' => 'd223b82c', + 'javelin-behavior-aphront-form-disable-on-submit' => 'a29ae2c4', 'javelin-behavior-audit-preview' => '5e68be89', 'javelin-behavior-dark-console' => '3c5efda9', 'javelin-behavior-dark-console-ajax' => '3c5efda9', - 'javelin-behavior-device' => 'd223b82c', + 'javelin-behavior-device' => 'a29ae2c4', 'javelin-behavior-differential-accept-with-errors' => '7ecd31fa', 'javelin-behavior-differential-add-reviewers-and-ccs' => '7ecd31fa', 'javelin-behavior-differential-comment-jump' => '7ecd31fa', @@ -3425,27 +3448,27 @@ celerity_register_resource_map(array( 'javelin-behavior-diffusion-commit-graph' => '5e68be89', 'javelin-behavior-diffusion-pull-lastmodified' => '5e68be89', 'javelin-behavior-error-log' => '3c5efda9', - 'javelin-behavior-konami' => 'd223b82c', - 'javelin-behavior-lightbox-attachments' => 'd223b82c', + 'javelin-behavior-konami' => 'a29ae2c4', + 'javelin-behavior-lightbox-attachments' => 'a29ae2c4', 'javelin-behavior-maniphest-batch-selector' => '7707de41', 'javelin-behavior-maniphest-subpriority-editor' => '7707de41', 'javelin-behavior-maniphest-transaction-controls' => '7707de41', 'javelin-behavior-maniphest-transaction-expand' => '7707de41', 'javelin-behavior-maniphest-transaction-preview' => '7707de41', - 'javelin-behavior-phabricator-active-nav' => 'd223b82c', - 'javelin-behavior-phabricator-autofocus' => 'd223b82c', - 'javelin-behavior-phabricator-keyboard-shortcuts' => 'd223b82c', - 'javelin-behavior-phabricator-nav' => 'd223b82c', + 'javelin-behavior-phabricator-active-nav' => 'a29ae2c4', + 'javelin-behavior-phabricator-autofocus' => 'a29ae2c4', + 'javelin-behavior-phabricator-keyboard-shortcuts' => 'a29ae2c4', + 'javelin-behavior-phabricator-nav' => 'a29ae2c4', 'javelin-behavior-phabricator-object-selector' => '7ecd31fa', - 'javelin-behavior-phabricator-oncopy' => 'd223b82c', - 'javelin-behavior-phabricator-remarkup-assist' => 'd223b82c', - 'javelin-behavior-phabricator-search-typeahead' => 'd223b82c', - 'javelin-behavior-phabricator-tooltips' => 'd223b82c', - 'javelin-behavior-phabricator-watch-anchor' => 'd223b82c', - 'javelin-behavior-refresh-csrf' => 'd223b82c', + 'javelin-behavior-phabricator-oncopy' => 'a29ae2c4', + 'javelin-behavior-phabricator-remarkup-assist' => 'a29ae2c4', + 'javelin-behavior-phabricator-search-typeahead' => 'a29ae2c4', + 'javelin-behavior-phabricator-tooltips' => 'a29ae2c4', + 'javelin-behavior-phabricator-watch-anchor' => 'a29ae2c4', + 'javelin-behavior-refresh-csrf' => 'a29ae2c4', 'javelin-behavior-repository-crossreference' => '7ecd31fa', - 'javelin-behavior-toggle-class' => 'd223b82c', - 'javelin-behavior-workflow' => 'd223b82c', + 'javelin-behavior-toggle-class' => 'a29ae2c4', + 'javelin-behavior-workflow' => 'a29ae2c4', 'javelin-color' => '20727878', 'javelin-dom' => '20727878', 'javelin-event' => '20727878', @@ -3466,42 +3489,42 @@ celerity_register_resource_map(array( 'javelin-util' => '20727878', 'javelin-vector' => '20727878', 'javelin-workflow' => '20727878', - 'lightbox-attachment-css' => '230c5ef4', + 'lightbox-attachment-css' => 'a567467a', 'maniphest-task-summary-css' => '7839ae2d', 'maniphest-transaction-detail-css' => '7839ae2d', - 'phabricator-app-buttons-css' => '230c5ef4', - 'phabricator-busy' => 'd223b82c', + 'phabricator-app-buttons-css' => 'a567467a', + 'phabricator-busy' => 'a29ae2c4', 'phabricator-content-source-view-css' => '47549184', - 'phabricator-core-buttons-css' => '230c5ef4', - 'phabricator-core-css' => '230c5ef4', - 'phabricator-directory-css' => '230c5ef4', + 'phabricator-core-buttons-css' => 'a567467a', + 'phabricator-core-css' => 'a567467a', + 'phabricator-directory-css' => 'a567467a', 'phabricator-drag-and-drop-file-upload' => '7ecd31fa', - 'phabricator-dropdown-menu' => 'd223b82c', - 'phabricator-file-upload' => 'd223b82c', - 'phabricator-filetree-view-css' => '230c5ef4', - 'phabricator-flag-css' => '230c5ef4', - 'phabricator-form-view-css' => '230c5ef4', - 'phabricator-header-view-css' => '230c5ef4', - 'phabricator-jump-nav' => '230c5ef4', - 'phabricator-keyboard-shortcut' => 'd223b82c', - 'phabricator-keyboard-shortcut-manager' => 'd223b82c', - 'phabricator-main-menu-view' => '230c5ef4', - 'phabricator-menu-item' => 'd223b82c', - 'phabricator-nav-view-css' => '230c5ef4', - 'phabricator-notification' => 'd223b82c', - 'phabricator-notification-css' => '230c5ef4', - 'phabricator-notification-menu-css' => '230c5ef4', + 'phabricator-dropdown-menu' => 'a29ae2c4', + 'phabricator-file-upload' => 'a29ae2c4', + 'phabricator-filetree-view-css' => 'a567467a', + 'phabricator-flag-css' => 'a567467a', + 'phabricator-form-view-css' => 'a567467a', + 'phabricator-header-view-css' => 'a567467a', + 'phabricator-jump-nav' => 'a567467a', + 'phabricator-keyboard-shortcut' => 'a29ae2c4', + 'phabricator-keyboard-shortcut-manager' => 'a29ae2c4', + 'phabricator-main-menu-view' => 'a567467a', + 'phabricator-menu-item' => 'a29ae2c4', + 'phabricator-nav-view-css' => 'a567467a', + 'phabricator-notification' => 'a29ae2c4', + 'phabricator-notification-css' => 'a567467a', + 'phabricator-notification-menu-css' => 'a567467a', 'phabricator-object-selector-css' => '47549184', - 'phabricator-paste-file-upload' => 'd223b82c', - 'phabricator-prefab' => 'd223b82c', + 'phabricator-paste-file-upload' => 'a29ae2c4', + 'phabricator-prefab' => 'a29ae2c4', 'phabricator-project-tag-css' => '7839ae2d', - 'phabricator-remarkup-css' => '230c5ef4', + 'phabricator-remarkup-css' => 'a567467a', 'phabricator-shaped-request' => '7ecd31fa', - 'phabricator-standard-page-view' => '230c5ef4', - 'phabricator-textareautils' => 'd223b82c', - 'phabricator-tooltip' => 'd223b82c', - 'phabricator-transaction-view-css' => '230c5ef4', - 'sprite-icon-css' => '230c5ef4', - 'syntax-highlighting-css' => '230c5ef4', + 'phabricator-standard-page-view' => 'a567467a', + 'phabricator-textareautils' => 'a29ae2c4', + 'phabricator-tooltip' => 'a29ae2c4', + 'phabricator-transaction-view-css' => 'a567467a', + 'sprite-icon-css' => 'a567467a', + 'syntax-highlighting-css' => 'a567467a', ), )); diff --git a/src/infrastructure/celerity/CeleritySpriteGenerator.php b/src/infrastructure/celerity/CeleritySpriteGenerator.php index febd36f653..77d588e40c 100644 --- a/src/infrastructure/celerity/CeleritySpriteGenerator.php +++ b/src/infrastructure/celerity/CeleritySpriteGenerator.php @@ -76,6 +76,70 @@ final class CeleritySpriteGenerator { 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', + ), + ); + + $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 = $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; + } + private function getPath($to_path = null) { $root = dirname(phutil_get_library_root('phabricator')); return $root.'/resources/sprite/'.$to_path; diff --git a/src/view/page/menu/PhabricatorMainMenuView.php b/src/view/page/menu/PhabricatorMainMenuView.php index ba5b9035a2..fa9a4f8625 100644 --- a/src/view/page/menu/PhabricatorMainMenuView.php +++ b/src/view/page/menu/PhabricatorMainMenuView.php @@ -66,56 +66,57 @@ final class PhabricatorMainMenuView extends AphrontView { require_celerity_resource('phabricator-notification-css'); require_celerity_resource('phabricator-notification-menu-css'); + require_celerity_resource('sprite-menu-css'); - $indicator_id = celerity_generate_unique_node_id(); + $count_id = celerity_generate_unique_node_id(); $dropdown_id = celerity_generate_unique_node_id(); - $menu_id = celerity_generate_unique_node_id(); + $bubble_id = celerity_generate_unique_node_id(); - $notification_count = id(new PhabricatorFeedStoryNotification()) + $count_number = id(new PhabricatorFeedStoryNotification()) ->countUnread($user); - $classes = array( - 'phabricator-main-menu-alert-indicator', - ); - if ($notification_count) { - $classes[] = 'phabricator-main-menu-alert-indicator-unread'; + if ($count_number > 999) { + $count_number = "\xE2\x88\x9E"; } - $notification_indicator = javelin_render_tag( + $count_tag = phutil_render_tag( 'span', array( - 'id' => $indicator_id, - 'class' => implode(' ', $classes), + 'id' => $count_id, + 'class' => 'phabricator-main-menu-alert-count' ), - $notification_count); + phutil_escape_html($count_number)); - $classes = array(); - $classes[] = 'phabricator-main-menu-alert-item'; - $classes[] = 'phabricator-main-menu-alert-item-notification'; - $classes[] = 'autosprite'; - $classes[] = 'main-menu-item-icon-notifications'; + $icon_tag = phutil_render_tag( + 'span', + array( + 'class' => 'sprite-menu phabricator-main-menu-alert-icon', + ), + ''); - $notification_icon = javelin_render_tag( + $container_classes = array( + 'phabricator-main-menu-alert-bubble', + 'sprite-menu', + 'alert-notifications', + ); + if ($count_number) { + $container_classes[] = 'alert-unread'; + } + + $bubble_tag = phutil_render_tag( 'a', array( 'href' => '/notification/', - 'class' => implode(' ', $classes), - 'id' => $menu_id, + 'class' => implode(' ', $container_classes), + 'id' => $bubble_id, ), - $notification_indicator); - - $notification_menu = javelin_render_tag( - 'div', - array( - 'class' => 'phabricator-main-menu-alert', - ), - $notification_icon); + $icon_tag.$count_tag); Javelin::initBehavior( 'aphlict-dropdown', array( - 'menuID' => $menu_id, - 'indicatorID' => $indicator_id, + 'bubbleID' => $bubble_id, + 'countID' => $count_id, 'dropdownID' => $dropdown_id, )); @@ -129,7 +130,7 @@ final class PhabricatorMainMenuView extends AphrontView { ), ''); - return array($notification_menu, $notification_dropdown); + return array($bubble_tag, $notification_dropdown); } } diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css index 686a0dfba5..198e2642af 100644 --- a/webroot/rsrc/css/application/base/main-menu-view.css +++ b/webroot/rsrc/css/application/base/main-menu-view.css @@ -339,9 +339,36 @@ a:hover .phabricator-main-search-typeahead-result .result-type { */ -.phabricator-main-menu-alert { +.phabricator-main-menu-alert-bubble { display: inline-block; position: relative; + width: 26px; + height: 26px; + margin-bottom: 9px; +} + +.phabricator-main-menu-alert-bubble.alert-unread { + width: 46px; +} + +.phabricator-main-menu-alert-icon { + position: absolute; + width: 14px; + height: 14px; + top: 4px; + left: 5px; +} + +.phabricator-main-menu-alert-count { + position: absolute; + font-weight: bold; + line-height: 22px; + top: 1px; + right: 8px; + left: 20px; + color: #ffffff; + text-align: center; + display: none; } .phabricator-main-menu-alert-item { @@ -351,25 +378,6 @@ a:hover .phabricator-main-search-typeahead-result .result-type { display: block; } -.phabricator-main-menu-alert-indicator { - display: none; -} - -.phabricator-main-menu-alert-indicator-unread { - position: absolute; +.alert-unread .phabricator-main-menu-alert-count { display: block; - - right: 0px; - top: 2px; - padding: 1px 4px 2px; - - background: #dd3333; - - border: 1px solid #aa0000; - font-size: 11px; - - box-shadow: 0px 0px 6px rgba(255, 255, 255, 0.5); - border-radius: 6px; - font-weight: bold; - color: #ffffff; } diff --git a/webroot/rsrc/css/autosprite.css b/webroot/rsrc/css/autosprite.css index 982a668795..9fdfeb6e1c 100644 --- a/webroot/rsrc/css/autosprite.css +++ b/webroot/rsrc/css/autosprite.css @@ -44,424 +44,412 @@ background-position: -248px 0px; } -.main-menu-item-icon-notifications { +.main-menu-item-icon-task { background-position: -279px 0px; } -.main-menu-item-icon-notifications-selected { +.main-menu-item-icon-task-selected { background-position: -310px 0px; } -.main-menu-item-icon-notifications:hover { +.main-menu-item-icon-task:hover { background-position: -341px 0px; } -.main-menu-item-icon-task { +.app-differential { background-position: -372px 0px; } -.main-menu-item-icon-task-selected { +.device-desktop .app-differential:hover { background-position: -403px 0px; } -.main-menu-item-icon-task:hover { +.app-differential-selected { background-position: -434px 0px; } -.app-differential { +.app-fact { background-position: -465px 0px; } -.device-desktop .app-differential:hover { +.device-desktop .app-fact:hover { background-position: -496px 0px; } -.app-differential-selected { +.app-fact-selected { background-position: -527px 0px; } -.app-fact { +.app-mail { background-position: -558px 0px; } -.device-desktop .app-fact:hover { +.device-desktop .app-mail:hover { background-position: 0px -31px; } -.app-fact-selected { +.app-mail-selected { background-position: -31px -31px; } -.app-mail { +.app-diffusion { background-position: -62px -31px; } -.device-desktop .app-mail:hover { +.device-desktop .app-diffusion:hover { background-position: -93px -31px; } -.app-mail-selected { +.app-diffusion-selected { background-position: -124px -31px; } -.app-diffusion { +.app-slowvote { background-position: -155px -31px; } -.device-desktop .app-diffusion:hover { +.device-desktop .app-slowvote:hover { background-position: -186px -31px; } -.app-diffusion-selected { +.app-slowvote-selected { background-position: -217px -31px; } -.app-slowvote { +.app-phriction { background-position: -248px -31px; } -.device-desktop .app-slowvote:hover { +.device-desktop .app-phriction:hover { background-position: -279px -31px; } -.app-slowvote-selected { +.app-phriction-selected { background-position: -310px -31px; } -.app-phriction { +.app-maniphest { background-position: -341px -31px; } -.device-desktop .app-phriction:hover { +.device-desktop .app-maniphest:hover { background-position: -372px -31px; } -.app-phriction-selected { +.app-maniphest-selected { background-position: -403px -31px; } -.app-maniphest { +.app-flags { background-position: -434px -31px; } -.device-desktop .app-maniphest:hover { +.device-desktop .app-flags:hover { background-position: -465px -31px; } -.app-maniphest-selected { +.app-flags-selected { background-position: -496px -31px; } -.app-flags { +.app-settings { background-position: -527px -31px; } -.device-desktop .app-flags:hover { +.device-desktop .app-settings:hover { background-position: -558px -31px; } -.app-flags-selected { +.app-settings-selected { background-position: 0px -62px; } -.app-settings { +.app-applications { background-position: -31px -62px; } -.device-desktop .app-settings:hover { +.device-desktop .app-applications:hover { background-position: -62px -62px; } -.app-settings-selected { +.app-applications-selected { background-position: -93px -62px; } -.app-applications { +.app-default { background-position: -124px -62px; } -.device-desktop .app-applications:hover { +.device-desktop .app-default:hover { background-position: -155px -62px; } -.app-applications-selected { +.app-default-selected { background-position: -186px -62px; } -.app-default { +.app-people { background-position: -217px -62px; } -.device-desktop .app-default:hover { +.device-desktop .app-people:hover { background-position: -248px -62px; } -.app-default-selected { +.app-people-selected { background-position: -279px -62px; } -.app-people { +.app-ponder { background-position: -310px -62px; } -.device-desktop .app-people:hover { +.device-desktop .app-ponder:hover { background-position: -341px -62px; } -.app-people-selected { +.app-ponder-selected { background-position: -372px -62px; } -.app-ponder { +.app-calendar { background-position: -403px -62px; } -.device-desktop .app-ponder:hover { +.device-desktop .app-calendar:hover { background-position: -434px -62px; } -.app-ponder-selected { +.app-calendar-selected { background-position: -465px -62px; } -.app-calendar { +.app-files { background-position: -496px -62px; } -.device-desktop .app-calendar:hover { +.device-desktop .app-files:hover { background-position: -527px -62px; } -.app-calendar-selected { +.app-files-selected { background-position: -558px -62px; } -.app-files { +.app-projects { background-position: 0px -93px; } -.device-desktop .app-files:hover { +.device-desktop .app-projects:hover { background-position: -31px -93px; } -.app-files-selected { +.app-projects-selected { background-position: -62px -93px; } -.app-projects { +.app-daemons { background-position: -93px -93px; } -.device-desktop .app-projects:hover { +.device-desktop .app-daemons:hover { background-position: -124px -93px; } -.app-projects-selected { +.app-daemons-selected { background-position: -155px -93px; } -.app-daemons { +.app-herald { background-position: -186px -93px; } -.device-desktop .app-daemons:hover { +.device-desktop .app-herald:hover { background-position: -217px -93px; } -.app-daemons-selected { +.app-herald-selected { background-position: -248px -93px; } -.app-herald { +.app-countdown { background-position: -279px -93px; } -.device-desktop .app-herald:hover { +.device-desktop .app-countdown:hover { background-position: -310px -93px; } -.app-herald-selected { +.app-countdown-selected { background-position: -341px -93px; } -.app-countdown { +.app-conduit { background-position: -372px -93px; } -.device-desktop .app-countdown:hover { +.device-desktop .app-conduit:hover { background-position: -403px -93px; } -.app-countdown-selected { +.app-conduit-selected { background-position: -434px -93px; } -.app-conduit { +.app-feed { background-position: -465px -93px; } -.device-desktop .app-conduit:hover { +.device-desktop .app-feed:hover { background-position: -496px -93px; } -.app-conduit-selected { +.app-feed-selected { background-position: -527px -93px; } -.app-feed { - background-position: -558px -93px; -} - -.device-desktop .app-feed:hover { +.app-paste { background-position: 0px -124px; } -.app-feed-selected { +.device-desktop .app-paste:hover { background-position: -31px -124px; } -.app-paste { +.app-paste-selected { background-position: -62px -124px; } -.device-desktop .app-paste:hover { +.app-audit { background-position: -93px -124px; } -.app-paste-selected { +.device-desktop .app-audit:hover { background-position: -124px -124px; } -.app-audit { +.app-audit-selected { background-position: -155px -124px; } -.device-desktop .app-audit:hover { +.app-uiexample { background-position: -186px -124px; } -.app-audit-selected { +.device-desktop .app-uiexample:hover { background-position: -217px -124px; } -.app-uiexample { +.app-uiexample-selected { background-position: -248px -124px; } -.device-desktop .app-uiexample:hover { +.app-phpast { background-position: -279px -124px; } -.app-uiexample-selected { +.device-desktop .app-phpast:hover { background-position: -310px -124px; } -.app-phpast { +.app-phpast-selected { background-position: -341px -124px; } -.device-desktop .app-phpast:hover { +.app-owners { background-position: -372px -124px; } -.app-phpast-selected { +.device-desktop .app-owners:hover { background-position: -403px -124px; } -.app-owners { +.app-owners-selected { background-position: -434px -124px; } -.device-desktop .app-owners:hover { +.app-phid { background-position: -465px -124px; } -.app-owners-selected { +.device-desktop .app-phid:hover { background-position: -496px -124px; } -.app-phid { +.app-phid-selected { background-position: -527px -124px; } -.device-desktop .app-phid:hover { - background-position: -558px -124px; -} - -.app-phid-selected { +.app-diviner { background-position: 0px -155px; } -.app-diviner { +.device-desktop .app-diviner:hover { background-position: -31px -155px; } -.device-desktop .app-diviner:hover { +.app-diviner-selected { background-position: -62px -155px; } -.app-diviner-selected { +.app-repositories { background-position: -93px -155px; } -.app-repositories { +.device-desktop .app-repositories:hover { background-position: -124px -155px; } -.device-desktop .app-repositories:hover { +.app-repositories-selected { background-position: -155px -155px; } -.app-repositories-selected { +.app-phame { background-position: -186px -155px; } -.app-phame { +.device-desktop .app-phame:hover { background-position: -217px -155px; } -.device-desktop .app-phame:hover { +.app-phame-selected { background-position: -248px -155px; } -.app-phame-selected { +.app-macro { background-position: -279px -155px; } -.app-macro { +.device-desktop .app-macro:hover { background-position: -310px -155px; } -.device-desktop .app-macro:hover { +.app-macro-selected { background-position: -341px -155px; } -.app-macro-selected { +.app-releeph { background-position: -372px -155px; } -.app-releeph { +.device-desktop .app-releeph:hover { background-position: -403px -155px; } -.device-desktop .app-releeph:hover { +.app-releeph-selected { background-position: -434px -155px; } -.app-releeph-selected { +.app-drydock { background-position: -465px -155px; } -.app-drydock { +.device-desktop .app-drydock:hover { background-position: -496px -155px; } -.device-desktop .app-drydock:hover { - background-position: -527px -155px; -} - .app-drydock-selected { - background-position: -558px -155px; + background-position: -527px -155px; } .app-differential-large { diff --git a/webroot/rsrc/css/sprite-menu.css b/webroot/rsrc/css/sprite-menu.css new file mode 100644 index 0000000000..a5a62bcfcb --- /dev/null +++ b/webroot/rsrc/css/sprite-menu.css @@ -0,0 +1,38 @@ +/** + * @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; + } +} + +.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.alert-unread { + background-position: 0px -15px; +} + +.phabricator-main-menu-alert-bubble { + background-position: 0px -42px; +} + +.alert-notifications.alert-unread .phabricator-main-menu-alert-icon { + background-position: -27px -42px; +} diff --git a/webroot/rsrc/image/autosprite.png b/webroot/rsrc/image/autosprite.png index 98e0dc238f..2fe3829f8e 100644 Binary files a/webroot/rsrc/image/autosprite.png and b/webroot/rsrc/image/autosprite.png differ diff --git a/webroot/rsrc/image/sprite-menu-X2.png b/webroot/rsrc/image/sprite-menu-X2.png new file mode 100644 index 0000000000..a89c3ef5ed Binary files /dev/null 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 new file mode 100644 index 0000000000..b471e69f18 Binary files /dev/null and b/webroot/rsrc/image/sprite-menu.png differ diff --git a/webroot/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js b/webroot/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js index 1c9ed4e7bf..74b6809472 100644 --- a/webroot/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js +++ b/webroot/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js @@ -9,8 +9,8 @@ JX.behavior('aphlict-dropdown', function(config) { var dropdown = JX.$(config.dropdownID); - var indicator = JX.$(config.indicatorID); - var menu = JX.$(config.menuID); + var count = JX.$(config.countID); + var bubble = JX.$(config.bubbleID); var visible = false; var request = null; @@ -19,13 +19,15 @@ JX.behavior('aphlict-dropdown', function(config) { return; } request = new JX.Request('/notification/panel/', function(response) { - JX.DOM.setContent(indicator, response.number); + var display = (response.number > 999) + ? "\u221E" + : response.number; + + JX.DOM.setContent(count, display); if (response.number == 0) { - JX.DOM.alterClass(indicator, - "phabricator-main-menu-alert-indicator-unread", false); + JX.DOM.alterClass(bubble, 'alert-unread', false); } else { - JX.DOM.alterClass(indicator, - "phabricator-main-menu-alert-indicator-unread", true); + JX.DOM.alterClass(bubble, 'alert-unread', true); } JX.DOM.setContent(dropdown, JX.$H(response.content)); request = null; @@ -33,8 +35,6 @@ JX.behavior('aphlict-dropdown', function(config) { request.send(); } - refresh(); - JX.Stratcom.listen( 'click', null, @@ -50,14 +50,20 @@ JX.behavior('aphlict-dropdown', function(config) { JX.DOM.listen( - menu, + bubble, 'click', null, function(e) { + if (!e.isNormalClick()) { + return; + } + if (visible) { JX.DOM.hide(dropdown); } else { - var p = JX.$V(menu); + refresh(); + + var p = JX.$V(bubble); p.y = null; p.x -= 6; p.setPos(dropdown);