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

Quicksand - fix toggle behavior to work with quicksand

Summary:
Fixes T7919. This is a pretty generic toggle behavior. Make it quicksand ready by making it install only once and swallow the regular "click" event so the quicksand "click" event doesn't get funky with it.

Also fixes a bug in Quicksand that I discovered developing / testing this feature. We have to update the internal member variable to be better than 0 similarly to how id works. So do that.

Test Plan: went to phriction, toggled menu open, clicked home, clicked phriction and toggled menu again. Went back in history and noted menu was left to toggle state I previously had it. (currently a feature, not a bug)

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T7919

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

+41 -25
+13 -13
resources/celerity/map.php
··· 8 8 return array( 9 9 'names' => array( 10 10 'core.pkg.css' => 'ca3f6a60', 11 - 'core.pkg.js' => '3331b919', 11 + 'core.pkg.js' => 'e9484a4e', 12 12 'darkconsole.pkg.js' => 'e7393ebb', 13 13 'differential.pkg.css' => 'bb338e4b', 14 14 'differential.pkg.js' => '3cfa26f9', ··· 205 205 'rsrc/externals/javelin/lib/JSON.js' => '69adf288', 206 206 'rsrc/externals/javelin/lib/Leader.js' => '331b1611', 207 207 'rsrc/externals/javelin/lib/Mask.js' => '8a41885b', 208 - 'rsrc/externals/javelin/lib/Quicksand.js' => '7ba665f5', 208 + 'rsrc/externals/javelin/lib/Quicksand.js' => '977e1f47', 209 209 'rsrc/externals/javelin/lib/Request.js' => '94b750d2', 210 210 'rsrc/externals/javelin/lib/Resource.js' => '44959b73', 211 211 'rsrc/externals/javelin/lib/Routable.js' => 'b3e7d692', ··· 488 488 'rsrc/js/core/behavior-scrollbar.js' => '834a1173', 489 489 'rsrc/js/core/behavior-search-typeahead.js' => '048330fa', 490 490 'rsrc/js/core/behavior-select-on-click.js' => '4e3e79a6', 491 - 'rsrc/js/core/behavior-toggle-class.js' => 'e566f52c', 491 + 'rsrc/js/core/behavior-toggle-class.js' => '5d7c9f33', 492 492 'rsrc/js/core/behavior-tokenizer.js' => 'b3a4b884', 493 493 'rsrc/js/core/behavior-tooltip.js' => '3ee3408b', 494 494 'rsrc/js/core/behavior-watch-anchor.js' => '9f36c42d', ··· 659 659 'javelin-behavior-slowvote-embed' => '887ad43f', 660 660 'javelin-behavior-stripe-payment-form' => '3f5d6dbf', 661 661 'javelin-behavior-test-payment-form' => 'fc91ab6c', 662 - 'javelin-behavior-toggle-class' => 'e566f52c', 662 + 'javelin-behavior-toggle-class' => '5d7c9f33', 663 663 'javelin-behavior-typeahead-browse' => '635de1ec', 664 664 'javelin-behavior-typeahead-search' => '93d0c9e3', 665 665 'javelin-behavior-view-placeholder' => '47830651', ··· 677 677 'javelin-leader' => '331b1611', 678 678 'javelin-magical-init' => '3010e992', 679 679 'javelin-mask' => '8a41885b', 680 - 'javelin-quicksand' => '7ba665f5', 680 + 'javelin-quicksand' => '977e1f47', 681 681 'javelin-reactor' => '2b8de964', 682 682 'javelin-reactor-dom' => 'c90a04fc', 683 683 'javelin-reactor-node-calmer' => '76f4ebed', ··· 1234 1234 'javelin-dom', 1235 1235 'javelin-vector', 1236 1236 ), 1237 + '5d7c9f33' => array( 1238 + 'javelin-behavior', 1239 + 'javelin-stratcom', 1240 + 'javelin-dom', 1241 + ), 1237 1242 '5e9f347c' => array( 1238 1243 'javelin-behavior', 1239 1244 'multirow-row-manager', ··· 1407 1412 'javelin-dom', 1408 1413 'javelin-stratcom', 1409 1414 'javelin-util', 1410 - ), 1411 - '7ba665f5' => array( 1412 - 'javelin-install', 1413 1415 ), 1414 1416 '7cbe244b' => array( 1415 1417 'javelin-install', ··· 1594 1596 'javelin-resource', 1595 1597 'javelin-routable', 1596 1598 ), 1599 + '977e1f47' => array( 1600 + 'javelin-install', 1601 + ), 1597 1602 '988040b4' => array( 1598 1603 'javelin-install', 1599 1604 'javelin-dom', ··· 1893 1898 ), 1894 1899 'e4cc26b3' => array( 1895 1900 'javelin-behavior', 1896 - 'javelin-dom', 1897 - ), 1898 - 'e566f52c' => array( 1899 - 'javelin-behavior', 1900 - 'javelin-stratcom', 1901 1901 'javelin-dom', 1902 1902 ), 1903 1903 'e5822781' => array(
+1
webroot/rsrc/externals/javelin/lib/Quicksand.js
··· 53 53 var path = self._getRelativeURI(window.location); 54 54 self._id = window.history.state || 0; 55 55 var id = self._id; 56 + self._onpage = id; 56 57 self._history.push({path: path, id: id}); 57 58 58 59 self._responses[id] = first_response;
+27 -12
webroot/rsrc/js/core/behavior-toggle-class.js
··· 14 14 * Optionally, you may provide a `state` key to set the default state of the 15 15 * element. 16 16 */ 17 - JX.behavior('toggle-class', function() { 18 - JX.Stratcom.listen( 19 - ['touchstart', 'mousedown'], 20 - 'jx-toggle-class', 21 - function(e) { 22 - e.kill(); 17 + JX.behavior('toggle-class', function(config, statics) { 18 + statics.install = statics.install || install(); 19 + 20 + function install() { 21 + JX.Stratcom.listen( 22 + ['touchstart', 'mousedown'], 23 + 'jx-toggle-class', 24 + function(e) { 25 + e.kill(); 26 + 27 + var t = e.getNodeData('jx-toggle-class'); 28 + t.state = !t.state; 29 + for (var k in t.map) { 30 + JX.DOM.alterClass(JX.$(k), t.map[k], t.state); 31 + } 32 + }); 33 + 34 + // Swallow the regular click handler event so e.g. Quicksand 35 + // click handler doesn't get a hold of it 36 + JX.Stratcom.listen( 37 + ['click'], 38 + 'jx-toggle-class', 39 + function(e) { 40 + e.kill(); 41 + }); 23 42 24 - var t = e.getNodeData('jx-toggle-class'); 25 - t.state = !t.state; 26 - for (var k in t.map) { 27 - JX.DOM.alterClass(JX.$(k), t.map[k], t.state); 28 - } 29 - }); 43 + return true; 44 + } 30 45 });