Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/diff/DiffChangesetList.js
| /** | /** | ||||
| * @provides phabricator-diff-changeset-list | * @provides phabricator-diff-changeset-list | ||||
| * @requires javelin-install | * @requires javelin-install | ||||
| * phuix-button-view | * phuix-button-view | ||||
| * phabricator-diff-tree-view | |||||
| * @javelin | * @javelin | ||||
| */ | */ | ||||
| JX.install('DiffChangesetList', { | JX.install('DiffChangesetList', { | ||||
| construct: function() { | construct: function() { | ||||
| this._changesets = []; | this._changesets = []; | ||||
| ▲ Show 20 Lines • Show All 622 Lines • ▼ Show 20 Lines | _getSelectionState: function() { | ||||
| } | } | ||||
| return { | return { | ||||
| cursor: cursor, | cursor: cursor, | ||||
| items: items | items: items | ||||
| }; | }; | ||||
| }, | }, | ||||
| selectChangeset: function(changeset, scroll) { | |||||
| var items = this._getSelectableItems(); | |||||
| var cursor = null; | |||||
| for (var ii = 0; ii < items.length; ii++) { | |||||
| var item = items[ii]; | |||||
| if (changeset === item.target) { | |||||
| cursor = ii; | |||||
| break; | |||||
| } | |||||
| } | |||||
| if (cursor !== null) { | |||||
| this._setSelectionState(items[cursor], true); | |||||
| } | |||||
| return this; | |||||
| }, | |||||
| _setSelectionState: function(item, scroll) { | _setSelectionState: function(item, scroll) { | ||||
| this._cursorItem = item; | this._cursorItem = item; | ||||
| this._redrawSelection(scroll); | this._redrawSelection(scroll); | ||||
| return this; | return this; | ||||
| }, | }, | ||||
| _redrawSelection: function(scroll) { | _redrawSelection: function(scroll) { | ||||
| ▲ Show 20 Lines • Show All 811 Lines • ▼ Show 20 Lines | _redrawBanner: function() { | ||||
| // In particular, this makes it close when you scroll the document: | // In particular, this makes it close when you scroll the document: | ||||
| // otherwise, it stays open but the banner moves underneath it. | // otherwise, it stays open but the banner moves underneath it. | ||||
| if (this._dropdownMenu) { | if (this._dropdownMenu) { | ||||
| this._dropdownMenu.close(); | this._dropdownMenu.close(); | ||||
| } | } | ||||
| var node = this._getBannerNode(); | var node = this._getBannerNode(); | ||||
| var changeset = this._getVisibleChangeset(); | var changeset = this._getVisibleChangeset(); | ||||
| var tree = this._getTreeView(); | |||||
| var formation = this.getFormationView(); | |||||
| if (!changeset) { | if (!changeset) { | ||||
| this._bannerChangeset = null; | this._bannerChangeset = null; | ||||
| JX.DOM.remove(node); | JX.DOM.remove(node); | ||||
| tree.setSelectedPath(null); | |||||
| if (formation) { | |||||
| formation.repaint(); | |||||
| } | |||||
| return; | return; | ||||
| } | } | ||||
| // Don't do anything if nothing has changed. This seems to avoid some | // Don't do anything if nothing has changed. This seems to avoid some | ||||
| // flickering issues in Safari, at least. | // flickering issues in Safari, at least. | ||||
| if (this._bannerChangeset === changeset) { | if (this._bannerChangeset === changeset) { | ||||
| return; | return; | ||||
| } | } | ||||
| this._bannerChangeset = changeset; | this._bannerChangeset = changeset; | ||||
| var paths = tree.getPaths(); | |||||
| for (var ii = 0; ii < paths.length; ii++) { | |||||
| var path = paths[ii]; | |||||
| if (path.getChangeset() === changeset) { | |||||
| tree.setSelectedPath(path); | |||||
| } | |||||
| } | |||||
| var inlines = this._getInlinesByType(); | var inlines = this._getInlinesByType(); | ||||
| var unsaved = inlines.unsaved; | var unsaved = inlines.unsaved; | ||||
| var unsubmitted = inlines.unsubmitted; | var unsubmitted = inlines.unsubmitted; | ||||
| var undone = inlines.undone; | var undone = inlines.undone; | ||||
| var done = inlines.done; | var done = inlines.done; | ||||
| var draft_done = inlines.draftDone; | var draft_done = inlines.draftDone; | ||||
| ▲ Show 20 Lines • Show All 89 Lines • ▼ Show 20 Lines | _redrawBanner: function() { | ||||
| var buttons_view = JX.$N('div', buttons_attrs, buttons_list); | var buttons_view = JX.$N('div', buttons_attrs, buttons_list); | ||||
| var icon = new JX.PHUIXIconView() | var icon = new JX.PHUIXIconView() | ||||
| .setIcon(changeset.getIcon()) | .setIcon(changeset.getIcon()) | ||||
| .getNode(); | .getNode(); | ||||
| JX.DOM.setContent(node, [buttons_view, path_view]); | JX.DOM.setContent(node, [buttons_view, path_view]); | ||||
| document.body.appendChild(node); | document.body.appendChild(node); | ||||
| if (formation) { | |||||
| formation.repaint(); | |||||
| } | |||||
| }, | }, | ||||
| _getInlinesByType: function() { | _getInlinesByType: function() { | ||||
| var changesets = this._changesets; | var changesets = this._changesets; | ||||
| var unsaved = []; | var unsaved = []; | ||||
| var unsubmitted = []; | var unsubmitted = []; | ||||
| var undone = []; | var undone = []; | ||||
| var done = []; | var done = []; | ||||
| ▲ Show 20 Lines • Show All 356 Lines • ▼ Show 20 Lines | _getVisibleChangeset: function() { | ||||
| return changeset; | return changeset; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| return null; | return null; | ||||
| }, | }, | ||||
| _getTreeView: function() { | |||||
| if (!this._treeView) { | |||||
| var tree = new JX.DiffTreeView(); | |||||
| for (var ii = 0; ii < this._changesets.length; ii++) { | |||||
| var changeset = this._changesets[ii]; | |||||
| tree.addPath(changeset.getPathView()); | |||||
| } | |||||
| this._treeView = tree; | |||||
| } | |||||
| return this._treeView; | |||||
| }, | |||||
| _redrawFiletree : function() { | _redrawFiletree : function() { | ||||
| var formation = this.getFormationView(); | var formation = this.getFormationView(); | ||||
| if (!formation) { | if (!formation) { | ||||
| return; | return; | ||||
| } | } | ||||
| var filetree = formation.getColumn(0); | var filetree = formation.getColumn(0); | ||||
| var flank = filetree.getFlank(); | var flank = filetree.getFlank(); | ||||
| var flank_body = flank.getBodyNode(); | var flank_body = flank.getBodyNode(); | ||||
| var items = []; | var tree = this._getTreeView(); | ||||
| for (var ii = 0; ii < this._changesets.length; ii++) { | JX.DOM.setContent(flank_body, tree.getNode()); | ||||
| var changeset = this._changesets[ii]; | |||||
| var node = JX.$N('div', {}, changeset.getDisplayPath()); | |||||
| items.push(node); | |||||
| } | |||||
| JX.DOM.setContent(flank_body, items); | |||||
| } | } | ||||
| } | } | ||||
| }); | }); | ||||