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/shared/gr-cursor-manager/gr-cursor-manager.js b/polygerrit-ui/app/elements/shared/gr-cursor-manager/gr-cursor-manager.js
index 4e9ff76..4232ef9 100644
--- a/polygerrit-ui/app/elements/shared/gr-cursor-manager/gr-cursor-manager.js
+++ b/polygerrit-ui/app/elements/shared/gr-cursor-manager/gr-cursor-manager.js
@@ -22,72 +22,77 @@
KEEP_VISIBLE: 'keep-visible',
};
- Polymer({
- is: 'gr-cursor-manager',
+ class GrCursorManager extends Polymer.GestureEventListeners(
+ Polymer.LegacyElementMixin(
+ Polymer.Element)) {
+ static get is() { return 'gr-cursor-manager'; }
- properties: {
- stops: {
- type: Array,
- value() {
- return [];
+ static get properties() {
+ return {
+ stops: {
+ type: Array,
+ value() {
+ return [];
+ },
+ observer: '_updateIndex',
},
- observer: '_updateIndex',
- },
- /**
+ /**
* @type (?Object)
*/
- target: {
- type: Object,
- notify: true,
- observer: '_scrollToTarget',
- },
- /**
+ target: {
+ type: Object,
+ notify: true,
+ observer: '_scrollToTarget',
+ },
+ /**
* The height of content intended to be included with the target.
* @type (?number)
*/
- _targetHeight: Number,
+ _targetHeight: Number,
- /**
+ /**
* The index of the current target (if any). -1 otherwise.
*/
- index: {
- type: Number,
- value: -1,
- notify: true,
- },
+ index: {
+ type: Number,
+ value: -1,
+ notify: true,
+ },
- /**
+ /**
* The class to apply to the current target. Use null for no class.
*/
- cursorTargetClass: {
- type: String,
- value: null,
- },
+ cursorTargetClass: {
+ type: String,
+ 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.
* TODO (beckysiegel) figure out why it can be undefined
* @type (string|undefined)
*/
- scrollBehavior: {
- type: String,
- value: ScrollBehavior.NEVER,
- },
+ scrollBehavior: {
+ type: String,
+ value: ScrollBehavior.NEVER,
+ },
- /**
+ /**
* When true, will call element.focus() during scrolling.
*/
- focusOnMove: {
- type: Boolean,
- value: false,
- },
- },
+ focusOnMove: {
+ type: Boolean,
+ value: false,
+ },
+ };
+ }
detached() {
+ super.detached();
this.unsetCursor();
- },
+ }
/**
* Move the cursor forward. Clipped to the ends of the stop list.
@@ -104,11 +109,11 @@
next(opt_condition, opt_getTargetHeight, opt_clipToTop) {
this._moveCursor(1, opt_condition, opt_getTargetHeight, opt_clipToTop);
- },
+ }
previous(opt_condition) {
this._moveCursor(-1, opt_condition);
- },
+ }
/**
* Set the cursor to an arbitrary element.
@@ -129,32 +134,32 @@
this._decorateTarget();
if (opt_noScroll) { this.scrollBehavior = behavior; }
- },
+ }
unsetCursor() {
this._unDecorateTarget();
this.index = -1;
this.target = null;
this._targetHeight = null;
- },
+ }
isAtStart() {
return this.index === 0;
- },
+ }
isAtEnd() {
return this.index === this.stops.length - 1;
- },
+ }
moveToStart() {
if (this.stops.length) {
this.setCursor(this.stops[0]);
}
- },
+ }
setCursorAtIndex(index, opt_noScroll) {
this.setCursor(this.stops[index], opt_noScroll);
- },
+ }
/**
* Move the cursor forward or backward by delta. Clipped to the beginning or
@@ -199,19 +204,19 @@
if (this.focusOnMove) { this.target.focus(); }
this._decorateTarget();
- },
+ }
_decorateTarget() {
if (this.target && this.cursorTargetClass) {
this.target.classList.add(this.cursorTargetClass);
}
- },
+ }
_unDecorateTarget() {
if (this.target && this.cursorTargetClass) {
this.target.classList.remove(this.cursorTargetClass);
}
- },
+ }
/**
* Get the next stop index indicated by the delta direction.
@@ -247,7 +252,7 @@
}
return newIndex;
- },
+ }
_updateIndex() {
if (!this.target) {
@@ -261,7 +266,7 @@
} else {
this.index = newIndex;
}
- },
+ }
/**
* Calculate where the element is relative to the window.
@@ -276,7 +281,7 @@
top += offsetParent.offsetTop;
}
return top;
- },
+ }
/**
* @return {boolean}
@@ -286,12 +291,12 @@
return this.scrollBehavior === ScrollBehavior.KEEP_VISIBLE &&
top > dims.pageYOffset &&
top < dims.pageYOffset + dims.innerHeight;
- },
+ }
_calculateScrollToValue(top, target) {
const dims = this._getWindowDims();
return top - (dims.innerHeight / 3) + (target.offsetHeight / 2);
- },
+ }
_scrollToTarget() {
if (!this.target || this.scrollBehavior === ScrollBehavior.NEVER) {
@@ -319,7 +324,7 @@
// element appears to be below the center of the window even when it
// isn't.
window.scrollTo(dims.scrollX, scrollToValue);
- },
+ }
_getWindowDims() {
return {
@@ -328,6 +333,8 @@
innerHeight: window.innerHeight,
pageYOffset: window.pageYOffset,
};
- },
- });
+ }
+ }
+
+ customElements.define(GrCursorManager.is, GrCursorManager);
})();