Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php
index f0e41ad9f9..eca3dd00db 100644
--- a/src/view/page/PhabricatorStandardPageView.php
+++ b/src/view/page/PhabricatorStandardPageView.php
@@ -1,431 +1,431 @@
<?php
/**
* This is a standard Phabricator page with menus, Javelin, DarkConsole, and
* basic styles.
*
*/
final class PhabricatorStandardPageView extends PhabricatorBarePageView {
private $baseURI;
private $applicationName;
private $glyph;
private $menuContent;
private $showChrome = true;
private $disableConsole;
private $searchDefaultScope;
private $pageObjects = array();
private $applicationMenu;
public function setApplicationMenu(PhabricatorMenuView $application_menu) {
$this->applicationMenu = $application_menu;
return $this;
}
public function getApplicationMenu() {
return $this->applicationMenu;
}
public function setApplicationName($application_name) {
$this->applicationName = $application_name;
return $this;
}
public function setDisableConsole($disable) {
$this->disableConsole = $disable;
return $this;
}
public function getApplicationName() {
return $this->applicationName;
}
public function setBaseURI($base_uri) {
$this->baseURI = $base_uri;
return $this;
}
public function getBaseURI() {
return $this->baseURI;
}
public function setShowChrome($show_chrome) {
$this->showChrome = $show_chrome;
return $this;
}
public function getShowChrome() {
return $this->showChrome;
}
public function setSearchDefaultScope($search_default_scope) {
$this->searchDefaultScope = $search_default_scope;
return $this;
}
public function getSearchDefaultScope() {
return $this->searchDefaultScope;
}
public function appendPageObjects(array $objs) {
foreach ($objs as $obj) {
$this->pageObjects[] = $obj;
}
}
public function getTitle() {
$use_glyph = true;
$request = $this->getRequest();
if ($request) {
$user = $request->getUser();
if ($user && $user->loadPreferences()->getPreference(
PhabricatorUserPreferences::PREFERENCE_TITLES) !== 'glyph') {
$use_glyph = false;
}
}
return ($use_glyph ?
$this->getGlyph() : '['.$this->getApplicationName().']').
' '.parent::getTitle();
}
protected function willRenderPage() {
parent::willRenderPage();
if (!$this->getRequest()) {
throw new Exception(
"You must set the Request to render a PhabricatorStandardPageView.");
}
$console = $this->getConsole();
require_celerity_resource('phabricator-core-css');
require_celerity_resource('autosprite-css');
require_celerity_resource('phabricator-core-buttons-css');
require_celerity_resource('sprite-gradient-css');
require_celerity_resource('phabricator-standard-page-view');
Javelin::initBehavior('workflow', array());
$current_token = null;
$request = $this->getRequest();
if ($request) {
$user = $request->getUser();
if ($user) {
$current_token = $user->getCSRFToken();
$download_form = phabricator_render_form_magic($user);
$default_img_uri =
PhabricatorEnv::getCDNURI(
'/rsrc/image/icon/fatcow/document_black.png'
);
Javelin::initBehavior(
'lightbox-attachments',
array(
'defaultImageUri' => $default_img_uri,
'downloadForm' => $download_form,
));
}
}
Javelin::initBehavior('toggle-class', array());
Javelin::initBehavior('konami', array());
Javelin::initBehavior(
'refresh-csrf',
array(
'tokenName' => AphrontRequest::getCSRFTokenName(),
'header' => AphrontRequest::getCSRFHeaderName(),
'current' => $current_token,
));
Javelin::initBehavior('device', array('id' => 'base-page'));
if ($console) {
require_celerity_resource('aphront-dark-console-css');
Javelin::initBehavior(
'dark-console',
array(
'uri' => '/~/',
'request_uri' => $request ? (string) $request->getRequestURI() : '/',
));
// Change this to initBehavior when there is some behavior to initialize
require_celerity_resource('javelin-behavior-error-log');
}
$menu = id(new PhabricatorMainMenuView())
->setUser($request->getUser())
->setController($this->getController())
->setDefaultSearchScope($this->getSearchDefaultScope());
if ($this->getApplicationMenu()) {
$menu->setApplicationMenu($this->getApplicationMenu());
}
$this->menuContent = $menu->render();
}
protected function getHead() {
$monospaced = PhabricatorEnv::getEnvConfig('style.monospace');
$request = $this->getRequest();
if ($request) {
$user = $request->getUser();
if ($user) {
$monospaced = nonempty(
$user->loadPreferences()->getPreference(
PhabricatorUserPreferences::PREFERENCE_MONOSPACED),
$monospaced);
}
}
$response = CelerityAPI::getStaticResourceResponse();
$head = array(
parent::getHead(),
'<style type="text/css">'.
'.PhabricatorMonospaced { font: '.$monospaced.'; }'.
'</style>',
$response->renderSingleResource('javelin-magical-init'),
);
return implode("\n", $head);
}
public function setGlyph($glyph) {
$this->glyph = $glyph;
return $this;
}
public function getGlyph() {
return $this->glyph;
}
protected function willSendResponse($response) {
$response = parent::willSendResponse($response);
$console = $this->getRequest()->getApplicationConfiguration()->getConsole();
if ($console) {
$response = str_replace(
'<darkconsole />',
$console->render($this->getRequest()),
$response);
}
return $response;
}
protected function getBody() {
$console = $this->getConsole();
$login_stuff = null;
$request = $this->getRequest();
$user = null;
if ($request) {
$user = $request->getUser();
// NOTE: user may not be set here if we caught an exception early
// in the execution workflow.
if ($user && $user->getPHID()) {
$login_stuff =
phutil_render_tag(
'a',
array(
'href' => '/p/'.$user->getUsername().'/',
),
phutil_escape_html($user->getUsername())).
' &middot; '.
'<a href="/settings/">Settings</a>'.
' &middot; '.
phabricator_render_form(
$user,
array(
'action' => '/search/',
'method' => 'post',
'style' => 'display: inline',
),
'<div class="menu-section menu-section-search">'.
'<div class="menu-search-container">'.
'<input type="text" name="query" id="standard-search-box" />'.
'<button id="standard-search-button">Search</button>'.
'</div>'.
'</div>'.
' in '.
AphrontFormSelectControl::renderSelectTag(
$this->getSearchDefaultScope(),
PhabricatorSearchScope::getScopeOptions(),
array(
'name' => 'scope',
)).
' '.
'<button>Search</button>');
}
}
$header_chrome = null;
$footer_chrome = null;
if ($this->getShowChrome()) {
$header_chrome = $this->menuContent;
if (!$this->getDeviceReady()) {
$footer_chrome = $this->renderFooter();
}
}
$developer_warning = null;
if (PhabricatorEnv::getEnvConfig('phabricator.show-error-callout') &&
DarkConsoleErrorLogPluginAPI::getErrors()) {
$developer_warning =
'<div class="aphront-developer-error-callout">'.
'This page raised PHP errors. Find them in DarkConsole '.
'or the error log.'.
'</div>';
}
$agent = idx($_SERVER, 'HTTP_USER_AGENT');
// Try to guess the device resolution based on UA strings to avoid a flash
// of incorrectly-styled content.
$device_guess = 'device-desktop';
- if (preg_match('/iPhone|iPod/', $agent)) {
- $device_guess = 'device-phone';
- } else if (preg_match('/iPad/', $agent)) {
- $device_guess = 'device-tablet';
+ 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.
'<div class="phabricator-standard-page-body">'.
($console ? '<darkconsole />' : null).
$developer_warning.
parent::getBody().
'<div style="clear: both;"></div>'.
'</div>').
$footer_chrome;
}
protected function getTail() {
$request = $this->getRequest();
$user = $request->getUser();
$container = null;
if (PhabricatorEnv::getEnvConfig('notification.enabled') &&
$user->isLoggedIn()) {
$aphlict_object_id = celerity_generate_unique_node_id();
$aphlict_container_id = celerity_generate_unique_node_id();
$client_uri = PhabricatorEnv::getEnvConfig('notification.client-uri');
$client_uri = new PhutilURI($client_uri);
if ($client_uri->getDomain() == 'localhost') {
$this_host = $this->getRequest()->getHost();
$this_host = new PhutilURI('http://'.$this_host.'/');
$client_uri->setDomain($this_host->getDomain());
}
$enable_debug = PhabricatorEnv::getEnvConfig('notification.debug');
Javelin::initBehavior(
'aphlict-listen',
array(
'id' => $aphlict_object_id,
'containerID' => $aphlict_container_id,
'server' => $client_uri->getDomain(),
'port' => $client_uri->getPort(),
'debug' => $enable_debug,
'pageObjects' => array_fill_keys($this->pageObjects, true),
));
$container = phutil_render_tag(
'div',
array(
'id' => $aphlict_container_id,
'style' => 'position: absolute; width: 0; height: 0;',
),
'');
}
$response = CelerityAPI::getStaticResourceResponse();
$tail = array(
parent::getTail(),
$container,
$response->renderHTMLFooter(),
);
return implode("\n", $tail);
}
protected function getBodyClasses() {
$classes = array();
if (!$this->getShowChrome()) {
$classes[] = 'phabricator-chromeless-page';
}
return implode(' ', $classes);
}
private function getConsole() {
if ($this->disableConsole) {
return null;
}
return $this->getRequest()->getApplicationConfiguration()->getConsole();
}
public function renderFooter() {
$console = $this->getConsole();
$foot_links = array();
$version = PhabricatorEnv::getEnvConfig('phabricator.version');
$foot_links[] =
'<a href="http://phabricator.org/">Phabricator</a> '.
phutil_escape_html($version);
$foot_links[] =
'<a href="https://secure.phabricator.com/maniphest/task/create/">'.
'Report a Bug'.
'</a>';
if (PhabricatorEnv::getEnvConfig('darkconsole.enabled') &&
!PhabricatorEnv::getEnvConfig('darkconsole.always-on')) {
if ($console) {
$link = javelin_render_tag(
'a',
array(
'href' => '/~/',
'sigil' => 'workflow',
),
'Disable DarkConsole');
} else {
$link = javelin_render_tag(
'a',
array(
'href' => '/~/',
'sigil' => 'workflow',
),
'Enable DarkConsole');
}
$foot_links[] = $link;
}
$foot_links = implode(' &middot; ', $foot_links);
return
'<div class="phabricator-page-foot">'.
$foot_links.
'</div>';
}
}
diff --git a/webroot/rsrc/css/aphront/phabricator-nav-view.css b/webroot/rsrc/css/aphront/phabricator-nav-view.css
index 7288b7fecf..29ac93ed51 100644
--- a/webroot/rsrc/css/aphront/phabricator-nav-view.css
+++ b/webroot/rsrc/css/aphront/phabricator-nav-view.css
@@ -1,112 +1,105 @@
/**
* @provides phabricator-nav-view-css
*/
.jx-drag-col {
cursor: col-resize;
}
.phabricator-nav-col {
position: fixed;
top: 44px;
left: 0;
bottom: 0;
overflow-y: auto;
overflow-x: hidden;
white-space: nowrap;
z-index: 3;
}
.has-crumbs .phabricator-nav-col {
top: 76px;
}
.phabricator-nav-local {
width: 179px;
background: #ececec;
border-right: 1px solid #999c9e;
box-shadow: inset -3px 0 4px rgba(0, 0, 0, 0.05);
background-image: url(/rsrc/image/menu_texture.png);
}
-.device-tablet .phabricator-nav-local,
-.device-phone .phabricator-nav-local {
+.device .phabricator-nav-local {
display: none;
}
.phabricator-nav-drag {
position: fixed;
top: 0;
left: 179px;
width: 7px;
bottom: 0;
z-index: 4;
cursor: col-resize;
background: #f5f5f5;
border-style: solid;
border-width: 0 1px 0 1px;
border-color: #fff #999c9e #fff #999c9e;
box-shadow: inset -1px 0px 1px rgba(0, 0, 0, 0.15);
background-image: url(/rsrc/image/divot.png);
background-position: center;
background-repeat: no-repeat;
}
-.device-tablet .phabricator-nav-drag,
-.device-phone .phabricator-nav-drag {
+.device .phabricator-nav-drag {
display: none;
}
.has-local-nav .phabricator-nav-content {
margin-left: 180px;
}
.device-desktop .has-local-nav .phabricator-nav-content {
margin-left: 178px;
}
.device-desktop .local-nav-collapsed .phabricator-nav-local {
width: 0px !important;
}
.device-desktop .local-nav-collapsed .phabricator-nav-drag {
display: none;
}
.device-desktop .local-nav-collapsed .phabricator-nav-content {
margin-left: 2.5em !important;
}
-.device-tablet .phabricator-nav-col,
-.device-phone .phabricator-nav-col {
+.device .phabricator-nav-col {
position: absolute;
top: 0px;
}
-.device-tablet .phabricator-nav-local,
-.device-phone .phabricator-nav-local {
+.device .phabricator-nav-local {
left: -300px;
}
-.device-tablet .phabricator-nav,
-.device-phone .phabricator-nav {
+.device .phabricator-nav {
overflow-x: hidden;
position: relative;
}
-.device-tablet .phabricator-nav-content,
-.device-phone .phabricator-nav-content {
+.device .phabricator-nav-content {
width: 100%;
}
-.device-tablet .phabricator-nav-content,
-.device-phone .phabricator-nav-content {
+.device .phabricator-nav-content {
margin-left: 0;
position: relative;
}
diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css
index 035eb5636c..190462c1d9 100644
--- a/webroot/rsrc/css/application/base/main-menu-view.css
+++ b/webroot/rsrc/css/application/base/main-menu-view.css
@@ -1,455 +1,435 @@
<<</**
* @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-image: url(/rsrc/image/main_texture.png);
background-repeat: repeat-x;
position: relative;
box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.25);
z-index: 6;
min-height: 44px;
}
.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;
height: 44px;
width: 170px;
margin-right: 12px;
background: 6px 9px url(/rsrc/image/header_logo.png) no-repeat;
}
+.device .phabricator-main-menu-logo {
+ display: none;
+}
+
/* - Expand/Collapse Button ----------------------------------------------------
On phones, the menu switches to a vertical layout and uses a button to expand
or collapse the items.
*/
.phabricator-main-menu-expand-button {
position: absolute;
top: 7px;
display: block;
width: 40px;
height: 28px;
background-color: #22292d;
border-radius: 6px;
border: 1px solid #111111;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1),
0 1px 0 rgba(255, 255, 255, 0.075);
}
.phabricator-menu-button-icon {
position: absolute;
width: 24px;
height: 20px;
top: 5px;
left: 8px;
}
.phabricator-expand-core-menu {
left: 10px;
}
.phabricator-expand-application-menu {
right: 10px;
}
.device-desktop .phabricator-main-menu-expand-button {
display: none;
}
-.device-tablet .phabricator-main-menu-expand-button,
-.device-phone .phabricator-main-menu-expand-button {
+.device .phabricator-main-menu-expand-button {
display: block;
}
.phabricator-core-menu-expanded .phabricator-expand-core-menu,
.phabricator-application-menu-expanded .phabricator-expand-application-menu {
background-color: #55595d;
}
/* - Search --------------------------------------------------------------------
The main search input in the menu bar.
*/
.device-desktop .phabricator-main-menu-search {
width: 220px;
}
.phabricator-main-menu-search-container {
padding: 10px 0;
position: relative;
height: 24px;
}
.phabricator-main-menu-search-target {
position: absolute;
top: 46px;
}
.device-desktop .phabricator-main-menu-search-target {
width: 320px;
margin-left: -150px;
}
-.device-tablet .phabricator-main-menu-search-target,
-.device-phone .phabricator-main-menu-search-target {
+.device .phabricator-main-menu-search-target {
width: 100%;
margin-left: -25px;
}
.device-desktop .phabricator-main-menu-search-container {
margin: 0 8px 0 50px;
}
-.device-tablet .phabricator-main-menu-search-container,
-.device-phone .phabricator-main-menu-search-container {
+.device .phabricator-main-menu-search-container {
margin: 0 18px 0 60px;
}
.phabricator-main-menu-search input {
outline: 0;
margin: 0;
width: 100%;
right: 0;
position: absolute;
border: 1px solid #333333;
border-radius: 12px;
background: #555555;
height: 12px;
line-height: 12px;
box-shadow: 0px 1px 1px rgba(128, 128, 128, 0.25);
padding: 6px 32px 6px 10px;
}
.phabricator-main-menu-search input:focus {
background: #c9c9c9;
}
.phabricator-main-menu-search input.jx-typeahead-placeholder {
color: #999999;
}
.phabricator-main-menu-search button {
position: absolute;
color: transparent;
background: transparent 5px 6px url(/rsrc/image/search.png) no-repeat;
border: none;
outline: none;
box-shadow: none;
text-shadow: none;
min-width: 0;
height: 20px;
width: 20px;
top: 11px;
right: 6px;
}
.phabricator-main-menu-search-target div.jx-typeahead-results {
border-radius: 4px;
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.35);
border: 1px solid #33393d;
}
.phabricator-main-menu-search-target div.jx-typeahead-results a.jx-result {
border: 0;
}
.phabricator-main-menu-search-target div.jx-typeahead-results a.focused,
.phabricator-main-menu-search-target div.jx-typeahead-results a:hover {
background: #3875d7;
}
.phabricator-main-search-typeahead-result {
display: block;
padding: 4px 4px 4px 38px;
background-position: 4px 4px;
background-size: 25px 25px;
background-repeat: no-repeat;
}
.phabricator-main-search-typeahead-result .result-name {
display: block;
font-weight: bold;
color: #444444;
}
.focused .phabricator-main-search-typeahead-result .result-name,
a:hover .phabricator-main-search-typeahead-result .result-name {
color: #eeeeee;
}
.phabricator-main-search-typeahead-result .result-type {
color: #888888;
}
.focused .phabricator-main-search-typeahead-result .result-type,
a:hover .phabricator-main-search-typeahead-result .result-type {
color: #dddddd;
}
/* - Alert ---------------------------------------------------------------------
Alert menus are like icon menus but don't obey collapse rules.
*/
.device-desktop .phabricator-main-menu-alerts {
display: inline-block;
}
-.device-tablet .phabricator-main-menu-alerts,
-.device-phone .phabricator-main-menu-alerts {
+.device .phabricator-main-menu-alerts {
position: absolute;
left: 60px;
right: 60px;
top: 10px;
height: 34px;
text-align: center;
}
.phabricator-main-menu-alert-bubble {
display: inline-block;
position: relative;
width: 26px;
height: 26px;
margin-bottom: 9px;
}
.phabricator-main-menu-alert-bubble.alert-unread {
width: 46px;
}
.phabricator-main-menu-alert-icon {
position: absolute;
width: 14px;
height: 14px;
top: 5px;
left: 6px;
}
.phabricator-main-menu-alert-count {
position: absolute;
font-weight: bold;
line-height: 22px;
top: 1px;
right: 8px;
left: 20px;
color: #ffffff;
text-align: center;
display: none;
}
.phabricator-main-menu-alert-item {
width: 26px;
height: 26px;
margin: 9px;
display: block;
}
.alert-unread .phabricator-main-menu-alert-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-phone .phabricator-dark-menu,
-.device-tablet .phabricator-dark-menu,
-.device-phone .phabricator-dark-menu a.phabricator-menu-item-type-link,
-.device-tablet .phabricator-dark-menu a.phabricator-menu-item-type-link {
+.device .phabricator-dark-menu,
+.device .phabricator-dark-menu a.phabricator-menu-item-type-link{
color: #ffffff;
}
-.device-phone .phabricator-dark-menu .phabricator-menu-item-view,
-.device-tablet .phabricator-dark-menu .phabricator-menu-item-view {
+.device .phabricator-dark-menu .phabricator-menu-item-view {
display: block;
padding: 4px 0;
}
-.device-phone .phabricator-dark-menu .phabricator-menu-item-type-label,
-.device-tablet .phabricator-dark-menu .phabricator-menu-item-type-label {
+.device .phabricator-dark-menu .phabricator-menu-item-type-label {
text-transform: uppercase;
font-size: 11px;
background-color: #151719;
padding: 0 0 0 12px;
height: 24px;
}
-.device-phone .phabricator-dark-menu .phabricator-menu-item-type-spacer,
-.device-tablet .phabricator-dark-menu .phabricator-menu-item-type-spacer {
+.device .phabricator-dark-menu .phabricator-menu-item-type-spacer {
display: none;
}
-.device-phone .phabricator-dark-menu .phabricator-menu-item-type-label
- .phabricator-menu-item-name,
-.device-tablet .phabricator-dark-menu .phabricator-menu-item-type-label
+.device .phabricator-dark-menu .phabricator-menu-item-type-label
.phabricator-menu-item-name {
display: block;
padding: 6px 0 0;
}
-.device-phone .phabricator-dark-menu .phabricator-menu-item-type-link,
-.device-tablet .phabricator-dark-menu .phabricator-menu-item-type-link {
+.device .phabricator-dark-menu .phabricator-menu-item-type-link {
border-width: 1px 0;
border-style: solid;
border-color: #34373b transparent #282c2d;
background-image: url(/rsrc/image/texture/dark-menu.png);
}
/* - Core Menu -----------------------------------------------------------------
Styles unique to the core menu (left button on mobile).
*/
.phabricator-core-menu-icon {
position: absolute;
display: block;
width: 26px;
height: 26px;
}
.phabricator-core-menu-profile-image {
background-size: 26px 26px;
}
-.device-phone .phabricator-core-menu,
-.device-tablet .phabricator-core-menu {
+.device .phabricator-core-menu {
display: none;
}
-.device-phone .phabricator-core-menu-expanded .phabricator-core-menu,
-.device-tablet .phabricator-core-menu-expanded .phabricator-core-menu {
+.device .phabricator-core-menu-expanded .phabricator-core-menu {
display: block;
}
-.device-phone .phabricator-core-menu .phabricator-menu-item-type-link,
-.device-tablet .phabricator-core-menu .phabricator-menu-item-type-link {
+.device .phabricator-core-menu .phabricator-menu-item-type-link {
font-size: 15px;
min-height: 30px;
}
-.device-phone .phabricator-core-menu
- .phabricator-menu-item-type-link .phabricator-menu-item-name,
-.device-tablet .phabricator-core-menu
+.device .phabricator-core-menu
.phabricator-menu-item-type-link .phabricator-menu-item-name {
margin-left: 40px;
line-height: 28px;
}
.device-desktop .phabricator-core-menu {
position: absolute;
right: 0;
top: 0;
vertical-align: top;
}
.device-desktop .phabricator-core-menu .phabricator-menu-item-name {
display: none;
}
.device-desktop .phabricator-core-menu .phabricator-menu-item-view {
display: block;
float: left;
position: relative;
min-width: 38px;
height: 44px;
}
.device-desktop .phabricator-core-menu .phabricator-core-item-device {
display: none;
}
.device-desktop .phabricator-core-menu-icon {
top: 9px;
left: 6px;
}
-.device-phone .phabricator-core-menu-icon,
-.device-tablet .phabricator-core-menu-icon {
+.device .phabricator-core-menu-icon {
left: 6px;
}
.device-desktop .phabricator-core-menu .phabricator-core-menu-item-profile {
border-width: 0 1px;
border-style: solid;
border-color: #44494d;
margin: 0 8px;
}
/* - Application Menu ----------------------------------------------------------
Styles unique to the application menu (right button on mobile).
*/
-.device-phone .phabricator-application-menu-expanded
- .phabricator-application-menu,
-.device-tablet .phabricator-application-menu-expanded
- .phabricator-application-menu {
+.device .phabricator-application-menu-expanded .phabricator-application-menu {
display: block;
padding-top: 44px;
}
.phabricator-application-menu {
display: none;
}
.phabricator-application-menu .phabricator-menu-item-type-link
.phabricator-menu-item-name {
padding-left: 12px;
}
-.device-phone .phabricator-application-menu-expanded
- .phabricator-application-menu,
-.device-tablet .phabricator-application-menu-expanded
- .phabricator-application-menu {
+.device .phabricator-application-menu-expanded .phabricator-application-menu {
display: block;
padding-top: 44px;
}
diff --git a/webroot/rsrc/css/application/base/notification-menu.css b/webroot/rsrc/css/application/base/notification-menu.css
index f72cd950a8..bd349569de 100644
--- a/webroot/rsrc/css/application/base/notification-menu.css
+++ b/webroot/rsrc/css/application/base/notification-menu.css
@@ -1,52 +1,51 @@
/**
* @provides phabricator-notification-menu-css
*/
.phabricator-notification-menu {
background: #ffffff;
font-size: 11px;
word-wrap: break-word;
overflow-y: auto;
}
.device-desktop .phabricator-notification-menu {
position: fixed;
width: 360px;
top: 42px;
box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.5);
z-index: 9;
border: 1px solid #33393d;
border-top-width: 0;
}
-.device-tablet .phabricator-notification-menu,
-.device-phone .phabricator-notification-menu {
+.device .phabricator-notification-menu {
border-bottom: 1px solid #222222;
}
.phabricator-notification {
padding: 6px 6px;
margin: 1px 0;
}
.no-notifications {
color: #999999;
}
.phabricator-notification-list {
font-size: 11px;
}
.phabricator-notification-list .phabricator-notification-unread,
.phabricator-notification-menu .phabricator-notification-unread {
background: #aacfef;
}
.view-all-notifications {
text-align: center;
font-weight: bold;
background: #eeeeee;
border-top: 1px solid #dddddd;
}
diff --git a/webroot/rsrc/css/application/phame/phame.css b/webroot/rsrc/css/application/phame/phame.css
index 0d858cde0a..405791dae4 100644
--- a/webroot/rsrc/css/application/phame/phame.css
+++ b/webroot/rsrc/css/application/phame/phame.css
@@ -1,114 +1,111 @@
/**
* @provides phame-css
*/
.notice {
background: #F3F3FF;
border: 1px solid #008;
margin: 16px 16px 4px 26px;
}
.notice h3 {
background: #E3E3FF;
padding: 8px;
}
.notice h4 {
font-weight: normal;
padding: 8px;
}
.phame-post-preview-header {
margin: 0px 0px 16px 0px;
}
.blog-post-list {
clear: left;
float: left;
width: 70%;
margin: 16px 0px 16px 16px;
padding: 0px 8px 12px 8px;
}
-.device-tablet .blog-post-list,
-.device-phone .blog-post-list {
+.device .blog-post-list {
float: none;
width: 90%;
margin: 16px auto;
}
.blog-post-list-full {
clear: left;
float: left;
margin: 16px 0px 0px 0px;
padding: 0px 16px 0px 16px;
}
-.device-tablet .blog-post-list-full,
-.device-phone .blog-post-list-full {
+.device .blog-post-list-full {
float: none;
margin: 16px auto;
}
.blog-detail {
float: right;
clear: right;
width: 20%;
margin: 16px 16px 16px 0px;
}
-.device-tablet .blog-detail,
-.device-phone .blog-detail {
+.device .blog-detail {
float: none;
margin: 16px auto;
width: 90%;
}
.blog-detail .description {
margin: 16px 0px 16px 0px;
}
.blog-detail .bloggers {
font-size: 11px;
}
.blog-post,
.blog-detail {
border: 1px solid #DBDBDB;
background: #F9F9F9;
padding: 20px;
}
.blog-post {
margin: 0px 0px 20px 0px;
}
.blog-post .header {
padding: 0px 0px 16px 0px;
}
.blog-post .header h1 {
clear: none;
}
.blog-post .header .last-updated {
color: #666;
clear: none;
font-size: 11px;
}
.blog-post .header .buttons {
float: right;
}
.blog-post .header .buttons a {
margin: 0px 0px 0px 12px;
}
.more-and-comments {
padding: 12px 0px 12px 0px;
}
.fb-comments,
.fb-comments span,
.fb-comments iframe[style] {
width: 100% !important;
}
diff --git a/webroot/rsrc/css/layout/phabricator-action-list-view.css b/webroot/rsrc/css/layout/phabricator-action-list-view.css
index 8a2d0e55f6..136504d62e 100644
--- a/webroot/rsrc/css/layout/phabricator-action-list-view.css
+++ b/webroot/rsrc/css/layout/phabricator-action-list-view.css
@@ -1,89 +1,88 @@
/**
* @provides phabricator-action-list-view-css
*/
.phabricator-action-list-view {
background: #ffffff;
}
.device-desktop .phabricator-action-list-view {
border: 1px solid #dcdcdc;
padding: .5em 0;
float: right;
margin-top: 0px;
margin-right: 1%;
width: 20%;
border-radius: 2px;
font-size: 12px;
box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.10);
}
-.device-tablet .phabricator-action-list-view,
-.device-phone .phabricator-action-list-view {
+.device .phabricator-action-list-view {
background: #f3f3f3;
border-top: 1px solid #dcdcdc;
padding: .5em 0;
}
.phabricator-action-view {
padding: 1px 0;
position: relative;
}
.phabricator-action-view button.phabricator-action-view-item {
border: none;
background: transparent;
box-shadow: none;
outline: 0;
padding: 0;
margin: 0;
font-weight: normal;
color: #3b5998;
width: 100%;
text-align: left;
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-item {
padding: 1px 0 1px 34px;
line-height: 20px;
display: block;
font-size: 12px;
text-decoration: none;
}
.phabricator-action-view-icon {
width: 14px;
height: 14px;
position: absolute;
top: 5px;
left: 13px;
}
.device-desktop .phabricator-action-view:hover .phabricator-action-view-item {
text-decoration: none;
background-color: #3875d7;
color: #ffffff;
}
.phabricator-action-view-disabled .phabricator-action-view-item,
.phabricator-action-view-disabled button.phabricator-action-view-item {
color: #888888;
}
.device-desktop .phabricator-action-view-disabled:hover
.phabricator-action-view-item,
.device-desktop .phabricator-action-view-disabled:hover
button.phabricator-action-view-item {
background-color: #dfdfdf;
color: #888888;
}
diff --git a/webroot/rsrc/css/layout/phabricator-crumbs-view.css b/webroot/rsrc/css/layout/phabricator-crumbs-view.css
index 930a995ab7..7cf12e036a 100644
--- a/webroot/rsrc/css/layout/phabricator-crumbs-view.css
+++ b/webroot/rsrc/css/layout/phabricator-crumbs-view.css
@@ -1,81 +1,80 @@
/**
* @provides phabricator-crumbs-view-css
*/
-.device-phone .phabricator-crumbs-view,
-.device-tablet .phabricator-crumbs-view {
+.device .phabricator-crumbs-view {
display: none;
}
.phabricator-crumbs-view {
background-color: #d8dce2;
height: 31px;
overflow: hidden;
vertical-align: top;
box-shadow: 0 1px rgba(0, 0, 0, 0.25);
}
.phabricator-crumbs-view,
.phabricator-crumbs-view a.phabricator-crumb-view,
.phabricator-crumbs-view a.phabricator-crumbs-action {
color: #3d3d3d;
font-weight: bold;
text-decoration: none;
text-shadow: 0 1px 2px rgba(255, 255, 255, 0.9);
}
.phabricator-crumb-view {
display: inline-block;
height: 31px;
line-height: 31px;
overflow: hidden;
}
.phabricator-crumb-icon {
display: inline-block;
width: 30px;
height: 30px;
margin: 1px 2px 0 8px;
vertical-align: top;
}
.phabricator-crumbs-actions {
float: right;
}
.phabricator-crumbs-action {
display: inline-block;
height: 17px;
padding: 8px 14px 8px 24px;
position: relative;
}
.phabricator-crumbs-action .sprite-icon {
width: 14px;
height: 14px;
left: 4px;
top: 9px;
position: absolute;
}
.phabricator-crumb-divider {
display: inline-block;
width: 9px;
height: 31px;
vertical-align: top;
margin: 0 9px;
}
.temporary-icon-apps {
background-image: url(/rsrc/image/button_apps.png);
background-position: center center;
background-repeat: no-repeat;
}
.temporary-icon-list {
background-image: url(/rsrc/image/button_menu.png);
background-position: center center;
background-repeat: no-repeat;
background-size: 24px 15px;
}
diff --git a/webroot/rsrc/css/layout/phabricator-form-view.css b/webroot/rsrc/css/layout/phabricator-form-view.css
index 3c43768d18..29a61c94bd 100644
--- a/webroot/rsrc/css/layout/phabricator-form-view.css
+++ b/webroot/rsrc/css/layout/phabricator-form-view.css
@@ -1,56 +1,48 @@
/**
* @provides phabricator-form-view-css
*/
.phabricator-form-view {
padding: .75em;
overflow: hidden;
background: #f9f9f9;
border-width: 1px 0;
border-style: solid;
border-color: #dbdbdb;
}
-.device-tablet .phabricator-form-view .aphront-form-control .aphront-form-label,
-.device-phone .phabricator-form-view .aphront-form-control .aphront-form-label {
+.device .phabricator-form-view .aphront-form-control .aphront-form-label {
display: block;
float: none;
text-align: left;
margin: 0;
padding: 0;
}
-.device-tablet .phabricator-form-view .aphront-form-control
- .aphront-form-caption,
-.device-phone .phabricator-form-view .aphront-form-control
- .aphront-form-caption {
+.device .phabricator-form-view .aphront-form-control .aphront-form-caption {
display: block;
float: none;
text-align: left;
margin: 0;
padding: 0;
}
-.device-tablet .phabricator-form-view .aphront-form-control
- .aphront-form-input,
-.device-phone .phabricator-form-view .aphront-form-control
- .aphront-form-input {
+.device .phabricator-form-view .aphront-form-control .aphront-form-input {
float: none;
display: block;
text-align: left;
margin: .25em 0 0 0;
width: 99%;
padding: 0;
}
-.device-tablet .phabricator-form-view .aphront-form-control .aphront-form-error,
-.device-phone .phabricator-form-view .aphront-form-control .aphront-form-error {
+.device .phabricator-form-view .aphront-form-control .aphront-form-error {
float: none;
text-align: left;
display: block;
margin: 0;
padding: 0;
}
diff --git a/webroot/rsrc/css/layout/phabricator-property-list-view.css b/webroot/rsrc/css/layout/phabricator-property-list-view.css
index afacf7d6cf..45e950ae4b 100644
--- a/webroot/rsrc/css/layout/phabricator-property-list-view.css
+++ b/webroot/rsrc/css/layout/phabricator-property-list-view.css
@@ -1,105 +1,102 @@
/**
* @provides phabricator-property-list-view-css
*/
.phabricator-property-list-view {
border-color: #dbdbdb;
border-style: solid;
border-width: 1px 0 0 0;
}
.phabricator-property-list-container {
border-color: #dbdbdb;
border-style: solid;
border-width: 0 0 1px;
background-color: #f9f9f9;
}
.device-desktop .phabricator-property-list-container {
padding: 1em 0 0.5em;
}
-.device-tablet .phabricator-property-list-container,
-.device-phone .phabricator-property-list-container {
+.device .phabricator-property-list-container {
padding: .5em 0;
}
.phabricator-property-list-key {
color: #333333;
font-weight: bold;
overflow: hidden;
white-space: nowrap;
}
.device-desktop .phabricator-property-list-key {
width: 15%;
margin-left: 1%;
text-align: right;
float: left;
clear: left;
margin-bottom: .5em;
}
-.device-tablet .phabricator-property-list-key,
-.device-phone .phabricator-property-list-key {
+.device .phabricator-property-list-key {
padding-left: .5em;
}
.phabricator-property-list-value {
color: #333333;
overflow: hidden;
}
.device-desktop .phabricator-property-list-value {
width: 50%;
margin-left: 1%;
float: left;
margin-bottom: .5em;
}
-.device-tablet .phabricator-property-list-value,
-.device-phone .phabricator-property-list-value {
+.device .phabricator-property-list-value {
padding-left: 1.5em;
margin-bottom: .5em;
}
.phabriator-property-list-view-end {
clear: both;
}
.phabricator-property-list-section-header {
background: #f0f0f0;
color: #666666;
padding: 4px 18px;
border-bottom: 1px solid #dbdbdb;
}
.phabricator-property-list-text-content {
padding: 12px 18px;
background: #fdfdfd;
border-bottom: 1px solid #dbdbdb;
}
/* When we follow an action list view on the Desktop, move down 30px so the
action list can start slightly above the property list. This is an unusual
case where we have something between the header and the action/property
lists and we want to give it space. */
.device-desktop .phabricator-action-list-view +
.phabricator-property-list-view {
clear: left;
margin-top: 30px;
}
/* In the common case where we immediately follow a header, move back up 30px
so we snuggle next to the header. */
.device-desktop .phabricator-header-view
+ .phabricator-action-list-view {
margin-top: -30px;
}
.device-desktop .phabricator-header-view
+ .phabricator-action-list-view
+ .phabricator-property-list-view {
margin-top: 0px;
}
diff --git a/webroot/rsrc/css/layout/phabricator-timeline-view.css b/webroot/rsrc/css/layout/phabricator-timeline-view.css
index b9584ec2cb..4ad083d779 100644
--- a/webroot/rsrc/css/layout/phabricator-timeline-view.css
+++ b/webroot/rsrc/css/layout/phabricator-timeline-view.css
@@ -1,136 +1,132 @@
/**
* @provides phabricator-timeline-view-css
*/
.phabricator-timeline-event-view {
border-width: 0 0 0 3px;
border-style: solid;
border-color: #eaeaea;
}
.device-desktop .phabricator-timeline-event-view {
margin-left: 80px;
margin-right: 12px;
position: relative;
}
.device-desktop .phabricator-timeline-spacer {
min-height: 10px;
border-right-width: 0;
}
.device-desktop .phabricator-timeline-major-event {
border-right-width: 3px;
}
.device-desktop .phabricator-timeline-wedge {
border-bottom: 3px solid #eaeaea;
position: absolute;
width: 10px;
}
.device-desktop .phabricator-timeline-major-event
.phabricator-timeline-content {
min-height: 70px;
}
.phabricator-timeline-major-event .phabricator-timeline-content {
border-style: solid;
border-color: #eaeaea;
border-width: 1px 0;
}
.device-desktop .phabricator-timeline-minor-event
.phabricator-timeline-content {
margin-left: 35px;
padding: 5px 0;
min-height: 25px;
}
.device-desktop .phabricator-timeline-title {
line-height: 25px;
}
.device-desktop .phabricator-timeline-major-event .phabricator-timeline-wedge {
left: -10px;
top: 34px;
}
.device-desktop .phabricator-timeline-minor-event .phabricator-timeline-wedge {
left: 0px;
top: 17px;
}
.phabricator-timeline-image {
background: #eaeaea;
background-repeat: no-repeat;
position: absolute;
}
.device-desktop .phabricator-timeline-major-event .phabricator-timeline-image {
width: 50px;
height: 50px;
top: 10px;
left: -60px;
}
.device-desktop .phabricator-timeline-minor-event .phabricator-timeline-image {
width: 25px;
height: 25px;
background-size: 25px auto;
top: 5px;
left: 10px;
}
.device-desktop .phabricator-timeline-major-event
.phabricator-timeline-standard-title {
background: #f7f7f7;
}
.device-desktop .phabricator-timeline-standard-title {
padding: 0 5px;
}
.phabricator-timeline-major-event .phabricator-timeline-standard-content
.phabricator-timeline-core-content {
padding: 5px;
}
.phabricator-timeline-red .phabricator-timeline-border {
border-color: #dd0000;
}
.phabricator-timeline-green .phabricator-timeline-border {
border-color: #009966;
}
-.device-tablet .phabricator-timeline-event-view,
-.device-phone .phabricator-timeline-event-view {
+.device .phabricator-timeline-event-view {
min-height: 25px;
position: relative;
margin-left: 3px;
margin-right: 3px;
border-right-width: 3px;
border-right-style: solid;
}
-.device-tablet .phabricator-timeline-image,
-.device-phone .phabricator-timeline-image {
+.device .phabricator-timeline-image {
display: none;
}
-.device-tablet .phabricator-timeline-title,
-.device-phone .phabricator-timeline-title {
+.device .phabricator-timeline-title {
line-height: 25px;
min-height: 25px;
background: #f7f7f7;
padding: 0 5px;
}
-.device-tablet .phabricator-timeline-spacer,
-.device-phone .phabricator-timeline-spacer {
+.device .phabricator-timeline-spacer {
min-height: 8px;
border-width: 0;
}
diff --git a/webroot/rsrc/js/application/core/behavior-device.js b/webroot/rsrc/js/application/core/behavior-device.js
index 6622bc5715..d1dcdd26fe 100644
--- a/webroot/rsrc/js/application/core/behavior-device.js
+++ b/webroot/rsrc/js/application/core/behavior-device.js
@@ -1,48 +1,49 @@
/**
* @provides javelin-behavior-device
* @requires javelin-behavior
* javelin-stratcom
* javelin-dom
* javelin-vector
* javelin-install
*/
JX.install('Device', {
statics : {
_device : null,
getDevice : function() {
return JX.Device._device;
}
}
});
JX.behavior('device', function(config) {
function onresize() {
var v = JX.Vector.getViewport();
var device = 'desktop';
if (v.x <= 768) {
device = 'tablet';
}
if (v.x <= 480) {
device = 'phone';
}
if (device == JX.Device.getDevice()) {
return;
}
JX.Device._device = device;
var e = JX.$(config.id);
JX.DOM.alterClass(e, 'device-phone', (device == 'phone'));
JX.DOM.alterClass(e, 'device-tablet', (device == 'tablet'));
JX.DOM.alterClass(e, 'device-desktop', (device == 'desktop'));
+ JX.DOM.alterClass(e, 'device', (device != 'desktop'));
JX.Stratcom.invoke('phabricator-device-change', null, device);
}
JX.Stratcom.listen('resize', null, onresize);
onresize();
});

File Metadata

Mime Type
text/x-diff
Expires
Fri, Oct 31, 6:36 AM (14 h, 45 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
312037
Default Alt Text
(43 KB)

Event Timeline