1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-22 14:52:41 +01:00

Generate an icon sprite map with new sprites and 2x retina graphics

Summary:
  - The filesystem is now the authority for which sprites are available. If you add new icons, the generation process will pick them up.
  - I broke out icon generation and added retina support. App icon generation still uses the old method.
  - Update ActionList and RemarkupControl to use the new sheet.
  - Use white icons on hover.
  - Also fixed a couple of minor issues with some stuff in Firefox/Chrome.

Test Plan:
{F25750}

{F25751}

{F25752}

Reviewers: chad

Reviewed By: chad

CC: aran

Maniphest Tasks: T2013

Differential Revision: https://secure.phabricator.com/D4027
This commit is contained in:
epriestley 2012-11-23 16:35:39 -08:00
parent f8e6240b9d
commit 6c88c76cac
13 changed files with 1243 additions and 93 deletions

View file

@ -0,0 +1,196 @@
{
"sprites" : [
"action-arrow_left",
"action-arrow_left-grey",
"action-arrow_left-white",
"action-arrow_right",
"action-arrow_right-grey",
"action-arrow_right-white",
"action-attach",
"action-attach-grey",
"action-attach-white",
"action-blame",
"action-blame-grey",
"action-blame-white",
"action-check",
"action-check-grey",
"action-check-white",
"action-comment",
"action-comment-grey",
"action-comment-white",
"action-computer",
"action-computer-grey",
"action-computer-white",
"action-create",
"action-create-grey",
"action-create-white",
"action-delete",
"action-delete-grey",
"action-delete-white",
"action-disable",
"action-disable-grey",
"action-disable-white",
"action-dislike",
"action-dislike-grey",
"action-dislike-white",
"action-download",
"action-download-grey",
"action-download-white",
"action-edit",
"action-edit-grey",
"action-edit-white",
"action-enable",
"action-enable-grey",
"action-enable-white",
"action-file",
"action-file-grey",
"action-file-white",
"action-flag",
"action-flag-0",
"action-flag-0-grey",
"action-flag-0-white",
"action-flag-1",
"action-flag-1-grey",
"action-flag-1-white",
"action-flag-2",
"action-flag-2-grey",
"action-flag-2-white",
"action-flag-3",
"action-flag-3-grey",
"action-flag-3-white",
"action-flag-4",
"action-flag-4-grey",
"action-flag-4-white",
"action-flag-5",
"action-flag-5-grey",
"action-flag-5-white",
"action-flag-6",
"action-flag-6-grey",
"action-flag-6-white",
"action-flag-7",
"action-flag-7-grey",
"action-flag-7-white",
"action-flag-ghost",
"action-flag-ghost-grey",
"action-flag-ghost-white",
"action-flag-grey",
"action-flag-white",
"action-folder-open",
"action-folder-open-grey",
"action-folder-open-white",
"action-fork",
"action-fork-grey",
"action-fork-white",
"action-herald",
"action-herald-grey",
"action-herald-white",
"action-highlight",
"action-highlight-grey",
"action-highlight-white",
"action-history",
"action-history-grey",
"action-history-white",
"action-image",
"action-image-grey",
"action-image-white",
"action-like",
"action-like-grey",
"action-like-white",
"action-link",
"action-link-grey",
"action-link-white",
"action-lint-info",
"action-lint-info-grey",
"action-lint-info-white",
"action-lint-ok",
"action-lint-ok-grey",
"action-lint-ok-white",
"action-lint-warning",
"action-lint-warning-grey",
"action-lint-warning-white",
"action-lock",
"action-lock-grey",
"action-lock-white",
"action-love",
"action-love-grey",
"action-love-white",
"action-merge",
"action-merge-grey",
"action-merge-white",
"action-message",
"action-message-grey",
"action-message-white",
"action-meta-mta",
"action-meta-mta-grey",
"action-meta-mta-white",
"action-move",
"action-move-grey",
"action-move-white",
"action-new",
"action-new-grey",
"action-new-white",
"action-perflab",
"action-perflab-grey",
"action-perflab-white",
"action-preview",
"action-preview-grey",
"action-preview-white",
"action-refresh",
"action-refresh-grey",
"action-refresh-white",
"action-remove",
"action-remove-grey",
"action-remove-white",
"action-search",
"action-search-grey",
"action-search-white",
"action-start-sandcastle",
"action-start-sandcastle-grey",
"action-start-sandcastle-white",
"action-subscribe-add",
"action-subscribe-add-grey",
"action-subscribe-add-white",
"action-subscribe-auto",
"action-subscribe-auto-grey",
"action-subscribe-auto-white",
"action-subscribe-delete",
"action-subscribe-delete-grey",
"action-subscribe-delete-white",
"action-tag",
"action-tag-grey",
"action-tag-white",
"action-transcript",
"action-transcript-grey",
"action-transcript-white",
"action-undo",
"action-undo-grey",
"action-undo-white",
"action-unlock",
"action-unlock-grey",
"action-unlock-white",
"action-unmerge",
"action-unmerge-grey",
"action-unmerge-white",
"action-unpublish",
"action-unpublish-grey",
"action-unpublish-white",
"action-warning",
"action-warning-grey",
"action-warning-white",
"action-world",
"action-world-grey",
"action-world-white",
"remarkup-assist-text_b",
"remarkup-assist-text_code",
"remarkup-assist-text_help",
"remarkup-assist-text_i",
"remarkup-assist-text_image",
"remarkup-assist-text_larger",
"remarkup-assist-text_meme",
"remarkup-assist-text_ol",
"remarkup-assist-text_table",
"remarkup-assist-text_tag",
"remarkup-assist-text_tt",
"remarkup-assist-text_ul"
]
}

