Redesign Diviner
Summary:
This implements `PHUIDocumentViewPro` which should move to be the base for all documents (Phame, Phriction, Legalpad, Diviner). Overall this feels really good to me, but I'd like to roll it out into Diviner specifically first to work through the issues and then move into other apps and drop `PHUIDocumentView` once everything is converted. Some features are:
- White Background, no border on page
- Table of Contents is move to hidden menu (more space for documentation)
- Property List sits under the document
Some design decisions above are in anticipation of Phriction v3 and Unbeta Phame, specifically commenting and maybe some cool new Remarkup text layout options for Phame.
Test Plan:
Went through tons of pages on Diviner on Desktop, Tablet, Mobile. Bounce back to Phriction to make sure DocumentView CSS changes actually look better there.
{F930518}
{F930519}
{F930520}
{F930521}
Reviewers: epriestley
Reviewed By: epriestley
Subscribers: tycho.tatitscheff, joshuaspence, Korvin
Differential Revision: https://secure.phabricator.com/D14374
2015-11-01 17:56:46 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class PHUIDocumentViewPro extends AphrontTagView {
|
|
|
|
|
|
|
|
private $header;
|
|
|
|
private $bookname;
|
|
|
|
private $bookdescription;
|
|
|
|
private $fluid;
|
|
|
|
private $propertyList;
|
|
|
|
private $toc;
|
|
|
|
|
|
|
|
public function setHeader(PHUIHeaderView $header) {
|
|
|
|
$header->setTall(true);
|
|
|
|
$this->header = $header;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setBook($name, $description) {
|
|
|
|
$this->bookname = $name;
|
|
|
|
$this->bookdescription = $description;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setFluid($fluid) {
|
|
|
|
$this->fluid = $fluid;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setPropertyList($view) {
|
|
|
|
$this->propertyList = $view;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2015-11-22 22:10:41 +01:00
|
|
|
public function setToc($toc) {
|
Redesign Diviner
Summary:
This implements `PHUIDocumentViewPro` which should move to be the base for all documents (Phame, Phriction, Legalpad, Diviner). Overall this feels really good to me, but I'd like to roll it out into Diviner specifically first to work through the issues and then move into other apps and drop `PHUIDocumentView` once everything is converted. Some features are:
- White Background, no border on page
- Table of Contents is move to hidden menu (more space for documentation)
- Property List sits under the document
Some design decisions above are in anticipation of Phriction v3 and Unbeta Phame, specifically commenting and maybe some cool new Remarkup text layout options for Phame.
Test Plan:
Went through tons of pages on Diviner on Desktop, Tablet, Mobile. Bounce back to Phriction to make sure DocumentView CSS changes actually look better there.
{F930518}
{F930519}
{F930520}
{F930521}
Reviewers: epriestley
Reviewed By: epriestley
Subscribers: tycho.tatitscheff, joshuaspence, Korvin
Differential Revision: https://secure.phabricator.com/D14374
2015-11-01 17:56:46 +01:00
|
|
|
$this->toc = $toc;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getTagAttributes() {
|
|
|
|
$classes = array();
|
|
|
|
|
|
|
|
if ($this->fluid) {
|
|
|
|
$classes[] = 'phui-document-fluid';
|
|
|
|
}
|
|
|
|
|
|
|
|
return array(
|
|
|
|
'class' => $classes,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getTagContent() {
|
|
|
|
require_celerity_resource('phui-document-view-css');
|
|
|
|
require_celerity_resource('phui-document-view-pro-css');
|
|
|
|
Javelin::initBehavior('phabricator-reveal-content');
|
|
|
|
|
|
|
|
$classes = array();
|
|
|
|
$classes[] = 'phui-document-view';
|
|
|
|
$classes[] = 'phui-document-view-pro';
|
|
|
|
|
|
|
|
$book = null;
|
|
|
|
if ($this->bookname) {
|
|
|
|
$book = pht('%s (%s)', $this->bookname, $this->bookdescription);
|
|
|
|
}
|
|
|
|
|
|
|
|
$main_content = $this->renderChildren();
|
|
|
|
|
|
|
|
if ($book) {
|
|
|
|
$this->header->setSubheader($book);
|
|
|
|
}
|
|
|
|
|
|
|
|
$table_of_contents = null;
|
|
|
|
if ($this->toc) {
|
|
|
|
$toc = array();
|
|
|
|
$toc_id = celerity_generate_unique_node_id();
|
|
|
|
$toc[] = id(new PHUIButtonView())
|
|
|
|
->setTag('a')
|
|
|
|
->setIconFont('fa-align-left')
|
|
|
|
->setColor(PHUIButtonView::SIMPLE)
|
|
|
|
->addClass('phui-document-toc')
|
|
|
|
->addSigil('jx-toggle-class')
|
|
|
|
->setMetaData(array(
|
|
|
|
'map' => array(
|
|
|
|
$toc_id => 'phui-document-toc-open',
|
|
|
|
),
|
|
|
|
));
|
|
|
|
|
|
|
|
$toc[] = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => 'phui-list-sidenav phui-document-toc-list',
|
|
|
|
),
|
|
|
|
$this->toc);
|
|
|
|
|
|
|
|
$table_of_contents = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => 'phui-document-toc-container',
|
|
|
|
'id' => $toc_id,
|
|
|
|
),
|
|
|
|
$toc);
|
|
|
|
}
|
|
|
|
|
|
|
|
$content_inner = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => 'phui-document-inner',
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
$table_of_contents,
|
|
|
|
$this->header,
|
|
|
|
$main_content,
|
|
|
|
));
|
|
|
|
|
|
|
|
$content = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => 'phui-document-content',
|
|
|
|
),
|
|
|
|
$content_inner);
|
|
|
|
|
|
|
|
$view = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => implode(' ', $classes),
|
|
|
|
),
|
|
|
|
$content);
|
|
|
|
|
|
|
|
$list = null;
|
|
|
|
if ($this->propertyList) {
|
|
|
|
$list = phutil_tag_div('phui-document-properties', $this->propertyList);
|
|
|
|
}
|
|
|
|
|
|
|
|
return array($view, $list);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|