mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-14 15:58:39 +01:00
Modernize Paste
Summary: - Add a PhabricatorApplication. - Make most of the views work well on tablets / phones. The actual "Create" form doesn't, but everything else is good -- need to make device-friendly form layouts before I can do the form. Test Plan: Will attach screenshots. Reviewers: btrahan, chad, vrana Reviewed By: btrahan CC: aran Maniphest Tasks: T1569 Differential Revision: https://secure.phabricator.com/D3293
This commit is contained in:
parent
42461b5f06
commit
70a8e8b6e8
29 changed files with 1163 additions and 332 deletions
|
@ -138,6 +138,7 @@ $app_map = array(
|
||||||
'countdown' => array(7, 5),
|
'countdown' => array(7, 5),
|
||||||
'conduit' => array(7, 30),
|
'conduit' => array(7, 30),
|
||||||
'feed' => array(3, 11),
|
'feed' => array(3, 11),
|
||||||
|
'paste' => array(9, 2),
|
||||||
);
|
);
|
||||||
|
|
||||||
$xadj = -1;
|
$xadj = -1;
|
||||||
|
@ -152,6 +153,22 @@ foreach ($app_map as $icon => $coords) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$action_template = id(new PhutilSprite())
|
||||||
|
->setSourcePosition(0, 0)
|
||||||
|
->setSourceSize(16, 16);
|
||||||
|
|
||||||
|
$action_map = array(
|
||||||
|
'file' => 'icon/page_white_text.png',
|
||||||
|
'fork' => 'icon/arrow_branch.png',
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($action_map as $icon => $source) {
|
||||||
|
$sheet->addSprite(
|
||||||
|
id(clone $action_template)
|
||||||
|
->setSourceFile($srcroot.$source)
|
||||||
|
->setTargetCSS('.action-'.$icon));
|
||||||
|
}
|
||||||
|
|
||||||
$sheet->generateImage($webroot.'/image/autosprite.png');
|
$sheet->generateImage($webroot.'/image/autosprite.png');
|
||||||
$sheet->generateCSS($webroot.'/css/autosprite.css');
|
$sheet->generateCSS($webroot.'/css/autosprite.css');
|
||||||
|
|
||||||
|
|
|
@ -65,8 +65,8 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'/rsrc/image/autosprite.png' =>
|
'/rsrc/image/autosprite.png' =>
|
||||||
array(
|
array(
|
||||||
'hash' => 'e3a103473dad6161a7be5369c2e21276',
|
'hash' => '08fb34fc4ce0cd3be882a3177423ad49',
|
||||||
'uri' => '/res/e3a10347/rsrc/image/autosprite.png',
|
'uri' => '/res/08fb34fc/rsrc/image/autosprite.png',
|
||||||
'disk' => '/rsrc/image/autosprite.png',
|
'disk' => '/rsrc/image/autosprite.png',
|
||||||
'type' => 'png',
|
'type' => 'png',
|
||||||
),
|
),
|
||||||
|
@ -643,7 +643,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'autosprite-css' =>
|
'autosprite-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/e09ec93c/rsrc/css/autosprite.css',
|
'uri' => '/res/07043fce/rsrc/css/autosprite.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -2215,6 +2215,15 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'disk' => '/rsrc/js/application/herald/PathTypeahead.js',
|
'disk' => '/rsrc/js/application/herald/PathTypeahead.js',
|
||||||
),
|
),
|
||||||
|
'phabricator-action-list-view-css' =>
|
||||||
|
array(
|
||||||
|
'uri' => '/res/f70fbcd4/rsrc/css/layout/phabricator-action-list-view.css',
|
||||||
|
'type' => 'css',
|
||||||
|
'requires' =>
|
||||||
|
array(
|
||||||
|
),
|
||||||
|
'disk' => '/rsrc/css/layout/phabricator-action-list-view.css',
|
||||||
|
),
|
||||||
'phabricator-app-buttons-css' =>
|
'phabricator-app-buttons-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/1e153463/rsrc/css/application/directory/phabricator-app-buttons.css',
|
'uri' => '/res/1e153463/rsrc/css/application/directory/phabricator-app-buttons.css',
|
||||||
|
@ -2262,7 +2271,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'phabricator-core-css' =>
|
'phabricator-core-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/f912ffab/rsrc/css/core/core.css',
|
'uri' => '/res/f3c6e0b5/rsrc/css/core/core.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -2334,6 +2343,15 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'disk' => '/rsrc/css/application/flag/flag.css',
|
'disk' => '/rsrc/css/application/flag/flag.css',
|
||||||
),
|
),
|
||||||
|
'phabricator-header-view-css' =>
|
||||||
|
array(
|
||||||
|
'uri' => '/res/c89cc14d/rsrc/css/layout/phabricator-header-view.css',
|
||||||
|
'type' => 'css',
|
||||||
|
'requires' =>
|
||||||
|
array(
|
||||||
|
),
|
||||||
|
'disk' => '/rsrc/css/layout/phabricator-header-view.css',
|
||||||
|
),
|
||||||
'phabricator-jump-nav' =>
|
'phabricator-jump-nav' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/8bdc0fc3/rsrc/css/application/directory/phabricator-jump-nav.css',
|
'uri' => '/res/8bdc0fc3/rsrc/css/application/directory/phabricator-jump-nav.css',
|
||||||
|
@ -2429,6 +2447,15 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'disk' => '/rsrc/css/application/base/notification-menu.css',
|
'disk' => '/rsrc/css/application/base/notification-menu.css',
|
||||||
),
|
),
|
||||||
|
'phabricator-object-item-list-view-css' =>
|
||||||
|
array(
|
||||||
|
'uri' => '/res/7a31c016/rsrc/css/layout/phabricator-object-item-list-view.css',
|
||||||
|
'type' => 'css',
|
||||||
|
'requires' =>
|
||||||
|
array(
|
||||||
|
),
|
||||||
|
'disk' => '/rsrc/css/layout/phabricator-object-item-list-view.css',
|
||||||
|
),
|
||||||
'phabricator-object-list-view-css' =>
|
'phabricator-object-list-view-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/4f183668/rsrc/css/application/projects/phabricator-object-list-view.css',
|
'uri' => '/res/4f183668/rsrc/css/application/projects/phabricator-object-list-view.css',
|
||||||
|
@ -2508,6 +2535,15 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'disk' => '/rsrc/css/application/projects/project-tag.css',
|
'disk' => '/rsrc/css/application/projects/project-tag.css',
|
||||||
),
|
),
|
||||||
|
'phabricator-property-list-view-css' =>
|
||||||
|
array(
|
||||||
|
'uri' => '/res/4a2b2d85/rsrc/css/layout/phabricator-property-list-view.css',
|
||||||
|
'type' => 'css',
|
||||||
|
'requires' =>
|
||||||
|
array(
|
||||||
|
),
|
||||||
|
'disk' => '/rsrc/css/layout/phabricator-property-list-view.css',
|
||||||
|
),
|
||||||
'phabricator-remarkup-css' =>
|
'phabricator-remarkup-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/3b93a50d/rsrc/css/core/remarkup.css',
|
'uri' => '/res/3b93a50d/rsrc/css/core/remarkup.css',
|
||||||
|
@ -2547,9 +2583,18 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'disk' => '/rsrc/css/application/slowvote/slowvote.css',
|
'disk' => '/rsrc/css/application/slowvote/slowvote.css',
|
||||||
),
|
),
|
||||||
|
'phabricator-source-code-view-css' =>
|
||||||
|
array(
|
||||||
|
'uri' => '/res/631aa90a/rsrc/css/layout/phabricator-source-code-view.css',
|
||||||
|
'type' => 'css',
|
||||||
|
'requires' =>
|
||||||
|
array(
|
||||||
|
),
|
||||||
|
'disk' => '/rsrc/css/layout/phabricator-source-code-view.css',
|
||||||
|
),
|
||||||
'phabricator-standard-page-view' =>
|
'phabricator-standard-page-view' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/678262d4/rsrc/css/application/base/standard-page-view.css',
|
'uri' => '/res/13470ac6/rsrc/css/application/base/standard-page-view.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -2831,7 +2876,7 @@ celerity_register_resource_map(array(
|
||||||
), array(
|
), array(
|
||||||
'packages' =>
|
'packages' =>
|
||||||
array(
|
array(
|
||||||
'edf6b149' =>
|
'dd49ed34' =>
|
||||||
array(
|
array(
|
||||||
'name' => 'core.pkg.css',
|
'name' => 'core.pkg.css',
|
||||||
'symbols' =>
|
'symbols' =>
|
||||||
|
@ -2860,7 +2905,7 @@ celerity_register_resource_map(array(
|
||||||
21 => 'phabricator-flag-css',
|
21 => 'phabricator-flag-css',
|
||||||
22 => 'aphront-error-view-css',
|
22 => 'aphront-error-view-css',
|
||||||
),
|
),
|
||||||
'uri' => '/res/pkg/edf6b149/core.pkg.css',
|
'uri' => '/res/pkg/dd49ed34/core.pkg.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
),
|
),
|
||||||
'971b021e' =>
|
'971b021e' =>
|
||||||
|
@ -3027,20 +3072,20 @@ celerity_register_resource_map(array(
|
||||||
'reverse' =>
|
'reverse' =>
|
||||||
array(
|
array(
|
||||||
'aphront-attached-file-view-css' => '7839ae2d',
|
'aphront-attached-file-view-css' => '7839ae2d',
|
||||||
'aphront-crumbs-view-css' => 'edf6b149',
|
'aphront-crumbs-view-css' => 'dd49ed34',
|
||||||
'aphront-dialog-view-css' => 'edf6b149',
|
'aphront-dialog-view-css' => 'dd49ed34',
|
||||||
'aphront-error-view-css' => 'edf6b149',
|
'aphront-error-view-css' => 'dd49ed34',
|
||||||
'aphront-form-view-css' => 'edf6b149',
|
'aphront-form-view-css' => 'dd49ed34',
|
||||||
'aphront-headsup-action-list-view-css' => '19ebcc79',
|
'aphront-headsup-action-list-view-css' => '19ebcc79',
|
||||||
'aphront-headsup-view-css' => 'edf6b149',
|
'aphront-headsup-view-css' => 'dd49ed34',
|
||||||
'aphront-list-filter-view-css' => 'edf6b149',
|
'aphront-list-filter-view-css' => 'dd49ed34',
|
||||||
'aphront-pager-view-css' => 'edf6b149',
|
'aphront-pager-view-css' => 'dd49ed34',
|
||||||
'aphront-panel-view-css' => 'edf6b149',
|
'aphront-panel-view-css' => 'dd49ed34',
|
||||||
'aphront-side-nav-view-css' => 'edf6b149',
|
'aphront-side-nav-view-css' => 'dd49ed34',
|
||||||
'aphront-table-view-css' => 'edf6b149',
|
'aphront-table-view-css' => 'dd49ed34',
|
||||||
'aphront-tokenizer-control-css' => 'edf6b149',
|
'aphront-tokenizer-control-css' => 'dd49ed34',
|
||||||
'aphront-tooltip-css' => 'edf6b149',
|
'aphront-tooltip-css' => 'dd49ed34',
|
||||||
'aphront-typeahead-control-css' => 'edf6b149',
|
'aphront-typeahead-control-css' => 'dd49ed34',
|
||||||
'differential-changeset-view-css' => '19ebcc79',
|
'differential-changeset-view-css' => '19ebcc79',
|
||||||
'differential-core-view-css' => '19ebcc79',
|
'differential-core-view-css' => '19ebcc79',
|
||||||
'differential-inline-comment-editor' => '26972e06',
|
'differential-inline-comment-editor' => '26972e06',
|
||||||
|
@ -3106,15 +3151,15 @@ celerity_register_resource_map(array(
|
||||||
'javelin-workflow' => '971b021e',
|
'javelin-workflow' => '971b021e',
|
||||||
'maniphest-task-summary-css' => '7839ae2d',
|
'maniphest-task-summary-css' => '7839ae2d',
|
||||||
'maniphest-transaction-detail-css' => '7839ae2d',
|
'maniphest-transaction-detail-css' => '7839ae2d',
|
||||||
'phabricator-app-buttons-css' => 'edf6b149',
|
'phabricator-app-buttons-css' => 'dd49ed34',
|
||||||
'phabricator-content-source-view-css' => '19ebcc79',
|
'phabricator-content-source-view-css' => '19ebcc79',
|
||||||
'phabricator-core-buttons-css' => 'edf6b149',
|
'phabricator-core-buttons-css' => 'dd49ed34',
|
||||||
'phabricator-core-css' => 'edf6b149',
|
'phabricator-core-css' => 'dd49ed34',
|
||||||
'phabricator-directory-css' => 'edf6b149',
|
'phabricator-directory-css' => 'dd49ed34',
|
||||||
'phabricator-drag-and-drop-file-upload' => '26972e06',
|
'phabricator-drag-and-drop-file-upload' => '26972e06',
|
||||||
'phabricator-dropdown-menu' => '971b021e',
|
'phabricator-dropdown-menu' => '971b021e',
|
||||||
'phabricator-flag-css' => 'edf6b149',
|
'phabricator-flag-css' => 'dd49ed34',
|
||||||
'phabricator-jump-nav' => 'edf6b149',
|
'phabricator-jump-nav' => 'dd49ed34',
|
||||||
'phabricator-keyboard-shortcut' => '971b021e',
|
'phabricator-keyboard-shortcut' => '971b021e',
|
||||||
'phabricator-keyboard-shortcut-manager' => '971b021e',
|
'phabricator-keyboard-shortcut-manager' => '971b021e',
|
||||||
'phabricator-menu-item' => '971b021e',
|
'phabricator-menu-item' => '971b021e',
|
||||||
|
@ -3122,11 +3167,11 @@ celerity_register_resource_map(array(
|
||||||
'phabricator-paste-file-upload' => '971b021e',
|
'phabricator-paste-file-upload' => '971b021e',
|
||||||
'phabricator-prefab' => '971b021e',
|
'phabricator-prefab' => '971b021e',
|
||||||
'phabricator-project-tag-css' => '7839ae2d',
|
'phabricator-project-tag-css' => '7839ae2d',
|
||||||
'phabricator-remarkup-css' => 'edf6b149',
|
'phabricator-remarkup-css' => 'dd49ed34',
|
||||||
'phabricator-shaped-request' => '26972e06',
|
'phabricator-shaped-request' => '26972e06',
|
||||||
'phabricator-standard-page-view' => 'edf6b149',
|
'phabricator-standard-page-view' => 'dd49ed34',
|
||||||
'phabricator-tooltip' => '971b021e',
|
'phabricator-tooltip' => '971b021e',
|
||||||
'phabricator-transaction-view-css' => 'edf6b149',
|
'phabricator-transaction-view-css' => 'dd49ed34',
|
||||||
'syntax-highlighting-css' => 'edf6b149',
|
'syntax-highlighting-css' => 'dd49ed34',
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
|
|
@ -545,6 +545,8 @@ phutil_register_library_map(array(
|
||||||
'PackageModifyMail' => 'applications/owners/mail/PackageModifyMail.php',
|
'PackageModifyMail' => 'applications/owners/mail/PackageModifyMail.php',
|
||||||
'Phabricator404Controller' => 'applications/base/controller/Phabricator404Controller.php',
|
'Phabricator404Controller' => 'applications/base/controller/Phabricator404Controller.php',
|
||||||
'PhabricatorAccessLog' => 'infrastructure/PhabricatorAccessLog.php',
|
'PhabricatorAccessLog' => 'infrastructure/PhabricatorAccessLog.php',
|
||||||
|
'PhabricatorActionListView' => 'view/layout/PhabricatorActionListView.php',
|
||||||
|
'PhabricatorActionView' => 'view/layout/PhabricatorActionView.php',
|
||||||
'PhabricatorApplication' => 'applications/base/PhabricatorApplication.php',
|
'PhabricatorApplication' => 'applications/base/PhabricatorApplication.php',
|
||||||
'PhabricatorApplicationApplications' => 'applications/meta/application/PhabricatorApplicationApplications.php',
|
'PhabricatorApplicationApplications' => 'applications/meta/application/PhabricatorApplicationApplications.php',
|
||||||
'PhabricatorApplicationAudit' => 'applications/audit/application/PhabricatorApplicationAudit.php',
|
'PhabricatorApplicationAudit' => 'applications/audit/application/PhabricatorApplicationAudit.php',
|
||||||
|
@ -559,6 +561,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorApplicationMailingLists' => 'applications/mailinglists/application/PhabricatorApplicationMailingLists.php',
|
'PhabricatorApplicationMailingLists' => 'applications/mailinglists/application/PhabricatorApplicationMailingLists.php',
|
||||||
'PhabricatorApplicationManiphest' => 'applications/maniphest/application/PhabricatorApplicationManiphest.php',
|
'PhabricatorApplicationManiphest' => 'applications/maniphest/application/PhabricatorApplicationManiphest.php',
|
||||||
'PhabricatorApplicationMetaMTA' => 'applications/metamta/application/PhabricatorApplicationMetaMTA.php',
|
'PhabricatorApplicationMetaMTA' => 'applications/metamta/application/PhabricatorApplicationMetaMTA.php',
|
||||||
|
'PhabricatorApplicationPaste' => 'applications/paste/application/PhabricatorApplicationPaste.php',
|
||||||
'PhabricatorApplicationPeople' => 'applications/people/application/PhabricatorApplicationPeople.php',
|
'PhabricatorApplicationPeople' => 'applications/people/application/PhabricatorApplicationPeople.php',
|
||||||
'PhabricatorApplicationPhriction' => 'applications/phriction/application/PhabricatorApplicationPhriction.php',
|
'PhabricatorApplicationPhriction' => 'applications/phriction/application/PhabricatorApplicationPhriction.php',
|
||||||
'PhabricatorApplicationPonder' => 'applications/ponder/application/PhabricatorApplicationPonder.php',
|
'PhabricatorApplicationPonder' => 'applications/ponder/application/PhabricatorApplicationPonder.php',
|
||||||
|
@ -747,6 +750,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorGoodForNothingWorker' => 'infrastructure/daemon/workers/worker/PhabricatorGoodForNothingWorker.php',
|
'PhabricatorGoodForNothingWorker' => 'infrastructure/daemon/workers/worker/PhabricatorGoodForNothingWorker.php',
|
||||||
'PhabricatorHandleObjectSelectorDataView' => 'applications/phid/handle/view/PhabricatorHandleObjectSelectorDataView.php',
|
'PhabricatorHandleObjectSelectorDataView' => 'applications/phid/handle/view/PhabricatorHandleObjectSelectorDataView.php',
|
||||||
'PhabricatorHash' => 'infrastructure/util/PhabricatorHash.php',
|
'PhabricatorHash' => 'infrastructure/util/PhabricatorHash.php',
|
||||||
|
'PhabricatorHeaderView' => 'view/layout/PhabricatorHeaderView.php',
|
||||||
'PhabricatorHelpController' => 'applications/help/controller/PhabricatorHelpController.php',
|
'PhabricatorHelpController' => 'applications/help/controller/PhabricatorHelpController.php',
|
||||||
'PhabricatorHelpKeyboardShortcutController' => 'applications/help/controller/PhabricatorHelpKeyboardShortcutController.php',
|
'PhabricatorHelpKeyboardShortcutController' => 'applications/help/controller/PhabricatorHelpKeyboardShortcutController.php',
|
||||||
'PhabricatorIRCBot' => 'infrastructure/daemon/irc/PhabricatorIRCBot.php',
|
'PhabricatorIRCBot' => 'infrastructure/daemon/irc/PhabricatorIRCBot.php',
|
||||||
|
@ -865,6 +869,8 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorObjectHandleConstants' => 'applications/phid/handle/const/PhabricatorObjectHandleConstants.php',
|
'PhabricatorObjectHandleConstants' => 'applications/phid/handle/const/PhabricatorObjectHandleConstants.php',
|
||||||
'PhabricatorObjectHandleData' => 'applications/phid/handle/PhabricatorObjectHandleData.php',
|
'PhabricatorObjectHandleData' => 'applications/phid/handle/PhabricatorObjectHandleData.php',
|
||||||
'PhabricatorObjectHandleStatus' => 'applications/phid/handle/const/PhabricatorObjectHandleStatus.php',
|
'PhabricatorObjectHandleStatus' => 'applications/phid/handle/const/PhabricatorObjectHandleStatus.php',
|
||||||
|
'PhabricatorObjectItemListView' => 'view/layout/PhabricatorObjectItemListView.php',
|
||||||
|
'PhabricatorObjectItemView' => 'view/layout/PhabricatorObjectItemView.php',
|
||||||
'PhabricatorObjectListView' => 'view/control/PhabricatorObjectListView.php',
|
'PhabricatorObjectListView' => 'view/control/PhabricatorObjectListView.php',
|
||||||
'PhabricatorObjectSelectorDialog' => 'view/control/PhabricatorObjectSelectorDialog.php',
|
'PhabricatorObjectSelectorDialog' => 'view/control/PhabricatorObjectSelectorDialog.php',
|
||||||
'PhabricatorOffsetPagedQuery' => 'infrastructure/query/PhabricatorOffsetPagedQuery.php',
|
'PhabricatorOffsetPagedQuery' => 'infrastructure/query/PhabricatorOffsetPagedQuery.php',
|
||||||
|
@ -886,6 +892,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorPaste' => 'applications/paste/storage/PhabricatorPaste.php',
|
'PhabricatorPaste' => 'applications/paste/storage/PhabricatorPaste.php',
|
||||||
'PhabricatorPasteController' => 'applications/paste/controller/PhabricatorPasteController.php',
|
'PhabricatorPasteController' => 'applications/paste/controller/PhabricatorPasteController.php',
|
||||||
'PhabricatorPasteDAO' => 'applications/paste/storage/PhabricatorPasteDAO.php',
|
'PhabricatorPasteDAO' => 'applications/paste/storage/PhabricatorPasteDAO.php',
|
||||||
|
'PhabricatorPasteEditController' => 'applications/paste/controller/PhabricatorPasteEditController.php',
|
||||||
'PhabricatorPasteListController' => 'applications/paste/controller/PhabricatorPasteListController.php',
|
'PhabricatorPasteListController' => 'applications/paste/controller/PhabricatorPasteListController.php',
|
||||||
'PhabricatorPasteQuery' => 'applications/paste/query/PhabricatorPasteQuery.php',
|
'PhabricatorPasteQuery' => 'applications/paste/query/PhabricatorPasteQuery.php',
|
||||||
'PhabricatorPasteViewController' => 'applications/paste/controller/PhabricatorPasteViewController.php',
|
'PhabricatorPasteViewController' => 'applications/paste/controller/PhabricatorPasteViewController.php',
|
||||||
|
@ -925,6 +932,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorProjectTransaction' => 'applications/project/storage/PhabricatorProjectTransaction.php',
|
'PhabricatorProjectTransaction' => 'applications/project/storage/PhabricatorProjectTransaction.php',
|
||||||
'PhabricatorProjectTransactionType' => 'applications/project/constants/PhabricatorProjectTransactionType.php',
|
'PhabricatorProjectTransactionType' => 'applications/project/constants/PhabricatorProjectTransactionType.php',
|
||||||
'PhabricatorProjectUpdateController' => 'applications/project/controller/PhabricatorProjectUpdateController.php',
|
'PhabricatorProjectUpdateController' => 'applications/project/controller/PhabricatorProjectUpdateController.php',
|
||||||
|
'PhabricatorPropertyListView' => 'view/layout/PhabricatorPropertyListView.php',
|
||||||
'PhabricatorQuery' => 'infrastructure/query/PhabricatorQuery.php',
|
'PhabricatorQuery' => 'infrastructure/query/PhabricatorQuery.php',
|
||||||
'PhabricatorRedirectController' => 'applications/base/controller/PhabricatorRedirectController.php',
|
'PhabricatorRedirectController' => 'applications/base/controller/PhabricatorRedirectController.php',
|
||||||
'PhabricatorRefreshCSRFController' => 'applications/auth/controller/PhabricatorRefreshCSRFController.php',
|
'PhabricatorRefreshCSRFController' => 'applications/auth/controller/PhabricatorRefreshCSRFController.php',
|
||||||
|
@ -1034,6 +1042,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorSlug' => 'infrastructure/util/PhabricatorSlug.php',
|
'PhabricatorSlug' => 'infrastructure/util/PhabricatorSlug.php',
|
||||||
'PhabricatorSlugTestCase' => 'infrastructure/util/__tests__/PhabricatorSlugTestCase.php',
|
'PhabricatorSlugTestCase' => 'infrastructure/util/__tests__/PhabricatorSlugTestCase.php',
|
||||||
'PhabricatorSortTableExample' => 'applications/uiexample/examples/PhabricatorSortTableExample.php',
|
'PhabricatorSortTableExample' => 'applications/uiexample/examples/PhabricatorSortTableExample.php',
|
||||||
|
'PhabricatorSourceCodeView' => 'view/layout/PhabricatorSourceCodeView.php',
|
||||||
'PhabricatorStandardPageView' => 'view/page/PhabricatorStandardPageView.php',
|
'PhabricatorStandardPageView' => 'view/page/PhabricatorStandardPageView.php',
|
||||||
'PhabricatorStatusController' => 'applications/status/PhabricatorStatusController.php',
|
'PhabricatorStatusController' => 'applications/status/PhabricatorStatusController.php',
|
||||||
'PhabricatorStorageFixtureScopeGuard' => 'infrastructure/testing/fixture/PhabricatorStorageFixtureScopeGuard.php',
|
'PhabricatorStorageFixtureScopeGuard' => 'infrastructure/testing/fixture/PhabricatorStorageFixtureScopeGuard.php',
|
||||||
|
@ -1673,6 +1682,8 @@ phutil_register_library_map(array(
|
||||||
'PackageDeleteMail' => 'PackageMail',
|
'PackageDeleteMail' => 'PackageMail',
|
||||||
'PackageModifyMail' => 'PackageMail',
|
'PackageModifyMail' => 'PackageMail',
|
||||||
'Phabricator404Controller' => 'PhabricatorController',
|
'Phabricator404Controller' => 'PhabricatorController',
|
||||||
|
'PhabricatorActionListView' => 'AphrontView',
|
||||||
|
'PhabricatorActionView' => 'AphrontView',
|
||||||
'PhabricatorApplicationApplications' => 'PhabricatorApplication',
|
'PhabricatorApplicationApplications' => 'PhabricatorApplication',
|
||||||
'PhabricatorApplicationAudit' => 'PhabricatorApplication',
|
'PhabricatorApplicationAudit' => 'PhabricatorApplication',
|
||||||
'PhabricatorApplicationAuth' => 'PhabricatorApplication',
|
'PhabricatorApplicationAuth' => 'PhabricatorApplication',
|
||||||
|
@ -1686,6 +1697,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorApplicationMailingLists' => 'PhabricatorApplication',
|
'PhabricatorApplicationMailingLists' => 'PhabricatorApplication',
|
||||||
'PhabricatorApplicationManiphest' => 'PhabricatorApplication',
|
'PhabricatorApplicationManiphest' => 'PhabricatorApplication',
|
||||||
'PhabricatorApplicationMetaMTA' => 'PhabricatorApplication',
|
'PhabricatorApplicationMetaMTA' => 'PhabricatorApplication',
|
||||||
|
'PhabricatorApplicationPaste' => 'PhabricatorApplication',
|
||||||
'PhabricatorApplicationPeople' => 'PhabricatorApplication',
|
'PhabricatorApplicationPeople' => 'PhabricatorApplication',
|
||||||
'PhabricatorApplicationPhriction' => 'PhabricatorApplication',
|
'PhabricatorApplicationPhriction' => 'PhabricatorApplication',
|
||||||
'PhabricatorApplicationPonder' => 'PhabricatorApplication',
|
'PhabricatorApplicationPonder' => 'PhabricatorApplication',
|
||||||
|
@ -1855,6 +1867,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorGarbageCollectorDaemon' => 'PhabricatorDaemon',
|
'PhabricatorGarbageCollectorDaemon' => 'PhabricatorDaemon',
|
||||||
'PhabricatorGlobalLock' => 'PhutilLock',
|
'PhabricatorGlobalLock' => 'PhutilLock',
|
||||||
'PhabricatorGoodForNothingWorker' => 'PhabricatorWorker',
|
'PhabricatorGoodForNothingWorker' => 'PhabricatorWorker',
|
||||||
|
'PhabricatorHeaderView' => 'AphrontView',
|
||||||
'PhabricatorHelpController' => 'PhabricatorController',
|
'PhabricatorHelpController' => 'PhabricatorController',
|
||||||
'PhabricatorHelpKeyboardShortcutController' => 'PhabricatorHelpController',
|
'PhabricatorHelpKeyboardShortcutController' => 'PhabricatorHelpController',
|
||||||
'PhabricatorIRCBot' => 'PhabricatorDaemon',
|
'PhabricatorIRCBot' => 'PhabricatorDaemon',
|
||||||
|
@ -1952,6 +1965,8 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorOAuthServerTokenController' => 'PhabricatorAuthController',
|
'PhabricatorOAuthServerTokenController' => 'PhabricatorAuthController',
|
||||||
'PhabricatorOAuthUnlinkController' => 'PhabricatorAuthController',
|
'PhabricatorOAuthUnlinkController' => 'PhabricatorAuthController',
|
||||||
'PhabricatorObjectHandleStatus' => 'PhabricatorObjectHandleConstants',
|
'PhabricatorObjectHandleStatus' => 'PhabricatorObjectHandleConstants',
|
||||||
|
'PhabricatorObjectItemListView' => 'AphrontView',
|
||||||
|
'PhabricatorObjectItemView' => 'AphrontView',
|
||||||
'PhabricatorObjectListView' => 'AphrontView',
|
'PhabricatorObjectListView' => 'AphrontView',
|
||||||
'PhabricatorOffsetPagedQuery' => 'PhabricatorQuery',
|
'PhabricatorOffsetPagedQuery' => 'PhabricatorQuery',
|
||||||
'PhabricatorOwnersController' => 'PhabricatorController',
|
'PhabricatorOwnersController' => 'PhabricatorController',
|
||||||
|
@ -1977,6 +1992,7 @@ phutil_register_library_map(array(
|
||||||
),
|
),
|
||||||
'PhabricatorPasteController' => 'PhabricatorController',
|
'PhabricatorPasteController' => 'PhabricatorController',
|
||||||
'PhabricatorPasteDAO' => 'PhabricatorLiskDAO',
|
'PhabricatorPasteDAO' => 'PhabricatorLiskDAO',
|
||||||
|
'PhabricatorPasteEditController' => 'PhabricatorPasteController',
|
||||||
'PhabricatorPasteListController' => 'PhabricatorPasteController',
|
'PhabricatorPasteListController' => 'PhabricatorPasteController',
|
||||||
'PhabricatorPasteQuery' => 'PhabricatorCursorPagedPolicyQuery',
|
'PhabricatorPasteQuery' => 'PhabricatorCursorPagedPolicyQuery',
|
||||||
'PhabricatorPasteViewController' => 'PhabricatorPasteController',
|
'PhabricatorPasteViewController' => 'PhabricatorPasteController',
|
||||||
|
@ -2014,6 +2030,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorProjectTransaction' => 'PhabricatorProjectDAO',
|
'PhabricatorProjectTransaction' => 'PhabricatorProjectDAO',
|
||||||
'PhabricatorProjectTransactionType' => 'PhabricatorProjectConstants',
|
'PhabricatorProjectTransactionType' => 'PhabricatorProjectConstants',
|
||||||
'PhabricatorProjectUpdateController' => 'PhabricatorProjectController',
|
'PhabricatorProjectUpdateController' => 'PhabricatorProjectController',
|
||||||
|
'PhabricatorPropertyListView' => 'AphrontView',
|
||||||
'PhabricatorRedirectController' => 'PhabricatorController',
|
'PhabricatorRedirectController' => 'PhabricatorController',
|
||||||
'PhabricatorRefreshCSRFController' => 'PhabricatorAuthController',
|
'PhabricatorRefreshCSRFController' => 'PhabricatorAuthController',
|
||||||
'PhabricatorRemarkupRuleCountdown' => 'PhutilRemarkupRule',
|
'PhabricatorRemarkupRuleCountdown' => 'PhutilRemarkupRule',
|
||||||
|
@ -2108,6 +2125,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorSlowvotePollController' => 'PhabricatorSlowvoteController',
|
'PhabricatorSlowvotePollController' => 'PhabricatorSlowvoteController',
|
||||||
'PhabricatorSlugTestCase' => 'PhabricatorTestCase',
|
'PhabricatorSlugTestCase' => 'PhabricatorTestCase',
|
||||||
'PhabricatorSortTableExample' => 'PhabricatorUIExample',
|
'PhabricatorSortTableExample' => 'PhabricatorUIExample',
|
||||||
|
'PhabricatorSourceCodeView' => 'AphrontView',
|
||||||
'PhabricatorStandardPageView' => 'AphrontPageView',
|
'PhabricatorStandardPageView' => 'AphrontPageView',
|
||||||
'PhabricatorStatusController' => 'PhabricatorController',
|
'PhabricatorStatusController' => 'PhabricatorController',
|
||||||
'PhabricatorStorageManagementDatabasesWorkflow' => 'PhabricatorStorageManagementWorkflow',
|
'PhabricatorStorageManagementDatabasesWorkflow' => 'PhabricatorStorageManagementWorkflow',
|
||||||
|
|
|
@ -196,11 +196,6 @@ class AphrontDefaultApplicationConfiguration
|
||||||
|
|
||||||
'/status/' => 'PhabricatorStatusController',
|
'/status/' => 'PhabricatorStatusController',
|
||||||
|
|
||||||
'/paste/' => array(
|
|
||||||
'' => 'PhabricatorPasteListController',
|
|
||||||
'filter/(?P<filter>\w+)/' => 'PhabricatorPasteListController',
|
|
||||||
),
|
|
||||||
'/P(?P<id>\d+)' => 'PhabricatorPasteViewController',
|
|
||||||
|
|
||||||
'/help/' => array(
|
'/help/' => array(
|
||||||
'keyboardshortcut/' => 'PhabricatorHelpKeyboardShortcutController',
|
'keyboardshortcut/' => 'PhabricatorHelpKeyboardShortcutController',
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
|
|
||||||
abstract class PhabricatorController extends AphrontController {
|
abstract class PhabricatorController extends AphrontController {
|
||||||
|
|
||||||
|
private $handles;
|
||||||
|
|
||||||
public function shouldRequireLogin() {
|
public function shouldRequireLogin() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -163,6 +165,11 @@ abstract class PhabricatorController extends AphrontController {
|
||||||
|
|
||||||
$page->appendChild($view);
|
$page->appendChild($view);
|
||||||
|
|
||||||
|
if (idx($options, 'device')) {
|
||||||
|
$page->setDeviceReady(true);
|
||||||
|
$view->appendChild($page->renderFooter());
|
||||||
|
}
|
||||||
|
|
||||||
$response = new AphrontWebpageResponse();
|
$response = new AphrontWebpageResponse();
|
||||||
return $response->setContent($page->render());
|
return $response->setContent($page->render());
|
||||||
}
|
}
|
||||||
|
@ -200,4 +207,19 @@ abstract class PhabricatorController extends AphrontController {
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getHandle($phid) {
|
||||||
|
if (empty($this->handles[$phid])) {
|
||||||
|
throw new Exception(
|
||||||
|
"Attempting to access handle which wasn't loaded: {$phid}");
|
||||||
|
}
|
||||||
|
return $this->handles[$phid];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function loadHandles(array $phids) {
|
||||||
|
$phids = array_filter($phids);
|
||||||
|
$this->handles = id(new PhabricatorObjectHandleData($phids))
|
||||||
|
->setViewer($this->getRequest()->getUser())
|
||||||
|
->loadHandles();
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
final class PhabricatorApplicationPaste extends PhabricatorApplication {
|
||||||
|
|
||||||
|
public function getBaseURI() {
|
||||||
|
return '/paste/';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAutospriteName() {
|
||||||
|
return 'paste';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTitleGlyph() {
|
||||||
|
return "\xE2\x9C\x8E";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRoutes() {
|
||||||
|
return array(
|
||||||
|
'/P(?P<id>\d+)' => 'PhabricatorPasteViewController',
|
||||||
|
'/paste/' => array(
|
||||||
|
'' => 'PhabricatorPasteListController',
|
||||||
|
'filter/(?P<filter>\w+)/' => 'PhabricatorPasteListController',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2011 Facebook, Inc.
|
* Copyright 2012 Facebook, Inc.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -18,6 +18,26 @@
|
||||||
|
|
||||||
abstract class PhabricatorPasteController extends PhabricatorController {
|
abstract class PhabricatorPasteController extends PhabricatorController {
|
||||||
|
|
||||||
|
public function buildSideNavView(PhabricatorPaste $paste = null) {
|
||||||
|
$nav = new AphrontSideNavFilterView();
|
||||||
|
$nav->setBaseURI(new PhutilURI($this->getApplicationURI('filter/')));
|
||||||
|
|
||||||
|
if ($paste) {
|
||||||
|
$nav->addFilter('paste', 'P'.$paste->getID(), '/P'.$paste->getID());
|
||||||
|
$nav->addSpacer();
|
||||||
|
}
|
||||||
|
|
||||||
|
$nav->addLabel('Create');
|
||||||
|
$nav->addFilter('create', 'New Paste');
|
||||||
|
|
||||||
|
$nav->addSpacer();
|
||||||
|
$nav->addLabel('Pastes');
|
||||||
|
$nav->addFilter('my', 'My Pastes');
|
||||||
|
$nav->addFilter('all', 'All Pastes');
|
||||||
|
|
||||||
|
return $nav;
|
||||||
|
}
|
||||||
|
|
||||||
public function buildStandardPageResponse($view, array $data) {
|
public function buildStandardPageResponse($view, array $data) {
|
||||||
|
|
||||||
$page = $this->buildStandardPageView();
|
$page = $this->buildStandardPageView();
|
||||||
|
|
|
@ -102,31 +102,9 @@ final class PhabricatorPasteListController extends PhabricatorPasteController {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$filters = array(
|
$side_nav = $this->buildSideNavView();
|
||||||
'create' => array(
|
$side_nav->selectFilter($this->getFilter());
|
||||||
'name' => 'Create Paste',
|
|
||||||
),
|
|
||||||
'my' => array(
|
|
||||||
'name' => 'My Pastes',
|
|
||||||
),
|
|
||||||
'all' => array(
|
|
||||||
'name' => 'All Pastes',
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
$side_nav = new AphrontSideNavView();
|
|
||||||
foreach ($filters as $filter_key => $filter) {
|
|
||||||
$selected = $filter_key == $this->getFilter();
|
|
||||||
$side_nav->addNavItem(
|
|
||||||
phutil_render_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => '/paste/filter/'.$filter_key.'/',
|
|
||||||
'class' => $selected ? 'aphront-side-nav-selected': null,
|
|
||||||
),
|
|
||||||
$filter['name'])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->getErrorView()) {
|
if ($this->getErrorView()) {
|
||||||
$side_nav->appendChild($this->getErrorView());
|
$side_nav->appendChild($this->getErrorView());
|
||||||
|
@ -142,7 +120,7 @@ final class PhabricatorPasteListController extends PhabricatorPasteController {
|
||||||
'href' => '/paste/filter/all',
|
'href' => '/paste/filter/all',
|
||||||
),
|
),
|
||||||
'See all Pastes');
|
'See all Pastes');
|
||||||
$header = "Recent Pastes · {$see_all}";
|
$header = "Recent Pastes";
|
||||||
break;
|
break;
|
||||||
case 'my':
|
case 'my':
|
||||||
$header = 'Your Pastes';
|
$header = 'Your Pastes';
|
||||||
|
@ -152,14 +130,17 @@ final class PhabricatorPasteListController extends PhabricatorPasteController {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->loadHandles(mpull($paste_list, 'getAuthorPHID'));
|
||||||
|
|
||||||
$side_nav->appendChild(
|
$side_nav->appendChild(
|
||||||
$this->renderPasteList($paste_list, $header, $pager));
|
$this->renderPasteList($paste_list, $header, $pager));
|
||||||
|
|
||||||
|
|
||||||
return $this->buildStandardPageResponse(
|
return $this->buildApplicationPage(
|
||||||
$side_nav,
|
$side_nav,
|
||||||
array(
|
array(
|
||||||
'title' => 'Paste',
|
'title' => 'Paste',
|
||||||
|
'device' => true,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -310,95 +291,26 @@ final class PhabricatorPasteListController extends PhabricatorPasteController {
|
||||||
private function renderPasteList(array $pastes, $header, $pager) {
|
private function renderPasteList(array $pastes, $header, $pager) {
|
||||||
assert_instances_of($pastes, 'PhabricatorPaste');
|
assert_instances_of($pastes, 'PhabricatorPaste');
|
||||||
|
|
||||||
$phids = mpull($pastes, 'getAuthorPHID');
|
$user = $this->getRequest()->getUser();
|
||||||
$handles = array();
|
|
||||||
if ($phids) {
|
|
||||||
$handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
|
|
||||||
}
|
|
||||||
|
|
||||||
$phids = mpull($pastes, 'getFilePHID');
|
$list = new PhabricatorObjectItemListView();
|
||||||
$file_uris = array();
|
$list->setHeader($header);
|
||||||
if ($phids) {
|
|
||||||
$files = id(new PhabricatorFile())->loadAllWhere(
|
|
||||||
'phid in (%Ls)',
|
|
||||||
$phids);
|
|
||||||
if ($files) {
|
|
||||||
$file_uris = mpull($files, 'getBestURI', 'getPHID');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$paste_list_rows = array();
|
|
||||||
foreach ($pastes as $paste) {
|
foreach ($pastes as $paste) {
|
||||||
|
$created = phabricator_datetime($paste->getDateCreated(), $user);
|
||||||
|
|
||||||
$handle = $handles[$paste->getAuthorPHID()];
|
$item = id(new PhabricatorObjectItemView())
|
||||||
$file_uri = $file_uris[$paste->getFilePHID()];
|
->setHeader('P'.$paste->getID().' '.$paste->getTitle())
|
||||||
|
->setHref('/P'.$paste->getID())
|
||||||
|
->addDetail(
|
||||||
|
pht('Author'),
|
||||||
|
$this->getHandle($paste->getAuthorPHID())->renderLink())
|
||||||
|
->addAttribute(pht('Created %s', $created));
|
||||||
|
|
||||||
$paste_list_rows[] = array(
|
$list->addItem($item);
|
||||||
phutil_escape_html('P'.$paste->getID()),
|
|
||||||
|
|
||||||
// TODO: Make this filter by user instead of going to their profile.
|
|
||||||
phutil_render_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => '/p/'.$handle->getName().'/',
|
|
||||||
),
|
|
||||||
phutil_escape_html($handle->getName())),
|
|
||||||
|
|
||||||
phutil_escape_html($paste->getLanguage()),
|
|
||||||
|
|
||||||
phutil_render_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => '/P'.$paste->getID(),
|
|
||||||
),
|
|
||||||
phutil_escape_html(
|
|
||||||
nonempty(
|
|
||||||
$paste->getTitle(),
|
|
||||||
'Untitled Masterwork P'.$paste->getID()))),
|
|
||||||
|
|
||||||
phutil_render_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => $file_uri,
|
|
||||||
),
|
|
||||||
phutil_escape_html($paste->getFilePHID())),
|
|
||||||
|
|
||||||
phabricator_datetime(
|
|
||||||
$paste->getDateCreated(),
|
|
||||||
$this->getRequest()->getUser()),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$list->setPager($pager);
|
||||||
|
|
||||||
$table = new AphrontTableView($paste_list_rows);
|
return $list;
|
||||||
$table->setHeaders(
|
|
||||||
array(
|
|
||||||
'Paste ID',
|
|
||||||
'Author',
|
|
||||||
'Language',
|
|
||||||
'Title',
|
|
||||||
'File',
|
|
||||||
'Created',
|
|
||||||
));
|
|
||||||
|
|
||||||
$table->setColumnClasses(
|
|
||||||
array(
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
'wide pri',
|
|
||||||
null,
|
|
||||||
'right',
|
|
||||||
));
|
|
||||||
|
|
||||||
$panel = new AphrontPanelView();
|
|
||||||
$panel->setWidth(AphrontPanelView::WIDTH_FULL);
|
|
||||||
$panel->setHeader($header);
|
|
||||||
$panel->appendChild($table);
|
|
||||||
if ($pager) {
|
|
||||||
$panel->appendChild($pager);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $panel;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,21 +19,20 @@
|
||||||
final class PhabricatorPasteViewController extends PhabricatorPasteController {
|
final class PhabricatorPasteViewController extends PhabricatorPasteController {
|
||||||
|
|
||||||
private $id;
|
private $id;
|
||||||
|
private $handles;
|
||||||
|
|
||||||
public function willProcessRequest(array $data) {
|
public function willProcessRequest(array $data) {
|
||||||
$this->id = $data['id'];
|
$this->id = $data['id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function processRequest() {
|
public function processRequest() {
|
||||||
|
|
||||||
$request = $this->getRequest();
|
$request = $this->getRequest();
|
||||||
$user = $request->getUser();
|
$user = $request->getUser();
|
||||||
|
|
||||||
$paste = id(new PhabricatorPasteQuery())
|
$paste = id(new PhabricatorPasteQuery())
|
||||||
->setViewer($user)
|
->setViewer($user)
|
||||||
->withPasteIDs(array($this->id))
|
->withIDs(array($this->id))
|
||||||
->executeOne();
|
->executeOne();
|
||||||
|
|
||||||
if (!$paste) {
|
if (!$paste) {
|
||||||
return new Aphront404Response();
|
return new Aphront404Response();
|
||||||
}
|
}
|
||||||
|
@ -45,94 +44,87 @@ final class PhabricatorPasteViewController extends PhabricatorPasteController {
|
||||||
return new Aphront400Response();
|
return new Aphront400Response();
|
||||||
}
|
}
|
||||||
|
|
||||||
$corpus = $this->buildCorpus($paste, $file);
|
$this->loadHandles(
|
||||||
$paste_panel = new AphrontPanelView();
|
|
||||||
|
|
||||||
$author_phid = $paste->getAuthorPHID();
|
|
||||||
$header = 'Viewing Paste '.$paste->getID().' by '.
|
|
||||||
PhabricatorObjectHandleData::loadOneHandle($author_phid)->renderLink();
|
|
||||||
if (strlen($paste->getTitle())) {
|
|
||||||
$header .= ' - '.phutil_escape_html($paste->getTitle());
|
|
||||||
}
|
|
||||||
$paste_panel->setHeader($header);
|
|
||||||
|
|
||||||
$paste_panel->setWidth(AphrontPanelView::WIDTH_FULL);
|
|
||||||
$paste_panel->addButton(
|
|
||||||
phutil_render_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => '/paste/?fork='.$paste->getID(),
|
|
||||||
'class' => 'green button',
|
|
||||||
),
|
|
||||||
'Fork This'));
|
|
||||||
|
|
||||||
$raw_uri = $file->getBestURI();
|
|
||||||
$paste_panel->addButton(
|
|
||||||
phutil_render_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => $raw_uri,
|
|
||||||
'class' => 'button',
|
|
||||||
),
|
|
||||||
'View Raw Text'));
|
|
||||||
|
|
||||||
$paste_panel->appendChild($corpus);
|
|
||||||
|
|
||||||
$forks_panel = null;
|
|
||||||
$forks_of_this_paste = id(new PhabricatorPaste())->loadAllWhere(
|
|
||||||
'parentPHID = %s',
|
|
||||||
$paste->getPHID());
|
|
||||||
|
|
||||||
if ($forks_of_this_paste) {
|
|
||||||
$forks_panel = new AphrontPanelView();
|
|
||||||
$forks_panel->setHeader("Forks of this paste");
|
|
||||||
$forks = array();
|
|
||||||
foreach ($forks_of_this_paste as $fork) {
|
|
||||||
$forks[] = array(
|
|
||||||
$fork->getID(),
|
|
||||||
phutil_render_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => '/P'.$fork->getID(),
|
|
||||||
),
|
|
||||||
phutil_escape_html($fork->getTitle())
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$forks_table = new AphrontTableView($forks);
|
|
||||||
$forks_table->setHeaders(
|
|
||||||
array(
|
|
||||||
'Paste ID',
|
|
||||||
'Title',
|
|
||||||
)
|
|
||||||
);
|
|
||||||
$forks_table->setColumnClasses(
|
|
||||||
array(
|
|
||||||
null,
|
|
||||||
'wide pri',
|
|
||||||
)
|
|
||||||
);
|
|
||||||
$forks_panel->appendChild($forks_table);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->buildStandardPageResponse(
|
|
||||||
array(
|
array(
|
||||||
$paste_panel,
|
$paste->getAuthorPHID(),
|
||||||
$forks_panel,
|
$paste->getParentPHID(),
|
||||||
),
|
));
|
||||||
|
|
||||||
|
$header = $this->buildHeaderView($paste);
|
||||||
|
$actions = $this->buildActionView($paste, $file);
|
||||||
|
$properties = $this->buildPropertyView($paste);
|
||||||
|
$source_code = $this->buildSourceCodeView($paste, $file);
|
||||||
|
|
||||||
|
$nav = $this->buildSideNavView($paste);
|
||||||
|
$nav->selectFilter('paste');
|
||||||
|
$nav->appendChild(
|
||||||
array(
|
array(
|
||||||
'title' => 'Paste: '.nonempty($paste->getTitle(), 'P'.$paste->getID()),
|
$header,
|
||||||
|
$actions,
|
||||||
|
$properties,
|
||||||
|
$source_code,
|
||||||
|
// $forks_panel,
|
||||||
|
));
|
||||||
|
|
||||||
|
return $this->buildApplicationPage(
|
||||||
|
$nav,
|
||||||
|
array(
|
||||||
|
'title' => 'P'.$paste->getID().' '.$paste->getTitle(),
|
||||||
|
'device' => true,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function buildCorpus($paste, $file) {
|
private function buildHeaderView(PhabricatorPaste $paste) {
|
||||||
// Blantently copied from DiffusionBrowseFileController
|
return id(new PhabricatorHeaderView())
|
||||||
|
->setObjectName('P'.$paste->getID())
|
||||||
|
->setHeader($paste->getTitle());
|
||||||
|
}
|
||||||
|
|
||||||
require_celerity_resource('diffusion-source-css');
|
private function buildActionView(
|
||||||
require_celerity_resource('syntax-highlighting-css');
|
PhabricatorPaste $paste,
|
||||||
|
PhabricatorFile $file) {
|
||||||
|
|
||||||
|
return id(new PhabricatorActionListView())
|
||||||
|
->addAction(
|
||||||
|
id(new PhabricatorActionView())
|
||||||
|
->setName(pht('Fork This Paste'))
|
||||||
|
->setIcon('fork')
|
||||||
|
->setHref($this->getApplicationURI('?fork='.$paste->getID())))
|
||||||
|
->addAction(
|
||||||
|
id(new PhabricatorActionView())
|
||||||
|
->setName(pht('View Raw File'))
|
||||||
|
->setIcon('file')
|
||||||
|
->setHref($file->getBestURI()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildPropertyView(PhabricatorPaste $paste) {
|
||||||
|
$user = $this->getRequest()->getUser();
|
||||||
|
$properties = new PhabricatorPropertyListView();
|
||||||
|
|
||||||
|
$properties->addProperty(
|
||||||
|
pht('Author'),
|
||||||
|
$this->getHandle($paste->getAuthorPHID())->renderLink());
|
||||||
|
|
||||||
|
$properties->addProperty(
|
||||||
|
pht('Created'),
|
||||||
|
phabricator_datetime($paste->getDateCreated(), $user));
|
||||||
|
|
||||||
|
if ($paste->getParentPHID()) {
|
||||||
|
$properties->addProperty(
|
||||||
|
pht('Forked From'),
|
||||||
|
$this->getHandle($paste->getParentPHID())->renderLink());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildSourceCodeView(
|
||||||
|
PhabricatorPaste $paste,
|
||||||
|
PhabricatorFile $file) {
|
||||||
|
|
||||||
$language = $paste->getLanguage();
|
$language = $paste->getLanguage();
|
||||||
$source = $file->loadFileData();
|
$source = $file->loadFileData();
|
||||||
|
|
||||||
if (empty($language)) {
|
if (empty($language)) {
|
||||||
$source = PhabricatorSyntaxHighlighter::highlightWithFilename(
|
$source = PhabricatorSyntaxHighlighter::highlightWithFilename(
|
||||||
$paste->getTitle(),
|
$paste->getTitle(),
|
||||||
|
@ -143,63 +135,10 @@ final class PhabricatorPasteViewController extends PhabricatorPasteController {
|
||||||
$source);
|
$source);
|
||||||
}
|
}
|
||||||
|
|
||||||
$text_list = explode("\n", $source);
|
$lines = explode("\n", $source);
|
||||||
|
|
||||||
Javelin::initBehavior('phabricator-oncopy', array());
|
return id(new PhabricatorSourceCodeView())
|
||||||
$rows = $this->buildDisplayRows($text_list);
|
->setLines($lines);
|
||||||
|
|
||||||
// TODO: Split the "one-up source listing" view into its own class and
|
|
||||||
// share it properly between Paste and Diffusion.
|
|
||||||
|
|
||||||
$corpus_table = phutil_render_tag(
|
|
||||||
'table',
|
|
||||||
array(
|
|
||||||
'class' => 'diffusion-source remarkup-code PhabricatorMonospaced',
|
|
||||||
),
|
|
||||||
implode("\n", $rows));
|
|
||||||
|
|
||||||
$corpus = phutil_render_tag(
|
|
||||||
'div',
|
|
||||||
array(
|
|
||||||
'style' => 'padding: 0pt 2em;',
|
|
||||||
),
|
|
||||||
$corpus_table);
|
|
||||||
|
|
||||||
return $corpus;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function buildDisplayRows($text_list) {
|
|
||||||
$rows = array();
|
|
||||||
$n = 1;
|
|
||||||
|
|
||||||
foreach ($text_list as $k => $line) {
|
|
||||||
// Pardon the ugly for the time being.
|
|
||||||
// And eventually this will highlight a line that you click
|
|
||||||
// like diffusion does. Or maybe allow for line comments
|
|
||||||
// like differential. Either way it will be better than it is now.
|
|
||||||
$anchor = 'L'.$n;
|
|
||||||
$link = phutil_render_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'name' => $anchor,
|
|
||||||
'href' => '#'.$anchor,
|
|
||||||
),
|
|
||||||
$n);
|
|
||||||
$link = phutil_render_tag(
|
|
||||||
'th',
|
|
||||||
array(
|
|
||||||
'class' => 'diffusion-line-link',
|
|
||||||
),
|
|
||||||
$link);
|
|
||||||
$rows[] = '<tr id="'.$anchor.'">'.$link.
|
|
||||||
'<td style="white-space: pre-wrap;">'.
|
|
||||||
// NOTE: See the 'phabricator-oncopy' behavior.
|
|
||||||
"\xE2\x80\x8B".
|
|
||||||
$line.'</td></tr>';
|
|
||||||
++$n;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $rows;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,11 +18,17 @@
|
||||||
|
|
||||||
final class PhabricatorPasteQuery extends PhabricatorCursorPagedPolicyQuery {
|
final class PhabricatorPasteQuery extends PhabricatorCursorPagedPolicyQuery {
|
||||||
|
|
||||||
private $pasteIDs;
|
private $ids;
|
||||||
|
private $phids;
|
||||||
private $authorPHIDs;
|
private $authorPHIDs;
|
||||||
|
|
||||||
public function withPasteIDs(array $ids) {
|
public function withIDs(array $ids) {
|
||||||
$this->pasteIDs = $ids;
|
$this->ids = $ids;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function withPHIDs(array $phids) {
|
||||||
|
$this->phids = $phids;
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,11 +59,18 @@ final class PhabricatorPasteQuery extends PhabricatorCursorPagedPolicyQuery {
|
||||||
|
|
||||||
$where[] = $this->buildPagingClause($conn_r);
|
$where[] = $this->buildPagingClause($conn_r);
|
||||||
|
|
||||||
if ($this->pasteIDs) {
|
if ($this->ids) {
|
||||||
$where[] = qsprintf(
|
$where[] = qsprintf(
|
||||||
$conn_r,
|
$conn_r,
|
||||||
'id IN (%Ls)',
|
'id IN (%Ld)',
|
||||||
$this->pasteIDs);
|
$this->ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->phids) {
|
||||||
|
$where[] = qsprintf(
|
||||||
|
$conn_r,
|
||||||
|
'phid IN (%Ls)',
|
||||||
|
$this->phids);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->authorPHIDs) {
|
if ($this->authorPHIDs) {
|
||||||
|
|
|
@ -19,11 +19,17 @@
|
||||||
final class PhabricatorObjectHandleData {
|
final class PhabricatorObjectHandleData {
|
||||||
|
|
||||||
private $phids;
|
private $phids;
|
||||||
|
private $viewer;
|
||||||
|
|
||||||
public function __construct(array $phids) {
|
public function __construct(array $phids) {
|
||||||
$this->phids = array_unique($phids);
|
$this->phids = array_unique($phids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setViewer(PhabricatorUser $viewer) {
|
||||||
|
$this->viewer = $viewer;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public static function loadOneHandle($phid) {
|
public static function loadOneHandle($phid) {
|
||||||
$handles = id(new PhabricatorObjectHandleData(array($phid)))->loadHandles();
|
$handles = id(new PhabricatorObjectHandleData(array($phid)))->loadHandles();
|
||||||
return $handles[$phid];
|
return $handles[$phid];
|
||||||
|
@ -443,7 +449,7 @@ final class PhabricatorObjectHandleData {
|
||||||
$questions = id(new PonderQuestionQuery())
|
$questions = id(new PonderQuestionQuery())
|
||||||
->withPHIDs($phids)
|
->withPHIDs($phids)
|
||||||
->execute();
|
->execute();
|
||||||
$questions = mpull($questions, 'getPHID');
|
$questions = mpull($questions, null, 'getPHID');
|
||||||
|
|
||||||
foreach ($phids as $phid) {
|
foreach ($phids as $phid) {
|
||||||
$handle = new PhabricatorObjectHandle();
|
$handle = new PhabricatorObjectHandle();
|
||||||
|
@ -460,6 +466,29 @@ final class PhabricatorObjectHandleData {
|
||||||
$handles[$phid] = $handle;
|
$handles[$phid] = $handle;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PhabricatorPHIDConstants::PHID_TYPE_PSTE:
|
||||||
|
$pastes = id(new PhabricatorPasteQuery())
|
||||||
|
->withPHIDs($phids)
|
||||||
|
->setViewer($this->viewer)
|
||||||
|
->execute();
|
||||||
|
$pastes = mpull($pastes, null, 'getPHID');
|
||||||
|
|
||||||
|
foreach ($phids as $phid) {
|
||||||
|
$handle = new PhabricatorObjectHandle();
|
||||||
|
$handle->setPHID($phid);
|
||||||
|
$handle->setType($type);
|
||||||
|
if (empty($pastes[$phid])) {
|
||||||
|
$handle->setName('Unknown Paste');
|
||||||
|
} else {
|
||||||
|
$paste = $pastes[$phid];
|
||||||
|
$handle->setName($paste->getTitle());
|
||||||
|
$handle->setFullName('P'.$paste->getID().': '.$paste->getTitle());
|
||||||
|
$handle->setURI('/P'.$paste->getID());
|
||||||
|
$handle->setComplete(true);
|
||||||
|
}
|
||||||
|
$handles[$phid] = $handle;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
$loader = null;
|
$loader = null;
|
||||||
if (isset($external_loaders[$type])) {
|
if (isset($external_loaders[$type])) {
|
||||||
|
|
41
src/view/layout/PhabricatorActionListView.php
Normal file
41
src/view/layout/PhabricatorActionListView.php
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
final class PhabricatorActionListView extends AphrontView {
|
||||||
|
|
||||||
|
private $actions = array();
|
||||||
|
|
||||||
|
public function addAction(PhabricatorActionView $view) {
|
||||||
|
$this->actions[] = $view;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
require_celerity_resource('phabricator-action-list-view-css');
|
||||||
|
|
||||||
|
return phutil_render_tag(
|
||||||
|
'ul',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-action-list-view',
|
||||||
|
),
|
||||||
|
$this->renderSingleView($this->actions));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
79
src/view/layout/PhabricatorActionView.php
Normal file
79
src/view/layout/PhabricatorActionView.php
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
final class PhabricatorActionView extends AphrontView {
|
||||||
|
|
||||||
|
private $name;
|
||||||
|
private $icon;
|
||||||
|
private $href;
|
||||||
|
|
||||||
|
public function setHref($href) {
|
||||||
|
$this->href = $href;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setIcon($icon) {
|
||||||
|
$this->icon = $icon;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setName($name) {
|
||||||
|
$this->name = $name;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
|
||||||
|
$icon = null;
|
||||||
|
if ($this->icon) {
|
||||||
|
$icon = phutil_render_tag(
|
||||||
|
'span',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-action-view-icon autosprite '.
|
||||||
|
'action-'.$this->icon,
|
||||||
|
),
|
||||||
|
'');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->href) {
|
||||||
|
$item = phutil_render_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => $this->href,
|
||||||
|
'class' => 'phabricator-action-view-item',
|
||||||
|
),
|
||||||
|
phutil_escape_html($this->name));
|
||||||
|
} else {
|
||||||
|
$item = phutil_render_tag(
|
||||||
|
'span',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-action-view-item',
|
||||||
|
),
|
||||||
|
phutil_escape_html($this->name));
|
||||||
|
}
|
||||||
|
|
||||||
|
return phutil_render_tag(
|
||||||
|
'li',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-action-view',
|
||||||
|
),
|
||||||
|
$icon.$item);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
57
src/view/layout/PhabricatorHeaderView.php
Normal file
57
src/view/layout/PhabricatorHeaderView.php
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
final class PhabricatorHeaderView extends AphrontView {
|
||||||
|
|
||||||
|
private $objectName;
|
||||||
|
private $header;
|
||||||
|
|
||||||
|
public function setHeader($header) {
|
||||||
|
$this->header = $header;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setObjectName($object_name) {
|
||||||
|
$this->objectName = $object_name;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
require_celerity_resource('phabricator-header-view-css');
|
||||||
|
|
||||||
|
$header = phutil_escape_html($this->header);
|
||||||
|
|
||||||
|
if ($this->objectName) {
|
||||||
|
$header = phutil_render_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => '/'.$this->objectName,
|
||||||
|
),
|
||||||
|
phutil_escape_html($this->objectName)).' '.$header;
|
||||||
|
}
|
||||||
|
|
||||||
|
return phutil_render_tag(
|
||||||
|
'h1',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-header-view',
|
||||||
|
),
|
||||||
|
$header);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
64
src/view/layout/PhabricatorObjectItemListView.php
Normal file
64
src/view/layout/PhabricatorObjectItemListView.php
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
final class PhabricatorObjectItemListView extends AphrontView {
|
||||||
|
|
||||||
|
private $header;
|
||||||
|
private $items;
|
||||||
|
private $pager;
|
||||||
|
|
||||||
|
public function setHeader($header) {
|
||||||
|
$this->header = $header;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPager($pager) {
|
||||||
|
$this->pager = $pager;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addItem(PhabricatorObjectItemView $item) {
|
||||||
|
$this->items[] = $item;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
require_celerity_resource('phabricator-object-item-list-view-css');
|
||||||
|
|
||||||
|
$header = phutil_render_tag(
|
||||||
|
'h1',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-object-item-list-header',
|
||||||
|
),
|
||||||
|
phutil_escape_html($this->header));
|
||||||
|
$items = $this->renderSingleView($this->items);
|
||||||
|
|
||||||
|
$pager = null;
|
||||||
|
if ($this->pager) {
|
||||||
|
$pager = $this->renderSingleView($this->pager);
|
||||||
|
}
|
||||||
|
|
||||||
|
return phutil_render_tag(
|
||||||
|
'div',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-object-item-list-view',
|
||||||
|
),
|
||||||
|
$header.$items.$pager);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
109
src/view/layout/PhabricatorObjectItemView.php
Normal file
109
src/view/layout/PhabricatorObjectItemView.php
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
final class PhabricatorObjectItemView extends AphrontView {
|
||||||
|
|
||||||
|
private $header;
|
||||||
|
private $href;
|
||||||
|
private $details = array();
|
||||||
|
private $dates = array();
|
||||||
|
|
||||||
|
public function setHref($href) {
|
||||||
|
$this->href = $href;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHref() {
|
||||||
|
return $this->href;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setHeader($header) {
|
||||||
|
$this->header = $header;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHeader() {
|
||||||
|
return $this->header;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addDetail($name, $value, $class = null) {
|
||||||
|
$this->details[] = array(
|
||||||
|
'name' => $name,
|
||||||
|
'value' => $value,
|
||||||
|
);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addAttribute($attribute) {
|
||||||
|
$this->attributes[] = $attribute;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
$header = phutil_render_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => $this->href,
|
||||||
|
'class' => 'phabricator-object-item-name',
|
||||||
|
),
|
||||||
|
phutil_escape_html($this->header));
|
||||||
|
|
||||||
|
$details = null;
|
||||||
|
if ($this->details) {
|
||||||
|
$details = array();
|
||||||
|
foreach ($this->details as $detail) {
|
||||||
|
$details[] =
|
||||||
|
'<dt class="phabricator-object-detail-key">'.
|
||||||
|
phutil_escape_html($detail['name']).
|
||||||
|
'</dt>';
|
||||||
|
$details[] =
|
||||||
|
'<dd class="phabricator-object-detail-value">'.
|
||||||
|
$detail['value'].
|
||||||
|
'</dt>';
|
||||||
|
}
|
||||||
|
$details = phutil_render_tag(
|
||||||
|
'dl',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-object-detail-list',
|
||||||
|
),
|
||||||
|
implode('', $details));
|
||||||
|
}
|
||||||
|
|
||||||
|
$attrs = null;
|
||||||
|
if ($this->attributes) {
|
||||||
|
$attrs = array();
|
||||||
|
foreach ($this->attributes as $attribute) {
|
||||||
|
$attrs[] = '<li>'.$attribute.'</li>';
|
||||||
|
}
|
||||||
|
$attrs = phutil_render_tag(
|
||||||
|
'ul',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-object-item-attributes',
|
||||||
|
),
|
||||||
|
implode('', $attrs));
|
||||||
|
}
|
||||||
|
|
||||||
|
return phutil_render_tag(
|
||||||
|
'div',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-object-item',
|
||||||
|
),
|
||||||
|
$header.$details.$attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
62
src/view/layout/PhabricatorPropertyListView.php
Normal file
62
src/view/layout/PhabricatorPropertyListView.php
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
final class PhabricatorPropertyListView extends AphrontView {
|
||||||
|
|
||||||
|
private $properties;
|
||||||
|
|
||||||
|
public function addProperty($key, $value) {
|
||||||
|
$this->properties[$key] = $value;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
require_celerity_resource('phabricator-property-list-view-css');
|
||||||
|
|
||||||
|
$items = array();
|
||||||
|
foreach ($this->properties as $key => $value) {
|
||||||
|
$items[] = phutil_render_tag(
|
||||||
|
'dt',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-property-key',
|
||||||
|
),
|
||||||
|
phutil_escape_html($key));
|
||||||
|
$items[] = phutil_render_tag(
|
||||||
|
'dd',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-property-value',
|
||||||
|
),
|
||||||
|
$this->renderSingleView($value));
|
||||||
|
}
|
||||||
|
|
||||||
|
$list = phutil_render_tag(
|
||||||
|
'dl',
|
||||||
|
array(
|
||||||
|
),
|
||||||
|
$this->renderSingleView($items));
|
||||||
|
|
||||||
|
return phutil_render_tag(
|
||||||
|
'div',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-property-list-view',
|
||||||
|
),
|
||||||
|
$list);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
68
src/view/layout/PhabricatorSourceCodeView.php
Normal file
68
src/view/layout/PhabricatorSourceCodeView.php
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
final class PhabricatorSourceCodeView extends AphrontView {
|
||||||
|
|
||||||
|
private $lines;
|
||||||
|
|
||||||
|
public function setLines(array $lines) {
|
||||||
|
$this->lines = $lines;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
require_celerity_resource('phabricator-source-code-view-css');
|
||||||
|
require_celerity_resource('syntax-highlighting-css');
|
||||||
|
|
||||||
|
Javelin::initBehavior('phabricator-oncopy', array());
|
||||||
|
|
||||||
|
$line_number = 1;
|
||||||
|
|
||||||
|
$rows = array();
|
||||||
|
foreach ($this->lines as $line) {
|
||||||
|
|
||||||
|
// TODO: Provide nice links.
|
||||||
|
|
||||||
|
$rows[] =
|
||||||
|
'<tr>'.
|
||||||
|
'<th class="phabricator-source-line">'.
|
||||||
|
phutil_escape_html($line_number).
|
||||||
|
'</th>'.
|
||||||
|
'<td class="phabricator-source-code">'.
|
||||||
|
"\xE2\x80\x8B".
|
||||||
|
$line.
|
||||||
|
'</td>'.
|
||||||
|
'</tr>';
|
||||||
|
|
||||||
|
$line_number++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$classes = array();
|
||||||
|
$classes[] = 'phabricator-source-code-view';
|
||||||
|
$classes[] = 'remarkup-code';
|
||||||
|
$classes[] = 'PhabricatorMonospaced';
|
||||||
|
|
||||||
|
return phutil_render_tag(
|
||||||
|
'table',
|
||||||
|
array(
|
||||||
|
'class' => implode(' ', $classes),
|
||||||
|
),
|
||||||
|
implode('', $rows));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -31,6 +31,12 @@ final class PhabricatorStandardPageView extends AphrontPageView {
|
||||||
private $searchDefaultScope;
|
private $searchDefaultScope;
|
||||||
private $pageObjects = array();
|
private $pageObjects = array();
|
||||||
private $controller;
|
private $controller;
|
||||||
|
private $deviceReady;
|
||||||
|
|
||||||
|
public function setDeviceReady($device_ready) {
|
||||||
|
$this->deviceReady = $device_ready;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function setController(AphrontController $controller) {
|
public function setController(AphrontController $controller) {
|
||||||
$this->controller = $controller;
|
$this->controller = $controller;
|
||||||
|
@ -203,12 +209,15 @@ final class PhabricatorStandardPageView extends AphrontPageView {
|
||||||
}
|
}
|
||||||
|
|
||||||
$viewport_tag = null;
|
$viewport_tag = null;
|
||||||
if (PhabricatorEnv::getEnvConfig('preview.viewport-meta-tag')) {
|
if (PhabricatorEnv::getEnvConfig('preview.viewport-meta-tag') ||
|
||||||
|
$this->deviceReady) {
|
||||||
$viewport_tag = phutil_render_tag(
|
$viewport_tag = phutil_render_tag(
|
||||||
'meta',
|
'meta',
|
||||||
array(
|
array(
|
||||||
'name' => 'viewport',
|
'name' => 'viewport',
|
||||||
'content' => 'width=device-width, initial-scale=1, maximum-scale=1',
|
'content' => 'width=device-width, '.
|
||||||
|
'initial-scale=1, '.
|
||||||
|
'maximum-scale=1',
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -293,40 +302,6 @@ final class PhabricatorStandardPageView extends AphrontPageView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$foot_links = array();
|
|
||||||
|
|
||||||
$version = PhabricatorEnv::getEnvConfig('phabricator.version');
|
|
||||||
$foot_links[] = phutil_escape_html('Phabricator '.$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(' · ', $foot_links);
|
|
||||||
|
|
||||||
$admin_class = null;
|
$admin_class = null;
|
||||||
if ($this->getIsAdminInterface()) {
|
if ($this->getIsAdminInterface()) {
|
||||||
$admin_class = 'phabricator-admin-page-view';
|
$admin_class = 'phabricator-admin-page-view';
|
||||||
|
@ -336,10 +311,10 @@ final class PhabricatorStandardPageView extends AphrontPageView {
|
||||||
$footer_chrome = null;
|
$footer_chrome = null;
|
||||||
if ($this->getShowChrome()) {
|
if ($this->getShowChrome()) {
|
||||||
$header_chrome = $this->menuContent;
|
$header_chrome = $this->menuContent;
|
||||||
$footer_chrome =
|
|
||||||
'<div class="phabricator-page-foot">'.
|
if (!$this->deviceReady) {
|
||||||
$foot_links.
|
$footer_chrome = $this->renderFooter();
|
||||||
'</div>';
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$developer_warning = null;
|
$developer_warning = null;
|
||||||
|
@ -491,4 +466,47 @@ final class PhabricatorStandardPageView extends AphrontPageView {
|
||||||
return $menu->render();
|
return $menu->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function renderFooter() {
|
||||||
|
$console = $this->getConsole();
|
||||||
|
|
||||||
|
$foot_links = array();
|
||||||
|
|
||||||
|
$version = PhabricatorEnv::getEnvConfig('phabricator.version');
|
||||||
|
$foot_links[] = phutil_escape_html('Phabricator '.$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(' · ', $foot_links);
|
||||||
|
|
||||||
|
return
|
||||||
|
'<div class="phabricator-page-foot">'.
|
||||||
|
$foot_links.
|
||||||
|
'</div>';
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function phabricator_date($epoch, $user) {
|
function phabricator_date($epoch, PhabricatorUser $user) {
|
||||||
return phabricator_format_local_time(
|
return phabricator_format_local_time(
|
||||||
$epoch,
|
$epoch,
|
||||||
$user,
|
$user,
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
.phabricator-page-foot {
|
.phabricator-page-foot {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
margin: 2em;
|
margin: 2em;
|
||||||
border-top: 1px solid #afafaf;
|
border-top: 1px solid #dfdfdf;
|
||||||
padding: .5em 1em;
|
padding: .5em 1em;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: #666666;
|
color: #666666;
|
||||||
|
|
|
@ -234,3 +234,19 @@
|
||||||
.app-feed {
|
.app-feed {
|
||||||
background-position: 0px -2306px;
|
background-position: 0px -2306px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app-paste-full {
|
||||||
|
background-position: 0px -2337px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-paste {
|
||||||
|
background-position: 0px -2398px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-file {
|
||||||
|
background-position: 0px -2429px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-fork {
|
||||||
|
background-position: 0px -2446px;
|
||||||
|
}
|
||||||
|
|
|
@ -4,7 +4,16 @@
|
||||||
|
|
||||||
|
|
||||||
html {
|
html {
|
||||||
|
/* Always show the vertical scrollbar so that going from a page without a
|
||||||
|
scrollbar to a page with a scrollbar doesn't make content jump a few
|
||||||
|
pixels left when the viewport narrows. */
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
|
|
||||||
|
/* By default, the iPhone zooms all text on the page by some percentage when
|
||||||
|
you rotate from portrait mode to landscape mode. Disable this, since it
|
||||||
|
breaks lots of things and prevents you from using landscape to see more
|
||||||
|
columns in source code views. */
|
||||||
|
-webkit-text-size-adjust: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
body, div, dl, dt, dd, ul, ol, li,
|
body, div, dl, dt, dd, ul, ol, li,
|
||||||
|
|
54
webroot/rsrc/css/layout/phabricator-action-list-view.css
Normal file
54
webroot/rsrc/css/layout/phabricator-action-list-view.css
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/**
|
||||||
|
* @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;
|
||||||
|
|
||||||
|
position: absolute;
|
||||||
|
margin-top: -30px;
|
||||||
|
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 {
|
||||||
|
background: #f3f3f3;
|
||||||
|
border-top: 1px solid #dcdcdc;
|
||||||
|
padding: .5em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-action-view {
|
||||||
|
padding: 2px 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-action-view-item {
|
||||||
|
line-height: 20px;
|
||||||
|
padding-left: 34px;
|
||||||
|
display: block;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-action-view-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
position: absolute;
|
||||||
|
top: 4px;
|
||||||
|
left: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-desktop .phabricator-action-view-item:hover {
|
||||||
|
background-color: #3875d7;
|
||||||
|
color: #ffffff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
13
webroot/rsrc/css/layout/phabricator-header-view.css
Normal file
13
webroot/rsrc/css/layout/phabricator-header-view.css
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
/**
|
||||||
|
* @provides phabricator-header-view-css
|
||||||
|
*/
|
||||||
|
|
||||||
|
.phabricator-header-view {
|
||||||
|
padding: 1em 2%;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-desktop .phabricator-header-view {
|
||||||
|
width: 66%;
|
||||||
|
}
|
103
webroot/rsrc/css/layout/phabricator-object-item-list-view.css
Normal file
103
webroot/rsrc/css/layout/phabricator-object-item-list-view.css
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
/**
|
||||||
|
* @provides phabricator-object-item-list-view-css
|
||||||
|
*/
|
||||||
|
|
||||||
|
.phabricator-object-item-list-view {
|
||||||
|
padding: 0 2%;
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-object-item-list-header {
|
||||||
|
font-weight: normal;
|
||||||
|
color: #333333;
|
||||||
|
font-size: 15px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.phabricator-object-item {
|
||||||
|
background: #f9f9f9;
|
||||||
|
border: 1px solid #dbdbdb;
|
||||||
|
border-radius: 2px;
|
||||||
|
margin: 6px 0;
|
||||||
|
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.10);
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-object-item-name {
|
||||||
|
display: block;
|
||||||
|
background: #e9e9e9;
|
||||||
|
padding: 2px 1em;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-desktop .phabricator-object-item-name {
|
||||||
|
|
||||||
|
border: solid #dbdbdb;
|
||||||
|
border-width: 0 0 1px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* - Detail List ------------------------------------------------------------
|
||||||
|
|
||||||
|
Object details, used to render things like authors, reviewers, etc.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
.phabricator-object-detail-list {
|
||||||
|
font-size: 11px;
|
||||||
|
width: 55%;
|
||||||
|
padding: 2px 1%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-desktop .phabricator-object-detail-list,
|
||||||
|
.device-tablet .phabricator-object-detail-list {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-object-detail-key {
|
||||||
|
color: #555555;
|
||||||
|
float: left;
|
||||||
|
clear: left;
|
||||||
|
width: 20%;
|
||||||
|
text-align: right;
|
||||||
|
padding: 2px 6px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-object-detail-value {
|
||||||
|
color: #444444;
|
||||||
|
float: left;
|
||||||
|
|
||||||
|
padding: 2px 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* - Attribute List ------------------------------------------------------------
|
||||||
|
|
||||||
|
Object attributes, commonly used to render created date, etc.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.phabricator-object-item-attributes {
|
||||||
|
color: #555555;
|
||||||
|
text-align: right;
|
||||||
|
font-size: 11px;
|
||||||
|
|
||||||
|
padding: 2px 1%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-desktop .phabricator-object-item-attributes,
|
||||||
|
.device-tablet .phabricator-object-item-attributes {
|
||||||
|
width: 40%;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-phone .phabricator-object-item-attributes {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-object-item-attributes li {
|
||||||
|
padding: 2px 1%;
|
||||||
|
}
|
59
webroot/rsrc/css/layout/phabricator-property-list-view.css
Normal file
59
webroot/rsrc/css/layout/phabricator-property-list-view.css
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
/**
|
||||||
|
* @provides phabricator-property-list-view-css
|
||||||
|
*/
|
||||||
|
|
||||||
|
.phabricator-property-list-view {
|
||||||
|
border-color: #dbdbdb;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px 0;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-desktop .phabricator-property-list-view,
|
||||||
|
.device-tablet .phabricator-property-list-view {
|
||||||
|
padding: 1em 0 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.device-phone .phabricator-property-list-view {
|
||||||
|
padding: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-property-key {
|
||||||
|
color: #333333;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-desktop .phabricator-property-key {
|
||||||
|
width: 12%;
|
||||||
|
margin-left: 1%;
|
||||||
|
text-align: right;
|
||||||
|
float: left;
|
||||||
|
clear: left;
|
||||||
|
margin-bottom: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-tablet .phabricator-property-key,
|
||||||
|
.device-phone .phabricator-property-key {
|
||||||
|
padding-left: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-property-value {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-desktop .phabricator-property-value {
|
||||||
|
width: 53%;
|
||||||
|
margin-left: 1%;
|
||||||
|
float: left;
|
||||||
|
margin-bottom: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.device-tablet .phabricator-property-value,
|
||||||
|
.device-phone .phabricator-property-value {
|
||||||
|
padding-left: 1.5em;
|
||||||
|
margin-bottom: .5em;
|
||||||
|
}
|
26
webroot/rsrc/css/layout/phabricator-source-code-view.css
Normal file
26
webroot/rsrc/css/layout/phabricator-source-code-view.css
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* @provides phabricator-source-code-view-css
|
||||||
|
*/
|
||||||
|
|
||||||
|
.phabricator-source-code {
|
||||||
|
white-space: pre-wrap;
|
||||||
|
padding: 3px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-source-line {
|
||||||
|
text-align: right;
|
||||||
|
padding: 3px 6px 3px 12px;
|
||||||
|
|
||||||
|
border-right: 1px solid #dbdbdb;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #555555;
|
||||||
|
|
||||||
|
/* When the user selects rows of source, don't visibly select the line
|
||||||
|
numbers beside them. We use JS to strip the line numbers out when the user
|
||||||
|
copies the text. */
|
||||||
|
-moz-user-select: -moz-none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
Binary file not shown.
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 83 KiB |
Loading…
Add table
Reference in a new issue