Convert files to typescript

The change converts the following files to typescript:

* elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts

Change-Id: I3d677069eb4e30a49536d21ea8e702a2f2cbbc7a
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts
index 7c9d1ec..c1447d4 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts
@@ -14,72 +14,71 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import '@polymer/iron-icon/iron-icon.js';
-import '../../../styles/shared-styles.js';
-import '../../shared/gr-button/gr-button.js';
-import '../../shared/gr-rest-api-interface/gr-rest-api-interface.js';
-import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';
-import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin.js';
-import {PolymerElement} from '@polymer/polymer/polymer-element.js';
-import {htmlTemplate} from './gr-diff-mode-selector_html.js';
+import '@polymer/iron-icon/iron-icon';
+import '../../../styles/shared-styles';
+import '../../shared/gr-button/gr-button';
+import '../../shared/gr-rest-api-interface/gr-rest-api-interface';
+import {DiffViewMode} from '../../../constants/constants';
+import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api';
+import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners';
+import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin';
+import {PolymerElement} from '@polymer/polymer/polymer-element';
+import {htmlTemplate} from './gr-diff-mode-selector_html';
+import {customElement, property} from '@polymer/decorators';
 
-/** @extends PolymerElement */
-class GrDiffModeSelector extends GestureEventListeners(
-    LegacyElementMixin(
-        PolymerElement)) {
-  static get template() { return htmlTemplate; }
+export interface GrDiffModeSelector {
+  $: {
+    restAPI: RestApiService & Element;
+  };
+}
 
-  static get is() { return 'gr-diff-mode-selector'; }
-
-  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',
-        },
-      },
-    };
+@customElement('gr-diff-mode-selector')
+export class GrDiffModeSelector extends GestureEventListeners(
+  LegacyElementMixin(PolymerElement)
+) {
+  static get template() {
+    return htmlTemplate;
   }
 
+  @property({type: String, notify: true})
+  mode?: DiffViewMode;
+
+  /**
+   * 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.
+   */
+  @property({type: Boolean})
+  saveOnChange = false;
+
   /**
    * Set the mode. If save on change is enabled also update the preference.
    */
-  setMode(newMode) {
+  setMode(newMode: DiffViewMode) {
     if (this.saveOnChange && this.mode && this.mode !== newMode) {
       this.$.restAPI.savePreferences({diff_view: newMode});
     }
     this.mode = newMode;
   }
 
-  _computeSelectedClass(diffViewMode, buttonViewMode) {
-    return buttonViewMode === diffViewMode ? 'selected' : '';
+  _computeSideBySideSelected(mode: DiffViewMode) {
+    return mode === DiffViewMode.SIDE_BY_SIDE ? 'selected' : '';
+  }
+
+  _computeUnifiedSelected(mode: DiffViewMode) {
+    return mode === DiffViewMode.UNIFIED ? 'selected' : '';
   }
 
   _handleSideBySideTap() {
-    this.setMode(this._VIEW_MODES.SIDE_BY_SIDE);
+    this.setMode(DiffViewMode.SIDE_BY_SIDE);
   }
 
   _handleUnifiedTap() {
-    this.setMode(this._VIEW_MODES.UNIFIED);
+    this.setMode(DiffViewMode.UNIFIED);
   }
 }
 
-customElements.define(GrDiffModeSelector.is, GrDiffModeSelector);
+declare global {
+  interface HTMLElementTagNameMap {
+    'gr-diff-mode-selector': GrDiffModeSelector;
+  }
+}
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_html.ts b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_html.ts
index 40f6a32..73f7426 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_html.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_html.ts
@@ -34,7 +34,7 @@
     id="sideBySideBtn"
     link=""
     has-tooltip=""
-    class$="[[_computeSelectedClass(mode, _VIEW_MODES.SIDE_BY_SIDE)]]"
+    class$="[[_computeSideBySideSelected(mode)]]"
     title="Side-by-side diff"
     on-click="_handleSideBySideTap"
   >
@@ -45,7 +45,7 @@
     link=""
     has-tooltip=""
     title="Unified diff"
-    class$="[[_computeSelectedClass(mode, _VIEW_MODES.UNIFIED)]]"
+    class$="[[_computeUnifiedSelected(mode)]]"
     on-click="_handleUnifiedTap"
   >
     <iron-icon icon="gr-icons:unified"></iron-icon>
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_test.js b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_test.js
index e84ef2b..07a1d16 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_test.js
@@ -17,6 +17,7 @@
 
 import '../../../test/common-test-setup-karma.js';
 import './gr-diff-mode-selector.js';
+import {DiffViewMode} from '../../../constants/constants.js';
 
 const basicFixture = fixtureFromElement('gr-diff-mode-selector');
 
@@ -28,11 +29,14 @@
   });
 
   test('_computeSelectedClass', () => {
-    assert.equal(
-        element._computeSelectedClass('SIDE_BY_SIDE', 'SIDE_BY_SIDE'),
+    assert.equal(element._computeSideBySideSelected(DiffViewMode.SIDE_BY_SIDE),
         'selected');
-    assert.equal(
-        element._computeSelectedClass('SIDE_BY_SIDE', 'UNIFIED_DIFF'), '');
+    assert.equal(element._computeSideBySideSelected(DiffViewMode.UNIFIED),
+        '');
+    assert.equal(element._computeUnifiedSelected(DiffViewMode.UNIFIED),
+        'selected');
+    assert.equal(element._computeUnifiedSelected(DiffViewMode.SIDE_BY_SIDE),
+        '');
   });
 
   test('setMode', () => {