115 Commits

Author SHA1 Message Date
Kasper Nilsson
5b7e0af8e4 Add "Mark reviewed" shortcut for diff view
Bug: Issue 8393
Change-Id: Ie131f9a0a75fe2c0204cd36c0a03e9640fe1e915
2018-02-20 13:16:20 -08:00
Wyatt Allen
ffae724134 Save diff mode preference when toggled
Introduce the gr-diff-mode-selector which componentizes the diff mode
buttons already used in the file list and adds them to the diff view.
With this new component, when authenticated users change their diff
preference using the new selector (or by the 'm' keyboard shortcut), the
new mode is saved to their preferences. Unauthenticated users see no
change in diff mode preference persistence.

The diff selector is now consistently labeled as "Diff view" rather than
as "Diff views".

Bug: Issue 8144
Change-Id: I4b30714deb9a466e707b3d4ae90c1d4c60222c64
2018-02-15 11:43:10 -08:00
Wyatt Allen
61e414c9a3 Toggle diff view mode with 'm' key
Ieae237f9bb1 adds a keyboard shortcut to switch diff view modes in the
diff view. With this change, the key is changed from 'v' to 'm', support
is added to the change view as well as the diff view, and tests are
added.

Bug: Issue 8269
Change-Id: Ifeaa26bc1d6256809d58673232cf982b6faac400
2018-02-09 10:17:50 -08:00
Kasper Nilsson
f428a236a6 Respect manual_review preference in diff view
The ability to modify the preference in the diff settings will be added
in a later change.

Bug: Issue 4676
Change-Id: I8c335acd9c50344714e56901f82c09327e7f4366
2018-02-07 11:38:03 -08:00
viktard
dfa58ce16c Merge "Support implicit PARENT parameter when calculating commitRange" 2018-02-05 23:27:46 +00:00
Thomas Shafer
849c446243 Support implicit PARENT parameter when calculating commitRange
When there isn't an explicit revision, the view defaults the base patch num to
PARENT. When the base patch num is PARENT, baseCommit should be set to the
parent commit.

Change-Id: I2c5291f67356111ef4562f36636647f0cb98bea6
2018-02-05 12:58:09 -08:00
Viktar Donich
c5069b1cd2 Show "File X of Y" next to file navigation links in diff view
Bug: Issue 4917
Change-Id: Ie993504fe80034da0e3d3ddee99687ba09ebc2ff
2018-02-05 10:54:17 -08:00
Kasper Nilsson
808838e915 Replace editLoaded with editMode
Done for clarity and differentiation with `editPatchsetLoaded`.

Bug: Issue 4437
Change-Id: I05432b202921cad7f906a1cbe9ed68aaeac164cb
2018-01-24 15:45:28 -08:00
Kasper Nilsson
b1e2307fda Fix review checkbox behavior in diff view
The saveReviewedState observer observes params.*, but should not set
reviewed state when view !== Gerrit.Nav.View.DIFF. This can (and did)
happen when the Gerrit.Nav API is used to change the view -- the
observer is triggered before the view is detached.

Bug: Issue 8192
Change-Id: I06c1875f6f515c0d001277e63eb7724728c85cba
2018-01-23 10:33:44 -08:00
Martin Fick
a0cc7845ea Merge "Add a keyboard shortcut [v] for toggling side-by-side / unified view." 2018-01-23 15:31:28 +00:00
Wyatt Allen
e515ff6c12 Do not collapse line numbers that are indicated in the URL
When users navigate to the diff view with a line number specified at the
end, depending on their context preference, the line might be in a
shared region that gets collapsed when the diff renders. With this
change, the location specified in the URL is prevented from being
collapsed by marking it as a "key" location.

Bug: Issue 5247
Change-Id: Ifd5827cd922b022cddb1601911a9ecea6a054f35
2018-01-22 14:03:24 -08:00
James Putman
376b5e9720 Add a keyboard shortcut [v] for toggling side-by-side / unified view.
Bug: Issue 7557
Change-Id: Ieae237f9bb1d2d614147d362f1b3478c0968ff2f
2018-01-13 22:44:20 -07:00
Wyatt Allen
1b3eb9c4c4 Skip to next file with comments goes to change view if there are none
The command to view the next file in the patch set with comments
navigates to the change view if there is no next file with comments. The
same behavior is applied to the previous file with comments shortcut.

