@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
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Make Pholio URIs aware of which image you are looking at

Summary: Fixes T2658. Map `/Mxx/yy/` to images in a mock. Use HTML5 history stuff to make it work nicely. This also makes right-click-open-in-new-tab work correctly.

Test Plan: Clicked thumbs in a mock. Right-clicked thumbs. Copy and pasted a URI. Used browser back button.

Reviewers: chad

Reviewed By: chad

CC: aran

Maniphest Tasks: T2658

Differential Revision: https://secure.phabricator.com/D5222

+34 -7
+3 -2
src/__celerity_resource_map__.php
··· 1891 1891 ), 1892 1892 'javelin-behavior-pholio-mock-view' => 1893 1893 array( 1894 - 'uri' => '/res/d993bd2b/rsrc/js/application/pholio/behavior-pholio-mock-view.js', 1894 + 'uri' => '/res/e9e31577/rsrc/js/application/pholio/behavior-pholio-mock-view.js', 1895 1895 'type' => 'js', 1896 1896 'requires' => 1897 1897 array( ··· 1902 1902 4 => 'javelin-vector', 1903 1903 5 => 'javelin-magical-init', 1904 1904 6 => 'javelin-request', 1905 - 7 => 'phabricator-keyboard-shortcut', 1905 + 7 => 'javelin-history', 1906 + 8 => 'phabricator-keyboard-shortcut', 1906 1907 ), 1907 1908 'disk' => '/rsrc/js/application/pholio/behavior-pholio-mock-view.js', 1908 1909 ),
+1 -1
src/applications/pholio/application/PhabricatorApplicationPholio.php
··· 42 42 43 43 public function getRoutes() { 44 44 return array( 45 - '/M(?P<id>[1-9]\d*)' => 'PholioMockViewController', 45 + '/M(?P<id>[1-9]\d*)(?:/(?P<imageID>\d+)/)?' => 'PholioMockViewController', 46 46 '/pholio/' => array( 47 47 '' => 'PholioMockListController', 48 48 'view/(?P<view>\w+)/' => 'PholioMockListController',
+3
src/applications/pholio/controller/PholioMockViewController.php
··· 6 6 final class PholioMockViewController extends PholioController { 7 7 8 8 private $id; 9 + private $imageID; 9 10 10 11 public function willProcessRequest(array $data) { 11 12 $this->id = $data['id']; 13 + $this->imageID = idx($data, 'imageID'); 12 14 } 13 15 14 16 public function processRequest() { ··· 67 69 68 70 $output = new PholioMockImagesView(); 69 71 $output->setMock($mock); 72 + $output->setImageID($this->imageID); 70 73 71 74 $xaction_view = id(new PhabricatorApplicationTransactionView()) 72 75 ->setUser($this->getRequest()->getUser())
+21 -2
src/applications/pholio/view/PholioMockImagesView.php
··· 3 3 final class PholioMockImagesView extends AphrontView { 4 4 5 5 private $mock; 6 + private $imageID; 7 + 8 + public function setImageID($image_id) { 9 + $this->imageID = $image_id; 10 + return $this; 11 + } 12 + 13 + public function getImageID() { 14 + return $this->imageID; 15 + } 6 16 7 17 public function setMock(PholioMock $mock) { 8 18 $this->mock = $mock; ··· 22 32 $panel_id = celerity_generate_unique_node_id(); 23 33 $viewport_id = celerity_generate_unique_node_id(); 24 34 35 + $ids = mpull($mock->getImages(), 'getID'); 36 + if ($this->imageID && isset($ids[$this->imageID])) { 37 + $selected_id = $this->imageID; 38 + } else { 39 + $selected_id = head_key($ids); 40 + } 41 + 25 42 foreach ($mock->getImages() as $image) { 26 43 $images[] = array( 27 44 'id' => $image->getID(), 28 45 'fullURI' => $image->getFile()->getBestURI(), 46 + 'pageURI' => '/M'.$mock->getID().'/'.$image->getID().'/', 29 47 ); 30 48 } 31 49 ··· 34 52 'panelID' => $panel_id, 35 53 'viewportID' => $viewport_id, 36 54 'images' => $images, 37 - 55 + 'selectedID' => $selected_id, 38 56 ); 39 57 Javelin::initBehavior('pholio-mock-view', $config); 40 58 ··· 87 105 )); 88 106 89 107 $thumbnails[] = javelin_tag( 90 - 'div', 108 + 'a', 91 109 array( 92 110 'sigil' => 'mock-thumbnail', 93 111 'class' => 'pholio-mock-carousel-thumb-item', 112 + 'href' => '/M'.$mock->getID().'/'.$image->getID().'/', 94 113 'meta' => array( 95 114 'imageID' => $image->getID(), 96 115 ),
+6 -2
webroot/rsrc/js/application/pholio/behavior-pholio-mock-view.js
··· 7 7 * javelin-vector 8 8 * javelin-magical-init 9 9 * javelin-request 10 + * javelin-history 10 11 * phabricator-keyboard-shortcut 11 12 */ 12 13 JX.behavior('pholio-mock-view', function(config) { ··· 175 176 } 176 177 177 178 load_inline_comments(); 179 + 180 + if (image_id != config.selectedID) { 181 + JX.History.replace(active_image.pageURI); 182 + } 178 183 } 179 184 180 185 JX.Stratcom.listen( ··· 188 193 select_image(e.getNodeData('mock-thumbnail').imageID); 189 194 }); 190 195 191 - // Select and show the first image. 192 - select_image(config.images[0].id); 196 + select_image(config.selectedID); 193 197 194 198 JX.Stratcom.listen('mousedown', 'mock-panel', function(e) { 195 199 if (!e.isNormalMouseEvent()) {