Convert legacy Polyemer elements to class-based
This commit converts almost all Polymer elements from Polymer-function
based components to class-based components. There are few files which
should be converted manually after this commit.
Change-Id: I9e597e79053e0a6b5d5c0f1b54676d11b9d81db7
diff --git a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.js b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.js
index 1ac307f..e84e996 100644
--- a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.js
+++ b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.js
@@ -460,20 +460,27 @@
this._isInRevisionOfPatchRange(comment, range);
};
- Polymer({
- is: 'gr-comment-api',
+ /**
+ * @appliesMixin Gerrit.PatchSetMixin
+ */
+ class GrCommentApi extends Polymer.mixinBehaviors( [
+ Gerrit.PatchSetBehavior,
+ ], Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element))) {
+ static get is() { return 'gr-comment-api'; }
- properties: {
- _changeComments: Object,
- },
+ static get properties() {
+ return {
+ _changeComments: Object,
+ };
+ }
- listeners: {
- 'reload-drafts': 'reloadDrafts',
- },
-
- behaviors: [
- Gerrit.PatchSetBehavior,
- ],
+ created() {
+ super.created();
+ this.addEventListener('reload-drafts',
+ changeNum => this.reloadDrafts(changeNum));
+ }
/**
* Load all comments (with drafts and robot comments) for the given change
@@ -494,7 +501,7 @@
robotComments, drafts, changeNum);
return this._changeComments;
});
- },
+ }
/**
* Re-initialize _changeComments with a new ChangeComments object, that
@@ -513,6 +520,8 @@
this._changeComments.robotComments, drafts, changeNum);
return this._changeComments;
});
- },
- });
+ }
+ }
+
+ customElements.define(GrCommentApi.is, GrCommentApi);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-coverage-layer/gr-coverage-layer.js b/polygerrit-ui/app/elements/diff/gr-coverage-layer/gr-coverage-layer.js
index 3d9c172..d1df4d0 100644
--- a/polygerrit-ui/app/elements/diff/gr-coverage-layer/gr-coverage-layer.js
+++ b/polygerrit-ui/app/elements/diff/gr-coverage-layer/gr-coverage-layer.js
@@ -24,20 +24,23 @@
[Gerrit.CoverageType.NOT_INSTRUMENTED, 'Not instrumented by any tests.'],
]);
- Polymer({
- is: 'gr-coverage-layer',
+ class GrCoverageLayer extends Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element)) {
+ static get is() { return 'gr-coverage-layer'; }
- properties: {
+ static get properties() {
+ return {
/**
* Must be sorted by code_range.start_line.
* Must only contain ranges that match the side.
*
* @type {!Array<!Gerrit.CoverageRange>}
*/
- coverageRanges: Array,
- side: String,
+ coverageRanges: Array,
+ side: String,
- /**
+ /**
* We keep track of the line number from the previous annotate() call,
* and also of the index of the coverage range that had matched.
* annotate() calls are coming in with increasing line numbers and
@@ -45,15 +48,16 @@
* and efficient way for finding the coverage range that matches a given
* line number.
*/
- _lineNumber: {
- type: Number,
- value: 0,
- },
- _index: {
- type: Number,
- value: 0,
- },
- },
+ _lineNumber: {
+ type: Number,
+ value: 0,
+ },
+ _index: {
+ type: Number,
+ value: 0,
+ },
+ };
+ }
/**
* Layer method to add annotations to a line.
@@ -102,6 +106,8 @@
lineNumberEl.title = TOOLTIP_MAP.get(coverageRange.type);
return;
}
- },
- });
+ }
+ }
+
+ customElements.define(GrCoverageLayer.is, GrCoverageLayer);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-cursor/gr-diff-cursor.js b/polygerrit-ui/app/elements/diff/gr-diff-cursor/gr-diff-cursor.js
index 8848b1c1..039a99fa 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-cursor/gr-diff-cursor.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-cursor/gr-diff-cursor.js
@@ -35,33 +35,36 @@
const LEFT_SIDE_CLASS = 'target-side-left';
const RIGHT_SIDE_CLASS = 'target-side-right';
- Polymer({
- is: 'gr-diff-cursor',
+ class GrDiffCursor extends Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element)) {
+ static get is() { return 'gr-diff-cursor'; }
- properties: {
+ static get properties() {
+ return {
/**
* Either DiffSides.LEFT or DiffSides.RIGHT.
*/
- side: {
- type: String,
- value: DiffSides.RIGHT,
- },
- /** @type {!HTMLElement|undefined} */
- diffRow: {
- type: Object,
- notify: true,
- observer: '_rowChanged',
- },
+ side: {
+ type: String,
+ value: DiffSides.RIGHT,
+ },
+ /** @type {!HTMLElement|undefined} */
+ diffRow: {
+ type: Object,
+ notify: true,
+ observer: '_rowChanged',
+ },
- /**
+ /**
* The diff views to cursor through and listen to.
*/
- diffs: {
- type: Array,
- value() { return []; },
- },
+ diffs: {
+ type: Array,
+ value() { return []; },
+ },
- /**
+ /**
* If set, the cursor will attempt to move to the line number (instead of
* the first chunk) the next time the diff renders. It is set back to null
* when used. It should be only used if you want the line to be focused
@@ -71,56 +74,61 @@
*
* @type (?number)
*/
- initialLineNumber: {
- type: Number,
- value: null,
- },
+ initialLineNumber: {
+ type: Number,
+ value: null,
+ },
- /**
+ /**
* The scroll behavior for the cursor. Values are 'never' and
* 'keep-visible'. 'keep-visible' will only scroll if the cursor is beyond
* the viewport.
*/
- _scrollBehavior: {
- type: String,
- value: ScrollBehavior.KEEP_VISIBLE,
- },
+ _scrollBehavior: {
+ type: String,
+ value: ScrollBehavior.KEEP_VISIBLE,
+ },
- _focusOnMove: {
- type: Boolean,
- value: true,
- },
+ _focusOnMove: {
+ type: Boolean,
+ value: true,
+ },
- _listeningForScroll: Boolean,
- },
+ _listeningForScroll: Boolean,
+ };
+ }
- observers: [
- '_updateSideClass(side)',
- '_diffsChanged(diffs.splices)',
- ],
+ static get observers() {
+ return [
+ '_updateSideClass(side)',
+ '_diffsChanged(diffs.splices)',
+ ];
+ }
attached() {
+ super.attached();
// Catch when users are scrolling as the view loads.
this.listen(window, 'scroll', '_handleWindowScroll');
- },
+ }
detached() {
+ super.detached();
this.unlisten(window, 'scroll', '_handleWindowScroll');
- },
+ }
moveLeft() {
this.side = DiffSides.LEFT;
if (this._isTargetBlank()) {
this.moveUp();
}
- },
+ }
moveRight() {
this.side = DiffSides.RIGHT;
if (this._isTargetBlank()) {
this.moveUp();
}
- },
+ }
moveDown() {
if (this._getViewMode() === DiffViewMode.SIDE_BY_SIDE) {
@@ -128,7 +136,7 @@
} else {
this.$.cursorManager.next();
}
- },
+ }
moveUp() {
if (this._getViewMode() === DiffViewMode.SIDE_BY_SIDE) {
@@ -136,7 +144,7 @@
} else {
this.$.cursorManager.previous();
}
- },
+ }
moveToNextChunk(opt_clipToTop) {
this.$.cursorManager.next(this._isFirstRowOfChunk.bind(this),
@@ -144,22 +152,22 @@
return target.parentNode.scrollHeight;
}, opt_clipToTop);
this._fixSide();
- },
+ }
moveToPreviousChunk() {
this.$.cursorManager.previous(this._isFirstRowOfChunk.bind(this));
this._fixSide();
- },
+ }
moveToNextCommentThread() {
this.$.cursorManager.next(this._rowHasThread.bind(this));
this._fixSide();
- },
+ }
moveToPreviousCommentThread() {
this.$.cursorManager.previous(this._rowHasThread.bind(this));
this._fixSide();
- },
+ }
/**
* @param {number} number
@@ -172,7 +180,7 @@
this.side = side;
this.$.cursorManager.setCursor(row);
}
- },
+ }
/**
* Get the line number element targeted by the cursor row and side.
@@ -190,7 +198,7 @@
}
return this.diffRow.querySelector(lineElSelector);
- },
+ }
getTargetDiffElement() {
if (!this.diffRow) return null;
@@ -202,12 +210,12 @@
return hostOwner.host;
}
return null;
- },
+ }
moveToFirstChunk() {
this.$.cursorManager.moveToStart();
this.moveToNextChunk(true);
- },
+ }
reInitCursor() {
this._updateStops();
@@ -217,7 +225,7 @@
} else {
this.moveToFirstChunk();
}
- },
+ }
_handleWindowScroll() {
if (this._listeningForScroll) {
@@ -225,7 +233,7 @@
this._focusOnMove = false;
this._listeningForScroll = false;
}
- },
+ }
handleDiffUpdate() {
this._updateStops();
@@ -240,11 +248,11 @@
this._scrollBehavior = ScrollBehavior.KEEP_VISIBLE;
this._focusOnMove = true;
this._listeningForScroll = false;
- },
+ }
_handleDiffRenderStart() {
this._listeningForScroll = true;
- },
+ }
createCommentInPlace() {
const diffWithRangeSelected = this.diffs.find(diff => {
@@ -258,7 +266,7 @@
this.getTargetDiffElement().addDraftAtLine(line);
}
}
- },
+ }
/**
* Get an object describing the location of the cursor. Such as
@@ -290,7 +298,7 @@
leftSide: cell.matches('.left'),
number: parseInt(number, 10),
};
- },
+ }
_getViewMode() {
if (!this.diffRow) {
@@ -302,24 +310,24 @@
} else {
return DiffViewMode.UNIFIED;
}
- },
+ }
_rowHasSide(row) {
const selector = (this.side === DiffSides.LEFT ? '.left' : '.right') +
' + .content';
return !!row.querySelector(selector);
- },
+ }
_isFirstRowOfChunk(row) {
const parentClassList = row.parentNode.classList;
return parentClassList.contains('section') &&
parentClassList.contains('delta') &&
!row.previousSibling;
- },
+ }
_rowHasThread(row) {
return row.querySelector('.thread-group');
- },
+ }
/**
* If we jumped to a row where there is no content on the current side then
@@ -331,7 +339,7 @@
this.side = this.side === DiffSides.LEFT ?
DiffSides.RIGHT : DiffSides.LEFT;
}
- },
+ }
_isTargetBlank() {
if (!this.diffRow) {
@@ -341,14 +349,14 @@
const actions = this._getActionsForRow();
return (this.side === DiffSides.LEFT && !actions.left) ||
(this.side === DiffSides.RIGHT && !actions.right);
- },
+ }
_rowChanged(newRow, oldRow) {
if (oldRow) {
oldRow.classList.remove(LEFT_SIDE_CLASS, RIGHT_SIDE_CLASS);
}
this._updateSideClass();
- },
+ }
_updateSideClass() {
if (!this.diffRow) {
@@ -358,11 +366,11 @@
this.diffRow);
this.toggleClass(RIGHT_SIDE_CLASS, this.side === DiffSides.RIGHT,
this.diffRow);
- },
+ }
_isActionType(type) {
return type !== 'blank' && type !== 'contextControl';
- },
+ }
_getActionsForRow() {
const actions = {left: false, right: false};
@@ -373,18 +381,18 @@
this.diffRow.getAttribute('right-type'));
}
return actions;
- },
+ }
_getStops() {
return this.diffs.reduce(
(stops, diff) => {
return stops.concat(diff.getCursorStops());
}, []);
- },
+ }
_updateStops() {
this.$.cursorManager.stops = this._getStops();
- },
+ }
/**
* Setup and tear down on-render listeners for any diffs that are added or
@@ -420,7 +428,7 @@
'render-content', 'handleDiffUpdate');
}
}
- },
+ }
_findRowByNumberAndFile(targetNumber, side, opt_path) {
let stops;
@@ -437,6 +445,8 @@
return stops[i];
}
}
- },
- });
+ }
+ }
+
+ customElements.define(GrDiffCursor.is, GrDiffCursor);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.js b/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.js
index 4ccc8f2..88d19aa 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.js
@@ -17,24 +17,32 @@
(function() {
'use strict';
- Polymer({
- is: 'gr-diff-highlight',
+ /**
+ * @appliesMixin Gerrit.FireMixin
+ */
+ class GrDiffHighlight extends Polymer.mixinBehaviors( [
+ Gerrit.FireBehavior,
+ ], Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element))) {
+ static get is() { return 'gr-diff-highlight'; }
- properties: {
+ static get properties() {
+ return {
/** @type {!Array<!Gerrit.HoveredRange>} */
- commentRanges: {
- type: Array,
- notify: true,
- },
- loggedIn: Boolean,
- /**
+ commentRanges: {
+ type: Array,
+ notify: true,
+ },
+ loggedIn: Boolean,
+ /**
* querySelector can return null, so needs to be nullable.
*
* @type {?HTMLElement}
* */
- _cachedDiffBuilder: Object,
+ _cachedDiffBuilder: Object,
- /**
+ /**
* Which range is currently selected by the user.
* Stored in order to add a range-based comment
* later.
@@ -42,21 +50,22 @@
*
* @type {{side: string, range: Gerrit.Range}|undefined}
*/
- selectedRange: {
- type: Object,
- notify: true,
- },
- },
+ selectedRange: {
+ type: Object,
+ notify: true,
+ },
+ };
+ }
- behaviors: [
- Gerrit.FireBehavior,
- ],
-
- listeners: {
- 'comment-thread-mouseleave': '_handleCommentThreadMouseleave',
- 'comment-thread-mouseenter': '_handleCommentThreadMouseenter',
- 'create-comment-requested': '_handleRangeCommentRequest',
- },
+ created() {
+ super.created();
+ this.addEventListener('comment-thread-mouseleave',
+ e => this._handleCommentThreadMouseleave(e));
+ this.addEventListener('comment-thread-mouseenter',
+ e => this._handleCommentThreadMouseenter(e));
+ this.addEventListener('create-comment-requested',
+ e => this._handleRangeCommentRequest(e));
+ }
get diffBuilder() {
if (!this._cachedDiffBuilder) {
@@ -64,7 +73,7 @@
Polymer.dom(this).querySelector('gr-diff-builder');
}
return this._cachedDiffBuilder;
- },
+ }
/**
* Determines side/line/range for a DOM selection and shows a tooltip.
@@ -93,7 +102,7 @@
this.debounce(
'selectionChange', () => this._handleSelection(selection, isMouseUp),
10);
- },
+ }
_getThreadEl(e) {
const path = Polymer.dom(e).path || [];
@@ -101,7 +110,7 @@
if (pathEl.classList.contains('comment-thread')) return pathEl;
}
return null;
- },
+ }
_handleCommentThreadMouseenter(e) {
const threadEl = this._getThreadEl(e);
@@ -110,7 +119,7 @@
if (index !== undefined) {
this.set(['commentRanges', index, 'hovering'], true);
}
- },
+ }
_handleCommentThreadMouseleave(e) {
const threadEl = this._getThreadEl(e);
@@ -119,7 +128,7 @@
if (index !== undefined) {
this.set(['commentRanges', index, 'hovering'], false);
}
- },
+ }
_indexForThreadEl(threadEl) {
const side = threadEl.getAttribute('comment-side');
@@ -128,7 +137,7 @@
if (!range) return undefined;
return this._indexOfCommentRange(side, range);
- },
+ }
_indexOfCommentRange(side, range) {
function rangesEqual(a, b) {
@@ -146,7 +155,7 @@
return this.commentRanges.findIndex(commentRange =>
commentRange.side === side && rangesEqual(commentRange.range, range));
- },
+ }
/**
* Get current normalized selection.
@@ -184,7 +193,7 @@
end: endRange.end,
};
}
- },
+ }
/**
* Normalize a specific DOM Range.
@@ -198,7 +207,7 @@
end: this._normalizeSelectionSide(
range.endContainer, range.endOffset),
}, domRange);
- },
+ }
/**
* Adjust triple click selection for the whole line.
@@ -239,7 +248,7 @@
};
}
return range;
- },
+ }
/**
* Convert DOM Range selection to concrete numbers (line, column, side).
@@ -296,7 +305,7 @@
line,
column,
};
- },
+ }
/**
* The only line in which add a comment tooltip is cut off is the first
@@ -312,7 +321,7 @@
}
actionBox.positionBelow = true;
actionBox.placeBelow(range);
- },
+ }
_isRangeValid(range) {
if (!range || !range.start || !range.end) {
@@ -326,7 +335,7 @@
return false;
}
return true;
- },
+ }
_handleSelection(selection, isMouseUp) {
const normalizedRange = this._getNormalizedRange(selection);
@@ -398,12 +407,12 @@
} else {
this._positionActionBox(actionBox, start.line, start.node);
}
- },
+ }
_fireCreateRangeComment(side, range) {
this.fire('create-range-comment', {side, range});
this._removeActionBox();
- },
+ }
_handleRangeCommentRequest(e) {
e.stopPropagation();
@@ -412,7 +421,7 @@
}
const {side, range} = this.selectedRange;
this._fireCreateRangeComment(side, range);
- },
+ }
_removeActionBox() {
this.selectedRange = undefined;
@@ -420,7 +429,7 @@
if (actionBox) {
Polymer.dom(this.root).removeChild(actionBox);
}
- },
+ }
_convertOffsetToColumn(el, offset) {
if (el instanceof Element && el.classList.contains('content')) {
@@ -436,7 +445,7 @@
}
}
return offset;
- },
+ }
/**
* Traverse Element from right to left, call callback for each node.
@@ -461,7 +470,7 @@
}
node = nextNode;
}
- },
+ }
/**
* Get length of a node. If the node is a content node, then only give the
@@ -476,6 +485,8 @@
} else {
return GrAnnotation.getLength(node);
}
- },
- });
+ }
+ }
+
+ customElements.define(GrDiffHighlight.is, GrDiffHighlight);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js
index 5d1709c..f5dc438 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js
@@ -69,14 +69,22 @@
};
/**
+ * @appliesMixin Gerrit.FireMixin
+ * @appliesMixin Gerrit.PatchSetMixin
+ */
+ /**
* Wrapper around gr-diff.
*
* Webcomponent fetching diffs and related data from restAPI and passing them
* to the presentational gr-diff for rendering.
*/
- Polymer({
- is: 'gr-diff-host',
-
+ class GrDiffHost extends Polymer.mixinBehaviors( [
+ Gerrit.FireBehavior,
+ Gerrit.PatchSetBehavior,
+ ], Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element))) {
+ static get is() { return 'gr-diff-host'; }
/**
* Fired when the user selects a line.
* @event line-selected
@@ -94,182 +102,191 @@
* @event diff-comments-modified
*/
- properties: {
- changeNum: String,
- noAutoRender: {
- type: Boolean,
- value: false,
- },
- /** @type {?} */
- patchRange: Object,
- path: String,
- prefs: {
- type: Object,
- },
- projectName: String,
- displayLine: {
- type: Boolean,
- value: false,
- },
- isImageDiff: {
- type: Boolean,
- computed: '_computeIsImageDiff(diff)',
- notify: true,
- },
- commitRange: Object,
- filesWeblinks: {
- type: Object,
- value() {
- return {};
+ static get properties() {
+ return {
+ changeNum: String,
+ noAutoRender: {
+ type: Boolean,
+ value: false,
},
- notify: true,
- },
- hidden: {
- type: Boolean,
- reflectToAttribute: true,
- },
- noRenderOnPrefsChange: {
- type: Boolean,
- value: false,
- },
- comments: {
- type: Object,
- observer: '_commentsChanged',
- },
- lineWrapping: {
- type: Boolean,
- value: false,
- },
- viewMode: {
- type: String,
- value: DiffViewMode.SIDE_BY_SIDE,
- },
+ /** @type {?} */
+ patchRange: Object,
+ path: String,
+ prefs: {
+ type: Object,
+ },
+ projectName: String,
+ displayLine: {
+ type: Boolean,
+ value: false,
+ },
+ isImageDiff: {
+ type: Boolean,
+ computed: '_computeIsImageDiff(diff)',
+ notify: true,
+ },
+ commitRange: Object,
+ filesWeblinks: {
+ type: Object,
+ value() {
+ return {};
+ },
+ notify: true,
+ },
+ hidden: {
+ type: Boolean,
+ reflectToAttribute: true,
+ },
+ noRenderOnPrefsChange: {
+ type: Boolean,
+ value: false,
+ },
+ comments: {
+ type: Object,
+ observer: '_commentsChanged',
+ },
+ lineWrapping: {
+ type: Boolean,
+ value: false,
+ },
+ viewMode: {
+ type: String,
+ value: DiffViewMode.SIDE_BY_SIDE,
+ },
- /**
+ /**
* Special line number which should not be collapsed into a shared region.
* @type {{
* number: number,
* leftSide: {boolean}
* }|null}
*/
- lineOfInterest: Object,
+ lineOfInterest: Object,
- /**
+ /**
* If the diff fails to load, show the failure message in the diff rather
* than bubbling the error up to the whole page. This is useful for when
* loading inline diffs because one diff failing need not mark the whole
* page with a failure.
*/
- showLoadFailure: Boolean,
+ showLoadFailure: Boolean,
- isBlameLoaded: {
- type: Boolean,
- notify: true,
- computed: '_computeIsBlameLoaded(_blame)',
- },
+ isBlameLoaded: {
+ type: Boolean,
+ notify: true,
+ computed: '_computeIsBlameLoaded(_blame)',
+ },
- _loggedIn: {
- type: Boolean,
- value: false,
- },
+ _loggedIn: {
+ type: Boolean,
+ value: false,
+ },
- _loading: {
- type: Boolean,
- value: false,
- },
+ _loading: {
+ type: Boolean,
+ value: false,
+ },
- /** @type {?string} */
- _errorMessage: {
- type: String,
- value: null,
- },
+ /** @type {?string} */
+ _errorMessage: {
+ type: String,
+ value: null,
+ },
- /** @type {?Object} */
- _baseImage: Object,
- /** @type {?Object} */
- _revisionImage: Object,
- /**
+ /** @type {?Object} */
+ _baseImage: Object,
+ /** @type {?Object} */
+ _revisionImage: Object,
+ /**
* This is a DiffInfo object.
*/
- diff: {
- type: Object,
- notify: true,
- },
+ diff: {
+ type: Object,
+ notify: true,
+ },
- /** @type {?Object} */
- _blame: {
- type: Object,
- value: null,
- },
+ /** @type {?Object} */
+ _blame: {
+ type: Object,
+ value: null,
+ },
- /**
+ /**
* @type {!Array<!Gerrit.CoverageRange>}
*/
- _coverageRanges: {
- type: Array,
- value: () => [],
- },
+ _coverageRanges: {
+ type: Array,
+ value: () => [],
+ },
- _loadedWhitespaceLevel: String,
+ _loadedWhitespaceLevel: String,
- _parentIndex: {
- type: Number,
- computed: '_computeParentIndex(patchRange.*)',
- },
+ _parentIndex: {
+ type: Number,
+ computed: '_computeParentIndex(patchRange.*)',
+ },
- _syntaxHighlightingEnabled: {
- type: Boolean,
- computed:
+ _syntaxHighlightingEnabled: {
+ type: Boolean,
+ computed:
'_isSyntaxHighlightingEnabled(prefs.*, diff)',
- },
+ },
- _layers: {
- type: Array,
- value: [],
- },
- },
+ _layers: {
+ type: Array,
+ value: [],
+ },
+ };
+ }
- behaviors: [
- Gerrit.FireBehavior,
- Gerrit.PatchSetBehavior,
- ],
-
- listeners: {
- // These are named inconsistently for a reason:
- // The create-comment event is fired to indicate that we should
- // create a comment.
- // The comment-* events are just notifying that the comments did already
- // change in some way, and that we should update any models we may want
- // to keep in sync.
- 'create-comment': '_handleCreateComment',
- 'comment-discard': '_handleCommentDiscard',
- 'comment-update': '_handleCommentUpdate',
- 'comment-save': '_handleCommentSave',
-
- 'render-start': '_handleRenderStart',
- 'render-content': '_handleRenderContent',
-
- 'normalize-range': '_handleNormalizeRange',
- 'diff-context-expanded': '_handleDiffContextExpanded',
- },
-
- observers: [
- '_whitespaceChanged(prefs.ignore_whitespace, _loadedWhitespaceLevel,' +
+ static get observers() {
+ return [
+ '_whitespaceChanged(prefs.ignore_whitespace, _loadedWhitespaceLevel,' +
' noRenderOnPrefsChange)',
- '_syntaxHighlightingChanged(noRenderOnPrefsChange, prefs.*)',
- ],
+ '_syntaxHighlightingChanged(noRenderOnPrefsChange, prefs.*)',
+ ];
+ }
+
+ created() {
+ super.created();
+ this.addEventListener(
+ // These are named inconsistently for a reason:
+ // The create-comment event is fired to indicate that we should
+ // create a comment.
+ // The comment-* events are just notifying that the comments did already
+ // change in some way, and that we should update any models we may want
+ // to keep in sync.
+ 'create-comment',
+ e => this._handleCreateComment(e));
+ this.addEventListener('comment-discard',
+ e => this._handleCommentDiscard(e));
+ this.addEventListener('comment-update',
+ e => this._handleCommentUpdate(e));
+ this.addEventListener('comment-save',
+ e => this._handleCommentSave(e));
+ this.addEventListener('render-start',
+ () => this._handleRenderStart());
+ this.addEventListener('render-content',
+ () => this._handleRenderContent());
+ this.addEventListener('normalize-range',
+ event => this._handleNormalizeRange(event));
+ this.addEventListener('diff-context-expanded',
+ event => this._handleDiffContextExpanded(event));
+ }
ready() {
+ super.ready();
if (this._canReload()) {
this.reload();
}
- },
+ }
attached() {
+ super.attached();
this._getLoggedIn().then(loggedIn => {
this._loggedIn = loggedIn;
});
- },
+ }
/**
* @param {boolean=} shouldReportMetric indicate a new Diff Page. This is a
@@ -364,7 +381,7 @@
console.warn('Error encountered loading diff:', err);
})
.then(() => { this._loading = false; });
- },
+ }
_getFilesWeblinks(diff) {
if (!this.commitRange) {
@@ -378,30 +395,30 @@
this.projectName, this.commitRange.commit, this.path,
{weblinks: diff && diff.meta_b && diff.meta_b.web_links}),
};
- },
+ }
/** Cancel any remaining diff builder rendering work. */
cancel() {
this.$.diff.cancel();
- },
+ }
/** @return {!Array<!HTMLElement>} */
getCursorStops() {
return this.$.diff.getCursorStops();
- },
+ }
/** @return {boolean} */
isRangeSelected() {
return this.$.diff.isRangeSelected();
- },
+ }
createRangeComment() {
return this.$.diff.createRangeComment();
- },
+ }
toggleLeftDiff() {
this.$.diff.toggleLeftDiff();
- },
+ }
/**
* Load and display blame information for the base of the diff.
@@ -418,12 +435,12 @@
this._blame = blame;
});
- },
+ }
/** Unload blame information for the diff. */
clearBlame() {
this._blame = null;
- },
+ }
/**
* The thread elements in this diff, in no particular order.
@@ -432,31 +449,31 @@
getThreadEls() {
return Array.from(
Polymer.dom(this.$.diff).querySelectorAll('.comment-thread'));
- },
+ }
/** @param {HTMLElement} el */
addDraftAtLine(el) {
this.$.diff.addDraftAtLine(el);
- },
+ }
clearDiffContent() {
this.$.diff.clearDiffContent();
- },
+ }
expandAllContext() {
this.$.diff.expandAllContext();
- },
+ }
/** @return {!Promise} */
_getLoggedIn() {
return this.$.restAPI.getLoggedIn();
- },
+ }
/** @return {boolean}} */
_canReload() {
return !!this.changeNum && !!this.patchRange && !!this.path &&
!this.noAutoRender;
- },
+ }
/** @return {!Promise<!Object>} */
_getDiff() {
@@ -472,7 +489,7 @@
reject)
.then(resolve);
});
- },
+ }
_handleGetDiffError(response) {
// Loading the diff may respond with 409 if the file is too large. In this
@@ -492,7 +509,7 @@
}
this.fire('page-error', {response});
- },
+ }
/**
* Report info about the diff response.
@@ -533,7 +550,7 @@
this.$.reporting.reportInteraction(EVENT_NONZERO_REBASE,
percentRebaseDelta);
}
- },
+ }
/**
* @param {Object} diff
@@ -550,7 +567,7 @@
this._revisionImage = null;
return Promise.resolve();
}
- },
+ }
/**
* @param {Object} diff
@@ -558,7 +575,7 @@
*/
_computeIsImageDiff(diff) {
return isImageDiff(diff);
- },
+ }
_commentsChanged(newComments) {
const allComments = [];
@@ -579,7 +596,7 @@
const threadEl = this._createThreadElement(thread);
this._attachThreadElement(threadEl);
}
- },
+ }
/**
* @param {!Array<!Object>} comments
@@ -621,7 +638,7 @@
threads.push(newThread);
}
return threads;
- },
+ }
/**
* @param {Object} blame
@@ -629,7 +646,7 @@
*/
_computeIsBlameLoaded(blame) {
return !!blame;
- },
+ }
/**
* @param {Object} diff
@@ -638,7 +655,7 @@
_getImages(diff) {
return this.$.restAPI.getImagesForDiff(this.changeNum, diff,
this.patchRange);
- },
+ }
/** @param {CustomEvent} e */
_handleCreateComment(e) {
@@ -648,7 +665,7 @@
threadEl.addOrEditDraft(lineNum, range);
this.$.reporting.recordDraftInteraction();
- },
+ }
/**
* Gets or creates a comment thread at a given location.
@@ -675,18 +692,18 @@
this._attachThreadElement(threadEl);
}
return threadEl;
- },
+ }
_attachThreadElement(threadEl) {
Polymer.dom(this.$.diff).appendChild(threadEl);
- },
+ }
_clearThreads() {
for (const threadEl of this.getThreadEls()) {
const parent = Polymer.dom(threadEl).parentNode;
Polymer.dom(parent).removeChild(threadEl);
}
- },
+ }
_createThreadElement(thread) {
const threadEl = document.createElement('gr-comment-thread');
@@ -717,7 +734,7 @@
};
threadEl.addEventListener('thread-discard', threadDiscardListener);
return threadEl;
- },
+ }
/**
* Gets a comment thread element at a given location.
@@ -746,7 +763,7 @@
const filteredThreadEls = this._filterThreadElsForLocation(
this.getThreadEls(), line, commentSide).filter(matchesRange);
return filteredThreadEls.length ? filteredThreadEls[0] : null;
- },
+ }
/**
* @param {!Array<!HTMLElement>} threadEls
@@ -791,14 +808,14 @@
}
return threadEls.filter(threadEl =>
matchers.some(matcher => matcher(threadEl)));
- },
+ }
_getIgnoreWhitespace() {
if (!this.prefs || !this.prefs.ignore_whitespace) {
return WHITESPACE_IGNORE_NONE;
}
return this.prefs.ignore_whitespace;
- },
+ }
_whitespaceChanged(
preferredWhitespaceLevel, loadedWhitespaceLevel,
@@ -816,7 +833,7 @@
!noRenderOnPrefsChange) {
this.reload();
}
- },
+ }
_syntaxHighlightingChanged(noRenderOnPrefsChange, prefsChangeRecord) {
// Polymer 2: check for undefined
@@ -834,7 +851,7 @@
if (!noRenderOnPrefsChange) {
this.reload();
}
- },
+ }
/**
* @param {Object} patchRangeRecord
@@ -843,7 +860,7 @@
_computeParentIndex(patchRangeRecord) {
return this.isMergeParent(patchRangeRecord.base.basePatchNum) ?
this.getParentIndex(patchRangeRecord.base.basePatchNum) : null;
- },
+ }
_handleCommentSave(e) {
const comment = e.detail.comment;
@@ -851,13 +868,13 @@
const idx = this._findDraftIndex(comment, side);
this.set(['comments', side, idx], comment);
this._handleCommentSaveOrDiscard();
- },
+ }
_handleCommentDiscard(e) {
const comment = e.detail.comment;
this._removeComment(comment);
this._handleCommentSaveOrDiscard();
- },
+ }
/**
* Closure annotation for Polymer.prototype.push is off. Submitted PR:
@@ -878,17 +895,17 @@
} else { // Create new draft.
this.push(['comments', side], comment);
}
- },
+ }
_handleCommentSaveOrDiscard() {
this.dispatchEvent(new CustomEvent(
'diff-comments-modified', {bubbles: true, composed: true}));
- },
+ }
_removeComment(comment) {
const side = comment.__commentSide;
this._removeCommentFromSide(comment, side);
- },
+ }
_removeCommentFromSide(comment, side) {
let idx = this._findCommentIndex(comment, side);
@@ -898,7 +915,7 @@
if (idx !== -1) {
this.splice('comments.' + side, idx, 1);
}
- },
+ }
/** @return {number} */
_findCommentIndex(comment, side) {
@@ -906,7 +923,7 @@
return -1;
}
return this.comments[side].findIndex(item => item.id === comment.id);
- },
+ }
/** @return {number} */
_findDraftIndex(comment, side) {
@@ -915,7 +932,7 @@
}
return this.comments[side].findIndex(
item => item.__draftID === comment.__draftID);
- },
+ }
_isSyntaxHighlightingEnabled(preferenceChangeRecord, diff) {
if (!preferenceChangeRecord ||
@@ -926,7 +943,7 @@
}
return !this._anyLineTooLong(diff) &&
this.$.diff.getDiffLength(diff) <= SYNTAX_MAX_DIFF_LENGTH;
- },
+ }
/**
* @return {boolean} whether any of the lines in diff are longer
@@ -940,7 +957,7 @@
(section.a || []).concat(section.b || []);
return lines.some(line => line.length >= SYNTAX_MAX_LINE_LENGTH);
});
- },
+ }
_listenToViewportRender() {
const renderUpdateListener = start => {
@@ -951,26 +968,28 @@
};
this.$.syntaxLayer.addListener(renderUpdateListener);
- },
+ }
_handleRenderStart() {
this.$.reporting.time(TimingLabel.TOTAL);
this.$.reporting.time(TimingLabel.CONTENT);
- },
+ }
_handleRenderContent() {
this.$.reporting.timeEnd(TimingLabel.CONTENT);
- },
+ }
_handleNormalizeRange(event) {
this.$.reporting.reportInteraction('normalize-range',
`Modified invalid comment range on l. ${event.detail.lineNum}` +
` of the ${event.detail.side} side`);
- },
+ }
_handleDiffContextExpanded(event) {
this.$.reporting.reportInteraction(
'diff-context-expanded', event.detail.numLines);
- },
- });
+ }
+ }
+
+ customElements.define(GrDiffHost.is, GrDiffHost);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.js b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.js
index 88dd91a..8d8785a 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.js
@@ -17,34 +17,38 @@
(function() {
'use strict';
- Polymer({
- is: 'gr-diff-mode-selector',
+ class GrDiffModeSelector extends Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element)) {
+ static get is() { return 'gr-diff-mode-selector'; }
- properties: {
- mode: {
- type: String,
- notify: true,
- },
+ static get properties() {
+ return {
+ mode: {
+ type: String,
+ notify: true,
+ },
- /**
+ /**
* If set to true, the user's preference will be updated every time a
* button is tapped. Don't set to true if there is no user.
*/
- saveOnChange: {
- type: Boolean,
- value: false,
- },
-
- /** @type {?} */
- _VIEW_MODES: {
- type: Object,
- readOnly: true,
- value: {
- SIDE_BY_SIDE: 'SIDE_BY_SIDE',
- UNIFIED: 'UNIFIED_DIFF',
+ saveOnChange: {
+ type: Boolean,
+ value: false,
},
- },
- },
+
+ /** @type {?} */
+ _VIEW_MODES: {
+ type: Object,
+ readOnly: true,
+ value: {
+ SIDE_BY_SIDE: 'SIDE_BY_SIDE',
+ UNIFIED: 'UNIFIED_DIFF',
+ },
+ },
+ };
+ }
/**
* Set the mode. If save on change is enabled also update the preference.
@@ -54,18 +58,20 @@
this.$.restAPI.savePreferences({diff_view: newMode});
}
this.mode = newMode;
- },
+ }
_computeSelectedClass(diffViewMode, buttonViewMode) {
return buttonViewMode === diffViewMode ? 'selected' : '';
- },
+ }
_handleSideBySideTap() {
this.setMode(this._VIEW_MODES.SIDE_BY_SIDE);
- },
+ }
_handleUnifiedTap() {
this.setMode(this._VIEW_MODES.UNIFIED);
- },
- });
+ }
+ }
+
+ customElements.define(GrDiffModeSelector.is, GrDiffModeSelector);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-preferences-dialog/gr-diff-preferences-dialog.js b/polygerrit-ui/app/elements/diff/gr-diff-preferences-dialog/gr-diff-preferences-dialog.js
index 6ecd4d6..2d79311 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-preferences-dialog/gr-diff-preferences-dialog.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-preferences-dialog/gr-diff-preferences-dialog.js
@@ -17,39 +17,44 @@
(function() {
'use strict';
- Polymer({
- is: 'gr-diff-preferences-dialog',
+ /**
+ * @appliesMixin Gerrit.FireMixin
+ */
+ class GrDiffPreferencesDialog extends Polymer.mixinBehaviors( [
+ Gerrit.FireBehavior,
+ ], Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element))) {
+ static get is() { return 'gr-diff-preferences-dialog'; }
- properties: {
+ static get properties() {
+ return {
/** @type {?} */
- diffPrefs: Object,
+ diffPrefs: Object,
- _diffPrefsChanged: Boolean,
- },
-
- behaviors: [
- Gerrit.FireBehavior,
- ],
+ _diffPrefsChanged: Boolean,
+ };
+ }
getFocusStops() {
return {
start: this.$.diffPreferences.$.contextSelect,
end: this.$.saveButton,
};
- },
+ }
resetFocus() {
this.$.diffPreferences.$.contextSelect.focus();
- },
+ }
_computeHeaderClass(changed) {
return changed ? 'edited' : '';
- },
+ }
_handleCancelDiff(e) {
e.stopPropagation();
this.$.diffPrefsOverlay.close();
- },
+ }
open() {
this.$.diffPrefsOverlay.open().then(() => {
@@ -57,7 +62,7 @@
this.$.diffPrefsOverlay.setFocusStops(focusStops);
this.resetFocus();
});
- },
+ }
_handleSaveDiffPreferences() {
this.$.diffPreferences.save().then(() => {
@@ -65,6 +70,8 @@
this.$.diffPrefsOverlay.close();
});
- },
- });
+ }
+ }
+
+ customElements.define(GrDiffPreferencesDialog.is, GrDiffPreferencesDialog);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.js b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.js
index b67bde3..817da45 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.js
@@ -64,71 +64,77 @@
* that the part that is within the context or has comments is shown, while
* the rest is not.
*/
- Polymer({
- is: 'gr-diff-processor',
+ class GrDiffProcessor extends Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element)) {
+ static get is() { return 'gr-diff-processor'; }
- properties: {
+ static get properties() {
+ return {
- /**
+ /**
* The amount of context around collapsed groups.
*/
- context: Number,
+ context: Number,
- /**
+ /**
* The array of groups output by the processor.
*/
- groups: {
- type: Array,
- notify: true,
- },
+ groups: {
+ type: Array,
+ notify: true,
+ },
- /**
+ /**
* Locations that should not be collapsed, including the locations of
* comments.
*/
- keyLocations: {
- type: Object,
- value() { return {left: {}, right: {}}; },
- },
+ keyLocations: {
+ type: Object,
+ value() { return {left: {}, right: {}}; },
+ },
- /**
+ /**
* The maximum number of lines to process synchronously.
*/
- _asyncThreshold: {
- type: Number,
- value: 64,
- },
+ _asyncThreshold: {
+ type: Number,
+ value: 64,
+ },
- /** @type {?number} */
- _nextStepHandle: Number,
- /**
+ /** @type {?number} */
+ _nextStepHandle: Number,
+ /**
* The promise last returned from `process()` while the asynchronous
* processing is running - `null` otherwise. Provides a `cancel()`
* method that rejects it with `{isCancelled: true}`.
* @type {?Object}
*/
- _processPromise: {
- type: Object,
- value: null,
- },
- _isScrolling: Boolean,
- },
+ _processPromise: {
+ type: Object,
+ value: null,
+ },
+ _isScrolling: Boolean,
+ };
+ }
attached() {
+ super.attached();
this.listen(window, 'scroll', '_handleWindowScroll');
- },
+ }
detached() {
+ super.detached();
this.cancel();
this.unlisten(window, 'scroll', '_handleWindowScroll');
- },
+ }
_handleWindowScroll() {
this._isScrolling = true;
this.debounce('resetIsScrolling', () => {
this._isScrolling = false;
}, 50);
- },
+ }
/**
* Asynchronously process the diff chunks into groups. As it processes, it
@@ -196,7 +202,7 @@
}));
return this._processPromise
.finally(() => { this._processPromise = null; });
- },
+ }
/**
* Cancel any jobs that are running.
@@ -209,7 +215,7 @@
if (this._processPromise) {
this._processPromise.cancel();
}
- },
+ }
/**
* Process the next uncollapsible chunk, or the next collapsible chunks.
@@ -236,15 +242,15 @@
return this._processCollapsibleChunks(
state, chunks, firstUncollapsibleChunkIndex);
- },
+ }
_linesLeft(chunk) {
return chunk.ab || chunk.a || [];
- },
+ }
_linesRight(chunk) {
return chunk.ab || chunk.b || [];
- },
+ }
_firstUncollapsibleChunkIndex(chunks, offset) {
let chunkIndex = offset;
@@ -253,11 +259,11 @@
chunkIndex++;
}
return chunkIndex;
- },
+ }
_isCollapsibleChunk(chunk) {
return (chunk.ab || chunk.common) && !chunk.keyLocation;
- },
+ }
/**
* Process a stretch of collapsible chunks.
@@ -303,7 +309,7 @@
groups,
newChunkIndex: firstUncollapsibleChunkIndex,
};
- },
+ }
_commonChunkLength(chunk) {
console.assert(chunk.ab || chunk.common);
@@ -311,7 +317,7 @@
!chunk.a || (chunk.b && chunk.a.length === chunk.b.length),
`common chunk needs same number of a and b lines: `, chunk);
return this._linesLeft(chunk).length;
- },
+ }
/**
* @param {!Array<!Object>} chunks
@@ -327,7 +333,7 @@
offsetRight += chunkLength;
return group;
});
- },
+ }
/**
* @param {!Object} chunk
@@ -343,7 +349,7 @@
group.dueToRebase = chunk.due_to_rebase;
group.ignoredWhitespaceOnly = chunk.common;
return group;
- },
+ }
_linesFromChunk(chunk, offsetLeft, offsetRight) {
if (chunk.ab) {
@@ -366,7 +372,7 @@
chunk[DiffHighlights.ADDED]));
}
return lines;
- },
+ }
/**
* @param {string} lineType (GrDiffLine.Type)
@@ -380,7 +386,7 @@
this._convertIntralineInfos(rows, opt_intralineInfos) : undefined;
return rows.map((row, i) => this._lineFromRow(
lineType, offset, offset, row, i, grDiffHighlights));
- },
+ }
/**
* @param {string} type (GrDiffLine.Type)
@@ -403,14 +409,14 @@
line.hasIntralineInfo = false;
}
return line;
- },
+ }
_makeFileComments() {
const line = new GrDiffLine(GrDiffLine.Type.BOTH);
line.beforeNumber = GrDiffLine.FILE;
line.afterNumber = GrDiffLine.FILE;
return new GrDiffGroup(GrDiffGroup.Type.BOTH, [line]);
- },
+ }
/**
* Split chunks into smaller chunks of the same kind.
@@ -452,7 +458,7 @@
}
}
return newChunks;
- },
+ }
/**
* In order to show key locations, such as comments, out of the bounds of
@@ -503,7 +509,7 @@
}
return result;
- },
+ }
/**
* @return {!Array<{offset: number, keyLocation: boolean}>} Offsets of the
@@ -534,7 +540,7 @@
}
return result;
- },
+ }
_splitAtChunkEnds(lines, chunkEnds) {
const result = [];
@@ -545,7 +551,7 @@
lastChunkEndOffset = offset;
}
return result;
- },
+ }
/**
* Converts `IntralineInfo`s return by the API to `GrLineHighlights` used
@@ -595,7 +601,7 @@
normalized.push(lineHighlight);
}
return normalized;
- },
+ }
/**
* If a group is an addition or a removal, break it down into smaller groups
@@ -625,7 +631,7 @@
}
return subChunk;
});
- },
+ }
/**
* Given an array and a size, return an array of arrays where no inner array
@@ -643,6 +649,8 @@
const tail = array.slice(array.length - size);
return this._breakdown(head, size).concat([tail]);
- },
- });
+ }
+ }
+
+ customElements.define(GrDiffProcessor.is, GrDiffProcessor);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection.js b/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection.js
index c35c304..0dc0fba 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection.js
@@ -30,35 +30,46 @@
const getNewCache = () => { return {left: null, right: null}; };
- Polymer({
- is: 'gr-diff-selection',
+ /**
+ * @appliesMixin Gerrit.DomUtilMixin
+ */
+ class GrDiffSelection extends Polymer.mixinBehaviors( [
+ Gerrit.DomUtilBehavior,
+ ], Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element))) {
+ static get is() { return 'gr-diff-selection'; }
- properties: {
- diff: Object,
- /** @type {?Object} */
- _cachedDiffBuilder: Object,
- _linesCache: {
- type: Object,
- value: getNewCache(),
- },
- },
+ static get properties() {
+ return {
+ diff: Object,
+ /** @type {?Object} */
+ _cachedDiffBuilder: Object,
+ _linesCache: {
+ type: Object,
+ value: getNewCache(),
+ },
+ };
+ }
- observers: [
- '_diffChanged(diff)',
- ],
+ static get observers() {
+ return [
+ '_diffChanged(diff)',
+ ];
+ }
- listeners: {
- copy: '_handleCopy',
- down: '_handleDown',
- },
-
- behaviors: [
- Gerrit.DomUtilBehavior,
- ],
+ created() {
+ super.created();
+ this.addEventListener('copy',
+ e => this._handleCopy(e));
+ Polymer.Gestures.addListener(this, 'down',
+ e => this._handleDown(e));
+ }
attached() {
+ super.attached();
this.classList.add(SelectionClass.RIGHT);
- },
+ }
get diffBuilder() {
if (!this._cachedDiffBuilder) {
@@ -66,11 +77,11 @@
Polymer.dom(this).querySelector('gr-diff-builder');
}
return this._cachedDiffBuilder;
- },
+ }
_diffChanged() {
this._linesCache = getNewCache();
- },
+ }
_handleDownOnRangeComment(node) {
if (node &&
@@ -85,7 +96,7 @@
return true;
}
return false;
- },
+ }
_handleDown(e) {
// Handle the down event on comment thread in Polymer 2
@@ -115,7 +126,7 @@
}
this._setClasses(targetClasses);
- },
+ }
/**
* Set the provided list of classes on the element, to the exclusion of all
@@ -138,11 +149,11 @@
this.classList.add(_class);
}
}
- },
+ }
_getCopyEventTarget(e) {
return Polymer.dom(e).rootTarget;
- },
+ }
/**
* Utility function to determine whether an element is a descendant of
@@ -155,7 +166,7 @@
_elementDescendedFromClass(element, className) {
return this.descendedFromClass(element, className,
this.diffBuilder.diffElement);
- },
+ }
_handleCopy(e) {
let commentSelected = false;
@@ -175,7 +186,7 @@
e.clipboardData.setData('Text', text);
e.preventDefault();
}
- },
+ }
/**
* For Polymer 2, use shadowRoot.getSelection instead.
@@ -186,7 +197,7 @@
diffHost.shadowRoot &&
diffHost.shadowRoot.getSelection();
return selection ? selection: window.getSelection();
- },
+ }
/**
* Get the text of the current selection. If commentSelected is
@@ -225,7 +236,7 @@
return this._getRangeFromDiff(startLineNum, range.startOffset, endLineNum,
range.endOffset, side);
- },
+ }
/**
* Query the diff object for the selected lines.
@@ -247,7 +258,7 @@
lines[0] = lines[0].substring(startOffset);
}
return lines.join('\n');
- },
+ }
/**
* Query the diff object for the lines from a particular side.
@@ -270,7 +281,7 @@
}
this._linesCache[side] = lines;
return lines;
- },
+ }
/**
* Query the diffElement for comments and check whether they lie inside the
@@ -308,7 +319,7 @@
}
return content.join('\n');
- },
+ }
/**
* Given a DOM node, a selection, and a selection range, recursively get all
@@ -338,6 +349,8 @@
}
}
return text;
- },
- });
+ }
+ }
+
+ customElements.define(GrDiffSelection.is, GrDiffSelection);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
index f44587c2..4c401cf 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
@@ -33,9 +33,23 @@
UNIFIED: 'UNIFIED_DIFF',
};
- Polymer({
- is: 'gr-diff-view',
-
+ /**
+ * @appliesMixin Gerrit.FireMixin
+ * @appliesMixin Gerrit.KeyboardShortcutMixin
+ * @appliesMixin Gerrit.PatchSetMixin
+ * @appliesMixin Gerrit.PathListMixin
+ * @appliesMixin Gerrit.RESTClientMixin
+ */
+ class GrDiffView extends Polymer.mixinBehaviors( [
+ Gerrit.FireBehavior,
+ Gerrit.KeyboardShortcutBehavior,
+ Gerrit.PatchSetBehavior,
+ Gerrit.PathListBehavior,
+ Gerrit.RESTClientBehavior,
+ ], Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element))) {
+ static get is() { return 'gr-diff-view'; }
/**
* Fired when the title of the page should change.
*
@@ -48,154 +62,152 @@
* @event show-alert
*/
- properties: {
+ static get properties() {
+ return {
/**
* URL params passed from the router.
*/
- params: {
- type: Object,
- observer: '_paramsChanged',
- },
- keyEventTarget: {
- type: Object,
- value() { return document.body; },
- },
- /**
+ params: {
+ type: Object,
+ observer: '_paramsChanged',
+ },
+ keyEventTarget: {
+ type: Object,
+ value() { return document.body; },
+ },
+ /**
* @type {{ diffMode: (string|undefined) }}
*/
- changeViewState: {
- type: Object,
- notify: true,
- value() { return {}; },
- observer: '_changeViewStateChanged',
- },
- disableDiffPrefs: {
- type: Boolean,
- value: false,
- },
- _diffPrefsDisabled: {
- type: Boolean,
- computed: '_computeDiffPrefsDisabled(disableDiffPrefs, _loggedIn)',
- },
- /** @type {?} */
- _patchRange: Object,
- /** @type {?} */
- _commitRange: Object,
- /**
+ changeViewState: {
+ type: Object,
+ notify: true,
+ value() { return {}; },
+ observer: '_changeViewStateChanged',
+ },
+ disableDiffPrefs: {
+ type: Boolean,
+ value: false,
+ },
+ _diffPrefsDisabled: {
+ type: Boolean,
+ computed: '_computeDiffPrefsDisabled(disableDiffPrefs, _loggedIn)',
+ },
+ /** @type {?} */
+ _patchRange: Object,
+ /** @type {?} */
+ _commitRange: Object,
+ /**
* @type {{
* subject: string,
* project: string,
* revisions: string,
* }}
*/
- _change: Object,
- /** @type {?} */
- _changeComments: Object,
- _changeNum: String,
- /**
+ _change: Object,
+ /** @type {?} */
+ _changeComments: Object,
+ _changeNum: String,
+ /**
* This is a DiffInfo object.
* This is retrieved and owned by a child component.
*/
- _diff: Object,
- // An array specifically formatted to be used in a gr-dropdown-list
- // element for selected a file to view.
- _formattedFiles: {
- type: Array,
- computed: '_formatFilesForDropdown(_fileList, ' +
+ _diff: Object,
+ // An array specifically formatted to be used in a gr-dropdown-list
+ // element for selected a file to view.
+ _formattedFiles: {
+ type: Array,
+ computed: '_formatFilesForDropdown(_fileList, ' +
'_patchRange.patchNum, _changeComments)',
- },
- // An sorted array of files, as returned by the rest API.
- _fileList: {
- type: Array,
- value() { return []; },
- },
- _path: {
- type: String,
- observer: '_pathChanged',
- },
- _fileNum: {
- type: Number,
- computed: '_computeFileNum(_path, _formattedFiles)',
- },
- _loggedIn: {
- type: Boolean,
- value: false,
- },
- _loading: {
- type: Boolean,
- value: true,
- },
- _prefs: Object,
- _localPrefs: Object,
- _projectConfig: Object,
- _userPrefs: Object,
- _diffMode: {
- type: String,
- computed: '_getDiffViewMode(changeViewState.diffMode, _userPrefs)',
- },
- _isImageDiff: Boolean,
- _filesWeblinks: Object,
+ },
+ // An sorted array of files, as returned by the rest API.
+ _fileList: {
+ type: Array,
+ value() { return []; },
+ },
+ _path: {
+ type: String,
+ observer: '_pathChanged',
+ },
+ _fileNum: {
+ type: Number,
+ computed: '_computeFileNum(_path, _formattedFiles)',
+ },
+ _loggedIn: {
+ type: Boolean,
+ value: false,
+ },
+ _loading: {
+ type: Boolean,
+ value: true,
+ },
+ _prefs: Object,
+ _localPrefs: Object,
+ _projectConfig: Object,
+ _userPrefs: Object,
+ _diffMode: {
+ type: String,
+ computed: '_getDiffViewMode(changeViewState.diffMode, _userPrefs)',
+ },
+ _isImageDiff: Boolean,
+ _filesWeblinks: Object,
- /**
+ /**
* Map of paths in the current change and patch range that have comments
* or drafts or robot comments.
*/
- _commentMap: Object,
+ _commentMap: Object,
- _commentsForDiff: Object,
+ _commentsForDiff: Object,
- /**
+ /**
* Object to contain the path of the next and previous file in the current
* change and patch range that has comments.
*/
- _commentSkips: {
- type: Object,
- computed: '_computeCommentSkips(_commentMap, _fileList, _path)',
- },
- _panelFloatingDisabled: {
- type: Boolean,
- value: () => { return window.PANEL_FLOATING_DISABLED; },
- },
- _editMode: {
- type: Boolean,
- computed: '_computeEditMode(_patchRange.*)',
- },
- _isBlameLoaded: Boolean,
- _isBlameLoading: {
- type: Boolean,
- value: false,
- },
- _allPatchSets: {
- type: Array,
- computed: 'computeAllPatchSets(_change, _change.revisions.*)',
- },
- _revisionInfo: {
- type: Object,
- computed: '_getRevisionInfo(_change)',
- },
- _reviewedFiles: {
- type: Object,
- value: () => new Set(),
- },
- },
+ _commentSkips: {
+ type: Object,
+ computed: '_computeCommentSkips(_commentMap, _fileList, _path)',
+ },
+ _panelFloatingDisabled: {
+ type: Boolean,
+ value: () => { return window.PANEL_FLOATING_DISABLED; },
+ },
+ _editMode: {
+ type: Boolean,
+ computed: '_computeEditMode(_patchRange.*)',
+ },
+ _isBlameLoaded: Boolean,
+ _isBlameLoading: {
+ type: Boolean,
+ value: false,
+ },
+ _allPatchSets: {
+ type: Array,
+ computed: 'computeAllPatchSets(_change, _change.revisions.*)',
+ },
+ _revisionInfo: {
+ type: Object,
+ computed: '_getRevisionInfo(_change)',
+ },
+ _reviewedFiles: {
+ type: Object,
+ value: () => new Set(),
+ },
+ };
+ }
- behaviors: [
- Gerrit.FireBehavior,
- Gerrit.KeyboardShortcutBehavior,
- Gerrit.PatchSetBehavior,
- Gerrit.PathListBehavior,
- Gerrit.RESTClientBehavior,
- ],
+ static get observers() {
+ return [
+ '_getProjectConfig(_change.project)',
+ '_getFiles(_changeNum, _patchRange.*)',
+ '_setReviewedObserver(_loggedIn, params.*, _prefs)',
+ ];
+ }
- observers: [
- '_getProjectConfig(_change.project)',
- '_getFiles(_changeNum, _patchRange.*)',
- '_setReviewedObserver(_loggedIn, params.*, _prefs)',
- ],
-
- keyBindings: {
- esc: '_handleEscKey',
- },
+ get keyBindings() {
+ return {
+ esc: '_handleEscKey',
+ };
+ }
keyboardShortcuts() {
return {
@@ -230,37 +242,38 @@
[this.Shortcut.EXPAND_ALL_COMMENT_THREADS]: null,
[this.Shortcut.COLLAPSE_ALL_COMMENT_THREADS]: null,
};
- },
+ }
attached() {
+ super.attached();
this._getLoggedIn().then(loggedIn => {
this._loggedIn = loggedIn;
});
this.$.cursor.push('diffs', this.$.diffHost);
- },
+ }
_getLoggedIn() {
return this.$.restAPI.getLoggedIn();
- },
+ }
_getProjectConfig(project) {
return this.$.restAPI.getProjectConfig(project).then(
config => {
this._projectConfig = config;
});
- },
+ }
_getChangeDetail(changeNum) {
return this.$.restAPI.getDiffChangeDetail(changeNum).then(change => {
this._change = change;
return change;
});
- },
+ }
_getChangeEdit(changeNum) {
return this.$.restAPI.getChangeEdit(this._changeNum);
- },
+ }
_getFiles(changeNum, patchRangeRecord) {
// Polymer 2: check for undefined
@@ -274,25 +287,25 @@
changeNum, patchRange).then(files => {
this._fileList = files;
});
- },
+ }
_getDiffPreferences() {
return this.$.restAPI.getDiffPreferences().then(prefs => {
this._prefs = prefs;
});
- },
+ }
_getPreferences() {
return this.$.restAPI.getPreferences();
- },
+ }
_getWindowWidth() {
return window.innerWidth;
- },
+ }
_handleReviewedChange(e) {
this._setReviewed(Polymer.dom(e).rootTarget.checked);
- },
+ }
_setReviewed(reviewed) {
if (this._editMode) { return; }
@@ -301,12 +314,12 @@
this.fire('show-alert', {message: ERR_REVIEW_STATUS});
throw err;
});
- },
+ }
_saveReviewedState(reviewed) {
return this.$.restAPI.saveFileReviewed(this._changeNum,
this._patchRange.patchNum, this._path, reviewed);
- },
+ }
_handleToggleFileReviewed(e) {
if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -314,7 +327,7 @@
e.preventDefault();
this._setReviewed(!this.$.reviewed.checked);
- },
+ }
_handleEscKey(e) {
if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -322,21 +335,21 @@
e.preventDefault();
this.$.diffHost.displayLine = false;
- },
+ }
_handleLeftPane(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; }
e.preventDefault();
this.$.cursor.moveLeft();
- },
+ }
_handleRightPane(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; }
e.preventDefault();
this.$.cursor.moveRight();
- },
+ }
_handlePrevLineOrFileWithComments(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -350,7 +363,7 @@
e.preventDefault();
this.$.diffHost.displayLine = true;
this.$.cursor.moveUp();
- },
+ }
_handleNextLineOrFileWithComments(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -364,7 +377,7 @@
e.preventDefault();
this.$.diffHost.displayLine = true;
this.$.cursor.moveDown();
- },
+ }
_moveToPreviousFileWithComment() {
if (!this._commentSkips) { return; }
@@ -378,7 +391,7 @@
Gerrit.Nav.navigateToDiff(this._change, this._commentSkips.previous,
this._patchRange.patchNum, this._patchRange.basePatchNum);
- },
+ }
_moveToNextFileWithComment() {
if (!this._commentSkips) { return; }
@@ -391,14 +404,14 @@
Gerrit.Nav.navigateToDiff(this._change, this._commentSkips.next,
this._patchRange.patchNum, this._patchRange.basePatchNum);
- },
+ }
_handleNewComment(e) {
if (this.shouldSuppressKeyboardShortcut(e) ||
this.modifierPressed(e)) { return; }
e.preventDefault();
this.$.cursor.createCommentInPlace();
- },
+ }
_handlePrevFile(e) {
// Check for meta key to avoid overriding native chrome shortcut.
@@ -407,7 +420,7 @@
e.preventDefault();
this._navToFile(this._path, this._fileList, -1);
- },
+ }
_handleNextFile(e) {
// Check for meta key to avoid overriding native chrome shortcut.
@@ -416,7 +429,7 @@
e.preventDefault();
this._navToFile(this._path, this._fileList, 1);
- },
+ }
_handleNextChunkOrCommentThread(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -428,7 +441,7 @@
if (this.modifierPressed(e)) { return; }
this.$.cursor.moveToNextChunk();
}
- },
+ }
_handlePrevChunkOrCommentThread(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -440,7 +453,7 @@
if (this.modifierPressed(e)) { return; }
this.$.cursor.moveToPreviousChunk();
}
- },
+ }
_handleOpenReplyDialogOrToggleLeftPane(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -458,7 +471,7 @@
this.set('changeViewState.showReplyDialog', true);
e.preventDefault();
this._navToChangeView();
- },
+ }
_handleUpToChange(e) {
if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -466,7 +479,7 @@
e.preventDefault();
this._navToChangeView();
- },
+ }
_handleCommaKey(e) {
if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -475,7 +488,7 @@
e.preventDefault();
this.$.diffPreferencesDialog.open();
- },
+ }
_handleToggleDiffMode(e) {
if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -487,7 +500,7 @@
} else {
this.$.modeSelect.setMode(DiffViewMode.SIDE_BY_SIDE);
}
- },
+ }
_navToChangeView() {
if (!this._changeNum || !this._patchRange.patchNum) { return; }
@@ -495,7 +508,7 @@
this._change,
this._patchRange,
this._change && this._change.revisions);
- },
+ }
_navToFile(path, fileList, direction) {
const newPath = this._getNavLinkPath(path, fileList, direction);
@@ -511,7 +524,7 @@
Gerrit.Nav.navigateToDiff(this._change, newPath.path,
this._patchRange.patchNum, this._patchRange.basePatchNum);
- },
+ }
/**
* @param {?string} path The path of the current file being shown.
@@ -535,7 +548,7 @@
this._change && this._change.revisions);
}
return this._getDiffUrl(this._change, this._patchRange, newPath.path);
- },
+ }
/**
* Gives an object representing the target of navigating either left or
@@ -575,7 +588,7 @@
}
return {path: fileList[idx]};
- },
+ }
_getReviewedFiles(changeNum, patchNum) {
return this.$.restAPI.getReviewedFiles(changeNum, patchNum)
@@ -583,13 +596,13 @@
this._reviewedFiles = new Set(files);
return this._reviewedFiles;
});
- },
+ }
_getReviewedStatus(editMode, changeNum, patchNum, path) {
if (editMode) { return Promise.resolve(false); }
return this._getReviewedFiles(changeNum, patchNum)
.then(files => files.has(path));
- },
+ }
_paramsChanged(value) {
if (value.view !== Gerrit.Nav.View.DIFF) { return; }
@@ -676,7 +689,7 @@
// If diff view displayed has not ended yet, it ends here.
this.$.reporting.diffViewDisplayed();
});
- },
+ }
_changeViewStateChanged(changeViewState) {
if (changeViewState.diffMode === null) {
@@ -685,7 +698,7 @@
this.set('changeViewState.diffMode', prefs.default_diff_view);
});
}
- },
+ }
_setReviewedObserver(_loggedIn, paramsRecord, _prefs) {
// Polymer 2: check for undefined
@@ -709,7 +722,7 @@
if (params.view === Gerrit.Nav.View.DIFF) {
this._setReviewed(true);
}
- },
+ }
/**
* If the params specify a diff address then configure the diff cursor.
@@ -722,14 +735,14 @@
this.$.cursor.side = DiffSides.RIGHT;
}
this.$.cursor.initialLineNumber = params.lineNum;
- },
+ }
_getLineOfInterest(params) {
// If there is a line number specified, pass it along to the diff so that
// it will not get collapsed.
if (!params.lineNum) { return null; }
return {number: params.lineNum, leftSide: params.leftSide};
- },
+ }
_pathChanged(path) {
if (path) {
@@ -741,7 +754,7 @@
this.set('changeViewState.selectedFileIndex',
this._fileList.indexOf(path));
- },
+ }
_getDiffUrl(change, patchRange, path) {
if ([change, patchRange, path].some(arg => arg === undefined)) {
@@ -749,7 +762,7 @@
}
return Gerrit.Nav.getUrlForDiff(change, path, patchRange.patchNum,
patchRange.basePatchNum);
- },
+ }
_patchRangeStr(patchRange) {
let patchStr = patchRange.patchNum;
@@ -758,7 +771,7 @@
patchStr = patchRange.basePatchNum + '..' + patchRange.patchNum;
}
return patchStr;
- },
+ }
/**
* When the latest patch of the change is selected (and there is no base
@@ -782,7 +795,7 @@
basePatchNum = patchRange.basePatchNum;
}
return {patchNum, basePatchNum};
- },
+ }
_getChangePath(change, patchRange, revisions) {
if ([change, patchRange].some(arg => arg === undefined)) {
@@ -791,16 +804,16 @@
const range = this._getChangeUrlRange(patchRange, revisions);
return Gerrit.Nav.getUrlForChange(change, range.patchNum,
range.basePatchNum);
- },
+ }
_navigateToChange(change, patchRange, revisions) {
const range = this._getChangeUrlRange(patchRange, revisions);
Gerrit.Nav.navigateToChange(change, range.patchNum, range.basePatchNum);
- },
+ }
_computeChangePath(change, patchRangeRecord, revisions) {
return this._getChangePath(change, patchRangeRecord.base, revisions);
- },
+ }
_formatFilesForDropdown(fileList, patchNum, changeComments) {
// Polymer 2: check for undefined
@@ -824,7 +837,7 @@
});
}
return dropdownContent;
- },
+ }
_computeCommentString(changeComments, patchNum, path) {
const unresolvedCount = changeComments.computeUnresolvedNum(patchNum,
@@ -840,11 +853,11 @@
(commentString && unresolvedString ? ', ' : '') +
// Add parentheses around unresolved if it exists.
(unresolvedString ? `${unresolvedString}` : '');
- },
+ }
_computePrefsButtonHidden(prefs, prefsDisabled) {
return prefsDisabled || !prefs;
- },
+ }
_handleFileChange(e) {
// This is when it gets set initially.
@@ -855,7 +868,7 @@
Gerrit.Nav.navigateToDiff(this._change, path, this._patchRange.patchNum,
this._patchRange.basePatchNum);
- },
+ }
_handleFileTap(e) {
// async is needed so that that the click event is fired before the
@@ -863,7 +876,7 @@
this.async(() => {
this.$.dropdown.close();
}, 1);
- },
+ }
_handlePatchChange(e) {
const {basePatchNum, patchNum} = e.detail;
@@ -871,12 +884,12 @@
this.patchNumEquals(patchNum, this._patchRange.patchNum)) { return; }
Gerrit.Nav.navigateToDiff(
this._change, this._path, patchNum, basePatchNum);
- },
+ }
_handlePrefsTap(e) {
e.preventDefault();
this.$.diffPreferencesDialog.open();
- },
+ }
/**
* _getDiffViewMode: Get the diff view (side-by-side or unified) based on
@@ -901,11 +914,11 @@
} else {
return 'SIDE_BY_SIDE';
}
- },
+ }
_computeModeSelectHideClass(isImageDiff) {
return isImageDiff ? 'hide' : '';
- },
+ }
_onLineSelected(e, detail) {
this.$.cursor.moveToLineNumber(detail.number, detail.side);
@@ -917,7 +930,7 @@
this._change.project, this._path, this._patchRange.patchNum,
this._patchRange.basePatchNum, number, leftSide);
history.replaceState(null, '', url);
- },
+ }
_computeDownloadDropdownLinks(
project, changeNum, patchRange, path, diff) {
@@ -956,7 +969,7 @@
}
return links;
- },
+ }
_computeDownloadFileLink(
project, changeNum, patchRange, path, isBase) {
@@ -976,13 +989,13 @@
}
return url;
- },
+ }
_computeDownloadPatchLink(project, changeNum, patchRange, path) {
let url = this.changeBaseURL(project, changeNum, patchRange.patchNum);
url += '/patch?zip&path=' + encodeURIComponent(path);
return url;
- },
+ }
_loadComments() {
return this.$.commentAPI.loadAll(this._changeNum).then(comments => {
@@ -992,20 +1005,20 @@
this._commentsForDiff = this._getCommentsForPath(this._path,
this._patchRange, this._projectConfig);
});
- },
+ }
_getPaths(patchRange) {
return this._changeComments.getPaths(patchRange);
- },
+ }
_getCommentsForPath(path, patchRange, projectConfig) {
return this._changeComments.getCommentsBySideForPath(path, patchRange,
projectConfig);
- },
+ }
_getDiffDrafts() {
return this.$.restAPI.getDiffDrafts(this._changeNum);
- },
+ }
_computeCommentSkips(commentMap, fileList, path) {
// Polymer 2: check for undefined
@@ -1038,13 +1051,13 @@
}
return skips;
- },
+ }
_computeDiffClass(panelFloatingDisabled) {
if (panelFloatingDisabled) {
return 'noOverflow';
}
- },
+ }
/**
* @param {!Object} patchRangeRecord
@@ -1052,19 +1065,19 @@
_computeEditMode(patchRangeRecord) {
const patchRange = patchRangeRecord.base || {};
return this.patchNumEquals(patchRange.patchNum, this.EDIT_NAME);
- },
+ }
/**
* @param {boolean} editMode
*/
_computeContainerClass(editMode) {
return editMode ? 'editMode' : '';
- },
+ }
_computeBlameToggleLabel(loaded, loading) {
if (loaded) { return 'Hide blame'; }
return 'Show blame';
- },
+ }
/**
* Load and display blame information if it has not already been loaded.
@@ -1086,15 +1099,15 @@
.catch(() => {
this._isBlameLoading = false;
});
- },
+ }
_computeBlameLoaderClass(isImageDiff) {
return !isImageDiff ? 'show' : '';
- },
+ }
_getRevisionInfo(change) {
return new Gerrit.RevisionInfo(change);
- },
+ }
_computeFileNum(file, files) {
// Polymer 2: check for undefined
@@ -1103,7 +1116,7 @@
}
return files.findIndex(({value}) => value === file) + 1;
- },
+ }
/**
* @param {number} fileNum
@@ -1115,16 +1128,16 @@
return 'show';
}
return '';
- },
+ }
_handleExpandAllDiffContext(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; }
this.$.diffHost.expandAllContext();
- },
+ }
_computeDiffPrefsDisabled(disableDiffPrefs, loggedIn) {
return disableDiffPrefs || !loggedIn;
- },
+ }
_handleNextUnreviewedFile(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -1135,10 +1148,12 @@
.filter(file =>
(file === this._path || !this._reviewedFiles.has(file)));
this._navToFile(this._path, unreviewedFiles, 1);
- },
+ }
_handleReloadingDiffPreference() {
this._getDiffPreferences();
- },
- });
+ }
+ }
+
+ customElements.define(GrDiffView.is, GrDiffView);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
index e7c7189..727115b 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
@@ -91,9 +91,17 @@
const RENDER_DIFF_TABLE_DEBOUNCE_NAME = 'renderDiffTable';
- Polymer({
- is: 'gr-diff',
-
+ /**
+ * @appliesMixin Gerrit.FireMixin
+ * @appliesMixin Gerrit.PatchSetMixin
+ */
+ class GrDiff extends Polymer.mixinBehaviors( [
+ Gerrit.FireBehavior,
+ Gerrit.PatchSetBehavior,
+ ], Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element))) {
+ static get is() { return 'gr-diff'; }
/**
* Fired when the user selects a line.
* @event line-selected
@@ -126,89 +134,90 @@
* @event diff-context-expanded
*/
- properties: {
- changeNum: String,
- noAutoRender: {
- type: Boolean,
- value: false,
- },
- /** @type {?} */
- patchRange: Object,
- path: {
- type: String,
- observer: '_pathObserver',
- },
- prefs: {
- type: Object,
- observer: '_prefsObserver',
- },
- projectName: String,
- displayLine: {
- type: Boolean,
- value: false,
- },
- isImageDiff: {
- type: Boolean,
- },
- commitRange: Object,
- hidden: {
- type: Boolean,
- reflectToAttribute: true,
- },
- noRenderOnPrefsChange: Boolean,
- /** @type {!Array<!Gerrit.HoveredRange>} */
- _commentRanges: {
- type: Array,
- value: () => [],
- },
- /** @type {!Array<!Gerrit.CoverageRange>} */
- coverageRanges: {
- type: Array,
- value: () => [],
- },
- lineWrapping: {
- type: Boolean,
- value: false,
- observer: '_lineWrappingObserver',
- },
- viewMode: {
- type: String,
- value: DiffViewMode.SIDE_BY_SIDE,
- observer: '_viewModeObserver',
- },
+ static get properties() {
+ return {
+ changeNum: String,
+ noAutoRender: {
+ type: Boolean,
+ value: false,
+ },
+ /** @type {?} */
+ patchRange: Object,
+ path: {
+ type: String,
+ observer: '_pathObserver',
+ },
+ prefs: {
+ type: Object,
+ observer: '_prefsObserver',
+ },
+ projectName: String,
+ displayLine: {
+ type: Boolean,
+ value: false,
+ },
+ isImageDiff: {
+ type: Boolean,
+ },
+ commitRange: Object,
+ hidden: {
+ type: Boolean,
+ reflectToAttribute: true,
+ },
+ noRenderOnPrefsChange: Boolean,
+ /** @type {!Array<!Gerrit.HoveredRange>} */
+ _commentRanges: {
+ type: Array,
+ value: () => [],
+ },
+ /** @type {!Array<!Gerrit.CoverageRange>} */
+ coverageRanges: {
+ type: Array,
+ value: () => [],
+ },
+ lineWrapping: {
+ type: Boolean,
+ value: false,
+ observer: '_lineWrappingObserver',
+ },
+ viewMode: {
+ type: String,
+ value: DiffViewMode.SIDE_BY_SIDE,
+ observer: '_viewModeObserver',
+ },
- /** @type ?Gerrit.LineOfInterest */
- lineOfInterest: Object,
+ /** @type ?Gerrit.LineOfInterest */
+ lineOfInterest: Object,
- loading: {
- type: Boolean,
- value: false,
- observer: '_loadingChanged',
- },
+ loading: {
+ type: Boolean,
+ value: false,
+ observer: '_loadingChanged',
+ },
- loggedIn: {
- type: Boolean,
- value: false,
- },
- diff: {
- type: Object,
- observer: '_diffChanged',
- },
- _diffHeaderItems: {
- type: Array,
- value: [],
- computed: '_computeDiffHeaderItems(diff.*)',
- },
- _diffTableClass: {
- type: String,
- value: '',
- },
- /** @type {?Object} */
- baseImage: Object,
- /** @type {?Object} */
- revisionImage: Object,
+ loggedIn: {
+ type: Boolean,
+ value: false,
+ },
+ diff: {
+ type: Object,
+ observer: '_diffChanged',
+ },
+ _diffHeaderItems: {
+ type: Array,
+ value: [],
+ computed: '_computeDiffHeaderItems(diff.*)',
+ },
+ _diffTableClass: {
+ type: String,
+ value: '',
+ },
+ /** @type {?Object} */
+ baseImage: Object,
+ /** @type {?Object} */
+ revisionImage: Object,
- /**
+ /**
* Whether the safety check for large diffs when whole-file is set has
* been bypassed. If the value is null, then the safety has not been
* bypassed. If the value is a number, then that number represents the
@@ -216,83 +225,86 @@
*
* @type (number|null)
*/
- _safetyBypass: {
- type: Number,
- value: null,
- },
+ _safetyBypass: {
+ type: Number,
+ value: null,
+ },
- _showWarning: Boolean,
+ _showWarning: Boolean,
- /** @type {?string} */
- errorMessage: {
- type: String,
- value: null,
- },
+ /** @type {?string} */
+ errorMessage: {
+ type: String,
+ value: null,
+ },
- /** @type {?Object} */
- blame: {
- type: Object,
- value: null,
- observer: '_blameChanged',
- },
+ /** @type {?Object} */
+ blame: {
+ type: Object,
+ value: null,
+ observer: '_blameChanged',
+ },
- parentIndex: Number,
+ parentIndex: Number,
- _newlineWarning: {
- type: String,
- computed: '_computeNewlineWarning(diff)',
- },
+ _newlineWarning: {
+ type: String,
+ computed: '_computeNewlineWarning(diff)',
+ },
- _diffLength: Number,
+ _diffLength: Number,
- /**
+ /**
* Observes comment nodes added or removed after the initial render.
* Can be used to unregister when the entire diff is (re-)rendered or upon
* detachment.
* @type {?PolymerDomApi.ObserveHandle}
*/
- _incrementalNodeObserver: Object,
+ _incrementalNodeObserver: Object,
- /**
+ /**
* Observes comment nodes added or removed at any point.
* Can be used to unregister upon detachment.
* @type {?PolymerDomApi.ObserveHandle}
*/
- _nodeObserver: Object,
+ _nodeObserver: Object,
- /** Set by Polymer. */
- isAttached: Boolean,
- layers: Array,
- },
+ /** Set by Polymer. */
+ isAttached: Boolean,
+ layers: Array,
+ };
+ }
- behaviors: [
- Gerrit.FireBehavior,
- Gerrit.PatchSetBehavior,
- ],
+ static get observers() {
+ return [
+ '_enableSelectionObserver(loggedIn, isAttached)',
+ ];
+ }
- listeners: {
- 'create-range-comment': '_handleCreateRangeComment',
- 'render-content': '_handleRenderContent',
- },
-
- observers: [
- '_enableSelectionObserver(loggedIn, isAttached)',
- ],
+ created() {
+ super.created();
+ this.addEventListener('create-range-comment',
+ e => this._handleCreateRangeComment(e));
+ this.addEventListener('render-content',
+ () => this._handleRenderContent());
+ }
attached() {
+ super.attached();
this._observeNodes();
- },
+ }
detached() {
+ super.detached();
this._unobserveIncrementalNodes();
this._unobserveNodes();
- },
+ }
showNoChangeMessage(loading, prefs, diffLength) {
return !loading &&
prefs && prefs.ignore_whitespace !== 'IGNORE_NONE'
&& diffLength === 0;
- },
+ }
_enableSelectionObserver(loggedIn, isAttached) {
// Polymer 2: check for undefined
@@ -307,7 +319,7 @@
this.unlisten(document, 'selectionchange', '_handleSelectionChange');
this.unlisten(document, 'mouseup', '_handleMouseUp');
}
- },
+ }
_handleSelectionChange() {
// Because of shadow DOM selections, we handle the selectionchange here,
@@ -315,7 +327,7 @@
// corresponding range is determined and normalized.
const selection = this._getShadowOrDocumentSelection();
this.$.highlights.handleSelectionChange(selection, false);
- },
+ }
_handleMouseUp(e) {
// To handle double-click outside of text creating comments, we check on
@@ -323,7 +335,7 @@
// can't do that on selection change since the user may still be dragging.
const selection = this._getShadowOrDocumentSelection();
this.$.highlights.handleSelectionChange(selection, true);
- },
+ }
/** Gets the current selection, preferring the shadow DOM selection. */
_getShadowOrDocumentSelection() {
@@ -334,7 +346,7 @@
return this.root.getSelection ?
this.root.getSelection() :
document.getSelection();
- },
+ }
_observeNodes() {
this._nodeObserver = Polymer.dom(this).observeNodes(info => {
@@ -343,7 +355,7 @@
this._updateRanges(addedThreadEls, removedThreadEls);
this._redispatchHoverEvents(addedThreadEls);
});
- },
+ }
_updateRanges(addedThreadEls, removedThreadEls) {
function commentRangeFromThreadEl(threadEl) {
@@ -369,7 +381,7 @@
if (addedCommentRanges && addedCommentRanges.length) {
this.push('_commentRanges', ...addedCommentRanges);
}
- },
+ }
/**
* The key locations based on the comments and line of interests,
@@ -400,7 +412,7 @@
}
}
return keyLocations;
- },
+ }
// Dispatch events that are handled by the gr-diff-highlight.
_redispatchHoverEvents(addedThreadEls) {
@@ -414,13 +426,13 @@
'comment-thread-mouseleave', {bubbles: true, composed: true}));
});
}
- },
+ }
/** Cancel any remaining diff builder rendering work. */
cancel() {
this.$.diffBuilder.cancel();
this.cancelDebouncer(RENDER_DIFF_TABLE_DEBOUNCE_NAME);
- },
+ }
/** @return {!Array<!HTMLElement>} */
getCursorStops() {
@@ -430,16 +442,16 @@
return Array.from(
Polymer.dom(this.root).querySelectorAll('.diff-row'));
- },
+ }
/** @return {boolean} */
isRangeSelected() {
return !!this.$.highlights.selectedRange;
- },
+ }
toggleLeftDiff() {
this.toggleClass('no-left');
- },
+ }
_blameChanged(newValue) {
this.$.diffBuilder.setBlame(newValue);
@@ -448,7 +460,7 @@
} else {
this.classList.remove('showBlame');
}
- },
+ }
/** @return {string} */
_computeContainerClass(loggedIn, viewMode, displayLine) {
@@ -473,7 +485,7 @@
classes.push('displayLine');
}
return classes.join(' ');
- },
+ }
_handleTap(e) {
const el = Polymer.dom(e).localTarget;
@@ -491,7 +503,7 @@
const target = this.$.diffBuilder.getLineElByChild(el);
if (target) { this._selectLine(target); }
}
- },
+ }
_selectLine(el) {
this.fire('line-selected', {
@@ -499,7 +511,7 @@
number: el.getAttribute('data-value'),
path: this.path,
});
- },
+ }
addDraftAtLine(el) {
this._selectLine(el);
@@ -515,7 +527,7 @@
}
}
this._createComment(el, lineNum);
- },
+ }
createRangeComment() {
if (!this.isRangeSelected()) {
@@ -523,7 +535,7 @@
}
const {side, range} = this.$.highlights.selectedRange;
this._createCommentForSelection(side, range);
- },
+ }
_createCommentForSelection(side, range) {
const lineNum = range.end_line;
@@ -531,13 +543,13 @@
if (this._isValidElForComment(lineEl)) {
this._createComment(lineEl, lineNum, side, range);
}
- },
+ }
_handleCreateRangeComment(e) {
const range = e.detail.range;
const side = e.detail.side;
this._createCommentForSelection(side, range);
- },
+ }
/** @return {boolean} */
_isValidElForComment(el) {
@@ -561,7 +573,7 @@
return false;
}
return true;
- },
+ }
/**
* @param {!Object} lineEl
@@ -589,11 +601,11 @@
range,
},
}));
- },
+ }
_getThreadGroupForLine(contentEl) {
return contentEl.querySelector('.thread-group');
- },
+ }
/**
* Gets or creates a comment thread group for a specific line and side on a
@@ -612,7 +624,7 @@
contentEl.appendChild(threadGroupEl);
}
return threadGroupEl;
- },
+ }
/**
* The value to be used for the patch number of new comments created at the
@@ -638,7 +650,7 @@
patchNum = this.patchRange.basePatchNum;
}
return patchNum;
- },
+ }
/** @return {boolean} */
_getIsParentCommentByLineAndContent(lineEl, contentEl) {
@@ -649,7 +661,7 @@
return true;
}
return false;
- },
+ }
/** @return {string} */
_getCommentSideByLineAndContent(lineEl, contentEl) {
@@ -659,7 +671,7 @@
side = 'left';
}
return side;
- },
+ }
_prefsObserver(newPrefs, oldPrefs) {
// Scan the preference objects one level deep to see if they differ.
@@ -675,16 +687,16 @@
if (differ) {
this._prefsChanged(newPrefs);
}
- },
+ }
_pathObserver() {
// Call _prefsChanged(), because line-limit style value depends on path.
this._prefsChanged(this.prefs);
- },
+ }
_viewModeObserver() {
this._prefsChanged(this.prefs);
- },
+ }
/** @param {boolean} newValue */
_loadingChanged(newValue) {
@@ -695,11 +707,11 @@
this._showWarning = false;
this.clearDiffContent();
}
- },
+ }
_lineWrappingObserver() {
this._prefsChanged(this.prefs);
- },
+ }
_prefsChanged(prefs) {
if (!prefs) { return; }
@@ -730,14 +742,14 @@
if (this.diff && !this.noRenderOnPrefsChange) {
this._debounceRenderDiffTable();
}
- },
+ }
_diffChanged(newValue) {
if (newValue) {
this._diffLength = this.getDiffLength(newValue);
this._debounceRenderDiffTable();
}
- },
+ }
/**
* When called multiple times from the same microtask, will call
@@ -752,7 +764,7 @@
_debounceRenderDiffTable() {
this.debounce(
RENDER_DIFF_TABLE_DEBOUNCE_NAME, () => this._renderDiffTable());
- },
+ }
_renderDiffTable() {
this._unobserveIncrementalNodes();
@@ -782,7 +794,7 @@
detail: {contentRendered: true},
}));
});
- },
+ }
_handleRenderContent() {
this._incrementalNodeObserver = Polymer.dom(this).observeNodes(info => {
@@ -821,19 +833,19 @@
lastEl.replaceWith(lastEl);
}
});
- },
+ }
_unobserveIncrementalNodes() {
if (this._incrementalNodeObserver) {
Polymer.dom(this).unobserveNodes(this._incrementalNodeObserver);
}
- },
+ }
_unobserveNodes() {
if (this._nodeObserver) {
Polymer.dom(this).unobserveNodes(this._nodeObserver);
}
- },
+ }
/**
* Get the preferences object including the safety bypass context (if any).
@@ -843,12 +855,12 @@
return Object.assign({}, this.prefs, {context: this._safetyBypass});
}
return this.prefs;
- },
+ }
clearDiffContent() {
this._unobserveIncrementalNodes();
this.$.diffTable.innerHTML = null;
- },
+ }
/** @return {!Array} */
_computeDiffHeaderItems(diffInfoRecord) {
@@ -861,27 +873,27 @@
item.startsWith('--- ') ||
item === 'Binary files differ');
});
- },
+ }
/** @return {boolean} */
_computeDiffHeaderHidden(items) {
return items.length === 0;
- },
+ }
_handleFullBypass() {
this._safetyBypass = FULL_CONTEXT;
this._debounceRenderDiffTable();
- },
+ }
_handleLimitedBypass() {
this._safetyBypass = LIMITED_CONTEXT;
this._debounceRenderDiffTable();
- },
+ }
/** @return {string} */
_computeWarningClass(showWarning) {
return showWarning ? 'warn' : '';
- },
+ }
/**
* @param {string} errorMessage
@@ -889,11 +901,11 @@
*/
_computeErrorClass(errorMessage) {
return errorMessage ? 'showError' : '';
- },
+ }
expandAllContext() {
this._handleFullBypass();
- },
+ }
/**
* Find the last chunk for the given side.
@@ -929,7 +941,7 @@
if (chunkIndex === -1) { return null; }
return chunk;
- },
+ }
/**
* Check whether the specified side of the diff has a trailing newline.
@@ -950,7 +962,7 @@
lines = leftSide ? chunk.a : chunk.b;
}
return lines[lines.length - 1] === '';
- },
+ }
/**
* @param {!Object} diff
@@ -968,7 +980,7 @@
}
if (!messages.length) { return null; }
return messages.join(' — ');
- },
+ }
/**
* @param {string} warning
@@ -978,7 +990,7 @@
_computeNewlineWarningClass(warning, loading) {
if (loading || !warning) { return 'newlineWarning hidden'; }
return 'newlineWarning';
- },
+ }
/**
* Get the approximate length of the diff as the sum of the maximum
@@ -997,6 +1009,8 @@
sec.hasOwnProperty('b') ? sec.b.length : 0);
}
}, 0);
- },
- });
+ }
+ }
+
+ customElements.define(GrDiff.is, GrDiff);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.js b/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.js
index f4a84b7..14148a9 100644
--- a/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.js
+++ b/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.js
@@ -21,6 +21,9 @@
const PATCH_DESC_MAX_LENGTH = 500;
/**
+ * @appliesMixin Gerrit.PatchSetMixin
+ */
+ /**
* Fired when the patch range changes
*
* @event patch-range-change
@@ -28,44 +31,47 @@
* @property {string} patchNum
* @property {string} basePatchNum
*/
+ class GrPatchRangeSelect extends Polymer.mixinBehaviors( [
+ Gerrit.PatchSetBehavior,
+ ], Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element))) {
+ static get is() { return 'gr-patch-range-select'; }
- Polymer({
- is: 'gr-patch-range-select',
-
- properties: {
- availablePatches: Array,
- _baseDropdownContent: {
- type: Object,
- computed: '_computeBaseDropdownContent(availablePatches, patchNum,' +
+ static get properties() {
+ return {
+ availablePatches: Array,
+ _baseDropdownContent: {
+ type: Object,
+ computed: '_computeBaseDropdownContent(availablePatches, patchNum,' +
'_sortedRevisions, changeComments, revisionInfo)',
- },
- _patchDropdownContent: {
- type: Object,
- computed: '_computePatchDropdownContent(availablePatches,' +
+ },
+ _patchDropdownContent: {
+ type: Object,
+ computed: '_computePatchDropdownContent(availablePatches,' +
'basePatchNum, _sortedRevisions, changeComments)',
- },
- changeNum: String,
- changeComments: Object,
- /** @type {{ meta_a: !Array, meta_b: !Array}} */
- filesWeblinks: Object,
- patchNum: String,
- basePatchNum: String,
- revisions: Object,
- revisionInfo: Object,
- _sortedRevisions: Array,
- },
+ },
+ changeNum: String,
+ changeComments: Object,
+ /** @type {{ meta_a: !Array, meta_b: !Array}} */
+ filesWeblinks: Object,
+ patchNum: String,
+ basePatchNum: String,
+ revisions: Object,
+ revisionInfo: Object,
+ _sortedRevisions: Array,
+ };
+ }
- observers: [
- '_updateSortedRevisions(revisions.*)',
- ],
-
- behaviors: [
- Gerrit.PatchSetBehavior,
- ],
+ static get observers() {
+ return [
+ '_updateSortedRevisions(revisions.*)',
+ ];
+ }
_getShaForPatch(patch) {
return patch.sha.substring(0, 10);
- },
+ }
_computeBaseDropdownContent(availablePatches, patchNum, _sortedRevisions,
changeComments, revisionInfo) {
@@ -113,13 +119,13 @@
}
return dropdownContent;
- },
+ }
_computeMobileText(patchNum, changeComments, revisions) {
return `${patchNum}` +
`${this._computePatchSetCommentsString(changeComments, patchNum)}` +
`${this._computePatchSetDescription(revisions, patchNum, true)}`;
- },
+ }
_computePatchDropdownContent(availablePatches, basePatchNum,
_sortedRevisions, changeComments) {
@@ -145,13 +151,13 @@
}));
}
return dropdownContent;
- },
+ }
_computeText(patchNum, prefix, changeComments, sha) {
return `${prefix}${patchNum}` +
`${this._computePatchSetCommentsString(changeComments, patchNum)}`
+ (` | ${sha}`);
- },
+ }
_createDropdownEntry(patchNum, prefix, sortedRevisions, changeComments,
sha) {
@@ -169,12 +175,12 @@
entry['date'] = date;
}
return entry;
- },
+ }
_updateSortedRevisions(revisionsRecord) {
const revisions = revisionsRecord.base;
this._sortedRevisions = this.sortRevisions(Object.values(revisions));
- },
+ }
/**
* The basePatchNum should always be <= patchNum -- because sortedRevisions
@@ -187,7 +193,7 @@
_computeLeftDisabled(basePatchNum, patchNum, sortedRevisions) {
return this.findSortedIndex(basePatchNum, sortedRevisions) <=
this.findSortedIndex(patchNum, sortedRevisions);
- },
+ }
/**
* The basePatchNum should always be <= patchNum -- because sortedRevisions
@@ -216,7 +222,7 @@
return this.findSortedIndex(basePatchNum, sortedRevisions) <=
this.findSortedIndex(patchNum, sortedRevisions);
- },
+ }
_computePatchSetCommentsString(changeComments, patchNum) {
if (!changeComments) { return; }
@@ -237,7 +243,7 @@
// Add a comma + space if both comments and unresolved
(commentString && unresolvedString ? ', ' : '') +
`${unresolvedString})`;
- },
+ }
/**
* @param {!Array} revisions
@@ -249,7 +255,7 @@
return (rev && rev.description) ?
(opt_addFrontSpace ? ' ' : '') +
rev.description.substring(0, PATCH_DESC_MAX_LENGTH) : '';
- },
+ }
/**
* @param {!Array} revisions
@@ -258,7 +264,7 @@
_computePatchSetDate(revisions, patchNum) {
const rev = this.getRevisionByPatchNum(revisions, patchNum);
return rev ? rev.created : undefined;
- },
+ }
/**
* Catches value-change events from the patchset dropdowns and determines
@@ -276,6 +282,8 @@
this.dispatchEvent(
new CustomEvent('patch-range-change', {detail, bubbles: false}));
- },
- });
+ }
+ }
+
+ customElements.define(GrPatchRangeSelect.is, GrPatchRangeSelect);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-ranged-comment-layer/gr-ranged-comment-layer.js b/polygerrit-ui/app/elements/diff/gr-ranged-comment-layer/gr-ranged-comment-layer.js
index 2e74ff4..7ee6492 100644
--- a/polygerrit-ui/app/elements/diff/gr-ranged-comment-layer/gr-ranged-comment-layer.js
+++ b/polygerrit-ui/app/elements/diff/gr-ranged-comment-layer/gr-ranged-comment-layer.js
@@ -23,9 +23,10 @@
const RANGE_HIGHLIGHT = 'style-scope gr-diff range';
const HOVER_HIGHLIGHT = 'style-scope gr-diff rangeHighlight';
- Polymer({
- is: 'gr-ranged-comment-layer',
-
+ class GrRangedCommentLayer extends Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element)) {
+ static get is() { return 'gr-ranged-comment-layer'; }
/**
* Fired when the range in a range comment was malformed and had to be
* normalized.
@@ -35,26 +36,30 @@
* @event normalize-range
*/
- properties: {
+ static get properties() {
+ return {
/** @type {!Array<!Gerrit.HoveredRange>} */
- commentRanges: Array,
- _listeners: {
- type: Array,
- value() { return []; },
- },
- _rangesMap: {
- type: Object,
- value() { return {left: {}, right: {}}; },
- },
- },
+ commentRanges: Array,
+ _listeners: {
+ type: Array,
+ value() { return []; },
+ },
+ _rangesMap: {
+ type: Object,
+ value() { return {left: {}, right: {}}; },
+ },
+ };
+ }
- observers: [
- '_handleCommentRangesChange(commentRanges.*)',
- ],
+ static get observers() {
+ return [
+ '_handleCommentRangesChange(commentRanges.*)',
+ ];
+ }
get styleModuleName() {
return 'gr-ranged-comment-styles';
- },
+ }
/**
* Layer method to add annotations to a line.
@@ -81,7 +86,7 @@
range.end - range.start,
range.hovering ? HOVER_HIGHLIGHT : RANGE_HIGHLIGHT);
}
- },
+ }
/**
* Register a listener for layer updates.
@@ -91,7 +96,7 @@
*/
addListener(fn) {
this._listeners.push(fn);
- },
+ }
/**
* Notify Layer listeners of changes to annotations.
@@ -103,7 +108,7 @@
for (const listener of this._listeners) {
listener(start, end, side);
}
- },
+ }
/**
* Handle change in the ranges by updating the ranges maps and by
@@ -161,7 +166,7 @@
}
}
}
- },
+ }
_updateRangesMap(side, range, hovering, operation) {
const forSide = this._rangesMap[side] || (this._rangesMap[side] = {});
@@ -172,7 +177,7 @@
operation(forLine, start, end, hovering);
}
this._notifyUpdateRange(range.start_line, range.end_line, side);
- },
+ }
_getRangesForLine(line, side) {
const lineNum = side === 'left' ? line.beforeNumber : line.afterNumber;
@@ -200,6 +205,8 @@
})
// Sort the ranges so that hovering highlights are on top.
.sort((a, b) => a.hovering && !b.hovering ? 1 : 0);
- },
- });
+ }
+ }
+
+ customElements.define(GrRangedCommentLayer.is, GrRangedCommentLayer);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-selection-action-box/gr-selection-action-box.js b/polygerrit-ui/app/elements/diff/gr-selection-action-box/gr-selection-action-box.js
index 8d57de3..3ef9105 100644
--- a/polygerrit-ui/app/elements/diff/gr-selection-action-box/gr-selection-action-box.js
+++ b/polygerrit-ui/app/elements/diff/gr-selection-action-box/gr-selection-action-box.js
@@ -17,31 +17,38 @@
(function() {
'use strict';
- Polymer({
- is: 'gr-selection-action-box',
-
+ /**
+ * @appliesMixin Gerrit.FireMixin
+ */
+ class GrSelectionActionBox extends Polymer.mixinBehaviors( [
+ Gerrit.FireBehavior,
+ ], Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element))) {
+ static get is() { return 'gr-selection-action-box'; }
/**
* Fired when the comment creation action was taken (click).
*
* @event create-comment-requested
*/
- properties: {
- keyEventTarget: {
- type: Object,
- value() { return document.body; },
- },
- positionBelow: Boolean,
- },
+ static get properties() {
+ return {
+ keyEventTarget: {
+ type: Object,
+ value() { return document.body; },
+ },
+ positionBelow: Boolean,
+ };
+ }
- behaviors: [
- Gerrit.FireBehavior,
- ],
+ created() {
+ super.created();
- listeners: {
// See https://crbug.com/gerrit/4767
- mousedown: '_handleMouseDown',
- },
+ this.addEventListener('mousedown',
+ e => this._handleMouseDown(e));
+ }
placeAbove(el) {
Polymer.dom.flush();
@@ -52,7 +59,7 @@
rect.top - parentRect.top - boxRect.height - 6 + 'px';
this.style.left =
rect.left - parentRect.left + (rect.width - boxRect.width) / 2 + 'px';
- },
+ }
placeBelow(el) {
Polymer.dom.flush();
@@ -63,14 +70,14 @@
rect.top - parentRect.top + boxRect.height - 6 + 'px';
this.style.left =
rect.left - parentRect.left + (rect.width - boxRect.width) / 2 + 'px';
- },
+ }
_getParentBoundingClientRect() {
// With native shadow DOM, the parent is the shadow root, not the gr-diff
// element
const parent = this.parentElement || this.parentNode.host;
return parent.getBoundingClientRect();
- },
+ }
_getTargetBoundingRect(el) {
let rect;
@@ -83,13 +90,15 @@
rect = el.getBoundingClientRect();
}
return rect;
- },
+ }
_handleMouseDown(e) {
if (e.button !== 0) { return; } // 0 = main button
e.preventDefault();
e.stopPropagation();
this.fire('create-comment-requested');
- },
- });
+ }
+ }
+
+ customElements.define(GrSelectionActionBox.is, GrSelectionActionBox);
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.js b/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.js
index 6c7d582..b0947cd 100644
--- a/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.js
+++ b/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.js
@@ -130,54 +130,58 @@
const GO_BACKSLASH_LITERAL = '\'\\\\\'';
const GLOBAL_LT_PATTERN = /</g;
- Polymer({
- is: 'gr-syntax-layer',
+ class GrSyntaxLayer extends Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element)) {
+ static get is() { return 'gr-syntax-layer'; }
- properties: {
- diff: {
- type: Object,
- observer: '_diffChanged',
- },
- enabled: {
- type: Boolean,
- value: true,
- },
- _baseRanges: {
- type: Array,
- value() { return []; },
- },
- _revisionRanges: {
- type: Array,
- value() { return []; },
- },
- _baseLanguage: String,
- _revisionLanguage: String,
- _listeners: {
- type: Array,
- value() { return []; },
- },
- /** @type {?number} */
- _processHandle: Number,
- /**
+ static get properties() {
+ return {
+ diff: {
+ type: Object,
+ observer: '_diffChanged',
+ },
+ enabled: {
+ type: Boolean,
+ value: true,
+ },
+ _baseRanges: {
+ type: Array,
+ value() { return []; },
+ },
+ _revisionRanges: {
+ type: Array,
+ value() { return []; },
+ },
+ _baseLanguage: String,
+ _revisionLanguage: String,
+ _listeners: {
+ type: Array,
+ value() { return []; },
+ },
+ /** @type {?number} */
+ _processHandle: Number,
+ /**
* The promise last returned from `process()` while the asynchronous
* processing is running - `null` otherwise. Provides a `cancel()`
* method that rejects it with `{isCancelled: true}`.
* @type {?Object}
*/
- _processPromise: {
- type: Object,
- value: null,
- },
- _hljs: Object,
- },
+ _processPromise: {
+ type: Object,
+ value: null,
+ },
+ _hljs: Object,
+ };
+ }
addListener(fn) {
this.push('_listeners', fn);
- },
+ }
removeListener(fn) {
this._listeners = this._listeners.filter(f => f != fn);
- },
+ }
/**
* Annotation layer method to add syntax annotations to the given element
@@ -214,14 +218,14 @@
GrAnnotation.annotateElement(
el, range.start, range.length, range.className);
}
- },
+ }
_getLanguage(diffFileMetaInfo) {
// The Gerrit API provides only content-type, but for other users of
// gr-diff it may be more convenient to specify the language directly.
return diffFileMetaInfo.language ||
LANGUAGE_MAP[diffFileMetaInfo.content_type];
- },
+ }
/**
* Start processing syntax for the loaded diff and notify layer listeners
@@ -298,7 +302,7 @@
}));
return this._processPromise
.finally(() => { this._processPromise = null; });
- },
+ }
/**
* Cancel any asynchronous syntax processing jobs.
@@ -311,13 +315,13 @@
if (this._processPromise) {
this._processPromise.cancel();
}
- },
+ }
_diffChanged() {
this._cancel();
this._baseRanges = [];
this._revisionRanges = [];
- },
+ }
/**
* Take a string of HTML with the (potentially nested) syntax markers
@@ -339,7 +343,7 @@
const ranges = this._rangesFromElement(div, 0);
rangesCache.set(str, ranges);
return ranges;
- },
+ }
_rangesFromElement(elem, offset) {
let result = [];
@@ -362,7 +366,7 @@
offset += nodeLength;
}
return result;
- },
+ }
/**
* For a given state, process the syntax for the next line (or pair of
@@ -412,7 +416,7 @@
this._rangesFromString(result.value, rangesCache));
state.revisionContext = result.top;
}
- },
+ }
/**
* Ad hoc fixes for HLJS parsing bugs. Rewrite lines of code in constrained
@@ -479,7 +483,7 @@
}
return line;
- },
+ }
/**
* Tells whether the state has exhausted its current section.
@@ -494,7 +498,7 @@
return (!section.a || state.lineIndex >= section.a.length) &&
(!section.b || state.lineIndex >= section.b.length);
}
- },
+ }
/**
* For a given state, notify layer listeners of any processed line ranges
@@ -516,18 +520,20 @@
'right');
state.lastNotify.right = state.lineNums.right;
}
- },
+ }
_notifyRange(start, end, side) {
for (const fn of this._listeners) {
fn(start, end, side);
}
- },
+ }
_loadHLJS() {
return this.$.libLoader.getHLJS().then(hljs => {
this._hljs = hljs;
});
- },
- });
+ }
+ }
+
+ customElements.define(GrSyntaxLayer.is, GrSyntaxLayer);
})();