@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at upstream/main 99 lines 2.2 kB view raw
1<?php 2 3final class PhabricatorFileIconSetSelectController 4 extends PhabricatorFileController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $key = $request->getURIData('key'); 8 9 $set = PhabricatorIconSet::getIconSetByKey($key); 10 if (!$set) { 11 return new Aphront404Response(); 12 } 13 14 $v_icon = $request->getStr('icon'); 15 if ($request->isFormPost()) { 16 $icon = $set->getIcon($v_icon); 17 18 if ($icon) { 19 $payload = array( 20 'value' => $icon->getKey(), 21 'display' => $set->renderIconForControl($icon), 22 ); 23 24 return id(new AphrontAjaxResponse()) 25 ->setContent($payload); 26 } 27 } 28 29 require_celerity_resource('phui-icon-set-selector-css'); 30 Javelin::initBehavior('phabricator-tooltips'); 31 32 $ii = 0; 33 $buttons = array(); 34 $breakpoint = ceil(sqrt(count($set->getIcons()))); 35 foreach ($set->getIcons() as $icon) { 36 $label = $icon->getLabel(); 37 38 $view = id(new PHUIIconView()) 39 ->setIcon($icon->getIcon()); 40 41 $classes = array(); 42 $classes[] = 'icon-button'; 43 44 $is_selected = ($icon->getKey() == $v_icon); 45 46 if ($is_selected) { 47 $classes[] = 'selected'; 48 } 49 50 $is_disabled = $icon->getIsDisabled(); 51 if ($is_disabled && !$is_selected) { 52 continue; 53 } 54 55 $aural = javelin_tag( 56 'span', 57 array( 58 'aural' => true, 59 ), 60 pht('Choose "%s" Icon', $label)); 61 62 $buttons[] = javelin_tag( 63 'button', 64 array( 65 'class' => implode(' ', $classes), 66 'name' => 'icon', 67 'value' => $icon->getKey(), 68 'type' => 'submit', 69 'sigil' => 'has-tooltip', 70 'meta' => array( 71 'tip' => $label, 72 ), 73 ), 74 array( 75 $aural, 76 $view, 77 )); 78 79 if ((++$ii % $breakpoint) == 0) { 80 $buttons[] = phutil_tag('br'); 81 } 82 } 83 84 $buttons = phutil_tag( 85 'div', 86 array( 87 'class' => 'icon-grid', 88 ), 89 $buttons); 90 91 $dialog_title = $set->getSelectIconTitleText(); 92 93 return $this->newDialog() 94 ->setTitle($dialog_title) 95 ->appendChild($buttons) 96 ->addCancelButton('/'); 97 } 98 99}