View file

@ -27,7 +27,8 @@ if (!$srcroot) {
"You must specify a source directory with '--source'."); "You must specify a source directory with '--source'.");
} }
$webroot = dirname(phutil_get_library_root('phabricator')).'/webroot/rsrc'; $root = dirname(phutil_get_library_root('phabricator'));
$webroot = $root.'/webroot/rsrc';
$webroot = Filesystem::readablePath($webroot); $webroot = Filesystem::readablePath($webroot);
function glx($x) { function glx($x) {
@ -192,10 +193,12 @@ $sheet->generateCSS($webroot.'/css/autosprite.css');
$generator = new CeleritySpriteGenerator(); $generator = new CeleritySpriteGenerator();
$icon_sheet = $generator->buildIconSheet(); $generator
$icon_sheet->setScales(array(1, 2)); ->buildIconSheet()
$icon_sheet->generateImage($webroot.'/image/sprite-icon.png', 1); ->setScales(array(1, 2))
$icon_sheet->generateImage($webroot.'/image/sprite-icon-X2.png', 2); ->generateImage($webroot.'/image/sprite-icon.png', 1)
$icon_sheet->generateCSS($webroot.'/css/sprite-icon.css'); ->generateImage($webroot.'/image/sprite-icon-X2.png', 2)
->generateCSS($webroot.'/css/sprite-icon.css')
->generateManifest($root.'/resources/sprite/manifest/icon.json');
echo "Done.\n"; echo "Done.\n";

View file

@ -86,6 +86,7 @@ $package_spec = array(
'phabricator-flag-css', 'phabricator-flag-css',
'aphront-error-view-css', 'aphront-error-view-css',
'autosprite-css', 'autosprite-css',
'sprite-icon-css',
'phabricator-main-menu-view', 'phabricator-main-menu-view',
'phabricator-notification-css', 'phabricator-notification-css',
'phabricator-notification-menu-css', 'phabricator-notification-menu-css',

View file

@ -58,8 +58,8 @@ celerity_register_resource_map(array(
), ),
'/rsrc/image/autosprite.png' => '/rsrc/image/autosprite.png' =>
array( array(
'hash' => 'bc9479b2a610a3ecee18dc88744c4ce6', 'hash' => '0b1fd04e70272fe946dff765237d132a',
'uri' => '/res/bc9479b2/rsrc/image/autosprite.png', 'uri' => '/res/0b1fd04e/rsrc/image/autosprite.png',
'disk' => '/rsrc/image/autosprite.png', 'disk' => '/rsrc/image/autosprite.png',
'type' => 'png', 'type' => 'png',
), ),
@ -539,6 +539,20 @@ celerity_register_resource_map(array(
'disk' => '/rsrc/image/search.png', 'disk' => '/rsrc/image/search.png',
'type' => 'png', 'type' => 'png',
), ),
'/rsrc/image/sprite-icon-X2.png' =>
array(
'hash' => '2ed96382cab2930fb799a39e3f66f4f1',
'uri' => '/res/2ed96382/rsrc/image/sprite-icon-X2.png',
'disk' => '/rsrc/image/sprite-icon-X2.png',
'type' => 'png',
),
'/rsrc/image/sprite-icon.png' =>
array(
'hash' => '3ad6f08b9770c3150a420d0ab67f6282',
'uri' => '/res/3ad6f08b/rsrc/image/sprite-icon.png',
'disk' => '/rsrc/image/sprite-icon.png',
'type' => 'png',
),
'/rsrc/image/sprite.png' => '/rsrc/image/sprite.png' =>
array( array(
'hash' => '8c6200d3191c0deea30f22e7b8166b15', 'hash' => '8c6200d3191c0deea30f22e7b8166b15',
@ -727,7 +741,7 @@ celerity_register_resource_map(array(
), ),
'autosprite-css' => 'autosprite-css' =>
array( array(
'uri' => '/res/6be3e4b3/rsrc/css/autosprite.css', 'uri' => '/res/e1084d7c/rsrc/css/autosprite.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -2367,7 +2381,7 @@ celerity_register_resource_map(array(
), ),
'phabricator-action-list-view-css' => 'phabricator-action-list-view-css' =>
array( array(
'uri' => '/res/05a6dbac/rsrc/css/layout/phabricator-action-list-view.css', 'uri' => '/res/a5a123d0/rsrc/css/layout/phabricator-action-list-view.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -3085,6 +3099,15 @@ celerity_register_resource_map(array(
), ),
'disk' => '/rsrc/js/raphael/g.raphael.line.js', 'disk' => '/rsrc/js/raphael/g.raphael.line.js',
), ),
'sprite-icon-css' =>
array(
'uri' => '/res/ca19186e/rsrc/css/sprite-icon.css',
'type' => 'css',
'requires' =>
array(
),
'disk' => '/rsrc/css/sprite-icon.css',
),
'stripe-core' => 'stripe-core' =>
array( array(
'uri' => '/res/3b0f0ad4/rsrc/js/stripe/stripe_core.js', 'uri' => '/res/3b0f0ad4/rsrc/js/stripe/stripe_core.js',
@ -3115,7 +3138,7 @@ celerity_register_resource_map(array(
), array( ), array(
'packages' => 'packages' =>
array( array(
'8f8908d2' => '5c5dd816' =>
array( array(
'name' => 'core.pkg.css', 'name' => 'core.pkg.css',
'symbols' => 'symbols' =>
@ -3144,16 +3167,17 @@ celerity_register_resource_map(array(
21 => 'phabricator-flag-css', 21 => 'phabricator-flag-css',
22 => 'aphront-error-view-css', 22 => 'aphront-error-view-css',
23 => 'autosprite-css', 23 => 'autosprite-css',
24 => 'phabricator-main-menu-view', 24 => 'sprite-icon-css',
25 => 'phabricator-notification-css', 25 => 'phabricator-main-menu-view',
26 => 'phabricator-notification-menu-css', 26 => 'phabricator-notification-css',
27 => 'lightbox-attachment-css', 27 => 'phabricator-notification-menu-css',
28 => 'phabricator-header-view-css', 28 => 'lightbox-attachment-css',
29 => 'phabricator-form-view-css', 29 => 'phabricator-header-view-css',
30 => 'phabricator-filetree-view-css', 30 => 'phabricator-form-view-css',
31 => 'phabricator-nav-view-css', 31 => 'phabricator-filetree-view-css',
32 => 'phabricator-nav-view-css',
), ),
'uri' => '/res/pkg/8f8908d2/core.pkg.css', 'uri' => '/res/pkg/5c5dd816/core.pkg.css',
'type' => 'css', 'type' => 'css',
), ),
'd223b82c' => 'd223b82c' =>
@ -3343,21 +3367,21 @@ celerity_register_resource_map(array(
'reverse' => 'reverse' =>
array( array(
'aphront-attached-file-view-css' => '7839ae2d', 'aphront-attached-file-view-css' => '7839ae2d',
'aphront-crumbs-view-css' => '8f8908d2', 'aphront-crumbs-view-css' => '5c5dd816',
'aphront-dialog-view-css' => '8f8908d2', 'aphront-dialog-view-css' => '5c5dd816',
'aphront-error-view-css' => '8f8908d2', 'aphront-error-view-css' => '5c5dd816',
'aphront-form-view-css' => '8f8908d2', 'aphront-form-view-css' => '5c5dd816',
'aphront-headsup-action-list-view-css' => '47549184', 'aphront-headsup-action-list-view-css' => '47549184',
'aphront-headsup-view-css' => '8f8908d2', 'aphront-headsup-view-css' => '5c5dd816',
'aphront-list-filter-view-css' => '8f8908d2', 'aphront-list-filter-view-css' => '5c5dd816',
'aphront-pager-view-css' => '8f8908d2', 'aphront-pager-view-css' => '5c5dd816',
'aphront-panel-view-css' => '8f8908d2', 'aphront-panel-view-css' => '5c5dd816',
'aphront-side-nav-view-css' => '8f8908d2', 'aphront-side-nav-view-css' => '5c5dd816',
'aphront-table-view-css' => '8f8908d2', 'aphront-table-view-css' => '5c5dd816',
'aphront-tokenizer-control-css' => '8f8908d2', 'aphront-tokenizer-control-css' => '5c5dd816',
'aphront-tooltip-css' => '8f8908d2', 'aphront-tooltip-css' => '5c5dd816',
'aphront-typeahead-control-css' => '8f8908d2', 'aphront-typeahead-control-css' => '5c5dd816',
'autosprite-css' => '8f8908d2', 'autosprite-css' => '5c5dd816',
'differential-changeset-view-css' => '47549184', 'differential-changeset-view-css' => '47549184',
'differential-core-view-css' => '47549184', 'differential-core-view-css' => '47549184',
'differential-inline-comment-editor' => '7ecd31fa', 'differential-inline-comment-editor' => '7ecd31fa',
@ -3440,41 +3464,42 @@ celerity_register_resource_map(array(
'javelin-util' => '20727878', 'javelin-util' => '20727878',
'javelin-vector' => '20727878', 'javelin-vector' => '20727878',
'javelin-workflow' => '20727878', 'javelin-workflow' => '20727878',
'lightbox-attachment-css' => '8f8908d2', 'lightbox-attachment-css' => '5c5dd816',
'maniphest-task-summary-css' => '7839ae2d', 'maniphest-task-summary-css' => '7839ae2d',
'maniphest-transaction-detail-css' => '7839ae2d', 'maniphest-transaction-detail-css' => '7839ae2d',
'phabricator-app-buttons-css' => '8f8908d2', 'phabricator-app-buttons-css' => '5c5dd816',
'phabricator-busy' => 'd223b82c', 'phabricator-busy' => 'd223b82c',
'phabricator-content-source-view-css' => '47549184', 'phabricator-content-source-view-css' => '47549184',
'phabricator-core-buttons-css' => '8f8908d2', 'phabricator-core-buttons-css' => '5c5dd816',
'phabricator-core-css' => '8f8908d2', 'phabricator-core-css' => '5c5dd816',
'phabricator-directory-css' => '8f8908d2', 'phabricator-directory-css' => '5c5dd816',
'phabricator-drag-and-drop-file-upload' => '7ecd31fa', 'phabricator-drag-and-drop-file-upload' => '7ecd31fa',
'phabricator-dropdown-menu' => 'd223b82c', 'phabricator-dropdown-menu' => 'd223b82c',
'phabricator-file-upload' => 'd223b82c', 'phabricator-file-upload' => 'd223b82c',
'phabricator-filetree-view-css' => '8f8908d2', 'phabricator-filetree-view-css' => '5c5dd816',
'phabricator-flag-css' => '8f8908d2', 'phabricator-flag-css' => '5c5dd816',
'phabricator-form-view-css' => '8f8908d2', 'phabricator-form-view-css' => '5c5dd816',
'phabricator-header-view-css' => '8f8908d2', 'phabricator-header-view-css' => '5c5dd816',
'phabricator-jump-nav' => '8f8908d2', 'phabricator-jump-nav' => '5c5dd816',
'phabricator-keyboard-shortcut' => 'd223b82c', 'phabricator-keyboard-shortcut' => 'd223b82c',
'phabricator-keyboard-shortcut-manager' => 'd223b82c', 'phabricator-keyboard-shortcut-manager' => 'd223b82c',
'phabricator-main-menu-view' => '8f8908d2', 'phabricator-main-menu-view' => '5c5dd816',
'phabricator-menu-item' => 'd223b82c', 'phabricator-menu-item' => 'd223b82c',
'phabricator-nav-view-css' => '8f8908d2', 'phabricator-nav-view-css' => '5c5dd816',
'phabricator-notification' => 'd223b82c', 'phabricator-notification' => 'd223b82c',
'phabricator-notification-css' => '8f8908d2', 'phabricator-notification-css' => '5c5dd816',
'phabricator-notification-menu-css' => '8f8908d2', 'phabricator-notification-menu-css' => '5c5dd816',
'phabricator-object-selector-css' => '47549184', 'phabricator-object-selector-css' => '47549184',
'phabricator-paste-file-upload' => 'd223b82c', 'phabricator-paste-file-upload' => 'd223b82c',
'phabricator-prefab' => 'd223b82c', 'phabricator-prefab' => 'd223b82c',
'phabricator-project-tag-css' => '7839ae2d', 'phabricator-project-tag-css' => '7839ae2d',
'phabricator-remarkup-css' => '8f8908d2', 'phabricator-remarkup-css' => '5c5dd816',
'phabricator-shaped-request' => '7ecd31fa', 'phabricator-shaped-request' => '7ecd31fa',
'phabricator-standard-page-view' => '8f8908d2', 'phabricator-standard-page-view' => '5c5dd816',
'phabricator-textareautils' => 'd223b82c', 'phabricator-textareautils' => 'd223b82c',
'phabricator-tooltip' => 'd223b82c', 'phabricator-tooltip' => 'd223b82c',
'phabricator-transaction-view-css' => '8f8908d2', 'phabricator-transaction-view-css' => '5c5dd816',
'syntax-highlighting-css' => '8f8908d2', 'sprite-icon-css' => '5c5dd816',
'syntax-highlighting-css' => '5c5dd816',
), ),
)); ));

View file

@ -97,7 +97,6 @@ final class PhabricatorActionListExample extends PhabricatorUIExample {
id(new PhabricatorActionView()) id(new PhabricatorActionView())
->setUser($user) ->setUser($user)
->setHref('#') ->setHref('#')
->setDisabled(true)
->setName('Icon "'.$icon.'"') ->setName('Icon "'.$icon.'"')
->setIcon($icon)); ->setIcon($icon));
} }

View file

@ -0,0 +1,132 @@
<?php
final class CeleritySpriteGenerator {
public function buildIconSheet() {
$icons = $this->getDirectoryList('icons_1x');
$colors = array(
'',
'grey',
'white',
);
$scales = array(
'1x' => 1,
'2x' => 2,
);
$template = id(new PhutilSprite())
->setSourceSize(14, 14);
$sprites = array();
foreach ($colors as $color) {
foreach ($icons as $icon) {
$prefix = 'icons_';
if (strlen($color)) {
$prefix .= $color.'_';
}
$suffix = '';
if (strlen($color)) {
$suffix = '-'.$color;
}
$sprite = id(clone $template)
->setName('action-'.$icon.$suffix);
if ($color == 'white') {
$sprite->setTargetCSS(
'.device-desktop .phabricator-action-view:hover .action-'.$icon);
} else {
$sprite->setTargetCSS('.action-'.$icon.$suffix);
}
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
}
$remarkup_icons = $this->getDirectoryList('remarkup_1x');
foreach ($remarkup_icons as $icon) {
$prefix = 'remarkup_';
// Strip 'text_' from these file names.
$class_name = substr($icon, 5);
$sprite = id(clone $template)
->setName('remarkup-assist-'.$icon)
->setTargetCSS('.remarkup-assist-'.$class_name);
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
$sheet = $this->buildSheet('icon');
$sheet->setScales($scales);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
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) {
$sheet = new PhutilSpriteSheet();
$at = '@';
$sheet->setCSSHeader(<<<EOCSS
/**
* @provides sprite-{$name}-css
* {$at}generated
*/
.sprite-{$name} {
background-image: url(/rsrc/image/sprite-{$name}.png);
background-repeat: no-repeat;
}
@media
only screen and (min-device-pixel-ratio: 1.5),
only screen and (-webkit-min-device-pixel-ratio: 1.5) {
.sprite-{$name} {
background-image: url(/rsrc/image/sprite-{$name}-X2.png);
background-size: {X}px {Y}px;
}
}
EOCSS
);
return $sheet;
}
}

View file

@ -91,6 +91,8 @@ final class PhabricatorRemarkupControl extends AphrontFormTextAreaControl {
$meta['tip'] = $tip; $meta['tip'] = $tip;
} }
require_celerity_resource('sprite-icon-css');
$buttons[] = javelin_render_tag( $buttons[] = javelin_render_tag(
'a', 'a',
array( array(
@ -105,7 +107,7 @@ final class PhabricatorRemarkupControl extends AphrontFormTextAreaControl {
phutil_render_tag( phutil_render_tag(
'div', 'div',
array( array(
'class' => 'remarkup-assist autosprite remarkup-assist-'.$action, 'class' => 'remarkup-assist sprite-icon remarkup-assist-'.$action,
), ),
'')); ''));
} }

View file

@ -49,11 +49,18 @@ final class PhabricatorActionView extends AphrontView {
$icon = null; $icon = null;
if ($this->icon) { if ($this->icon) {
$suffix = '';
if ($this->disabled) {
$suffix = '-grey';
}
require_celerity_resource('sprite-icon-css');
$icon = phutil_render_tag( $icon = phutil_render_tag(
'span', 'span',
array( array(
'class' => 'phabricator-action-view-icon autosprite '. 'class' => 'phabricator-action-view-icon sprite-icon '.
'action-'.$this->icon, 'action-'.$this->icon.$suffix,
), ),
''); '');
} }
@ -114,32 +121,23 @@ final class PhabricatorActionView extends AphrontView {
} }
public static function getAvailableIcons() { public static function getAvailableIcons() {
return array( $root = dirname(phutil_get_library_root('phabricator'));
'delete', $path = $root.'/resources/sprite/manifest/icon.json';
'download', $data = Filesystem::readFile($path);
'edit', $manifest = json_decode($data, true);
'file',
'flag-0', $results = array();
'flag-1', $prefix = 'action-';
'flag-2', foreach ($manifest['sprites'] as $sprite) {
'flag-3', if (preg_match('/-(white|grey)$/', $sprite)) {
'flag-4', continue;
'flag-5', }
'flag-6', if (!strncmp($sprite, $prefix, strlen($prefix))) {
'flag-7', $results[] = substr($sprite, strlen($prefix));
'flag-ghost', }
'fork', }
'move',
'new', return $results;
'preview',
'subscribe-add',
'subscribe-auto',
'subscribe-delete',
'undo',
'unlock',
'unpublish',
'world',
);
} }
} }

View file

@ -28,7 +28,7 @@
} }
.phabricator-action-view { .phabricator-action-view {
padding: 2px 0; padding: 1px 0;
position: relative; position: relative;
} }
@ -37,7 +37,6 @@
background: transparent; background: transparent;
box-shadow: none; box-shadow: none;
outline: 0; outline: 0;
box-shadow: 0;
padding: 0; padding: 0;
margin: 0; margin: 0;
font-weight: normal; font-weight: normal;
@ -45,28 +44,35 @@
width: 100%; width: 100%;
text-align: left; text-align: left;
text-shadow: none; text-shadow: none;
border-radius: 0;
color: #18559D;
font: inherit;
display: inline;
min-width: 0;
} }
.phabricator-action-view button.phabricator-action-view-item, .phabricator-action-view button.phabricator-action-view-item,
.phabricator-action-view-item { .phabricator-action-view-item {
padding: 1px 0 1px 34px;
line-height: 20px; line-height: 20px;
padding-left: 34px;
display: block; display: block;
font-size: 12px; font-size: 12px;
text-decoration: none;
} }
.phabricator-action-view-icon { .phabricator-action-view-icon {
width: 16px; width: 14px;
height: 16px; height: 14px;
position: absolute; position: absolute;
top: 4px; top: 5px;
left: 12px; left: 13px;
} }
.device-desktop .phabricator-action-view-item:hover { .device-desktop .phabricator-action-view:hover .phabricator-action-view-item {
text-decoration: none;
background-color: #3875d7; background-color: #3875d7;
color: #ffffff; color: #ffffff;
text-decoration: none;
} }
.phabricator-action-view-disabled .phabricator-action-view-item, .phabricator-action-view-disabled .phabricator-action-view-item,
@ -74,8 +80,10 @@
color: #888888; color: #888888;
} }
.phabricator-action-view-disabled .phabricator-action-view-item:hover, .device-desktop .phabricator-action-view-disabled:hover
.phabricator-action-view-disabled button.phabricator-action-view-item:hover { .phabricator-action-view-item,
.device-desktop .phabricator-action-view-disabled:hover
button.phabricator-action-view-item {
background-color: #dfdfdf; background-color: #dfdfdf;
color: #888888; color: #888888;
} }

