From 92ff9c092b25d77e91e965c223879b1dd13d8915 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 1 Oct 2012 14:04:03 -0700 Subject: [PATCH] Move "Macros" to a first-class application Summary: This is mostly to unblock D3547. - Move "Macros" to a first-class application called "Macros". - After D3547, this application will also house "Memes" (macros with text on them). - This will also make them easier to find; the top navigational query I field is "where are image macros?" nowadays, since it's not intuitive they're part of files. - This makes some of the UI mobile-aware but doesn't set the `device` flag yet, since there are still some missing pieces. - I'll separate storage out and continue modernizing the UI as we unblock and integrate D3547. Test Plan: Created, edited and deleted macros. Viewed files. Reviewers: btrahan, vrana, teisenbe Reviewed By: vrana CC: aran Maniphest Tasks: T175 Differential Revision: https://secure.phabricator.com/D3572 --- scripts/celerity/generate_sprites.php | 1 + src/__celerity_resource_map__.php | 6 +-- src/__phutil_library_map__.php | 18 ++++--- ...AphrontDefaultApplicationConfiguration.php | 5 -- .../files/view/PhabricatorFileSideNavView.php | 18 +++---- .../PhabricatorApplicationMacro.php | 47 ++++++++++++++++++ .../controller/PhabricatorMacroController.php | 37 ++++++++++++++ .../PhabricatorMacroDeleteController.php} | 11 ++-- .../PhabricatorMacroEditController.php} | 23 +++++---- .../PhabricatorMacroListController.php} | 30 ++++------- .../storage/PhabricatorFileImageMacro.php | 0 webroot/rsrc/css/autosprite.css | 32 +++++++----- webroot/rsrc/image/autosprite.png | Bin 111533 -> 115392 bytes 13 files changed, 155 insertions(+), 73 deletions(-) create mode 100644 src/applications/macro/application/PhabricatorApplicationMacro.php create mode 100644 src/applications/macro/controller/PhabricatorMacroController.php rename src/applications/{files/controller/PhabricatorFileMacroDeleteController.php => macro/controller/PhabricatorMacroDeleteController.php} (82%) rename src/applications/{files/controller/PhabricatorFileMacroEditController.php => macro/controller/PhabricatorMacroEditController.php} (86%) rename src/applications/{files/controller/PhabricatorFileMacroListController.php => macro/controller/PhabricatorMacroListController.php} (84%) rename src/applications/{files => macro}/storage/PhabricatorFileImageMacro.php (100%) diff --git a/scripts/celerity/generate_sprites.php b/scripts/celerity/generate_sprites.php index fc9021dff4..724c41a370 100755 --- a/scripts/celerity/generate_sprites.php +++ b/scripts/celerity/generate_sprites.php @@ -149,6 +149,7 @@ $app_map = array( 'diviner' => array(1, 35), 'repositories' => array(8, 13), 'phame' => array(8, 4), + 'macro' => array(0, 31), ); $xadj = -1; diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index 34d186af33..0788817589 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -51,8 +51,8 @@ celerity_register_resource_map(array( ), '/rsrc/image/autosprite.png' => array( - 'hash' => '72184117972407fe930910bee886fd21', - 'uri' => '/res/72184117/rsrc/image/autosprite.png', + 'hash' => '10b50d4636be52a6f36fb28b3a05f90e', + 'uri' => '/res/10b50d46/rsrc/image/autosprite.png', 'disk' => '/rsrc/image/autosprite.png', 'type' => 'png', ), @@ -657,7 +657,7 @@ celerity_register_resource_map(array( ), 'autosprite-css' => array( - 'uri' => '/res/17eb3f9b/rsrc/css/autosprite.css', + 'uri' => '/res/5de6fe77/rsrc/css/autosprite.css', 'type' => 'css', 'requires' => array( diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index d6ce216cc2..fa9061bf3c 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -565,6 +565,7 @@ phutil_register_library_map(array( 'PhabricatorApplicationFlags' => 'applications/flag/application/PhabricatorApplicationFlags.php', 'PhabricatorApplicationHerald' => 'applications/herald/application/PhabricatorApplicationHerald.php', 'PhabricatorApplicationLaunchView' => 'applications/meta/view/PhabricatorApplicationLaunchView.php', + 'PhabricatorApplicationMacro' => 'applications/macro/application/PhabricatorApplicationMacro.php', 'PhabricatorApplicationMailingLists' => 'applications/mailinglists/application/PhabricatorApplicationMailingLists.php', 'PhabricatorApplicationManiphest' => 'applications/maniphest/application/PhabricatorApplicationManiphest.php', 'PhabricatorApplicationMetaMTA' => 'applications/metamta/application/PhabricatorApplicationMetaMTA.php', @@ -728,12 +729,9 @@ phutil_register_library_map(array( 'PhabricatorFileDataController' => 'applications/files/controller/PhabricatorFileDataController.php', 'PhabricatorFileDeleteController' => 'applications/files/controller/PhabricatorFileDeleteController.php', 'PhabricatorFileDropUploadController' => 'applications/files/controller/PhabricatorFileDropUploadController.php', - 'PhabricatorFileImageMacro' => 'applications/files/storage/PhabricatorFileImageMacro.php', + 'PhabricatorFileImageMacro' => 'applications/macro/storage/PhabricatorFileImageMacro.php', 'PhabricatorFileInfoController' => 'applications/files/controller/PhabricatorFileInfoController.php', 'PhabricatorFileListController' => 'applications/files/controller/PhabricatorFileListController.php', - 'PhabricatorFileMacroDeleteController' => 'applications/files/controller/PhabricatorFileMacroDeleteController.php', - 'PhabricatorFileMacroEditController' => 'applications/files/controller/PhabricatorFileMacroEditController.php', - 'PhabricatorFileMacroListController' => 'applications/files/controller/PhabricatorFileMacroListController.php', 'PhabricatorFileProxyController' => 'applications/files/controller/PhabricatorFileProxyController.php', 'PhabricatorFileProxyImage' => 'applications/files/storage/PhabricatorFileProxyImage.php', 'PhabricatorFileShortcutController' => 'applications/files/controller/PhabricatorFileShortcutController.php', @@ -796,6 +794,10 @@ phutil_register_library_map(array( 'PhabricatorLoginController' => 'applications/auth/controller/PhabricatorLoginController.php', 'PhabricatorLoginValidateController' => 'applications/auth/controller/PhabricatorLoginValidateController.php', 'PhabricatorLogoutController' => 'applications/auth/controller/PhabricatorLogoutController.php', + 'PhabricatorMacroController' => 'applications/macro/controller/PhabricatorMacroController.php', + 'PhabricatorMacroDeleteController' => 'applications/macro/controller/PhabricatorMacroDeleteController.php', + 'PhabricatorMacroEditController' => 'applications/macro/controller/PhabricatorMacroEditController.php', + 'PhabricatorMacroListController' => 'applications/macro/controller/PhabricatorMacroListController.php', 'PhabricatorMailImplementationAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAdapter.php', 'PhabricatorMailImplementationAmazonSESAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAmazonSESAdapter.php', 'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationPHPMailerLiteAdapter.php', @@ -1727,6 +1729,7 @@ phutil_register_library_map(array( 'PhabricatorApplicationFlags' => 'PhabricatorApplication', 'PhabricatorApplicationHerald' => 'PhabricatorApplication', 'PhabricatorApplicationLaunchView' => 'AphrontView', + 'PhabricatorApplicationMacro' => 'PhabricatorApplication', 'PhabricatorApplicationMailingLists' => 'PhabricatorApplication', 'PhabricatorApplicationManiphest' => 'PhabricatorApplication', 'PhabricatorApplicationMetaMTA' => 'PhabricatorApplication', @@ -1881,9 +1884,6 @@ phutil_register_library_map(array( 'PhabricatorFileImageMacro' => 'PhabricatorFileDAO', 'PhabricatorFileInfoController' => 'PhabricatorFileController', 'PhabricatorFileListController' => 'PhabricatorFileController', - 'PhabricatorFileMacroDeleteController' => 'PhabricatorFileController', - 'PhabricatorFileMacroEditController' => 'PhabricatorFileController', - 'PhabricatorFileMacroListController' => 'PhabricatorFileController', 'PhabricatorFileProxyController' => 'PhabricatorFileController', 'PhabricatorFileProxyImage' => 'PhabricatorFileDAO', 'PhabricatorFileShortcutController' => 'PhabricatorFileController', @@ -1933,6 +1933,10 @@ phutil_register_library_map(array( 'PhabricatorLoginController' => 'PhabricatorAuthController', 'PhabricatorLoginValidateController' => 'PhabricatorAuthController', 'PhabricatorLogoutController' => 'PhabricatorAuthController', + 'PhabricatorMacroController' => 'PhabricatorController', + 'PhabricatorMacroDeleteController' => 'PhabricatorMacroController', + 'PhabricatorMacroEditController' => 'PhabricatorMacroController', + 'PhabricatorMacroListController' => 'PhabricatorMacroController', 'PhabricatorMailImplementationAmazonSESAdapter' => 'PhabricatorMailImplementationPHPMailerLiteAdapter', 'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'PhabricatorMailImplementationAdapter', 'PhabricatorMailImplementationSendGridAdapter' => 'PhabricatorMailImplementationAdapter', diff --git a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php index 55625dca27..fa528116fa 100644 --- a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php +++ b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php @@ -55,11 +55,6 @@ class AphrontDefaultApplicationConfiguration 'alt/(?P[^/]+)/(?P[^/]+)/' => 'PhabricatorFileDataController', - 'macro/' => array( - '' => 'PhabricatorFileMacroListController', - 'edit/(?:(?P\d+)/)?' => 'PhabricatorFileMacroEditController', - 'delete/(?P\d+)/' => 'PhabricatorFileMacroDeleteController', - ), 'proxy/' => 'PhabricatorFileProxyController', 'xform/(?P[^/]+)/(?P[^/]+)/' => 'PhabricatorFileTransformController', diff --git a/src/applications/files/view/PhabricatorFileSideNavView.php b/src/applications/files/view/PhabricatorFileSideNavView.php index aa31f22b44..bf8971e8a9 100644 --- a/src/applications/files/view/PhabricatorFileSideNavView.php +++ b/src/applications/files/view/PhabricatorFileSideNavView.php @@ -1,7 +1,7 @@ 'All Files', 'href' => '/file/filter/all/' ), - '
' => array(), - 'Image Macros' => array(), - 'create_macro' => array( - 'name' => 'Create Image Macro', - 'href' => '/file/macro/edit/' - ), - 'all_macros' => array( - 'name' => 'All Image Macros', - 'href' => '/file/macro/' - ), + // TODO: Remove this fairly soon. + '
' => null, + '
NOTE: Macros have moved to a separate '. + 'application. Use the "Search" field to jump to it or choose '. + 'More Stuff » Macros from the home page.' => null, ); $side_nav = new AphrontSideNavView(); diff --git a/src/applications/macro/application/PhabricatorApplicationMacro.php b/src/applications/macro/application/PhabricatorApplicationMacro.php new file mode 100644 index 0000000000..74f7506a34 --- /dev/null +++ b/src/applications/macro/application/PhabricatorApplicationMacro.php @@ -0,0 +1,47 @@ + array( + '' => 'PhabricatorMacroListController', + 'edit/(?:(?P\d+)/)?' => 'PhabricatorMacroEditController', + 'delete/(?P\d+)/' => 'PhabricatorMacroDeleteController', + ), + ); + } + +} diff --git a/src/applications/macro/controller/PhabricatorMacroController.php b/src/applications/macro/controller/PhabricatorMacroController.php new file mode 100644 index 0000000000..b334c39d4f --- /dev/null +++ b/src/applications/macro/controller/PhabricatorMacroController.php @@ -0,0 +1,37 @@ +setBaseURI(new PhutilURI($this->getApplicationURI())); + + $nav->addLabel('Create'); + $nav->addFilter('edit', 'Create Macro'); + + $nav->addSpacer(); + + $nav->addLabel('Macros'); + $nav->addFilter('', 'All Macros'); + + return $nav; + } + +} diff --git a/src/applications/files/controller/PhabricatorFileMacroDeleteController.php b/src/applications/macro/controller/PhabricatorMacroDeleteController.php similarity index 82% rename from src/applications/files/controller/PhabricatorFileMacroDeleteController.php rename to src/applications/macro/controller/PhabricatorMacroDeleteController.php index b5f8c2e819..f1115da7ba 100644 --- a/src/applications/files/controller/PhabricatorFileMacroDeleteController.php +++ b/src/applications/macro/controller/PhabricatorMacroDeleteController.php @@ -16,8 +16,8 @@ * limitations under the License. */ -final class PhabricatorFileMacroDeleteController - extends PhabricatorFileController { +final class PhabricatorMacroDeleteController + extends PhabricatorMacroController { private $id; @@ -36,7 +36,8 @@ final class PhabricatorFileMacroDeleteController if ($request->isDialogFormPost()) { $macro->delete(); - return id(new AphrontRedirectResponse())->setURI('/file/macro/'); + return id(new AphrontRedirectResponse())->setURI( + $this->getApplicationURI()); } $dialog = new AphrontDialogView(); @@ -47,9 +48,9 @@ final class PhabricatorFileMacroDeleteController '

