Convert legacy Polymer elements to class-based

The executed command in tools/polygerrit-updater was:

  $ npm run convert -- --i --root ~/reviewers/rv-reviewers --src \
   ~/reviewers/rv-reviewers \
   ~/reviewers/rv-reviewers/rv-filter-section.js

Change-Id: Id2427a7ac98e1c851d0d30d60451c322bc3cdca6
diff --git a/rv-reviewers/rv-edit-screen.js b/rv-reviewers/rv-edit-screen.js
index 05e0df8..be302a8 100644
--- a/rv-reviewers/rv-edit-screen.js
+++ b/rv-reviewers/rv-edit-screen.js
@@ -12,57 +12,61 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 (function() {
-  Polymer({
-    is: 'rv-edit-screen',
+  class RvEditScreen extends Polymer.Element {
+    static get is() { return 'rv-edit-screen'; }
 
-    properties: {
-      pluginRestApi: {
-        type: Object,
-        observer: '_loadFilterSections'
-      },
-      repoName: String,
-      loading: Boolean,
-      canModifyConfig: Boolean,
-      _editingFilter: {
-        type: Boolean,
-        value: false,
-      },
-      _filterSections: Array,
-    },
+    static get properties() {
+      return {
+        pluginRestApi: {
+          type: Object,
+          observer: '_loadFilterSections',
+        },
+        repoName: String,
+        loading: Boolean,
+        canModifyConfig: Boolean,
+        _editingFilter: {
+          type: Boolean,
+          value: false,
+        },
+        _filterSections: Array,
+      };
+    }
 
     _loadFilterSections() {
       this.pluginRestApi.get(this._getReviewersUrl(this.repoName))
           .then(filterSections => {
             this._filterSections = filterSections;
           });
-    },
+    }
 
     _computeAddFilterBtnHidden(canModifyConfig, editingFilter) {
       return !canModifyConfig || editingFilter;
-    },
+    }
 
     _computeLoadingClass(loading) {
       return loading ? 'loading' : '';
-    },
+    }
 
     _getReviewersUrl(repoName) {
       return `/projects/${encodeURIComponent(repoName)}/reviewers`;
-    },
+    }
 
     _handleCreateSection() {
       const section = {filter: '', reviewers: [], editing: true};
       this._editingFilter = true;
       this.push('_filterSections', section);
-    },
+    }
 
     _handleCloseTap(e) {
       e.preventDefault();
       this.fire('close', null, {bubbles: false});
-    },
+    }
 
     _handleReviewerChanged(e) {
       this._filterSections = e.detail.result;
       this._editingFilter = false;
-    },
-  });
+    }
+  }
+
+  customElements.define(RvEditScreen.is, RvEditScreen);
 })();
diff --git a/rv-reviewers/rv-filter-section.js b/rv-reviewers/rv-filter-section.js
index 110c27d..962a54f 100644
--- a/rv-reviewers/rv-filter-section.js
+++ b/rv-reviewers/rv-filter-section.js
@@ -12,53 +12,56 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 (function() {
-  Polymer({
-    is: 'rv-filter-section',
+  class RvFilterSection extends Polymer.Element {
+    static get is() { return 'rv-filter-section'; }
 
-    properties: {
-      pluginRestApi: Object,
-      repoName: String,
-      reviewers: Array,
-      filter: String,
-      canModifyConfig: Boolean,
-      _originalFilter: String,
-      _editingReviewer: {
-        type: Boolean,
-        value: false,
-      },
-      reviewersUrl: String,
-    },
+    static get properties() {
+      return {
+        pluginRestApi: Object,
+        repoName: String,
+        reviewers: Array,
+        filter: String,
+        canModifyConfig: Boolean,
+        _originalFilter: String,
+        _editingReviewer: {
+          type: Boolean,
+          value: false,
+        },
+        reviewersUrl: String,
+      };
+    }
 
-    attached() {
+    connectedCallback() {
+      super.connectedCallback();
       this._updateSection();
-    },
+    }
 
     _updateSection() {
       this._originalFilter = this.filter;
-    },
+    }
 
     _computeEditing(filter, _originalFilter) {
       if (_originalFilter === '') {
         return true;
       }
       return filter === '';
-    },
+    }
 
     _computeCancelHidden(filter, _originalFilter) {
       return !this._computeEditing(filter, _originalFilter);
-    },
+    }
 
     _computeAddBtnHidden(canModifyConfig, editingReviewer) {
       return !(canModifyConfig && !editingReviewer);
-    },
+    }
 
     _computeFilterInputDisabled(canModifyConfig, originalFilter) {
       return !canModifyConfig || originalFilter !== '';
-    },
+    }
 
     _handleCancel() {
       this.remove();
-    },
+    }
 
     _handleReviewerDeleted(e) {
       if (e.detail.editing) {
@@ -69,7 +72,7 @@
         const deleted = this.reviewers[index];
         this._putReviewer(deleted, 'DELETE');
       }
-    },
+    }
 
     _handleReviewerAdded(e) {
       this._editingReviewer = false;
@@ -77,7 +80,7 @@
         this.fire('show-alert', {message: err});
         throw err;
       });