A suite of tests is added for the skip methods.

Feature: Issue 5452
Change-Id: Iaa43e3a4ca1d1825fd0a205dd9b722b5f7cf59e4
2018-01-10 15:23:56 -08:00
Viktar Donich
a28dee069f Weblinks API for embedded scenario using Gerrit.Nav interface
Gerrit.Nav.setup() now takes a weblinks generator function as a third
parameter. Here's the function signature:

``` js
Gerrit.Nav.setup(navigate, generateUrl, generateWeblinks)
```

Weblinks generator function takes single payload parameter with
`type` property that determines which part of the UI is the consumer of
the weblinks. `type` property can be one of `file`, `change`, or
`patchset`.

For `file` type, payload will also contain string properties:
`repo`, `commit`, `file`.

For `pachset` type, payload will also contain string properties:
`repo`, `commit`.

For `change` type, payload will also contain string properties:
`repo`, `commit`.

If server provides weblinks, those will be passed as `options.weblinks`
property on the main payload object.

Change-Id: I0d9de3a295435304e2b6aad551112440075cf098
2017-12-08 20:20:10 -08:00
Wyatt Allen
a744e2303f Support for parent diff bases in merge changes
With this change, in merge changes, patch ranges can diff against a
specific parent (as indicated by a negative parent index) similarly to
the GWT UI.
- Parent options appear in patch range selectors when available.
- The router no longer redirects parent indexed patch ranges now that
  they are supported.
- The RevisionInfo class is added to house revision related functions in
  a form that's easily passed between components.
- On merge changes the default patch range base is labeled as
  "AutoMerge" rather than "Base".

Feature: Issue 4760
Change-Id: I221ba97e28be52f225f7d90f5f8c5a0f17ddb8c2
2017-11-21 17:41:15 -08:00
Becky Siegel
5946f954f4 Show comment counts in diff file dropdown
Change-Id: Ia976d7357754075b0118a85842d662f03464e7cd
2017-11-14 09:49:12 -08:00
Becky Siegel
e53ca1cb5c Fix diff file dropdown
The 'value' computed should be the actual path not the displayed path.

Bug: Issue 7730
Change-Id: Ia701966ca9733ce52b848e71a8d446e2d3695e22
2017-11-13 16:54:12 -08:00
Becky Siegel
a0764826eb Merge "Add more helper functions to gr-comment-api" 2017-11-10 23:22:42 +00:00
Becky Siegel
57e4fb3b8a Add more helper functions to gr-comment-api
These will be consumed by the file list, patch range dropdown, and diff
file selector.

Change-Id: Icec8baf9c44abedfe3128157e15d5bd46ff3259a
2017-11-10 13:59:38 -08:00
Becky Siegel
0a420520fe Merge "Add reloadDrafts function in gr-comment-api" 2017-11-09 23:09:50 +00:00
Becky Siegel
2033dfd1ec Add reloadDrafts function in gr-comment-api
This function also re-initializes a ChangeComment object, but uses the
old values for comments and robot comments, and only makes a request for
new drafts.

It's response is identical to loadAll for the purposes of elements using
these functions, but will reduce unneeded API calls.

Change-Id: I3c0872b86a0e24c9c378acf3311fe8cc3e078eda
2017-11-09 14:45:13 -08:00
Becky Siegel
fde2da6dc2 Use gr-dropdown-list for diff view file select
The diff view file select used its own implementation of a dropdown,
which also had two versions, a native select for mobile and a custom
design for desktop.

gr-autocomplete-dropdown was designed so that it could be used in this
scenario as well, as it also has a native select built in.

This will also allow us to add comments in the dropdown (follow-up
change) and use Gerrit.Nav instead of generated URLs.

Change-Id: I5613bb8e327a3f6ae227bf69e64bfafbbfe09b6c
2017-11-08 14:28:36 -08:00
Becky Siegel
318f2ad53e Show comments on diff dropdown
Since the diff view now has access to the same comment structure as the
change view/file list header via the comment api, patchsets can now
display comment counts in the dropdown.

Bug: Issue 7212
Change-Id: I85697c770862de48b2b2ce82649f1b8873ab9480
2017-11-07 00:16:10 +00:00
Becky Siegel
c7f07dca19 Update gr-comment-api
Previously, nested components (that are never standalone) were making
their own requests for comments, creating unecessary duplicate API
requests.

