diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index ffade93324..45165c3d2c 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -1,541 +1,550 @@ <?php /** * This file is automatically generated. Use 'celerity_mapper.php' to rebuild * it. * @generated */ celerity_register_resource_map(array( 'aphront-dark-console-css' => array( 'uri' => '/res/056b0c12/rsrc/css/aphront/dark-console.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/dark-console.css', ), 'aphront-dialog-view-css' => array( - 'uri' => '/res/c8324e86/rsrc/css/aphront/dialog-view.css', + 'uri' => '/res/7101ab69/rsrc/css/aphront/dialog-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/dialog-view.css', ), 'aphront-error-view-css' => array( 'uri' => '/res/19b27527/rsrc/css/aphront/error-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/error-view.css', ), 'aphront-form-view-css' => array( 'uri' => '/res/8aaef437/rsrc/css/aphront/form-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/form-view.css', ), 'aphront-panel-view-css' => array( 'uri' => '/res/63672373/rsrc/css/aphront/panel-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/panel-view.css', ), 'aphront-request-failure-view-css' => array( 'uri' => '/res/97b8337a/rsrc/css/aphront/request-failure-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/request-failure-view.css', ), 'aphront-side-nav-view-css' => array( 'uri' => '/res/09b7eb85/rsrc/css/aphront/side-nav-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/side-nav-view.css', ), 'aphront-table-view-css' => array( 'uri' => '/res/6a70f0f0/rsrc/css/aphront/table-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/table-view.css', ), 'aphront-tokenizer-control-css' => array( 'uri' => '/res/a3d23074/rsrc/css/aphront/tokenizer.css', 'type' => 'css', 'requires' => array( 0 => 'aphront-typeahead-control-css', ), 'disk' => '/rsrc/css/aphront/tokenizer.css', ), 'aphront-typeahead-control-css' => array( 'uri' => '/res/928df9f0/rsrc/css/aphront/typeahead.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/typeahead.css', ), 'phabricator-standard-page-view' => array( 'uri' => '/res/4ebe4b10/rsrc/css/application/base/standard-page-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/base/standard-page-view.css', ), 'differential-revision-add-comment-css' => array( 'uri' => '/res/aaae14d3/rsrc/css/application/differential/add-comment.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/add-comment.css', ), 'differential-changeset-view-css' => array( 'uri' => '/res/f26ca6f9/rsrc/css/application/differential/changeset-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/changeset-view.css', ), 'differential-core-view-css' => array( 'uri' => '/res/525d1a12/rsrc/css/application/differential/core.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/core.css', ), 'differential-revision-comment-list-css' => array( 'uri' => '/res/10b9a829/rsrc/css/application/differential/revision-comment-list.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/revision-comment-list.css', ), 'differential-revision-comment-css' => array( 'uri' => '/res/b271baaf/rsrc/css/application/differential/revision-comment.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/revision-comment.css', ), 'differential-revision-detail-css' => array( - 'uri' => '/res/230a67c6/rsrc/css/application/differential/revision-detail.css', + 'uri' => '/res/7b5e95cc/rsrc/css/application/differential/revision-detail.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/revision-detail.css', ), 'differential-revision-history-css' => array( 'uri' => '/res/755f3da3/rsrc/css/application/differential/revision-history.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/revision-history.css', ), 'differential-table-of-contents-css' => array( 'uri' => '/res/e68f6f05/rsrc/css/application/differential/table-of-contents.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/table-of-contents.css', ), 'phabricator-directory-css' => array( 'uri' => '/res/6a000601/rsrc/css/application/directory/phabricator-directory.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/directory/phabricator-directory.css', ), 'mainphest-task-detail-css' => array( 'uri' => '/res/e5f3beca/rsrc/css/application/maniphest/task-detail.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/maniphest/task-detail.css', ), 'maniphest-task-summary-css' => array( 'uri' => '/res/10d5ec2e/rsrc/css/application/maniphest/task-summary.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/maniphest/task-summary.css', ), 'maniphest-transaction-detail-css' => array( 'uri' => '/res/658912c5/rsrc/css/application/maniphest/transaction-detail.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/maniphest/transaction-detail.css', ), 'phabricator-object-selector-css' => array( 'uri' => '/res/52a7e289/rsrc/css/application/objectselector/object-selector.css', 'type' => 'css', 'requires' => array( 0 => 'aphront-dialog-view-css', ), 'disk' => '/rsrc/css/application/objectselector/object-selector.css', ), + 'phabricator-profile-css' => + array( + 'uri' => '/res/c3c5c82e/rsrc/css/application/people/profile.css', + 'type' => 'css', + 'requires' => + array( + ), + 'disk' => '/rsrc/css/application/people/profile.css', + ), 'phabricator-core-buttons-css' => array( - 'uri' => '/res/ee35ffe1/rsrc/css/core/buttons.css', + 'uri' => '/res/53b4f712/rsrc/css/core/buttons.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/core/buttons.css', ), 'phabricator-core-css' => array( 'uri' => '/res/6eebb99b/rsrc/css/core/core.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/core/core.css', ), 'phabricator-remarkup-css' => array( 'uri' => '/res/786989c3/rsrc/css/core/remarkup.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/core/remarkup.css', ), 'syntax-highlighting-css' => array( 'uri' => '/res/fb673ece/rsrc/css/core/syntax.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/core/syntax.css', ), 'javelin-behavior-dark-console' => array( 'uri' => '/res/020b0265/rsrc/js/application/core/behavior-dark-console.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/js/application/core/behavior-dark-console.js', ), 'javelin-behavior-phabricator-object-selector' => array( - 'uri' => '/res/e849ced6/rsrc/js/application/core/behavior-object-selector.js', + 'uri' => '/res/4fe735af/rsrc/js/application/core/behavior-object-selector.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/core/behavior-object-selector.js', ), 'javelin-behavior-aphront-basic-tokenizer' => array( 'uri' => '/res/8317d761/rsrc/js/application/core/behavior-tokenizer.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/core/behavior-tokenizer.js', ), 'javelin-behavior-workflow' => array( 'uri' => '/res/15446e7e/rsrc/js/application/core/behavior-workflow.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/core/behavior-workflow.js', ), 'javelin-behavior-differential-add-reviewers' => array( 'uri' => '/res/330154e4/rsrc/js/application/differential/behavior-add-reviewers.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/differential/behavior-add-reviewers.js', ), 'javelin-behavior-differential-feedback-preview' => array( 'uri' => '/res/8695d8b8/rsrc/js/application/differential/behavior-comment-preview.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/differential/behavior-comment-preview.js', ), 'javelin-behavior-differential-diff-radios' => array( 'uri' => '/res/fdeb3823/rsrc/js/application/differential/behavior-diff-radios.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/differential/behavior-diff-radios.js', ), 'javelin-behavior-differential-edit-inline-comments' => array( 'uri' => '/res/74747b2e/rsrc/js/application/differential/behavior-edit-inline-comments.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/differential/behavior-edit-inline-comments.js', ), 'javelin-behavior-differential-populate' => array( 'uri' => '/res/a13dcd7e/rsrc/js/application/differential/behavior-populate.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/differential/behavior-populate.js', ), 'javelin-behavior-differential-show-all-comments' => array( 'uri' => '/res/2a3592b8/rsrc/js/application/differential/behavior-show-all-comments.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/differential/behavior-show-all-comments.js', ), 'javelin-behavior-differential-show-more' => array( 'uri' => '/res/ea998002/rsrc/js/application/differential/behavior-show-more.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/differential/behavior-show-more.js', ), 'javelin-behavior-maniphest-transaction-controls' => array( 'uri' => '/res/fc6a8722/rsrc/js/application/maniphest/behavior-transaction-controls.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-lib-dev', ), 'disk' => '/rsrc/js/application/maniphest/behavior-transaction-controls.js', ), 'javelin-magical-init' => array( 'uri' => '/res/76614f84/rsrc/js/javelin/init.dev.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/js/javelin/init.dev.js', ), 'javelin-init-prod' => array( 'uri' => '/res/1267c868/rsrc/js/javelin/init.min.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/js/javelin/init.min.js', ), 'javelin-lib-dev' => array( 'uri' => '/res/a0e7a5e9/rsrc/js/javelin/javelin.dev.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/js/javelin/javelin.dev.js', ), 'javelin-lib-prod' => array( 'uri' => '/res/2f2b3b2e/rsrc/js/javelin/javelin.min.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/js/javelin/javelin.min.js', ), 'javelin-typeahead-dev' => array( 'uri' => '/res/6de6ae59/rsrc/js/javelin/typeahead.dev.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/js/javelin/typeahead.dev.js', ), 'javelin-typeahead-prod' => array( 'uri' => '/res/69d5fad1/rsrc/js/javelin/typeahead.min.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/js/javelin/typeahead.min.js', ), 'javelin-workflow-dev' => array( 'uri' => '/res/c6b17f93/rsrc/js/javelin/workflow.dev.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/js/javelin/workflow.dev.js', ), 'javelin-workflow-prod' => array( 'uri' => '/res/b758e0a0/rsrc/js/javelin/workflow.min.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/js/javelin/workflow.min.js', ), ), array ( 'packages' => array ( - 'aa43d409' => + '93a93aee' => array ( 'name' => 'core.pkg.css', 'symbols' => array ( 0 => 'phabricator-core-css', 1 => 'phabricator-core-buttons-css', 2 => 'phabricator-standard-page-view', 3 => 'aphront-dialog-view-css', 4 => 'aphront-form-view-css', 5 => 'aphront-panel-view-css', 6 => 'aphront-side-nav-view-css', 7 => 'aphront-table-view-css', 8 => 'aphront-tokenizer-control-css', 9 => 'aphront-typeahead-control-css', 10 => 'phabricator-directory-css', 11 => 'phabricator-remarkup-css', 12 => 'syntax-highlighting-css', ), - 'uri' => '/res/pkg/aa43d409/core.pkg.css', + 'uri' => '/res/pkg/93a93aee/core.pkg.css', 'type' => 'css', ), - '2525bbc7' => + 'fcf7ec68' => array ( 'name' => 'differential.pkg.css', 'symbols' => array ( 0 => 'differential-core-view-css', 1 => 'differential-changeset-view-css', 2 => 'differential-revision-detail-css', 3 => 'differential-revision-history-css', 4 => 'differential-table-of-contents-css', 5 => 'differential-revision-comment-css', 6 => 'differential-revision-add-comment-css', 7 => 'differential-revision-comment-list-css', ), - 'uri' => '/res/pkg/2525bbc7/differential.pkg.css', + 'uri' => '/res/pkg/fcf7ec68/differential.pkg.css', 'type' => 'css', ), '30d594cf' => array ( 'name' => 'differential.pkg.js', 'symbols' => array ( 0 => 'javelin-behavior-differential-feedback-preview', 1 => 'javelin-behavior-differential-edit-inline-comments', 2 => 'javelin-behavior-differential-populate', 3 => 'javelin-behavior-differential-show-more', 4 => 'javelin-behavior-differential-diff-radios', ), 'uri' => '/res/pkg/30d594cf/differential.pkg.js', 'type' => 'js', ), ), 'reverse' => array ( - 'phabricator-core-css' => 'aa43d409', - 'phabricator-core-buttons-css' => 'aa43d409', - 'phabricator-standard-page-view' => 'aa43d409', - 'aphront-dialog-view-css' => 'aa43d409', - 'aphront-form-view-css' => 'aa43d409', - 'aphront-panel-view-css' => 'aa43d409', - 'aphront-side-nav-view-css' => 'aa43d409', - 'aphront-table-view-css' => 'aa43d409', - 'aphront-tokenizer-control-css' => 'aa43d409', - 'aphront-typeahead-control-css' => 'aa43d409', - 'phabricator-directory-css' => 'aa43d409', - 'phabricator-remarkup-css' => 'aa43d409', - 'syntax-highlighting-css' => 'aa43d409', - 'differential-core-view-css' => '2525bbc7', - 'differential-changeset-view-css' => '2525bbc7', - 'differential-revision-detail-css' => '2525bbc7', - 'differential-revision-history-css' => '2525bbc7', - 'differential-table-of-contents-css' => '2525bbc7', - 'differential-revision-comment-css' => '2525bbc7', - 'differential-revision-add-comment-css' => '2525bbc7', - 'differential-revision-comment-list-css' => '2525bbc7', + 'phabricator-core-css' => '93a93aee', + 'phabricator-core-buttons-css' => '93a93aee', + 'phabricator-standard-page-view' => '93a93aee', + 'aphront-dialog-view-css' => '93a93aee', + 'aphront-form-view-css' => '93a93aee', + 'aphront-panel-view-css' => '93a93aee', + 'aphront-side-nav-view-css' => '93a93aee', + 'aphront-table-view-css' => '93a93aee', + 'aphront-tokenizer-control-css' => '93a93aee', + 'aphront-typeahead-control-css' => '93a93aee', + 'phabricator-directory-css' => '93a93aee', + 'phabricator-remarkup-css' => '93a93aee', + 'syntax-highlighting-css' => '93a93aee', + 'differential-core-view-css' => 'fcf7ec68', + 'differential-changeset-view-css' => 'fcf7ec68', + 'differential-revision-detail-css' => 'fcf7ec68', + 'differential-revision-history-css' => 'fcf7ec68', + 'differential-table-of-contents-css' => 'fcf7ec68', + 'differential-revision-comment-css' => 'fcf7ec68', + 'differential-revision-add-comment-css' => 'fcf7ec68', + 'differential-revision-comment-list-css' => 'fcf7ec68', 'javelin-behavior-differential-feedback-preview' => '30d594cf', 'javelin-behavior-differential-edit-inline-comments' => '30d594cf', 'javelin-behavior-differential-populate' => '30d594cf', 'javelin-behavior-differential-show-more' => '30d594cf', 'javelin-behavior-differential-diff-radios' => '30d594cf', ), )); diff --git a/src/applications/people/controller/profile/PhabricatorPeopleProfileController.php b/src/applications/people/controller/profile/PhabricatorPeopleProfileController.php index 4f1a76efbe..a865830539 100644 --- a/src/applications/people/controller/profile/PhabricatorPeopleProfileController.php +++ b/src/applications/people/controller/profile/PhabricatorPeopleProfileController.php @@ -1,44 +1,149 @@ <?php /* * Copyright 2011 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. */ class PhabricatorPeopleProfileController extends PhabricatorPeopleController { private $username; public function willProcessRequest(array $data) { $this->username = $data['username']; } public function processRequest() { + $viewer = $this->getRequest()->getUser(); + $user = id(new PhabricatorUser())->loadOneWhere( 'userName = %s', $this->username); if (!$user) { return new Aphront404Response(); } + $links = array(); + + if ($user->getPHID() == $viewer->getPHID()) { + $links[] = phutil_render_tag( + 'a', + array( + 'href' => '/p/'.$user->getUsername().'/edit/', + ), + 'Edit Profile'); + } + + $fbuid = $user->getFacebookUID(); + if ($fbuid) { + $links[] = phutil_render_tag( + 'a', + array( + 'href' => 'http://www.facebook.com/profile.php?id='.$fbuid, + ), + 'Facebook Profile'); + } + + foreach ($links as $k => $link) { + $links[$k] = '<li>'.$link.'</li>'; + } + $links = + '<ul class="profile-nav-links">'. + implode("\n", $links). + '</ul>'; + + $username_tag = + '<h1 class="profile-username">'. + phutil_escape_html($user->getUserName()). + '</h1>'; + $realname_tag = + '<h2 class="profile-realname">'. + '('.phutil_escape_html($user->getRealName()).')'. + '</h2>'; + $title_tag = + '<h2 class="profile-usertitle">'. + 'Cool Title'. + '</h2>'; + + $src_phid = $user->getProfileImagePHID(); + $src = PhabricatorFileURI::getViewURIForPHID($src_phid); + + $picture = phutil_render_tag( + 'img', + array( + 'class' => 'profile-image', + 'src' => $src, + )); + + require_celerity_resource('phabricator-profile-css'); + + $blurb = 'just build marawdars dood'; + + $content = + '<div class="phabricator-profile-info-group"> + <h1 class="phabricator-profile-info-header">Basic Information</h1> + <div class="phabricator-profile-info-pane"> + <table class="phabricator-profile-info-table"> + <tr> + <th>PHID</th> + <td>'.phutil_escape_html($user->getPHID()).'</td> + </tr> + <tr> + <th>User Since</th> + <td>'.phabricator_format_timestamp($user->getDateCreated()).'</td> + </tr> + </table> + </div> + </div>'; + $content .= + '<div class="phabricator-profile-info-group"> + <h1 class="phabricator-profile-info-header">Flavor Text</h1> + <div class="phabricator-profile-info-pane"> + <table class="phabricator-profile-info-table"> + <tr> + <th>Blurb</th> + <td>'.$blurb.'</td> + </tr> + </table> + </div> + </div>'; + + $profile = + '<table class="phabricator-profile-master-layout"> + <tr> + <td class="phabricator-profile-navigation">'. + $username_tag. + $realname_tag. + $title_tag. + '<hr />'. + $picture. + '<hr />'. + $links. + '<hr />'. + '</td> + <td class="phabricator-profile-content">'. + $content. + '</td> + </tr> + </table>'; return $this->buildStandardPageResponse( - array('this is a profile thingie'), + $profile, array( 'title' => $user->getUsername(), )); } } diff --git a/src/applications/people/controller/profile/__init__.php b/src/applications/people/controller/profile/__init__.php index 6993f52ebb..099425d646 100644 --- a/src/applications/people/controller/profile/__init__.php +++ b/src/applications/people/controller/profile/__init__.php @@ -1,16 +1,20 @@ <?php /** * This file is automatically generated. Lint this module to rebuild it. * @generated */ phutil_require_module('phabricator', 'aphront/response/404'); +phutil_require_module('phabricator', 'applications/files/uri'); phutil_require_module('phabricator', 'applications/people/controller/base'); phutil_require_module('phabricator', 'applications/people/storage/user'); +phutil_require_module('phabricator', 'infrastructure/celerity/api'); +phutil_require_module('phabricator', 'view/utils'); +phutil_require_module('phutil', 'markup'); phutil_require_module('phutil', 'utils'); phutil_require_source('PhabricatorPeopleProfileController.php'); diff --git a/webroot/rsrc/css/application/people/profile.css b/webroot/rsrc/css/application/people/profile.css new file mode 100644 index 0000000000..75e94007c1 --- /dev/null +++ b/webroot/rsrc/css/application/people/profile.css @@ -0,0 +1,86 @@ +/** + * @provides phabricator-profile-css + */ + +.phabricator-profile-master-layout { + width: 100%; +} + +.phabricator-profile-navigation { + width: 300px; + background: #efefef; + border-right: 1px solid #cccccc; +} + +.phabricator-profile-content { + padding: 2em 2%; +} + +.phabricator-profile-info-group { + margin-bottom: 2em; + background: #efefef; + border-top: 1px solid #cccccc; +} + +.phabricator-profile-info-header { + padding: 8px; + background: #dfdfdf; +} + +.phabricator-profile-info-pane { + padding: 8px 2em; +} + +.phabricator-profile-info-table { + width: 100%; +} + +.phabricator-profile-info-table th { + font-weight: bold; + text-align: right; + color: #666666; + width: 10%; + padding: 4px; +} + +.phabricator-profile-info-table td { + width: 100%; + padding: 4px; +} + +.phabricator-profile-navigation hr { + border: none; + background: #cccccc; + padding: 0; + margin: 10px 0; + height: 1px; +} + +.phabricator-profile-navigation { + padding-top: 8px; + padding-bottom: 8em; +} + +.phabricator-profile-navigation h1, +.phabricator-profile-navigation h2 { + padding: 2px 8px; +} + +h2.profile-realname { + color: #666666; +} + +img.profile-image { + width: 280px; + margin: 10px; +} + +ul.profile-nav-links li a { + display: block; + padding: 4px 8px 4px 12px; + font-weight: bold; +} + +ul.profile-nav-links li a:hover { + background: #cccccc; +}