Really delete the much-beloved image macro "'. phutil_escape_html($macro->getName()).'"? It will be sorely missed.'. '

') - ->setSubmitURI('/file/macro/delete/'.$this->id.'/') + ->setSubmitURI($this->getApplicationURI('/delete/'.$this->id.'/')) ->addSubmitButton('Delete') - ->addCancelButton('/file/macro/'); + ->addCancelButton($this->getApplicationURI()); return id(new AphrontDialogResponse())->setDialog($dialog); diff --git a/src/applications/files/controller/PhabricatorFileMacroEditController.php b/src/applications/macro/controller/PhabricatorMacroEditController.php similarity index 86% rename from src/applications/files/controller/PhabricatorFileMacroEditController.php rename to src/applications/macro/controller/PhabricatorMacroEditController.php index 4c01321905..da574536e3 100644 --- a/src/applications/files/controller/PhabricatorFileMacroEditController.php +++ b/src/applications/macro/controller/PhabricatorMacroEditController.php @@ -16,8 +16,8 @@ * limitations under the License. */ -final class PhabricatorFileMacroEditController - extends PhabricatorFileController { +final class PhabricatorMacroEditController + extends PhabricatorMacroController { private $id; @@ -68,7 +68,8 @@ final class PhabricatorFileMacroEditController try { $macro->save(); - return id(new AphrontRedirectResponse())->setURI('/file/macro/'); + return id(new AphrontRedirectResponse())->setURI( + $this->getApplicationURI()); } catch (AphrontQueryDuplicateKeyException $ex) { $errors[] = 'Macro name is not unique!'; $e_name = 'Duplicate'; @@ -85,7 +86,7 @@ final class PhabricatorFileMacroEditController } $form = new AphrontFormView(); - $form->setAction('/file/macro/edit/'); + $form->setAction($this->getApplicationURI('/edit/')); $form->setUser($request->getUser()); $form @@ -105,7 +106,7 @@ final class PhabricatorFileMacroEditController ->appendChild( id(new AphrontFormSubmitControl()) ->setValue('Save Image Macro') - ->addCancelButton('/file/macro/')); + ->addCancelButton($this->getApplicationURI())); $panel = new AphrontPanelView(); if ($macro->getID()) { @@ -117,13 +118,13 @@ final class PhabricatorFileMacroEditController $panel->appendChild($form); $panel->setWidth(AphrontPanelView::WIDTH_FULL); - $side_nav = new PhabricatorFileSideNavView(); - $side_nav->setSelectedFilter('create_macro'); - $side_nav->appendChild($error_view); - $side_nav->appendChild($panel); + $nav = $this->buildSideNavView($macro); + $nav->selectFilter('#', 'edit'); + $nav->appendChild($error_view); + $nav->appendChild($panel); - return $this->buildStandardPageResponse( - $side_nav, + return $this->buildApplicationPage( + $nav, array( 'title' => $title, )); diff --git a/src/applications/files/controller/PhabricatorFileMacroListController.php b/src/applications/macro/controller/PhabricatorMacroListController.php similarity index 84% rename from src/applications/files/controller/PhabricatorFileMacroListController.php rename to src/applications/macro/controller/PhabricatorMacroListController.php index f88ddab444..c516a3dd09 100644 --- a/src/applications/files/controller/PhabricatorFileMacroListController.php +++ b/src/applications/macro/controller/PhabricatorMacroListController.php @@ -16,8 +16,8 @@ * limitations under the License. */ -final class PhabricatorFileMacroListController - extends PhabricatorFileController { +final class PhabricatorMacroListController + extends PhabricatorMacroController { public function processRequest() { @@ -74,7 +74,7 @@ final class PhabricatorFileMacroListController phutil_render_tag( 'a', array( - 'href' => '/file/macro/edit/'.$macro->getID().'/', + 'href' => $this->getApplicationURI('/edit/'.$macro->getID().'/'), ), phutil_escape_html($macro->getName())), @@ -93,7 +93,7 @@ final class PhabricatorFileMacroListController javelin_render_tag( 'a', array( - 'href' => '/file/macro/delete/'.$macro->getID().'/', + 'href' => $this->getApplicationURI('/delete/'.$macro->getID().'/'), 'sigil' => 'workflow', 'class' => 'grey small button', ), @@ -119,7 +119,6 @@ final class PhabricatorFileMacroListController $filter_form = id(new AphrontFormView()) ->setMethod('GET') - ->setAction('/file/macro/') ->setUser($request->getUser()) ->appendChild( id(new AphrontFormTextControl()) @@ -132,14 +131,6 @@ final class PhabricatorFileMacroListController $filter_view = new AphrontListFilterView(); $filter_view->appendChild($filter_form); - $filter_view->addButton( - phutil_render_tag( - 'a', - array( - 'href' => '/file/macro/edit/', - 'class' => 'green button', - ), - 'New Image Macro')); $panel = new AphrontPanelView(); $panel->appendChild($table); @@ -148,13 +139,14 @@ final class PhabricatorFileMacroListController $panel->appendChild($pager); } - $side_nav = new PhabricatorFileSideNavView(); - $side_nav->setSelectedFilter('all_macros'); - $side_nav->appendChild($filter_view); - $side_nav->appendChild($panel); + $nav = $this->buildSideNavView(); + $nav->selectFilter('/'); - return $this->buildStandardPageResponse( - $side_nav, + $nav->appendChild($filter_view); + $nav->appendChild($panel); + + return $this->buildApplicationPage( + $nav, array( 'title' => 'Image Macros', )); diff --git a/src/applications/files/storage/PhabricatorFileImageMacro.php b/src/applications/macro/storage/PhabricatorFileImageMacro.php similarity index 100% rename from src/applications/files/storage/PhabricatorFileImageMacro.php rename to src/applications/macro/storage/PhabricatorFileImageMacro.php diff --git a/webroot/rsrc/css/autosprite.css b/webroot/rsrc/css/autosprite.css index 0878416287..a640820ee1 100644 --- a/webroot/rsrc/css/autosprite.css +++ b/webroot/rsrc/css/autosprite.css @@ -308,50 +308,58 @@ background-position: 0px -3134px; } -.action-file { +.app-macro-full { background-position: 0px -3165px; } +.app-macro { + background-position: 0px -3226px; +} + +.action-file { + background-position: 0px -3257px; +} + .action-fork { - background-position: 0px -3182px; + background-position: 0px -3274px; } .action-edit { - background-position: 0px -3199px; + background-position: 0px -3291px; } .action-flag-0 { - background-position: 0px -3216px; + background-position: 0px -3308px; } .action-flag-1 { - background-position: 0px -3233px; + background-position: 0px -3325px; } .action-flag-2 { - background-position: 0px -3250px; + background-position: 0px -3342px; } .action-flag-3 { - background-position: 0px -3267px; + background-position: 0px -3359px; } .action-flag-4 { - background-position: 0px -3284px; + background-position: 0px -3376px; } .action-flag-5 { - background-position: 0px -3301px; + background-position: 0px -3393px; } .action-flag-6 { - background-position: 0px -3318px; + background-position: 0px -3410px; } .action-flag-7 { - background-position: 0px -3335px; + background-position: 0px -3427px; } .action-flag-ghost { - background-position: 0px -3352px; + background-position: 0px -3444px; } diff --git a/webroot/rsrc/image/autosprite.png b/webroot/rsrc/image/autosprite.png index 89f5d84fe26c87af20c4a3df4c364adfe2761610..81042a8a9b2c20d5ffc0bd0a3d68f1c86c7957b6 100644 GIT binary patch delta 10302 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 JQ~u5b`akaQ8D;>Fk!F#MC0wN;FA|R;1 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 a!SX-UNP(7iG=a1L0000