From 3d639f5f98f976c79d0b3ac989fd4609bea836c9 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 19 Mar 2014 19:26:24 -0700 Subject: [PATCH] Allow ObjectItemListView to show profile images Summary: Ref T4400. Adds `setImageURI()` for object card/items. Test Plan: {F132229} Also tested mobile. Reviewers: btrahan, chad Reviewed By: chad Subscribers: epriestley, chad Maniphest Tasks: T4400 Differential Revision: https://secure.phabricator.com/D8569 --- resources/celerity/map.php | 6 ++-- .../examples/PHUIObjectItemListExample.php | 28 +++++++++++++++++++ src/view/phui/PHUIObjectItemView.php | 26 +++++++++++++++++ .../css/phui/phui-object-item-list-view.css | 16 +++++++++++ 4 files changed, 73 insertions(+), 3 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index d72f069ce7..d4cf1d0339 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -7,7 +7,7 @@ return array( 'names' => array( - 'core.pkg.css' => '4b8e980c', + 'core.pkg.css' => 'b548faff', 'core.pkg.js' => '264721e1', 'darkconsole.pkg.js' => 'ca8671ce', 'differential.pkg.css' => 'cb97e095', @@ -141,7 +141,7 @@ return array( 'rsrc/css/phui/phui-info-panel.css' => '27ea50a1', 'rsrc/css/phui/phui-list.css' => '2edb76cf', 'rsrc/css/phui/phui-object-box.css' => 'ce92d8ec', - 'rsrc/css/phui/phui-object-item-list-view.css' => '4e4e3d4c', + 'rsrc/css/phui/phui-object-item-list-view.css' => 'a8131782', 'rsrc/css/phui/phui-pinboard-view.css' => '4b346c2a', 'rsrc/css/phui/phui-property-list-view.css' => 'dbf53b12', 'rsrc/css/phui/phui-remarkup-preview.css' => '19ad512b', @@ -758,7 +758,7 @@ return array( 'phui-info-panel-css' => '27ea50a1', 'phui-list-view-css' => '2edb76cf', 'phui-object-box-css' => 'ce92d8ec', - 'phui-object-item-list-view-css' => '4e4e3d4c', + 'phui-object-item-list-view-css' => 'a8131782', 'phui-pinboard-view-css' => '4b346c2a', 'phui-property-list-view-css' => 'dbf53b12', 'phui-remarkup-preview-css' => '19ad512b', diff --git a/src/applications/uiexample/examples/PHUIObjectItemListExample.php b/src/applications/uiexample/examples/PHUIObjectItemListExample.php index a4d7a105c6..53019231d5 100644 --- a/src/applications/uiexample/examples/PHUIObjectItemListExample.php +++ b/src/applications/uiexample/examples/PHUIObjectItemListExample.php @@ -332,6 +332,34 @@ final class PHUIObjectItemListExample extends PhabricatorUIExample { $out[] = array($head, $list); + + $head = id(new PHUIHeaderView()) + ->setHeader(pht('Images')); + + $list = new PHUIObjectItemListView(); + + $default_profile = PhabricatorFile::loadBuiltin($user, 'profile.png'); + $default_project = PhabricatorFile::loadBuiltin($user, 'project.png'); + + $list->addItem( + id(new PHUIObjectItemView()) + ->setImageURI($default_profile->getViewURI()) + ->setHeader(pht('Default User Profile Image')) + ->setBarColor('violet') + ->addAction( + id(new PHUIListItemView()) + ->setHref('#') + ->setIcon('create'))); + + $list->addItem( + id(new PHUIObjectItemView()) + ->setImageURI($default_project->getViewURI()) + ->setHeader(pht('Default Project Profile Image')) + ->setGrippable(true) + ->addAttribute(pht('This is the default project profile image.'))); + + $out[] = array($head, $list); + return $out; } } diff --git a/src/view/phui/PHUIObjectItemView.php b/src/view/phui/PHUIObjectItemView.php index 25c23ef581..1275524bc9 100644 --- a/src/view/phui/PHUIObjectItemView.php +++ b/src/view/phui/PHUIObjectItemView.php @@ -18,6 +18,7 @@ final class PHUIObjectItemView extends AphrontTagView { private $actions = array(); private $headIcons = array(); private $disabled; + private $imageURI; const AGE_FRESH = 'fresh'; const AGE_STALE = 'stale'; @@ -97,6 +98,15 @@ final class PHUIObjectItemView extends AphrontTagView { return $this; } + public function setImageURI($image_uri) { + $this->imageURI = $image_uri; + return $this; + } + + public function getImageURI() { + return $this->imageURI; + } + public function setEpoch($epoch, $age = self::AGE_FRESH) { $date = phabricator_datetime($epoch, $this->getUser()); @@ -241,6 +251,10 @@ final class PHUIObjectItemView extends AphrontTagView { $item_classes[] = 'phui-object-item-grippable'; } + if ($this->getImageuRI()) { + $item_classes[] = 'phui-object-item-with-image'; + } + return array( 'class' => $item_classes, ); @@ -469,6 +483,17 @@ final class PHUIObjectItemView extends AphrontTagView { $foot, )); + $image = null; + if ($this->getImageURI()) { + $image = phutil_tag( + 'div', + array( + 'class' => 'phui-object-item-image', + 'style' => 'background-image: url('.$this->getImageURI().')', + ), + ''); + } + $box = phutil_tag( 'div', array( @@ -505,6 +530,7 @@ final class PHUIObjectItemView extends AphrontTagView { ), array( $actions, + $image, $box, )); } diff --git a/webroot/rsrc/css/phui/phui-object-item-list-view.css b/webroot/rsrc/css/phui/phui-object-item-list-view.css index 6d63bacf63..18c99e634e 100644 --- a/webroot/rsrc/css/phui/phui-object-item-list-view.css +++ b/webroot/rsrc/css/phui/phui-object-item-list-view.css @@ -568,3 +568,19 @@ padding-left: 0; padding-top: 0; } + +.phui-object-item-image { + width: 50px; + height: 50px; + margin: 4px 4px 4px 8px; + position: absolute; + background-color: {$lightbluebackground}; +} + +.phui-object-item-with-image .phui-object-item-frame { + min-height: 58px; +} + +.phui-object-item-with-image .phui-object-item-content-box { + margin-left: 58px; +}