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