@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.

Limited Time Only!

Summary: I'll revert this within 24 hours, before I promote.

Test Plan: Had completely functional but greatly enhanced Phabricator experience in Firefox, Safari and Chrome.

Reviewers: chad

Reviewed By: chad

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

+111 -3
+11 -3
resources/celerity/map.php
··· 7 7 */ 8 8 return array( 9 9 'names' => array( 10 - 'core.pkg.css' => 'a419cf4b', 10 + 'core.pkg.css' => 'ac9bbf2a', 11 11 'core.pkg.js' => '400453e4', 12 12 'darkconsole.pkg.js' => 'e7393ebb', 13 13 'differential.pkg.css' => '2de124c9', ··· 111 111 'rsrc/css/font/font-aleo.css' => '8bdb2835', 112 112 'rsrc/css/font/font-awesome.css' => 'c43323c5', 113 113 'rsrc/css/font/font-lato.css' => 'c7ccd872', 114 - 'rsrc/css/font/phui-font-icon-base.css' => 'ecbbb4c2', 114 + 'rsrc/css/font/phui-font-icon-base.css' => 'c0fc32fa', 115 115 'rsrc/css/layout/phabricator-filetree-view.css' => 'fccf9f82', 116 116 'rsrc/css/layout/phabricator-hovercard-view.css' => '1239cd52', 117 117 'rsrc/css/layout/phabricator-side-menu-view.css' => 'bec2458e', ··· 509 509 'rsrc/js/phuix/PHUIXDropdownMenu.js' => 'bd4c8dca', 510 510 'rsrc/js/phuix/PHUIXFormControl.js' => '8fba1997', 511 511 'rsrc/js/phuix/PHUIXIconView.js' => 'bff6884b', 512 + 'rsrc/js/special/behavior-trail.js' => '740fe844', 512 513 ), 513 514 'symbols' => array( 514 515 'almanac-css' => 'dbb9b3af', ··· 645 646 'javelin-behavior-phabricator-search-typeahead' => '048330fa', 646 647 'javelin-behavior-phabricator-show-older-transactions' => 'dbbf48b6', 647 648 'javelin-behavior-phabricator-tooltips' => '3ee3408b', 649 + 'javelin-behavior-phabricator-trail' => '740fe844', 648 650 'javelin-behavior-phabricator-transaction-comment-form' => 'b23b49e6', 649 651 'javelin-behavior-phabricator-transaction-list' => '13c739ea', 650 652 'javelin-behavior-phabricator-watch-anchor' => '9f36c42d', ··· 804 806 'phui-document-view-css' => 'a4a1c3b9', 805 807 'phui-document-view-pro-css' => 'e0fad431', 806 808 'phui-feed-story-css' => 'b7b26d23', 807 - 'phui-font-icon-base-css' => 'ecbbb4c2', 809 + 'phui-font-icon-base-css' => 'c0fc32fa', 808 810 'phui-fontkit-css' => '9cda225e', 809 811 'phui-form-css' => '0b98e572', 810 812 'phui-form-view-css' => '4a1a0f5e', ··· 1359 1361 'javelin-behavior', 1360 1362 'javelin-vector', 1361 1363 'javelin-dom', 1364 + ), 1365 + '740fe844' => array( 1366 + 'javelin-behavior', 1367 + 'javelin-dom', 1368 + 'javelin-stratcom', 1369 + 'javelin-vector', 1362 1370 ), 1363 1371 '76b9fc3e' => array( 1364 1372 'javelin-behavior',
+1
src/view/page/PhabricatorStandardPageView.php
··· 215 215 require_celerity_resource('font-aleo'); 216 216 217 217 Javelin::initBehavior('workflow', array()); 218 + Javelin::initBehavior('phabricator-trail'); 218 219 219 220 $request = $this->getRequest(); 220 221 $user = null;
+18
webroot/rsrc/css/font/phui-font-icon-base.css
··· 161 161 .device-desktop a.phui-icon-view.bluegrey:hover { 162 162 color: {$darkbluetext}; 163 163 } 164 + 165 + 166 + .ph-bounceout { 167 + animation: bounceout 0.5s linear forwards; 168 + } 169 + 170 + @keyframes bounceout { 171 + 0% { 172 + transform: scale(1.0) rotate(0deg); 173 + } 174 + 10% { 175 + transform: scale(2.0) rotate(0deg); 176 + } 177 + 100% { 178 + transform: scale(0) rotate(359deg); 179 + opacity: 0; 180 + } 181 + }
+81
webroot/rsrc/js/special/behavior-trail.js
··· 1 + /** 2 + * @provides javelin-behavior-phabricator-trail 3 + * @requires javelin-behavior 4 + * javelin-dom 5 + * javelin-stratcom 6 + * javelin-vector 7 + * @javelin 8 + */ 9 + 10 + JX.behavior('phabricator-trail', function() { 11 + var last = null; 12 + var trail = []; 13 + 14 + var n = 0; 15 + JX.Stratcom.listen('mousemove', null, function(e) { 16 + var v = JX.$V(e); 17 + 18 + if (!last) { 19 + last = v; 20 + return; 21 + } 22 + 23 + var dx = v.x - last.x; 24 + var dy = v.y - last.y; 25 + var spacing = 24; 26 + 27 + if ((dx * dx) + (dy * dy) < (spacing * spacing)) { 28 + // Mouse hasn't moved far enough, just bail. 29 + return; 30 + } 31 + 32 + var node; 33 + // If the trail is too long, throw away the end. 34 + while (trail.length > 8) { 35 + node = trail[0]; 36 + JX.DOM.remove(node); 37 + trail.splice(0, 1); 38 + } 39 + 40 + var color; 41 + if (n % 2) { 42 + color = '#c0392b'; 43 + } else { 44 + color = '#139543'; 45 + } 46 + 47 + n++; 48 + 49 + var icon; 50 + if (Math.random() > 0.5) { 51 + icon = 'fa-star'; 52 + } else { 53 + icon = 'fa-tree'; 54 + } 55 + 56 + node = JX.$N( 57 + 'span', 58 + { 59 + className: 'phui-icon-view phui-font-fa ph-bounceout ' + icon, 60 + style: { 61 + position: 'absolute', 62 + color: color, 63 + zIndex: 20151225 64 + } 65 + }, 66 + null); 67 + 68 + var size = JX.Vector.getDim(node); 69 + 70 + last.x -= size.x / 2; 71 + last.y -= size.y / 2; 72 + 73 + last.setPos(node); 74 + 75 + trail.push(node); 76 + document.body.appendChild(node); 77 + 78 + last = v; 79 + }); 80 + 81 + });