@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 recaptime-dev/main 118 lines 3.0 kB view raw
1<?php 2 3final class PhabricatorInlineSummaryView extends AphrontView { 4 5 private $groups = array(); 6 7 public function addCommentGroup($name, array $items) { 8 if (!isset($this->groups[$name])) { 9 $this->groups[$name] = $items; 10 } else { 11 $this->groups[$name] = array_merge($this->groups[$name], $items); 12 } 13 return $this; 14 } 15 16 public function render() { 17 require_celerity_resource('inline-comment-summary-css'); 18 return hsprintf('%s', $this->renderTable()); 19 } 20 21 private function renderTable() { 22 $rows = array(); 23 foreach ($this->groups as $group => $items) { 24 25 $has_where = false; 26 foreach ($items as $item) { 27 if (!empty($item['where'])) { 28 $has_where = true; 29 break; 30 } 31 } 32 33 $icon = id(new PHUIIconView()) 34 ->setIcon('fa-file-code-o darkbluetext mmr'); 35 $header = phutil_tag( 36 'th', 37 array( 38 'colspan' => 3, 39 'class' => 'inline-comment-summary-table-header', 40 ), 41 array( 42 $icon, 43 $group, 44 )); 45 $rows[] = phutil_tag('tr', array(), $header); 46 47 foreach ($items as $item) { 48 $line = $item['line']; 49 $length = $item['length']; 50 if ($length) { 51 $lines = $line."\xE2\x80\x93".($line + $length); 52 } else { 53 $lines = $line; 54 } 55 56 if (isset($item['href'])) { 57 $href = $item['href']; 58 $target = '_blank'; 59 $tail = " \xE2\x86\x97"; 60 } else { 61 $href = '#inline-'.$item['id']; 62 $target = null; 63 $tail = null; 64 } 65 66 if ($href) { 67 $icon = id(new PHUIIconView()) 68 ->setIcon('fa-share darkbluetext mmr'); 69 70 $lines = phutil_tag( 71 'a', 72 array( 73 'href' => $href, 74 'target' => $target, 75 'class' => 'num', 76 ), 77 array( 78 $icon, 79 $lines, 80 $tail, 81 )); 82 } 83 84 $where = idx($item, 'where'); 85 86 $colspan = ($has_where ? null : 2); 87 $rows[] = phutil_tag( 88 'tr', 89 array(), 90 array( 91 phutil_tag('td', 92 array('class' => 'inline-line-number inline-table-dolumn'), 93 $lines), 94 ($has_where 95 ? phutil_tag('td', 96 array('class' => 'inline-which-diff inline-table-dolumn'), 97 $where) 98 : null), 99 phutil_tag( 100 'td', 101 array( 102 'class' => 'inline-summary-content inline-table-dolumn', 103 'colspan' => $colspan, 104 ), 105 phutil_tag_div('phabricator-remarkup', $item['content'])), 106 )); 107 } 108 } 109 110 return phutil_tag( 111 'table', 112 array( 113 'class' => 'phabricator-inline-summary-table', 114 ), 115 phutil_implode_html("\n", $rows)); 116 } 117 118}