Page MenuHomestyx hydra

No OneTemporary

diff --git a/resources/sprite/gradients/dark-menu-label.png b/resources/sprite/gradients/dark-menu-label.png
deleted file mode 100644
index 30f94c868a..0000000000
Binary files a/resources/sprite/gradients/dark-menu-label.png and /dev/null differ
diff --git a/resources/sprite/gradients/menu-label.png b/resources/sprite/gradients/menu-label.png
deleted file mode 100644
index 263b7021ca..0000000000
Binary files a/resources/sprite/gradients/menu-label.png and /dev/null differ
diff --git a/resources/sprite/manifest/gradient.json b/resources/sprite/manifest/gradient.json
index 4e66b3aa3b..f787402ac7 100644
--- a/resources/sprite/manifest/gradient.json
+++ b/resources/sprite/manifest/gradient.json
@@ -1,60 +1,50 @@
{
"version" : 1,
"sprites" : {
"gradient-blue-header" : {
"name" : "gradient-blue-header",
"rule" : ".gradient-blue-header",
"hash" : "bcfc1d3e93ea8585af5b5ca52b08e944"
},
"gradient-breadcrumbs" : {
"name" : "gradient-breadcrumbs",
"rule" : ".gradient-breadcrumbs",
"hash" : "ed46fe9544216513a3958900c688a808"
},
"gradient-dark-grey-header" : {
"name" : "gradient-dark-grey-header",
"rule" : ".gradient-dark-grey-header",
"hash" : "e8762dd2849410a7e4fba8f972f946ff"
},
- "gradient-dark-menu-label" : {
- "name" : "gradient-dark-menu-label",
- "rule" : ".gradient-dark-menu-label, .phabricator-dark-menu .phui-list-item-type-label",
- "hash" : "8a11efa454f788aa2419ed8c745dece2"
- },
"gradient-green-header" : {
"name" : "gradient-green-header",
"rule" : ".gradient-green-header",
"hash" : "848b563e846e187b688e899a9d838e40"
},
"gradient-grey-header" : {
"name" : "gradient-grey-header",
"rule" : ".gradient-grey-header",
"hash" : "1c8f8d61984e3fc5a7e528b9bd4d484a"
},
"gradient-lightblue-header" : {
"name" : "gradient-lightblue-header",
"rule" : ".gradient-lightblue-header",
"hash" : "e7753a6ce63c6822a559266eef9e255b"
},
- "gradient-menu-label" : {
- "name" : "gradient-menu-label",
- "rule" : ".gradient-menu-label, .phabricator-side-menu .phui-list-item-type-label",
- "hash" : "e2aa8e74c3b2c0b18de34d336d318b5c"
- },
"gradient-red-header" : {
"name" : "gradient-red-header",
"rule" : ".gradient-red-header",
"hash" : "070a2e01f611bfaf5207be25eebdd6f2"
},
"gradient-yellow-header" : {
"name" : "gradient-yellow-header",
"rule" : ".gradient-yellow-header",
"hash" : "166ee67c5201416cfa598c1eb86bf92a"
}
},
"scales" : [
1
],
- "header" : "\/**\n * @provides sprite-gradient-css\n * @generated\n *\/\n\n.sprite-gradient, .phabricator-dark-menu .phui-list-item-type-label, .phabricator-side-menu .phui-list-item-type-label {\n background-image: url(\/rsrc\/image\/sprite-gradient.png);\n background-repeat: repeat-x;\n}\n\n\n",
+ "header" : "\/**\n * @provides sprite-gradient-css\n * @generated\n *\/\n\n.sprite-gradient {\n background-image: url(\/rsrc\/image\/sprite-gradient.png);\n background-repeat: repeat-x;\n}\n\n\n",
"type" : "repeat-x"
}
diff --git a/src/applications/home/controller/PhabricatorHomeController.php b/src/applications/home/controller/PhabricatorHomeController.php
index 561c673fa8..00f8bc386a 100644
--- a/src/applications/home/controller/PhabricatorHomeController.php
+++ b/src/applications/home/controller/PhabricatorHomeController.php
@@ -1,180 +1,176 @@
<?php
abstract class PhabricatorHomeController extends PhabricatorController {
public function buildStandardPageResponse($view, array $data) {
$page = $this->buildStandardPageView();
$page->setBaseURI('/');
$page->setTitle(idx($data, 'title'));
$page->setGlyph("\xE2\x9A\x92");
$page->appendChild($view);
$response = new AphrontWebpageResponse();
return $response->setContent($page->render());
}
public function buildNav() {
$user = $this->getRequest()->getUser();
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI('/'));
$applications = id(new PhabricatorApplicationQuery())
->setViewer($user)
->withInstalled(true)
->withUnlisted(false)
->execute();
foreach ($applications as $key => $application) {
if (!$application->shouldAppearInLaunchView()) {
// Remove hidden applications (usually internal stuff).
unset($applications[$key]);
}
$invisible = PhabricatorApplication::TILE_INVISIBLE;
if ($application->getDefaultTileDisplay($user) == $invisible) {
// Remove invisible applications (e.g., admin apps for non-admins).
unset($applications[$key]);
}
}
$status = array();
foreach ($applications as $key => $application) {
$status[get_class($application)] = $application->loadStatus($user);
}
$tile_groups = array();
$prefs = $user->loadPreferences()->getPreference(
PhabricatorUserPreferences::PREFERENCE_APP_TILES,
array());
foreach ($applications as $key => $application) {
$display = idx(
$prefs,
get_class($application),
$application->getDefaultTileDisplay($user));
$tile_groups[$display][] = $application;
}
$tile_groups = array_select_keys(
$tile_groups,
array(
PhabricatorApplication::TILE_FULL,
PhabricatorApplication::TILE_SHOW,
PhabricatorApplication::TILE_HIDE,
));
foreach ($tile_groups as $tile_display => $tile_group) {
if (!$tile_group) {
continue;
}
$is_small_tiles = ($tile_display == PhabricatorApplication::TILE_SHOW) ||
($tile_display == PhabricatorApplication::TILE_HIDE);
if ($is_small_tiles) {
$groups = PhabricatorApplication::getApplicationGroups();
$tile_group = mgroup($tile_group, 'getApplicationGroup');
$tile_group = array_select_keys($tile_group, array_keys($groups));
} else {
$tile_group = array($tile_group);
}
$is_hide = ($tile_display == PhabricatorApplication::TILE_HIDE);
if ($is_hide) {
$show_item_id = celerity_generate_unique_node_id();
$hide_item_id = celerity_generate_unique_node_id();
$show_item = id(new PHUIListItemView())
->setName(pht('Show More Applications'))
->setHref('#')
->addSigil('reveal-content')
->setID($show_item_id);
$hide_item = id(new PHUIListItemView())
->setName(pht('Show Fewer Applications'))
->setHref('#')
->setStyle('display: none')
->setID($hide_item_id)
->addSigil('reveal-content');
$nav->addMenuItem($show_item);
$tile_ids = array($hide_item_id);
}
foreach ($tile_group as $group => $application_list) {
$tiles = array();
foreach ($application_list as $key => $application) {
$tile = id(new PhabricatorApplicationLaunchView())
->setApplication($application)
->setApplicationStatus(
idx($status, get_class($application), array()))
->setUser($user);
- if ($tile_display == PhabricatorApplication::TILE_FULL) {
- $tile->setFullWidth(true);
- }
-
$tiles[] = $tile;
}
if ($is_small_tiles) {
while (count($tiles) % 3) {
$tiles[] = id(new PhabricatorApplicationLaunchView());
}
$label = id(new PHUIListItemView())
->setType(PHUIListItemView::TYPE_LABEL)
->setName($groups[$group]);
if ($is_hide) {
$label_id = celerity_generate_unique_node_id();
$attrs = array();
$label->setStyle('display: none;');
$label->setID($label_id);
$tile_ids[] = $label_id;
}
$nav->addMenuItem($label);
}
$group_id = celerity_generate_unique_node_id();
$tile_ids[] = $group_id;
$nav->addCustomBlock(
phutil_tag(
'div',
array(
'class' => 'application-tile-group',
'id' => $group_id,
'style' => ($is_hide ? 'display: none' : null),
),
mpull($tiles, 'render')));
}
if ($is_hide) {
Javelin::initBehavior('phabricator-reveal-content');
$show_item->setMetadata(
array(
'showIDs' => $tile_ids,
'hideIDs' => array($show_item_id),
));
$hide_item->setMetadata(
array(
'showIDs' => array($show_item_id),
'hideIDs' => $tile_ids,
));
$nav->addMenuItem($hide_item);
}
}
$nav->addFilter(
'',
pht('Customize Applications...'),
'/settings/panel/home/');
$nav->addClass('phabricator-side-menu-home');
$nav->selectFilter(null);
return $nav;
}
}
diff --git a/src/applications/meta/view/PhabricatorApplicationLaunchView.php b/src/applications/meta/view/PhabricatorApplicationLaunchView.php
index d40e9b482c..3c3f95c339 100644
--- a/src/applications/meta/view/PhabricatorApplicationLaunchView.php
+++ b/src/applications/meta/view/PhabricatorApplicationLaunchView.php
@@ -1,156 +1,140 @@
<?php
final class PhabricatorApplicationLaunchView extends AphrontView {
private $application;
private $status;
- private $fullWidth;
-
- public function setFullWidth($full_width) {
- $this->fullWidth = $full_width;
- return $this;
- }
public function setApplication(PhabricatorApplication $application) {
$this->application = $application;
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-large-css');
$content = array();
$icon = null;
$create_button = null;
if ($application) {
$content[] = phutil_tag(
'span',
array(
'class' => 'phabricator-application-launch-name',
),
$application->getName());
if ($application->isBeta()) {
$content[] = javelin_tag(
'span',
array(
'aural' => false,
'class' => 'phabricator-application-beta',
),
"\xCE\xB2");
}
- if ($this->fullWidth) {
- $content[] = phutil_tag(
- 'span',
- array(
- 'class' => 'phabricator-application-launch-description',
- ),
- $application->getShortDescription());
- }
+ $content[] = phutil_tag(
+ 'span',
+ array(
+ 'class' => 'phabricator-application-launch-description',
+ ),
+ $application->getShortDescription());
$counts = array();
$text = array();
if ($this->status) {
foreach ($this->status as $status) {
$type = $status->getType();
$counts[$type] = idx($counts, $type, 0) + $status->getCount();
if ($status->getCount()) {
$text[] = $status->getText();
}
}
}
$attention = PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION;
$warning = PhabricatorApplicationStatusView::TYPE_WARNING;
if (!empty($counts[$attention]) || !empty($counts[$warning])) {
$count = idx($counts, $attention, 0);
$count1 = $count2 = '';
if ($count > 0) {
$count1 = phutil_tag(
'span',
array(
'class' => 'phabricator-application-attention-count',
),
$count);
}
if (!empty($counts[$warning])) {
$count2 = phutil_tag(
'span',
array(
'class' => 'phabricator-application-warning-count',
),
$counts[$warning]);
}
Javelin::initBehavior('phabricator-tooltips');
$content[] = javelin_tag(
'span',
array(
'sigil' => 'has-tooltip',
'meta' => array(
'tip' => implode("\n", $text),
'size' => 240,
),
'class' => 'phabricator-application-launch-attention',
),
array($count1, $count2));
}
$classes = array();
$classes[] = 'phabricator-application-launch-icon';
$styles = array();
if ($application->getIconURI()) {
$styles[] = 'background-image: url('.$application->getIconURI().')';
} else {
$icon = $application->getIconName();
$classes[] = 'sprite-apps-large';
- $classes[] = 'apps-'.$icon.'-light-large';
+ $classes[] = 'apps-'.$icon.'-dark-large';
}
$icon = phutil_tag(
'span',
array(
'class' => implode(' ', $classes),
'style' => nonempty(implode('; ', $styles), null),
),
'');
}
$classes = array();
$classes[] = 'phabricator-application-launch-container';
- if ($this->fullWidth) {
- $classes[] = 'application-tile-full';
- }
-
- $title = null;
- if ($application && !$this->fullWidth) {
- $title = $application->getShortDescription();
- }
+ $classes[] = 'application-tile-full';
$app_button = phutil_tag(
$application ? 'a' : 'div',
array(
'class' => implode(' ', $classes),
'href' => $application ? $application->getBaseURI() : null,
- 'title' => $title,
),
array(
$icon,
$content,
));
return array($app_button, $create_button);
}
}
diff --git a/src/infrastructure/celerity/CeleritySpriteGenerator.php b/src/infrastructure/celerity/CeleritySpriteGenerator.php
index 24f875337d..9c62ae28ba 100644
--- a/src/infrastructure/celerity/CeleritySpriteGenerator.php
+++ b/src/infrastructure/celerity/CeleritySpriteGenerator.php
@@ -1,703 +1,692 @@
<?php
final class CeleritySpriteGenerator {
public function buildRemarkupSheet() {
$scales = array(
'1x' => 1,
'2x' => 2,
);
$sprites = array();
$template = id(new PhutilSprite())
->setSourceSize(14, 14);
$remarkup_icons = $this->getDirectoryList('remarkup_1x');
foreach ($remarkup_icons as $icon) {
$prefix = 'remarkup_';
// Strip 'text_' from these file names.
$class_name = substr($icon, 5);
if ($class_name == 'fullscreen_off') {
$tcss = '.remarkup-control-fullscreen-mode .remarkup-assist-fullscreen';
} else {
$tcss = '.remarkup-assist-'.$class_name;
}
$sprite = id(clone $template)
->setName('remarkup-assist-'.$icon)
->setTargetCSS($tcss);
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
$sheet = $this->buildSheet('remarkup', true);
$sheet->setScales($scales);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
public function buildMiniconsSheet() {
$icons = $this->getDirectoryList('minicons_white_1x');
$colors = array(
'white',
'dark',
);
$scales = array(
'1x' => 1,
'2x' => 2,
);
$template = id(new PhutilSprite())
->setSourceSize(16, 16);
$sprites = array();
foreach ($colors as $color) {
foreach ($icons as $icon) {
$prefix = 'minicons_';
if (strlen($color)) {
$prefix .= $color.'_';
}
$suffix = '';
if (strlen($color)) {
$suffix = '-'.$color;
}
$sprite = id(clone $template)
->setName('minicons-'.$icon.$suffix);
$sprite->setTargetCSS('.minicons-'.$icon.$suffix);
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
}
$sheet = $this->buildSheet('minicons', true);
$sheet->setScales($scales);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
public function buildMenuSheet() {
$sprites = array();
$sources = array(
'seen_read_all' => array(
'x' => 18,
'y' => 18,
'css' =>
'.alert-notifications .phabricator-main-menu-alert-icon',
),
'seen_have_unread' => array(
'x' => 18,
'y' => 18,
'css' =>
'.alert-notifications:hover .phabricator-main-menu-alert-icon',
),
'unseen_any' => array(
'x' => 18,
'y' => 18,
'css' =>
'.alert-notifications.alert-unread .phabricator-main-menu-alert-icon',
),
'arrow-right' => array(
'x' => 9,
'y' => 31,
'css' => '.phabricator-crumb-divider',
),
'search' => array(
'x' => 24,
'y' => 24,
'css' => '.menu-icon-search',
),
'search_blue' => array(
'x' => 24,
'y' => 24,
'css' => '.menu-icon-search-blue',
),
'new' => array(
'x' => 24,
'y' => 24,
'css' => '.menu-icon-new',
),
'new_blue' => array(
'x' => 24,
'y' => 24,
'css' => '.menu-icon-new-blue',
),
'app' => array(
'x' => 24,
'y' => 24,
'css' => '.menu-icon-app',
),
'app_blue' => array(
'x' => 24,
'y' => 24,
'css' => '.menu-icon-app-blue',
),
'logo' => array(
'x' => 149,
'y' => 26,
'css' => '.phabricator-main-menu-logo-image',
),
'conf-off' => array(
'x' => 18,
'y' => 18,
'css' =>
'.alert-notifications .phabricator-main-menu-message-icon',
),
'conf-hover' => array(
'x' => 18,
'y' => 18,
'css' =>
'.alert-notifications:hover .phabricator-main-menu-message-icon',
),
'conf-unseen' => array(
'x' => 18,
'y' => 18,
'css' =>
'.alert-notifications.message-unread '.
'.phabricator-main-menu-message-icon',
),
);
$scales = array(
'1x' => 1,
'2x' => 2,
);
$template = new PhutilSprite();
foreach ($sources as $name => $spec) {
$sprite = id(clone $template)
->setName($name)
->setSourceSize($spec['x'], $spec['y'])
->setTargetCSS($spec['css']);
foreach ($scales as $scale_name => $scale) {
$path = 'menu_'.$scale_name.'/'.$name.'.png';
$path = $this->getPath($path);
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
$sheet = $this->buildSheet('menu', true);
$sheet->setScales($scales);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
public function buildTokenSheet() {
$icons = $this->getDirectoryList('tokens_1x');
$scales = array(
'1x' => 1,
'2x' => 2,
);
$template = id(new PhutilSprite())
->setSourceSize(16, 16);
$sprites = array();
$prefix = 'tokens_';
foreach ($icons as $icon) {
$sprite = id(clone $template)
->setName('tokens-'.$icon)
->setTargetCSS('.tokens-'.$icon);
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
$sheet = $this->buildSheet('tokens', true);
$sheet->setScales($scales);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
public function buildButtonBarSheet() {
$icons = $this->getDirectoryList('button_bar_1x');
$scales = array(
'1x' => 1,
'2x' => 2,
);
$template = id(new PhutilSprite())
->setSourceSize(14, 14);
$sprites = array();
$prefix = 'button_bar_';
foreach ($icons as $icon) {
$sprite = id(clone $template)
->setName('buttonbar-'.$icon)
->setTargetCSS('.buttonbar-'.$icon);
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
$sheet = $this->buildSheet('buttonbar', true);
$sheet->setScales($scales);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
public function buildProjectsSheet() {
$icons = $this->getDirectoryList('projects_1x');
$scales = array(
'1x' => 1,
'2x' => 2,
);
$template = id(new PhutilSprite())
->setSourceSize(50, 50);
$sprites = array();
$prefix = 'projects-';
foreach ($icons as $icon) {
$sprite = id(clone $template)
->setName($prefix.$icon)
->setTargetCSS('.'.$prefix.$icon);
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath('projects_'.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
$sheet = $this->buildSheet('projects', true);
$sheet->setScales($scales);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
public function buildPaymentsSheet() {
$icons = $this->getDirectoryList('payments_2x');
$scales = array(
'2x' => 1,
);
$template = id(new PhutilSprite())
->setSourceSize(60, 32);
$sprites = array();
$prefix = 'payments_';
foreach ($icons as $icon) {
$sprite = id(clone $template)
->setName('payments-'.$icon)
->setTargetCSS('.payments-'.$icon);
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
$sheet = $this->buildSheet('payments', true);
$sheet->setScales($scales);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
public function buildConpherenceSheet() {
$name = 'conpherence';
$icons = $this->getDirectoryList($name.'_1x');
$scales = array(
'1x' => 1,
'2x' => 2,
);
$template = id(new PhutilSprite())
->setSourceSize(32, 32);
$sprites = array();
foreach ($icons as $icon) {
$color = preg_match('/_on/', $icon) ? 'on' : 'off';
$prefix = $name.'_';
$sprite = id(clone $template)
->setName($prefix.$icon);
$tcss = array();
$tcss[] = '.'.$prefix.$icon;
if ($color == 'on') {
$class = str_replace('_on', '_off', $prefix.$icon);
$tcss[] = '.device-desktop .'.$class.':hover ';
}
$sprite->setTargetCSS(implode(', ', $tcss));
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
$sheet = $this->buildSheet($name, true);
$sheet->setScales($scales);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
public function buildDocsSheet() {
$icons = $this->getDirectoryList('docs_1x');
$scales = array(
'1x' => 1,
'2x' => 2,
);
$template = id(new PhutilSprite())
->setSourceSize(32, 32);
$sprites = array();
$prefix = 'docs_';
foreach ($icons as $icon) {
$sprite = id(clone $template)
->setName($prefix.$icon)
->setTargetCSS('.'.$prefix.$icon);
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
$sheet = $this->buildSheet('docs', true);
$sheet->setScales($scales);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
public function buildLoginSheet() {
$icons = $this->getDirectoryList('login_1x');
$scales = array(
'1x' => 1,
'2x' => 2,
);
$template = id(new PhutilSprite())
->setSourceSize(34, 34);
$sprites = array();
$prefix = 'login_';
foreach ($icons as $icon) {
$sprite = id(clone $template)
->setName('login-'.$icon)
->setTargetCSS('.login-'.$icon);
foreach ($scales as $scale_key => $scale) {
$path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
$sprite->setSourceFile($path, $scale);
}
$sprites[] = $sprite;
}
$sheet = $this->buildSheet('login', 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,
- 'menu-label' => 24,
'red-header' => 70,
'blue-header' => 70,
'green-header' => 70,
'yellow-header' => 70,
'grey-header' => 70,
'dark-grey-header' => 70,
'lightblue-header' => 240,
);
- $extra_css = array(
- 'dark-menu-label' =>
- ', .phabricator-dark-menu .phui-list-item-type-label',
- 'menu-label' =>
- ', .phabricator-side-menu .phui-list-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));
+ ->setTargetCSS('.gradient-'.$gradient);
$sprite->setSourceSize(4, idx($unusual_heights, $gradient, 26));
$sprites[] = $sprite;
}
$sheet = $this->buildSheet(
'gradient',
false,
- PhutilSpriteSheet::TYPE_REPEAT_X,
- ', .phabricator-dark-menu .phui-list-item-type-label, '.
- '.phabricator-side-menu .phui-list-item-type-label');
+ PhutilSpriteSheet::TYPE_REPEAT_X);
foreach ($sprites as $sprite) {
$sheet->addSprite($sprite);
}
return $sheet;
}
public function buildMainHeaderSheet() {
$gradients = $this->getDirectoryList('main_header');
$template = new PhutilSprite();
$sprites = array();
foreach ($gradients as $gradient) {
$path = $this->getPath('main_header/'.$gradient.'.png');
$sprite = id(clone $template)
->setName('main-header-'.$gradient)
->setSourceFile($path)
->setTargetCSS('.main-header-'.$gradient);
$sprite->setSourceSize(6, 44);
$sprites[] = $sprite;
}
$sheet = $this->buildSheet('main-header',
false,
PhutilSpriteSheet::TYPE_REPEAT_X);
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',
);
} else {
$scales = array(
'4x' => 1,
);
$variant_name = 'apps-xlarge';
$variant_short = '-xlarge';
$size_x = 56;
$size_y = 56;
$colors = array(
'dark' => 'dark',
);
}
$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 = '.apps-'.$app.'-'.$color.$variant_short;
if ($color == 'blue' && $variant_name == 'apps-large') {
$css .= ', .phabricator-crumb-view:hover .apps-'.$app.'-dark-large';
}
$sprite = id(clone $template)
->setName('apps-'.$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,
$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 = <<<EOCSS
@media
only screen and (min-device-pixel-ratio: 1.5),
only screen and (-webkit-min-device-pixel-ratio: 1.5) {
.sprite-{$name}{$extra_css} {
background-image: url(/rsrc/image/sprite-{$name}-X2.png);
background-size: {X}px {Y}px;
}
}
EOCSS;
}
$sheet->setSheetType($type);
$sheet->setCSSHeader(<<<EOCSS
/**
* @provides sprite-{$name}-css
* {$at}generated
*/
.sprite-{$name}{$extra_css} {
background-image: url(/rsrc/image/sprite-{$name}.png);
background-repeat: {$repeat_rule};
}
{$retina_rules}
EOCSS
);
return $sheet;
}
}
diff --git a/webroot/rsrc/css/aphront/phabricator-nav-view.css b/webroot/rsrc/css/aphront/phabricator-nav-view.css
index b6682c6f44..6aeb7bd00a 100644
--- a/webroot/rsrc/css/aphront/phabricator-nav-view.css
+++ b/webroot/rsrc/css/aphront/phabricator-nav-view.css
@@ -1,102 +1,91 @@
/**
* @provides phabricator-nav-view-css
*/
.jx-drag-col {
cursor: col-resize;
}
.phabricator-nav {
/* Force top margins in page content not to collapse with the top margin of
the navigation container by giving it padding. Then put it in the right
position by undoing the padding with a margin. */
padding-top: 1px;
margin-top: -1px;
}
.phabricator-nav-column-background {
position: fixed;
top: 0;
left: 0;
/* On the iPhone, scrolling down causes the revealed area to fill with white,
then draw with the texture after the action completes. Just make the
element extend off the bottom of the screen to prevent this. */
bottom: -480px;
- width: 205px;
- background: #303539;
- box-shadow: inset -3px 0 3px rgba(0, 0, 0, 0.5);
+ width: 204px;
+ background: rgba(205, 207, 211, 0.5);
+ border-right: 1px solid rgba(205, 207, 211, 1);
}
.phabricator-nav-column-background,
.phabricator-nav-local,
.phabricator-nav-drag {
display: none;
}
.device-desktop .has-local-nav .phabricator-nav-column-background,
.device-desktop .has-local-nav .phabricator-nav-local,
.device-desktop .has-local-nav .phabricator-nav-drag {
display: block;
}
.device .phabricator-side-menu-home .phabricator-nav-column-background,
.device .phabricator-side-menu-home .phabricator-nav-local {
display: block;
}
.phabricator-nav-local {
width: 205px;
position: absolute;
left: 0;
white-space: nowrap;
-
overflow-x: hidden;
overflow-y: auto;
}
.phabricator-nav-drag {
position: fixed;
top: 0;
bottom: 0;
left: 205px;
width: 7px;
cursor: col-resize;
background: #f5f5f5;
border-style: solid;
border-width: 0 1px 0 1px;
border-color: #fff #999c9e #fff #999c9e;
box-shadow: inset -1px 0px 1px rgba(0, 0, 0, 0.15);
background-image: url(/rsrc/image/divot.png);
background-position: center;
background-repeat: no-repeat;
}
.device-desktop .phabricator-standard-page-body .has-drag-nav .phabricator-nav-content {
margin-left: 212px;
}
.device-desktop .has-local-nav .phabricator-nav-content {
margin-left: 205px;
}
-.phabricator-side-menu-home .phabricator-nav-column-background,
-.phabricator-side-menu-home .phabricator-nav-local {
- width: 240px;
-}
-
-.device-desktop .phabricator-side-menu-home .phabricator-nav-content,
-.device-tablet .phabricator-side-menu-home .phabricator-nav-content {
- margin-left: 240px;
-}
-
.device-phone .phabricator-side-menu-home .phabricator-nav-content {
display: none;
}
.device-phone .phabricator-side-menu-home .phabricator-nav-column-background,
.device-phone .phabricator-side-menu-home .phabricator-nav-local {
width: 100%;
}
diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css
index 26a1db6812..ec53df1f28 100644
--- a/webroot/rsrc/css/application/base/main-menu-view.css
+++ b/webroot/rsrc/css/application/base/main-menu-view.css
@@ -1,438 +1,437 @@
/**
* @provides phabricator-main-menu-view
*/
/* - Main Menu -----------------------------------------------------------------
Main menu at the top of every page that has chrome. It reacts to resolution
changes in order to behave reasonably on tablets and phones.
*/
.phabricator-main-menu {
background: #2d3236;
background-repeat: repeat-x;
position: relative;
- box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.25);
min-height: 44px;
}
.device-desktop .phabricator-main-menu {
height: 44px;
padding-right: 4px;
}
.phabricator-main-menu a:hover {
text-decoration: none;
}
/* - Logo ----------------------------------------------------------------------
The "Phabricator" logo group in the main menu. On tablet and phone devices,
this shows a "reveal" button to expand/collapse the rest of the menu.
*/
.device-desktop .phabricator-main-menu-group-logo {
float: left;
}
.phabricator-main-menu-logo {
display: inline-block;
width: 149px;
height: 44px;
float: left;
margin-right: 6px;
padding-right: 6px;
padding-left: 6px;
}
.menu-logo-image {
position: absolute;
width: 149px;
height: 26px;
top: 9px;
}
.device-phone .phabricator-main-menu-logo {
margin-left: -45px;
}
.device .phabricator-main-menu-logo:hover {
background-color: transparent;
}
/* - Expand/Collapse Button ----------------------------------------------------
On phones, the menu switches to a vertical layout and uses a button to expand
or collapse the items.
*/
.phabricator-menu-button-icon {
width: 24px;
height: 24px;
float: left;
margin: 10px 10px 0 5px;
}
.phabricator-expand-application-menu,
.phabricator-expand-search-menu {
float: right;
}
.device-desktop .phabricator-main-menu-search-button,
.device-desktop .phabricator-main-menu-expand-button {
display: none;
}
/* - Search --------------------------------------------------------------------
The main search input in the menu bar.
*/
.device-desktop .phabricator-main-menu-search {
width: 220px;
}
.device .phabricator-main-menu-search {
height: 40px;
}
.phabricator-main-menu-search-container {
padding: 9px 0 10px 0;
position: relative;
height: 24px;
margin: 0 8px;
}
.phabricator-main-menu-search-target {
position: absolute;
top: 46px;
}
.device-desktop .phabricator-main-menu-search-target {
width: 320px;
margin-left: -150px;
}
.device .phabricator-main-menu-search-target {
width: 100%;
margin-left: -25px;
}
.device .phabricator-main-menu-search-container {
padding: 4px 0;
}
.phabricator-main-menu .phabricator-main-menu-search input {
outline: 0;
margin: 0;
box-shadow: none;
transition: none;
color: {$lightgreytext};
width: 100%;
right: 0;
position: absolute;
font-size: 13px;
border: 1px solid #333;
border-radius: 12px;
background-color: #222;
opacity: .8;
height: 26px;
line-height: 12px;
box-shadow: 0px 1px 1px rgba(128, 128, 128, 0.25);
padding: 6px 32px 6px 10px;
}
.phabricator-main-menu.main-header-dark .phabricator-main-menu-search input {
background-color: #555;
}
.device .phabricator-main-menu-search input {
height: 30px;
font-size: 15px;
border-radius: 15px;
}
.phabricator-main-menu .phabricator-main-menu-search input:focus {
background: #fff;
opacity: 1;
color: #333;
border-color: #e7e7e7;
box-shadow: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
}
.phabricator-main-menu-search input.jx-typeahead-placeholder {
color: #fff;
}
.phabricator-main-menu-search button {
position: absolute;
color: transparent;
background: transparent 5px 6px url(/rsrc/image/search-white.png) no-repeat;
border: none;
outline: none;
box-shadow: none;
text-shadow: none;
min-width: 0;
height: 20px;
width: 20px;
top: 10px;
right: 6px;
}
.device .phabricator-main-menu-search button {
top: 7px;
}
.phabricator-main-menu-search-target div.jx-typeahead-results {
background: #ffffff;
word-wrap: break-word;
overflow-y: auto;
box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.5);
border: 2px solid #33393d;
border-radius: 3px;
margin-left: 40px;
}
.phabricator-main-search-typeahead-result {
display: block;
padding: 6px 12px 6px 46px;
background-position: 12px 9px;
background-size: 25px 25px;
background-repeat: no-repeat;
}
.phabricator-main-search-typeahead-result .result-name {
display: block;
font-size: 12px;
font-weight: bold;
color: #333;
}
.phabricator-main-search-typeahead-result .result-type {
color: {$lightgreytext};
font-size: 11px;
font-weight: normal;
}
.device .phabricator-application-menu-expanded.phabricator-search-menu-expanded
.phabricator-search-menu {
padding: 0;
}
/* - Alert ---------------------------------------------------------------------
Alert menus are like icon menus but don't obey collapse rules.
*/
.phabricator-main-menu-alerts {
display: inline-block;
border-radius: 15px;
float: left;
background: rgba(0,0,0,.5);
height: 20px;
padding: 2px 10px 3px 8px;
margin-top: 10px;
}
.phabricator-main-menu-alert-icon,
.phabricator-main-menu-message-icon {
width: 18px;
height: 18px;
display: block;
float: left;
margin: 2px 0 0 0;
}
.alert-notifications .phabricator-main-menu-message-icon {
margin: 2px 0 0 6px;
}
.phabricator-main-menu-alert-count,
.phabricator-main-menu-message-count {
font-weight: bold;
line-height: 20px;
color: #ffffff;
text-align: center;
display: none;
float: left;
margin-left: 3px;
}
.alert-unread .phabricator-main-menu-alert-count,
.message-unread .phabricator-main-menu-message-count {
display: block;
}
/* - Dark Menu -----------------------------------------------------------------
Styles shared between the "core" menu (left button on mobile) and
"application" menu (right button on mobile). These styles give the menu a
white-on-black appearance.
*/
.device .phabricator-dark-menu,
.device .phabricator-dark-menu a.phui-list-item-href {
color: #fff;
}
.device .phabricator-dark-menu .phui-list-item-type-label {
text-transform: uppercase;
font-size: 12px;
background-color: #151719;
padding: 5px 0;
display: block;
font-weight: bold;
}
.device .phabricator-dark-menu .phui-list-item-href {
border-width: 1px 0;
border-style: solid;
border-color: #34373b transparent #282c2d;
background-image: url(/rsrc/image/texture/dark-menu.png);
padding: 4px 0;
display: block;
}
/* - Core Menu -----------------------------------------------------------------
Styles unique to the core menu (left button on mobile).
*/
.phabricator-core-menu-profile-image {
background-size: 28px 28px;
}
.device .phabricator-search-menu {
display: none;
}
.device-desktop .phabricator-search-menu {
float: right;
}
.device .phabricator-search-menu-expanded .phabricator-search-menu {
display: block;
padding-top: 44px;
}
.device .phabricator-dark-menu .phui-list-item-type-link {
font-size: 15px;
min-height: 30px;
line-height: 28px;
background: #000;
}
.device .phui-list-item-type-link
.phabricator-core-menu-icon + .phui-list-item-name {
margin-left: 30px;
}
.device-desktop .phabricator-application-menu {
float: right;
}
.device-desktop .phabricator-application-menu .phui-list-item-view,
.device-desktop .phabricator-application-menu .phui-list-item-name {
display: none;
}
.phabricator-application-menu .phui-list-item-icon {
display: none;
}
.device-desktop .phabricator-application-menu .phui-list-item-view.core-menu-item {
display: block;
}
.device-desktop .main-header-dark .phabricator-application-menu
.core-menu-item.phui-list-item-view:hover,
.device-desktop .main-header-dark .phabricator-main-menu-logo:hover {
background-color: rgba(0,0,0,.6);
}
.device-desktop .phabricator-application-menu
.core-menu-item.phui-list-item-view:hover,
.device-desktop .phabricator-main-menu-logo:hover {
background-color: rgba(0,0,0,.3);
box-shadow: inset 0 5px 10px rgba(0,0,0,0.5);
border-radius: 3px;
}
.device-desktop .phabricator-application-menu .phui-list-item-view {
float: left;
position: relative;
min-width: 36px;
height: 36px;
margin-top: 4px;
}
.device-desktop .phabricator-core-menu-icon {
top: 5px;
left: 4px;
}
.device .phabricator-core-menu-icon {
left: 6px;
}
.phabricator-core-menu-icon {
position: absolute;
display: block;
width: 28px;
height: 28px;
}
.phabricator-main-menu-dropdown {
position: absolute;
background: #fff;
top: 38px;
padding: 2px;
border: 1px solid {$lightblueborder};
border-bottom: 1px solid {$blueborder};
box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.3);
}
/* - Application Menu ----------------------------------------------------------
Styles unique to the application menu (right button on mobile).
*/
.device .phabricator-application-menu-expanded .phabricator-application-menu {
display: block;
padding-top: 44px;
}
.device .phabricator-application-menu,
.device-desktop .phabricator-dark-menu .phui-list-item-type-label {
display: none;
}
.phabricator-application-menu .phui-list-item-name {
padding-left: 12px;
}
/* - Print ---------------------------------------------------------------------
*/
!print .phabricator-main-menu {
display: none;
}
diff --git a/webroot/rsrc/css/application/base/phabricator-application-launch-view.css b/webroot/rsrc/css/application/base/phabricator-application-launch-view.css
index 39843d4eb2..28d82b1a86 100644
--- a/webroot/rsrc/css/application/base/phabricator-application-launch-view.css
+++ b/webroot/rsrc/css/application/base/phabricator-application-launch-view.css
@@ -1,131 +1,110 @@
/**
* @provides phabricator-application-launch-view-css
*/
/* - Application List ----------------------------------------------------------
Spacing container for the list of large application buttons.
*/
.application-tile-group {
overflow: hidden;
}
/* - Application Launch Button -------------------------------------------------
Spacing container for the list of large application buttons.
*/
a.phabricator-application-launch-container,
div.phabricator-application-launch-container {
display: block;
float: left;
- width: 78px;
- height: 66px;
overflow: hidden;
position: relative;
- border: 1px solid #1c1e22;
text-decoration: none;
-webkit-font-smoothing: antialiased;
-}
-
-a.application-tile-full {
width: 100%;
- height: 48px;
- border-bottom: none;
- border-left: none;
- border-right: none;
+ height: 46px;
}
.device-phone div.phabricator-application-launch-container {
display: none;
}
.phabricator-application-launch-icon {
display: block;
position: absolute;
- left: 25px;
- top: 10px;
width: 28px;
height: 28px;
-}
-
-.application-tile-full .phabricator-application-launch-icon {
- top: 10px;
- left: 10px;
+ top: 8px;
+ left: 8px;
}
.device-desktop a.phabricator-application-launch-container:hover {
- background-color: #1e2225;
+ background-color: #C5C8CF;
text-decoration: none;
}
.phabricator-application-launch-name {
display: block;
- margin-top: 42px;
font-weight: bold;
- font-size: 11px;
- text-align: center;
- color: #ffffff;
- text-shadow: 0px 1px 1px #000000;
-}
-
-.application-tile-full .phabricator-application-launch-name {
+ color: {$darkbluetext};
font-size: 13px;
- margin-top: 9px;
- text-align: left;
- margin-left: 48px;
-
+ margin-top: 7px;
+ margin-left: 44px;
+ text-shadow: 0 1px 2px rgba(255, 255, 255, 0.9);
}
-.application-tile-full .phabricator-application-launch-description {
- color: #bfbfbf;
+.phabricator-application-launch-description {
+ color: {$darkbluetext};
font-size: 11px;
margin-top: 24px;
- margin-left: 48px;
+ margin-left: 44px;
+ text-shadow: 0 1px 2px rgba(255, 255, 255, 0.9);
}
.phabricator-application-beta {
position: absolute;
top: 4px;
left: 4px;
- color: #fff;
+ color: {$bluetext};
font-size: 11px;
}
.phabricator-application-launch-attention {
position: absolute;
top: 6px;
right: 4px;
- color: white;
+ color: {$darkbluetext};
font-weight: bold;
font-size: 11px;
}
.phabricator-application-attention-count {
- background-color: #1e2225;
- color: {$yellow};
+ background-color: rgba(0,0,0,.1);
+ color: {$orange};
border-radius: 2px;
padding: 1px 6px 2px;
}
.phabricator-application-warning-count {
- background-color: #1e2225;
+ background-color: rgba(0,0,0,.1);
border-radius: 2px;
padding: 1px 6px 2px;
}
.phabricator-application-attention-count + .phabricator-application-warning-count {
margin-left: 2px;
top: 8px;
}
.application-tile-full .phabricator-application-launch-attention {
top: 17px;
right: 8px;
}
diff --git a/webroot/rsrc/css/layout/phabricator-crumbs-view.css b/webroot/rsrc/css/layout/phabricator-crumbs-view.css
index 6ed17806b2..4b8a6d7faf 100644
--- a/webroot/rsrc/css/layout/phabricator-crumbs-view.css
+++ b/webroot/rsrc/css/layout/phabricator-crumbs-view.css
@@ -1,114 +1,112 @@
/**
* @provides phabricator-crumbs-view-css
*/
.phabricator-crumbs-view {
- background-color: #d8dce2;
+ background-color: #ebecee;
+ background-image: none !important;
height: 31px;
overflow: hidden;
vertical-align: top;
- border-bottom: 1px solid #aaa;
-
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
-
+ border-bottom: 1px solid rgba(205, 207, 211, 1);
/* TODO: Position this over the slider for Differential's file tree view.
Remove this once that gets sorted out. */
position: relative;
}
.phabricator-crumbs-view,
.phabricator-crumbs-view a.phabricator-crumb-view,
.phabricator-crumbs-view a.phabricator-crumbs-action {
color: {$darkgreytext};
font-weight: bold;
text-decoration: none;
text-shadow: 0 1px 2px rgba(255, 255, 255, 0.9);
}
.phabricator-crumbs-view a.phabricator-crumbs-action-disabled {
color: {$lightgreytext};
}
.phabricator-crumbs-action.phabricator-crumbs-action-menu {
display: none;
}
.device .phabricator-crumbs-action.phabricator-crumbs-action-menu {
display: inline-block;
}
.device .phabricator-crumbs-action-menu-open {
background: rgba(0,0,0,.1);
}
.phabricator-crumbs-view + .phui-header-shell {
border-top: none;
}
.phabricator-crumbs-view a:hover {
text-decoration: underline;
}
.phabricator-crumb-view {
display: inline-block;
height: 31px;
line-height: 31px;
}
.device-phone .phabricator-crumb-view {
display: none;
}
.device-phone .phabricator-crumb-view.phabricator-last-crumb,
.device-phone .phabricator-crumb-view.phabricator-crumb-has-icon {
display: inline-block;
}
.phabricator-crumb-icon {
display: inline-block;
width: 28px;
height: 28px;
margin: 2px 2px 0 13px;
vertical-align: top;
}
.device-phone .phabricator-crumb-icon {
margin-left: 7px;
}
.phabricator-crumbs-actions {
float: right;
white-space: nowrap;
}
.phabricator-crumbs-action {
display: inline-block;
height: 17px;
padding: 8px 14px 8px 24px;
position: relative;
}
.device-phone a.phabricator-crumbs-action {
padding: 7px;
border-left: 1px solid #ccc;
}
.device-phone .phabricator-crumbs-action-name {
display: none;
}
a.phabricator-crumbs-action .phui-icon-view {
margin-right: 5px;
}
.device-phone a.phabricator-crumbs-action .phui-icon-view {
margin-left: 5px;
}
.phabricator-crumb-divider {
display: inline-block;
width: 9px;
height: 31px;
vertical-align: top;
margin: 0 9px;
}
diff --git a/webroot/rsrc/css/layout/phabricator-side-menu-view.css b/webroot/rsrc/css/layout/phabricator-side-menu-view.css
index 77fa77a2b4..d369d7abde 100644
--- a/webroot/rsrc/css/layout/phabricator-side-menu-view.css
+++ b/webroot/rsrc/css/layout/phabricator-side-menu-view.css
@@ -1,58 +1,42 @@
/**
* @provides phabricator-side-menu-view-css
*/
.phabricator-side-menu .phui-list-item-view {
display: block;
white-space: nowrap;
text-decoration: none;
font-size: 13px;
+ -webkit-font-smoothing: antialiased;
}
.phabricator-side-menu .phui-list-item-href {
display: block;
padding: 6px 8px 6px 24px;
- color: #e1e2e5;
- text-shadow: rgba(0, 0, 0, 1) 0px 1px 1px;
+ color: {$darkbluetext};
}
.phabricator-side-menu .phui-list-item-selected,
.device-desktop .phui-side-menu
.phui-list-item-selected.phui-list-item-href:hover {
- background-color: #305c85;
- color: #fff;
+ background-color: #C5C8CF;
+ border-left: 4px solid {$blue};
+}
+
+.phabricator-side-menu .phui-list-item-selected .phui-list-item-href {
+ padding-left: 20px;
}
.phabricator-side-menu .phui-list-item-type-label {
padding: 6px 8px 4px 12px;
- color: #f7f7f7;
+ color: {$darkbluetext};
text-transform: uppercase;
- font-size: 11px;
+ font-size: 12px;
font-weight: bold;
border-style: solid;
- background-color: #000;
-}
-
-.phabricator-dark-menu .phui-list-item-type-button,
-.phabricator-side-menu .phui-list-item-type-button {
- width: 50%;
- padding: 5px 8px;
- display: block;
- border-radius: 4px;
- border: 2px solid #000;
- margin: 10px auto;
- color: #fff;
- font-size: 14px;
- text-shadow: 0px 1px 1px #000000;
- font-weight: bold;
- text-align: center;
-}
-
-.phabricator-side-menu .phui-list-item-type-button:hover {
- background-color: #1e2225;
}
.device-desktop .phabricator-side-menu a.phui-list-item-href:hover {
text-decoration: none;
- background-color: #1e2225;
+ background-color: #C5C8CF;
}
diff --git a/webroot/rsrc/css/sprite-gradient.css b/webroot/rsrc/css/sprite-gradient.css
index d89ad9a890..39a3b28d96 100644
--- a/webroot/rsrc/css/sprite-gradient.css
+++ b/webroot/rsrc/css/sprite-gradient.css
@@ -1,52 +1,44 @@
/**
* @provides sprite-gradient-css
* @generated
*/
-.sprite-gradient, .phabricator-dark-menu .phui-list-item-type-label, .phabricator-side-menu .phui-list-item-type-label {
+.sprite-gradient {
background-image: url(/rsrc/image/sprite-gradient.png);
background-repeat: repeat-x;
}
.gradient-blue-header {
- background-position: 0px -83px;
+ background-position: 0px -32px;
}
.gradient-breadcrumbs {
- background-position: 0px -51px;
+ background-position: 0px 0px;
}
.gradient-dark-grey-header {
- background-position: 0px -154px;
-}
-
-.gradient-dark-menu-label, .phabricator-dark-menu .phui-list-item-type-label {
- background-position: 0px -25px;
+ background-position: 0px -103px;
}
.gradient-green-header {
- background-position: 0px -225px;
+ background-position: 0px -174px;
}
.gradient-grey-header {
- background-position: 0px -296px;
+ background-position: 0px -245px;
}
.gradient-lightblue-header {
- background-position: 0px -509px;
-}
-
-.gradient-menu-label, .phabricator-side-menu .phui-list-item-type-label {
- background-position: 0px 0px;
+ background-position: 0px -458px;
}
.gradient-red-header {
- background-position: 0px -367px;
+ background-position: 0px -316px;
}
.gradient-yellow-header {
- background-position: 0px -438px;
+ background-position: 0px -387px;
}
diff --git a/webroot/rsrc/image/sprite-gradient.png b/webroot/rsrc/image/sprite-gradient.png
index a102ae794e..c37f1eeb45 100644
Binary files a/webroot/rsrc/image/sprite-gradient.png and b/webroot/rsrc/image/sprite-gradient.png differ

File Metadata

Mime Type
text/x-diff
Expires
Mon, Jul 28, 1:00 PM (1 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
186852
Default Alt Text
(54 KB)

Event Timeline