mirror of
https://we.phorge.it/source/phorge.git
synced 2025-03-28 04:00:17 +01:00
Modularize dashboard layout modes (one column, two columns, etc)
Summary: Depends on D20405. Ref T13272. Currently, the `PhabricatorDashboardLayoutConfig` class uses a lot of `switch()` statements to define layout modes. Although I'm not planning to add thousands of new layout modes, this (and upcoming changes) can be made substantially cleaner by using a standard modular approach. (This doesn't fully remove `PhabricatorDashboardLayoutConfig` yet, but that will happen soon.) Test Plan: Edited a dashboard, saw the same layout modes as before. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13272 Differential Revision: https://secure.phabricator.com/D20406
This commit is contained in:
parent
d0078570cc
commit
0381eed6e6
10 changed files with 181 additions and 12 deletions
|
@ -2910,6 +2910,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php',
|
||||
'PhabricatorDashboardApplicationInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardApplicationInstallWorkflow.php',
|
||||
'PhabricatorDashboardArchiveController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardArchiveController.php',
|
||||
'PhabricatorDashboardColumn' => 'applications/dashboard/layoutconfig/PhabricatorDashboardColumn.php',
|
||||
'PhabricatorDashboardConsoleController' => 'applications/dashboard/controller/PhabricatorDashboardConsoleController.php',
|
||||
'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php',
|
||||
'PhabricatorDashboardDAO' => 'applications/dashboard/storage/PhabricatorDashboardDAO.php',
|
||||
|
@ -2919,6 +2920,8 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardEditController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardEditController.php',
|
||||
'PhabricatorDashboardEditEngine' => 'applications/dashboard/editor/PhabricatorDashboardEditEngine.php',
|
||||
'PhabricatorDashboardFavoritesInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardFavoritesInstallWorkflow.php',
|
||||
'PhabricatorDashboardFullLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardFullLayoutMode.php',
|
||||
'PhabricatorDashboardHalfLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardHalfLayoutMode.php',
|
||||
'PhabricatorDashboardHomeInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardHomeInstallWorkflow.php',
|
||||
'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php',
|
||||
'PhabricatorDashboardIconTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardIconTransaction.php',
|
||||
|
@ -2926,12 +2929,14 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardInstallController.php',
|
||||
'PhabricatorDashboardInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardInstallWorkflow.php',
|
||||
'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php',
|
||||
'PhabricatorDashboardLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutMode.php',
|
||||
'PhabricatorDashboardLayoutTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardLayoutTransaction.php',
|
||||
'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php',
|
||||
'PhabricatorDashboardMovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardMovePanelController.php',
|
||||
'PhabricatorDashboardNameTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardNameTransaction.php',
|
||||
'PhabricatorDashboardNgrams' => 'applications/dashboard/storage/PhabricatorDashboardNgrams.php',
|
||||
'PhabricatorDashboardObjectInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardObjectInstallWorkflow.php',
|
||||
'PhabricatorDashboardOneThirdLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardOneThirdLayoutMode.php',
|
||||
'PhabricatorDashboardPanel' => 'applications/dashboard/storage/PhabricatorDashboardPanel.php',
|
||||
'PhabricatorDashboardPanelArchiveController' => 'applications/dashboard/controller/panel/PhabricatorDashboardPanelArchiveController.php',
|
||||
'PhabricatorDashboardPanelContainerIndexEngineExtension' => 'applications/dashboard/engineextension/PhabricatorDashboardPanelContainerIndexEngineExtension.php',
|
||||
|
@ -3006,6 +3011,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php',
|
||||
'PhabricatorDashboardTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardTransactionQuery.php',
|
||||
'PhabricatorDashboardTransactionType' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardTransactionType.php',
|
||||
'PhabricatorDashboardTwoThirdsLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardTwoThirdsLayoutMode.php',
|
||||
'PhabricatorDashboardViewController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php',
|
||||
'PhabricatorDataCacheSpec' => 'applications/cache/spec/PhabricatorDataCacheSpec.php',
|
||||
'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php',
|
||||
|
@ -8904,6 +8910,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardApplication' => 'PhabricatorApplication',
|
||||
'PhabricatorDashboardApplicationInstallWorkflow' => 'PhabricatorDashboardInstallWorkflow',
|
||||
'PhabricatorDashboardArchiveController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardColumn' => 'Phobject',
|
||||
'PhabricatorDashboardConsoleController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardController' => 'PhabricatorController',
|
||||
'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO',
|
||||
|
@ -8913,6 +8920,8 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardEditController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardEditEngine' => 'PhabricatorEditEngine',
|
||||
'PhabricatorDashboardFavoritesInstallWorkflow' => 'PhabricatorDashboardApplicationInstallWorkflow',
|
||||
'PhabricatorDashboardFullLayoutMode' => 'PhabricatorDashboardLayoutMode',
|
||||
'PhabricatorDashboardHalfLayoutMode' => 'PhabricatorDashboardLayoutMode',
|
||||
'PhabricatorDashboardHomeInstallWorkflow' => 'PhabricatorDashboardApplicationInstallWorkflow',
|
||||
'PhabricatorDashboardIconSet' => 'PhabricatorIconSet',
|
||||
'PhabricatorDashboardIconTransaction' => 'PhabricatorDashboardTransactionType',
|
||||
|
@ -8920,12 +8929,14 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardInstallWorkflow' => 'Phobject',
|
||||
'PhabricatorDashboardLayoutConfig' => 'Phobject',
|
||||
'PhabricatorDashboardLayoutMode' => 'Phobject',
|
||||
'PhabricatorDashboardLayoutTransaction' => 'PhabricatorDashboardTransactionType',
|
||||
'PhabricatorDashboardListController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardMovePanelController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardNameTransaction' => 'PhabricatorDashboardTransactionType',
|
||||
'PhabricatorDashboardNgrams' => 'PhabricatorSearchNgrams',
|
||||
'PhabricatorDashboardObjectInstallWorkflow' => 'PhabricatorDashboardInstallWorkflow',
|
||||
'PhabricatorDashboardOneThirdLayoutMode' => 'PhabricatorDashboardLayoutMode',
|
||||
'PhabricatorDashboardPanel' => array(
|
||||
'PhabricatorDashboardDAO',
|
||||
'PhabricatorApplicationTransactionInterface',
|
||||
|
@ -9015,6 +9026,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||
'PhabricatorDashboardTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
|
||||
'PhabricatorDashboardTransactionType' => 'PhabricatorModularTransactionType',
|
||||
'PhabricatorDashboardTwoThirdsLayoutMode' => 'PhabricatorDashboardLayoutMode',
|
||||
'PhabricatorDashboardViewController' => 'PhabricatorDashboardProfileController',
|
||||
'PhabricatorDataCacheSpec' => 'PhabricatorCacheSpec',
|
||||
'PhabricatorDataNotAttachedException' => 'Exception',
|
||||
|
|
|
@ -67,6 +67,8 @@ final class PhabricatorDashboardEditEngine
|
|||
}
|
||||
|
||||
protected function buildCustomEditFields($object) {
|
||||
$layout_options = PhabricatorDashboardLayoutMode::getLayoutModeMap();
|
||||
|
||||
$fields = array(
|
||||
id(new PhabricatorTextEditField())
|
||||
->setKey('name')
|
||||
|
@ -96,8 +98,7 @@ final class PhabricatorDashboardEditEngine
|
|||
->setConduitTypeDescription(pht('New dashboard layout mode.'))
|
||||
->setTransactionType(
|
||||
PhabricatorDashboardLayoutTransaction::TRANSACTIONTYPE)
|
||||
->setOptions(
|
||||
PhabricatorDashboardLayoutConfig::getLayoutModeSelectOptions())
|
||||
->setOptions($layout_options)
|
||||
->setValue($object->getRawLayoutMode()),
|
||||
);
|
||||
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorDashboardColumn
|
||||
extends Phobject {
|
||||
|
||||
private $columnKey;
|
||||
private $classes = array();
|
||||
|
||||
public function setColumnKey($column_key) {
|
||||
$this->columnKey = $column_key;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getColumnKey() {
|
||||
return $this->columnKey;
|
||||
}
|
||||
|
||||
public function addClass($class) {
|
||||
$this->classes[] = $class;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getClasses() {
|
||||
return $this->classes;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorDashboardFullLayoutMode
|
||||
extends PhabricatorDashboardLayoutMode {
|
||||
|
||||
const LAYOUTMODE = 'layout-mode-full';
|
||||
|
||||
public function getLayoutModeOrder() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function getLayoutModeName() {
|
||||
return pht('One Column: 100%%');
|
||||
}
|
||||
|
||||
public function getLayoutModeColumns() {
|
||||
return array(
|
||||
$this->newColumn()
|
||||
->setColumnKey('main'),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorDashboardHalfLayoutMode
|
||||
extends PhabricatorDashboardLayoutMode {
|
||||
|
||||
const LAYOUTMODE = 'layout-mode-half-and-half';
|
||||
|
||||
public function getLayoutModeOrder() {
|
||||
return 500;
|
||||
}
|
||||
|
||||
public function getLayoutModeName() {
|
||||
return pht('Two Columns: 50%%/50%%');
|
||||
}
|
||||
|
||||
public function getLayoutModeColumns() {
|
||||
return array(
|
||||
$this->newColumn()
|
||||
->setColumnKey('left')
|
||||
->addClass('half'),
|
||||
$this->newColumn()
|
||||
->setColumnKey('right')
|
||||
->addClass('half'),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -107,15 +107,6 @@ final class PhabricatorDashboardLayoutConfig extends Phobject {
|
|||
return $class;
|
||||
}
|
||||
|
||||
public static function getLayoutModeSelectOptions() {
|
||||
return array(
|
||||
self::MODE_FULL => pht('One full-width column'),
|
||||
self::MODE_HALF_AND_HALF => pht('Two columns, 1/2 and 1/2'),
|
||||
self::MODE_THIRD_AND_THIRDS => pht('Two columns, 1/3 and 2/3'),
|
||||
self::MODE_THIRDS_AND_THIRD => pht('Two columns, 2/3 and 1/3'),
|
||||
);
|
||||
}
|
||||
|
||||
public static function newFromDictionary(array $dict) {
|
||||
$layout_config = id(new PhabricatorDashboardLayoutConfig())
|
||||
->setLayoutMode(idx($dict, 'layoutMode', self::MODE_FULL));
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
abstract class PhabricatorDashboardLayoutMode
|
||||
extends Phobject {
|
||||
|
||||
final public function getLayoutModeKey() {
|
||||
return $this->getPhobjectClassConstant('LAYOUTMODE', 32);
|
||||
}
|
||||
|
||||
public function getLayoutModeOrder() {
|
||||
return 1000;
|
||||
}
|
||||
|
||||
abstract public function getLayoutModeName();
|
||||
abstract public function getLayoutModeColumns();
|
||||
|
||||
final protected function newColumn() {
|
||||
return new PhabricatorDashboardColumn();
|
||||
}
|
||||
|
||||
final public static function getAllLayoutModes() {
|
||||
return id(new PhutilClassMapQuery())
|
||||
->setAncestorClass(__CLASS__)
|
||||
->setUniqueMethod('getLayoutModeKey')
|
||||
->setSortMethod('getLayoutModeOrder')
|
||||
->execute();
|
||||
}
|
||||
|
||||
final public static function getLayoutModeMap() {
|
||||
$modes = self::getAllLayoutModes();
|
||||
return mpull($modes, 'getLayoutModeName', 'getLayoutModeKey');
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorDashboardOneThirdLayoutMode
|
||||
extends PhabricatorDashboardLayoutMode {
|
||||
|
||||
const LAYOUTMODE = 'layout-mode-third-and-thirds';
|
||||
|
||||
public function getLayoutModeOrder() {
|
||||
return 700;
|
||||
}
|
||||
|
||||
public function getLayoutModeName() {
|
||||
return pht('Two Columns: 33%%/66%%');
|
||||
}
|
||||
|
||||
public function getLayoutModeColumns() {
|
||||
return array(
|
||||
$this->newColumn()
|
||||
->setColumnKey('left')
|
||||
->addClass('third'),
|
||||
$this->newColumn()
|
||||
->setColumnKey('right')
|
||||
->addClass('thirds'),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorDashboardTwoThirdsLayoutMode
|
||||
extends PhabricatorDashboardLayoutMode {
|
||||
|
||||
const LAYOUTMODE = 'layout-mode-thirds-and-third';
|
||||
|
||||
public function getLayoutModeOrder() {
|
||||
return 600;
|
||||
}
|
||||
|
||||
public function getLayoutModeName() {
|
||||
return pht('Two Columns: 66%%/33%%');
|
||||
}
|
||||
|
||||
public function getLayoutModeColumns() {
|
||||
return array(
|
||||
$this->newColumn()
|
||||
->setColumnKey('left')
|
||||
->addClass('thirds'),
|
||||
$this->newColumn()
|
||||
->setColumnKey('right')
|
||||
->addClass('third'),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -26,7 +26,7 @@ final class PhabricatorDashboardLayoutTransaction
|
|||
public function validateTransactions($object, array $xactions) {
|
||||
$errors = array();
|
||||
|
||||
$mode_map = PhabricatorDashboardLayoutConfig::getLayoutModeSelectOptions();
|
||||
$mode_map = PhabricatorDashboardLayoutMode::getLayoutModeMap();
|
||||
|
||||
$old_value = $object->getRawLayoutMode();
|
||||
foreach ($xactions as $xaction) {
|
||||
|
|
Loading…
Add table
Reference in a new issue