Some requests were made to the rest API directly (for example,
gr-change-view requested comments this way), and some were through the
gr-comment-api, which also helped handle comment manipulation and
reorganization.

Instead of ad-hoc comment requesting, move all comment requests to the
top level (standalone) component, and use an object prototype to
generate _changeComments as a property on gr-comment-api. This is an
immutable object that can be passed to the inner components
(file list, etc), and includes the methods needed to manipulate
comments into the forms
necessary.

When a child component needs to trigger a refresh of the comments, fire
an event that the parent event handles (see gr-file-list l.867).

Bug: Issue 6953
Change-Id: Ic4b6cf16520baae65d8cf956c311a60f2a70a2e1
2017-11-06 14:31:59 -08:00
Becky Siegel
af950fd955 Fix patch range select on diff
Previously, the patch range selector was updated to not use two way
bindings (https://gerrit-review.googlesource.com/c/gerrit/+/130453) but
the diff view's usage was not updated as well. This change updates the
diff view to use the patch range select in the same way as the file
list.

Bug: Issue 7420
Change-Id: I1baaf643e08d1a4661962021be890bafd6d5b4ef
2017-10-12 20:52:29 +00:00
Kasper Nilsson
29b2ab4a69 Set _loading flag in diff-view while awaiting API
Previously, PolyGerrit relied on the default value of the loading flag
in the diff view to show/hide the appropriate diff panels (or loading
message). Because of this, stale information is displayed when a user
navigates between different files within the same diff view.

With this change, the `_loading` flag is set before the major API calls
are made, and the loading message is made more obvious.

Bug: Issue 7381
Change-Id: Id70d981a2c72fef9f44a32c5463dc43c3ce41cf6
2017-10-09 11:36:19 -07:00
Becky Siegel
fd7c71f1db Implement gr-dropdown-list in patch range select
This also moves the change reloading logic back to the change view,
where it gets updated patch ranges via a two-way data binding.

Change-Id: Ib09ad1a176ba96bac77a513d344226df029aef7b
2017-10-01 12:27:44 +01:00
Kasper Nilsson
ce67e2a921 Refactor file path truncation into behavior
Change-Id: I21af00d3efc28291aa6918fde643cc6c77a7d05c
2017-10-01 11:05:12 +01:00
Wyatt Allen
ed628d7f37 Show blame in diff
With this change a blame column is added to the left side of diff
tables. The column is empty and hidden until blame is loaded. A button
is added to the change view to trigger a load of the blame for that
diff, as well as a unload it if already loaded. In this stage, the blame
information is non-interactive and only displays the SHA, date and
commit author.

Feature: Issue 6075
Change-Id: Ifcb951265d0e6339094e6b7c9574ec9c69e60b51
2017-09-27 18:55:42 -04:00
Wyatt Allen
1bd466a24b Handle cursor positions that don't yield addresses
The gr-diff-cursor#getAddress method returns null when it has no
position or no address corresponds to it's position. However, the
gr-diff-view#_onLineSelected method did not account for this case and
attempted to use null addresses to construct URLs when moving the cursor
to a "File" line of a diff.

With this change, the diff view neither uses line number nor the diff
side when constructing URLs if the cursor does not yield an address.

Change-Id: I628658295bca1f49e0c2d3484e2e0d01e71bcd91
2017-09-15 12:12:55 -07:00
Becky Siegel
89fe0501e1 Utilize gr-patch-range-select in the change view
Slight refactoring required in order to satisfy both use cases:
- Fire an event when patch range changes and let parent element
  handle it.
- Support comment strings
- availablePatches becomes an array of objects instead of an
  array of integers.

Change-Id: Ia8da9296f41eb2d45c9358d03fbec3940273ad9d
2017-09-14 13:47:38 -07:00
Wyatt Allen
fd6a9478e5 Preserve URL line numbers specified by @
Some URLs (for example, comment links in Gerrit emails) specify the line
number following an @-sign rather than in the hash using an octothorp
because the URL is already mostly inside a hash (for backward
compatibility with the GWT UI). When these URLs do not include the
project name (as they currently do not in Gerrit emails) the project is
loaded and the parsed route is "upgraded" to include the project.

However, when generating the upgrade URL, the `_generateUrl` method
looks for the `lineNum` and `leftSide` properties to generate the
address. While the address specified by the @-sign is properly converted
to an octothorp-hash before this point, it appears on the properties
object as `hash`, and is thus ignored by `_generateUrl`.

With this change, instead of passing the raw hash through the app params
and parsing it in the `gr-diff-view`, the hash is parsed into its
`leftSide` and `lineNum` values and attached to the `app.params` by the
router. In this way, the location is preserved through URL upgrade, the
param format used in navigation matches that used in URL generation and
the diff view no longer parses the route.

Bug: Issue 7087
Change-Id: Idb2e3cccf2884fae742247cf1ebbde1ad97e53ab
2017-08-29 12:42:39 -07:00
Wyatt Allen
aea9974693 Update diff line hash via Gerrit.Nav
Formerly, the gr-diff-view generated and updated the URL hash that
indicates the location of the diff cursor, regardless of the hash
generation scheme implemented in _generateUrl. With this change, the
diff view uses the _generateUrl for the cursor-location-specific URL.

Change-Id: Ia70a298f114c9eae9cdc5b0a8f73d7ecab55896e
2017-08-23 09:36:24 -07:00
Kasper Nilsson
eb7e7b80cf Centralize URL upgrading to within router
To prevent redundant (and sometimes incorrect) change/diff loads, this
change moves the logic for rewriting the URL schema to within the
router.

This has the drawback of adding a step -- and a potential API call --
between initial URL interpretation and first render, but ensures that
render will be correct. This only occurs when legacy routes are used.

Bug: Issue 7027
Change-Id: Ia1571e2f946f6d9e334626b6b0fd4a8c0c81f35d
2017-08-15 20:50:11 +00:00
Becky Siegel
8d92d53db5 Annotation updates
Change-Id: I146f76b9dcc1a92e18acec01481ad280fb431868
2017-08-12 11:49:52 -07:00
Kasper Nilsson
5f1f0c6f4e Disable reviewed checkbox in diff view for edit
Modifying the reviewed state of an edit patchset is an illogical action,
and should be disabled.

This change adds an _editLoaded property to gr-diff-view to
conditionally hide the reviewed checkbox. In addition, attempts to
modify the reviewed state are treated as a no-op.

TODO: Further utilize this approach to conditionally show buttons for
modifying an edit patchset. Will be done in a later change.

Bug: Issue 4437
Change-Id: I0ea98e49c5ec66e73f45fef9db5e3849d6e594df
2017-08-10 14:54:57 -07:00
David Ostrovsky
e6a6f44f8c Render change edits on change and diff screens
ORIGINALLY: Iafd4b80af53624027c347f0f443b4cdfde292e29

This change makes the change view and the diff view change edit aware.
Mutation operations on edit itself, like editing files in editor, are
beyond the scope of this change.

Change edits must be fetched with a separate change edit endpoint and
merged into the change.revisions object. The _number of an editInfo is
'edit'. It has a special property called 'basePatchNum' that marks
which patch set the edit is based on. In patch set selectors, the edit
is sorted right after its basePatchNum.

Alternative implementation considerations:

It could be easier to handle edits on the Polygerrit UI, if

  GET /changes/<id>/detail endpoint

would optionally include the change edit in the resulting
change.revsions map.

TODOs:
* Overwrite change.current_revision with change edit commit in some
  use cases
* Mark the change edit as Change Edit in the header of the change view
* Allow for modification of the edit in the change/diff view
* Disable commenting on files in edit patchsets
* Modify file list rows to have appropriate actions when edit is
  selected (e.g. allow revert, disable marking as reviewed)
* Identify and whitelist valid change/revision actions for an edit 

Bug: Issue 4437
Change-Id: Ia4690d20954de730cd625ac76920e849beb12f7c
2017-08-08 13:44:50 -07:00
Kasper Nilsson
7c33466e9a Merge "Modify reply dialog to wait for comment save" 2017-08-02 22:37:06 +00:00
Viktar Donich
b574c495b9 Merge "Document need for async title-change" 2017-08-02 22:06:09 +00:00
Kasper Nilsson
6873549786 Modify reply dialog to wait for comment save
Previously, opening the reply dialog was disabled when draft comments
were pending save. Now, the reply dialog is fully enabled, and will
silently wait for pending comments to be saved before proceeding with
any save/send operations.

Moreover, when diff drafts are in the process of saving, a label is
displayed below the comments list. When they finish saving, the list is
updated with the diff comments.

Change-Id: I2777f9e15b052e606aa210b5372dc7a89a076345
2017-08-02 21:21:06 +00:00
Wyatt Allen
c61ba25b11 Coalesce request for drafts with login check
Because requests for a user's draft diff comments is always nested
within a check for whether a user is logged in, these can be combined
into the same REST API interface call. The updated call is given a JSDoc
to describe the additional functionality and call sites are simplified.

Change-Id: Idc0cc6298c7287579ba76e7cc35701e62142bca3
2017-08-01 14:18:39 -07:00
Wyatt Allen
dc8782d762 Centralized comment requests
Formerly, gr-diff would make its own REST calls for diff comments in the
patch range and path being viewed. However, these calls by the diff view
were redundant to the more general comment requests made by either
gr-diff-view (which requests all comments to support skipping to the
next file with comments) or gr-change-view (which requests comments
individually for each inline diff).

With this change, the diff component no longer loads comments for
itself, but is rather provided the comments from its host view via a
public property. In this way the host view can load the more-general
comment data, and filter it down for the diff view's params.

Introduces the gr-comment-api component to simplify loading and
filtering diff comments for use by diff views. By using this new
component:
* The diff view makes only one request for comments (including drafts
  and robot comments) to support skipping to the next comment and
  displaying comments in the diff view.
* The change view makes only one request for comments for all inline
  diffs.

Bug: Issue 5299
Change-Id: Ia14a01619f1f9881aa0d253fd3f49af9a17f3dce
2017-08-01 14:15:38 -07:00
Wyatt Allen
e9bd3e286d Document need for async title-change
Better documentation for the fix in Ia32e76023c.

Change-Id: Ia272196248fc2acdec7041137e1d452ff70d0f06
2017-07-31 16:30:32 -07:00
Kasper Nilsson
49e3d1f47f Merge changes I7b542ddb,Ie9bea7f9
* changes:
  Call Gerrit.Nav.upgradeUrl from valid views
  Add function upgradeUrl to gr-navigation
2017-07-28 17:00:05 +00:00
Wyatt Allen
68e1e21b69 Fire diff-view title-change event in an async
Formerly, the title-change event was fired too early, and failed to
set the actual title.

Change-Id: Ia32e76023c426cf6b8a3ad1456490885fb22bd67
2017-07-25 20:27:19 +00:00
Kasper Nilsson
9060cfd1a5 Replace patchNum compare with utility function
In preparation for implementation of in-app editing, the instances of
parseInt(patchNum) must be swapped out, as a patchNum may now be either
a number or a string.

This change adds the patchNumEquals function to gr-patch-set-behavior,
and uses it everywhere patchNum is compared.

Bug: Issue 4437
Change-Id: Ib1176508cd88d60c79e952b99dd5f57b994baa77
2017-07-25 09:51:04 -07:00
Kasper Nilsson
f89608d903 Call Gerrit.Nav.upgradeUrl from valid views
The migration to project-based URLs has made evident the need for some
alias in gr-navigation to `history.replaceState`. This change calls
the function `upgradeUrl` within gr-diff-view and gr-change-view iff the
project returned by getChangeDetail differs from the one set on
app.params.

Bug: Issue 6708
Change-Id: I7b542ddb989527b6a89ccdfd79846808835ed5a3
2017-07-24 15:12:13 -07:00
Kasper Nilsson
3c2e121c9d Add more fields to Gerrit.Nav.View and utilize in app
Previously, the app relied on string matching of the view tag names in
order to perform view-based actions (e.g. routing).

This change refactors those instances to utilise the Gerrit.Nav.View
enum.

Bug: Issue 6708
Change-Id: If0212fde93e0167e3207af19006beee1a602df60
2017-07-19 17:02:08 -07:00
Becky Siegel
05d1253d8d Get hash from router instead of location
Previously, there was an issue where nagivating between diffs would
use the hash from the previous diff because the url had not been
updated when _paramsChanged was calls. Instead of getting the hash
from window.location, let the router handle it and pass it in as a
param.

Bug: Issue 6702
Change-Id: I03cb59e0f55813b0973eaf949e9e0958946d094e
2017-07-19 10:22:10 -07:00
Kasper Nilsson
daba503058 Merge "Only truncate file path in page title" 2017-07-13 18:00:02 +00:00