diff --git a/resources/sprite/apps_blue_2x/application.png b/resources/sprite/apps_blue_2x/application.png new file mode 100644 index 0000000000..e6c1ef71d1 Binary files /dev/null and b/resources/sprite/apps_blue_2x/application.png differ diff --git a/resources/sprite/apps_blue_2x/audit.png b/resources/sprite/apps_blue_2x/audit.png new file mode 100644 index 0000000000..688856b73d Binary files /dev/null and b/resources/sprite/apps_blue_2x/audit.png differ diff --git a/resources/sprite/apps_blue_2x/calendar.png b/resources/sprite/apps_blue_2x/calendar.png new file mode 100644 index 0000000000..e87c3fa4d3 Binary files /dev/null and b/resources/sprite/apps_blue_2x/calendar.png differ diff --git a/resources/sprite/apps_blue_2x/conduit.png b/resources/sprite/apps_blue_2x/conduit.png new file mode 100644 index 0000000000..e2fe1007c2 Binary files /dev/null and b/resources/sprite/apps_blue_2x/conduit.png differ diff --git a/resources/sprite/apps_blue_2x/countdown.png b/resources/sprite/apps_blue_2x/countdown.png new file mode 100644 index 0000000000..8b26fa0eb7 Binary files /dev/null and b/resources/sprite/apps_blue_2x/countdown.png differ diff --git a/resources/sprite/apps_blue_2x/daemon.png b/resources/sprite/apps_blue_2x/daemon.png new file mode 100644 index 0000000000..bda514e827 Binary files /dev/null and b/resources/sprite/apps_blue_2x/daemon.png differ diff --git a/resources/sprite/apps_blue_2x/differential.png b/resources/sprite/apps_blue_2x/differential.png new file mode 100644 index 0000000000..4e9fe195c2 Binary files /dev/null and b/resources/sprite/apps_blue_2x/differential.png differ diff --git a/resources/sprite/apps_blue_2x/diffusion.png b/resources/sprite/apps_blue_2x/diffusion.png new file mode 100644 index 0000000000..08184cd824 Binary files /dev/null and b/resources/sprite/apps_blue_2x/diffusion.png differ diff --git a/resources/sprite/apps_blue_2x/diviner.png b/resources/sprite/apps_blue_2x/diviner.png new file mode 100644 index 0000000000..c99e2c7202 Binary files /dev/null and b/resources/sprite/apps_blue_2x/diviner.png differ diff --git a/resources/sprite/apps_blue_2x/drydock.png b/resources/sprite/apps_blue_2x/drydock.png new file mode 100644 index 0000000000..ad1cf3e25b Binary files /dev/null and b/resources/sprite/apps_blue_2x/drydock.png differ diff --git a/resources/sprite/apps_blue_2x/fact.png b/resources/sprite/apps_blue_2x/fact.png new file mode 100644 index 0000000000..0b4cf5c1c2 Binary files /dev/null and b/resources/sprite/apps_blue_2x/fact.png differ diff --git a/resources/sprite/apps_blue_2x/files.png b/resources/sprite/apps_blue_2x/files.png new file mode 100644 index 0000000000..2431b7fa66 Binary files /dev/null and b/resources/sprite/apps_blue_2x/files.png differ diff --git a/resources/sprite/apps_blue_2x/flags.png b/resources/sprite/apps_blue_2x/flags.png new file mode 100644 index 0000000000..919dbc72eb Binary files /dev/null and b/resources/sprite/apps_blue_2x/flags.png differ diff --git a/resources/sprite/apps_blue_2x/help.png b/resources/sprite/apps_blue_2x/help.png new file mode 100644 index 0000000000..d0f995c1e5 Binary files /dev/null and b/resources/sprite/apps_blue_2x/help.png differ diff --git a/resources/sprite/apps_blue_2x/herald.png b/resources/sprite/apps_blue_2x/herald.png new file mode 100644 index 0000000000..ee9eb1d832 Binary files /dev/null and b/resources/sprite/apps_blue_2x/herald.png differ diff --git a/resources/sprite/apps_blue_2x/home.png b/resources/sprite/apps_blue_2x/home.png new file mode 100644 index 0000000000..a7298ba0f6 Binary files /dev/null and b/resources/sprite/apps_blue_2x/home.png differ diff --git a/resources/sprite/apps_blue_2x/logo.png b/resources/sprite/apps_blue_2x/logo.png new file mode 100644 index 0000000000..ebc5c31947 Binary files /dev/null and b/resources/sprite/apps_blue_2x/logo.png differ diff --git a/resources/sprite/apps_blue_2x/macro.png b/resources/sprite/apps_blue_2x/macro.png new file mode 100644 index 0000000000..33954febde Binary files /dev/null and b/resources/sprite/apps_blue_2x/macro.png differ diff --git a/resources/sprite/apps_blue_2x/mail.png b/resources/sprite/apps_blue_2x/mail.png new file mode 100644 index 0000000000..3ac8740713 Binary files /dev/null and b/resources/sprite/apps_blue_2x/mail.png differ diff --git a/resources/sprite/apps_blue_2x/maniphest.png b/resources/sprite/apps_blue_2x/maniphest.png new file mode 100644 index 0000000000..310ff1a134 Binary files /dev/null and b/resources/sprite/apps_blue_2x/maniphest.png differ diff --git a/resources/sprite/apps_blue_2x/metamta.png b/resources/sprite/apps_blue_2x/metamta.png new file mode 100644 index 0000000000..6230edab07 Binary files /dev/null and b/resources/sprite/apps_blue_2x/metamta.png differ diff --git a/resources/sprite/apps_blue_2x/owners.png b/resources/sprite/apps_blue_2x/owners.png new file mode 100644 index 0000000000..80cc901b6e Binary files /dev/null and b/resources/sprite/apps_blue_2x/owners.png differ diff --git a/resources/sprite/apps_blue_2x/paste.png b/resources/sprite/apps_blue_2x/paste.png new file mode 100644 index 0000000000..95e791d5c3 Binary files /dev/null and b/resources/sprite/apps_blue_2x/paste.png differ diff --git a/resources/sprite/apps_blue_2x/people.png b/resources/sprite/apps_blue_2x/people.png new file mode 100644 index 0000000000..5b0a8354b3 Binary files /dev/null and b/resources/sprite/apps_blue_2x/people.png differ diff --git a/resources/sprite/apps_blue_2x/phame.png b/resources/sprite/apps_blue_2x/phame.png new file mode 100644 index 0000000000..ca2d0401e1 Binary files /dev/null and b/resources/sprite/apps_blue_2x/phame.png differ diff --git a/resources/sprite/apps_blue_2x/phid.png b/resources/sprite/apps_blue_2x/phid.png new file mode 100644 index 0000000000..379efaa60b Binary files /dev/null and b/resources/sprite/apps_blue_2x/phid.png differ diff --git a/resources/sprite/apps_blue_2x/pholio.png b/resources/sprite/apps_blue_2x/pholio.png new file mode 100644 index 0000000000..a87c8c3250 Binary files /dev/null and b/resources/sprite/apps_blue_2x/pholio.png differ diff --git a/resources/sprite/apps_blue_2x/phpast.png b/resources/sprite/apps_blue_2x/phpast.png new file mode 100644 index 0000000000..85e415a7fd Binary files /dev/null and b/resources/sprite/apps_blue_2x/phpast.png differ diff --git a/resources/sprite/apps_blue_2x/phriction.png b/resources/sprite/apps_blue_2x/phriction.png new file mode 100644 index 0000000000..a2eb1fa7a8 Binary files /dev/null and b/resources/sprite/apps_blue_2x/phriction.png differ diff --git a/resources/sprite/apps_blue_2x/ponder.png b/resources/sprite/apps_blue_2x/ponder.png new file mode 100644 index 0000000000..f6c65cd4a8 Binary files /dev/null and b/resources/sprite/apps_blue_2x/ponder.png differ diff --git a/resources/sprite/apps_blue_2x/power.png b/resources/sprite/apps_blue_2x/power.png new file mode 100644 index 0000000000..7aa948dc9a Binary files /dev/null and b/resources/sprite/apps_blue_2x/power.png differ diff --git a/resources/sprite/apps_blue_2x/projects.png b/resources/sprite/apps_blue_2x/projects.png new file mode 100644 index 0000000000..a2441dacb2 Binary files /dev/null and b/resources/sprite/apps_blue_2x/projects.png differ diff --git a/resources/sprite/apps_blue_2x/repositories.png b/resources/sprite/apps_blue_2x/repositories.png new file mode 100644 index 0000000000..6687482a3c Binary files /dev/null and b/resources/sprite/apps_blue_2x/repositories.png differ diff --git a/resources/sprite/apps_blue_2x/settings.png b/resources/sprite/apps_blue_2x/settings.png new file mode 100644 index 0000000000..88fe1d2ca6 Binary files /dev/null and b/resources/sprite/apps_blue_2x/settings.png differ diff --git a/resources/sprite/apps_blue_2x/slowvote.png b/resources/sprite/apps_blue_2x/slowvote.png new file mode 100644 index 0000000000..4456263285 Binary files /dev/null and b/resources/sprite/apps_blue_2x/slowvote.png differ diff --git a/resources/sprite/apps_blue_2x/uiexamples.png b/resources/sprite/apps_blue_2x/uiexamples.png new file mode 100644 index 0000000000..c252591b00 Binary files /dev/null and b/resources/sprite/apps_blue_2x/uiexamples.png differ diff --git a/resources/sprite/apps_blue_4x/application.png b/resources/sprite/apps_blue_4x/application.png new file mode 100644 index 0000000000..6345fcd2f0 Binary files /dev/null and b/resources/sprite/apps_blue_4x/application.png differ diff --git a/resources/sprite/apps_blue_4x/audit.png b/resources/sprite/apps_blue_4x/audit.png new file mode 100644 index 0000000000..2b0daf7b80 Binary files /dev/null and b/resources/sprite/apps_blue_4x/audit.png differ diff --git a/resources/sprite/apps_blue_4x/calendar.png b/resources/sprite/apps_blue_4x/calendar.png new file mode 100644 index 0000000000..7464c6f743 Binary files /dev/null and b/resources/sprite/apps_blue_4x/calendar.png differ diff --git a/resources/sprite/apps_blue_4x/conduit.png b/resources/sprite/apps_blue_4x/conduit.png new file mode 100644 index 0000000000..6a0d575ff1 Binary files /dev/null and b/resources/sprite/apps_blue_4x/conduit.png differ diff --git a/resources/sprite/apps_blue_4x/countdown.png b/resources/sprite/apps_blue_4x/countdown.png new file mode 100644 index 0000000000..ff925a3be4 Binary files /dev/null and b/resources/sprite/apps_blue_4x/countdown.png differ diff --git a/resources/sprite/apps_blue_4x/daemon.png b/resources/sprite/apps_blue_4x/daemon.png new file mode 100644 index 0000000000..d9351e89ab Binary files /dev/null and b/resources/sprite/apps_blue_4x/daemon.png differ diff --git a/resources/sprite/apps_blue_4x/differential.png b/resources/sprite/apps_blue_4x/differential.png new file mode 100644 index 0000000000..59a6aa1b8a Binary files /dev/null and b/resources/sprite/apps_blue_4x/differential.png differ diff --git a/resources/sprite/apps_blue_4x/diffusion.png b/resources/sprite/apps_blue_4x/diffusion.png new file mode 100644 index 0000000000..cb7126b23a Binary files /dev/null and b/resources/sprite/apps_blue_4x/diffusion.png differ diff --git a/resources/sprite/apps_blue_4x/diviner.png b/resources/sprite/apps_blue_4x/diviner.png new file mode 100644 index 0000000000..be4438411f Binary files /dev/null and b/resources/sprite/apps_blue_4x/diviner.png differ diff --git a/resources/sprite/apps_blue_4x/drydock.png b/resources/sprite/apps_blue_4x/drydock.png new file mode 100644 index 0000000000..53f5b786d6 Binary files /dev/null and b/resources/sprite/apps_blue_4x/drydock.png differ diff --git a/resources/sprite/apps_blue_4x/fact.png b/resources/sprite/apps_blue_4x/fact.png new file mode 100644 index 0000000000..9abdc7484f Binary files /dev/null and b/resources/sprite/apps_blue_4x/fact.png differ diff --git a/resources/sprite/apps_blue_4x/files.png b/resources/sprite/apps_blue_4x/files.png new file mode 100644 index 0000000000..e54ea0ce09 Binary files /dev/null and b/resources/sprite/apps_blue_4x/files.png differ diff --git a/resources/sprite/apps_blue_4x/flags.png b/resources/sprite/apps_blue_4x/flags.png new file mode 100644 index 0000000000..9756496ad8 Binary files /dev/null and b/resources/sprite/apps_blue_4x/flags.png differ diff --git a/resources/sprite/apps_blue_4x/help.png b/resources/sprite/apps_blue_4x/help.png new file mode 100644 index 0000000000..5880178697 Binary files /dev/null and b/resources/sprite/apps_blue_4x/help.png differ diff --git a/resources/sprite/apps_blue_4x/herald.png b/resources/sprite/apps_blue_4x/herald.png new file mode 100644 index 0000000000..e609a546f0 Binary files /dev/null and b/resources/sprite/apps_blue_4x/herald.png differ diff --git a/resources/sprite/apps_blue_4x/home.png b/resources/sprite/apps_blue_4x/home.png new file mode 100644 index 0000000000..1f79ac0003 Binary files /dev/null and b/resources/sprite/apps_blue_4x/home.png differ diff --git a/resources/sprite/apps_blue_4x/logo.png b/resources/sprite/apps_blue_4x/logo.png new file mode 100644 index 0000000000..80bd288e35 Binary files /dev/null and b/resources/sprite/apps_blue_4x/logo.png differ diff --git a/resources/sprite/apps_blue_4x/macro.png b/resources/sprite/apps_blue_4x/macro.png new file mode 100644 index 0000000000..e56f80f88a Binary files /dev/null and b/resources/sprite/apps_blue_4x/macro.png differ diff --git a/resources/sprite/apps_blue_4x/mail.png b/resources/sprite/apps_blue_4x/mail.png new file mode 100644 index 0000000000..094b8b02f8 Binary files /dev/null and b/resources/sprite/apps_blue_4x/mail.png differ diff --git a/resources/sprite/apps_blue_4x/maniphest.png b/resources/sprite/apps_blue_4x/maniphest.png new file mode 100644 index 0000000000..39e6889da1 Binary files /dev/null and b/resources/sprite/apps_blue_4x/maniphest.png differ diff --git a/resources/sprite/apps_blue_4x/metamta.png b/resources/sprite/apps_blue_4x/metamta.png new file mode 100644 index 0000000000..c741b56282 Binary files /dev/null and b/resources/sprite/apps_blue_4x/metamta.png differ diff --git a/resources/sprite/apps_blue_4x/owners.png b/resources/sprite/apps_blue_4x/owners.png new file mode 100644 index 0000000000..a966d38294 Binary files /dev/null and b/resources/sprite/apps_blue_4x/owners.png differ diff --git a/resources/sprite/apps_blue_4x/paste.png b/resources/sprite/apps_blue_4x/paste.png new file mode 100644 index 0000000000..a42621f380 Binary files /dev/null and b/resources/sprite/apps_blue_4x/paste.png differ diff --git a/resources/sprite/apps_blue_4x/people.png b/resources/sprite/apps_blue_4x/people.png new file mode 100644 index 0000000000..5a81733848 Binary files /dev/null and b/resources/sprite/apps_blue_4x/people.png differ diff --git a/resources/sprite/apps_blue_4x/phame.png b/resources/sprite/apps_blue_4x/phame.png new file mode 100644 index 0000000000..9955704e2f Binary files /dev/null and b/resources/sprite/apps_blue_4x/phame.png differ diff --git a/resources/sprite/apps_blue_4x/phid.png b/resources/sprite/apps_blue_4x/phid.png new file mode 100644 index 0000000000..cb8f51abca Binary files /dev/null and b/resources/sprite/apps_blue_4x/phid.png differ diff --git a/resources/sprite/apps_blue_4x/pholio.png b/resources/sprite/apps_blue_4x/pholio.png new file mode 100644 index 0000000000..51e92b4791 Binary files /dev/null and b/resources/sprite/apps_blue_4x/pholio.png differ diff --git a/resources/sprite/apps_blue_4x/phpast.png b/resources/sprite/apps_blue_4x/phpast.png new file mode 100644 index 0000000000..01f5eb5bb4 Binary files /dev/null and b/resources/sprite/apps_blue_4x/phpast.png differ diff --git a/resources/sprite/apps_blue_4x/phriction.png b/resources/sprite/apps_blue_4x/phriction.png new file mode 100644 index 0000000000..9e5ed2ed48 Binary files /dev/null and b/resources/sprite/apps_blue_4x/phriction.png differ diff --git a/resources/sprite/apps_blue_4x/ponder.png b/resources/sprite/apps_blue_4x/ponder.png new file mode 100644 index 0000000000..69fb11b3ca Binary files /dev/null and b/resources/sprite/apps_blue_4x/ponder.png differ diff --git a/resources/sprite/apps_blue_4x/power.png b/resources/sprite/apps_blue_4x/power.png new file mode 100644 index 0000000000..c5c8742d7e Binary files /dev/null and b/resources/sprite/apps_blue_4x/power.png differ diff --git a/resources/sprite/apps_blue_4x/projects.png b/resources/sprite/apps_blue_4x/projects.png new file mode 100644 index 0000000000..f60483f61f Binary files /dev/null and b/resources/sprite/apps_blue_4x/projects.png differ diff --git a/resources/sprite/apps_blue_4x/repositories.png b/resources/sprite/apps_blue_4x/repositories.png new file mode 100644 index 0000000000..dd0fd36fac Binary files /dev/null and b/resources/sprite/apps_blue_4x/repositories.png differ diff --git a/resources/sprite/apps_blue_4x/settings.png b/resources/sprite/apps_blue_4x/settings.png new file mode 100644 index 0000000000..5e4d0e981a Binary files /dev/null and b/resources/sprite/apps_blue_4x/settings.png differ diff --git a/resources/sprite/apps_blue_4x/slowvote.png b/resources/sprite/apps_blue_4x/slowvote.png new file mode 100644 index 0000000000..543e46b5c4 Binary files /dev/null and b/resources/sprite/apps_blue_4x/slowvote.png differ diff --git a/resources/sprite/apps_blue_4x/uiexamples.png b/resources/sprite/apps_blue_4x/uiexamples.png new file mode 100644 index 0000000000..fa27c066d6 Binary files /dev/null and b/resources/sprite/apps_blue_4x/uiexamples.png differ diff --git a/resources/sprite/apps_dark_1x/application.png b/resources/sprite/apps_dark_1x/application.png new file mode 100644 index 0000000000..c1014f9d48 Binary files /dev/null and b/resources/sprite/apps_dark_1x/application.png differ diff --git a/resources/sprite/apps_dark_1x/audit.png b/resources/sprite/apps_dark_1x/audit.png new file mode 100644 index 0000000000..108926f328 Binary files /dev/null and b/resources/sprite/apps_dark_1x/audit.png differ diff --git a/resources/sprite/apps_dark_1x/calendar.png b/resources/sprite/apps_dark_1x/calendar.png new file mode 100644 index 0000000000..b62b0a59e1 Binary files /dev/null and b/resources/sprite/apps_dark_1x/calendar.png differ diff --git a/resources/sprite/apps_dark_1x/conduit.png b/resources/sprite/apps_dark_1x/conduit.png new file mode 100644 index 0000000000..06bd1c18e0 Binary files /dev/null and b/resources/sprite/apps_dark_1x/conduit.png differ diff --git a/resources/sprite/apps_dark_1x/countdown.png b/resources/sprite/apps_dark_1x/countdown.png new file mode 100644 index 0000000000..3ec71afef3 Binary files /dev/null and b/resources/sprite/apps_dark_1x/countdown.png differ diff --git a/resources/sprite/apps_dark_1x/daemon.png b/resources/sprite/apps_dark_1x/daemon.png new file mode 100644 index 0000000000..8c7493fb02 Binary files /dev/null and b/resources/sprite/apps_dark_1x/daemon.png differ diff --git a/resources/sprite/apps_dark_1x/differential.png b/resources/sprite/apps_dark_1x/differential.png new file mode 100644 index 0000000000..3e45f64c20 Binary files /dev/null and b/resources/sprite/apps_dark_1x/differential.png differ diff --git a/resources/sprite/apps_dark_1x/diffusion.png b/resources/sprite/apps_dark_1x/diffusion.png new file mode 100644 index 0000000000..56e02789fb Binary files /dev/null and b/resources/sprite/apps_dark_1x/diffusion.png differ diff --git a/resources/sprite/apps_dark_1x/diviner.png b/resources/sprite/apps_dark_1x/diviner.png new file mode 100644 index 0000000000..7d4a049dcb Binary files /dev/null and b/resources/sprite/apps_dark_1x/diviner.png differ diff --git a/resources/sprite/apps_dark_1x/drydock.png b/resources/sprite/apps_dark_1x/drydock.png new file mode 100644 index 0000000000..573cf3e7e5 Binary files /dev/null and b/resources/sprite/apps_dark_1x/drydock.png differ diff --git a/resources/sprite/apps_dark_1x/fact.png b/resources/sprite/apps_dark_1x/fact.png new file mode 100644 index 0000000000..9f4533dbe2 Binary files /dev/null and b/resources/sprite/apps_dark_1x/fact.png differ diff --git a/resources/sprite/apps_dark_1x/files.png b/resources/sprite/apps_dark_1x/files.png new file mode 100644 index 0000000000..97eaf96295 Binary files /dev/null and b/resources/sprite/apps_dark_1x/files.png differ diff --git a/resources/sprite/apps_dark_1x/flags.png b/resources/sprite/apps_dark_1x/flags.png new file mode 100644 index 0000000000..793651b13b Binary files /dev/null and b/resources/sprite/apps_dark_1x/flags.png differ diff --git a/resources/sprite/apps_dark_1x/help.png b/resources/sprite/apps_dark_1x/help.png new file mode 100644 index 0000000000..8df7d8d776 Binary files /dev/null and b/resources/sprite/apps_dark_1x/help.png differ diff --git a/resources/sprite/apps_dark_1x/herald.png b/resources/sprite/apps_dark_1x/herald.png new file mode 100644 index 0000000000..df63603d28 Binary files /dev/null and b/resources/sprite/apps_dark_1x/herald.png differ diff --git a/resources/sprite/apps_dark_1x/home.png b/resources/sprite/apps_dark_1x/home.png new file mode 100644 index 0000000000..b6644042a2 Binary files /dev/null and b/resources/sprite/apps_dark_1x/home.png differ diff --git a/resources/sprite/apps_dark_1x/logo.png b/resources/sprite/apps_dark_1x/logo.png new file mode 100644 index 0000000000..90cb5edb60 Binary files /dev/null and b/resources/sprite/apps_dark_1x/logo.png differ diff --git a/resources/sprite/apps_dark_1x/macro.png b/resources/sprite/apps_dark_1x/macro.png new file mode 100644 index 0000000000..926aa1b6eb Binary files /dev/null and b/resources/sprite/apps_dark_1x/macro.png differ diff --git a/resources/sprite/apps_dark_1x/mail.png b/resources/sprite/apps_dark_1x/mail.png new file mode 100644 index 0000000000..b8ae22573e Binary files /dev/null and b/resources/sprite/apps_dark_1x/mail.png differ diff --git a/resources/sprite/apps_dark_1x/maniphest.png b/resources/sprite/apps_dark_1x/maniphest.png new file mode 100644 index 0000000000..d8afda2e9b Binary files /dev/null and b/resources/sprite/apps_dark_1x/maniphest.png differ diff --git a/resources/sprite/apps_dark_1x/metamta.png b/resources/sprite/apps_dark_1x/metamta.png new file mode 100644 index 0000000000..a2ca22dc9f Binary files /dev/null and b/resources/sprite/apps_dark_1x/metamta.png differ diff --git a/resources/sprite/apps_dark_1x/owners.png b/resources/sprite/apps_dark_1x/owners.png new file mode 100644 index 0000000000..e29daf2867 Binary files /dev/null and b/resources/sprite/apps_dark_1x/owners.png differ diff --git a/resources/sprite/apps_dark_1x/paste.png b/resources/sprite/apps_dark_1x/paste.png new file mode 100644 index 0000000000..04cb231038 Binary files /dev/null and b/resources/sprite/apps_dark_1x/paste.png differ diff --git a/resources/sprite/apps_dark_1x/people.png b/resources/sprite/apps_dark_1x/people.png new file mode 100644 index 0000000000..1a4594b851 Binary files /dev/null and b/resources/sprite/apps_dark_1x/people.png differ diff --git a/resources/sprite/apps_dark_1x/phame.png b/resources/sprite/apps_dark_1x/phame.png new file mode 100644 index 0000000000..f0b081c3e2 Binary files /dev/null and b/resources/sprite/apps_dark_1x/phame.png differ diff --git a/resources/sprite/apps_dark_1x/phid.png b/resources/sprite/apps_dark_1x/phid.png new file mode 100644 index 0000000000..c86103550e Binary files /dev/null and b/resources/sprite/apps_dark_1x/phid.png differ diff --git a/resources/sprite/apps_dark_1x/pholio.png b/resources/sprite/apps_dark_1x/pholio.png new file mode 100644 index 0000000000..3e9c4524d4 Binary files /dev/null and b/resources/sprite/apps_dark_1x/pholio.png differ diff --git a/resources/sprite/apps_dark_1x/phpast.png b/resources/sprite/apps_dark_1x/phpast.png new file mode 100644 index 0000000000..1f8df33c47 Binary files /dev/null and b/resources/sprite/apps_dark_1x/phpast.png differ diff --git a/resources/sprite/apps_dark_1x/phriction.png b/resources/sprite/apps_dark_1x/phriction.png new file mode 100644 index 0000000000..68c053f715 Binary files /dev/null and b/resources/sprite/apps_dark_1x/phriction.png differ diff --git a/resources/sprite/apps_dark_1x/ponder.png b/resources/sprite/apps_dark_1x/ponder.png new file mode 100644 index 0000000000..91426fdd2b Binary files /dev/null and b/resources/sprite/apps_dark_1x/ponder.png differ diff --git a/resources/sprite/apps_dark_1x/power.png b/resources/sprite/apps_dark_1x/power.png new file mode 100644 index 0000000000..e06372322f Binary files /dev/null and b/resources/sprite/apps_dark_1x/power.png differ diff --git a/resources/sprite/apps_dark_1x/projects.png b/resources/sprite/apps_dark_1x/projects.png new file mode 100644 index 0000000000..6a24ef286f Binary files /dev/null and b/resources/sprite/apps_dark_1x/projects.png differ diff --git a/resources/sprite/apps_dark_1x/repositories.png b/resources/sprite/apps_dark_1x/repositories.png new file mode 100644 index 0000000000..52c324590c Binary files /dev/null and b/resources/sprite/apps_dark_1x/repositories.png differ diff --git a/resources/sprite/apps_dark_1x/settings.png b/resources/sprite/apps_dark_1x/settings.png new file mode 100644 index 0000000000..2acdddd08d Binary files /dev/null and b/resources/sprite/apps_dark_1x/settings.png differ diff --git a/resources/sprite/apps_dark_1x/slowvote.png b/resources/sprite/apps_dark_1x/slowvote.png new file mode 100644 index 0000000000..218563e4ac Binary files /dev/null and b/resources/sprite/apps_dark_1x/slowvote.png differ diff --git a/resources/sprite/apps_dark_1x/uiexamples.png b/resources/sprite/apps_dark_1x/uiexamples.png new file mode 100644 index 0000000000..9120fe40fd Binary files /dev/null and b/resources/sprite/apps_dark_1x/uiexamples.png differ diff --git a/resources/sprite/apps_dark_2x/application.png b/resources/sprite/apps_dark_2x/application.png new file mode 100644 index 0000000000..7290ba1862 Binary files /dev/null and b/resources/sprite/apps_dark_2x/application.png differ diff --git a/resources/sprite/apps_dark_2x/audit.png b/resources/sprite/apps_dark_2x/audit.png new file mode 100644 index 0000000000..a1c4ae27a1 Binary files /dev/null and b/resources/sprite/apps_dark_2x/audit.png differ diff --git a/resources/sprite/apps_dark_2x/calendar.png b/resources/sprite/apps_dark_2x/calendar.png new file mode 100644 index 0000000000..5ce9d49940 Binary files /dev/null and b/resources/sprite/apps_dark_2x/calendar.png differ diff --git a/resources/sprite/apps_dark_2x/conduit.png b/resources/sprite/apps_dark_2x/conduit.png new file mode 100644 index 0000000000..7b20ebc464 Binary files /dev/null and b/resources/sprite/apps_dark_2x/conduit.png differ diff --git a/resources/sprite/apps_dark_2x/countdown.png b/resources/sprite/apps_dark_2x/countdown.png new file mode 100644 index 0000000000..6b1655f4e2 Binary files /dev/null and b/resources/sprite/apps_dark_2x/countdown.png differ diff --git a/resources/sprite/apps_dark_2x/daemon.png b/resources/sprite/apps_dark_2x/daemon.png new file mode 100644 index 0000000000..27e601f071 Binary files /dev/null and b/resources/sprite/apps_dark_2x/daemon.png differ diff --git a/resources/sprite/apps_dark_2x/differential.png b/resources/sprite/apps_dark_2x/differential.png new file mode 100644 index 0000000000..7bc7c09538 Binary files /dev/null and b/resources/sprite/apps_dark_2x/differential.png differ diff --git a/resources/sprite/apps_dark_2x/diffusion.png b/resources/sprite/apps_dark_2x/diffusion.png new file mode 100644 index 0000000000..5779996c26 Binary files /dev/null and b/resources/sprite/apps_dark_2x/diffusion.png differ diff --git a/resources/sprite/apps_dark_2x/diviner.png b/resources/sprite/apps_dark_2x/diviner.png new file mode 100644 index 0000000000..b09dd5c034 Binary files /dev/null and b/resources/sprite/apps_dark_2x/diviner.png differ diff --git a/resources/sprite/apps_dark_2x/drydock.png b/resources/sprite/apps_dark_2x/drydock.png new file mode 100644 index 0000000000..06aa00a88a Binary files /dev/null and b/resources/sprite/apps_dark_2x/drydock.png differ diff --git a/resources/sprite/apps_dark_2x/fact.png b/resources/sprite/apps_dark_2x/fact.png new file mode 100644 index 0000000000..9e699ba705 Binary files /dev/null and b/resources/sprite/apps_dark_2x/fact.png differ diff --git a/resources/sprite/apps_dark_2x/files.png b/resources/sprite/apps_dark_2x/files.png new file mode 100644 index 0000000000..3ee1b1ba9a Binary files /dev/null and b/resources/sprite/apps_dark_2x/files.png differ diff --git a/resources/sprite/apps_dark_2x/flags.png b/resources/sprite/apps_dark_2x/flags.png new file mode 100644 index 0000000000..a508919def Binary files /dev/null and b/resources/sprite/apps_dark_2x/flags.png differ diff --git a/resources/sprite/apps_dark_2x/help.png b/resources/sprite/apps_dark_2x/help.png new file mode 100644 index 0000000000..af3aa0e55e Binary files /dev/null and b/resources/sprite/apps_dark_2x/help.png differ diff --git a/resources/sprite/apps_dark_2x/herald.png b/resources/sprite/apps_dark_2x/herald.png new file mode 100644 index 0000000000..1abfe33e1e Binary files /dev/null and b/resources/sprite/apps_dark_2x/herald.png differ diff --git a/resources/sprite/apps_dark_2x/home.png b/resources/sprite/apps_dark_2x/home.png new file mode 100644 index 0000000000..7e9248f3f6 Binary files /dev/null and b/resources/sprite/apps_dark_2x/home.png differ diff --git a/resources/sprite/apps_dark_2x/logo.png b/resources/sprite/apps_dark_2x/logo.png new file mode 100644 index 0000000000..a5070285d1 Binary files /dev/null and b/resources/sprite/apps_dark_2x/logo.png differ diff --git a/resources/sprite/apps_dark_2x/macro.png b/resources/sprite/apps_dark_2x/macro.png new file mode 100644 index 0000000000..0b1484b86f Binary files /dev/null and b/resources/sprite/apps_dark_2x/macro.png differ diff --git a/resources/sprite/apps_dark_2x/mail.png b/resources/sprite/apps_dark_2x/mail.png new file mode 100644 index 0000000000..2144b99538 Binary files /dev/null and b/resources/sprite/apps_dark_2x/mail.png differ diff --git a/resources/sprite/apps_dark_2x/maniphest.png b/resources/sprite/apps_dark_2x/maniphest.png new file mode 100644 index 0000000000..3f0777d5bb Binary files /dev/null and b/resources/sprite/apps_dark_2x/maniphest.png differ diff --git a/resources/sprite/apps_dark_2x/metamta.png b/resources/sprite/apps_dark_2x/metamta.png new file mode 100644 index 0000000000..fd231c5d96 Binary files /dev/null and b/resources/sprite/apps_dark_2x/metamta.png differ diff --git a/resources/sprite/apps_dark_2x/owners.png b/resources/sprite/apps_dark_2x/owners.png new file mode 100644 index 0000000000..f9e85c340b Binary files /dev/null and b/resources/sprite/apps_dark_2x/owners.png differ diff --git a/resources/sprite/apps_dark_2x/paste.png b/resources/sprite/apps_dark_2x/paste.png new file mode 100644 index 0000000000..6cdf7401e2 Binary files /dev/null and b/resources/sprite/apps_dark_2x/paste.png differ diff --git a/resources/sprite/apps_dark_2x/people.png b/resources/sprite/apps_dark_2x/people.png new file mode 100644 index 0000000000..98a1bc0255 Binary files /dev/null and b/resources/sprite/apps_dark_2x/people.png differ diff --git a/resources/sprite/apps_dark_2x/phame.png b/resources/sprite/apps_dark_2x/phame.png new file mode 100644 index 0000000000..ba2a0e3d7b Binary files /dev/null and b/resources/sprite/apps_dark_2x/phame.png differ diff --git a/resources/sprite/apps_dark_2x/phid.png b/resources/sprite/apps_dark_2x/phid.png new file mode 100644 index 0000000000..a33368f563 Binary files /dev/null and b/resources/sprite/apps_dark_2x/phid.png differ diff --git a/resources/sprite/apps_dark_2x/pholio.png b/resources/sprite/apps_dark_2x/pholio.png new file mode 100644 index 0000000000..a7534b610c Binary files /dev/null and b/resources/sprite/apps_dark_2x/pholio.png differ diff --git a/resources/sprite/apps_dark_2x/phpast.png b/resources/sprite/apps_dark_2x/phpast.png new file mode 100644 index 0000000000..b34407dfb1 Binary files /dev/null and b/resources/sprite/apps_dark_2x/phpast.png differ diff --git a/resources/sprite/apps_dark_2x/phriction.png b/resources/sprite/apps_dark_2x/phriction.png new file mode 100644 index 0000000000..78ccde9243 Binary files /dev/null and b/resources/sprite/apps_dark_2x/phriction.png differ diff --git a/resources/sprite/apps_dark_2x/ponder.png b/resources/sprite/apps_dark_2x/ponder.png new file mode 100644 index 0000000000..def56bf456 Binary files /dev/null and b/resources/sprite/apps_dark_2x/ponder.png differ diff --git a/resources/sprite/apps_dark_2x/power.png b/resources/sprite/apps_dark_2x/power.png new file mode 100644 index 0000000000..2de7fb26b6 Binary files /dev/null and b/resources/sprite/apps_dark_2x/power.png differ diff --git a/resources/sprite/apps_dark_2x/projects.png b/resources/sprite/apps_dark_2x/projects.png new file mode 100644 index 0000000000..c2e49f1f60 Binary files /dev/null and b/resources/sprite/apps_dark_2x/projects.png differ diff --git a/resources/sprite/apps_dark_2x/repositories.png b/resources/sprite/apps_dark_2x/repositories.png new file mode 100644 index 0000000000..32a16b498c Binary files /dev/null and b/resources/sprite/apps_dark_2x/repositories.png differ diff --git a/resources/sprite/apps_dark_2x/settings.png b/resources/sprite/apps_dark_2x/settings.png new file mode 100644 index 0000000000..e30c1e1c7e Binary files /dev/null and b/resources/sprite/apps_dark_2x/settings.png differ diff --git a/resources/sprite/apps_dark_2x/slowvote.png b/resources/sprite/apps_dark_2x/slowvote.png new file mode 100644 index 0000000000..09fec2388b Binary files /dev/null and b/resources/sprite/apps_dark_2x/slowvote.png differ diff --git a/resources/sprite/apps_dark_2x/uiexamples.png b/resources/sprite/apps_dark_2x/uiexamples.png new file mode 100644 index 0000000000..2c41e474e4 Binary files /dev/null and b/resources/sprite/apps_dark_2x/uiexamples.png differ diff --git a/resources/sprite/apps_dark_4x/application.png b/resources/sprite/apps_dark_4x/application.png new file mode 100644 index 0000000000..22be802be7 Binary files /dev/null and b/resources/sprite/apps_dark_4x/application.png differ diff --git a/resources/sprite/apps_dark_4x/audit.png b/resources/sprite/apps_dark_4x/audit.png new file mode 100644 index 0000000000..4f6eb2b335 Binary files /dev/null and b/resources/sprite/apps_dark_4x/audit.png differ diff --git a/resources/sprite/apps_dark_4x/calendar.png b/resources/sprite/apps_dark_4x/calendar.png new file mode 100644 index 0000000000..ddfd62c543 Binary files /dev/null and b/resources/sprite/apps_dark_4x/calendar.png differ diff --git a/resources/sprite/apps_dark_4x/conduit.png b/resources/sprite/apps_dark_4x/conduit.png new file mode 100644 index 0000000000..14ba3f4d21 Binary files /dev/null and b/resources/sprite/apps_dark_4x/conduit.png differ diff --git a/resources/sprite/apps_dark_4x/countdown.png b/resources/sprite/apps_dark_4x/countdown.png new file mode 100644 index 0000000000..54637f817a Binary files /dev/null and b/resources/sprite/apps_dark_4x/countdown.png differ diff --git a/resources/sprite/apps_dark_4x/daemon.png b/resources/sprite/apps_dark_4x/daemon.png new file mode 100644 index 0000000000..9f7ef81599 Binary files /dev/null and b/resources/sprite/apps_dark_4x/daemon.png differ diff --git a/resources/sprite/apps_dark_4x/differential.png b/resources/sprite/apps_dark_4x/differential.png new file mode 100644 index 0000000000..51dcf39390 Binary files /dev/null and b/resources/sprite/apps_dark_4x/differential.png differ diff --git a/resources/sprite/apps_dark_4x/diffusion.png b/resources/sprite/apps_dark_4x/diffusion.png new file mode 100644 index 0000000000..4470401859 Binary files /dev/null and b/resources/sprite/apps_dark_4x/diffusion.png differ diff --git a/resources/sprite/apps_dark_4x/diviner.png b/resources/sprite/apps_dark_4x/diviner.png new file mode 100644 index 0000000000..d4288d81f0 Binary files /dev/null and b/resources/sprite/apps_dark_4x/diviner.png differ diff --git a/resources/sprite/apps_dark_4x/drydock.png b/resources/sprite/apps_dark_4x/drydock.png new file mode 100644 index 0000000000..059a75056b Binary files /dev/null and b/resources/sprite/apps_dark_4x/drydock.png differ diff --git a/resources/sprite/apps_dark_4x/fact.png b/resources/sprite/apps_dark_4x/fact.png new file mode 100644 index 0000000000..d2ab0c1f1b Binary files /dev/null and b/resources/sprite/apps_dark_4x/fact.png differ diff --git a/resources/sprite/apps_dark_4x/files.png b/resources/sprite/apps_dark_4x/files.png new file mode 100644 index 0000000000..6a7fdf6bb7 Binary files /dev/null and b/resources/sprite/apps_dark_4x/files.png differ diff --git a/resources/sprite/apps_dark_4x/flags.png b/resources/sprite/apps_dark_4x/flags.png new file mode 100644 index 0000000000..2f6c274487 Binary files /dev/null and b/resources/sprite/apps_dark_4x/flags.png differ diff --git a/resources/sprite/apps_dark_4x/help.png b/resources/sprite/apps_dark_4x/help.png new file mode 100644 index 0000000000..fa1b77b6c6 Binary files /dev/null and b/resources/sprite/apps_dark_4x/help.png differ diff --git a/resources/sprite/apps_dark_4x/herald.png b/resources/sprite/apps_dark_4x/herald.png new file mode 100644 index 0000000000..d78a6915fd Binary files /dev/null and b/resources/sprite/apps_dark_4x/herald.png differ diff --git a/resources/sprite/apps_dark_4x/home.png b/resources/sprite/apps_dark_4x/home.png new file mode 100644 index 0000000000..a6dc9a98e6 Binary files /dev/null and b/resources/sprite/apps_dark_4x/home.png differ diff --git a/resources/sprite/apps_dark_4x/logo.png b/resources/sprite/apps_dark_4x/logo.png new file mode 100644 index 0000000000..0b4df07a6b Binary files /dev/null and b/resources/sprite/apps_dark_4x/logo.png differ diff --git a/resources/sprite/apps_dark_4x/macro.png b/resources/sprite/apps_dark_4x/macro.png new file mode 100644 index 0000000000..8c8667d27e Binary files /dev/null and b/resources/sprite/apps_dark_4x/macro.png differ diff --git a/resources/sprite/apps_dark_4x/mail.png b/resources/sprite/apps_dark_4x/mail.png new file mode 100644 index 0000000000..d5a6626135 Binary files /dev/null and b/resources/sprite/apps_dark_4x/mail.png differ diff --git a/resources/sprite/apps_dark_4x/maniphest.png b/resources/sprite/apps_dark_4x/maniphest.png new file mode 100644 index 0000000000..f5008bd1c0 Binary files /dev/null and b/resources/sprite/apps_dark_4x/maniphest.png differ diff --git a/resources/sprite/apps_dark_4x/metamta.png b/resources/sprite/apps_dark_4x/metamta.png new file mode 100644 index 0000000000..08fd3695d3 Binary files /dev/null and b/resources/sprite/apps_dark_4x/metamta.png differ diff --git a/resources/sprite/apps_dark_4x/owners.png b/resources/sprite/apps_dark_4x/owners.png new file mode 100644 index 0000000000..5017b6b35e Binary files /dev/null and b/resources/sprite/apps_dark_4x/owners.png differ diff --git a/resources/sprite/apps_dark_4x/paste.png b/resources/sprite/apps_dark_4x/paste.png new file mode 100644 index 0000000000..ba30a8cd86 Binary files /dev/null and b/resources/sprite/apps_dark_4x/paste.png differ diff --git a/resources/sprite/apps_dark_4x/people.png b/resources/sprite/apps_dark_4x/people.png new file mode 100644 index 0000000000..5a6a23014d Binary files /dev/null and b/resources/sprite/apps_dark_4x/people.png differ diff --git a/resources/sprite/apps_dark_4x/phame.png b/resources/sprite/apps_dark_4x/phame.png new file mode 100644 index 0000000000..df419ae150 Binary files /dev/null and b/resources/sprite/apps_dark_4x/phame.png differ diff --git a/resources/sprite/apps_dark_4x/phid.png b/resources/sprite/apps_dark_4x/phid.png new file mode 100644 index 0000000000..605f3f0f6e Binary files /dev/null and b/resources/sprite/apps_dark_4x/phid.png differ diff --git a/resources/sprite/apps_dark_4x/pholio.png b/resources/sprite/apps_dark_4x/pholio.png new file mode 100644 index 0000000000..414b43f43f Binary files /dev/null and b/resources/sprite/apps_dark_4x/pholio.png differ diff --git a/resources/sprite/apps_dark_4x/phpast.png b/resources/sprite/apps_dark_4x/phpast.png new file mode 100644 index 0000000000..998c55a020 Binary files /dev/null and b/resources/sprite/apps_dark_4x/phpast.png differ diff --git a/resources/sprite/apps_dark_4x/phriction.png b/resources/sprite/apps_dark_4x/phriction.png new file mode 100644 index 0000000000..01e57dbc36 Binary files /dev/null and b/resources/sprite/apps_dark_4x/phriction.png differ diff --git a/resources/sprite/apps_dark_4x/ponder.png b/resources/sprite/apps_dark_4x/ponder.png new file mode 100644 index 0000000000..8ea011b27a Binary files /dev/null and b/resources/sprite/apps_dark_4x/ponder.png differ diff --git a/resources/sprite/apps_dark_4x/power.png b/resources/sprite/apps_dark_4x/power.png new file mode 100644 index 0000000000..4cd468f075 Binary files /dev/null and b/resources/sprite/apps_dark_4x/power.png differ diff --git a/resources/sprite/apps_dark_4x/projects.png b/resources/sprite/apps_dark_4x/projects.png new file mode 100644 index 0000000000..1ddc862ed6 Binary files /dev/null and b/resources/sprite/apps_dark_4x/projects.png differ diff --git a/resources/sprite/apps_dark_4x/repositories.png b/resources/sprite/apps_dark_4x/repositories.png new file mode 100644 index 0000000000..1c9492d11f Binary files /dev/null and b/resources/sprite/apps_dark_4x/repositories.png differ diff --git a/resources/sprite/apps_dark_4x/settings.png b/resources/sprite/apps_dark_4x/settings.png new file mode 100644 index 0000000000..707cc81a06 Binary files /dev/null and b/resources/sprite/apps_dark_4x/settings.png differ diff --git a/resources/sprite/apps_dark_4x/slowvote.png b/resources/sprite/apps_dark_4x/slowvote.png new file mode 100644 index 0000000000..ed105dc351 Binary files /dev/null and b/resources/sprite/apps_dark_4x/slowvote.png differ diff --git a/resources/sprite/apps_dark_4x/uiexamples.png b/resources/sprite/apps_dark_4x/uiexamples.png new file mode 100644 index 0000000000..48ad436d9b Binary files /dev/null and b/resources/sprite/apps_dark_4x/uiexamples.png differ diff --git a/resources/sprite/apps_glow_2x/application.png b/resources/sprite/apps_glow_2x/application.png new file mode 100644 index 0000000000..6e0f652943 Binary files /dev/null and b/resources/sprite/apps_glow_2x/application.png differ diff --git a/resources/sprite/apps_glow_2x/audit.png b/resources/sprite/apps_glow_2x/audit.png new file mode 100644 index 0000000000..061803934d Binary files /dev/null and b/resources/sprite/apps_glow_2x/audit.png differ diff --git a/resources/sprite/apps_glow_2x/calendar.png b/resources/sprite/apps_glow_2x/calendar.png new file mode 100644 index 0000000000..7502bfd882 Binary files /dev/null and b/resources/sprite/apps_glow_2x/calendar.png differ diff --git a/resources/sprite/apps_glow_2x/conduit.png b/resources/sprite/apps_glow_2x/conduit.png new file mode 100644 index 0000000000..eb7c2d9fe6 Binary files /dev/null and b/resources/sprite/apps_glow_2x/conduit.png differ diff --git a/resources/sprite/apps_glow_2x/countdown.png b/resources/sprite/apps_glow_2x/countdown.png new file mode 100644 index 0000000000..3a1f5ad604 Binary files /dev/null and b/resources/sprite/apps_glow_2x/countdown.png differ diff --git a/resources/sprite/apps_glow_2x/daemon.png b/resources/sprite/apps_glow_2x/daemon.png new file mode 100644 index 0000000000..350ac412b8 Binary files /dev/null and b/resources/sprite/apps_glow_2x/daemon.png differ diff --git a/resources/sprite/apps_glow_2x/differential.png b/resources/sprite/apps_glow_2x/differential.png new file mode 100644 index 0000000000..a31ecb58ba Binary files /dev/null and b/resources/sprite/apps_glow_2x/differential.png differ diff --git a/resources/sprite/apps_glow_2x/diffusion.png b/resources/sprite/apps_glow_2x/diffusion.png new file mode 100644 index 0000000000..cddeb336e8 Binary files /dev/null and b/resources/sprite/apps_glow_2x/diffusion.png differ diff --git a/resources/sprite/apps_glow_2x/diviner.png b/resources/sprite/apps_glow_2x/diviner.png new file mode 100644 index 0000000000..c4c04bfc88 Binary files /dev/null and b/resources/sprite/apps_glow_2x/diviner.png differ diff --git a/resources/sprite/apps_glow_2x/drydock.png b/resources/sprite/apps_glow_2x/drydock.png new file mode 100644 index 0000000000..c71a18ed10 Binary files /dev/null and b/resources/sprite/apps_glow_2x/drydock.png differ diff --git a/resources/sprite/apps_glow_2x/fact.png b/resources/sprite/apps_glow_2x/fact.png new file mode 100644 index 0000000000..5701274aff Binary files /dev/null and b/resources/sprite/apps_glow_2x/fact.png differ diff --git a/resources/sprite/apps_glow_2x/files.png b/resources/sprite/apps_glow_2x/files.png new file mode 100644 index 0000000000..6dd79e55f9 Binary files /dev/null and b/resources/sprite/apps_glow_2x/files.png differ diff --git a/resources/sprite/apps_glow_2x/flags.png b/resources/sprite/apps_glow_2x/flags.png new file mode 100644 index 0000000000..5b32cd3e77 Binary files /dev/null and b/resources/sprite/apps_glow_2x/flags.png differ diff --git a/resources/sprite/apps_glow_2x/help.png b/resources/sprite/apps_glow_2x/help.png new file mode 100644 index 0000000000..a78a187cd7 Binary files /dev/null and b/resources/sprite/apps_glow_2x/help.png differ diff --git a/resources/sprite/apps_glow_2x/herald.png b/resources/sprite/apps_glow_2x/herald.png new file mode 100644 index 0000000000..d92eb03132 Binary files /dev/null and b/resources/sprite/apps_glow_2x/herald.png differ diff --git a/resources/sprite/apps_glow_2x/home.png b/resources/sprite/apps_glow_2x/home.png new file mode 100644 index 0000000000..6d9439613c Binary files /dev/null and b/resources/sprite/apps_glow_2x/home.png differ diff --git a/resources/sprite/apps_glow_2x/logo.png b/resources/sprite/apps_glow_2x/logo.png new file mode 100644 index 0000000000..5a188c2575 Binary files /dev/null and b/resources/sprite/apps_glow_2x/logo.png differ diff --git a/resources/sprite/apps_glow_2x/macro.png b/resources/sprite/apps_glow_2x/macro.png new file mode 100644 index 0000000000..2305d9341b Binary files /dev/null and b/resources/sprite/apps_glow_2x/macro.png differ diff --git a/resources/sprite/apps_glow_2x/mail.png b/resources/sprite/apps_glow_2x/mail.png new file mode 100644 index 0000000000..ac3cc2e85e Binary files /dev/null and b/resources/sprite/apps_glow_2x/mail.png differ diff --git a/resources/sprite/apps_glow_2x/maniphest.png b/resources/sprite/apps_glow_2x/maniphest.png new file mode 100644 index 0000000000..8e5f76ecab Binary files /dev/null and b/resources/sprite/apps_glow_2x/maniphest.png differ diff --git a/resources/sprite/apps_glow_2x/metamta.png b/resources/sprite/apps_glow_2x/metamta.png new file mode 100644 index 0000000000..2239735f81 Binary files /dev/null and b/resources/sprite/apps_glow_2x/metamta.png differ diff --git a/resources/sprite/apps_glow_2x/owners.png b/resources/sprite/apps_glow_2x/owners.png new file mode 100644 index 0000000000..1cb6759fc6 Binary files /dev/null and b/resources/sprite/apps_glow_2x/owners.png differ diff --git a/resources/sprite/apps_glow_2x/paste.png b/resources/sprite/apps_glow_2x/paste.png new file mode 100644 index 0000000000..a418a1272c Binary files /dev/null and b/resources/sprite/apps_glow_2x/paste.png differ diff --git a/resources/sprite/apps_glow_2x/people.png b/resources/sprite/apps_glow_2x/people.png new file mode 100644 index 0000000000..44a8667bc8 Binary files /dev/null and b/resources/sprite/apps_glow_2x/people.png differ diff --git a/resources/sprite/apps_glow_2x/phame.png b/resources/sprite/apps_glow_2x/phame.png new file mode 100644 index 0000000000..618d217ca6 Binary files /dev/null and b/resources/sprite/apps_glow_2x/phame.png differ diff --git a/resources/sprite/apps_glow_2x/phid.png b/resources/sprite/apps_glow_2x/phid.png new file mode 100644 index 0000000000..53d3e71e8c Binary files /dev/null and b/resources/sprite/apps_glow_2x/phid.png differ diff --git a/resources/sprite/apps_glow_2x/pholio.png b/resources/sprite/apps_glow_2x/pholio.png new file mode 100644 index 0000000000..601a3fbf03 Binary files /dev/null and b/resources/sprite/apps_glow_2x/pholio.png differ diff --git a/resources/sprite/apps_glow_2x/phpast.png b/resources/sprite/apps_glow_2x/phpast.png new file mode 100644 index 0000000000..e878643f78 Binary files /dev/null and b/resources/sprite/apps_glow_2x/phpast.png differ diff --git a/resources/sprite/apps_glow_2x/phriction.png b/resources/sprite/apps_glow_2x/phriction.png new file mode 100644 index 0000000000..a578e62b45 Binary files /dev/null and b/resources/sprite/apps_glow_2x/phriction.png differ diff --git a/resources/sprite/apps_glow_2x/ponder.png b/resources/sprite/apps_glow_2x/ponder.png new file mode 100644 index 0000000000..a50046e809 Binary files /dev/null and b/resources/sprite/apps_glow_2x/ponder.png differ diff --git a/resources/sprite/apps_glow_2x/power.png b/resources/sprite/apps_glow_2x/power.png new file mode 100644 index 0000000000..64a6f802fa Binary files /dev/null and b/resources/sprite/apps_glow_2x/power.png differ diff --git a/resources/sprite/apps_glow_2x/projects.png b/resources/sprite/apps_glow_2x/projects.png new file mode 100644 index 0000000000..61d5a1af17 Binary files /dev/null and b/resources/sprite/apps_glow_2x/projects.png differ diff --git a/resources/sprite/apps_glow_2x/repositories.png b/resources/sprite/apps_glow_2x/repositories.png new file mode 100644 index 0000000000..d0ce77a1aa Binary files /dev/null and b/resources/sprite/apps_glow_2x/repositories.png differ diff --git a/resources/sprite/apps_glow_2x/settings.png b/resources/sprite/apps_glow_2x/settings.png new file mode 100644 index 0000000000..9e6d7cf908 Binary files /dev/null and b/resources/sprite/apps_glow_2x/settings.png differ diff --git a/resources/sprite/apps_glow_2x/slowvote.png b/resources/sprite/apps_glow_2x/slowvote.png new file mode 100644 index 0000000000..c56b72130c Binary files /dev/null and b/resources/sprite/apps_glow_2x/slowvote.png differ diff --git a/resources/sprite/apps_glow_2x/uiexamples.png b/resources/sprite/apps_glow_2x/uiexamples.png new file mode 100644 index 0000000000..55306db0da Binary files /dev/null and b/resources/sprite/apps_glow_2x/uiexamples.png differ diff --git a/resources/sprite/apps_glow_4x/application.png b/resources/sprite/apps_glow_4x/application.png new file mode 100644 index 0000000000..e376151a3e Binary files /dev/null and b/resources/sprite/apps_glow_4x/application.png differ diff --git a/resources/sprite/apps_glow_4x/audit.png b/resources/sprite/apps_glow_4x/audit.png new file mode 100644 index 0000000000..365affbec9 Binary files /dev/null and b/resources/sprite/apps_glow_4x/audit.png differ diff --git a/resources/sprite/apps_glow_4x/calendar.png b/resources/sprite/apps_glow_4x/calendar.png new file mode 100644 index 0000000000..2b21c26513 Binary files /dev/null and b/resources/sprite/apps_glow_4x/calendar.png differ diff --git a/resources/sprite/apps_glow_4x/conduit.png b/resources/sprite/apps_glow_4x/conduit.png new file mode 100644 index 0000000000..a7e1f73c18 Binary files /dev/null and b/resources/sprite/apps_glow_4x/conduit.png differ diff --git a/resources/sprite/apps_glow_4x/countdown.png b/resources/sprite/apps_glow_4x/countdown.png new file mode 100644 index 0000000000..e75c9752aa Binary files /dev/null and b/resources/sprite/apps_glow_4x/countdown.png differ diff --git a/resources/sprite/apps_glow_4x/daemon.png b/resources/sprite/apps_glow_4x/daemon.png new file mode 100644 index 0000000000..b5bbc8113a Binary files /dev/null and b/resources/sprite/apps_glow_4x/daemon.png differ diff --git a/resources/sprite/apps_glow_4x/differential.png b/resources/sprite/apps_glow_4x/differential.png new file mode 100644 index 0000000000..a28f6b66eb Binary files /dev/null and b/resources/sprite/apps_glow_4x/differential.png differ diff --git a/resources/sprite/apps_glow_4x/diffusion.png b/resources/sprite/apps_glow_4x/diffusion.png new file mode 100644 index 0000000000..313522a1f4 Binary files /dev/null and b/resources/sprite/apps_glow_4x/diffusion.png differ diff --git a/resources/sprite/apps_glow_4x/diviner.png b/resources/sprite/apps_glow_4x/diviner.png new file mode 100644 index 0000000000..a62ac3b4da Binary files /dev/null and b/resources/sprite/apps_glow_4x/diviner.png differ diff --git a/resources/sprite/apps_glow_4x/drydock.png b/resources/sprite/apps_glow_4x/drydock.png new file mode 100644 index 0000000000..368dab136c Binary files /dev/null and b/resources/sprite/apps_glow_4x/drydock.png differ diff --git a/resources/sprite/apps_glow_4x/fact.png b/resources/sprite/apps_glow_4x/fact.png new file mode 100644 index 0000000000..c66a023039 Binary files /dev/null and b/resources/sprite/apps_glow_4x/fact.png differ diff --git a/resources/sprite/apps_glow_4x/files.png b/resources/sprite/apps_glow_4x/files.png new file mode 100644 index 0000000000..6245002f5d Binary files /dev/null and b/resources/sprite/apps_glow_4x/files.png differ diff --git a/resources/sprite/apps_glow_4x/flags.png b/resources/sprite/apps_glow_4x/flags.png new file mode 100644 index 0000000000..ef297d1ae8 Binary files /dev/null and b/resources/sprite/apps_glow_4x/flags.png differ diff --git a/resources/sprite/apps_glow_4x/help.png b/resources/sprite/apps_glow_4x/help.png new file mode 100644 index 0000000000..c358fdf0d1 Binary files /dev/null and b/resources/sprite/apps_glow_4x/help.png differ diff --git a/resources/sprite/apps_glow_4x/herald.png b/resources/sprite/apps_glow_4x/herald.png new file mode 100644 index 0000000000..0db3eb8aa0 Binary files /dev/null and b/resources/sprite/apps_glow_4x/herald.png differ diff --git a/resources/sprite/apps_glow_4x/home.png b/resources/sprite/apps_glow_4x/home.png new file mode 100644 index 0000000000..0c0033fc70 Binary files /dev/null and b/resources/sprite/apps_glow_4x/home.png differ diff --git a/resources/sprite/apps_glow_4x/logo.png b/resources/sprite/apps_glow_4x/logo.png new file mode 100644 index 0000000000..0f65c05754 Binary files /dev/null and b/resources/sprite/apps_glow_4x/logo.png differ diff --git a/resources/sprite/apps_glow_4x/macro.png b/resources/sprite/apps_glow_4x/macro.png new file mode 100644 index 0000000000..b6ea5efe9b Binary files /dev/null and b/resources/sprite/apps_glow_4x/macro.png differ diff --git a/resources/sprite/apps_glow_4x/mail.png b/resources/sprite/apps_glow_4x/mail.png new file mode 100644 index 0000000000..81a6768593 Binary files /dev/null and b/resources/sprite/apps_glow_4x/mail.png differ diff --git a/resources/sprite/apps_glow_4x/maniphest.png b/resources/sprite/apps_glow_4x/maniphest.png new file mode 100644 index 0000000000..de09b3aca5 Binary files /dev/null and b/resources/sprite/apps_glow_4x/maniphest.png differ diff --git a/resources/sprite/apps_glow_4x/metamta.png b/resources/sprite/apps_glow_4x/metamta.png new file mode 100644 index 0000000000..d876dabafd Binary files /dev/null and b/resources/sprite/apps_glow_4x/metamta.png differ diff --git a/resources/sprite/apps_glow_4x/owners.png b/resources/sprite/apps_glow_4x/owners.png new file mode 100644 index 0000000000..51cadeac6c Binary files /dev/null and b/resources/sprite/apps_glow_4x/owners.png differ diff --git a/resources/sprite/apps_glow_4x/paste.png b/resources/sprite/apps_glow_4x/paste.png new file mode 100644 index 0000000000..05f575b5dc Binary files /dev/null and b/resources/sprite/apps_glow_4x/paste.png differ diff --git a/resources/sprite/apps_glow_4x/people.png b/resources/sprite/apps_glow_4x/people.png new file mode 100644 index 0000000000..2d77b13b64 Binary files /dev/null and b/resources/sprite/apps_glow_4x/people.png differ diff --git a/resources/sprite/apps_glow_4x/phame.png b/resources/sprite/apps_glow_4x/phame.png new file mode 100644 index 0000000000..44122e0bfa Binary files /dev/null and b/resources/sprite/apps_glow_4x/phame.png differ diff --git a/resources/sprite/apps_glow_4x/phid.png b/resources/sprite/apps_glow_4x/phid.png new file mode 100644 index 0000000000..5c116ec24c Binary files /dev/null and b/resources/sprite/apps_glow_4x/phid.png differ diff --git a/resources/sprite/apps_glow_4x/pholio.png b/resources/sprite/apps_glow_4x/pholio.png new file mode 100644 index 0000000000..2cf133c0fc Binary files /dev/null and b/resources/sprite/apps_glow_4x/pholio.png differ diff --git a/resources/sprite/apps_glow_4x/phpast.png b/resources/sprite/apps_glow_4x/phpast.png new file mode 100644 index 0000000000..0449321044 Binary files /dev/null and b/resources/sprite/apps_glow_4x/phpast.png differ diff --git a/resources/sprite/apps_glow_4x/phriction.png b/resources/sprite/apps_glow_4x/phriction.png new file mode 100644 index 0000000000..65a4542d0a Binary files /dev/null and b/resources/sprite/apps_glow_4x/phriction.png differ diff --git a/resources/sprite/apps_glow_4x/ponder.png b/resources/sprite/apps_glow_4x/ponder.png new file mode 100644 index 0000000000..c6f01534d3 Binary files /dev/null and b/resources/sprite/apps_glow_4x/ponder.png differ diff --git a/resources/sprite/apps_glow_4x/power.png b/resources/sprite/apps_glow_4x/power.png new file mode 100644 index 0000000000..2ff9c174b9 Binary files /dev/null and b/resources/sprite/apps_glow_4x/power.png differ diff --git a/resources/sprite/apps_glow_4x/projects.png b/resources/sprite/apps_glow_4x/projects.png new file mode 100644 index 0000000000..74a4505b21 Binary files /dev/null and b/resources/sprite/apps_glow_4x/projects.png differ diff --git a/resources/sprite/apps_glow_4x/repositories.png b/resources/sprite/apps_glow_4x/repositories.png new file mode 100644 index 0000000000..7365ce8291 Binary files /dev/null and b/resources/sprite/apps_glow_4x/repositories.png differ diff --git a/resources/sprite/apps_glow_4x/settings.png b/resources/sprite/apps_glow_4x/settings.png new file mode 100644 index 0000000000..18a6b29a76 Binary files /dev/null and b/resources/sprite/apps_glow_4x/settings.png differ diff --git a/resources/sprite/apps_glow_4x/slowvote.png b/resources/sprite/apps_glow_4x/slowvote.png new file mode 100644 index 0000000000..1294d4bb45 Binary files /dev/null and b/resources/sprite/apps_glow_4x/slowvote.png differ diff --git a/resources/sprite/apps_glow_4x/uiexamples.png b/resources/sprite/apps_glow_4x/uiexamples.png new file mode 100644 index 0000000000..bcd1962d59 Binary files /dev/null and b/resources/sprite/apps_glow_4x/uiexamples.png differ diff --git a/resources/sprite/apps_lb_2x/application.png b/resources/sprite/apps_lb_2x/application.png new file mode 100644 index 0000000000..54fabdca9e Binary files /dev/null and b/resources/sprite/apps_lb_2x/application.png differ diff --git a/resources/sprite/apps_lb_2x/audit.png b/resources/sprite/apps_lb_2x/audit.png new file mode 100644 index 0000000000..ac8f5b7a35 Binary files /dev/null and b/resources/sprite/apps_lb_2x/audit.png differ diff --git a/resources/sprite/apps_lb_2x/calendar.png b/resources/sprite/apps_lb_2x/calendar.png new file mode 100644 index 0000000000..d214646500 Binary files /dev/null and b/resources/sprite/apps_lb_2x/calendar.png differ diff --git a/resources/sprite/apps_lb_2x/conduit.png b/resources/sprite/apps_lb_2x/conduit.png new file mode 100644 index 0000000000..d92c6b5d0b Binary files /dev/null and b/resources/sprite/apps_lb_2x/conduit.png differ diff --git a/resources/sprite/apps_lb_2x/countdown.png b/resources/sprite/apps_lb_2x/countdown.png new file mode 100644 index 0000000000..f0814ff6dc Binary files /dev/null and b/resources/sprite/apps_lb_2x/countdown.png differ diff --git a/resources/sprite/apps_lb_2x/daemon.png b/resources/sprite/apps_lb_2x/daemon.png new file mode 100644 index 0000000000..3cbf1b9c56 Binary files /dev/null and b/resources/sprite/apps_lb_2x/daemon.png differ diff --git a/resources/sprite/apps_lb_2x/differential.png b/resources/sprite/apps_lb_2x/differential.png new file mode 100644 index 0000000000..496fde8b1a Binary files /dev/null and b/resources/sprite/apps_lb_2x/differential.png differ diff --git a/resources/sprite/apps_lb_2x/diffusion.png b/resources/sprite/apps_lb_2x/diffusion.png new file mode 100644 index 0000000000..8526a69543 Binary files /dev/null and b/resources/sprite/apps_lb_2x/diffusion.png differ diff --git a/resources/sprite/apps_lb_2x/diviner.png b/resources/sprite/apps_lb_2x/diviner.png new file mode 100644 index 0000000000..fd991ae4f2 Binary files /dev/null and b/resources/sprite/apps_lb_2x/diviner.png differ diff --git a/resources/sprite/apps_lb_2x/drydock.png b/resources/sprite/apps_lb_2x/drydock.png new file mode 100644 index 0000000000..d6cf55bafa Binary files /dev/null and b/resources/sprite/apps_lb_2x/drydock.png differ diff --git a/resources/sprite/apps_lb_2x/fact.png b/resources/sprite/apps_lb_2x/fact.png new file mode 100644 index 0000000000..508941ee0f Binary files /dev/null and b/resources/sprite/apps_lb_2x/fact.png differ diff --git a/resources/sprite/apps_lb_2x/files.png b/resources/sprite/apps_lb_2x/files.png new file mode 100644 index 0000000000..e2e4254b0b Binary files /dev/null and b/resources/sprite/apps_lb_2x/files.png differ diff --git a/resources/sprite/apps_lb_2x/flags.png b/resources/sprite/apps_lb_2x/flags.png new file mode 100644 index 0000000000..8ad67e6669 Binary files /dev/null and b/resources/sprite/apps_lb_2x/flags.png differ diff --git a/resources/sprite/apps_lb_2x/help.png b/resources/sprite/apps_lb_2x/help.png new file mode 100644 index 0000000000..99948e3009 Binary files /dev/null and b/resources/sprite/apps_lb_2x/help.png differ diff --git a/resources/sprite/apps_lb_2x/herald.png b/resources/sprite/apps_lb_2x/herald.png new file mode 100644 index 0000000000..2f982ab8a6 Binary files /dev/null and b/resources/sprite/apps_lb_2x/herald.png differ diff --git a/resources/sprite/apps_lb_2x/home.png b/resources/sprite/apps_lb_2x/home.png new file mode 100644 index 0000000000..5b8cb9f1db Binary files /dev/null and b/resources/sprite/apps_lb_2x/home.png differ diff --git a/resources/sprite/apps_lb_2x/logo.png b/resources/sprite/apps_lb_2x/logo.png new file mode 100644 index 0000000000..640cd44cb9 Binary files /dev/null and b/resources/sprite/apps_lb_2x/logo.png differ diff --git a/resources/sprite/apps_lb_2x/macro.png b/resources/sprite/apps_lb_2x/macro.png new file mode 100644 index 0000000000..eb1c43c946 Binary files /dev/null and b/resources/sprite/apps_lb_2x/macro.png differ diff --git a/resources/sprite/apps_lb_2x/mail.png b/resources/sprite/apps_lb_2x/mail.png new file mode 100644 index 0000000000..9d99e60ed8 Binary files /dev/null and b/resources/sprite/apps_lb_2x/mail.png differ diff --git a/resources/sprite/apps_lb_2x/maniphest.png b/resources/sprite/apps_lb_2x/maniphest.png new file mode 100644 index 0000000000..d5fa4dd131 Binary files /dev/null and b/resources/sprite/apps_lb_2x/maniphest.png differ diff --git a/resources/sprite/apps_lb_2x/metamta.png b/resources/sprite/apps_lb_2x/metamta.png new file mode 100644 index 0000000000..eadfada4be Binary files /dev/null and b/resources/sprite/apps_lb_2x/metamta.png differ diff --git a/resources/sprite/apps_lb_2x/owners.png b/resources/sprite/apps_lb_2x/owners.png new file mode 100644 index 0000000000..71a4122770 Binary files /dev/null and b/resources/sprite/apps_lb_2x/owners.png differ diff --git a/resources/sprite/apps_lb_2x/paste.png b/resources/sprite/apps_lb_2x/paste.png new file mode 100644 index 0000000000..e82ee90ce9 Binary files /dev/null and b/resources/sprite/apps_lb_2x/paste.png differ diff --git a/resources/sprite/apps_lb_2x/people.png b/resources/sprite/apps_lb_2x/people.png new file mode 100644 index 0000000000..14279ee01d Binary files /dev/null and b/resources/sprite/apps_lb_2x/people.png differ diff --git a/resources/sprite/apps_lb_2x/phame.png b/resources/sprite/apps_lb_2x/phame.png new file mode 100644 index 0000000000..c95b1c450f Binary files /dev/null and b/resources/sprite/apps_lb_2x/phame.png differ diff --git a/resources/sprite/apps_lb_2x/phid.png b/resources/sprite/apps_lb_2x/phid.png new file mode 100644 index 0000000000..fce1b641dc Binary files /dev/null and b/resources/sprite/apps_lb_2x/phid.png differ diff --git a/resources/sprite/apps_lb_2x/pholio.png b/resources/sprite/apps_lb_2x/pholio.png new file mode 100644 index 0000000000..32d1459f76 Binary files /dev/null and b/resources/sprite/apps_lb_2x/pholio.png differ diff --git a/resources/sprite/apps_lb_2x/phpast.png b/resources/sprite/apps_lb_2x/phpast.png new file mode 100644 index 0000000000..051fce7cca Binary files /dev/null and b/resources/sprite/apps_lb_2x/phpast.png differ diff --git a/resources/sprite/apps_lb_2x/phriction.png b/resources/sprite/apps_lb_2x/phriction.png new file mode 100644 index 0000000000..deabf4695f Binary files /dev/null and b/resources/sprite/apps_lb_2x/phriction.png differ diff --git a/resources/sprite/apps_lb_2x/ponder.png b/resources/sprite/apps_lb_2x/ponder.png new file mode 100644 index 0000000000..98f9b7055b Binary files /dev/null and b/resources/sprite/apps_lb_2x/ponder.png differ diff --git a/resources/sprite/apps_lb_2x/power.png b/resources/sprite/apps_lb_2x/power.png new file mode 100644 index 0000000000..a0db149fd4 Binary files /dev/null and b/resources/sprite/apps_lb_2x/power.png differ diff --git a/resources/sprite/apps_lb_2x/projects.png b/resources/sprite/apps_lb_2x/projects.png new file mode 100644 index 0000000000..6b3d86ad67 Binary files /dev/null and b/resources/sprite/apps_lb_2x/projects.png differ diff --git a/resources/sprite/apps_lb_2x/repositories.png b/resources/sprite/apps_lb_2x/repositories.png new file mode 100644 index 0000000000..314db4db33 Binary files /dev/null and b/resources/sprite/apps_lb_2x/repositories.png differ diff --git a/resources/sprite/apps_lb_2x/settings.png b/resources/sprite/apps_lb_2x/settings.png new file mode 100644 index 0000000000..846092a6b2 Binary files /dev/null and b/resources/sprite/apps_lb_2x/settings.png differ diff --git a/resources/sprite/apps_lb_2x/slowvote.png b/resources/sprite/apps_lb_2x/slowvote.png new file mode 100644 index 0000000000..fcaf99f9ae Binary files /dev/null and b/resources/sprite/apps_lb_2x/slowvote.png differ diff --git a/resources/sprite/apps_lb_2x/uiexamples.png b/resources/sprite/apps_lb_2x/uiexamples.png new file mode 100644 index 0000000000..c10953e613 Binary files /dev/null and b/resources/sprite/apps_lb_2x/uiexamples.png differ diff --git a/resources/sprite/apps_lb_4x/application.png b/resources/sprite/apps_lb_4x/application.png new file mode 100644 index 0000000000..71297c7d15 Binary files /dev/null and b/resources/sprite/apps_lb_4x/application.png differ diff --git a/resources/sprite/apps_lb_4x/audit.png b/resources/sprite/apps_lb_4x/audit.png new file mode 100644 index 0000000000..cb2c6c1dbc Binary files /dev/null and b/resources/sprite/apps_lb_4x/audit.png differ diff --git a/resources/sprite/apps_lb_4x/calendar.png b/resources/sprite/apps_lb_4x/calendar.png new file mode 100644 index 0000000000..db28d533e9 Binary files /dev/null and b/resources/sprite/apps_lb_4x/calendar.png differ diff --git a/resources/sprite/apps_lb_4x/conduit.png b/resources/sprite/apps_lb_4x/conduit.png new file mode 100644 index 0000000000..c0739b476b Binary files /dev/null and b/resources/sprite/apps_lb_4x/conduit.png differ diff --git a/resources/sprite/apps_lb_4x/countdown.png b/resources/sprite/apps_lb_4x/countdown.png new file mode 100644 index 0000000000..6b46b1d01e Binary files /dev/null and b/resources/sprite/apps_lb_4x/countdown.png differ diff --git a/resources/sprite/apps_lb_4x/daemon.png b/resources/sprite/apps_lb_4x/daemon.png new file mode 100644 index 0000000000..0fda3e868f Binary files /dev/null and b/resources/sprite/apps_lb_4x/daemon.png differ diff --git a/resources/sprite/apps_lb_4x/differential.png b/resources/sprite/apps_lb_4x/differential.png new file mode 100644 index 0000000000..2e831679d6 Binary files /dev/null and b/resources/sprite/apps_lb_4x/differential.png differ diff --git a/resources/sprite/apps_lb_4x/diffusion.png b/resources/sprite/apps_lb_4x/diffusion.png new file mode 100644 index 0000000000..090ca29666 Binary files /dev/null and b/resources/sprite/apps_lb_4x/diffusion.png differ diff --git a/resources/sprite/apps_lb_4x/diviner.png b/resources/sprite/apps_lb_4x/diviner.png new file mode 100644 index 0000000000..60ae291964 Binary files /dev/null and b/resources/sprite/apps_lb_4x/diviner.png differ diff --git a/resources/sprite/apps_lb_4x/drydock.png b/resources/sprite/apps_lb_4x/drydock.png new file mode 100644 index 0000000000..b8a801b24b Binary files /dev/null and b/resources/sprite/apps_lb_4x/drydock.png differ diff --git a/resources/sprite/apps_lb_4x/fact.png b/resources/sprite/apps_lb_4x/fact.png new file mode 100644 index 0000000000..b5fdd29df9 Binary files /dev/null and b/resources/sprite/apps_lb_4x/fact.png differ diff --git a/resources/sprite/apps_lb_4x/files.png b/resources/sprite/apps_lb_4x/files.png new file mode 100644 index 0000000000..5a311e665f Binary files /dev/null and b/resources/sprite/apps_lb_4x/files.png differ diff --git a/resources/sprite/apps_lb_4x/flags.png b/resources/sprite/apps_lb_4x/flags.png new file mode 100644 index 0000000000..9549e0d9dd Binary files /dev/null and b/resources/sprite/apps_lb_4x/flags.png differ diff --git a/resources/sprite/apps_lb_4x/help.png b/resources/sprite/apps_lb_4x/help.png new file mode 100644 index 0000000000..c7327ba89f Binary files /dev/null and b/resources/sprite/apps_lb_4x/help.png differ diff --git a/resources/sprite/apps_lb_4x/herald.png b/resources/sprite/apps_lb_4x/herald.png new file mode 100644 index 0000000000..935d516119 Binary files /dev/null and b/resources/sprite/apps_lb_4x/herald.png differ diff --git a/resources/sprite/apps_lb_4x/home.png b/resources/sprite/apps_lb_4x/home.png new file mode 100644 index 0000000000..517a52cd70 Binary files /dev/null and b/resources/sprite/apps_lb_4x/home.png differ diff --git a/resources/sprite/apps_lb_4x/logo.png b/resources/sprite/apps_lb_4x/logo.png new file mode 100644 index 0000000000..ba9fa2fa7c Binary files /dev/null and b/resources/sprite/apps_lb_4x/logo.png differ diff --git a/resources/sprite/apps_lb_4x/macro.png b/resources/sprite/apps_lb_4x/macro.png new file mode 100644 index 0000000000..0db8258a01 Binary files /dev/null and b/resources/sprite/apps_lb_4x/macro.png differ diff --git a/resources/sprite/apps_lb_4x/mail.png b/resources/sprite/apps_lb_4x/mail.png new file mode 100644 index 0000000000..270e50ee53 Binary files /dev/null and b/resources/sprite/apps_lb_4x/mail.png differ diff --git a/resources/sprite/apps_lb_4x/maniphest.png b/resources/sprite/apps_lb_4x/maniphest.png new file mode 100644 index 0000000000..403e3df619 Binary files /dev/null and b/resources/sprite/apps_lb_4x/maniphest.png differ diff --git a/resources/sprite/apps_lb_4x/metamta.png b/resources/sprite/apps_lb_4x/metamta.png new file mode 100644 index 0000000000..38375d7b09 Binary files /dev/null and b/resources/sprite/apps_lb_4x/metamta.png differ diff --git a/resources/sprite/apps_lb_4x/owners.png b/resources/sprite/apps_lb_4x/owners.png new file mode 100644 index 0000000000..b556dcaae0 Binary files /dev/null and b/resources/sprite/apps_lb_4x/owners.png differ diff --git a/resources/sprite/apps_lb_4x/paste.png b/resources/sprite/apps_lb_4x/paste.png new file mode 100644 index 0000000000..c0169a62c0 Binary files /dev/null and b/resources/sprite/apps_lb_4x/paste.png differ diff --git a/resources/sprite/apps_lb_4x/people.png b/resources/sprite/apps_lb_4x/people.png new file mode 100644 index 0000000000..b7d35b23a2 Binary files /dev/null and b/resources/sprite/apps_lb_4x/people.png differ diff --git a/resources/sprite/apps_lb_4x/phame.png b/resources/sprite/apps_lb_4x/phame.png new file mode 100644 index 0000000000..20eee15df7 Binary files /dev/null and b/resources/sprite/apps_lb_4x/phame.png differ diff --git a/resources/sprite/apps_lb_4x/phid.png b/resources/sprite/apps_lb_4x/phid.png new file mode 100644 index 0000000000..027804d397 Binary files /dev/null and b/resources/sprite/apps_lb_4x/phid.png differ diff --git a/resources/sprite/apps_lb_4x/pholio.png b/resources/sprite/apps_lb_4x/pholio.png new file mode 100644 index 0000000000..4bf9234ff5 Binary files /dev/null and b/resources/sprite/apps_lb_4x/pholio.png differ diff --git a/resources/sprite/apps_lb_4x/phpast.png b/resources/sprite/apps_lb_4x/phpast.png new file mode 100644 index 0000000000..455f1aac4b Binary files /dev/null and b/resources/sprite/apps_lb_4x/phpast.png differ diff --git a/resources/sprite/apps_lb_4x/phriction.png b/resources/sprite/apps_lb_4x/phriction.png new file mode 100644 index 0000000000..9fe3ec63ce Binary files /dev/null and b/resources/sprite/apps_lb_4x/phriction.png differ diff --git a/resources/sprite/apps_lb_4x/ponder.png b/resources/sprite/apps_lb_4x/ponder.png new file mode 100644 index 0000000000..9d9b0513b9 Binary files /dev/null and b/resources/sprite/apps_lb_4x/ponder.png differ diff --git a/resources/sprite/apps_lb_4x/power.png b/resources/sprite/apps_lb_4x/power.png new file mode 100644 index 0000000000..ded4b32929 Binary files /dev/null and b/resources/sprite/apps_lb_4x/power.png differ diff --git a/resources/sprite/apps_lb_4x/projects.png b/resources/sprite/apps_lb_4x/projects.png new file mode 100644 index 0000000000..ea2477231e Binary files /dev/null and b/resources/sprite/apps_lb_4x/projects.png differ diff --git a/resources/sprite/apps_lb_4x/repositories.png b/resources/sprite/apps_lb_4x/repositories.png new file mode 100644 index 0000000000..6fa0772133 Binary files /dev/null and b/resources/sprite/apps_lb_4x/repositories.png differ diff --git a/resources/sprite/apps_lb_4x/settings.png b/resources/sprite/apps_lb_4x/settings.png new file mode 100644 index 0000000000..3672869f5f Binary files /dev/null and b/resources/sprite/apps_lb_4x/settings.png differ diff --git a/resources/sprite/apps_lb_4x/slowvote.png b/resources/sprite/apps_lb_4x/slowvote.png new file mode 100644 index 0000000000..3f470ef686 Binary files /dev/null and b/resources/sprite/apps_lb_4x/slowvote.png differ diff --git a/resources/sprite/apps_lb_4x/uiexamples.png b/resources/sprite/apps_lb_4x/uiexamples.png new file mode 100644 index 0000000000..f0089b69cf Binary files /dev/null and b/resources/sprite/apps_lb_4x/uiexamples.png differ diff --git a/resources/sprite/manifest/apps-large.json b/resources/sprite/manifest/apps-large.json new file mode 100644 index 0000000000..c375d87a31 --- /dev/null +++ b/resources/sprite/manifest/apps-large.json @@ -0,0 +1,731 @@ +{ + "version" : 1, + "sprites" : { + "app-application-blue-large" : { + "name" : "app-application-blue-large", + "rule" : ".app-application-blue-large, .phabricator-crumb-view:hover .app-application-dark-large", + "hash" : "06466698f63d75dabe0ba6c5fbbda79e" + }, + "app-application-dark-large" : { + "name" : "app-application-dark-large", + "rule" : ".app-application-dark-large", + "hash" : "a5a904b67bdd26c15b8df07b0b0cee1a" + }, + "app-application-glow-large" : { + "name" : "app-application-glow-large", + "rule" : ".app-application-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-application-light-large", + "hash" : "04cd8ab1f4785d33d6c9c829dce35cb6" + }, + "app-application-light-large" : { + "name" : "app-application-light-large", + "rule" : ".app-application-light-large", + "hash" : "8b071cf0efedda7c8c772829d31453ea" + }, + "app-audit-blue-large" : { + "name" : "app-audit-blue-large", + "rule" : ".app-audit-blue-large, .phabricator-crumb-view:hover .app-audit-dark-large", + "hash" : "a42190de77460c69f354b46fa0ec52d4" + }, + "app-audit-dark-large" : { + "name" : "app-audit-dark-large", + "rule" : ".app-audit-dark-large", + "hash" : "0880246fc6aa5d0cec823166af5b388f" + }, + "app-audit-glow-large" : { + "name" : "app-audit-glow-large", + "rule" : ".app-audit-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-audit-light-large", + "hash" : "2f3896e45a05d55c3a95440dbeac9187" + }, + "app-audit-light-large" : { + "name" : "app-audit-light-large", + "rule" : ".app-audit-light-large", + "hash" : "8dd753f716233d2f6edf553df4fde942" + }, + "app-calendar-blue-large" : { + "name" : "app-calendar-blue-large", + "rule" : ".app-calendar-blue-large, .phabricator-crumb-view:hover .app-calendar-dark-large", + "hash" : "142c831f431e242d457ca66625c3b710" + }, + "app-calendar-dark-large" : { + "name" : "app-calendar-dark-large", + "rule" : ".app-calendar-dark-large", + "hash" : "5c98faf324152ec55bad6ac76f77ec00" + }, + "app-calendar-glow-large" : { + "name" : "app-calendar-glow-large", + "rule" : ".app-calendar-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-calendar-light-large", + "hash" : "d1a7c623c5b3d902a389fc2ea8941858" + }, + "app-calendar-light-large" : { + "name" : "app-calendar-light-large", + "rule" : ".app-calendar-light-large", + "hash" : "466b97737778eff91ebd9afabac6e5a6" + }, + "app-conduit-blue-large" : { + "name" : "app-conduit-blue-large", + "rule" : ".app-conduit-blue-large, .phabricator-crumb-view:hover .app-conduit-dark-large", + "hash" : "b55d76ffbefad4ed6e77de204146fe54" + }, + "app-conduit-dark-large" : { + "name" : "app-conduit-dark-large", + "rule" : ".app-conduit-dark-large", + "hash" : "bad7559ed9928596c0241d8490e67422" + }, + "app-conduit-glow-large" : { + "name" : "app-conduit-glow-large", + "rule" : ".app-conduit-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-conduit-light-large", + "hash" : "072c3ca188a60e9ee08c6eb36b8628c9" + }, + "app-conduit-light-large" : { + "name" : "app-conduit-light-large", + "rule" : ".app-conduit-light-large", + "hash" : "92047e758fac063dfb0608863ee66b7e" + }, + "app-countdown-blue-large" : { + "name" : "app-countdown-blue-large", + "rule" : ".app-countdown-blue-large, .phabricator-crumb-view:hover .app-countdown-dark-large", + "hash" : "7e453703d19fa2dc5f9b07be9e38463f" + }, + "app-countdown-dark-large" : { + "name" : "app-countdown-dark-large", + "rule" : ".app-countdown-dark-large", + "hash" : "dc7df8202a5fa7baf17fd446a9b5c4c5" + }, + "app-countdown-glow-large" : { + "name" : "app-countdown-glow-large", + "rule" : ".app-countdown-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-countdown-light-large", + "hash" : "3b972002d629a49a4eca9049a9b2c6ae" + }, + "app-countdown-light-large" : { + "name" : "app-countdown-light-large", + "rule" : ".app-countdown-light-large", + "hash" : "8f3814f70c1cb0475dd4678cc8937d91" + }, + "app-daemon-blue-large" : { + "name" : "app-daemon-blue-large", + "rule" : ".app-daemon-blue-large, .phabricator-crumb-view:hover .app-daemon-dark-large", + "hash" : "d525143fcad6d74fdd3ae8360ca42d5f" + }, + "app-daemon-dark-large" : { + "name" : "app-daemon-dark-large", + "rule" : ".app-daemon-dark-large", + "hash" : "b2e566baac0c579563bd5bd700deb41b" + }, + "app-daemon-glow-large" : { + "name" : "app-daemon-glow-large", + "rule" : ".app-daemon-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-daemon-light-large", + "hash" : "1c8e2776b9b984b804f6dca073f101eb" + }, + "app-daemon-light-large" : { + "name" : "app-daemon-light-large", + "rule" : ".app-daemon-light-large", + "hash" : "9c778b43f9f7380fc9bd862c097bbaa8" + }, + "app-differential-blue-large" : { + "name" : "app-differential-blue-large", + "rule" : ".app-differential-blue-large, .phabricator-crumb-view:hover .app-differential-dark-large", + "hash" : "fedb4fbfda19baace7d1becd0f341dce" + }, + "app-differential-dark-large" : { + "name" : "app-differential-dark-large", + "rule" : ".app-differential-dark-large", + "hash" : "fd1e0f1fa97b00c7409ebfdc56cf4865" + }, + "app-differential-glow-large" : { + "name" : "app-differential-glow-large", + "rule" : ".app-differential-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-differential-light-large", + "hash" : "3997a58a26389e8ede8022fd05cf8b43" + }, + "app-differential-light-large" : { + "name" : "app-differential-light-large", + "rule" : ".app-differential-light-large", + "hash" : "b5c750e09f57a787e89f32820f791c4a" + }, + "app-diffusion-blue-large" : { + "name" : "app-diffusion-blue-large", + "rule" : ".app-diffusion-blue-large, .phabricator-crumb-view:hover .app-diffusion-dark-large", + "hash" : "7bed456fd690b84421de4baea0f2bf52" + }, + "app-diffusion-dark-large" : { + "name" : "app-diffusion-dark-large", + "rule" : ".app-diffusion-dark-large", + "hash" : "2eb71cde4af83347efdee542f4cadd8e" + }, + "app-diffusion-glow-large" : { + "name" : "app-diffusion-glow-large", + "rule" : ".app-diffusion-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diffusion-light-large", + "hash" : "55873c2e30e693e7bde0f4a90045064d" + }, + "app-diffusion-light-large" : { + "name" : "app-diffusion-light-large", + "rule" : ".app-diffusion-light-large", + "hash" : "6eeb6f6df3ecd1ee923081b2d82f0505" + }, + "app-diviner-blue-large" : { + "name" : "app-diviner-blue-large", + "rule" : ".app-diviner-blue-large, .phabricator-crumb-view:hover .app-diviner-dark-large", + "hash" : "c4c3b257021606c8ceafe179d31841d0" + }, + "app-diviner-dark-large" : { + "name" : "app-diviner-dark-large", + "rule" : ".app-diviner-dark-large", + "hash" : "786a865464564d66d458557c909a77ea" + }, + "app-diviner-glow-large" : { + "name" : "app-diviner-glow-large", + "rule" : ".app-diviner-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-diviner-light-large", + "hash" : "d173b3a659a2a4b5af5890ba70e827d1" + }, + "app-diviner-light-large" : { + "name" : "app-diviner-light-large", + "rule" : ".app-diviner-light-large", + "hash" : "c515bc52cb560adebce1e84bb5d917ce" + }, + "app-drydock-blue-large" : { + "name" : "app-drydock-blue-large", + "rule" : ".app-drydock-blue-large, .phabricator-crumb-view:hover .app-drydock-dark-large", + "hash" : "833acdeca44cf9d7f90d8cd6d9219b15" + }, + "app-drydock-dark-large" : { + "name" : "app-drydock-dark-large", + "rule" : ".app-drydock-dark-large", + "hash" : "7a41b9668c77b85b8acf048d9e61c50a" + }, + "app-drydock-glow-large" : { + "name" : "app-drydock-glow-large", + "rule" : ".app-drydock-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-drydock-light-large", + "hash" : "f5866c62ecbc94ecacd1563d2780677d" + }, + "app-drydock-light-large" : { + "name" : "app-drydock-light-large", + "rule" : ".app-drydock-light-large", + "hash" : "2c1ce32d5d5291e7d3d3d6e9323a2a65" + }, + "app-fact-blue-large" : { + "name" : "app-fact-blue-large", + "rule" : ".app-fact-blue-large, .phabricator-crumb-view:hover .app-fact-dark-large", + "hash" : "0506b5c5e2849dde9e22a1a72e161b69" + }, + "app-fact-dark-large" : { + "name" : "app-fact-dark-large", + "rule" : ".app-fact-dark-large", + "hash" : "5fb4a988baad433e9900f1a814b89caa" + }, + "app-fact-glow-large" : { + "name" : "app-fact-glow-large", + "rule" : ".app-fact-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-fact-light-large", + "hash" : "5bd7e5f2adfa0935ae97270139ec4912" + }, + "app-fact-light-large" : { + "name" : "app-fact-light-large", + "rule" : ".app-fact-light-large", + "hash" : "3bc45d399dad8ec8d55873714c42c1d7" + }, + "app-files-blue-large" : { + "name" : "app-files-blue-large", + "rule" : ".app-files-blue-large, .phabricator-crumb-view:hover .app-files-dark-large", + "hash" : "c519922a67d6df459d05e0a6564550c9" + }, + "app-files-dark-large" : { + "name" : "app-files-dark-large", + "rule" : ".app-files-dark-large", + "hash" : "1d229c79f3b8301ca1ee38ccd9c7c142" + }, + "app-files-glow-large" : { + "name" : "app-files-glow-large", + "rule" : ".app-files-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-files-light-large", + "hash" : "4bd7617617d0af975282bdd9a399d0ab" + }, + "app-files-light-large" : { + "name" : "app-files-light-large", + "rule" : ".app-files-light-large", + "hash" : "0d8bf609759312d89e2a4b148f0701d8" + }, + "app-flags-blue-large" : { + "name" : "app-flags-blue-large", + "rule" : ".app-flags-blue-large, .phabricator-crumb-view:hover .app-flags-dark-large", + "hash" : "7699a28efbb6658348b5fff32930f46c" + }, + "app-flags-dark-large" : { + "name" : "app-flags-dark-large", + "rule" : ".app-flags-dark-large", + "hash" : "51307234bb3c309b3ea69381e0b72b16" + }, + "app-flags-glow-large" : { + "name" : "app-flags-glow-large", + "rule" : ".app-flags-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-flags-light-large", + "hash" : "75c1c107f4e750ef27bf50b4b51b0e00" + }, + "app-flags-light-large" : { + "name" : "app-flags-light-large", + "rule" : ".app-flags-light-large", + "hash" : "8c198ba5bcd146595870bab777d4992e" + }, + "app-help-blue-large" : { + "name" : "app-help-blue-large", + "rule" : ".app-help-blue-large, .phabricator-crumb-view:hover .app-help-dark-large", + "hash" : "2cd62340a1041c30d120d891ba106c98" + }, + "app-help-dark-large" : { + "name" : "app-help-dark-large", + "rule" : ".app-help-dark-large", + "hash" : "3cbd366c4b5758e45ef07507c70f68c0" + }, + "app-help-glow-large" : { + "name" : "app-help-glow-large", + "rule" : ".app-help-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-help-light-large", + "hash" : "c795358a116961342b206821a1b8038b" + }, + "app-help-light-large" : { + "name" : "app-help-light-large", + "rule" : ".app-help-light-large", + "hash" : "722eceffe63605b00a5b957b5f40db98" + }, + "app-herald-blue-large" : { + "name" : "app-herald-blue-large", + "rule" : ".app-herald-blue-large, .phabricator-crumb-view:hover .app-herald-dark-large", + "hash" : "d74f95b621b97b6c3c4c52a227b7f8d2" + }, + "app-herald-dark-large" : { + "name" : "app-herald-dark-large", + "rule" : ".app-herald-dark-large", + "hash" : "4b7a3ab5e0b6a04224ccb6e520e73d6e" + }, + "app-herald-glow-large" : { + "name" : "app-herald-glow-large", + "rule" : ".app-herald-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-herald-light-large", + "hash" : "22beef0629ee517ba1a2b822ed440d0c" + }, + "app-herald-light-large" : { + "name" : "app-herald-light-large", + "rule" : ".app-herald-light-large", + "hash" : "65bbeb68fd051b77f4871aafe2994f56" + }, + "app-home-blue-large" : { + "name" : "app-home-blue-large", + "rule" : ".app-home-blue-large, .phabricator-crumb-view:hover .app-home-dark-large", + "hash" : "d474f559dcb99a8c4b792b5f4f8ea1a1" + }, + "app-home-dark-large" : { + "name" : "app-home-dark-large", + "rule" : ".app-home-dark-large", + "hash" : "79acb839094adcb3ad94567c054801eb" + }, + "app-home-glow-large" : { + "name" : "app-home-glow-large", + "rule" : ".app-home-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-home-light-large", + "hash" : "5af620ae48ba98ee4ee594c32ba761cb" + }, + "app-home-light-large" : { + "name" : "app-home-light-large", + "rule" : ".app-home-light-large", + "hash" : "181a71639319f3beda59809963384250" + }, + "app-logo-blue-large" : { + "name" : "app-logo-blue-large", + "rule" : ".app-logo-blue-large, .phabricator-crumb-view:hover .app-logo-dark-large", + "hash" : "f65d904cfd4db8a83c8e53821370f1b2" + }, + "app-logo-dark-large" : { + "name" : "app-logo-dark-large", + "rule" : ".app-logo-dark-large", + "hash" : "20524d2868b7b57423aa8dc27b284cac" + }, + "app-logo-glow-large" : { + "name" : "app-logo-glow-large", + "rule" : ".app-logo-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-logo-light-large", + "hash" : "3969545781a17ec856bacec4ed110506" + }, + "app-logo-light-large" : { + "name" : "app-logo-light-large", + "rule" : ".app-logo-light-large", + "hash" : "bd1b66ffad9ee26019738fc00a7eb343" + }, + "app-macro-blue-large" : { + "name" : "app-macro-blue-large", + "rule" : ".app-macro-blue-large, .phabricator-crumb-view:hover .app-macro-dark-large", + "hash" : "b6cf3044ffc526468c30e5dd9a0dcc22" + }, + "app-macro-dark-large" : { + "name" : "app-macro-dark-large", + "rule" : ".app-macro-dark-large", + "hash" : "583a495f319fb63f99400b0197832dce" + }, + "app-macro-glow-large" : { + "name" : "app-macro-glow-large", + "rule" : ".app-macro-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-macro-light-large", + "hash" : "16d2c3aeabb43a51bb5742c67c4b92a1" + }, + "app-macro-light-large" : { + "name" : "app-macro-light-large", + "rule" : ".app-macro-light-large", + "hash" : "b073066348826c93f57ba76f746e5c7e" + }, + "app-mail-blue-large" : { + "name" : "app-mail-blue-large", + "rule" : ".app-mail-blue-large, .phabricator-crumb-view:hover .app-mail-dark-large", + "hash" : "d2017126ff2e4fca0dfc7cab6a3834ee" + }, + "app-mail-dark-large" : { + "name" : "app-mail-dark-large", + "rule" : ".app-mail-dark-large", + "hash" : "4709516a74216e0ba886a30180ad93d4" + }, + "app-mail-glow-large" : { + "name" : "app-mail-glow-large", + "rule" : ".app-mail-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-mail-light-large", + "hash" : "1f0d2be98c3771791db7a9ad20784872" + }, + "app-mail-light-large" : { + "name" : "app-mail-light-large", + "rule" : ".app-mail-light-large", + "hash" : "740ea3d3104365ab7bad981b13d23693" + }, + "app-maniphest-blue-large" : { + "name" : "app-maniphest-blue-large", + "rule" : ".app-maniphest-blue-large, .phabricator-crumb-view:hover .app-maniphest-dark-large", + "hash" : "7f0f23c41582c36d9c95578bbdbee140" + }, + "app-maniphest-dark-large" : { + "name" : "app-maniphest-dark-large", + "rule" : ".app-maniphest-dark-large", + "hash" : "acadb7737b24ecc23e892cdaab7c1fe2" + }, + "app-maniphest-glow-large" : { + "name" : "app-maniphest-glow-large", + "rule" : ".app-maniphest-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-maniphest-light-large", + "hash" : "8dccd7ba95ddffc4e071e42b69773f5c" + }, + "app-maniphest-light-large" : { + "name" : "app-maniphest-light-large", + "rule" : ".app-maniphest-light-large", + "hash" : "0d2c71a1279686c3884c267d98bc36ba" + }, + "app-metamta-blue-large" : { + "name" : "app-metamta-blue-large", + "rule" : ".app-metamta-blue-large, .phabricator-crumb-view:hover .app-metamta-dark-large", + "hash" : "e49fa2e5f09ba8d6c64479296cd842bf" + }, + "app-metamta-dark-large" : { + "name" : "app-metamta-dark-large", + "rule" : ".app-metamta-dark-large", + "hash" : "c5f3a7468d98ebb977bfb0cc81abd5ee" + }, + "app-metamta-glow-large" : { + "name" : "app-metamta-glow-large", + "rule" : ".app-metamta-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-metamta-light-large", + "hash" : "5f7b115d45e5d3a5a5a730173366f2e4" + }, + "app-metamta-light-large" : { + "name" : "app-metamta-light-large", + "rule" : ".app-metamta-light-large", + "hash" : "13ce4ca0f223cda37e3af39da8c6e564" + }, + "app-owners-blue-large" : { + "name" : "app-owners-blue-large", + "rule" : ".app-owners-blue-large, .phabricator-crumb-view:hover .app-owners-dark-large", + "hash" : "6133763d044b295e39b78c71fd1389d1" + }, + "app-owners-dark-large" : { + "name" : "app-owners-dark-large", + "rule" : ".app-owners-dark-large", + "hash" : "b09a80f307491acbe56fb16e01956173" + }, + "app-owners-glow-large" : { + "name" : "app-owners-glow-large", + "rule" : ".app-owners-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-owners-light-large", + "hash" : "a63816e6979ec6c222a086b5d72a0b86" + }, + "app-owners-light-large" : { + "name" : "app-owners-light-large", + "rule" : ".app-owners-light-large", + "hash" : "6b06493f46a91584e746e5034be15366" + }, + "app-paste-blue-large" : { + "name" : "app-paste-blue-large", + "rule" : ".app-paste-blue-large, .phabricator-crumb-view:hover .app-paste-dark-large", + "hash" : "d6be9e217e3dedcaa326b34b63794b0e" + }, + "app-paste-dark-large" : { + "name" : "app-paste-dark-large", + "rule" : ".app-paste-dark-large", + "hash" : "03d3dded4964e60771c8a45549e13973" + }, + "app-paste-glow-large" : { + "name" : "app-paste-glow-large", + "rule" : ".app-paste-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-paste-light-large", + "hash" : "507192b6a41abdc1a886a144cc315326" + }, + "app-paste-light-large" : { + "name" : "app-paste-light-large", + "rule" : ".app-paste-light-large", + "hash" : "66f1f8fe7acafaab5f608598589aaa5c" + }, + "app-people-blue-large" : { + "name" : "app-people-blue-large", + "rule" : ".app-people-blue-large, .phabricator-crumb-view:hover .app-people-dark-large", + "hash" : "8433c6809710e477110cb61c67a5212d" + }, + "app-people-dark-large" : { + "name" : "app-people-dark-large", + "rule" : ".app-people-dark-large", + "hash" : "b1748b3a5afacd4f8afcd5ea37352dc7" + }, + "app-people-glow-large" : { + "name" : "app-people-glow-large", + "rule" : ".app-people-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-people-light-large", + "hash" : "ed1b2d2d27ae8fd07d0e5e1d4002625e" + }, + "app-people-light-large" : { + "name" : "app-people-light-large", + "rule" : ".app-people-light-large", + "hash" : "f6efcbdbcee02f9f37f92774b4b0e4cf" + }, + "app-phame-blue-large" : { + "name" : "app-phame-blue-large", + "rule" : ".app-phame-blue-large, .phabricator-crumb-view:hover .app-phame-dark-large", + "hash" : "ba652edfa86de3c3a00500853b799352" + }, + "app-phame-dark-large" : { + "name" : "app-phame-dark-large", + "rule" : ".app-phame-dark-large", + "hash" : "a7cf2f8ec22cdb675a3bc792c7c1edf6" + }, + "app-phame-glow-large" : { + "name" : "app-phame-glow-large", + "rule" : ".app-phame-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phame-light-large", + "hash" : "4587c25ff8a94fd48a1a0ca2e9fd9f42" + }, + "app-phame-light-large" : { + "name" : "app-phame-light-large", + "rule" : ".app-phame-light-large", + "hash" : "265471ec8d3c7ddeb3c269384d22243d" + }, + "app-phid-blue-large" : { + "name" : "app-phid-blue-large", + "rule" : ".app-phid-blue-large, .phabricator-crumb-view:hover .app-phid-dark-large", + "hash" : "b2d18cc9f46420dee3c36f87821184c6" + }, + "app-phid-dark-large" : { + "name" : "app-phid-dark-large", + "rule" : ".app-phid-dark-large", + "hash" : "f4dfdcc8e1fde50cfcb7e07376696964" + }, + "app-phid-glow-large" : { + "name" : "app-phid-glow-large", + "rule" : ".app-phid-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phid-light-large", + "hash" : "10ec316b409b385e19800048fcb1a79e" + }, + "app-phid-light-large" : { + "name" : "app-phid-light-large", + "rule" : ".app-phid-light-large", + "hash" : "0087c573b07d8badaeadcb8ad560ae9b" + }, + "app-pholio-blue-large" : { + "name" : "app-pholio-blue-large", + "rule" : ".app-pholio-blue-large, .phabricator-crumb-view:hover .app-pholio-dark-large", + "hash" : "722cefc2f26d4b66ef8470a2890ad717" + }, + "app-pholio-dark-large" : { + "name" : "app-pholio-dark-large", + "rule" : ".app-pholio-dark-large", + "hash" : "4a73276e5bcd9cfbb08435ed36051dff" + }, + "app-pholio-glow-large" : { + "name" : "app-pholio-glow-large", + "rule" : ".app-pholio-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-pholio-light-large", + "hash" : "aca383c3c4fcec4742a11702e3427221" + }, + "app-pholio-light-large" : { + "name" : "app-pholio-light-large", + "rule" : ".app-pholio-light-large", + "hash" : "1a3ace478c2b0f9b444005112e17c695" + }, + "app-phpast-blue-large" : { + "name" : "app-phpast-blue-large", + "rule" : ".app-phpast-blue-large, .phabricator-crumb-view:hover .app-phpast-dark-large", + "hash" : "7bd7530e7f297193af60c51d0d0fac8b" + }, + "app-phpast-dark-large" : { + "name" : "app-phpast-dark-large", + "rule" : ".app-phpast-dark-large", + "hash" : "bdbfd96cb50a8b7450daf82576fcfe95" + }, + "app-phpast-glow-large" : { + "name" : "app-phpast-glow-large", + "rule" : ".app-phpast-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phpast-light-large", + "hash" : "ce7433350eeaee95ecf358905ad38029" + }, + "app-phpast-light-large" : { + "name" : "app-phpast-light-large", + "rule" : ".app-phpast-light-large", + "hash" : "5ebd26eb5e0bc0229db5696020dd9b4a" + }, + "app-phriction-blue-large" : { + "name" : "app-phriction-blue-large", + "rule" : ".app-phriction-blue-large, .phabricator-crumb-view:hover .app-phriction-dark-large", + "hash" : "cf9e09813ba17bb1e08908d209d69291" + }, + "app-phriction-dark-large" : { + "name" : "app-phriction-dark-large", + "rule" : ".app-phriction-dark-large", + "hash" : "e4f3121261bc96e00bb6b94b467582f4" + }, + "app-phriction-glow-large" : { + "name" : "app-phriction-glow-large", + "rule" : ".app-phriction-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-phriction-light-large", + "hash" : "27612f55aaa40c4178a3a5a46d225947" + }, + "app-phriction-light-large" : { + "name" : "app-phriction-light-large", + "rule" : ".app-phriction-light-large", + "hash" : "a56dcfca00861938d337cc2f217b33f6" + }, + "app-ponder-blue-large" : { + "name" : "app-ponder-blue-large", + "rule" : ".app-ponder-blue-large, .phabricator-crumb-view:hover .app-ponder-dark-large", + "hash" : "60cff1644122068624bcebfd02dfc4fc" + }, + "app-ponder-dark-large" : { + "name" : "app-ponder-dark-large", + "rule" : ".app-ponder-dark-large", + "hash" : "6efc0b3a74d2cc9eb5de96205613b640" + }, + "app-ponder-glow-large" : { + "name" : "app-ponder-glow-large", + "rule" : ".app-ponder-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-ponder-light-large", + "hash" : "9c2a2506e53e6a902976d504dfe94b46" + }, + "app-ponder-light-large" : { + "name" : "app-ponder-light-large", + "rule" : ".app-ponder-light-large", + "hash" : "595895068b10c68b0e05234570a6a268" + }, + "app-power-blue-large" : { + "name" : "app-power-blue-large", + "rule" : ".app-power-blue-large, .phabricator-crumb-view:hover .app-power-dark-large", + "hash" : "bf8a66876fd4bc6b9735b69f1fd9b3df" + }, + "app-power-dark-large" : { + "name" : "app-power-dark-large", + "rule" : ".app-power-dark-large", + "hash" : "52d04564ca2cc7f3a96809e827162f3e" + }, + "app-power-glow-large" : { + "name" : "app-power-glow-large", + "rule" : ".app-power-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-power-light-large", + "hash" : "3f7719f0299abef8ba900e79fb6b5015" + }, + "app-power-light-large" : { + "name" : "app-power-light-large", + "rule" : ".app-power-light-large", + "hash" : "ffe9f181e6103eab9fc688ab84b07ad1" + }, + "app-projects-blue-large" : { + "name" : "app-projects-blue-large", + "rule" : ".app-projects-blue-large, .phabricator-crumb-view:hover .app-projects-dark-large", + "hash" : "c57ad9f4db09acd12f1784b4c584776f" + }, + "app-projects-dark-large" : { + "name" : "app-projects-dark-large", + "rule" : ".app-projects-dark-large", + "hash" : "fa85ad644a2e289cb6bea2a67ab534f8" + }, + "app-projects-glow-large" : { + "name" : "app-projects-glow-large", + "rule" : ".app-projects-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-projects-light-large", + "hash" : "b28bf212416595b3ba4bfb528dfaf791" + }, + "app-projects-light-large" : { + "name" : "app-projects-light-large", + "rule" : ".app-projects-light-large", + "hash" : "228db63ac0e80b3cef46903a003a44df" + }, + "app-repositories-blue-large" : { + "name" : "app-repositories-blue-large", + "rule" : ".app-repositories-blue-large, .phabricator-crumb-view:hover .app-repositories-dark-large", + "hash" : "30132235ecc5cf7b28d07cccb36f63cd" + }, + "app-repositories-dark-large" : { + "name" : "app-repositories-dark-large", + "rule" : ".app-repositories-dark-large", + "hash" : "30ead88c9f018797a8d5ef2f4e4221fe" + }, + "app-repositories-glow-large" : { + "name" : "app-repositories-glow-large", + "rule" : ".app-repositories-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-repositories-light-large", + "hash" : "44b04cbf1652211fbc2046c7773b4cf2" + }, + "app-repositories-light-large" : { + "name" : "app-repositories-light-large", + "rule" : ".app-repositories-light-large", + "hash" : "bcba180d121f9269787509ba7cdd3e48" + }, + "app-settings-blue-large" : { + "name" : "app-settings-blue-large", + "rule" : ".app-settings-blue-large, .phabricator-crumb-view:hover .app-settings-dark-large", + "hash" : "ddb611e05b15f041905340962ac54f14" + }, + "app-settings-dark-large" : { + "name" : "app-settings-dark-large", + "rule" : ".app-settings-dark-large", + "hash" : "6c174857e23a9d169d0cb4079aa14637" + }, + "app-settings-glow-large" : { + "name" : "app-settings-glow-large", + "rule" : ".app-settings-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-settings-light-large", + "hash" : "4d8c68dc709d99141a19aad5bc483971" + }, + "app-settings-light-large" : { + "name" : "app-settings-light-large", + "rule" : ".app-settings-light-large", + "hash" : "e901b672f2a51ef286369bfea70a7e8d" + }, + "app-slowvote-blue-large" : { + "name" : "app-slowvote-blue-large", + "rule" : ".app-slowvote-blue-large, .phabricator-crumb-view:hover .app-slowvote-dark-large", + "hash" : "4e2b1f49a07baefae7c04302bcf05195" + }, + "app-slowvote-dark-large" : { + "name" : "app-slowvote-dark-large", + "rule" : ".app-slowvote-dark-large", + "hash" : "6197df3550b652011bc1a8da00005059" + }, + "app-slowvote-glow-large" : { + "name" : "app-slowvote-glow-large", + "rule" : ".app-slowvote-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-slowvote-light-large", + "hash" : "43783af8df4f99e94f0989ca149264f2" + }, + "app-slowvote-light-large" : { + "name" : "app-slowvote-light-large", + "rule" : ".app-slowvote-light-large", + "hash" : "23eb39153b5ac9b5bd91c8b800023d93" + }, + "app-uiexamples-blue-large" : { + "name" : "app-uiexamples-blue-large", + "rule" : ".app-uiexamples-blue-large, .phabricator-crumb-view:hover .app-uiexamples-dark-large", + "hash" : "3fbf8ac4aa328dc0b6c754ca1a9fdbee" + }, + "app-uiexamples-dark-large" : { + "name" : "app-uiexamples-dark-large", + "rule" : ".app-uiexamples-dark-large", + "hash" : "31c9fb99289cc73aae73f3acad66b449" + }, + "app-uiexamples-glow-large" : { + "name" : "app-uiexamples-glow-large", + "rule" : ".app-uiexamples-glow-large, .device-desktop .phabricator-dark-menu a:hover .app-uiexamples-light-large", + "hash" : "069e59208dad509a6c3d74d102f08ae8" + }, + "app-uiexamples-light-large" : { + "name" : "app-uiexamples-light-large", + "rule" : ".app-uiexamples-light-large", + "hash" : "b384102bcee1b312b2e06abc5f4b27de" + } + }, + "scales" : [ + 1, + 2 + ], + "header" : "\/**\n * @provides sprite-apps-large-css\n * @generated\n *\/\n\n.sprite-apps-large {\n background-image: url(\/rsrc\/image\/sprite-apps-large.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-apps-large {\n background-image: url(\/rsrc\/image\/sprite-apps-large-X2.png);\n background-size: {X}px {Y}px;\n }\n}\n", + "type" : "standard" +} diff --git a/resources/sprite/manifest/apps-xlarge.json b/resources/sprite/manifest/apps-xlarge.json new file mode 100644 index 0000000000..6762d6c786 --- /dev/null +++ b/resources/sprite/manifest/apps-xlarge.json @@ -0,0 +1,190 @@ +{ + "version" : 1, + "sprites" : { + "app-application-dark-xlarge" : { + "name" : "app-application-dark-xlarge", + "rule" : ".app-application-dark-xlarge", + "hash" : "7a643a12413cff83e4a80a1e845526f8" + }, + "app-audit-dark-xlarge" : { + "name" : "app-audit-dark-xlarge", + "rule" : ".app-audit-dark-xlarge", + "hash" : "5551492ef2b1f0c6dc29707a268abcb7" + }, + "app-calendar-dark-xlarge" : { + "name" : "app-calendar-dark-xlarge", + "rule" : ".app-calendar-dark-xlarge", + "hash" : "f38663d868c6865423ad7072f1031cdf" + }, + "app-conduit-dark-xlarge" : { + "name" : "app-conduit-dark-xlarge", + "rule" : ".app-conduit-dark-xlarge", + "hash" : "bcee651ff297aab466c388739c219a27" + }, + "app-countdown-dark-xlarge" : { + "name" : "app-countdown-dark-xlarge", + "rule" : ".app-countdown-dark-xlarge", + "hash" : "c3667959ddfebe2ae95681215a71fc6e" + }, + "app-daemon-dark-xlarge" : { + "name" : "app-daemon-dark-xlarge", + "rule" : ".app-daemon-dark-xlarge", + "hash" : "f7b12a99852a6b10c3a37c834924adc0" + }, + "app-differential-dark-xlarge" : { + "name" : "app-differential-dark-xlarge", + "rule" : ".app-differential-dark-xlarge", + "hash" : "4593b952ecfc1d34971519912bb929c5" + }, + "app-diffusion-dark-xlarge" : { + "name" : "app-diffusion-dark-xlarge", + "rule" : ".app-diffusion-dark-xlarge", + "hash" : "6db32b1bc12d289ef6f3961d8db835b2" + }, + "app-diviner-dark-xlarge" : { + "name" : "app-diviner-dark-xlarge", + "rule" : ".app-diviner-dark-xlarge", + "hash" : "99df86667a67c4790f7fafd836320811" + }, + "app-drydock-dark-xlarge" : { + "name" : "app-drydock-dark-xlarge", + "rule" : ".app-drydock-dark-xlarge", + "hash" : "7e3fca7e8a676f31a584bba714223be3" + }, + "app-fact-dark-xlarge" : { + "name" : "app-fact-dark-xlarge", + "rule" : ".app-fact-dark-xlarge", + "hash" : "d9b1d20ff52ca3e78a8d4f86d8cba80a" + }, + "app-files-dark-xlarge" : { + "name" : "app-files-dark-xlarge", + "rule" : ".app-files-dark-xlarge", + "hash" : "f98aaf6cafcd39cfa45de67814c8e25c" + }, + "app-flags-dark-xlarge" : { + "name" : "app-flags-dark-xlarge", + "rule" : ".app-flags-dark-xlarge", + "hash" : "9c439bf054d35ebb5f06b22a9acb5d64" + }, + "app-help-dark-xlarge" : { + "name" : "app-help-dark-xlarge", + "rule" : ".app-help-dark-xlarge", + "hash" : "dea35456361ba0851085dd68c1f586e3" + }, + "app-herald-dark-xlarge" : { + "name" : "app-herald-dark-xlarge", + "rule" : ".app-herald-dark-xlarge", + "hash" : "dbff6868cd9046c41d7d9d1f57bb4bf8" + }, + "app-home-dark-xlarge" : { + "name" : "app-home-dark-xlarge", + "rule" : ".app-home-dark-xlarge", + "hash" : "c0758afffbbbe6cc076d2e6fa22ca809" + }, + "app-logo-dark-xlarge" : { + "name" : "app-logo-dark-xlarge", + "rule" : ".app-logo-dark-xlarge", + "hash" : "50a1a90428301872442f438a884053cd" + }, + "app-macro-dark-xlarge" : { + "name" : "app-macro-dark-xlarge", + "rule" : ".app-macro-dark-xlarge", + "hash" : "4992c19c9d883a7aa40d26a67253c4af" + }, + "app-mail-dark-xlarge" : { + "name" : "app-mail-dark-xlarge", + "rule" : ".app-mail-dark-xlarge", + "hash" : "47e47cf18b434e567fedd5ecd3b1dd06" + }, + "app-maniphest-dark-xlarge" : { + "name" : "app-maniphest-dark-xlarge", + "rule" : ".app-maniphest-dark-xlarge", + "hash" : "f50e0c476990448c594892e7436c3f25" + }, + "app-metamta-dark-xlarge" : { + "name" : "app-metamta-dark-xlarge", + "rule" : ".app-metamta-dark-xlarge", + "hash" : "48bbb5e9bf22c61f47f20e4d4f28e388" + }, + "app-owners-dark-xlarge" : { + "name" : "app-owners-dark-xlarge", + "rule" : ".app-owners-dark-xlarge", + "hash" : "cdd4aff8d915194a03f91bf179f769e3" + }, + "app-paste-dark-xlarge" : { + "name" : "app-paste-dark-xlarge", + "rule" : ".app-paste-dark-xlarge", + "hash" : "01fb15f0c1737b8ebfff35f2640f724b" + }, + "app-people-dark-xlarge" : { + "name" : "app-people-dark-xlarge", + "rule" : ".app-people-dark-xlarge", + "hash" : "84b938691e8bfe3a703bcb4268557c4f" + }, + "app-phame-dark-xlarge" : { + "name" : "app-phame-dark-xlarge", + "rule" : ".app-phame-dark-xlarge", + "hash" : "83c25a09a86864b2234b15a822bcc3ee" + }, + "app-phid-dark-xlarge" : { + "name" : "app-phid-dark-xlarge", + "rule" : ".app-phid-dark-xlarge", + "hash" : "920ce85f9599b2e108f91646d02d0d98" + }, + "app-pholio-dark-xlarge" : { + "name" : "app-pholio-dark-xlarge", + "rule" : ".app-pholio-dark-xlarge", + "hash" : "3df7131f4ba39cb1b41265a8c9ab21b4" + }, + "app-phpast-dark-xlarge" : { + "name" : "app-phpast-dark-xlarge", + "rule" : ".app-phpast-dark-xlarge", + "hash" : "a6e70722d85061c262cb7cb89a66d6e7" + }, + "app-phriction-dark-xlarge" : { + "name" : "app-phriction-dark-xlarge", + "rule" : ".app-phriction-dark-xlarge", + "hash" : "7abef95c6c378ab6bb3d08ca4a252c5c" + }, + "app-ponder-dark-xlarge" : { + "name" : "app-ponder-dark-xlarge", + "rule" : ".app-ponder-dark-xlarge", + "hash" : "fab5f0539a3e17ff9934b1165658987d" + }, + "app-power-dark-xlarge" : { + "name" : "app-power-dark-xlarge", + "rule" : ".app-power-dark-xlarge", + "hash" : "dcfbd602f69e65b52c42825fd65fdb15" + }, + "app-projects-dark-xlarge" : { + "name" : "app-projects-dark-xlarge", + "rule" : ".app-projects-dark-xlarge", + "hash" : "403790d745f6e385e2639d72d57f40e5" + }, + "app-repositories-dark-xlarge" : { + "name" : "app-repositories-dark-xlarge", + "rule" : ".app-repositories-dark-xlarge", + "hash" : "f3319bd72328ed112650b79f3bc06831" + }, + "app-settings-dark-xlarge" : { + "name" : "app-settings-dark-xlarge", + "rule" : ".app-settings-dark-xlarge", + "hash" : "48788e1a045452ae1c2ca179e623d056" + }, + "app-slowvote-dark-xlarge" : { + "name" : "app-slowvote-dark-xlarge", + "rule" : ".app-slowvote-dark-xlarge", + "hash" : "705b09e36b25a7ed4b4a9c924173e79e" + }, + "app-uiexamples-dark-xlarge" : { + "name" : "app-uiexamples-dark-xlarge", + "rule" : ".app-uiexamples-dark-xlarge", + "hash" : "3f58b1ab30daf4a5a8cedfc7484421bf" + } + }, + "scales" : [ + 1 + ], + "header" : "\/**\n * @provides sprite-apps-xlarge-css\n * @generated\n *\/\n\n.sprite-apps-xlarge {\n background-image: url(\/rsrc\/image\/sprite-apps-xlarge.png);\n background-repeat: no-repeat;\n}\n\n\n", + "type" : "standard" +} diff --git a/resources/sprite/manifest/apps.json b/resources/sprite/manifest/apps.json new file mode 100644 index 0000000000..919220849f --- /dev/null +++ b/resources/sprite/manifest/apps.json @@ -0,0 +1,191 @@ +{ + "version" : 1, + "sprites" : { + "app-application-dark" : { + "name" : "app-application-dark", + "rule" : ".app-application-dark", + "hash" : "89f861c28e97878311885623cff3d314" + }, + "app-audit-dark" : { + "name" : "app-audit-dark", + "rule" : ".app-audit-dark", + "hash" : "2c141bc445c4fe62986cd6cff0c29b36" + }, + "app-calendar-dark" : { + "name" : "app-calendar-dark", + "rule" : ".app-calendar-dark", + "hash" : "04c61a081986f0d38cf27fc4e18bce40" + }, + "app-conduit-dark" : { + "name" : "app-conduit-dark", + "rule" : ".app-conduit-dark", + "hash" : "7b410e96c87e7818fb93bdfa2ed9368f" + }, + "app-countdown-dark" : { + "name" : "app-countdown-dark", + "rule" : ".app-countdown-dark", + "hash" : "8891502317896beea6a5f9ec87eb5e2e" + }, + "app-daemon-dark" : { + "name" : "app-daemon-dark", + "rule" : ".app-daemon-dark", + "hash" : "23a9a2927b368e2328dd70f95c5b1a07" + }, + "app-differential-dark" : { + "name" : "app-differential-dark", + "rule" : ".app-differential-dark", + "hash" : "bb7032f3c17901f242f9bbbcdc9a721c" + }, + "app-diffusion-dark" : { + "name" : "app-diffusion-dark", + "rule" : ".app-diffusion-dark", + "hash" : "46ab6648a6ae04e4fd1a28a9afcc4996" + }, + "app-diviner-dark" : { + "name" : "app-diviner-dark", + "rule" : ".app-diviner-dark", + "hash" : "e21a74e866a6fc22a991b8df6efc3ca7" + }, + "app-drydock-dark" : { + "name" : "app-drydock-dark", + "rule" : ".app-drydock-dark", + "hash" : "ed44013d98257a23306bad9c6b24760d" + }, + "app-fact-dark" : { + "name" : "app-fact-dark", + "rule" : ".app-fact-dark", + "hash" : "f373f38e784289b866ab914471c342ec" + }, + "app-files-dark" : { + "name" : "app-files-dark", + "rule" : ".app-files-dark", + "hash" : "7faf45efa5b9b97e571bc66636ca1a15" + }, + "app-flags-dark" : { + "name" : "app-flags-dark", + "rule" : ".app-flags-dark", + "hash" : "10298f695592714e27f72ef746ffd8a9" + }, + "app-help-dark" : { + "name" : "app-help-dark", + "rule" : ".app-help-dark", + "hash" : "5cf715cc566b98c87958793eebea5f35" + }, + "app-herald-dark" : { + "name" : "app-herald-dark", + "rule" : ".app-herald-dark", + "hash" : "e3bc39a3dd1d66a0abf4594c608a3846" + }, + "app-home-dark" : { + "name" : "app-home-dark", + "rule" : ".app-home-dark", + "hash" : "7e01fbdfa526919a2d90d2c29a6c9fa0" + }, + "app-logo-dark" : { + "name" : "app-logo-dark", + "rule" : ".app-logo-dark", + "hash" : "39701e1282fd120e77b09ed9fcddc686" + }, + "app-macro-dark" : { + "name" : "app-macro-dark", + "rule" : ".app-macro-dark", + "hash" : "ef89457bcee666ad265de1659b9b8a62" + }, + "app-mail-dark" : { + "name" : "app-mail-dark", + "rule" : ".app-mail-dark", + "hash" : "4d05a5cd4360052183e91f61967a6c57" + }, + "app-maniphest-dark" : { + "name" : "app-maniphest-dark", + "rule" : ".app-maniphest-dark", + "hash" : "320da127d7f887e09965a0416d5e44d3" + }, + "app-metamta-dark" : { + "name" : "app-metamta-dark", + "rule" : ".app-metamta-dark", + "hash" : "51f100c2a7a80149404dbc8b27f595a9" + }, + "app-owners-dark" : { + "name" : "app-owners-dark", + "rule" : ".app-owners-dark", + "hash" : "33c064dd3b7fc3f9eb934d0cf84f3af5" + }, + "app-paste-dark" : { + "name" : "app-paste-dark", + "rule" : ".app-paste-dark", + "hash" : "9482649caa8e5a46d277271092517b12" + }, + "app-people-dark" : { + "name" : "app-people-dark", + "rule" : ".app-people-dark", + "hash" : "67245eafa79367e4e07289549cf34deb" + }, + "app-phame-dark" : { + "name" : "app-phame-dark", + "rule" : ".app-phame-dark", + "hash" : "029d7d48523cc43b0404bf40ccf56f8b" + }, + "app-phid-dark" : { + "name" : "app-phid-dark", + "rule" : ".app-phid-dark", + "hash" : "2099c2987fe3929ce1d9dec470c7699d" + }, + "app-pholio-dark" : { + "name" : "app-pholio-dark", + "rule" : ".app-pholio-dark", + "hash" : "aab47c79d2e03fdcaffb6f41dc1e0f06" + }, + "app-phpast-dark" : { + "name" : "app-phpast-dark", + "rule" : ".app-phpast-dark", + "hash" : "e6db72b398f57d03a400c9c18bd3c412" + }, + "app-phriction-dark" : { + "name" : "app-phriction-dark", + "rule" : ".app-phriction-dark", + "hash" : "8064272206874a324d20d956c8fb10da" + }, + "app-ponder-dark" : { + "name" : "app-ponder-dark", + "rule" : ".app-ponder-dark", + "hash" : "abdb353635bed5cfd48a176b4340022f" + }, + "app-power-dark" : { + "name" : "app-power-dark", + "rule" : ".app-power-dark", + "hash" : "d3e943d1267206963d8f9419629c5581" + }, + "app-projects-dark" : { + "name" : "app-projects-dark", + "rule" : ".app-projects-dark", + "hash" : "6bd7c598e2f2cf0b77918a7b0fa8bd19" + }, + "app-repositories-dark" : { + "name" : "app-repositories-dark", + "rule" : ".app-repositories-dark", + "hash" : "db2823a16dae198145f53e8021170740" + }, + "app-settings-dark" : { + "name" : "app-settings-dark", + "rule" : ".app-settings-dark", + "hash" : "1c84d22b769730d9e8b6fcd3414de72c" + }, + "app-slowvote-dark" : { + "name" : "app-slowvote-dark", + "rule" : ".app-slowvote-dark", + "hash" : "0d5861fab4562ad21242e34f9a29a33e" + }, + "app-uiexamples-dark" : { + "name" : "app-uiexamples-dark", + "rule" : ".app-uiexamples-dark", + "hash" : "6416a3d9d9007673ee558433b80692a1" + } + }, + "scales" : [ + 1, + 2 + ], + "header" : "\/**\n * @provides sprite-apps-css\n * @generated\n *\/\n\n.sprite-apps {\n background-image: url(\/rsrc\/image\/sprite-apps.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-apps {\n background-image: url(\/rsrc\/image\/sprite-apps-X2.png);\n background-size: {X}px {Y}px;\n }\n}\n", + "type" : "standard" +} diff --git a/resources/sprite/manifest/gradient.json b/resources/sprite/manifest/gradient.json index c050f77f36..2a4c74d04c 100644 --- a/resources/sprite/manifest/gradient.json +++ b/resources/sprite/manifest/gradient.json @@ -1,60 +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, .phabricator-dark-menu .phabricator-menu-item-type-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, .phabricator-dark-menu .phabricator-menu-item-type-label {\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, .phabricator-dark-menu .phabricator-menu-item-type-label {\n background-image: url(\/rsrc\/image\/sprite-gradient-X2.png);\n background-size: {X}px {Y}px;\n }\n}", + "header" : "\/**\n * @provides sprite-gradient-css\n * @generated\n *\/\n\n.sprite-gradient, button, a.button, a.button:visited, input.inputsubmit, .phabricator-dark-menu .phabricator-menu-item-type-label {\n background-image: url(\/rsrc\/image\/sprite-gradient.png);\n background-repeat: repeat-x;\n}\n\n\n", "type" : "repeat-x" } diff --git a/resources/sprite/manifest/icon.json b/resources/sprite/manifest/icon.json index 0c53260cad..d310d6d0db 100644 --- a/resources/sprite/manifest/icon.json +++ b/resources/sprite/manifest/icon.json @@ -1,971 +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}\n", "type" : "standard" } diff --git a/resources/sprite/manifest/menu.json b/resources/sprite/manifest/menu.json index e008dc5386..645bc57675 100644 --- a/resources/sprite/manifest/menu.json +++ b/resources/sprite/manifest/menu.json @@ -1,51 +1,51 @@ { "version" : 1, "sprites" : { "app" : { "name" : "app", "rule" : ".menu-icon-app", "hash" : "a389f99d9c00f688e625da71579ee90a" }, "arrow-right" : { "name" : "arrow-right", "rule" : ".phabricator-crumb-divider", "hash" : "a994209450dc73a80841cdd66bb59925" }, "bubble" : { "name" : "bubble", "rule" : ".phabricator-main-menu-alert-bubble.alert-unread", "hash" : "1145ac8a137a2a22517c1945fe22c517" }, "eye" : { "name" : "eye", "rule" : ".menu-icon-eye", "hash" : "d598b1acb1933a86eaed3dea3347f7b0" }, "round_bubble" : { "name" : "round_bubble", "rule" : ".phabricator-main-menu-alert-bubble", "hash" : "9be91cc0128997992e9001baf32c8ab8" }, "seen_have_unread" : { "name" : "seen_have_unread", "rule" : ".alert-notifications:hover .phabricator-main-menu-alert-icon", "hash" : "a8a7f07caa726d7e61ef3d41f959d94d" }, "seen_read_all" : { "name" : "seen_read_all", "rule" : ".alert-notifications .phabricator-main-menu-alert-icon", "hash" : "4fdd4807d0c41bd4179dd43150c7fc44" }, "unseen_any" : { "name" : "unseen_any", "rule" : ".alert-notifications.alert-unread .phabricator-main-menu-alert-icon", "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}\n", "type" : "standard" } diff --git a/scripts/celerity/generate_sprites.php b/scripts/celerity/generate_sprites.php index 38b027a2fb..7c7ab79580 100755 --- a/scripts/celerity/generate_sprites.php +++ b/scripts/celerity/generate_sprites.php @@ -1,250 +1,81 @@ #!/usr/bin/env php setTagline('regenerate CSS sprite sheets'); $args->setSynopsis(<<parseStandardArguments(); $args->parse( array( - array( - 'name' => 'source', - 'param' => 'directory', - 'help' => 'Directory with sprite sources.', - ), array( 'name' => 'force', 'help' => 'Force regeneration even if sources have not changed.', ), )); -$srcroot = $args->getArg('source'); -if (!$srcroot) { - throw new Exception( - "You must specify a source directory with '--source'."); -} - $root = dirname(phutil_get_library_root('phabricator')); $webroot = $root.'/webroot/rsrc'; $webroot = Filesystem::readablePath($webroot); -function glx($x) { - return (60 + (48 * $x)); -} - -function gly($y) { - return (110 + (48 * $y)); -} - -$sheet = new PhutilSpriteSheet(); -$at = '@'; -$sheet->setCSSHeader(<<setSourceFile($srcroot.'/menu_normal_1x.png') - ->setSourceSize(30, 30); - -$menu_hover_template = id(new PhutilSprite()) - ->setSourceFile($srcroot.'/menu_hover_1x.png') - ->setSourceSize(30, 30); - -$menu_selected_template = id(new PhutilSprite()) - ->setSourceFile($srcroot.'/menu_selected_1x.png') - ->setSourceSize(30, 30); - -$menu_map = array( - '' => $menu_normal_template, - '-selected' => $menu_selected_template, - ':hover' => $menu_hover_template, -); - -$icon_map = array( - 'help' => array(4, 19), - 'settings' => array(0, 28), - 'logout' => array(3, 6), - 'task' => array(1, 15), -); - -foreach ($icon_map as $icon => $coords) { - list($x, $y) = $coords; - foreach ($menu_map as $suffix => $template) { - $sheet->addSprite( - id(clone $template) - ->setName('menu-item-'.$icon.'-'.$suffix) - ->setSourcePosition(glx($x), gly($y)) - ->setTargetCSS('.main-menu-item-icon-'.$icon.$suffix)); - } -} - -$app_template_large = id(new PhutilSprite()) - ->setSourceFile($srcroot.'/application_large_1x.png') - ->setSourceSize(60, 60); - -$app_template_large_hover = id(new PhutilSprite()) - ->setSourceFile($srcroot.'/application_large_hover_1x.png') - ->setSourceSize(60, 60); - -$app_template_small = id(new PhutilSprite()) - ->setSourceFile($srcroot.'/menu_normal_1x.png') - ->setSourceSize(30, 30); - -$app_template_small_hover = id(new PhutilSprite()) - ->setSourceFile($srcroot.'/menu_hover_1x.png') - ->setSourceSize(30, 30); - -$app_template_small_selected = id(new PhutilSprite()) - ->setSourceFile($srcroot.'/menu_selected_1x.png') - ->setSourceSize(30, 30); - -$app_source_map = array( - '-large' => array($app_template_large, 2), - - // For the application launch view, we only show hover state on the desktop - // because it looks glitchy on touch devices. We show the hover state when - // the surrounding is hovered, not the icon itself. - '-large /* hover */' => array( - $app_template_large_hover, - 2, - '.device-desktop .phabricator-application-launch-container:hover '), - - '' => array($app_template_small, 1), - - // Show hover state only for the desktop. - ':hover' => array( - $app_template_small_hover, - 1, - '.device-desktop ', - ), - '-selected' => array($app_template_small_selected, 1), -); - -$app_map = array( - 'differential' => array(9, 1), - 'fact' => array(2, 4), - 'mail' => array(0, 1), - 'diffusion' => array(7, 13), - 'slowvote' => array(1, 4), - 'phriction' => array(1, 7), - 'maniphest' => array(3, 24), - 'flags' => array(6, 26), - 'settings' => array(9, 11), - 'applications' => array(0, 34), - 'default' => array(9, 9), - 'people' => array(3, 0), - 'ponder' => array(4, 35), - 'calendar' => array(5, 4), - 'files' => array(6, 3), - 'projects' => array(7, 35), - 'daemons' => array(7, 6), - 'herald' => array(1, 5), - 'countdown' => array(7, 5), - 'conduit' => array(7, 30), - 'feed' => array(3, 11), - 'paste' => array(9, 2), - 'audit' => array(8, 19), - 'uiexample' => array(7, 28), - 'phpast' => array(6, 31), - 'owners' => array(5, 32), - 'phid' => array(9, 25), - 'diviner' => array(1, 35), - 'repositories' => array(8, 13), - 'phame' => array(8, 4), - 'macro' => array(0, 31), - 'releeph' => array(5, 18), - 'drydock' => array(5, 25), -); - -$xadj = -1; -foreach ($app_map as $icon => $coords) { - list($x, $y) = $coords; - foreach ($app_source_map as $suffix => $spec) { - list($template, $scale) = $spec; - if (isset($spec[2])) { - $prefix = $spec[2]; - } else { - $prefix = ''; - } - $sheet->addSprite( - id(clone $template) - ->setName('app-'.$icon.'-'.$suffix) - ->setSourcePosition(($xadj + glx($x)) * $scale, gly($y) * $scale) - ->setTargetCSS($prefix.'.app-'.$icon.$suffix)); - } -} - -$sheet->generateImage($webroot.'/image/autosprite.png'); -$sheet->generateCSS($webroot.'/css/autosprite.css'); - - -/* -( Icons Sheet )-------------------------------------------------------- */ - $generator = new CeleritySpriteGenerator(); $sheets = array( 'icon' => $generator->buildIconSheet(), 'menu' => $generator->buildMenuSheet(), + 'apps' => $generator->buildAppsSheet(), + 'apps-large' => $generator->buildAppsLargeSheet(), + 'apps-xlarge' => $generator->buildAppsXLargeSheet(), 'gradient' => $generator->buildGradientSheet(), ); list($err) = exec_manual('optipng'); if ($err) { $have_optipng = false; echo phutil_console_format( " WARNING `optipng` not found in PATH.\n". "Sprites will not be optimized! Install `optipng`!\n"); } else { $have_optipng = true; } 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 ->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"; } $full_path = "{$webroot}/image/{$sheet_name}"; $sheet->generateImage($full_path, $scale); if ($have_optipng) { echo "Optimizing...\n"; phutil_passthru('optipng -o7 -clobber %s', $full_path); } } } echo "Done.\n"; diff --git a/scripts/celerity_mapper.php b/scripts/celerity_mapper.php index ff32a7a967..5449ea5c3f 100755 --- a/scripts/celerity_mapper.php +++ b/scripts/celerity_mapper.php @@ -1,395 +1,394 @@ #!/usr/bin/env php array( 'javelin-util', 'javelin-install', 'javelin-event', 'javelin-stratcom', 'javelin-behavior', 'javelin-resource', 'javelin-request', 'javelin-vector', 'javelin-dom', 'javelin-json', 'javelin-uri', 'javelin-workflow', 'javelin-mask', 'javelin-typeahead', 'javelin-typeahead-normalizer', 'javelin-typeahead-source', 'javelin-typeahead-preloaded-source', 'javelin-typeahead-ondemand-source', 'javelin-tokenizer', ), 'core.pkg.js' => array( 'javelin-behavior-aphront-basic-tokenizer', 'javelin-behavior-workflow', 'javelin-behavior-aphront-form-disable-on-submit', 'phabricator-keyboard-shortcut-manager', 'phabricator-keyboard-shortcut', 'javelin-behavior-phabricator-keyboard-shortcuts', 'javelin-behavior-refresh-csrf', 'javelin-behavior-phabricator-watch-anchor', 'javelin-behavior-phabricator-autofocus', 'phabricator-paste-file-upload', 'phabricator-menu-item', 'phabricator-dropdown-menu', 'javelin-behavior-phabricator-oncopy', 'phabricator-tooltip', 'javelin-behavior-phabricator-tooltips', 'phabricator-prefab', 'javelin-behavior-device', 'javelin-behavior-toggle-class', 'javelin-behavior-lightbox-attachments', 'phabricator-busy', 'javelin-aphlict', 'phabricator-notification', 'javelin-behavior-aphlict-listen', 'javelin-behavior-phabricator-search-typeahead', 'javelin-behavior-konami', 'javelin-behavior-aphlict-dropdown', 'javelin-behavior-phabricator-active-nav', 'javelin-behavior-phabricator-nav', 'javelin-behavior-phabricator-remarkup-assist', 'phabricator-textareautils', 'phabricator-file-upload', ), 'core.pkg.css' => array( 'phabricator-core-css', 'phabricator-core-buttons-css', 'phabricator-standard-page-view', 'aphront-dialog-view-css', 'aphront-form-view-css', 'aphront-panel-view-css', 'aphront-side-nav-view-css', 'aphront-table-view-css', 'aphront-crumbs-view-css', 'aphront-tokenizer-control-css', 'aphront-typeahead-control-css', 'aphront-list-filter-view-css', 'phabricator-directory-css', 'phabricator-jump-nav', 'phabricator-app-buttons-css', 'phabricator-remarkup-css', 'syntax-highlighting-css', 'aphront-pager-view-css', 'phabricator-transaction-view-css', 'aphront-tooltip-css', 'aphront-headsup-view-css', 'phabricator-flag-css', 'aphront-error-view-css', - 'autosprite-css', 'sprite-icon-css', 'phabricator-main-menu-view', 'phabricator-notification-css', 'phabricator-notification-menu-css', 'lightbox-attachment-css', 'phabricator-header-view-css', 'phabricator-form-view-css', 'phabricator-filetree-view-css', 'phabricator-nav-view-css', ), 'differential.pkg.css' => array( 'differential-core-view-css', 'differential-changeset-view-css', 'differential-results-table-css', 'differential-revision-history-css', 'differential-revision-list-css', 'differential-table-of-contents-css', 'differential-revision-comment-css', 'differential-revision-add-comment-css', 'differential-revision-comment-list-css', 'phabricator-object-selector-css', 'aphront-headsup-action-list-view-css', 'phabricator-content-source-view-css', 'differential-local-commits-view-css', 'inline-comment-summary-css', ), 'differential.pkg.js' => array( 'phabricator-drag-and-drop-file-upload', 'phabricator-shaped-request', 'javelin-behavior-differential-feedback-preview', 'javelin-behavior-differential-edit-inline-comments', 'javelin-behavior-differential-populate', 'javelin-behavior-differential-show-more', 'javelin-behavior-differential-diff-radios', 'javelin-behavior-differential-accept-with-errors', 'javelin-behavior-differential-comment-jump', 'javelin-behavior-differential-add-reviewers-and-ccs', 'javelin-behavior-differential-keyboard-navigation', 'javelin-behavior-aphront-drag-and-drop', 'javelin-behavior-aphront-drag-and-drop-textarea', 'javelin-behavior-phabricator-object-selector', 'javelin-behavior-repository-crossreference', 'differential-inline-comment-editor', 'javelin-behavior-differential-dropdown-menus', 'javelin-behavior-differential-toggle-files', 'javelin-behavior-differential-user-select', ), 'diffusion.pkg.css' => array( 'diffusion-commit-view-css', 'diffusion-icons-css', ), 'diffusion.pkg.js' => array( 'javelin-behavior-diffusion-pull-lastmodified', 'javelin-behavior-diffusion-commit-graph', 'javelin-behavior-audit-preview', ), 'maniphest.pkg.css' => array( 'maniphest-task-summary-css', 'maniphest-transaction-detail-css', 'aphront-attached-file-view-css', 'phabricator-project-tag-css', ), 'maniphest.pkg.js' => array( 'javelin-behavior-maniphest-batch-selector', 'javelin-behavior-maniphest-transaction-controls', 'javelin-behavior-maniphest-transaction-preview', 'javelin-behavior-maniphest-transaction-expand', 'javelin-behavior-maniphest-subpriority-editor', ), 'darkconsole.pkg.js' => array( 'javelin-behavior-dark-console-ajax', 'javelin-behavior-dark-console', 'javelin-behavior-error-log', ), ); require_once dirname(__FILE__).'/__init_script__.php'; $args = new PhutilArgumentParser($argv); $args->setTagline('map static resources'); $args->setSynopsis( "**celerity_mapper.php** [--output __path__] [--with-custom] "); $args->parse( array( array( 'name' => 'output', 'param' => 'path', 'default' => '../src/__celerity_resource_map__.php', 'help' => "Set the path for resource map. It is usually useful for ". "'celerity.resource-path' configuration.", ), array( 'name' => 'with-custom', 'help' => 'Include resources in /rsrc/custom/.', ), array( 'name' => 'webroot', 'wildcard' => true, ), )); $root = $args->getArg('webroot'); if (count($root) != 1 || !is_dir(reset($root))) { $args->printHelpAndExit(); } $root = Filesystem::resolvePath(reset($root)); $celerity_path = Filesystem::resolvePath($args->getArg('output'), $root); $with_custom = $args->getArg('with-custom'); $resource_hash = PhabricatorEnv::getEnvConfig('celerity.resource-hash'); $runtime_map = array(); echo "Finding raw static resources...\n"; $finder = id(new FileFinder($root)) ->withType('f') ->withSuffix('png') ->withSuffix('jpg') ->withSuffix('gif') ->withSuffix('swf') ->withFollowSymlinks(true) ->setGenerateChecksums(true); if (!$with_custom) { $finder->excludePath('./rsrc/custom'); } $raw_files = $finder->find(); echo "Processing ".count($raw_files)." files"; foreach ($raw_files as $path => $hash) { echo "."; $path = '/'.Filesystem::readablePath($path, $root); $type = CelerityResourceTransformer::getResourceType($path); $hash = md5($hash.$path.$resource_hash); $uri = '/res/'.substr($hash, 0, 8).$path; $runtime_map[$path] = array( 'hash' => $hash, 'uri' => $uri, 'disk' => $path, 'type' => $type, ); } echo "\n"; $xformer = id(new CelerityResourceTransformer()) ->setMinify(false) ->setRawResourceMap($runtime_map); echo "Finding transformable static resources...\n"; $finder = id(new FileFinder($root)) ->withType('f') ->withSuffix('js') ->withSuffix('css') ->withFollowSymlinks(true) ->setGenerateChecksums(true); if (!$with_custom) { $finder->excludePath('./rsrc/custom'); } $files = $finder->find(); echo "Processing ".count($files)." files"; $file_map = array(); foreach ($files as $path => $raw_hash) { echo "."; $path = '/'.Filesystem::readablePath($path, $root); $data = Filesystem::readFile($root.$path); $data = $xformer->transformResource($path, $data); $hash = md5($data); $hash = md5($hash.$path.$resource_hash); $file_map[$path] = array( 'hash' => $hash, 'disk' => $path, ); } echo "\n"; $resource_graph = array(); $hash_map = array(); $parser = new PhutilDocblockParser(); foreach ($file_map as $path => $info) { $type = CelerityResourceTransformer::getResourceType($path); $data = Filesystem::readFile($root.$info['disk']); $matches = array(); $ok = preg_match('@/[*][*].*?[*]/@s', $data, $matches); if (!$ok) { throw new Exception( "File {$path} does not have a header doc comment. Encode dependency ". "data in a header docblock."); } list($description, $metadata) = $parser->parse($matches[0]); $provides = preg_split('/\s+/', trim(idx($metadata, 'provides'))); $requires = preg_split('/\s+/', trim(idx($metadata, 'requires'))); $provides = array_filter($provides); $requires = array_filter($requires); if (!$provides) { // Tests and documentation-only JS is permitted to @provide no targets. continue; } if (count($provides) > 1) { throw new Exception( "File {$path} must @provide at most one Celerity target."); } $provides = reset($provides); $uri = '/res/'.substr($info['hash'], 0, 8).$path; $hash_map[$provides] = $info['hash']; $resource_graph[$provides] = $requires; $runtime_map[$provides] = array( 'uri' => $uri, 'type' => $type, 'requires' => $requires, 'disk' => $path, ); } $celerity_resource_graph = new CelerityResourceGraph(); $celerity_resource_graph->addNodes($resource_graph); $celerity_resource_graph->setResourceGraph($resource_graph); $celerity_resource_graph->loadGraph(); foreach ($resource_graph as $provides => $requires) { $cycle = $celerity_resource_graph->detectCycles($provides); if ($cycle) { throw new Exception( "Cycle detected in resource graph: ". implode($cycle, " => ") ); } } $package_map = array(); foreach ($package_spec as $name => $package) { $hashes = array(); $type = null; foreach ($package as $symbol) { if (empty($hash_map[$symbol])) { throw new Exception( "Package specification for '{$name}' includes '{$symbol}', but that ". "symbol is not defined anywhere."); } if ($type === null) { $type = $runtime_map[$symbol]['type']; } else { $ntype = $runtime_map[$symbol]['type']; if ($type !== $ntype) { throw new Exception( "Package specification for '{$name}' mixes resources of type ". "'{$type}' with resources of type '{$ntype}'. Each package may only ". "contain one type of resource."); } } $hashes[] = $symbol.':'.$hash_map[$symbol]; } $key = substr(md5(implode("\n", $hashes)), 0, 8); $package_map['packages'][$key] = array( 'name' => $name, 'symbols' => $package, 'uri' => '/res/pkg/'.$key.'/'.$name, 'type' => $type, ); foreach ($package as $symbol) { $package_map['reverse'][$symbol] = $key; } } ksort($runtime_map); $runtime_map = var_export($runtime_map, true); $runtime_map = preg_replace('/\s+$/m', '', $runtime_map); $runtime_map = preg_replace('/array \(/', 'array(', $runtime_map); $package_map['packages'] = isort($package_map['packages'], 'name'); ksort($package_map['reverse']); $package_map = var_export($package_map, true); $package_map = preg_replace('/\s+$/m', '', $package_map); $package_map = preg_replace('/array \(/', 'array(', $package_map); $generated = '@'.'generated'; $resource_map = << array( '' => 'PhabricatorAuditListController', 'view/(?P[^/]+)/(?:(?P[^/]+)/)?' => 'PhabricatorAuditListController', 'addcomment/' => 'PhabricatorAuditAddCommentController', 'preview/(?P[1-9]\d*)/' => 'PhabricatorAuditPreviewController', ), ); } public function getApplicationGroup() { return self::GROUP_CORE; } public function getApplicationOrder() { return 0.130; } public function loadStatus(PhabricatorUser $user) { $status = array(); $phids = PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($user); $audits = id(new PhabricatorAuditQuery()) ->withAuditorPHIDs($phids) ->withStatus(PhabricatorAuditQuery::STATUS_OPEN) ->withAwaitingUser($user) ->execute(); $count = count($audits); $type = $count ? PhabricatorApplicationStatusView::TYPE_INFO : PhabricatorApplicationStatusView::TYPE_EMPTY; $status[] = id(new PhabricatorApplicationStatusView()) ->setType($type) ->setText(pht('%d Commit(s) Awaiting Audit', $count)) ->setCount($count); $commits = id(new PhabricatorAuditCommitQuery()) ->withAuthorPHIDs($phids) ->withStatus(PhabricatorAuditQuery::STATUS_OPEN) ->execute(); $count = count($commits); $type = $count ? PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION : PhabricatorApplicationStatusView::TYPE_EMPTY; $status[] = id(new PhabricatorApplicationStatusView()) ->setType($type) ->setText(pht('%d Problem Commit(s)', $count)) ->setCount($count); return $status; } } diff --git a/src/applications/auth/application/PhabricatorApplicationAuth.php b/src/applications/auth/application/PhabricatorApplicationAuth.php index 0ab7503eaa..18819a9410 100644 --- a/src/applications/auth/application/PhabricatorApplicationAuth.php +++ b/src/applications/auth/application/PhabricatorApplicationAuth.php @@ -1,29 +1,29 @@ isLoggedIn()) { $item = new PhabricatorMenuItemView(); $item->setName(pht('Log Out')); - $item->setIcon('logout'); + $item->setIcon('power'); $item->setWorkflow(true); $item->setHref('/logout/'); $item->setSortOrder(2.0); $item->setSelected(($controller instanceof PhabricatorLogoutController)); $items[] = $item; } return $items; } } diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php index 54a998a90c..68c1ed74ff 100644 --- a/src/applications/base/PhabricatorApplication.php +++ b/src/applications/base/PhabricatorApplication.php @@ -1,189 +1,189 @@ pht('Core Applications'), self::GROUP_COMMUNICATION => pht('Communication'), self::GROUP_ORGANIZATION => pht('Organization'), self::GROUP_UTILITIES => pht('Utilities'), self::GROUP_ADMIN => pht('Administration'), self::GROUP_DEVELOPER => pht('Developer Tools'), self::GROUP_MISC => pht('Miscellaneous Applications'), ); } /* -( Application Information )-------------------------------------------- */ public function getName() { return substr(get_class($this), strlen('PhabricatorApplication')); } public function getShortDescription() { return $this->getName().' Application'; } public function isEnabled() { return true; } public function getPHID() { return 'PHID-APPS-'.get_class($this); } public function getTypeaheadURI() { return $this->getBaseURI(); } public function getBaseURI() { return null; } public function getIconURI() { return null; } - public function getAutospriteName() { - return 'default'; + public function getIconName() { + return 'application'; } public function shouldAppearInLaunchView() { return true; } public function getApplicationOrder() { return PHP_INT_MAX; } public function getApplicationGroup() { return self::GROUP_MISC; } public function getTitleGlyph() { return null; } public function getHelpURI() { // TODO: When these applications get created, link to their docs: // // - Drydock // - OAuth Server return null; } public function getEventListeners() { return array(); } /* -( URI Routing )-------------------------------------------------------- */ public function getRoutes() { return array(); } /* -( Fact Integration )--------------------------------------------------- */ public function getFactObjectsForAnalysis() { return array(); } /* -( UI Integration )----------------------------------------------------- */ /** * Render status elements (like "3 Waiting Reviews") for application list * views. These provide a way to alert users to new or pending action items * in applications. * * @param PhabricatorUser Viewing user. * @return list Application status elements. * @task ui */ public function loadStatus(PhabricatorUser $user) { return array(); } /** * You can provide an optional piece of flavor text for the application. This * is currently rendered in application launch views if the application has no * status elements. * * @return string|null Flavor text. * @task ui */ public function getFlavorText() { return null; } /** * Build items for the main menu. * * @param PhabricatorUser The viewing user. * @param AphrontController The current controller. May be null for special * pages like 404, exception handlers, etc. * @return list List of menu items. * @task ui */ public function buildMainMenuItems( PhabricatorUser $user, PhabricatorController $controller = null) { return array(); } /* -( Application Management )--------------------------------------------- */ public static function getAllInstalledApplications() { static $applications; if (empty($applications)) { $classes = id(new PhutilSymbolLoader()) ->setAncestorClass(__CLASS__) ->setConcreteOnly(true) ->selectAndLoadSymbols(); $apps = array(); foreach ($classes as $class) { $app = newv($class['name'], array()); if (!$app->isEnabled()) { continue; } $apps[] = $app; } $applications = $apps; } return $applications; } } diff --git a/src/applications/base/controller/PhabricatorController.php b/src/applications/base/controller/PhabricatorController.php index 48ab19e4fe..446576d89e 100644 --- a/src/applications/base/controller/PhabricatorController.php +++ b/src/applications/base/controller/PhabricatorController.php @@ -1,274 +1,274 @@ shouldAllowPublic()) { return false; } return true; } public function shouldRequireAdmin() { return false; } public function shouldRequireEnabledUser() { return true; } public function shouldAllowPublic() { return false; } public function shouldRequireEmailVerification() { $need_verify = PhabricatorUserEmail::isEmailVerificationRequired(); $need_login = $this->shouldRequireLogin(); return ($need_login && $need_verify); } final public function willBeginExecution() { $request = $this->getRequest(); $user = new PhabricatorUser(); $phusr = $request->getCookie('phusr'); $phsid = $request->getCookie('phsid'); if (strlen($phusr) && $phsid) { $info = queryfx_one( $user->establishConnection('r'), 'SELECT u.* FROM %T u JOIN %T s ON u.phid = s.userPHID AND s.type LIKE %> AND s.sessionKey = %s', $user->getTableName(), 'phabricator_session', 'web-', $phsid); if ($info) { $user->loadFromArray($info); } } $translation = $user->getTranslation(); if ($translation && $translation != PhabricatorEnv::getEnvConfig('translation.provider')) { $translation = newv($translation, array()); PhutilTranslator::getInstance() ->setLanguage($translation->getLanguage()) ->addTranslations($translation->getTranslations()); } $request->setUser($user); if ($user->getIsDisabled() && $this->shouldRequireEnabledUser()) { $disabled_user_controller = new PhabricatorDisabledUserController( $request); return $this->delegateToController($disabled_user_controller); } $event = new PhabricatorEvent( PhabricatorEventType::TYPE_CONTROLLER_CHECKREQUEST, array( 'request' => $request, 'controller' => get_class($this), )); $event->setUser($user); PhutilEventEngine::dispatchEvent($event); $checker_controller = $event->getValue('controller'); if ($checker_controller != get_class($this)) { return $this->delegateToController($checker_controller); } if (PhabricatorEnv::getEnvConfig('darkconsole.enabled')) { if ($user->getConsoleEnabled() || PhabricatorEnv::getEnvConfig('darkconsole.always-on')) { $console = new DarkConsoleCore(); $request->getApplicationConfiguration()->setConsole($console); } } if ($this->shouldRequireLogin() && !$user->getPHID()) { $login_controller = new PhabricatorLoginController($request); return $this->delegateToController($login_controller); } if ($this->shouldRequireEmailVerification()) { $email = $user->loadPrimaryEmail(); if (!$email) { throw new Exception( "No primary email address associated with this account!"); } if (!$email->getIsVerified()) { $verify_controller = new PhabricatorMustVerifyEmailController($request); return $this->delegateToController($verify_controller); } } if ($this->shouldRequireAdmin() && !$user->getIsAdmin()) { return new Aphront403Response(); } } public function buildStandardPageView() { $view = new PhabricatorStandardPageView(); $view->setRequest($this->getRequest()); $view->setController($this); return $view; } public function buildStandardPageResponse($view, array $data) { $page = $this->buildStandardPageView(); $page->appendChild($view); $response = new AphrontWebpageResponse(); $response->setContent($page->render()); return $response; } public function getApplicationURI($path = '') { if (!$this->getCurrentApplication()) { throw new Exception("No application!"); } return $this->getCurrentApplication()->getBaseURI().ltrim($path, '/'); } public function buildApplicationPage($view, array $options) { $page = $this->buildStandardPageView(); $application = $this->getCurrentApplication(); if ($application) { $page->setApplicationName($application->getName()); $page->setTitle(idx($options, 'title')); if ($application->getTitleGlyph()) { $page->setGlyph($application->getTitleGlyph()); } } if (!($view instanceof AphrontSideNavFilterView)) { $nav = new AphrontSideNavFilterView(); $nav->appendChild($view); $view = $nav; } $view->setUser($this->getRequest()->getUser()); $view->setFlexNav(true); $page->appendChild($view); if (idx($options, 'device')) { $page->setDeviceReady(true); $view->appendChild($page->renderFooter()); } $application_menu = $this->buildApplicationMenu(); if ($application_menu) { $page->setApplicationMenu($application_menu); } $response = new AphrontWebpageResponse(); return $response->setContent($page->render()); } public function didProcessRequest($response) { $request = $this->getRequest(); $response->setRequest($request); if ($response instanceof AphrontDialogResponse) { if (!$request->isAjax()) { $view = new PhabricatorStandardPageView(); $view->setRequest($request); $view->setController($this); $view->appendChild( '
'. $response->buildResponseString(). '
'); $response = new AphrontWebpageResponse(); $response->setContent($view->render()); return $response; } else { return id(new AphrontAjaxResponse()) ->setContent(array( 'dialog' => $response->buildResponseString(), )); } } else if ($response instanceof AphrontRedirectResponse) { if ($request->isAjax()) { return id(new AphrontAjaxResponse()) ->setContent( array( 'redirect' => $response->getURI(), )); } } return $response; } protected function getHandle($phid) { if (empty($this->handles[$phid])) { throw new Exception( "Attempting to access handle which wasn't loaded: {$phid}"); } return $this->handles[$phid]; } protected function loadHandles(array $phids) { $phids = array_filter($phids); $this->handles = $this->loadViewerHandles($phids); return $this; } protected function getLoadedHandles() { return $this->handles; } protected function loadViewerHandles(array $phids) { return id(new PhabricatorObjectHandleData($phids)) ->setViewer($this->getRequest()->getUser()) ->loadHandles(); } protected function renderHandlesForPHIDs(array $phids) { $items = array(); foreach ($phids as $phid) { $items[] = $this->getHandle($phid)->renderLink(); } return implode('
', $items); } protected function buildApplicationMenu() { return null; } protected function buildApplicationCrumbs() { $crumbs = array(); $application = $this->getCurrentApplication(); if ($application) { - $sprite = $application->getAutospriteName(); + $sprite = $application->getIconName(); if (!$sprite) { - $sprite = 'default'; + $sprite = 'application'; } $crumbs[] = id(new PhabricatorCrumbView()) ->setHref($this->getApplicationURI()) - ->setIcon('temporary-icon-apps'); + ->setIcon($sprite); } $view = new PhabricatorCrumbsView(); foreach ($crumbs as $crumb) { $view->addCrumb($crumb); } return $view; } } diff --git a/src/applications/conduit/application/PhabricatorApplicationConduit.php b/src/applications/conduit/application/PhabricatorApplicationConduit.php index 2d9c6e22b1..946b2cdd42 100644 --- a/src/applications/conduit/application/PhabricatorApplicationConduit.php +++ b/src/applications/conduit/application/PhabricatorApplicationConduit.php @@ -1,47 +1,47 @@ array( '' => 'PhabricatorConduitListController', 'method/(?P[^/]+)/' => 'PhabricatorConduitConsoleController', 'log/' => 'PhabricatorConduitLogController', 'log/view/(?P[^/]+)/' => 'PhabricatorConduitLogController', 'token/' => 'PhabricatorConduitTokenController', ), '/api/(?P[^/]+)' => 'PhabricatorConduitAPIController', ); } } diff --git a/src/applications/countdown/application/PhabricatorApplicationCountdown.php b/src/applications/countdown/application/PhabricatorApplicationCountdown.php index be92e9a981..fb5392e823 100644 --- a/src/applications/countdown/application/PhabricatorApplicationCountdown.php +++ b/src/applications/countdown/application/PhabricatorApplicationCountdown.php @@ -1,44 +1,44 @@ array( '' => 'PhabricatorCountdownListController', '(?P[1-9]\d*)/' => 'PhabricatorCountdownViewController', 'edit/(?:(?P[1-9]\d*)/)?' => 'PhabricatorCountdownEditController', 'delete/(?P[1-9]\d*)/' => 'PhabricatorCountdownDeleteController' ), ); } } diff --git a/src/applications/daemon/application/PhabricatorApplicationDaemons.php b/src/applications/daemon/application/PhabricatorApplicationDaemons.php index 3464a72013..c4fb917987 100644 --- a/src/applications/daemon/application/PhabricatorApplicationDaemons.php +++ b/src/applications/daemon/application/PhabricatorApplicationDaemons.php @@ -1,48 +1,48 @@ array( 'task/(?P[1-9]\d*)/' => 'PhabricatorWorkerTaskDetailController', 'task/(?P[1-9]\d*)/(?P[^/]+)/' => 'PhabricatorWorkerTaskUpdateController', 'log/' => array( '(?Prunning/)?' => 'PhabricatorDaemonLogListController', 'combined/' => 'PhabricatorDaemonCombinedLogController', '(?P[1-9]\d*)/' => 'PhabricatorDaemonLogViewController', ), 'timeline/' => 'PhabricatorDaemonTimelineConsoleController', 'timeline/(?P[1-9]\d*)/' => 'PhabricatorDaemonTimelineEventController', '' => 'PhabricatorDaemonConsoleController', ), ); } } diff --git a/src/applications/differential/application/PhabricatorApplicationDifferential.php b/src/applications/differential/application/PhabricatorApplicationDifferential.php index d5156570ff..da1b6c371c 100644 --- a/src/applications/differential/application/PhabricatorApplicationDifferential.php +++ b/src/applications/differential/application/PhabricatorApplicationDifferential.php @@ -1,99 +1,99 @@ [1-9]\d*)' => 'DifferentialRevisionViewController', '/differential/' => array( '' => 'DifferentialRevisionListController', 'filter/(?P\w+)/(?:(?P[\w\.-_]+)/)?' => 'DifferentialRevisionListController', 'stats/(?P\w+)/' => 'DifferentialRevisionStatsController', 'diff/' => array( '(?P[1-9]\d*)/' => 'DifferentialDiffViewController', 'create/' => 'DifferentialDiffCreateController', ), 'changeset/' => 'DifferentialChangesetViewController', 'revision/edit/(?:(?P[1-9]\d*)/)?' => 'DifferentialRevisionEditController', 'comment/' => array( 'preview/(?P[1-9]\d*)/' => 'DifferentialCommentPreviewController', 'save/' => 'DifferentialCommentSaveController', 'inline/' => array( 'preview/(?P[1-9]\d*)/' => 'DifferentialInlineCommentPreviewController', 'edit/(?P[1-9]\d*)/' => 'DifferentialInlineCommentEditController', ), ), 'subscribe/(?Padd|rem)/(?P[1-9]\d*)/' => 'DifferentialSubscribeController', ), ); } public function getApplicationGroup() { return self::GROUP_CORE; } public function getApplicationOrder() { return 0.100; } public function loadStatus(PhabricatorUser $user) { $revisions = id(new DifferentialRevisionQuery()) ->withResponsibleUsers(array($user->getPHID())) ->withStatus(DifferentialRevisionQuery::STATUS_OPEN) ->execute(); list($active, $waiting) = DifferentialRevisionQuery::splitResponsible( $revisions, $user->getPHID()); $status = array(); $active = count($active); $type = $active ? PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION : PhabricatorApplicationStatusView::TYPE_EMPTY; $status[] = id(new PhabricatorApplicationStatusView()) ->setType($type) ->setText(pht('%d Review(s) Need Attention', $active)) ->setCount($active); $waiting = count($waiting); $type = $waiting ? PhabricatorApplicationStatusView::TYPE_INFO : PhabricatorApplicationStatusView::TYPE_EMPTY; $status[] = id(new PhabricatorApplicationStatusView()) ->setType($type) ->setText(pht('%d Review(s) Waiting on Others', $waiting)); return $status; } } diff --git a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php index bcbd372f75..7eb4f27ccd 100644 --- a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php +++ b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php @@ -1,80 +1,80 @@ [A-Z]+)(?P[a-z0-9]+)' => 'DiffusionCommitController', '/diffusion/' => array( '' => 'DiffusionHomeController', '(?P[A-Z]+)/' => array( '' => 'DiffusionRepositoryController', 'repository/(?P.*)' => 'DiffusionRepositoryController', 'change/(?P.*)' => 'DiffusionChangeController', 'history/(?P.*)' => 'DiffusionHistoryController', 'browse/(?P.*)' => 'DiffusionBrowseController', 'lastmodified/(?P.*)' => 'DiffusionLastModifiedController', 'diff/' => 'DiffusionDiffController', 'tags/(?P.*)' => 'DiffusionTagListController', 'branches/(?P.*)' => 'DiffusionBranchTableController', 'lint/(?P.*)' => 'DiffusionLintController', 'commit/(?P[a-z0-9]+)/branches/' => 'DiffusionCommitBranchesController', 'commit/(?P[a-z0-9]+)/tags/' => 'DiffusionCommitTagsController', 'commit/(?P[a-z0-9]+)/edit/' => 'DiffusionCommitEditController', ), 'inline/' => array( 'edit/(?P[^/]+)/' => 'DiffusionInlineCommentController', 'preview/(?P[^/]+)/' => 'DiffusionInlineCommentPreviewController', ), 'services/' => array( 'path/' => array( 'complete/' => 'DiffusionPathCompleteController', 'validate/' => 'DiffusionPathValidateController', ), ), 'symbol/(?P[^/]+)/' => 'DiffusionSymbolController', 'external/' => 'DiffusionExternalController', 'lint/' => 'DiffusionLintController', ), ); } public function getApplicationGroup() { return self::GROUP_CORE; } public function getApplicationOrder() { return 0.120; } } diff --git a/src/applications/diviner/application/PhabricatorApplicationDiviner.php b/src/applications/diviner/application/PhabricatorApplicationDiviner.php index 85f48949c3..9d9ae40616 100644 --- a/src/applications/diviner/application/PhabricatorApplicationDiviner.php +++ b/src/applications/diviner/application/PhabricatorApplicationDiviner.php @@ -1,56 +1,56 @@ 'DivinerListController', ); } public function getApplicationGroup() { return self::GROUP_COMMUNICATION; } public function buildMainMenuItems( PhabricatorUser $user, PhabricatorController $controller = null) { $items = array(); $application = null; if ($controller) { $application = $controller->getCurrentApplication(); } if ($application && $application->getHelpURI()) { $item = new PhabricatorMenuItemView(); $item->setName(pht('%s Help', $application->getName())); $item->setIcon('help'); $item->setHref($application->getHelpURI()); $item->setSortOrder(0.1); $items[] = $item; } return $items; } } diff --git a/src/applications/drydock/application/PhabricatorApplicationDrydock.php b/src/applications/drydock/application/PhabricatorApplicationDrydock.php index 2320a2810a..2565736e6f 100644 --- a/src/applications/drydock/application/PhabricatorApplicationDrydock.php +++ b/src/applications/drydock/application/PhabricatorApplicationDrydock.php @@ -1,47 +1,47 @@ array( '' => 'DrydockResourceListController', 'resource/' => array( '' => 'DrydockResourceListController', '(?P[1-9]\d*)/' => 'DrydockResourceViewController', '(?P[1-9]\d*)/close/' => 'DrydockResourceCloseController', ), 'lease/' => array( '' => 'DrydockLeaseListController', '(?P[1-9]\d*)/' => 'DrydockLeaseViewController', ), 'log/' => 'DrydockLogController', ), ); } } diff --git a/src/applications/fact/application/PhabricatorApplicationFact.php b/src/applications/fact/application/PhabricatorApplicationFact.php index 0bebcf33dc..0246f35097 100644 --- a/src/applications/fact/application/PhabricatorApplicationFact.php +++ b/src/applications/fact/application/PhabricatorApplicationFact.php @@ -1,30 +1,30 @@ array( '' => 'PhabricatorFactHomeController', 'chart/' => 'PhabricatorFactChartController', ), ); } } diff --git a/src/applications/files/application/PhabricatorApplicationFiles.php b/src/applications/files/application/PhabricatorApplicationFiles.php index c91e175a43..a895f5b751 100644 --- a/src/applications/files/application/PhabricatorApplicationFiles.php +++ b/src/applications/files/application/PhabricatorApplicationFiles.php @@ -1,48 +1,48 @@ [1-9]\d*)' => 'PhabricatorFileShortcutController', '/file/' => array( '' => 'PhabricatorFileListController', 'filter/(?P\w+)/' => 'PhabricatorFileListController', 'upload/' => 'PhabricatorFileUploadController', 'dropupload/' => 'PhabricatorFileDropUploadController', 'delete/(?P[1-9]\d*)/' => 'PhabricatorFileDeleteController', 'info/(?P[^/]+)/' => 'PhabricatorFileInfoController', 'data/(?P[^/]+)/(?P[^/]+)/.*' => 'PhabricatorFileDataController', 'proxy/' => 'PhabricatorFileProxyController', 'xform/(?P[^/]+)/(?P[^/]+)/(?P[^/]+)/' => 'PhabricatorFileTransformController', ), ); } } diff --git a/src/applications/flag/application/PhabricatorApplicationFlags.php b/src/applications/flag/application/PhabricatorApplicationFlags.php index 7b15339617..ca9dafbb6b 100644 --- a/src/applications/flag/application/PhabricatorApplicationFlags.php +++ b/src/applications/flag/application/PhabricatorApplicationFlags.php @@ -1,58 +1,58 @@ withOwnerPHIDs(array($user->getPHID())) ->execute(); $count = count($flags); $type = $count ? PhabricatorApplicationStatusView::TYPE_INFO : PhabricatorApplicationStatusView::TYPE_EMPTY; $status[] = id(new PhabricatorApplicationStatusView()) ->setType($type) ->setText(pht('%d Flagged Object(s)', $count)) ->setCount($count); return $status; } public function getRoutes() { return array( '/flag/' => array( '' => 'PhabricatorFlagListController', 'view/(?P[^/]+)/' => 'PhabricatorFlagListController', 'edit/(?P[^/]+)/' => 'PhabricatorFlagEditController', 'delete/(?P[1-9]\d*)/' => 'PhabricatorFlagDeleteController', ), ); } } diff --git a/src/applications/herald/application/PhabricatorApplicationHerald.php b/src/applications/herald/application/PhabricatorApplicationHerald.php index 8b456deb7b..7687a906ea 100644 --- a/src/applications/herald/application/PhabricatorApplicationHerald.php +++ b/src/applications/herald/application/PhabricatorApplicationHerald.php @@ -1,52 +1,52 @@ array( '' => 'HeraldHomeController', 'view/(?P[^/]+)/(?:(?P[^/]+)/)?' => 'HeraldHomeController', 'new/(?:(?P[^/]+)/(?:(?P[^/]+)/)?)?' => 'HeraldNewController', 'rule/(?:(?P[1-9]\d*)/)?' => 'HeraldRuleController', 'history/(?:(?P[1-9]\d*)/)?' => 'HeraldRuleEditHistoryController', 'delete/(?P[1-9]\d*)/' => 'HeraldDeleteController', 'test/' => 'HeraldTestConsoleController', 'transcript/' => 'HeraldTranscriptListController', 'transcript/(?P[1-9]\d*)/(?:(?P\w+)/)?' => 'HeraldTranscriptController', ), ); } } diff --git a/src/applications/macro/application/PhabricatorApplicationMacro.php b/src/applications/macro/application/PhabricatorApplicationMacro.php index 191cf08872..972ae0ed4d 100644 --- a/src/applications/macro/application/PhabricatorApplicationMacro.php +++ b/src/applications/macro/application/PhabricatorApplicationMacro.php @@ -1,35 +1,35 @@ array( '' => 'PhabricatorMacroListController', 'edit/(?:(?P[1-9]\d*)/)?' => 'PhabricatorMacroEditController', 'delete/(?P[1-9]\d*)/' => 'PhabricatorMacroDeleteController', ), ); } } diff --git a/src/applications/mailinglists/application/PhabricatorApplicationMailingLists.php b/src/applications/mailinglists/application/PhabricatorApplicationMailingLists.php index b593151cdc..8a562d4d96 100644 --- a/src/applications/mailinglists/application/PhabricatorApplicationMailingLists.php +++ b/src/applications/mailinglists/application/PhabricatorApplicationMailingLists.php @@ -1,39 +1,39 @@ array( '' => 'PhabricatorMailingListsListController', 'edit/(?:(?P[1-9]\d*)/)?' => 'PhabricatorMailingListsEditController', ), ); } public function getTitleGlyph() { return '@'; } } diff --git a/src/applications/maniphest/application/PhabricatorApplicationManiphest.php b/src/applications/maniphest/application/PhabricatorApplicationManiphest.php index 32dc7a7bae..98a7093012 100644 --- a/src/applications/maniphest/application/PhabricatorApplicationManiphest.php +++ b/src/applications/maniphest/application/PhabricatorApplicationManiphest.php @@ -1,105 +1,105 @@ [1-9]\d*)' => 'ManiphestTaskDetailController', '/maniphest/' => array( '' => 'ManiphestTaskListController', 'view/(?P\w+)/' => 'ManiphestTaskListController', 'report/(?:(?P\w+)/)?' => 'ManiphestReportController', 'batch/' => 'ManiphestBatchEditController', 'task/' => array( 'create/' => 'ManiphestTaskEditController', 'edit/(?P[1-9]\d*)/' => 'ManiphestTaskEditController', 'descriptionchange/(?:(?P[1-9]\d*)/)?' => 'ManiphestTaskDescriptionChangeController', 'descriptionpreview/' => 'ManiphestTaskDescriptionPreviewController', ), 'transaction/' => array( 'save/' => 'ManiphestTransactionSaveController', 'preview/(?P[1-9]\d*)/' => 'ManiphestTransactionPreviewController', ), 'export/(?P[^/]+)/' => 'ManiphestExportController', 'subpriority/' => 'ManiphestSubpriorityController', 'custom/' => array( '' => 'ManiphestSavedQueryListController', 'edit/(?:(?P[1-9]\d*)/)?' => 'ManiphestSavedQueryEditController', 'delete/(?P[1-9]\d*)/' => 'ManiphestSavedQueryDeleteController', ), ), ); } public function loadStatus(PhabricatorUser $user) { $status = array(); $query = id(new ManiphestTaskQuery()) ->withStatus(ManiphestTaskQuery::STATUS_OPEN) ->withPriority(ManiphestTaskPriority::PRIORITY_UNBREAK_NOW) ->setLimit(1) ->setCalculateRows(true); $query->execute(); $count = $query->getRowCount(); $type = $count ? PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION : PhabricatorApplicationStatusView::TYPE_EMPTY; $status[] = id(new PhabricatorApplicationStatusView()) ->setType($type) ->setText(pht('%d Unbreak Now Task(s)!', $count)) ->setCount($count); $query = id(new ManiphestTaskQuery()) ->withStatus(ManiphestTaskQuery::STATUS_OPEN) ->withOwners(array($user->getPHID())) ->setLimit(1) ->setCalculateRows(true); $query->execute(); $count = $query->getRowCount(); $type = $count ? PhabricatorApplicationStatusView::TYPE_INFO : PhabricatorApplicationStatusView::TYPE_EMPTY; $status[] = id(new PhabricatorApplicationStatusView()) ->setType($type) ->setText(pht('%d Assigned Task(s)', $count)); return $status; } } diff --git a/src/applications/meta/application/PhabricatorApplicationApplications.php b/src/applications/meta/application/PhabricatorApplicationApplications.php index b5c6a907f8..6d34c59a09 100644 --- a/src/applications/meta/application/PhabricatorApplicationApplications.php +++ b/src/applications/meta/application/PhabricatorApplicationApplications.php @@ -1,34 +1,34 @@ array( '' => 'PhabricatorApplicationsListController' ), ); } public function getTitleGlyph() { return "\xE0\xBC\x84"; } public function shouldAppearInLaunchView() { return false; } } diff --git a/src/applications/meta/view/PhabricatorApplicationLaunchView.php b/src/applications/meta/view/PhabricatorApplicationLaunchView.php index 1e95754b96..fc2a7c251b 100644 --- a/src/applications/meta/view/PhabricatorApplicationLaunchView.php +++ b/src/applications/meta/view/PhabricatorApplicationLaunchView.php @@ -1,104 +1,105 @@ application = $application; return $this; } public function setUser(PhabricatorUser $user) { $this->user = $user; return $this; } public function setApplicationStatus(array $status) { $this->status = $status; return $this; } public function render() { $application = $this->application; require_celerity_resource('phabricator-application-launch-view-css'); + require_celerity_resource('sprite-apps-xlarge-css'); $content = array(); $content[] = phutil_render_tag( 'span', array( 'class' => 'phabricator-application-launch-name', ), phutil_escape_html($application->getName())); $content[] = phutil_render_tag( 'span', array( 'class' => 'phabricator-application-launch-description', ), phutil_escape_html($application->getShortDescription())); $count = 0; $content[] = ''; if ($this->status) { foreach ($this->status as $status) { $count += $status->getCount(); $content[] = $status; } } else { $flavor = $application->getFlavorText(); if ($flavor !== null) { $content[] = phutil_render_tag( 'span', array( 'class' => 'phabricator-application-flavor-text', ), phutil_escape_html($flavor)); } } $content[] = ''; if ($count) { $content[] = phutil_render_tag( 'span', array( 'class' => 'phabricator-application-launch-attention', ), phutil_escape_html($count)); } $classes = array(); $classes[] = 'phabricator-application-launch-icon'; $styles = array(); if ($application->getIconURI()) { $styles[] = 'background-image: url('.$application->getIconURI().')'; } else { - $autosprite = $application->getAutospriteName(); - $classes[] = 'autosprite'; - $classes[] = 'app-'.$autosprite.'-large'; + $icon = $application->getIconName(); + $classes[] = 'sprite-apps-xlarge'; + $classes[] = 'app-'.$icon.'-dark-xlarge'; } $icon = phutil_render_tag( 'span', array( 'class' => implode(' ', $classes), 'style' => nonempty(implode('; ', $styles), null), ), ''); return phutil_render_tag( 'a', array( 'class' => 'phabricator-application-launch-container', 'href' => $application->getBaseURI(), ), $icon. $this->renderSingleView($content)); } } diff --git a/src/applications/metamta/application/PhabricatorApplicationMetaMTA.php b/src/applications/metamta/application/PhabricatorApplicationMetaMTA.php index af68ecd302..9c8acf9863 100644 --- a/src/applications/metamta/application/PhabricatorApplicationMetaMTA.php +++ b/src/applications/metamta/application/PhabricatorApplicationMetaMTA.php @@ -1,42 +1,42 @@ getBaseURI() => array( '' => 'PhabricatorMetaMTAListController', 'send/' => 'PhabricatorMetaMTASendController', 'view/(?P[1-9]\d*)/' => 'PhabricatorMetaMTAViewController', 'receive/' => 'PhabricatorMetaMTAReceiveController', 'received/' => 'PhabricatorMetaMTAReceivedListController', 'sendgrid/' => 'PhabricatorMetaMTASendGridReceiveController', ), ); } public function getTitleGlyph() { return '@'; } } diff --git a/src/applications/owners/application/PhabricatorApplicationOwners.php b/src/applications/owners/application/PhabricatorApplicationOwners.php index 4d67d0f8cb..de9d185d28 100644 --- a/src/applications/owners/application/PhabricatorApplicationOwners.php +++ b/src/applications/owners/application/PhabricatorApplicationOwners.php @@ -1,46 +1,46 @@ array( '' => 'PhabricatorOwnersListController', 'view/(?P[^/]+)/' => 'PhabricatorOwnersListController', 'edit/(?P[1-9]\d*)/' => 'PhabricatorOwnersEditController', 'new/' => 'PhabricatorOwnersEditController', 'package/(?P[1-9]\d*)/' => 'PhabricatorOwnersDetailController', 'delete/(?P[1-9]\d*)/' => 'PhabricatorOwnersDeleteController', ), ); } } diff --git a/src/applications/paste/application/PhabricatorApplicationPaste.php b/src/applications/paste/application/PhabricatorApplicationPaste.php index 87cb9d7980..f7f2531fac 100644 --- a/src/applications/paste/application/PhabricatorApplicationPaste.php +++ b/src/applications/paste/application/PhabricatorApplicationPaste.php @@ -1,33 +1,33 @@ [1-9]\d*)' => 'PhabricatorPasteViewController', '/paste/' => array( '' => 'PhabricatorPasteListController', 'create/' => 'PhabricatorPasteEditController', 'edit/(?P[1-9]\d*)/' => 'PhabricatorPasteEditController', 'filter/(?P\w+)/' => 'PhabricatorPasteListController', ), ); } } diff --git a/src/applications/people/application/PhabricatorApplicationPeople.php b/src/applications/people/application/PhabricatorApplicationPeople.php index 582aeb1fef..ad9754bc1c 100644 --- a/src/applications/people/application/PhabricatorApplicationPeople.php +++ b/src/applications/people/application/PhabricatorApplicationPeople.php @@ -1,80 +1,80 @@ array( '' => 'PhabricatorPeopleListController', 'logs/' => 'PhabricatorPeopleLogsController', 'edit/(?:(?P[1-9]\d*)/(?:(?P\w+)/)?)?' => 'PhabricatorPeopleEditController', 'ldap/' => 'PhabricatorPeopleLdapController', ), '/p/(?P[\w._-]+)/(?:(?P\w+)/)?' => 'PhabricatorPeopleProfileController', '/emailverify/(?P[^/]+)/' => 'PhabricatorEmailVerificationController', ); } public function buildMainMenuItems( PhabricatorUser $user, PhabricatorController $controller = null) { $items = array(); if ($user->isLoggedIn()) { $image = $user->loadProfileImageURI(); $item = new PhabricatorMenuItemView(); $item->setName($user->getUsername()); $item->setHref('/p/'.$user->getUsername().'/'); $item->setSortOrder(0.0); $item->addClass('phabricator-core-menu-item-profile'); $classes = array( 'phabricator-core-menu-icon', 'phabricator-core-menu-profile-image', ); $item->appendChild( phutil_render_tag( 'span', array( 'class' => implode(' ', $classes), 'style' => 'background-image: url('.$image.')', ), '')); $items[] = $item; } return $items; } } diff --git a/src/applications/phame/application/PhabricatorApplicationPhame.php b/src/applications/phame/application/PhabricatorApplicationPhame.php index 28ddb1fff5..2d51f56d96 100644 --- a/src/applications/phame/application/PhabricatorApplicationPhame.php +++ b/src/applications/phame/application/PhabricatorApplicationPhame.php @@ -1,65 +1,65 @@ array( '' => 'PhamePostListController', 'r/(?P\d+)/(?P[^/]+)/(?P.*)' => 'PhameResourceController', 'live/(?P[^/]+)/(?P.*)' => 'PhameBlogLiveController', 'post/' => array( '(?:(?Pdraft|all)/)?' => 'PhamePostListController', 'blogger/(?P[\w\.-_]+)/' => 'PhamePostListController', 'delete/(?P[^/]+)/' => 'PhamePostDeleteController', 'edit/(?:(?P[^/]+)/)?' => 'PhamePostEditController', 'view/(?P\d+)/' => 'PhamePostViewController', 'publish/(?P\d+)/' => 'PhamePostPublishController', 'unpublish/(?P\d+)/' => 'PhamePostUnpublishController', 'notlive/(?P\d+)/' => 'PhamePostNotLiveController', 'preview/' => 'PhamePostPreviewController', 'framed/(?P\d+)/' => 'PhamePostFramedController', 'new/' => 'PhamePostNewController', 'move/(?P\d+)/' => 'PhamePostNewController' ), 'blog/' => array( '(?:(?Puser|all)/)?' => 'PhameBlogListController', 'delete/(?P[^/]+)/' => 'PhameBlogDeleteController', 'edit/(?P[^/]+)/' => 'PhameBlogEditController', 'view/(?P[^/]+)/' => 'PhameBlogViewController', 'new/' => 'PhameBlogEditController', ), 'posts/' => array( '(?P\w+)/(?P.+/)' => 'PhamePostViewController', ), ), ); } } diff --git a/src/applications/phid/application/PhabricatorApplicationPHID.php b/src/applications/phid/application/PhabricatorApplicationPHID.php index 2a982ac229..ad660195ff 100644 --- a/src/applications/phid/application/PhabricatorApplicationPHID.php +++ b/src/applications/phid/application/PhabricatorApplicationPHID.php @@ -1,37 +1,37 @@ array( '' => 'PhabricatorPHIDLookupController', ), ); } } diff --git a/src/applications/pholio/application/PhabricatorApplicationPholio.php b/src/applications/pholio/application/PhabricatorApplicationPholio.php index 742aab9467..707e77eac2 100644 --- a/src/applications/pholio/application/PhabricatorApplicationPholio.php +++ b/src/applications/pholio/application/PhabricatorApplicationPholio.php @@ -1,51 +1,51 @@ [1-9]\d*)' => 'PholioMockViewController', '/pholio/' => array( '' => 'PholioMockListController', 'view/(?P\w+)/' => 'PholioMockListController', 'new/' => 'PholioMockEditController', 'edit/(?P\d+)/' => 'PholioMockEditController', 'comment/(?P\d+)/' => 'PholioMockCommentController', ), ); } } diff --git a/src/applications/phriction/application/PhabricatorApplicationPhriction.php b/src/applications/phriction/application/PhabricatorApplicationPhriction.php index 5e6cb2251b..42b4ec69b5 100644 --- a/src/applications/phriction/application/PhabricatorApplicationPhriction.php +++ b/src/applications/phriction/application/PhabricatorApplicationPhriction.php @@ -1,58 +1,58 @@ /)' => 'PhrictionDocumentController', // Match "/w/x/y/z/" with slug "x/y/z/". '/w/(?P.+/)' => 'PhrictionDocumentController', '/phriction/' => array( '' => 'PhrictionListController', 'list/(?P[^/]+)/' => 'PhrictionListController', 'history(?P/)' => 'PhrictionHistoryController', 'history/(?P.+/)' => 'PhrictionHistoryController', 'edit/(?:(?P[1-9]\d*)/)?' => 'PhrictionEditController', 'delete/(?P[1-9]\d*)/' => 'PhrictionDeleteController', 'new/' => 'PhrictionNewController', 'preview/' => 'PhrictionDocumentPreviewController', 'diff/(?P[1-9]\d*)/' => 'PhrictionDiffController', ), ); } public function getApplicationGroup() { return self::GROUP_COMMUNICATION; } public function getApplicationOrder() { return 0.140; } } diff --git a/src/applications/ponder/application/PhabricatorApplicationPonder.php b/src/applications/ponder/application/PhabricatorApplicationPonder.php index 349d14a4a9..4da5201d9f 100644 --- a/src/applications/ponder/application/PhabricatorApplicationPonder.php +++ b/src/applications/ponder/application/PhabricatorApplicationPonder.php @@ -1,51 +1,51 @@ [1-9]\d*)' => 'PonderQuestionViewController', '/ponder/' => array( '(?Pfeed/)?' => 'PonderFeedController', '(?Pquestions)/' => 'PonderFeedController', '(?Panswers)/' => 'PonderFeedController', 'answer/add/' => 'PonderAnswerSaveController', 'answer/preview/' => 'PonderAnswerPreviewController', 'question/ask/' => 'PonderQuestionAskController', 'question/preview/' => 'PonderQuestionPreviewController', 'comment/add/' => 'PonderCommentSaveController', '(?Pquestion)/vote/' => 'PonderVoteSaveController', '(?Panswer)/vote/' => 'PonderVoteSaveController' )); } } diff --git a/src/applications/project/application/PhabricatorApplicationProject.php b/src/applications/project/application/PhabricatorApplicationProject.php index 4b1541ff02..fce5a09491 100644 --- a/src/applications/project/application/PhabricatorApplicationProject.php +++ b/src/applications/project/application/PhabricatorApplicationProject.php @@ -1,46 +1,46 @@ array( '' => 'PhabricatorProjectListController', 'filter/(?P[^/]+)/' => 'PhabricatorProjectListController', 'edit/(?P[1-9]\d*)/' => 'PhabricatorProjectProfileEditController', 'members/(?P[1-9]\d*)/' => 'PhabricatorProjectMembersEditController', 'view/(?P[1-9]\d*)/(?:(?P\w+)/)?' => 'PhabricatorProjectProfileController', 'create/' => 'PhabricatorProjectCreateController', 'update/(?P[1-9]\d*)/(?P[^/]+)/' => 'PhabricatorProjectUpdateController', ), ); } } diff --git a/src/applications/repository/application/PhabricatorApplicationRepositories.php b/src/applications/repository/application/PhabricatorApplicationRepositories.php index 97baff5ad4..66d0696112 100644 --- a/src/applications/repository/application/PhabricatorApplicationRepositories.php +++ b/src/applications/repository/application/PhabricatorApplicationRepositories.php @@ -1,41 +1,41 @@ array( '' => 'PhabricatorRepositoryListController', 'create/' => 'PhabricatorRepositoryCreateController', 'edit/(?P[1-9]\d*)/(?:(?P\w+)/)?' => 'PhabricatorRepositoryEditController', 'delete/(?P[1-9]\d*)/' => 'PhabricatorRepositoryDeleteController', 'project/edit/(?P[1-9]\d*)/' => 'PhabricatorRepositoryArcanistProjectEditController', 'project/delete/(?P[1-9]\d*)/' => 'PhabricatorRepositoryArcanistProjectDeleteController', ), ); } } diff --git a/src/applications/settings/application/PhabricatorApplicationSettings.php b/src/applications/settings/application/PhabricatorApplicationSettings.php index 1ba4d50599..36abbb47c4 100644 --- a/src/applications/settings/application/PhabricatorApplicationSettings.php +++ b/src/applications/settings/application/PhabricatorApplicationSettings.php @@ -1,50 +1,50 @@ array( '(?:panel/(?P[^/]+)/)?' => 'PhabricatorSettingsMainController', 'adjust/' => 'PhabricatorSettingsAdjustController', ), ); } public function getApplicationGroup() { return self::GROUP_UTILITIES; } public function buildMainMenuItems( PhabricatorUser $user, PhabricatorController $controller = null) { $items = array(); if ($user->isLoggedIn()) { $selected = ($controller instanceof PhabricatorSettingsMainController); $item = new PhabricatorMenuItemView(); $item->setName(pht('Settings')); $item->setIcon('settings'); $item->setSelected($selected); $item->setHref('/settings/'); $item->setSortOrder(0.90); $items[] = $item; } return $items; } } diff --git a/src/applications/slowvote/application/PhabricatorApplicationSlowvote.php b/src/applications/slowvote/application/PhabricatorApplicationSlowvote.php index 017fcb3fd7..2a79292a03 100644 --- a/src/applications/slowvote/application/PhabricatorApplicationSlowvote.php +++ b/src/applications/slowvote/application/PhabricatorApplicationSlowvote.php @@ -1,43 +1,43 @@ [1-9]\d*)' => 'PhabricatorSlowvotePollController', '/vote/' => array( '(?:view/(?P\w+)/)?' => 'PhabricatorSlowvoteListController', 'create/' => 'PhabricatorSlowvoteCreateController', ), ); } } diff --git a/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php b/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php index dcdf7c35af..e74c1138ad 100644 --- a/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php +++ b/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php @@ -1,42 +1,42 @@ array( '' => 'PhabricatorUIExampleRenderController', 'view/(?P[^/]+)/' => 'PhabricatorUIExampleRenderController', ), ); } } diff --git a/src/applications/xhpastview/application/PhabricatorApplicationPHPAST.php b/src/applications/xhpastview/application/PhabricatorApplicationPHPAST.php index f4ee404cee..37b6258601 100644 --- a/src/applications/xhpastview/application/PhabricatorApplicationPHPAST.php +++ b/src/applications/xhpastview/application/PhabricatorApplicationPHPAST.php @@ -1,43 +1,43 @@ array( '' => 'PhabricatorXHPASTViewRunController', 'view/(?P[1-9]\d*)/' => 'PhabricatorXHPASTViewFrameController', 'frameset/(?P[1-9]\d*)/' => 'PhabricatorXHPASTViewFramesetController', 'input/(?P[1-9]\d*)/' => 'PhabricatorXHPASTViewInputController', 'tree/(?P[1-9]\d*)/' => 'PhabricatorXHPASTViewTreeController', 'stream/(?P[1-9]\d*)/' => 'PhabricatorXHPASTViewStreamController', ), ); } } diff --git a/src/infrastructure/celerity/CeleritySpriteGenerator.php b/src/infrastructure/celerity/CeleritySpriteGenerator.php index fe2033efae..71157b08a3 100644 --- a/src/infrastructure/celerity/CeleritySpriteGenerator.php +++ b/src/infrastructure/celerity/CeleritySpriteGenerator.php @@ -1,289 +1,410 @@ 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 = $this->buildSheet('icon', true); $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', ), 'eye' => array( 'x' => 24, 'y' => 20, 'css' => '.menu-icon-eye', ), 'app' => array( 'x' => 24, 'y' => 20, 'css' => '.menu-icon-app', ), ); $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 = 'menu_'.$scale_name.'/'.$name.'.png'; $path = $this->getPath($path); $sprite->setSourceFile($path, $scale); } $sprites[] = $sprite; } - $sheet = $this->buildSheet('menu'); + $sheet = $this->buildSheet('menu', true); $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', 'dark-menu-label' => ', .phabricator-dark-menu .phabricator-menu-item-type-label', ); $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', + false, PhutilSpriteSheet::TYPE_REPEAT_X, ', button, a.button, a.button:visited, input.inputsubmit, '. '.phabricator-dark-menu .phabricator-menu-item-type-label'); foreach ($sprites as $sprite) { $sheet->addSprite($sprite); } return $sheet; } + public function buildAppsSheet() { + return $this->buildAppsSheetVariant(1); + } + + public function buildAppsLargeSheet() { + return $this->buildAppsSheetVariant(2); + } + + public function buildAppsXLargeSheet() { + return $this->buildAppsSheetVariant(3); + } + + private function buildAppsSheetVariant($variant) { + + if ($variant == 1) { + $scales = array( + '1x' => 1, + '2x' => 2, + ); + $variant_name = 'apps'; + $variant_short = ''; + $size_x = 14; + $size_y = 14; + + $colors = array( + 'dark' => 'dark', + ); + } else if ($variant == 2) { + $scales = array( + '2x' => 1, + '4x' => 2, + ); + $variant_name = 'apps-large'; + $variant_short = '-large'; + $size_x = 28; + $size_y = 28; + + $colors = array( + 'light' => 'lb', + 'dark' => 'dark', + 'blue' => 'blue', + 'glow' => 'glow', + ); + } else { + $scales = array( + '4x' => 1, + ); + $variant_name = 'apps-xlarge'; + $variant_short = '-xlarge'; + $size_x = 56; + $size_y = 56; + + $colors = array( + 'dark' => 'dark', + /* + + TODO: These are available but not currently used. + + 'blue' => 'blue', + 'light' => 'lb', + 'glow' => 'glow', + */ + ); + } + + + $apps = $this->getDirectoryList('apps_dark_1x'); + + $template = id(new PhutilSprite()) + ->setSourceSize($size_x, $size_y); + + $sprites = array(); + foreach ($apps as $app) { + foreach ($colors as $color => $color_path) { + + $css = '.app-'.$app.'-'.$color.$variant_short; + if ($color == 'blue' && $variant_name == 'apps-large') { + $css .= ', .phabricator-crumb-view:hover .app-'.$app.'-dark-large'; + } + if ($color == 'glow' && $variant_name == 'apps-large') { + $css .= ', .device-desktop .phabricator-dark-menu a:hover '. + '.app-'.$app.'-light-large'; + } + + $sprite = id(clone $template) + ->setName('app-'.$app.'-'.$color.$variant_short) + ->setTargetCSS($css); + + foreach ($scales as $scale_name => $scale) { + $path = $this->getPath( + 'apps_'.$color_path.'_'.$scale_name.'/'.$app.'.png'); + $sprite->setSourceFile($path, $scale); + } + + $sprites[] = $sprite; + } + } + + $sheet = $this->buildSheet($variant_name, count($scales) > 1); + $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; } 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, $type = null, $extra_css = '') { + private function buildSheet( + $name, + $has_retina, + $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; } + $retina_rules = null; + if ($has_retina) { + $retina_rules = <<setSheetType($type); $sheet->setCSSHeader(<<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, + 'class' => 'phabricator-crumb-icon '. + 'sprite-apps-large app-'.$this->icon.'-dark', ), ''); } $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' => '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/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php index eca3dd00db..00ff7fb5e6 100644 --- a/src/view/page/PhabricatorStandardPageView.php +++ b/src/view/page/PhabricatorStandardPageView.php @@ -1,431 +1,430 @@ applicationMenu = $application_menu; return $this; } public function getApplicationMenu() { return $this->applicationMenu; } public function setApplicationName($application_name) { $this->applicationName = $application_name; return $this; } public function setDisableConsole($disable) { $this->disableConsole = $disable; return $this; } public function getApplicationName() { return $this->applicationName; } public function setBaseURI($base_uri) { $this->baseURI = $base_uri; return $this; } public function getBaseURI() { return $this->baseURI; } public function setShowChrome($show_chrome) { $this->showChrome = $show_chrome; return $this; } public function getShowChrome() { return $this->showChrome; } public function setSearchDefaultScope($search_default_scope) { $this->searchDefaultScope = $search_default_scope; return $this; } public function getSearchDefaultScope() { return $this->searchDefaultScope; } public function appendPageObjects(array $objs) { foreach ($objs as $obj) { $this->pageObjects[] = $obj; } } public function getTitle() { $use_glyph = true; $request = $this->getRequest(); if ($request) { $user = $request->getUser(); if ($user && $user->loadPreferences()->getPreference( PhabricatorUserPreferences::PREFERENCE_TITLES) !== 'glyph') { $use_glyph = false; } } return ($use_glyph ? $this->getGlyph() : '['.$this->getApplicationName().']'). ' '.parent::getTitle(); } protected function willRenderPage() { parent::willRenderPage(); if (!$this->getRequest()) { throw new Exception( "You must set the Request to render a PhabricatorStandardPageView."); } $console = $this->getConsole(); require_celerity_resource('phabricator-core-css'); - require_celerity_resource('autosprite-css'); require_celerity_resource('phabricator-core-buttons-css'); require_celerity_resource('sprite-gradient-css'); require_celerity_resource('phabricator-standard-page-view'); Javelin::initBehavior('workflow', array()); $current_token = null; $request = $this->getRequest(); if ($request) { $user = $request->getUser(); if ($user) { $current_token = $user->getCSRFToken(); $download_form = phabricator_render_form_magic($user); $default_img_uri = PhabricatorEnv::getCDNURI( '/rsrc/image/icon/fatcow/document_black.png' ); Javelin::initBehavior( 'lightbox-attachments', array( 'defaultImageUri' => $default_img_uri, 'downloadForm' => $download_form, )); } } Javelin::initBehavior('toggle-class', array()); Javelin::initBehavior('konami', array()); Javelin::initBehavior( 'refresh-csrf', array( 'tokenName' => AphrontRequest::getCSRFTokenName(), 'header' => AphrontRequest::getCSRFHeaderName(), 'current' => $current_token, )); Javelin::initBehavior('device', array('id' => 'base-page')); if ($console) { require_celerity_resource('aphront-dark-console-css'); Javelin::initBehavior( 'dark-console', array( 'uri' => '/~/', 'request_uri' => $request ? (string) $request->getRequestURI() : '/', )); // Change this to initBehavior when there is some behavior to initialize require_celerity_resource('javelin-behavior-error-log'); } $menu = id(new PhabricatorMainMenuView()) ->setUser($request->getUser()) ->setController($this->getController()) ->setDefaultSearchScope($this->getSearchDefaultScope()); if ($this->getApplicationMenu()) { $menu->setApplicationMenu($this->getApplicationMenu()); } $this->menuContent = $menu->render(); } protected function getHead() { $monospaced = PhabricatorEnv::getEnvConfig('style.monospace'); $request = $this->getRequest(); if ($request) { $user = $request->getUser(); if ($user) { $monospaced = nonempty( $user->loadPreferences()->getPreference( PhabricatorUserPreferences::PREFERENCE_MONOSPACED), $monospaced); } } $response = CelerityAPI::getStaticResourceResponse(); $head = array( parent::getHead(), '', $response->renderSingleResource('javelin-magical-init'), ); return implode("\n", $head); } public function setGlyph($glyph) { $this->glyph = $glyph; return $this; } public function getGlyph() { return $this->glyph; } protected function willSendResponse($response) { $response = parent::willSendResponse($response); $console = $this->getRequest()->getApplicationConfiguration()->getConsole(); if ($console) { $response = str_replace( '', $console->render($this->getRequest()), $response); } return $response; } protected function getBody() { $console = $this->getConsole(); $login_stuff = null; $request = $this->getRequest(); $user = null; if ($request) { $user = $request->getUser(); // NOTE: user may not be set here if we caught an exception early // in the execution workflow. if ($user && $user->getPHID()) { $login_stuff = phutil_render_tag( 'a', array( 'href' => '/p/'.$user->getUsername().'/', ), phutil_escape_html($user->getUsername())). ' · '. '
Settings'. ' · '. phabricator_render_form( $user, array( 'action' => '/search/', 'method' => 'post', 'style' => 'display: inline', ), ''. ' in '. AphrontFormSelectControl::renderSelectTag( $this->getSearchDefaultScope(), PhabricatorSearchScope::getScopeOptions(), array( 'name' => 'scope', )). ' '. ''); } } $header_chrome = null; $footer_chrome = null; if ($this->getShowChrome()) { $header_chrome = $this->menuContent; if (!$this->getDeviceReady()) { $footer_chrome = $this->renderFooter(); } } $developer_warning = null; if (PhabricatorEnv::getEnvConfig('phabricator.show-error-callout') && DarkConsoleErrorLogPluginAPI::getErrors()) { $developer_warning = '
'. 'This page raised PHP errors. Find them in DarkConsole '. 'or the error log.'. '
'; } $agent = idx($_SERVER, 'HTTP_USER_AGENT'); // Try to guess the device resolution based on UA strings to avoid a flash // of incorrectly-styled content. $device_guess = 'device-desktop'; if (preg_match('@iPhone|iPod|(Android.*Chrome/[.0-9]* Mobile)@', $agent)) { $device_guess = 'device-phone device'; } else if (preg_match('@iPad|(Android.*Chrome/)@', $agent)) { $device_guess = 'device-tablet device'; } $classes = array( 'phabricator-standard-page', $device_guess, ); $classes = implode(' ', $classes); return phutil_render_tag( 'div', array( 'id' => 'base-page', 'class' => $classes, ), $header_chrome. '
'. ($console ? '' : null). $developer_warning. parent::getBody(). '
'. '
'). $footer_chrome; } protected function getTail() { $request = $this->getRequest(); $user = $request->getUser(); $container = null; if (PhabricatorEnv::getEnvConfig('notification.enabled') && $user->isLoggedIn()) { $aphlict_object_id = celerity_generate_unique_node_id(); $aphlict_container_id = celerity_generate_unique_node_id(); $client_uri = PhabricatorEnv::getEnvConfig('notification.client-uri'); $client_uri = new PhutilURI($client_uri); if ($client_uri->getDomain() == 'localhost') { $this_host = $this->getRequest()->getHost(); $this_host = new PhutilURI('http://'.$this_host.'/'); $client_uri->setDomain($this_host->getDomain()); } $enable_debug = PhabricatorEnv::getEnvConfig('notification.debug'); Javelin::initBehavior( 'aphlict-listen', array( 'id' => $aphlict_object_id, 'containerID' => $aphlict_container_id, 'server' => $client_uri->getDomain(), 'port' => $client_uri->getPort(), 'debug' => $enable_debug, 'pageObjects' => array_fill_keys($this->pageObjects, true), )); $container = phutil_render_tag( 'div', array( 'id' => $aphlict_container_id, 'style' => 'position: absolute; width: 0; height: 0;', ), ''); } $response = CelerityAPI::getStaticResourceResponse(); $tail = array( parent::getTail(), $container, $response->renderHTMLFooter(), ); return implode("\n", $tail); } protected function getBodyClasses() { $classes = array(); if (!$this->getShowChrome()) { $classes[] = 'phabricator-chromeless-page'; } return implode(' ', $classes); } private function getConsole() { if ($this->disableConsole) { return null; } return $this->getRequest()->getApplicationConfiguration()->getConsole(); } public function renderFooter() { $console = $this->getConsole(); $foot_links = array(); $version = PhabricatorEnv::getEnvConfig('phabricator.version'); $foot_links[] = 'Phabricator '. phutil_escape_html($version); $foot_links[] = ''. 'Report a Bug'. ''; if (PhabricatorEnv::getEnvConfig('darkconsole.enabled') && !PhabricatorEnv::getEnvConfig('darkconsole.always-on')) { if ($console) { $link = javelin_render_tag( 'a', array( 'href' => '/~/', 'sigil' => 'workflow', ), 'Disable DarkConsole'); } else { $link = javelin_render_tag( 'a', array( 'href' => '/~/', 'sigil' => 'workflow', ), 'Enable DarkConsole'); } $foot_links[] = $link; } $foot_links = implode(' · ', $foot_links); return '
'. $foot_links. '
'; } } diff --git a/src/view/page/menu/PhabricatorMainMenuView.php b/src/view/page/menu/PhabricatorMainMenuView.php index f9059dc28f..7ecbfb17a3 100644 --- a/src/view/page/menu/PhabricatorMainMenuView.php +++ b/src/view/page/menu/PhabricatorMainMenuView.php @@ -1,385 +1,390 @@ applicationMenu = $application_menu; return $this; } public function getApplicationMenu() { return $this->applicationMenu; } public function setController(PhabricatorController $controller) { $this->controller = $controller; return $this; } public function getController() { return $this->controller; } public function setDefaultSearchScope($default_search_scope) { $this->defaultSearchScope = $default_search_scope; return $this; } public function getDefaultSearchScope() { return $this->defaultSearchScope; } public function setUser(PhabricatorUser $user) { $this->user = $user; return $this; } public function getUser() { return $this->user; } public function render() { $user = $this->user; require_celerity_resource('phabricator-main-menu-view'); $header_id = celerity_generate_unique_node_id(); $menus = array(); $group = new PhabricatorMainMenuGroupView(); $group->addClass('phabricator-main-menu-group-logo'); $group->setCollapsible(false); $group->appendChild( phutil_render_tag( 'a', array( 'class' => 'phabricator-main-menu-logo', 'href' => '/', ), '')); if (PhabricatorEnv::getEnvConfig('notification.enabled') && $user->isLoggedIn()) { list($menu, $dropdown) = $this->renderNotificationMenu(); $group->appendChild($menu); $menus[] = $dropdown; } $group->appendChild( javelin_render_tag( 'a', array( 'class' => 'phabricator-main-menu-expand-button', 'sigil' => 'jx-toggle-class', 'meta' => array( 'map' => array( $header_id => 'phabricator-core-menu-expand', ), ), ), '')); $logo = $group->render(); $phabricator_menu = $this->renderPhabricatorMenu(); // $menus[] = $this->renderApplicationMenu(); $actions = ''; $application_menu = $this->getApplicationMenu(); if ($application_menu) { $application_menu->addClass('phabricator-dark-menu'); $application_menu->addClass('phabricator-application-menu'); } return phutil_render_tag( 'div', array( 'class' => 'phabricator-main-menu', 'id' => $header_id, ), self::renderSingleView( array( $this->renderPhabricatorMenuButton($header_id), $application_menu ? $this->renderApplicationMenuButton($header_id) : null, $this->renderPhabricatorLogo(), $alerts, $phabricator_menu, $application_menu, ))). self::renderSingleView($menus); } private function renderSearch() { $user = $this->user; $result = null; $keyboard_config = array( 'helpURI' => '/help/keyboardshortcut/', ); if ($user->isLoggedIn()) { $search = new PhabricatorMainMenuSearchView(); $search->setUser($user); $search->setScope($this->getDefaultSearchScope()); $result = $search; $pref_shortcut = PhabricatorUserPreferences::PREFERENCE_SEARCH_SHORTCUT; if ($user->loadPreferences()->getPreference($pref_shortcut, true)) { $keyboard_config['searchID'] = $search->getID(); } } Javelin::initBehavior('phabricator-keyboard-shortcuts', $keyboard_config); if ($result) { $result = id(new PhabricatorMenuItemView()) ->addClass('phabricator-main-menu-search') ->appendChild($result); } return $result; } private function renderPhabricatorMenuButton($header_id) { return javelin_render_tag( 'a', array( 'class' => 'phabricator-main-menu-expand-button '. 'phabricator-expand-core-menu', 'sigil' => 'jx-toggle-class', 'meta' => array( 'map' => array( $header_id => 'phabricator-core-menu-expanded', ), ), ), phutil_render_tag( 'span', array( 'class' => 'phabricator-menu-button-icon sprite-menu menu-icon-eye', ), '')); } public function renderApplicationMenuButton($header_id) { return javelin_render_tag( 'a', array( 'class' => 'phabricator-main-menu-expand-button '. 'phabricator-expand-application-menu', 'sigil' => 'jx-toggle-class', 'meta' => array( 'map' => array( $header_id => 'phabricator-application-menu-expanded', ), ), ), phutil_render_tag( 'span', array( 'class' => 'phabricator-menu-button-icon sprite-menu menu-icon-app', ), '')); } private function renderPhabricatorMenu() { $user = $this->getUser(); $controller = $this->getController(); $applications = PhabricatorApplication::getAllInstalledApplications(); $applications = msort($applications, 'getName'); $core = array(); $more = array(); $actions = array(); + require_celerity_resource('sprite-apps-large-css'); + $group_core = PhabricatorApplication::GROUP_CORE; foreach ($applications as $application) { if ($application->shouldAppearInLaunchView()) { + $icon = $application->getIconName().'-light-large'; + $item = id(new PhabricatorMenuItemView()) ->setName($application->getName()) - ->setHref($application->getBaseURI()); + ->setHref($application->getBaseURI()) + ->appendChild($this->renderMenuIcon($icon)); if ($application->getApplicationGroup() == $group_core) { $core[] = $item; } else { $more[] = $item; } } $app_actions = $application->buildMainMenuItems($user, $controller); foreach ($app_actions as $action) { $actions[] = $action; } } $view = new PhabricatorMenuView(); $view->addClass('phabricator-dark-menu'); $view->addClass('phabricator-core-menu'); $search = $this->renderSearch(); $view->appendChild($search); $view ->newLabel(pht('Home')) ->addClass('phabricator-core-item-device'); $view->addMenuItem( id(new PhabricatorMenuItemView()) ->addClass('phabricator-core-item-device') ->setName(pht('Phabricator Home')) - ->setHref('/')); + ->setHref('/') + ->appendChild($this->renderMenuIcon('logo-light-large'))); if ($controller->getCurrentApplication()) { $application = $controller->getCurrentApplication(); + $icon = $application->getIconName().'-light-large'; $view->addMenuItem( id(new PhabricatorMenuItemView()) ->addClass('phabricator-core-item-device') ->setName(pht('%s Home', $application->getName())) + ->appendChild($this->renderMenuIcon($icon)) ->setHref($controller->getApplicationURI())); } if ($core) { $view->addMenuItem( id(new PhabricatorMenuItemView()) ->addClass('phabricator-core-item-device') ->setType(PhabricatorMenuItemView::TYPE_LABEL) ->setName(pht('Core Applications'))); foreach ($core as $item) { $item->addClass('phabricator-core-item-device'); $view->addMenuItem($item); } } if ($actions) { $actions = msort($actions, 'getSortOrder'); $view->addMenuItem( id(new PhabricatorMenuItemView()) ->addClass('phabricator-core-item-device') ->setType(PhabricatorMenuItemView::TYPE_LABEL) ->setName(pht('Actions'))); foreach ($actions as $action) { $icon = $action->getIcon(); if ($icon) { - $classes = array( - 'phabricator-core-menu-icon', - 'autosprite', - ); - if ($action->getSelected()) { - $classes[] = 'main-menu-item-icon-'.$icon.'-selected'; + $action->appendChild($this->renderMenuIcon($icon.'-blue-large')); } else { - $classes[] = 'main-menu-item-icon-'.$icon; + $action->appendChild($this->renderMenuIcon($icon.'-light-large')); } - - $action->appendChild( - phutil_render_tag( - 'span', - array( - 'class' => implode(' ', $classes), - ), - '')); } $view->addMenuItem($action); } } if ($more) { $view->addMenuItem( id(new PhabricatorMenuItemView()) ->addClass('phabricator-core-item-device') ->setType(PhabricatorMenuItemView::TYPE_LABEL) ->setName(pht('More Applications'))); foreach ($more as $item) { $item->addClass('phabricator-core-item-device'); $view->addMenuItem($item); } } return $view; } private function renderNotificationMenu() { $user = $this->user; require_celerity_resource('phabricator-notification-css'); require_celerity_resource('phabricator-notification-menu-css'); require_celerity_resource('sprite-menu-css'); $count_id = celerity_generate_unique_node_id(); $dropdown_id = celerity_generate_unique_node_id(); $bubble_id = celerity_generate_unique_node_id(); $count_number = id(new PhabricatorFeedStoryNotification()) ->countUnread($user); if ($count_number > 999) { $count_number = "\xE2\x88\x9E"; } $count_tag = phutil_render_tag( 'span', array( 'id' => $count_id, 'class' => 'phabricator-main-menu-alert-count' ), phutil_escape_html($count_number)); $icon_tag = phutil_render_tag( 'span', array( 'class' => 'sprite-menu phabricator-main-menu-alert-icon', ), ''); $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(' ', $container_classes), 'id' => $bubble_id, ), $icon_tag.$count_tag); Javelin::initBehavior( 'aphlict-dropdown', array( 'bubbleID' => $bubble_id, 'countID' => $count_id, 'dropdownID' => $dropdown_id, )); $notification_dropdown = javelin_render_tag( 'div', array( 'id' => $dropdown_id, 'class' => 'phabricator-notification-menu', 'sigil' => 'phabricator-notification-menu', 'style' => 'display: none;', ), ''); return array($bubble_tag, $notification_dropdown); } + private function renderMenuIcon($name) { + return phutil_render_tag( + 'span', + array( + 'class' => 'phabricator-core-menu-icon '. + 'sprite-apps-large app-'.$name, + ), + ''); + } + } diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css index 190462c1d9..8d9409385a 100644 --- a/webroot/rsrc/css/application/base/main-menu-view.css +++ b/webroot/rsrc/css/application/base/main-menu-view.css @@ -1,435 +1,435 @@ <<