View file

@ -0,0 +1,786 @@
/**
* @provides sprite-icon-css
* @generated
*/
.sprite-icon {
background-image: url(/rsrc/image/sprite-icon.png);
background-repeat: no-repeat;
}
@media
only screen and (min-device-pixel-ratio: 1.5),
only screen and (-webkit-min-device-pixel-ratio: 1.5) {
.sprite-icon {
background-image: url(/rsrc/image/sprite-icon-X2.png);
background-size: 210px 210px;
}
}
.action-arrow_left {
background-position: 0px 0px;
}
.action-arrow_right {
background-position: -15px 0px;
}
.action-attach {
background-position: -30px 0px;
}
.action-blame {
background-position: -45px 0px;
}
.action-check {
background-position: -60px 0px;
}
.action-comment {
background-position: -75px 0px;
}
.action-computer {
background-position: -90px 0px;
}
.action-create {
background-position: -105px 0px;
}
.action-delete {
background-position: -120px 0px;
}
.action-disable {
background-position: -135px 0px;
}
.action-dislike {
background-position: -150px 0px;
}
.action-download {
background-position: -165px 0px;
}
.action-edit {
background-position: -180px 0px;
}
.action-enable {
background-position: -195px 0px;
}
.action-file {
background-position: 0px -15px;
}
.action-flag-0 {
background-position: -15px -15px;
}
.action-flag-1 {
background-position: -30px -15px;
}
.action-flag-2 {
background-position: -45px -15px;
}
.action-flag-3 {
background-position: -60px -15px;
}
.action-flag-4 {
background-position: -75px -15px;
}
.action-flag-5 {
background-position: -90px -15px;
}
.action-flag-6 {
background-position: -105px -15px;
}
.action-flag-7 {
background-position: -120px -15px;
}
.action-flag-ghost {
background-position: -135px -15px;
}
.action-flag {
background-position: -150px -15px;
}
.action-folder-open {
background-position: -165px -15px;
}
.action-fork {
background-position: -180px -15px;
}
.action-herald {
background-position: -195px -15px;
}
.action-highlight {
background-position: 0px -30px;
}
.action-history {
background-position: -15px -30px;
}
.action-image {
background-position: -30px -30px;
}
.action-like {
background-position: -45px -30px;
}
.action-link {
background-position: -60px -30px;
}
.action-lint-info {
background-position: -75px -30px;
}
.action-lint-ok {
background-position: -90px -30px;
}
.action-lint-warning {
background-position: -105px -30px;
}
.action-lock {
background-position: -120px -30px;
}
.action-love {
background-position: -135px -30px;
}
.action-merge {
background-position: -150px -30px;
}
.action-message {
background-position: -165px -30px;
}
.action-meta-mta {
background-position: -180px -30px;
}
.action-move {
background-position: -195px -30px;
}
.action-new {
background-position: 0px -45px;
}
.action-perflab {
background-position: -15px -45px;
}
.action-preview {
background-position: -30px -45px;
}
.action-refresh {
background-position: -45px -45px;
}
.action-remove {
background-position: -60px -45px;
}
.action-search {
background-position: -75px -45px;
}
.action-start-sandcastle {
background-position: -90px -45px;
}
.action-subscribe-add {
background-position: -105px -45px;
}
.action-subscribe-auto {
background-position: -120px -45px;
}
.action-subscribe-delete {
background-position: -135px -45px;
}
.action-tag {
background-position: -150px -45px;
}
.action-transcript {
background-position: -165px -45px;
}
.action-undo {
background-position: -180px -45px;
}
.action-unlock {
background-position: -195px -45px;
}
.action-unmerge {
background-position: 0px -60px;
}
.action-unpublish {
background-position: -15px -60px;
}
.action-warning {
background-position: -30px -60px;
}
.action-world {
background-position: -45px -60px;
}
.action-arrow_left-grey {
background-position: -60px -60px;
}
.action-arrow_right-grey {
background-position: -75px -60px;
}
.action-attach-grey {
background-position: -90px -60px;
}
.action-blame-grey {
background-position: -105px -60px;
}
.action-check-grey {
background-position: -120px -60px;
}
.action-comment-grey {
background-position: -135px -60px;
}
.action-computer-grey {
background-position: -150px -60px;
}
.action-create-grey {
background-position: -165px -60px;
}
.action-delete-grey {
background-position: -180px -60px;
}
.action-disable-grey {
background-position: -195px -60px;
}
.action-dislike-grey {
background-position: 0px -75px;
}
.action-download-grey {
background-position: -15px -75px;
}
.action-edit-grey {
background-position: -30px -75px;
}
.action-enable-grey {
background-position: -45px -75px;
}
.action-file-grey {
background-position: -60px -75px;
}
.action-flag-0-grey {
background-position: -75px -75px;
}
.action-flag-1-grey {
background-position: -90px -75px;
}
.action-flag-2-grey {
background-position: -105px -75px;
}
.action-flag-3-grey {
background-position: -120px -75px;
}
.action-flag-4-grey {
background-position: -135px -75px;
}
.action-flag-5-grey {
background-position: -150px -75px;
}
.action-flag-6-grey {
background-position: -165px -75px;
}
.action-flag-7-grey {
background-position: -180px -75px;
}
.action-flag-ghost-grey {
background-position: -195px -75px;
}
.action-flag-grey {
background-position: 0px -90px;
}
.action-folder-open-grey {
background-position: -15px -90px;
}
.action-fork-grey {
background-position: -30px -90px;
}
.action-herald-grey {
background-position: -45px -90px;
}
.action-highlight-grey {
background-position: -60px -90px;
}
.action-history-grey {
background-position: -75px -90px;
}
.action-image-grey {
background-position: -90px -90px;
}
.action-like-grey {
background-position: -105px -90px;
}
.action-link-grey {
background-position: -120px -90px;
}
.action-lint-info-grey {
background-position: -135px -90px;
}
.action-lint-ok-grey {
background-position: -150px -90px;
}
.action-lint-warning-grey {
background-position: -165px -90px;
}
.action-lock-grey {
background-position: -180px -90px;
}
.action-love-grey {
background-position: -195px -90px;
}
.action-merge-grey {
background-position: 0px -105px;
}
.action-message-grey {
background-position: -15px -105px;
}
.action-meta-mta-grey {
background-position: -30px -105px;
}
.action-move-grey {
background-position: -45px -105px;
}
.action-new-grey {
background-position: -60px -105px;
}
.action-perflab-grey {
background-position: -75px -105px;
}
.action-preview-grey {
background-position: -90px -105px;
}
.action-refresh-grey {
background-position: -105px -105px;
}
.action-remove-grey {
background-position: -120px -105px;
}
.action-search-grey {
background-position: -135px -105px;
}
.action-start-sandcastle-grey {
background-position: -150px -105px;
}
.action-subscribe-add-grey {
background-position: -165px -105px;
}
.action-subscribe-auto-grey {
background-position: -180px -105px;
}
.action-subscribe-delete-grey {
background-position: -195px -105px;
}
.action-tag-grey {
background-position: 0px -120px;
}
.action-transcript-grey {
background-position: -15px -120px;
}
.action-undo-grey {
background-position: -30px -120px;
}
.action-unlock-grey {
background-position: -45px -120px;
}
.action-unmerge-grey {
background-position: -60px -120px;
}
.action-unpublish-grey {
background-position: -75px -120px;
}
.action-warning-grey {
background-position: -90px -120px;
}
.action-world-grey {
background-position: -105px -120px;
}
.device-desktop .phabricator-action-view:hover .action-arrow_left {
background-position: -120px -120px;
}
.device-desktop .phabricator-action-view:hover .action-arrow_right {
background-position: -135px -120px;
}
.device-desktop .phabricator-action-view:hover .action-attach {
background-position: -150px -120px;
}
.device-desktop .phabricator-action-view:hover .action-blame {
background-position: -165px -120px;
}
.device-desktop .phabricator-action-view:hover .action-check {
background-position: -180px -120px;
}
.device-desktop .phabricator-action-view:hover .action-comment {
background-position: -195px -120px;
}
.device-desktop .phabricator-action-view:hover .action-computer {
background-position: 0px -135px;
}
.device-desktop .phabricator-action-view:hover .action-create {
background-position: -15px -135px;
}
.device-desktop .phabricator-action-view:hover .action-delete {
background-position: -30px -135px;
}
.device-desktop .phabricator-action-view:hover .action-disable {
background-position: -45px -135px;
}
.device-desktop .phabricator-action-view:hover .action-dislike {
background-position: -60px -135px;
}
.device-desktop .phabricator-action-view:hover .action-download {
background-position: -75px -135px;
}
.device-desktop .phabricator-action-view:hover .action-edit {
background-position: -90px -135px;
}
.device-desktop .phabricator-action-view:hover .action-enable {
background-position: -105px -135px;
}
.device-desktop .phabricator-action-view:hover .action-file {
background-position: -120px -135px;
}
.device-desktop .phabricator-action-view:hover .action-flag-0 {
background-position: -135px -135px;
}
.device-desktop .phabricator-action-view:hover .action-flag-1 {
background-position: -150px -135px;
}
.device-desktop .phabricator-action-view:hover .action-flag-2 {
background-position: -165px -135px;
}
.device-desktop .phabricator-action-view:hover .action-flag-3 {
background-position: -180px -135px;
}
.device-desktop .phabricator-action-view:hover .action-flag-4 {
background-position: -195px -135px;
}
.device-desktop .phabricator-action-view:hover .action-flag-5 {
background-position: 0px -150px;
}
.device-desktop .phabricator-action-view:hover .action-flag-6 {
background-position: -15px -150px;
}
.device-desktop .phabricator-action-view:hover .action-flag-7 {
background-position: -30px -150px;
}
.device-desktop .phabricator-action-view:hover .action-flag-ghost {
background-position: -45px -150px;
}
.device-desktop .phabricator-action-view:hover .action-flag {
background-position: -60px -150px;
}
.device-desktop .phabricator-action-view:hover .action-folder-open {
background-position: -75px -150px;
}
.device-desktop .phabricator-action-view:hover .action-fork {
background-position: -90px -150px;
}
.device-desktop .phabricator-action-view:hover .action-herald {
background-position: -105px -150px;
}
.device-desktop .phabricator-action-view:hover .action-highlight {
background-position: -120px -150px;
}
.device-desktop .phabricator-action-view:hover .action-history {
background-position: -135px -150px;
}
.device-desktop .phabricator-action-view:hover .action-image {
background-position: -150px -150px;
}
.device-desktop .phabricator-action-view:hover .action-like {
background-position: -165px -150px;
}
.device-desktop .phabricator-action-view:hover .action-link {
background-position: -180px -150px;
}
.device-desktop .phabricator-action-view:hover .action-lint-info {
background-position: 0px -165px;
}
.device-desktop .phabricator-action-view:hover .action-lint-ok {
background-position: -15px -165px;
}
.device-desktop .phabricator-action-view:hover .action-lint-warning {
background-position: -30px -165px;
}
.device-desktop .phabricator-action-view:hover .action-lock {
background-position: -45px -165px;
}
.device-desktop .phabricator-action-view:hover .action-love {
background-position: -60px -165px;
}
.device-desktop .phabricator-action-view:hover .action-merge {
background-position: -75px -165px;
}
.device-desktop .phabricator-action-view:hover .action-message {
background-position: -90px -165px;
}
.device-desktop .phabricator-action-view:hover .action-meta-mta {
background-position: -105px -165px;
}
.device-desktop .phabricator-action-view:hover .action-move {
background-position: -120px -165px;
}
.device-desktop .phabricator-action-view:hover .action-new {
background-position: -135px -165px;
}
.device-desktop .phabricator-action-view:hover .action-perflab {
background-position: -150px -165px;
}
.device-desktop .phabricator-action-view:hover .action-preview {
background-position: -165px -165px;
}
.device-desktop .phabricator-action-view:hover .action-refresh {
background-position: -180px -165px;
}
.device-desktop .phabricator-action-view:hover .action-remove {
background-position: 0px -180px;
}
.device-desktop .phabricator-action-view:hover .action-search {
background-position: -15px -180px;
}
.device-desktop .phabricator-action-view:hover .action-start-sandcastle {
background-position: -30px -180px;
}
.device-desktop .phabricator-action-view:hover .action-subscribe-add {
background-position: -45px -180px;
}
.device-desktop .phabricator-action-view:hover .action-subscribe-auto {
background-position: -60px -180px;
}
.device-desktop .phabricator-action-view:hover .action-subscribe-delete {
background-position: -75px -180px;
}
.device-desktop .phabricator-action-view:hover .action-tag {
background-position: -90px -180px;
}
.device-desktop .phabricator-action-view:hover .action-transcript {
background-position: -105px -180px;
}
.device-desktop .phabricator-action-view:hover .action-undo {
background-position: -120px -180px;
}
.device-desktop .phabricator-action-view:hover .action-unlock {
background-position: -135px -180px;
}
.device-desktop .phabricator-action-view:hover .action-unmerge {
background-position: -150px -180px;
}
.device-desktop .phabricator-action-view:hover .action-unpublish {
background-position: -165px -180px;
}
.device-desktop .phabricator-action-view:hover .action-warning {
background-position: -180px -180px;
}
.device-desktop .phabricator-action-view:hover .action-world {
background-position: 0px -195px;
}
.remarkup-assist-b {
background-position: -15px -195px;
}
.remarkup-assist-code {
background-position: -30px -195px;
}
.remarkup-assist-help {
background-position: -45px -195px;
}
.remarkup-assist-i {
background-position: -60px -195px;
}
.remarkup-assist-image {
background-position: -75px -195px;
}
.remarkup-assist-larger {
background-position: -90px -195px;
}
.remarkup-assist-meme {
background-position: -105px -195px;
}
.remarkup-assist-ol {
background-position: -120px -195px;
}
.remarkup-assist-table {
background-position: -135px -195px;
}
.remarkup-assist-tag {
background-position: -150px -195px;
}
.remarkup-assist-tt {
background-position: -165px -195px;
}
.remarkup-assist-ul {
background-position: -180px -195px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB