Handle mode preference should stick Change-Id: I28e4c537175c065e12e1d3cc31410b1235ac824b
diff --git a/gr-image-diff-tool/gr-image-diff-tool.html b/gr-image-diff-tool/gr-image-diff-tool.html index 6f2d85e..55d1c46 100644 --- a/gr-image-diff-tool/gr-image-diff-tool.html +++ b/gr-image-diff-tool/gr-image-diff-tool.html
@@ -48,7 +48,7 @@ <div id="header"> <h3>Image Diff</h3> - <select id="dropdown"> + <select value="{{_observeMode::change}}" id="dropdown"> <option value="resemble">Resemble Mode</option> <option value="opacity">Opacity Mode</option> </select>
diff --git a/gr-image-diff-tool/gr-image-diff-tool.js b/gr-image-diff-tool/gr-image-diff-tool.js index 20a0ac9..95df491 100644 --- a/gr-image-diff-tool/gr-image-diff-tool.js +++ b/gr-image-diff-tool/gr-image-diff-tool.js
@@ -14,29 +14,54 @@ (function() { 'use strict'; + const DiffModes = { + OPACITY: 'opacity', + RESEMBLE: 'resemble', + }; + Polymer({ is: 'gr-image-diff-tool', properties: { - _showResembleMode: { - type: Boolean, - value: true, - }, - _showOpacityMode: { - type: Boolean, - value: false, + _showResembleMode: Boolean, + _showOpacityMode: Boolean, + _observeMode: { + type: String, + observer: '_handleSelect', }, }, - handleSelect() { - const mode = this.$.dropdown.value; - if (mode === 'resemble') { - this._showResembleMode = true; - this._showOpacityMode = false; - } else if (mode === 'opacity') { - this._showOpacityMode = true; - this._showResembleMode = false; - } + attached() { + const diff_mode = this._getMode(); + diff_mode === DiffModes.OPACITY ? + this._displayOpacityMode() : this._displayResembleMode(); + }, + + _getMode() { + return window.localStorage.getItem('image-diff-mode'); + }, + + _setMode(mode) { + window.localStorage.setItem('image-diff-mode', mode); + }, + + _handleSelect(mode) { + mode === DiffModes.OPACITY ? + this._displayOpacityMode() : this._displayResembleMode(); + }, + + _displayResembleMode() { + this._observeMode = DiffModes.RESEMBLE; + this._showResembleMode = true; + this._showOpacityMode = false; + this._setMode(DiffModes.RESEMBLE); + }, + + _displayOpacityMode() { + this._observeMode = DiffModes.OPACITY; + this._showResembleMode = false; + this._showOpacityMode = true; + this._setMode(DiffModes.OPACITY); }, }); })(); \ No newline at end of file
diff --git a/gr-image-diff-tool/gr-image-diff-tool_test.html b/gr-image-diff-tool/gr-image-diff-tool_test.html index 0fe8a3e..ec1a4be 100644 --- a/gr-image-diff-tool/gr-image-diff-tool_test.html +++ b/gr-image-diff-tool/gr-image-diff-tool_test.html
@@ -38,14 +38,17 @@ <script> suite('gr-image-diff-tool tests', () => { let element; + let sandbox; setup(() => { element = fixture('basicFixture'); + sandbox = sinon.sandbox.create(); }); + teardown(() => { sandbox.restore(); }); + test('test opacity mode', () => { - element.$.dropdown.value = 'opacity'; - element.handleSelect(); + element._observeMode = 'opacity'; assert.isTrue(element._showOpacityMode); assert.isFalse(element._showResembleMode); flushAsynchronousOperations(); @@ -55,8 +58,7 @@ }); test('test resemble mode', () => { - element.$.dropdown.value = 'resemble'; - element.handleSelect(); + element._observeMode = 'resemble'; assert.isTrue(element._showResembleMode); assert.isFalse(element._showOpacityMode); flushAsynchronousOperations(); @@ -64,5 +66,17 @@ assert.ok(element.$$('gr-resemble-diff-mode')); assert.equal(element.$$('gr-opacity-diff-mode'), null); }); + + test('localStorage persists', () => { + sandbox.stub(element, '_setMode'); + sandbox.stub(element, '_getMode'); + element.attached(); + assert.equal(element._getMode.callCount, 1); + assert.equal(element._setMode.callCount, 1); + element._observeMode = 'opacity'; + assert.equal(element._setMode.callCount, 2); + element._observeMode = 'resemble'; + assert.equal(element._setMode.callCount, 3); + }); }); </script> \ No newline at end of file