如何同时折叠Phabricator差分中的所有文件?

时间:2015-04-14 19:52:17

标签: phabricator

当我在Differential中查看大型代码审查时,除非我保留大部分文件崩溃,否则页面会滞后很多。

不幸的是,我找到折叠所有文件的唯一方法是使用下一个文件的键盘快捷键,并为每个文件重复折叠一次。

是否可以用相对较少的点击或按键折叠所有文件?

在相关的说明中,是否可以默认超过特定大小的所有差异以折叠所有文件?

3 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,但还没有找到一个好的解决方案,所以我编写了JavaScript,然后手动点击页面上diff中每个文件的“折叠文件”。为方便起见,我将其保存为浏览器书签(只需将此代码复制/粘贴为浏览器中的新书签)。希望这对你也有帮助,OP

javascript:(() => {
    function collapseFiles() {
        function clickCollapseFileViewOption() {
            var viewOptionsHTMLCollection = document.getElementsByClassName("phabricator-action-view-item"),
                viewOptionsArr = [].slice.call(viewOptionsHTMLCollection);
            viewOptionsArr.find(viewOption => viewOption.text === 'Collapse File').click();
        }

        var buttonDivsHTMLCollection = document.getElementsByClassName("differential-changeset-buttons"),
            buttonDivsArr = [].slice.call(buttonDivsHTMLCollection),
            buttonAnchorsArr_unflattened = buttonDivsArr.map(buttonDiv => [].slice.call(buttonDiv.getElementsByTagName("a"))),
            buttonAnchorsArr = [].concat.apply([], buttonAnchorsArr_unflattened);
        buttonAnchorsArr.forEach((buttonAnchor, index) => {
            setTimeout(function() {
                this.click();
                clickCollapseFileViewOption();
            }.bind(buttonAnchor), 250 * index);
        });
    }
    collapseFiles();
})();

答案 1 :(得分:0)

执行此操作的一种方法是将某些类型的文件全局视为自动生成的。 checkout差异生成路径设置您使用正则表达式将与该模式匹配的文件设置为自动生成并因此折叠。

答案 2 :(得分:0)

可能稍晚,但是这些方法使用Phabricators变更集类来折叠和扩展所有变更集。

collapseAllChangelistSets() {
  document.querySelectorAll('.differential-changeset').forEach(function(node) {
    let set = JX.DiffChangeset.getForNode(node);
    if (set.isVisible()) {
      try {
        set.toggleVisibility();
      } catch (e) {
        console.warn('could\'t collapse ' + set._ref);
      }
    }
  });
}

expandAllChangelistSets() {
  document.querySelectorAll('.differential-changeset').forEach(function(node) {
    let set = JX.DiffChangeset.getForNode(node);
    if (!set.isVisible()) {
      try {
        set.toggleVisibility();
      } catch (e) {
        console.warn('could\'t expand ' + set._ref);
      }
    }
  });
}