From 66cee129b652603edbe72d0f1cae1e34f70a33ab Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 13 Aug 2012 15:28:41 -0700 Subject: [PATCH] Remove all code referencing old tab navigation Summary: - Add getHelpURI() to PhabricatorApplication for application user guides. - Add a new "help" icon menu item and skeletal Diviner application. - Move help tabs to Applications where they exist, document the other ones that don't exist yet. - Grep for all tab-related stuff and delete it. Test Plan: Clicked "help" for some apps. Clicked around randomly in a bunch of other apps. Reviewers: btrahan, vrana Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D3267 --- src/__phutil_library_map__.php | 2 + .../base/PhabricatorApplication.php | 15 ++++++ .../PhabricatorCalendarController.php | 8 +-- .../PhabricatorConduitController.php | 9 ---- ...ricatorDaemonTimelineConsoleController.php | 1 - .../controller/DifferentialController.php | 1 - .../DifferentialDiffCreateController.php | 1 - .../DifferentialRevisionListController.php | 1 - .../PhabricatorApplicationDiffusion.php | 4 ++ .../controller/DiffusionController.php | 9 ---- .../PhabricatorApplicationDiviner.php | 46 ++++++++++++++++++ .../drydock/controller/DrydockController.php | 9 ---- .../PhabricatorFileListController.php | 1 - .../PhabricatorFileMacroListController.php | 1 - .../herald/controller/HeraldController.php | 10 ---- .../HeraldTestConsoleController.php | 1 - .../HeraldTranscriptListController.php | 1 - .../PhabricatorMailingListsListController.php | 1 - ...abricatorMetaMTAReceivedListController.php | 1 - .../PhabricatorOAuthServerController.php | 11 ----- .../PhabricatorOwnersController.php | 10 ---- .../PhabricatorPasteViewController.php | 1 - .../phame/controller/PhameController.php | 8 --- .../PhabricatorApplicationPhriction.php | 4 ++ .../controller/PhrictionController.php | 8 --- .../PhabricatorSlowvoteController.php | 12 +---- src/view/page/PhabricatorStandardPageView.php | 40 --------------- .../css/application/base/main-menu-view.css | 12 +++++ webroot/rsrc/image/app/app_applications.png | Bin 463 -> 1263 bytes webroot/rsrc/image/menu/icon_help.png | Bin 0 -> 1139 bytes webroot/rsrc/image/menu/icon_help_hover.png | Bin 0 -> 1217 bytes .../rsrc/image/menu/icon_help_selected.png | Bin 0 -> 1685 bytes 32 files changed, 85 insertions(+), 143 deletions(-) create mode 100644 src/applications/diviner/application/PhabricatorApplicationDiviner.php create mode 100644 webroot/rsrc/image/menu/icon_help.png create mode 100644 webroot/rsrc/image/menu/icon_help_hover.png create mode 100644 webroot/rsrc/image/menu/icon_help_selected.png diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index a0b3693f46..eb855d1c6a 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -549,6 +549,7 @@ phutil_register_library_map(array( 'PhabricatorApplicationDaemons' => 'applications/daemon/application/PhabricatorApplicationDaemons.php', 'PhabricatorApplicationDifferential' => 'applications/differential/application/PhabricatorApplicationDifferential.php', 'PhabricatorApplicationDiffusion' => 'applications/diffusion/application/PhabricatorApplicationDiffusion.php', + 'PhabricatorApplicationDiviner' => 'applications/diviner/application/PhabricatorApplicationDiviner.php', 'PhabricatorApplicationFact' => 'applications/fact/application/PhabricatorApplicationFact.php', 'PhabricatorApplicationFlags' => 'applications/flag/application/PhabricatorApplicationFlags.php', 'PhabricatorApplicationLaunchView' => 'applications/meta/view/PhabricatorApplicationLaunchView.php', @@ -1671,6 +1672,7 @@ phutil_register_library_map(array( 'PhabricatorApplicationDaemons' => 'PhabricatorApplication', 'PhabricatorApplicationDifferential' => 'PhabricatorApplication', 'PhabricatorApplicationDiffusion' => 'PhabricatorApplication', + 'PhabricatorApplicationDiviner' => 'PhabricatorApplication', 'PhabricatorApplicationFact' => 'PhabricatorApplication', 'PhabricatorApplicationFlags' => 'PhabricatorApplication', 'PhabricatorApplicationLaunchView' => 'AphrontView', diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php index 8de9359d8f..4abd3ce216 100644 --- a/src/applications/base/PhabricatorApplication.php +++ b/src/applications/base/PhabricatorApplication.php @@ -70,6 +70,21 @@ abstract class PhabricatorApplication { return null; } + public function getHelpURI() { + // TODO: When these applications get created, link to their docs: + // + // - Conduit + // - Drydock + // - Herald + // - OAuth Server + // - Owners + // - Phame + // - Slowvote + + + return null; + } + /* -( URI Routing )-------------------------------------------------------- */ diff --git a/src/applications/calendar/controller/PhabricatorCalendarController.php b/src/applications/calendar/controller/PhabricatorCalendarController.php index 9688769cb7..9831a28743 100644 --- a/src/applications/calendar/controller/PhabricatorCalendarController.php +++ b/src/applications/calendar/controller/PhabricatorCalendarController.php @@ -1,7 +1,7 @@ setGlyph("\xE2\x8C\xA8"); - $page->appendChild($view); - $page->setTabs( - array( - ), - idx($data, 'tab')); - $response = new AphrontWebpageResponse(); return $response->setContent($page->render()); } diff --git a/src/applications/conduit/controller/PhabricatorConduitController.php b/src/applications/conduit/controller/PhabricatorConduitController.php index 366ae2625c..f3f7ccdd7f 100644 --- a/src/applications/conduit/controller/PhabricatorConduitController.php +++ b/src/applications/conduit/controller/PhabricatorConduitController.php @@ -25,21 +25,12 @@ abstract class PhabricatorConduitController extends PhabricatorController { protected $showSideNav; public function buildStandardPageResponse($view, array $data) { - $doclink = PhabricatorEnv::getDoclink( - 'article/Conduit_Technical_Documentation.html' - ); - $page = $this->buildStandardPageView(); $page->setApplicationName('Conduit'); $page->setBaseURI('/conduit/'); $page->setTitle(idx($data, 'title')); $page->setGlyph("\xE2\x87\xB5"); - $page->setTabs(array( - 'help' => array( - 'href' => $doclink, - 'name' => 'Help') - ), null); if ($this->showSideNav()) { diff --git a/src/applications/daemon/controller/PhabricatorDaemonTimelineConsoleController.php b/src/applications/daemon/controller/PhabricatorDaemonTimelineConsoleController.php index 97553db4fa..efe4c78c48 100644 --- a/src/applications/daemon/controller/PhabricatorDaemonTimelineConsoleController.php +++ b/src/applications/daemon/controller/PhabricatorDaemonTimelineConsoleController.php @@ -65,7 +65,6 @@ final class PhabricatorDaemonTimelineConsoleController $nav, array( 'title' => 'Timeline', - 'tab' => 'timeline', )); } diff --git a/src/applications/differential/controller/DifferentialController.php b/src/applications/differential/controller/DifferentialController.php index 07f6244324..e77c750d05 100644 --- a/src/applications/differential/controller/DifferentialController.php +++ b/src/applications/differential/controller/DifferentialController.php @@ -34,7 +34,6 @@ abstract class DifferentialController extends PhabricatorController { $page->setTitle(idx($data, 'title')); $page->setGlyph("\xE2\x9A\x99"); $page->appendChild($view); - $page->setIsLoggedOut($viewer_is_anonymous); $page->setSearchDefaultScope(PhabricatorSearchScope::SCOPE_OPEN_REVISIONS); $response = new AphrontWebpageResponse(); diff --git a/src/applications/differential/controller/DifferentialDiffCreateController.php b/src/applications/differential/controller/DifferentialDiffCreateController.php index b568145e49..eeda03b398 100644 --- a/src/applications/differential/controller/DifferentialDiffCreateController.php +++ b/src/applications/differential/controller/DifferentialDiffCreateController.php @@ -84,7 +84,6 @@ final class DifferentialDiffCreateController extends DifferentialController { $panel, array( 'title' => 'Create Diff', - 'tab' => 'create', )); } diff --git a/src/applications/differential/controller/DifferentialRevisionListController.php b/src/applications/differential/controller/DifferentialRevisionListController.php index ec3cacdcd8..e14c1ecaac 100644 --- a/src/applications/differential/controller/DifferentialRevisionListController.php +++ b/src/applications/differential/controller/DifferentialRevisionListController.php @@ -228,7 +228,6 @@ final class DifferentialRevisionListController extends DifferentialController { $side_nav, array( 'title' => 'Differential Home', - 'tab' => 'revisions', )); } diff --git a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php index fc5a47aaf9..4c78988f72 100644 --- a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php +++ b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php @@ -30,6 +30,10 @@ final class PhabricatorApplicationDiffusion extends PhabricatorApplication { return celerity_get_resource_uri('/rsrc/image/app/app_diffusion.png'); } + public function getHelpURI() { + return PhabricatorEnv::getDoclink('article/Diffusion_User_Guide.html'); + } + public function getRoutes() { return array( '/r(?P[A-Z]+)(?P[a-z0-9]+)' diff --git a/src/applications/diffusion/controller/DiffusionController.php b/src/applications/diffusion/controller/DiffusionController.php index 862f3d69f7..f2d87036d4 100644 --- a/src/applications/diffusion/controller/DiffusionController.php +++ b/src/applications/diffusion/controller/DiffusionController.php @@ -47,15 +47,6 @@ abstract class DiffusionController extends PhabricatorController { $page->setBaseURI('/diffusion/'); $page->setTitle(idx($data, 'title')); $page->setGlyph("\xE2\x89\x88"); - $page->setTabs( - array( - 'help' => array( - 'href' => PhabricatorEnv::getDoclink( - 'article/Diffusion_User_Guide.html'), - 'name' => 'Help', - ), - ), - null); $page->setSearchDefaultScope(PhabricatorSearchScope::SCOPE_COMMITS); $page->appendChild($view); diff --git a/src/applications/diviner/application/PhabricatorApplicationDiviner.php b/src/applications/diviner/application/PhabricatorApplicationDiviner.php new file mode 100644 index 0000000000..3cfd5a1bad --- /dev/null +++ b/src/applications/diviner/application/PhabricatorApplicationDiviner.php @@ -0,0 +1,46 @@ +getCurrentApplication(); + if ($application && $application->getHelpURI()) { + $class = 'main-menu-item-icon-help'; + $item = new PhabricatorMainMenuIconView(); + $item->setName(pht('%s Help', $application->getName())); + $item->addClass('main-menu-item-icon '.$class); + $item->setHref($application->getHelpURI()); + $item->setSortOrder(0.1); + $items[] = $item; + } + + return $items; + } + + +} + diff --git a/src/applications/drydock/controller/DrydockController.php b/src/applications/drydock/controller/DrydockController.php index 311d951322..710d40ec83 100644 --- a/src/applications/drydock/controller/DrydockController.php +++ b/src/applications/drydock/controller/DrydockController.php @@ -29,15 +29,6 @@ abstract class DrydockController extends PhabricatorController { $page->appendChild($view); - $help_uri = PhabricatorEnv::getDoclink('article/Drydock_User_Guide.html'); - $page->setTabs( - array( - 'help' => array( - 'name' => 'Help', - 'href' => $help_uri, - ), - ), null); - $response = new AphrontWebpageResponse(); return $response->setContent($page->render()); } diff --git a/src/applications/files/controller/PhabricatorFileListController.php b/src/applications/files/controller/PhabricatorFileListController.php index 0d10f08472..16079eced6 100644 --- a/src/applications/files/controller/PhabricatorFileListController.php +++ b/src/applications/files/controller/PhabricatorFileListController.php @@ -177,7 +177,6 @@ final class PhabricatorFileListController extends PhabricatorFileController { $side_nav, array( 'title' => 'Files', - 'tab' => 'files', )); } diff --git a/src/applications/files/controller/PhabricatorFileMacroListController.php b/src/applications/files/controller/PhabricatorFileMacroListController.php index f63bb3d854..5a92bead91 100644 --- a/src/applications/files/controller/PhabricatorFileMacroListController.php +++ b/src/applications/files/controller/PhabricatorFileMacroListController.php @@ -158,7 +158,6 @@ final class PhabricatorFileMacroListController $side_nav, array( 'title' => 'Image Macros', - 'tab' => 'macros', )); } } diff --git a/src/applications/herald/controller/HeraldController.php b/src/applications/herald/controller/HeraldController.php index c3814082c4..7497e366f4 100644 --- a/src/applications/herald/controller/HeraldController.php +++ b/src/applications/herald/controller/HeraldController.php @@ -26,16 +26,6 @@ abstract class HeraldController extends PhabricatorController { $page->setTitle(idx($data, 'title')); $page->setGlyph("\xE2\x98\xBF"); - $doclink = PhabricatorEnv::getDoclink('article/Herald_User_Guide.html'); - - $tabs = array( - 'help' => array( - 'href' => $doclink, - 'name' => 'Help', - ), - ); - $page->setTabs($tabs, null); - $page->appendChild($view); $page->setIsAdminInterface(idx($data, 'admin')); diff --git a/src/applications/herald/controller/HeraldTestConsoleController.php b/src/applications/herald/controller/HeraldTestConsoleController.php index 10f6c92494..028f65971a 100644 --- a/src/applications/herald/controller/HeraldTestConsoleController.php +++ b/src/applications/herald/controller/HeraldTestConsoleController.php @@ -144,7 +144,6 @@ final class HeraldTestConsoleController extends HeraldController { $nav, array( 'title' => 'Test Console', - 'tab' => 'test', )); } diff --git a/src/applications/herald/controller/HeraldTranscriptListController.php b/src/applications/herald/controller/HeraldTranscriptListController.php index 7b41b43432..cee544d902 100644 --- a/src/applications/herald/controller/HeraldTranscriptListController.php +++ b/src/applications/herald/controller/HeraldTranscriptListController.php @@ -119,7 +119,6 @@ final class HeraldTranscriptListController extends HeraldController { $nav, array( 'title' => 'Herald Transcripts', - 'tab' => 'transcripts', )); } diff --git a/src/applications/mailinglists/controller/PhabricatorMailingListsListController.php b/src/applications/mailinglists/controller/PhabricatorMailingListsListController.php index 2660aec3e3..7d317a4efd 100644 --- a/src/applications/mailinglists/controller/PhabricatorMailingListsListController.php +++ b/src/applications/mailinglists/controller/PhabricatorMailingListsListController.php @@ -81,7 +81,6 @@ final class PhabricatorMailingListsListController $panel, array( 'title' => 'Mailing Lists', - 'tab' => 'lists', )); } } diff --git a/src/applications/metamta/controller/PhabricatorMetaMTAReceivedListController.php b/src/applications/metamta/controller/PhabricatorMetaMTAReceivedListController.php index bbd1e51d5c..16d0cd73a6 100644 --- a/src/applications/metamta/controller/PhabricatorMetaMTAReceivedListController.php +++ b/src/applications/metamta/controller/PhabricatorMetaMTAReceivedListController.php @@ -91,7 +91,6 @@ final class PhabricatorMetaMTAReceivedListController $nav, array( 'title' => 'Received Mail', - 'tab' => 'received', )); } } diff --git a/src/applications/oauthserver/controller/PhabricatorOAuthServerController.php b/src/applications/oauthserver/controller/PhabricatorOAuthServerController.php index 31c7940901..2a6843e9b3 100644 --- a/src/applications/oauthserver/controller/PhabricatorOAuthServerController.php +++ b/src/applications/oauthserver/controller/PhabricatorOAuthServerController.php @@ -47,17 +47,6 @@ extends PhabricatorController { $nav->appendChild($view); $page->appendChild($nav); - $doc_href = PhabricatorEnv::getDoclink( - 'article/Using_the_Phabricator_OAuth_Server.html' - ); - $page->setTabs( - array( - 'help' => array( - 'name' => 'Help', - 'href' => $doc_href, - ), - ), - null); $response = new AphrontWebpageResponse(); return $response->setContent($page->render()); diff --git a/src/applications/owners/controller/PhabricatorOwnersController.php b/src/applications/owners/controller/PhabricatorOwnersController.php index a4be6afcad..e3c5002e73 100644 --- a/src/applications/owners/controller/PhabricatorOwnersController.php +++ b/src/applications/owners/controller/PhabricatorOwnersController.php @@ -39,16 +39,6 @@ abstract class PhabricatorOwnersController extends PhabricatorController { $nav->appendChild($view); $page->appendChild($nav); - $doclink = - PhabricatorEnv::getDoclink('article/Owners_Tool_User_Guide.html'); - $tabs = array( - 'help' => array( - 'href' => $doclink, - 'name' => 'Help', - ), - ); - $page->setTabs($tabs, null); - $response = new AphrontWebpageResponse(); return $response->setContent($page->render()); } diff --git a/src/applications/paste/controller/PhabricatorPasteViewController.php b/src/applications/paste/controller/PhabricatorPasteViewController.php index bcef68d16f..216753bbb3 100644 --- a/src/applications/paste/controller/PhabricatorPasteViewController.php +++ b/src/applications/paste/controller/PhabricatorPasteViewController.php @@ -122,7 +122,6 @@ final class PhabricatorPasteViewController extends PhabricatorPasteController { ), array( 'title' => 'Paste: '.nonempty($paste->getTitle(), 'P'.$paste->getID()), - 'tab' => 'view', )); } diff --git a/src/applications/phame/controller/PhameController.php b/src/applications/phame/controller/PhameController.php index af1ec4ec17..8b12a8a323 100644 --- a/src/applications/phame/controller/PhameController.php +++ b/src/applications/phame/controller/PhameController.php @@ -39,14 +39,6 @@ abstract class PhameController extends PhabricatorController { $page->setTitle(idx($data, 'title')); $page->setGlyph("\xe2\x9c\xa9"); - $tabs = array( - 'help' => array( - 'name' => 'Help', - 'href' => - PhabricatorEnv::getDoclink('article/Phame_User_Guide.html'), - ), - ); - $page->setTabs($tabs, idx($data, 'tab')); if ($this->showSideNav()) { $nav = $this->renderSideNavFilterView($this->getSideNavFilter()); $nav->appendChild($view); diff --git a/src/applications/phriction/application/PhabricatorApplicationPhriction.php b/src/applications/phriction/application/PhabricatorApplicationPhriction.php index 080cdd6863..6593ed3747 100644 --- a/src/applications/phriction/application/PhabricatorApplicationPhriction.php +++ b/src/applications/phriction/application/PhabricatorApplicationPhriction.php @@ -30,6 +30,10 @@ final class PhabricatorApplicationPhriction extends PhabricatorApplication { return celerity_get_resource_uri('/rsrc/image/app/app_phriction.png'); } + public function getHelpURI() { + return PhabricatorEnv::getDoclink('article/Phriction_User_Guide.html'); + } + public function getRoutes() { return array( // Match "/w/" with slug "/". diff --git a/src/applications/phriction/controller/PhrictionController.php b/src/applications/phriction/controller/PhrictionController.php index 7f2e872223..0c1e6c329e 100644 --- a/src/applications/phriction/controller/PhrictionController.php +++ b/src/applications/phriction/controller/PhrictionController.php @@ -30,14 +30,6 @@ abstract class PhrictionController extends PhabricatorController { $page->setTitle(idx($data, 'title')); $page->setGlyph("\xE2\x9A\xA1"); - $tabs = array( - 'help' => array( - 'name' => 'Help', - 'href' => - PhabricatorEnv::getDoclink('article/Phriction_User_Guide.html'), - ), - ); - $page->setTabs($tabs, idx($data, 'tab')); $page->appendChild($view); $page->setSearchDefaultScope(PhabricatorSearchScope::SCOPE_WIKI); diff --git a/src/applications/slowvote/controller/PhabricatorSlowvoteController.php b/src/applications/slowvote/controller/PhabricatorSlowvoteController.php index b5976adc08..5368519702 100644 --- a/src/applications/slowvote/controller/PhabricatorSlowvoteController.php +++ b/src/applications/slowvote/controller/PhabricatorSlowvoteController.php @@ -1,7 +1,7 @@ setTitle(idx($data, 'title')); $page->setGlyph("\xE2\x9C\x94"); - $doc_href = PhabricatorEnv::getDoclink('article/Slowvote_User_Guide.html'); - $page->setTabs( - array( - 'help' => array( - 'name' => 'Help', - 'href' => $doc_href, - ), - ), - null); - $page->appendChild($view); $response = new AphrontWebpageResponse(); diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php index 43b995d859..a88f2e0b92 100644 --- a/src/view/page/PhabricatorStandardPageView.php +++ b/src/view/page/PhabricatorStandardPageView.php @@ -20,8 +20,6 @@ final class PhabricatorStandardPageView extends AphrontPageView { private $baseURI; private $applicationName; - private $tabs = array(); - private $selectedTab; private $glyph; private $bodyContent; private $menuContent; @@ -48,18 +46,6 @@ final class PhabricatorStandardPageView extends AphrontPageView { return $this; } - public function setIsLoggedOut($is_logged_out) { - if ($is_logged_out) { - $this->tabs = array_merge($this->tabs, array( - 'login' => array( - 'name' => 'Login', - 'href' => '/login/' - ) - )); - } - return $this; - } - public function getIsAdminInterface() { return $this->isAdminInterface; } @@ -101,12 +87,6 @@ final class PhabricatorStandardPageView extends AphrontPageView { return $this->baseURI; } - public function setTabs(array $tabs, $selected_tab) { - $this->tabs = $tabs; - $this->selectedTab = $selected_tab; - return $this; - } - public function setShowChrome($show_chrome) { $this->showChrome = $show_chrome; return $this; @@ -269,26 +249,6 @@ final class PhabricatorStandardPageView extends AphrontPageView { protected function getBody() { $console = $this->getConsole(); - $tabs = array(); - foreach ($this->tabs as $name => $tab) { - $tab_markup = phutil_render_tag( - 'a', - array( - 'href' => idx($tab, 'href'), - ), - phutil_escape_html(idx($tab, 'name'))); - $tab_markup = phutil_render_tag( - 'td', - array( - 'class' => ($name == $this->selectedTab) - ? 'phabricator-selected-tab' - : null, - ), - $tab_markup); - $tabs[] = $tab_markup; - } - $tabs = implode('', $tabs); - $login_stuff = null; $request = $this->getRequest(); $user = null; diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css index 7e1995322b..377f9318c3 100644 --- a/webroot/rsrc/css/application/base/main-menu-view.css +++ b/webroot/rsrc/css/application/base/main-menu-view.css @@ -202,6 +202,18 @@ background-image: url(/rsrc/image/menu/icon_logout_selected.png); } +.main-menu-item-icon-help { + background-image: url(/rsrc/image/menu/icon_help.png); +} + +.main-menu-item-icon-help:hover { + background-image: url(/rsrc/image/menu/icon_help_hover.png); +} + +.main-menu-item-icon-help-selected { + background-image: url(/rsrc/image/menu/icon_help_selected.png); +} + .main-menu-item-icon-profile { background-repeat: no-repeat; background-size: 26px 26px; diff --git a/webroot/rsrc/image/app/app_applications.png b/webroot/rsrc/image/app/app_applications.png index ff13f2866e9978ce965a2d4300b91d7bd67da188..7b4c3d0b6e0b045a33a67b72a2c66957d14b7417 100644 GIT binary patch delta 1243 zcmV<11SI><1MdltB!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o000D$ zNklGyMl7Yd0^gg6`Ut;6ge< z5W!8d6I^uKl`Fjw6({T)5J%J-C!BrXSA9#8@O<=zqH^n=`hU)MzH?4hY;A3A;;YAI zvx(i^T@U5}UNviQ-N3{VGfguoe(~78aB-gP*N(GK7NfCpY)UR=-5&jLf|`{m_j z>PrUzryL0|b$=BW7V0G>C4u7NVsmnGGF@6)Dw)5&zKW5N5hvNxj#6>$;o*V9e0+TL zpP!#6vm97jyD^ic3!tK`tjs$;KAxmBd`3q{Jzy9Fn2C`f5s(ldAvi-O=_H*_oA>wk z-jkCP8Ht17R^nm=CsU`>$xW`iyF0PHy)6*7xVX3o!G9)5#yveff2^#m1QA6T5^5w= zR8%A#ao^R|6=n1h*RB!@rd}GlTrL48=ETIrKL-Z~Vq;@NI%#fh{vD=Xd<(nXZqeW0 z9|f2fz!Bz&k537$185^dUIFz6ao8c2+U|=BG+S;1Dy}cEO zhlk8Z2!FE4?^Hrn8*x}!fQ~wtScXYp3!D|g`W6IY0=XH<6RA{+)xy#g@p$}CtcOUD zpxno*qb;irPBfp-=V1;4Tp&1gBnyBV$H&J4T1s|&P>$mC^i-~GZEbxcIPJNYz}%PF zCzKmb0$8(aG@?YRnOH4nXJ-P{@Y&IP=FLFs@qi79a9z>-RHC~uh|5@2a*DWPdv9986GX=0sC#qx`h zOnG^^lvROe%ANJ*Jj)A~2EUSqQ0U87m z7m{nv&dx^JBOoUR2M3)X<%g6(%bAOJMt>v{`OVHw1yGn(qY|wK9kLAT>+5Aw841p( z(D3kZ6r{xF=BAWmVPPRXKR+J_R*?O|>cbP3Qn9W(Iy$15b+XKKz~obFmLsH;j^H$L zbaW&ViG+y7Vp(?y)+1;{-VZw1%L~XsZ#*sGJph(E^mXM{geql5L?ZmXv$G@i_kZ_4 z!JC?z{=)YFNSW+lwJuZ6GY9uV3R?Rim8n2;+uyq3!qd~!-zY6*MPzP_zj>6SludN6 ze{pf~^H#H~TM8G1=yWtTKYA zBI+!N5eOzhd^wFM802T51$Kp$jpYzqX_O$o+fSmFGLQ5!c)(Nl2nv16y~E!2%b{mh@D%w z0>K4K>>RoFaCDqc-Du0Tv2aR7-(`ValQVnatXP?^9WL_FvDpSJuFQ<6S=n7f-c>1N f(rnNE``hvhViK~GeDxw&00000NkvXXu0mjf?n1+5 diff --git a/webroot/rsrc/image/menu/icon_help.png b/webroot/rsrc/image/menu/icon_help.png new file mode 100644 index 0000000000000000000000000000000000000000..8889d9d5e12632216f6bd56ed98afbb893b23677 GIT binary patch literal 1139 zcmV-(1dRKMP)O2yHD3}x zGG9n7ZGpB7=tg;zMN~na$=YB4RGZ4_Y7A z<`)!f=la}+hWfxwBjvMN+b8i^r7B6=QB@_?>2%3l9GBDi>xMG*yAaO&zq>v;eB?FX zKL%%bC_W?Utd0*WAH^il144a^>1K)Labhx?rsEr=v&Z=EXkvMgE5E`Quby?Yq*PE#Qu)vHc zHB}exXR}#fVGrm?vQRk9#Yb)QAm!OF<f8-B*Vr++-@`u_NLPPU1^ zapUIVSQ_X-`u%=!Fi0nSZ5;dR%f7mc7xXxlXV2-?N>#~EFltFG4fG)CAT8kf?1jbc z?wbXZpCL4U^zo4u>(m>rkt8XO$6qPSl#wC0coQ{pI=Tj+x&s(4S-b92xO&BjaQk|D zr%0F6F_P%iCJ%Dqq)DWXIv5$?eE96|3AfQ3I%r9(?v@?W#S0*6^3R zZw|>^sN7z)DlCF=tiGs)ny8H)PtydTOra`0eDt#~wu;1J-m`3ge`jWxZ;yT6WVc#Q zz+)>Kg%cm{Q~&6Q_p!^_CC$mrlP_B);V&iW_5bare>m~=ADwoqo;8^!7UcCgz~uPY z=veFhJ4|x2Fgs_}YT;r`OjP6anUlw_4|@9R*n>R|m?xtAt)TG=Kruj*nU$@ncGX|{F*Zw^pSp3ib9iW=g-t1#J}?tM-7V3`*d}6=+8RI!UJ9~I`O6tA zWfB-VpZ!yu9~<#bdxr-x`?>(_?7|P?GT|>`r09PF3;@6!b=5HDTAu&_002ovPDHLk FV1n4cD^vgg literal 0 HcmV?d00001 diff --git a/webroot/rsrc/image/menu/icon_help_hover.png b/webroot/rsrc/image/menu/icon_help_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..18c3c98518fb546b699aebb03c7d1203eded2386 GIT binary patch literal 1217 zcmV;y1U~zTP)KtW{35{a@H7X1TkAX_9B{RRAl@();aQwgy^z?w=_qG+HLrj;^k3z<%v zm-F!3oX@#IjT5(nr6XV4_kQO)-{W3OzVEZpB?EC_9>@YYaW4WZ02lKd-~u=Wn!uH~ z_W%p3&QI%P{X(C z*xC%`Bkv^X=6D~s9pF%??F!}on21Ogfda6JcQw!V^T9X3XSZL{h$SGEC8>csk$nr) zfew*zk&~oQvgvx>w&!`O=lPK;A_<8|mh!SJZ!0pHWqW{4dE+ASl#{aKx;4jfLE`;y zl1VaI^|?~xic%jJ2N%_~3MDnmw(}sGNy0fljB(|6MNuA;J=b+#v2EuaI9HlQ=J{S8 z_ZpNDS(k{iFkCTBt7=&`1L4%7q^jBH$3YYiiV5}YB2-SuQF_K)EtOP@91~Vd z3Kvwx=zozZUs=zdtZO84L`Kob^J56hsC6L>!#LMV^qsyShJ>N;ERs z!jI%A7H{Z!|MQOCQ=vL?y}}i;zeGgN^AM3|$wZuBb@ftL?;&s2t?N*oR8(gigHtSQgG{@X2reT` zc{FsMo_qZPL$gk`#MI#?%WX9F3H4Dkl}sKZ3{@)8NFp3n>#O;%P}T>*A=K3?kN!CM zjG_@4ZnOc}CJrLHTFzy5&n_BO=axLp#beYvN8*s9agy?8IA-J;uFNsAO&qiZH4_Q- z;C?Q%Pn{gzO8(o5M%#WkERplc7TF}*V@0%$pTD%evU7FaF0?v&e%9_yVMVWOkg}i= zF%EWv8KI*sYGFRrAe-W7@6ib>i;^u|H`@C^@C f@LWHT{|YbwOy0R7Rwqgc00000NkvXXu0mjfKmaza literal 0 HcmV?d00001 diff --git a/webroot/rsrc/image/menu/icon_help_selected.png b/webroot/rsrc/image/menu/icon_help_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..9a2fbf95bf585542115894d54409e4154d9e1c47 GIT binary patch literal 1685 zcmV;G25R|_eAKRYo>XS^kQ*-AtBHy|i~=0H!o)}Xy-iNbR>7n*F3 zGtPPCpdhe-NFwmtL64uz&SgLO<*PG8^vU~QKv;Wx&tr{iHm>=&B+L79C5IJlmjT2B zP<0cDC|1D20g1&FnJJEQbb5IDgFk*cKSQ7Se*sBPzxCt}b(Qv|Zu7Q90x3BJ;t~i4 zn`Jj5G!e`sfhn@YY6vVI5JrvJ?Axb~oIOWd+&hZ3_80HWpV-^o6K$?LmNJ~ijA65a zNg$3_HiqPzDkzHOUrDIk*&|hs>oJS=nYPCq&XVz@`dU*THkjzw?V-0LzOxLT3L(DC=JP&G`x_d^3Q^Fo`6wL|A6V#B6cu#>{;BRwj)D$<>M4#`fm=WMge8 zTd-JxSb>>IqI({(4z)t(aR2pvwA}zBv9r5lySldVP-@X+2ARvHTM6_Rl0}w?1ldgg z(B!qVSANjv^ggR-og_I&^UKrMre*`KTc3PjRot>GX7+q`lm<+Vg*PdZa4I!9KPeKL zN)dK2OH2yne21Lx(XBY$N+#3TY26sRFxpG|4wLll+W(Xdq4|#_y<->0dUwp{YSO(my;j@Y}$kzg1Kk5?gYHZ+7o)ve~2)x`83vrlSJD^>0)i z*pC0(WCDrqtpsJ3jD^_E{-Lq4OJnfY$o5yaZ(oj~qH&(&^zwDS#B>5$2^HgbB)~}L6m$avj0}>2>*t5RRVB}?p@a+~aS)0AEiHyGbJIjSfUbA$qlrN zuo7VLSdc~N7o$+JnVz#)k$%yK%DEPzmQtgzRSAWU_h0=veQV)U+S*@j6Xl9Sk}u}y zFPp1xYOZSz1cM^-fO{2I2;q_mW){okEoKymjakW`AO%Y_9AtG`m}w#A+_*4!j%wjy zA4Ff?%1x4VDPNpRPp5c&ZL}rPpeeX11l<(2Dd#uGTY=0(4p*t`YQ&1f>?O2nhCAPKhZ-TU04@Ri6pW=79X4gP)A z(2X;GOF{ccFMXV>_}oHkhrdZWNgg3-kHporkys>7IHI2`ULjY|3%Y>^2;Os-e8=B} f3zt8){t;jRvHHDv%VA0L00000NkvXXu0mjfrx78& literal 0 HcmV?d00001