-    },
+    }
 
     _putReviewer(reviewer, action) {
       return this.pluginRestApi.put(this.reviewersUrl, {
@@ -89,11 +92,13 @@
         this.dispatchEvent(
             new CustomEvent('reviewer-changed', {detail, bubbles: true}));
       });
-    },
+    }
 
     _handleAddReviewer() {
       this.push('reviewers', '');
       this._editingReviewer = true;
-    },
-  });
+    }
+  }
+
+  customElements.define(RvFilterSection.is, RvFilterSection);
 })();
diff --git a/rv-reviewers/rv-reviewer.js b/rv-reviewers/rv-reviewer.js
index 681a17e..bb0b792 100644
--- a/rv-reviewers/rv-reviewer.js
+++ b/rv-reviewers/rv-reviewer.js
@@ -12,53 +12,56 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 (function() {
-  Polymer({
-    is: 'rv-reviewer',
+  class RvReviewer extends Polymer.Element {
+    static get is() { return 'rv-reviewer'; }
 
-    properties: {
-      canModifyConfig: Boolean,
-      pluginRestAPi: Object,
-      repoName: String,
-      reviewer: String,
-      _reviewerSearchId: String,
-      _queryReviewers: {
-        type: Function,
-        value() {
-          return this._getReviewerSuggestions.bind(this);
+    static get properties() {
+      return {
+        canModifyConfig: Boolean,
+        pluginRestAPi: Object,
+        repoName: String,
+        reviewer: String,
+        _reviewerSearchId: String,
+        _queryReviewers: {
+          type: Function,
+          value() {
+            return this._getReviewerSuggestions.bind(this);
+          },
         },
-      },
-      _originalReviewer: String,
-      _deleted: Boolean,
-      _editing: {
-        type: Boolean,
-        computed: '_computeEditing(reviewer, _originalReviewer)',
-      },
-    },
+        _originalReviewer: String,
+        _deleted: Boolean,
+        _editing: {
+          type: Boolean,
+          computed: '_computeEditing(reviewer, _originalReviewer)',
+        },
+      };
+    }
 
-    attached() {
+    connectedCallback() {
+      super.connectedCallback();
       this._originalReviewer = this.reviewer;
-    },
+    }
 
     _computeEditing(reviewer, _originalReviewer) {
       if (_originalReviewer === '') {
         return true;
       }
       return reviewer === '';
-    },
+    }
 
     _computeDeleteCancel(reviewer, _originalReviewer) {
       return this._computeEditing(reviewer, _originalReviewer) ?
-      'Cancel' : 'Delete';
-    },
+        'Cancel' : 'Delete';
+    }
 
     _computeHideAddButton(reviewer, _originalReviewer) {
       return !(this._computeEditing(reviewer, _originalReviewer)
       && this._reviewerSearchId);
-    },
+    }
 
     _computeHideDeleteButton(canModifyConfig) {
       return !canModifyConfig;
-    },
+    }
 
     _getReviewerSuggestions(input) {
       if (input.length === 0) { return Promise.resolve([]); }
@@ -68,7 +71,7 @@
       return Promise.all(promises).then(result => {
         return result.flat();
       });
-    },
+    }
 
     _getSuggestedGroups(input) {
       const suggestUrl = `/groups/?suggest=${input}&p=${this.repoName}`;
@@ -84,7 +87,7 @@
         }
         return groupSuggestions;
       });
