Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/conpherence/controller/ConpherenceController.php b/src/applications/conpherence/controller/ConpherenceController.php
index 34c2f11694..b4dc1f267b 100644
--- a/src/applications/conpherence/controller/ConpherenceController.php
+++ b/src/applications/conpherence/controller/ConpherenceController.php
@@ -1,174 +1,173 @@
<?php
/**
* @group conpherence
*/
abstract class ConpherenceController extends PhabricatorController {
private $conpherences;
/**
* Try for a full set of unread conpherences, and if we fail
* load read conpherences. Additional conpherences in either category
* are loaded asynchronously.
*/
public function loadStartingConpherences($current_selection_epoch = null) {
$user = $this->getRequest()->getUser();
$read_participant_query = id(new ConpherenceParticipantQuery())
->withParticipantPHIDs(array($user->getPHID()));
$read_status = ConpherenceParticipationStatus::UP_TO_DATE;
if ($current_selection_epoch) {
$read_one = $read_participant_query
->withParticipationStatus($read_status)
->withDateTouched($current_selection_epoch, '>')
->execute();
$read_two = $read_participant_query
->withDateTouched($current_selection_epoch, '<=')
->execute();
$read = array_merge($read_one, $read_two);
} else {
$read = $read_participant_query
->withParticipationStatus($read_status)
->execute();
}
$unread_status = ConpherenceParticipationStatus::BEHIND;
$unread = id(new ConpherenceParticipantQuery())
->withParticipantPHIDs(array($user->getPHID()))
->withParticipationStatus($unread_status)
->execute();
$all_participation = $unread + $read;
$all_conpherence_phids = array_keys($all_participation);
$all_conpherences = id(new ConpherenceThreadQuery())
->setViewer($user)
->withPHIDs($all_conpherence_phids)
->execute();
$unread_conpherences = array_select_keys(
$all_conpherences,
array_keys($unread));
$read_conpherences = array_select_keys(
$all_conpherences,
array_keys($read));
return array($unread_conpherences, $read_conpherences);
}
public function buildApplicationMenu() {
$nav = new PhabricatorMenuView();
$nav->newLink(
pht('New Conversation'),
$this->getApplicationURI('new/'));
return $nav;
}
public function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
$crumbs
->addAction(
id(new PhabricatorMenuItemView())
->setName(pht('New Conversation'))
->setHref($this->getApplicationURI('new/'))
->setIcon('create'))
->addCrumb(
id(new PhabricatorCrumbView())
->setName(pht('Conpherence')));
return $crumbs;
}
protected function buildHeaderPaneContent(ConpherenceThread $conpherence) {
$user = $this->getRequest()->getUser();
$display_data = $conpherence->getDisplayData(
$user,
ConpherenceImageData::SIZE_HEAD);
$edit_href = $this->getApplicationURI('update/'.$conpherence->getID().'/');
$class_mod = $display_data['image_class'];
- $header =
- phutil_tag(
- 'div',
- array(
- 'class' => 'upload-photo'
- ),
- pht('Drop photo here to change this Conpherence photo.')).
- javelin_tag(
- 'a',
- array(
- 'class' => 'edit',
- 'href' => $edit_href,
- 'sigil' => 'conpherence-edit-metadata',
- 'meta' => array(
- 'action' => 'metadata'
- )
- ),
- '').
- phutil_tag(
- 'div',
- array(
- 'class' => $class_mod.'header-image',
- 'style' => 'background-image: url('.$display_data['image'].');'
- ),
- '').
- phutil_tag(
- 'div',
- array(
- 'class' => $class_mod.'title',
- ),
- $display_data['title']).
- phutil_tag(
- 'div',
- array(
- 'class' => $class_mod.'subtitle',
- ),
- $display_data['subtitle']);
-
- return $header;
+ return array(
+ phutil_tag(
+ 'div',
+ array(
+ 'class' => 'upload-photo'
+ ),
+ pht('Drop photo here to change this Conpherence photo.')),
+ javelin_tag(
+ 'a',
+ array(
+ 'class' => 'edit',
+ 'href' => $edit_href,
+ 'sigil' => 'conpherence-edit-metadata',
+ 'meta' => array(
+ 'action' => 'metadata'
+ )
+ ),
+ ''),
+ phutil_tag(
+ 'div',
+ array(
+ 'class' => $class_mod.'header-image',
+ 'style' => 'background-image: url('.$display_data['image'].');'
+ ),
+ ''),
+ phutil_tag(
+ 'div',
+ array(
+ 'class' => $class_mod.'title',
+ ),
+ $display_data['title']),
+ phutil_tag(
+ 'div',
+ array(
+ 'class' => $class_mod.'subtitle',
+ ),
+ $display_data['subtitle']),
+ );
}
protected function renderConpherenceTransactions(
ConpherenceThread $conpherence) {
$user = $this->getRequest()->getUser();
$transactions = $conpherence->getTransactions();
$handles = $conpherence->getHandles();
$rendered_transactions = array();
$engine = id(new PhabricatorMarkupEngine())
->setViewer($user);
foreach ($transactions as $key => $transaction) {
if ($transaction->shouldHide()) {
unset($transactions[$key]);
continue;
}
if ($transaction->getComment()) {
$engine->addObject(
$transaction->getComment(),
PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT);
}
}
$engine->process();
foreach ($transactions as $transaction) {
$rendered_transactions[] = id(new ConpherenceTransactionView())
->setUser($user)
->setConpherenceTransaction($transaction)
->setHandles($handles)
->setMarkupEngine($engine)
->render();
}
$latest_transaction_id = $transaction->getID();
$rendered_transactions = phutil_implode_html(' ', $rendered_transactions);
return array(
'transactions' => $rendered_transactions,
'latest_transaction_id' => $latest_transaction_id
);
}
}
diff --git a/src/applications/conpherence/controller/ConpherenceUpdateController.php b/src/applications/conpherence/controller/ConpherenceUpdateController.php
index 60a995551a..1e464353c6 100644
--- a/src/applications/conpherence/controller/ConpherenceUpdateController.php
+++ b/src/applications/conpherence/controller/ConpherenceUpdateController.php
@@ -1,292 +1,292 @@
<?php
/**
* @group conpherence
*/
-final class ConpherenceUpdateController extends
- ConpherenceController {
+final class ConpherenceUpdateController
+ extends ConpherenceController {
private $conpherenceID;
public function setConpherenceID($conpherence_id) {
$this->conpherenceID = $conpherence_id;
return $this;
}
public function getConpherenceID() {
return $this->conpherenceID;
}
public function willProcessRequest(array $data) {
$this->setConpherenceID(idx($data, 'id'));
}
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
$conpherence_id = $this->getConpherenceID();
if (!$conpherence_id) {
return new Aphront404Response();
}
$conpherence = id(new ConpherenceThreadQuery())
->setViewer($user)
->withIDs(array($conpherence_id))
->needOrigPics(true)
->needHeaderPics(true)
->executeOne();
$supported_formats = PhabricatorFile::getTransformableImageFormats();
$action = $request->getStr('action', 'metadata');
$latest_transaction_id = null;
$fancy_ajax_style = true;
$error_view = null;
$e_file = array();
$errors = array();
if ($request->isFormPost()) {
$content_source = PhabricatorContentSource::newForSource(
PhabricatorContentSource::SOURCE_WEB,
array(
'ip' => $request->getRemoteAddr()
));
$editor = id(new ConpherenceEditor())
->setContinueOnNoEffect($request->isContinueRequest())
->setContentSource($content_source)
->setActor($user);
switch ($action) {
case 'message':
$message = $request->getStr('text');
$latest_transaction_id = $request->getInt('latest_transaction_id');
$xactions = $editor->generateTransactionsFromText(
$conpherence,
$message);
break;
case 'notifications':
$notifications = $request->getStr('notifications');
$participant = $conpherence->getParticipant($user->getPHID());
$participant->setSettings(array('notifications' => $notifications));
$participant->save();
$result = pht(
'Updated notification settings to "%s".',
ConpherenceSettings::getHumanString($notifications));
return id(new AphrontAjaxResponse())
->setContent($result);
break;
case 'metadata':
$xactions = array();
$top = $request->getInt('image_y');
$left = $request->getInt('image_x');
$file_id = $request->getInt('file_id');
$title = $request->getStr('title');
$updated = false;
if ($file_id) {
$orig_file = id(new PhabricatorFileQuery())
->setViewer($user)
->withIDs(array($file_id))
->executeOne();
$okay = $orig_file->isTransformableImage();
if ($okay) {
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(ConpherenceTransactionType::TYPE_PICTURE)
->setNewValue($orig_file->getPHID());
// do a transformation "crudely"
$xformer = new PhabricatorImageTransformer();
$header_file = $xformer->executeConpherenceTransform(
$orig_file,
0,
0,
ConpherenceImageData::HEAD_WIDTH,
ConpherenceImageData::HEAD_HEIGHT);
// this is handled outside the editor for now. no particularly
// good reason to move it inside
$conpherence->setImagePHIDs(
array(
ConpherenceImageData::SIZE_HEAD => $header_file->getPHID(),
));
$conpherence->setImages(
array(
ConpherenceImageData::SIZE_HEAD => $header_file,
));
} else {
$e_file[] = $orig_file;
$errors[] =
pht('This server only supports these image formats: %s.',
implode(', ', $supported_formats));
}
// use the existing title in this image upload case
$title = $conpherence->getTitle();
$updated = true;
$fancy_ajax_style = false;
}
// all other metadata updates are continue requests
if (!$request->isContinueRequest()) {
break;
}
if ($top !== null || $left !== null) {
$file = $conpherence->getImage(ConpherenceImageData::SIZE_ORIG);
$xformer = new PhabricatorImageTransformer();
$xformed = $xformer->executeConpherenceTransform(
$file,
$top,
$left,
ConpherenceImageData::HEAD_WIDTH,
ConpherenceImageData::HEAD_HEIGHT);
$image_phid = $xformed->getPHID();
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(
ConpherenceTransactionType::TYPE_PICTURE_CROP)
->setNewValue($image_phid);
$updated = true;
}
if ($title != $conpherence->getTitle()) {
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(ConpherenceTransactionType::TYPE_TITLE)
->setNewValue($title);
$updated = true;
}
if (!$updated) {
$errors[] = pht(
'That was a non-update. Try cancel.');
}
break;
default:
throw new Exception('Unknown action: '.$action);
break;
}
if ($xactions) {
try {
$xactions = $editor->applyTransactions($conpherence, $xactions);
if ($fancy_ajax_style) {
$content = $this->loadAndRenderUpdates(
$conpherence_id,
$latest_transaction_id);
return id(new AphrontAjaxResponse())
->setContent($content);
} else {
return id(new AphrontRedirectResponse())
->setURI($this->getApplicationURI($conpherence->getID().'/'));
}
} catch (PhabricatorApplicationTransactionNoEffectException $ex) {
return id(new PhabricatorApplicationTransactionNoEffectResponse())
->setCancelURI($this->getApplicationURI($conpherence_id.'/'))
->setException($ex);
}
}
}
if ($errors) {
$error_view = id(new AphrontErrorView())
->setTitle(pht('Errors editing conpherence.'))
->setInsideDialogue(true)
->setErrors($errors);
}
switch ($action) {
case 'metadata':
default:
$dialogue = $this->renderMetadataDialogue($conpherence, $error_view);
break;
}
return id(new AphrontDialogResponse())
->setDialog($dialogue
->setUser($user)
->setWidth(AphrontDialogView::WIDTH_FORM)
->setSubmitURI($this->getApplicationURI('update/'.$conpherence_id.'/'))
->addSubmitButton()
->addCancelButton($this->getApplicationURI($conpherence->getID().'/')));
}
private function renderMetadataDialogue(
ConpherenceThread $conpherence,
$error_view) {
$form = id(new AphrontFormLayoutView())
->appendChild($error_view)
->appendChild(
id(new AphrontFormTextControl())
->setLabel(pht('Title'))
->setName('title')
->setValue($conpherence->getTitle()));
$image = $conpherence->getImage(ConpherenceImageData::SIZE_ORIG);
if ($image) {
$form
->appendChild(
id(new AphrontFormMarkupControl())
->setLabel(pht('Image'))
->setValue(phutil_tag(
'img',
array(
'src' =>
$conpherence->loadImageURI(ConpherenceImageData::SIZE_HEAD),
))))
->appendChild(
id(new AphrontFormCropControl())
->setLabel(pht('Crop Image'))
->setValue($image)
->setWidth(ConpherenceImageData::HEAD_WIDTH)
->setHeight(ConpherenceImageData::HEAD_HEIGHT))
->appendChild(
id(new ConpherenceFormDragAndDropUploadControl())
->setLabel(pht('Change Image')));
} else {
$form
->appendChild(
id(new ConpherenceFormDragAndDropUploadControl())
->setLabel(pht('Image')));
}
require_celerity_resource('conpherence-update-css');
return id(new AphrontDialogView())
->setTitle(pht('Update Conpherence'))
->addHiddenInput('action', 'metadata')
->addHiddenInput('__continue__', true)
->appendChild($form);
}
private function loadAndRenderUpdates(
$conpherence_id,
$latest_transaction_id) {
$user = $this->getRequest()->getUser();
$conpherence = id(new ConpherenceThreadQuery())
->setViewer($user)
->setAfterID($latest_transaction_id)
->needHeaderPics(true)
->needWidgetData(true)
->withIDs(array($conpherence_id))
->executeOne();
$data = $this->renderConpherenceTransactions($conpherence);
$rendered_transactions = $data['transactions'];
$new_latest_transaction_id = $data['latest_transaction_id'];
- $selected = true;
- $nav_item = $this->buildConpherenceMenuItem(
- $conpherence,
- $selected);
+ $nav_item = id(new ConpherenceThreadListView())
+ ->setUser($user)
+ ->setBaseURI($this->getApplicationURI())
+ ->renderSingleThread($conpherence);
$header = $this->buildHeaderPaneContent($conpherence);
$file_widget = id(new ConpherenceFileWidgetView())
->setUser($this->getRequest()->getUser())
->setConpherence($conpherence)
->setUpdateURI(
$this->getApplicationURI('update/'.$conpherence->getID().'/'));
$content = array(
'transactions' => $rendered_transactions,
'latest_transaction_id' => $new_latest_transaction_id,
- 'nav_item' => $nav_item->render(),
+ 'nav_item' => hsprintf('%s', $nav_item),
'conpherence_phid' => $conpherence->getPHID(),
- 'header' => $header,
+ 'header' => hsprintf('%s', $header),
'file_widget' => $file_widget->render()
);
return $content;
}
}
diff --git a/src/applications/conpherence/controller/ConpherenceViewController.php b/src/applications/conpherence/controller/ConpherenceViewController.php
index 0219d5f330..2b7a8c0e24 100644
--- a/src/applications/conpherence/controller/ConpherenceViewController.php
+++ b/src/applications/conpherence/controller/ConpherenceViewController.php
@@ -1,116 +1,134 @@
<?php
/**
* @group conpherence
*/
final class ConpherenceViewController extends
ConpherenceController {
private $conpherenceID;
private $conpherence;
public function setConpherence(ConpherenceThread $conpherence) {
$this->conpherence = $conpherence;
return $this;
}
public function getConpherence() {
return $this->conpherence;
}
public function setConpherenceID($conpherence_id) {
$this->conpherenceID = $conpherence_id;
return $this;
}
public function getConpherenceID() {
return $this->conpherenceID;
}
public function willProcessRequest(array $data) {
$this->setConpherenceID(idx($data, 'id'));
}
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
$conpherence_id = $this->getConpherenceID();
if (!$conpherence_id) {
return new Aphront404Response();
}
$conpherence = id(new ConpherenceThreadQuery())
->setViewer($user)
->withIDs(array($conpherence_id))
->needHeaderPics(true)
->executeOne();
$this->setConpherence($conpherence);
$participant = $conpherence->getParticipant($user->getPHID());
$transactions = $conpherence->getTransactions();
$latest_transaction = end($transactions);
$write_guard = AphrontWriteGuard::beginScopedUnguardedWrites();
$participant->markUpToDate($latest_transaction);
unset($write_guard);
$header = $this->renderHeaderPaneContent();
$messages = $this->renderMessagePaneContent();
$content = $header + $messages;
- return id(new AphrontAjaxResponse())->setContent($content);
+
+ if ($request->isAjax()) {
+ return id(new AphrontAjaxResponse())->setContent($content);
+ }
+
+ $layout = id(new ConpherenceLayoutView())
+ ->setBaseURI($this->getApplicationURI())
+ ->setThread($conpherence)
+ ->setHeader($header)
+ ->setMessages($messages['messages'])
+ ->setReplyForm($messages['form'])
+ ->setRole('thread');
+
+ return $this->buildApplicationPage(
+ $layout,
+ array(
+ 'title' => $conpherence->getTitle(),
+ 'device' => true,
+ ));
}
private function renderHeaderPaneContent() {
require_celerity_resource('conpherence-header-pane-css');
$conpherence = $this->getConpherence();
$header = $this->buildHeaderPaneContent($conpherence);
- return array('header' => $header);
+ return array('header' => hsprintf('%s', $header));
}
private function renderMessagePaneContent() {
require_celerity_resource('conpherence-message-pane-css');
$user = $this->getRequest()->getUser();
$conpherence = $this->getConpherence();
$data = $this->renderConpherenceTransactions($conpherence);
$latest_transaction_id = $data['latest_transaction_id'];
$transactions = $data['transactions'];
$update_uri = $this->getApplicationURI('update/'.$conpherence->getID().'/');
Javelin::initBehavior('conpherence-pontificate');
$form =
id(new AphrontFormView())
->setAction($update_uri)
->setFlexible(true)
->addSigil('conpherence-pontificate')
->setWorkflow(true)
->setUser($user)
->addHiddenInput('action', 'message')
->addHiddenInput('latest_transaction_id', $latest_transaction_id)
->appendChild(
id(new PhabricatorRemarkupControl())
->setUser($user)
->setName('text'))
->appendChild(
id(new AphrontFormSubmitControl())
->setValue(pht('Pontificate')))
->render();
$scrollbutton = javelin_tag(
'a',
array(
'href' => '#',
'mustcapture' => true,
'sigil' => 'show-older-messages',
'class' => 'conpherence-show-older-messages',
),
pht('Show Older Messages'));
return array(
- 'messages' => $scrollbutton.$transactions,
+ 'messages' => hsprintf('%s%s', $scrollbutton, $transactions),
'form' => $form
);
}
}
diff --git a/src/applications/conpherence/view/ConpherenceLayoutView.php b/src/applications/conpherence/view/ConpherenceLayoutView.php
index 56aa32100c..94d4a9b087 100644
--- a/src/applications/conpherence/view/ConpherenceLayoutView.php
+++ b/src/applications/conpherence/view/ConpherenceLayoutView.php
@@ -1,124 +1,143 @@
<?php
final class ConpherenceLayoutView extends AphrontView {
private $thread;
private $baseURI;
private $threadView;
private $role;
+ private $header;
+ private $messages;
+ private $replyForm;
+
+ public function setMessages($messages) {
+ $this->messages = $messages;
+ return $this;
+ }
+
+ public function setReplyForm($reply_form) {
+ $this->replyForm = $reply_form;
+ return $this;
+ }
+
+ public function setHeader($header) {
+ $this->header = $header;
+ return $this;
+ }
public function setRole($role) {
$this->role = $role;
return $this;
}
public function getThreadView() {
return $this->threadView;
}
public function setBaseURI($base_uri) {
$this->baseURI = $base_uri;
return $this;
}
public function setThread(ConpherenceThread $thread) {
$this->thread = $thread;
return $this;
}
public function setThreadView(ConpherenceThreadListView $thead_view) {
$this->threadView = $thead_view;
return $this;
}
public function render() {
+ require_celerity_resource('conpherence-menu-css');
Javelin::initBehavior('conpherence-menu',
array(
'base_uri' => $this->baseURI,
'header' => 'conpherence-header-pane',
'messages' => 'conpherence-messages',
'messages_pane' => 'conpherence-message-pane',
'widgets_pane' => 'conpherence-widget-pane',
'form_pane' => 'conpherence-form',
'menu_pane' => 'conpherence-menu',
'selectedID' => ($this->thread ? $this->thread->getID() : null),
'role' => $this->role,
));
Javelin::initBehavior('conpherence-drag-and-drop-photo',
array(
'target' => 'conpherence-header-pane',
'form_pane' => 'conpherence-form',
'upload_uri' => '/file/dropupload/',
'activated_class' => 'conpherence-header-upload-photo',
));
return javelin_tag(
'div',
array(
'sigil' => 'conpherence-layout',
'class' => 'conpherence-layout conpherence-role-'.$this->role,
),
array(
javelin_tag(
'div',
array(
'class' => 'phabricator-nav-column-background',
),
''),
javelin_tag(
'div',
array(
'class' => 'conpherence-menu-pane phabricator-side-menu',
'sigil' => 'conpherence-menu-pane',
),
nonempty($this->threadView, '')),
javelin_tag(
'div',
array(
'class' => 'conpherence-content-pane',
),
array(
javelin_tag(
'div',
array(
'class' => 'conpherence-header-pane',
'id' => 'conpherence-header-pane',
'sigil' => 'conpherence-header',
),
- ''),
+ nonempty($this->header, '')),
phutil_tag(
'div',
array(
'class' => 'conpherence-widget-pane',
'id' => 'conpherence-widget-pane'
),
''),
javelin_tag(
'div',
array(
'class' => 'conpherence-message-pane',
'id' => 'conpherence-message-pane'
),
array(
javelin_tag(
'div',
array(
'class' => 'conpherence-messages',
'id' => 'conpherence-messages',
'sigil' => 'conpherence-messages',
),
- ''),
+ nonempty($this->messages, '')),
phutil_tag(
'div',
array(
'id' => 'conpherence-form'
),
- '')
+ nonempty($this->replyForm, ''))
)),
)),
));
}
}
diff --git a/src/applications/conpherence/view/ConpherenceThreadListView.php b/src/applications/conpherence/view/ConpherenceThreadListView.php
index cf204c9d20..1fe47f4336 100644
--- a/src/applications/conpherence/view/ConpherenceThreadListView.php
+++ b/src/applications/conpherence/view/ConpherenceThreadListView.php
@@ -1,112 +1,118 @@
<?php
final class ConpherenceThreadListView extends AphrontView {
private $baseURI;
private $unreadThreads;
private $readThreads;
public function setBaseURI($base_uri) {
$this->baseURI = $base_uri;
return $this;
}
public function setUnreadThreads(array $unread_threads) {
assert_instances_of($unread_threads, 'ConpherenceThread');
$this->unreadThreads = $unread_threads;
return $this;
}
public function setReadThreads(array $read_threads) {
assert_instances_of($read_threads, 'ConpherenceThread');
$this->readThreads = $read_threads;
return $this;
}
public function render() {
require_celerity_resource('conpherence-menu-css');
$menu = id(new PhabricatorMenuView())
->addClass('conpherence-menu')
->setID('conpherence-menu');
$menu->addMenuItem(
id(new PhabricatorMenuItemView())
->setName(pht('New Conversation'))
->setWorkflow(true)
->setKey('new')
->setHref($this->baseURI.'new/')
->setType(PhabricatorMenuItemView::TYPE_BUTTON));
$menu->newLabel(pht('Unread'));
$this->addThreadsToMenu($menu, $this->unreadThreads, $read = false);
$menu->newLabel(pht('Read'));
$this->addThreadsToMenu($menu, $this->readThreads, $read = true);
return $menu;
}
+ public function renderSingleThread(ConpherenceThread $thread) {
+ return $this->renderThread($thread);
+ }
+
+ private function renderThreadItem(ConpherenceThread $thread) {
+ return id(new PhabricatorMenuItemView())
+ ->setType(PhabricatorMenuItemView::TYPE_CUSTOM)
+ ->setName($this->renderThread($thread));
+ }
+
private function renderThread(ConpherenceThread $thread) {
$user = $this->getUser();
$uri = $this->baseURI.$thread->getID().'/';
$data = $thread->getDisplayData($user, null);
$title = $data['title'];
$subtitle = $data['subtitle'];
$unread_count = $data['unread_count'];
$epoch = $data['epoch'];
$image = $data['image'];
$snippet = $data['snippet'];
- $item = id(new ConpherenceMenuItemView())
+ return id(new ConpherenceMenuItemView())
->setUser($user)
->setTitle($title)
->setSubtitle($subtitle)
->setHref($uri)
->setEpoch($epoch)
->setImageURI($image)
->setMessageText($snippet)
->setUnreadCount($unread_count)
->setID($thread->getPHID().'-nav-item')
->addSigil('conpherence-menu-click')
->setMetadata(
array(
'id' => $thread->getID(),
));
-
- return id(new PhabricatorMenuItemView())
- ->setType(PhabricatorMenuItemView::TYPE_CUSTOM)
- ->setName($item);
}
private function addThreadsToMenu(
PhabricatorMenuView $menu,
array $conpherences,
$read = false) {
foreach ($conpherences as $conpherence) {
- $item = $this->renderThread($conpherence);
+ $item = $this->renderThreadItem($conpherence);
$menu->addMenuItem($item);
}
if (empty($conpherences) || $read) {
$menu->addMenuItem($this->getNoConpherencesBlock());
}
return $menu;
}
private function getNoConpherencesBlock() {
$message = phutil_tag(
'div',
array(
'class' => 'no-conpherences-menu-item'
),
pht('No more conpherences.'));
return id(new PhabricatorMenuItemView())
->setType(PhabricatorMenuItemView::TYPE_CUSTOM)
->setName($message);
}
}
diff --git a/webroot/rsrc/css/application/conpherence/header-pane.css b/webroot/rsrc/css/application/conpherence/header-pane.css
index 611bf0b307..80e4c6cfcb 100644
--- a/webroot/rsrc/css/application/conpherence/header-pane.css
+++ b/webroot/rsrc/css/application/conpherence/header-pane.css
@@ -1,102 +1,93 @@
/**
* @provides conpherence-header-pane-css
*/
.conpherence-header-pane {
border-bottom: 1px solid #ccc;
height: 80px;
width: 100%;
}
-.device .conpherence-header-pane {
- position: fixed;
- top: 44px;
-}
-
-.device-phone .conpherence-header-pane {
- display: none;
-}
-
.conpherence-header-pane .edit {
float: right;
margin: 16px 16px 0px 0px;
height: 50px;
width: 50px;
background-image: url('/rsrc/image/actions/edit.png');
}
.conpherence-header-pane .header-image {
position: absolute;
top: 15px;
left: 15px;
height: 50px;
width: 50px;
}
.conpherence-header-pane .custom-header-image {
position: absolute;
top: 0px;
left: 0px;
height: 80px;
width: 120px;
}
.conpherence-header-pane .title {
position: relative;
font-size: 16px;
font-weight: bold;
left: 77px;
top: 21px;
max-width: 80%;
overflow-x: auto;
}
.conpherence-header-pane .custom-title {
position: relative;
font-size: 16px;
font-weight: bold;
left: 132px;
top: 21px;
max-width: 80%;
overflow-x: auto;
}
.conpherence-header-pane .subtitle {
position: relative;
left: 77px;
top: 21px;
color: #bfbfbf;
max-width: 80%;
}
.conpherence-header-pane .custom-subtitle {
position: relative;
left: 132px;
top: 21px;
color: #bfbfbf;
max-width: 80%;
}
.conpherence-header-pane .upload-photo {
display: none;
}
.conpherence-header-upload-photo .upload-photo {
display: block;
width: 100%;
padding: 32px;
font-size: 16px;
background: #99ff99;
border-color: #669966;
}
.conpherence-header-upload-photo .edit,
.conpherence-header-upload-photo .header-image,
.conpherence-header-upload-photo .custom-header-image,
.conpherence-header-upload-photo .title,
.conpherence-header-upload-photo .custom-title,
.conpherence-header-upload-photo .subtitle,
.conpherence-header-upload-photo .custom-subtitle {
display: none;
}
diff --git a/webroot/rsrc/css/application/conpherence/menu.css b/webroot/rsrc/css/application/conpherence/menu.css
index 9b87c65a5d..0da340fe41 100644
--- a/webroot/rsrc/css/application/conpherence/menu.css
+++ b/webroot/rsrc/css/application/conpherence/menu.css
@@ -1,138 +1,156 @@
/**
* @provides conpherence-menu-css
*/
.conpherence-layout {
position: fixed;
bottom: 0;
left: 0;
right: 0;
top: 44px;
}
.conpherence-menu-pane {
width: 300px;
position: absolute;
overflow-x: hidden;
overflow-y: auto;
top: 0;
bottom: 0;
}
.conpherence-content-pane {
margin-left: 300px;
position: relative;
}
div.conpherence-layout .phabricator-nav-column-background {
display: block;
width: 300px;
}
.device .conpherence-role-list .conpherence-menu-pane,
.device .conpherence-role-list .phabricator-nav-column-background {
width: 100%;
}
.device .conpherence-role-list .conpherence-content-pane {
display: none;
}
+.device .conpherence-role-thread .conpherence-menu-pane,
+.device .conpherence-role-thread .phabricator-nav-column-background,
+.device .conpherence-role-thread .conpherence-widget-pane {
+ display: none;
+}
+
+.device .conpherence-role-thread .conpherence-content-pane {
+ margin-left: 0;
+}
+
+.device .conpherence-role-thread .conpherence-message-pane,
+.device .conpherence-role-thread .conpherence-messages,
+.device .conpherence-role-thread .phabricator-form-view {
+ left: 0;
+ right: 0;
+ width: 100%;
+}
+
.conpherence-menu .conpherence-menu-item-view {
display: block;
height: 70px;
width: 100%;
overflow: hidden;
position: relative;
text-decoration: none;
border-top: solid 1px #3B3D3E;
border-bottom: solid 1px #1C1F21;
border-right: 0;
border-left: 2px solid transparent;
}
.conpherence-menu .conpherence-selected {
background: rgba(0, 0, 0, .6);
border-left: 2px solid #66CCFF;
}
.device-desktop .conpherence-menu .conpherence-menu-item-view:hover {
background-image: url('/rsrc/image/texture/dark-menu-hover.png');
}
.conpherence-menu .conpherence-menu-item-view .conpherence-menu-item-image {
top: 6px;
left: 6px;
display: block;
position: absolute;
width: 50px;
height: 50px;
border: 4px solid rgb(29, 32, 34);
border-radius: 2px;
}
.conpherence-menu .conpherence-menu-item-view .conpherence-menu-item-title {
display: block;
margin-top: 12px;
margin-left: 70px;
text-align: left;
font-weight: bold;
font-size: 12px;
color: #ffffff;
text-shadow: 0px 1px 1px #000000;
}
.conpherence-menu .conpherence-menu-item-view .conpherence-menu-item-subtitle {
display: block;
color: #bfbfbf;
font-size: 11px;
margin-top: 2px;
margin-left: 70px;
font-style: italic;
}
.conpherence-menu .conpherence-menu-item-view
.conpherence-menu-item-message-text {
display: block;
color: #66CCFF;
font-size: 12px;
margin-top: 4px;
margin-left: 70px;
}
.conpherence-menu .conpherence-menu-item-view
.conpherence-menu-item-unread-count {
position: absolute;
left: 48px;
top: 3px;
background: #f00;
border-radius: 10px;
color: white;
font-weight: bold;
padding: 1px 6px 2px;
border: 1px solid #a00;
font-size: 12px;
}
.conpherence-menu .hide-unread-count .conpherence-menu-item-unread-count,
.conpherence-menu .conpherence-selected .conpherence-menu-item-unread-count {
display: none;
}
.conpherence-menu .conpherence-menu-item-view .conpherence-menu-item-date {
position: absolute;
top: 10px;
right: 12px;
color: white;
font-size: 12px;
}
.no-conpherences-menu-item {
color: #a1a5a9;
border-top: solid 1px #3B3D3E;
padding: 20px 0;
margin: 0px auto;
width: 300px;
text-align: center;
}

File Metadata

Mime Type
text/x-diff
Expires
Thu, Jul 24, 1:51 AM (1 d, 11 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
182488
Default Alt Text
(35 KB)

Event Timeline