-    },
+    }
 
     _getSuggestedAccounts(input) {
       const suggestUrl = `/accounts/?suggest&q=${input}`;
@@ -115,7 +118,7 @@
         }
         return accountSuggestions;
       });
-    },
+    }
 
     _handleDeleteCancel() {
       const detail = {editing: this._editing};
@@ -124,13 +127,15 @@
       }
       this.dispatchEvent(
           new CustomEvent('reviewer-deleted', {detail, bubbles: true}));
-    },
+    }
 
     _handleAddReviewer() {
       const detail = {reviewer: this._reviewerSearchId};
       this._originalReviewer = this.reviewer;
       this.dispatchEvent(
           new CustomEvent('reviewer-added', {detail, bubbles: true}));
-    },
-  });
+    }
+  }
+
+  customElements.define(RvReviewer.is, RvReviewer);
 })();
diff --git a/rv-reviewers/rv-reviewers.js b/rv-reviewers/rv-reviewers.js
index e40e03a..8c10ea4 100644
--- a/rv-reviewers/rv-reviewers.js
+++ b/rv-reviewers/rv-reviewers.js
@@ -12,42 +12,45 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 (function() {
-  Polymer({
-    is: 'rv-reviewers',
+  class RvReviewers extends Polymer.Element {
+    static get is() { return 'rv-reviewers'; }
 
-    properties: {
-      pluginRestApi: Object,
-      repoName: String,
-      _canModifyConfig: {
-        type: Boolean,
-        computed: '_computeCanModifyConfig(_isOwner, _hasModifyCapability)',
-      },
-      _loading: {
-        type: Boolean,
-        value: true,
-      },
-      _isOwner: {
-        type: Boolean,
-        value: false,
-      },
-      _hasModifyCapability: {
-        type: Boolean,
-        value: false,
-      },
-    },
+    static get properties() {
+      return {
+        pluginRestApi: Object,
+        repoName: String,
+        _canModifyConfig: {
+          type: Boolean,
+          computed: '_computeCanModifyConfig(_isOwner, _hasModifyCapability)',
+        },
+        _loading: {
+          type: Boolean,
+          value: true,
+        },
+        _isOwner: {
+          type: Boolean,
+          value: false,
+        },
+        _hasModifyCapability: {
+          type: Boolean,
+          value: false,
+        },
+      };
+    }
 
-    attached() {
+    connectedCallback() {
+      super.connectedCallback();
       this.pluginRestApi = this.plugin.restApi();
       this._setCanModifyConfig();
-    },
+    }
 
     _handleCommandTap() {
       this.$.rvScreenOverlay.open();
-    },
+    }
 
     _handleRvEditScreenClose() {
       this.$.rvScreenOverlay.close();
-    },
+    }
 
     _setCanModifyConfig() {
       const promises = [];
@@ -64,19 +67,21 @@
       Promise.all(promises).then(() => {
         this._loading = false;
       });
-    },
+    }
 
     _computeCanModifyConfig(isOwner, hasModifyCapability) {
       return isOwner || hasModifyCapability;
-    },
+    }
 
     _getRepoAccess(repoName) {
       return this.pluginRestApi.get(
           '/access/?project=' + encodeURIComponent(repoName));
-    },
+    }
 
     _getCapabilities() {
       return this.pluginRestApi.get('/accounts/self/capabilities');
-    },
-  });
+    }
+  }
+
+  customElements.define(RvReviewers.is, RvReviewers);
 })();