Merge "Revert "Update iron-input to 2.0""
This commit is contained in:
@@ -1062,8 +1062,8 @@ bower_archive(
|
|||||||
bower_archive(
|
bower_archive(
|
||||||
name = "iron-input",
|
name = "iron-input",
|
||||||
package = "polymerelements/iron-input",
|
package = "polymerelements/iron-input",
|
||||||
sha1 = "42f233d8adf3883bcce2fa364c7785a5d2571db4",
|
sha1 = "9bc0c8e81de2527125383cbcf74dd9f27e7fa9ac",
|
||||||
version = "2.0.0",
|
version = "1.0.10",
|
||||||
)
|
)
|
||||||
|
|
||||||
bower_archive(
|
bower_archive(
|
||||||
|
@@ -25,8 +25,8 @@ def load_bower_archives():
|
|||||||
bower_archive(
|
bower_archive(
|
||||||
name = "iron-a11y-announcer",
|
name = "iron-a11y-announcer",
|
||||||
package = "iron-a11y-announcer",
|
package = "iron-a11y-announcer",
|
||||||
version = "2.0.0",
|
version = "1.0.5",
|
||||||
sha1 = "8a7cc8d63eab3c068e0f8fcf4bf129a85922edc6")
|
sha1 = "007902c041dd8863a1fe893f62450852f4d8c69b")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "iron-a11y-keys-behavior",
|
name = "iron-a11y-keys-behavior",
|
||||||
package = "iron-a11y-keys-behavior",
|
package = "iron-a11y-keys-behavior",
|
||||||
@@ -35,38 +35,38 @@ def load_bower_archives():
|
|||||||
bower_archive(
|
bower_archive(
|
||||||
name = "iron-behaviors",
|
name = "iron-behaviors",
|
||||||
package = "iron-behaviors",
|
package = "iron-behaviors",
|
||||||
version = "1.0.18",
|
version = "1.0.17",
|
||||||
sha1 = "e231a1a02b090f5183db917639fdb96cdd0dca18")
|
sha1 = "47df7e1c2b97978dcafa13edb50fbdb702570acd")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "iron-fit-behavior",
|
name = "iron-fit-behavior",
|
||||||
package = "iron-fit-behavior",
|
package = "iron-fit-behavior",
|
||||||
version = "1.2.7",
|
version = "1.2.6",
|
||||||
sha1 = "01c485fbf898307029bbb72ac7e132db1570a842")
|
sha1 = "59daa8526aac59aa72b8edcbbd24d9eed555a0f5")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "iron-flex-layout",
|
name = "iron-flex-layout",
|
||||||
package = "iron-flex-layout",
|
package = "iron-flex-layout",
|
||||||
version = "1.3.7",
|
version = "1.3.2",
|
||||||
sha1 = "4d4cf3232cf750a17a7df0a37476117f831ac633")
|
sha1 = "b896041aad049a5e889a0165828d7b1262e32612")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "iron-form-element-behavior",
|
name = "iron-form-element-behavior",
|
||||||
package = "iron-form-element-behavior",
|
package = "iron-form-element-behavior",
|
||||||
version = "1.0.7",
|
version = "1.0.6",
|
||||||
sha1 = "7b5a79e02cc32f0918725dd26925d0df1e03ed12")
|
sha1 = "8d9e6530edc1b99bec1a5c34853911fba3701220")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "iron-meta",
|
name = "iron-meta",
|
||||||
package = "iron-meta",
|
package = "iron-meta",
|
||||||
version = "1.1.3",
|
version = "1.1.2",
|
||||||
sha1 = "f77eba3f6f6817f10bda33918bde8f963d450041")
|
sha1 = "dc22fe05e1cb5f94f30a7193d3433ca1808773b8")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "iron-resizable-behavior",
|
name = "iron-resizable-behavior",
|
||||||
package = "iron-resizable-behavior",
|
package = "iron-resizable-behavior",
|
||||||
version = "1.0.6",
|
version = "1.0.5",
|
||||||
sha1 = "719c2a8a1a784f8aefcdeef41fcc2e5a03518d9e")
|
sha1 = "2ebe983377dceb3794dd335131050656e23e2beb")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "iron-validatable-behavior",
|
name = "iron-validatable-behavior",
|
||||||
package = "iron-validatable-behavior",
|
package = "iron-validatable-behavior",
|
||||||
version = "1.1.2",
|
version = "1.1.1",
|
||||||
sha1 = "7111f34ff32e1510131dfbdb1eaa51bfa291e8be")
|
sha1 = "480423380be0536f948735d91bc472f6e7ced5b4")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "lodash",
|
name = "lodash",
|
||||||
package = "lodash",
|
package = "lodash",
|
||||||
@@ -75,18 +75,18 @@ def load_bower_archives():
|
|||||||
bower_archive(
|
bower_archive(
|
||||||
name = "mocha",
|
name = "mocha",
|
||||||
package = "mocha",
|
package = "mocha",
|
||||||
version = "3.4.2",
|
version = "3.2.0",
|
||||||
sha1 = "dfa9fd7705c541e8df3bfa22ca83789920024258")
|
sha1 = "b77f23f7ad1f1363501bcae96f0f4f47745dad0f")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "neon-animation",
|
name = "neon-animation",
|
||||||
package = "neon-animation",
|
package = "neon-animation",
|
||||||
version = "1.2.5",
|
version = "1.2.4",
|
||||||
sha1 = "588d289f779d02b21ce5b676e257bbd6155649e8")
|
sha1 = "e8ccbb930c4b7ff470b1450baa901618888a7fd3")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "sinon-chai",
|
name = "sinon-chai",
|
||||||
package = "sinon-chai",
|
package = "sinon-chai",
|
||||||
version = "2.11.0",
|
version = "2.8.0",
|
||||||
sha1 = "3facb0ee3d4e06b8cd444c76e2fcb6d8b2ae3091")
|
sha1 = "0464b5d944fdf8116bb23e0b02ecfbac945b3517")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "sinonjs",
|
name = "sinonjs",
|
||||||
package = "sinonjs",
|
package = "sinonjs",
|
||||||
@@ -100,8 +100,8 @@ def load_bower_archives():
|
|||||||
bower_archive(
|
bower_archive(
|
||||||
name = "web-animations-js",
|
name = "web-animations-js",
|
||||||
package = "web-animations-js",
|
package = "web-animations-js",
|
||||||
version = "2.2.5",
|
version = "2.2.2",
|
||||||
sha1 = "078116d92a15ec4def5ca2be2cd09b331efc1eb7")
|
sha1 = "6276a9f227da7d4ccaf77c202b50e174dd11a2c2")
|
||||||
bower_archive(
|
bower_archive(
|
||||||
name = "webcomponentsjs",
|
name = "webcomponentsjs",
|
||||||
package = "webcomponentsjs",
|
package = "webcomponentsjs",
|
||||||
|
@@ -167,6 +167,12 @@ def define_bower_components():
|
|||||||
license = "//lib:LICENSE-page.js",
|
license = "//lib:LICENSE-page.js",
|
||||||
seed = True,
|
seed = True,
|
||||||
)
|
)
|
||||||
|
bower_component(
|
||||||
|
name = "polymer",
|
||||||
|
license = "//lib:LICENSE-polymer",
|
||||||
|
deps = [ ":webcomponentsjs" ],
|
||||||
|
seed = True,
|
||||||
|
)
|
||||||
bower_component(
|
bower_component(
|
||||||
name = "polymer-resin",
|
name = "polymer-resin",
|
||||||
license = "//lib:LICENSE-polymer",
|
license = "//lib:LICENSE-polymer",
|
||||||
@@ -176,12 +182,6 @@ def define_bower_components():
|
|||||||
],
|
],
|
||||||
seed = True,
|
seed = True,
|
||||||
)
|
)
|
||||||
bower_component(
|
|
||||||
name = "polymer",
|
|
||||||
license = "//lib:LICENSE-polymer",
|
|
||||||
deps = [ ":webcomponentsjs" ],
|
|
||||||
seed = True,
|
|
||||||
)
|
|
||||||
bower_component(
|
bower_component(
|
||||||
name = "promise-polyfill",
|
name = "promise-polyfill",
|
||||||
license = "//lib:LICENSE-promise-polyfill",
|
license = "//lib:LICENSE-promise-polyfill",
|
||||||
|
@@ -38,11 +38,10 @@ limitations under the License.
|
|||||||
<div id="form">
|
<div id="form">
|
||||||
<section>
|
<section>
|
||||||
<span class="title">Group name</span>
|
<span class="title">Group name</span>
|
||||||
<iron-input
|
<input
|
||||||
|
is="iron-input"
|
||||||
id="groupNameInput"
|
id="groupNameInput"
|
||||||
bind-value="{{_name}}">
|
bind-value="{{_name}}">
|
||||||
<input type="text">
|
|
||||||
</iron-input>
|
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
notify: true,
|
notify: true,
|
||||||
value: false,
|
value: false,
|
||||||
},
|
},
|
||||||
_name: String,
|
_name: Object,
|
||||||
_groupCreated: {
|
_groupCreated: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
value: false,
|
value: false,
|
||||||
|
@@ -50,14 +50,13 @@ limitations under the License.
|
|||||||
sandbox.restore();
|
sandbox.restore();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('name is updated correctly', done => {
|
test('name is updated correctly', () => {
|
||||||
Polymer.Base.async(() => {
|
assert.isFalse(element.hasNewGroupName);
|
||||||
assert.isFalse(element.hasNewGroupName);
|
|
||||||
element.$.groupNameInput.bindValue = GROUP_NAME;
|
element.$.groupNameInput.bindValue = GROUP_NAME;
|
||||||
assert.isTrue(element.hasNewGroupName);
|
|
||||||
assert.deepEqual(element._name, GROUP_NAME);
|
assert.isTrue(element.hasNewGroupName);
|
||||||
done();
|
assert.deepEqual(element._name, GROUP_NAME);
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('test for redirecting to group on successful creation', done => {
|
test('test for redirecting to group on successful creation', done => {
|
||||||
|
@@ -53,11 +53,10 @@ limitations under the License.
|
|||||||
<div id="form">
|
<div id="form">
|
||||||
<section>
|
<section>
|
||||||
<span class="title">Project name</span>
|
<span class="title">Project name</span>
|
||||||
<iron-input
|
<input is="iron-input"
|
||||||
id="projectNameInput"
|
id="projectNameInput"
|
||||||
|
autocomplete="on"
|
||||||
bind-value="{{_projectConfig.name}}">
|
bind-value="{{_projectConfig.name}}">
|
||||||
<input autocomplete="on">
|
|
||||||
</iron-input>
|
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<span class="title">Rights inherit from</span>
|
<span class="title">Rights inherit from</span>
|
||||||
|
@@ -170,13 +170,12 @@ limitations under the License.
|
|||||||
<section>
|
<section>
|
||||||
<span class="title">Maximum Git object size limit</span>
|
<span class="title">Maximum Git object size limit</span>
|
||||||
<span class="value">
|
<span class="value">
|
||||||
<iron-input
|
<input
|
||||||
id="maxGitObjSizeInput"
|
id="maxGitObjSizeInput"
|
||||||
bind-value="{{_projectConfig.max_object_size_limit.configured_value}}">
|
bind-value="{{_projectConfig.max_object_size_limit.configured_value}}"
|
||||||
<input
|
is="iron-input"
|
||||||
type="text"
|
type="text"
|
||||||
disabled$="[[_readOnly]]">
|
disabled$="[[_readOnly]]">
|
||||||
</iron-input>
|
|
||||||
</span>
|
</span>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
|
@@ -194,7 +194,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
_handleInputKeydown(e) {
|
_handleInputKeydown(e) {
|
||||||
const input = e.detail.input.inputElement;
|
const input = e.detail.input;
|
||||||
if (input.selectionStart !== input.selectionEnd ||
|
if (input.selectionStart !== input.selectionEnd ||
|
||||||
input.selectionStart !== 0) {
|
input.selectionStart !== 0) {
|
||||||
return;
|
return;
|
||||||
|
@@ -329,51 +329,42 @@ limitations under the License.
|
|||||||
});
|
});
|
||||||
|
|
||||||
suite('keyboard interactions', () => {
|
suite('keyboard interactions', () => {
|
||||||
test('backspace at text input start removes last account', done => {
|
test('backspace at text input start removes last account', () => {
|
||||||
Polymer.Base.async(() => {
|
const input = element.$.entry.$.input;
|
||||||
const autocomplete = element.$.entry.$.input;
|
sandbox.stub(element.$.entry, '_getReviewerSuggestions');
|
||||||
sandbox.stub(element.$.entry, '_getReviewerSuggestions');
|
sandbox.stub(input, '_updateSuggestions');
|
||||||
sandbox.stub(autocomplete, '_updateSuggestions');
|
sandbox.stub(element, '_computeRemovable').returns(true);
|
||||||
sandbox.stub(element, '_computeRemovable').returns(true);
|
// Next line is a workaround for Firefix not moving cursor
|
||||||
// Next line is a workaround for Firefix not moving cursor
|
// on input field update
|
||||||
// on input field update
|
assert.equal(input.$.input.selectionStart, 0);
|
||||||
assert.equal(autocomplete.$.input.inputElement.selectionStart, 0);
|
input.text = 'test';
|
||||||
autocomplete.text = 'test';
|
MockInteractions.focus(input.$.input);
|
||||||
MockInteractions.focus(autocomplete.$.input.inputElement);
|
flushAsynchronousOperations();
|
||||||
flushAsynchronousOperations();
|
assert.equal(element.accounts.length, 2);
|
||||||
assert.equal(element.accounts.length, 2);
|
MockInteractions.pressAndReleaseKeyOn(input.$.input, 8); // Backspace
|
||||||
MockInteractions.pressAndReleaseKeyOn(
|
assert.equal(element.accounts.length, 2);
|
||||||
autocomplete.$.input.inputElement, 8); // Backspace
|
input.text = '';
|
||||||
assert.equal(element.accounts.length, 2);
|
MockInteractions.pressAndReleaseKeyOn(input.$.input, 8); // Backspace
|
||||||
autocomplete.text = '';
|
assert.equal(element.accounts.length, 1);
|
||||||
MockInteractions.pressAndReleaseKeyOn(
|
|
||||||
autocomplete.$.input.inputElement, 8); // Backspace
|
|
||||||
assert.equal(element.accounts.length, 1);
|
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('arrow key navigation', done => {
|
test('arrow key navigation', () => {
|
||||||
Polymer.Base.async(() => {
|
const input = element.$.entry.$.input;
|
||||||
const autocomplete = element.$.entry.$.input;
|
input.text = '';
|
||||||
autocomplete.text = '';
|
element.accounts = [makeAccount(), makeAccount()];
|
||||||
element.accounts = [makeAccount(), makeAccount()];
|
MockInteractions.focus(input.$.input);
|
||||||
MockInteractions.focus(autocomplete.$.input);
|
flushAsynchronousOperations();
|
||||||
flushAsynchronousOperations();
|
const chips = element.accountChips;
|
||||||
const chips = element.accountChips;
|
const chipsOneSpy = sandbox.spy(chips[1], 'focus');
|
||||||
const chipsOneSpy = sandbox.spy(chips[1], 'focus');
|
MockInteractions.pressAndReleaseKeyOn(input.$.input, 37); // Left
|
||||||
MockInteractions.pressAndReleaseKeyOn(
|
assert.isTrue(chipsOneSpy.called);
|
||||||
autocomplete.$.input.inputElement, 37); // Left
|
const chipsZeroSpy = sandbox.spy(chips[0], 'focus');
|
||||||
assert.isTrue(chipsOneSpy.called);
|
MockInteractions.pressAndReleaseKeyOn(chips[1], 37); // Left
|
||||||
const chipsZeroSpy = sandbox.spy(chips[0], 'focus');
|
assert.isTrue(chipsZeroSpy.called);
|
||||||
MockInteractions.pressAndReleaseKeyOn(chips[1], 37); // Left
|
MockInteractions.pressAndReleaseKeyOn(chips[0], 37); // Left
|
||||||
assert.isTrue(chipsZeroSpy.called);
|
assert.isTrue(chipsZeroSpy.calledOnce);
|
||||||
MockInteractions.pressAndReleaseKeyOn(chips[0], 37); // Left
|
MockInteractions.pressAndReleaseKeyOn(chips[0], 39); // Right
|
||||||
assert.isTrue(chipsZeroSpy.calledOnce);
|
assert.isTrue(chipsOneSpy.calledTwice);
|
||||||
MockInteractions.pressAndReleaseKeyOn(chips[0], 39); // Right
|
|
||||||
assert.isTrue(chipsOneSpy.calledTwice);
|
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('delete', done => {
|
test('delete', done => {
|
||||||
|
@@ -61,11 +61,11 @@ limitations under the License.
|
|||||||
<label for="branchInput">
|
<label for="branchInput">
|
||||||
Cherry Pick to branch
|
Cherry Pick to branch
|
||||||
</label>
|
</label>
|
||||||
<iron-input
|
<input is="iron-input"
|
||||||
|
type="text"
|
||||||
id="branchInput"
|
id="branchInput"
|
||||||
bind-value="{{branch}}">
|
bind-value="{{branch}}"
|
||||||
<input type="text" placeholder="Destination branch">
|
placeholder="Destination branch">
|
||||||
</iron-input>
|
|
||||||
<label for="messageInput">
|
<label for="messageInput">
|
||||||
Cherry Pick Commit Message
|
Cherry Pick Commit Message
|
||||||
</label>
|
</label>
|
||||||
|
@@ -98,12 +98,12 @@ limitations under the License.
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="parentRevisionContainer">
|
<div class="parentRevisionContainer">
|
||||||
<iron-input
|
<input is="iron-input"
|
||||||
|
type="text"
|
||||||
id="parentInput"
|
id="parentInput"
|
||||||
bind-value="{{base}}"
|
bind-value="{{base}}"
|
||||||
on-tap="_handleEnterChangeNumberTap">
|
on-tap="_handleEnterChangeNumberTap"
|
||||||
<input type="text" placeholder="Change number">
|
placeholder="Change number">
|
||||||
</iron-input>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</gr-confirm-dialog>
|
</gr-confirm-dialog>
|
||||||
|
@@ -395,14 +395,10 @@
|
|||||||
.focus.bind(textarea.getNativeTextarea()));
|
.focus.bind(textarea.getNativeTextarea()));
|
||||||
} else if (section === FocusTarget.REVIEWERS) {
|
} else if (section === FocusTarget.REVIEWERS) {
|
||||||
const reviewerEntry = this.$.reviewers.focusStart;
|
const reviewerEntry = this.$.reviewers.focusStart;
|
||||||
Polymer.Base.async(() => {
|
reviewerEntry.async(reviewerEntry.focus);
|
||||||
reviewerEntry.inputElement.focus();
|
|
||||||
}, 1);
|
|
||||||
} else if (section === FocusTarget.CCS) {
|
} else if (section === FocusTarget.CCS) {
|
||||||
const ccEntry = this.$$('#ccs').focusStart;
|
const ccEntry = this.$$('#ccs').focusStart;
|
||||||
Polymer.Base.async(() => {
|
ccEntry.async(ccEntry.focus);
|
||||||
ccEntry.inputElement.focus();
|
|
||||||
}, 1);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@@ -267,14 +267,6 @@ limitations under the License.
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function testAsync(testFunc) {
|
|
||||||
return new Promise(resolve => {
|
|
||||||
Polymer.Base.async(() => {
|
|
||||||
resolve(testFunc());
|
|
||||||
}, 1);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function testConfirmationDialog(done, cc) {
|
function testConfirmationDialog(done, cc) {
|
||||||
const yesButton =
|
const yesButton =
|
||||||
element.$$('.reviewerConfirmationButtons gr-button:first-child');
|
element.$$('.reviewerConfirmationButtons gr-button:first-child');
|
||||||
@@ -326,59 +318,55 @@ limitations under the License.
|
|||||||
MockInteractions.tap(noButton); // close the overlay
|
MockInteractions.tap(noButton); // close the overlay
|
||||||
return observer;
|
return observer;
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
return testAsync(() => {
|
assert.isFalse(isVisible(element.$.reviewerConfirmationOverlay));
|
||||||
assert.isFalse(isVisible(element.$.reviewerConfirmationOverlay));
|
|
||||||
|
|
||||||
// We should be focused on account entry input.
|
// We should be focused on account entry input.
|
||||||
assert.equal(getActiveElement().tagName, 'INPUT');
|
assert.equal(getActiveElement().id, 'input');
|
||||||
|
|
||||||
// No reviewer/CC should have been added.
|
// No reviewer/CC should have been added.
|
||||||
assert.equal(element.$$('#ccs').additions().length, 0);
|
assert.equal(element.$$('#ccs').additions().length, 0);
|
||||||
assert.equal(element.$.reviewers.additions().length, 0);
|
assert.equal(element.$.reviewers.additions().length, 0);
|
||||||
|
|
||||||
// Reopen confirmation dialog.
|
// Reopen confirmation dialog.
|
||||||
observer = overlayObserver('opened');
|
observer = overlayObserver('opened');
|
||||||
if (cc) {
|
if (cc) {
|
||||||
element._ccPendingConfirmation = {
|
element._ccPendingConfirmation = {
|
||||||
group,
|
group,
|
||||||
count: 10,
|
count: 10,
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
element._reviewerPendingConfirmation = {
|
element._reviewerPendingConfirmation = {
|
||||||
group,
|
group,
|
||||||
count: 10,
|
count: 10,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return observer;
|
return observer;
|
||||||
});
|
}).then(() => {
|
||||||
}).then(x => {
|
|
||||||
assert.isTrue(isVisible(element.$.reviewerConfirmationOverlay));
|
assert.isTrue(isVisible(element.$.reviewerConfirmationOverlay));
|
||||||
observer = overlayObserver('closed');
|
observer = overlayObserver('closed');
|
||||||
MockInteractions.tap(yesButton); // Confirm the group.
|
MockInteractions.tap(yesButton); // Confirm the group.
|
||||||
return observer;
|
return observer;
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
return testAsync(() => {
|
assert.isFalse(isVisible(element.$.reviewerConfirmationOverlay));
|
||||||
assert.isFalse(isVisible(element.$.reviewerConfirmationOverlay));
|
const additions = cc ?
|
||||||
const additions = cc ?
|
element.$$('#ccs').additions() :
|
||||||
element.$$('#ccs').additions() :
|
element.$.reviewers.additions();
|
||||||
element.$.reviewers.additions();
|
assert.deepEqual(
|
||||||
assert.deepEqual(
|
additions,
|
||||||
additions,
|
[
|
||||||
[
|
{
|
||||||
{
|
group: {
|
||||||
group: {
|
id: 'id',
|
||||||
id: 'id',
|
name: 'name',
|
||||||
name: 'name',
|
confirmed: true,
|
||||||
confirmed: true,
|
_group: true,
|
||||||
_group: true,
|
_pendingAdd: true,
|
||||||
_pendingAdd: true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
]);
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
// We should be focused on account entry input.
|
// We should be focused on account entry input.
|
||||||
assert.equal(getActiveElement().tagName, 'INPUT');
|
assert.equal(getActiveElement().id, 'input');
|
||||||
});
|
|
||||||
}).then(done);
|
}).then(done);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -65,47 +65,35 @@ limitations under the License.
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('enter in search input triggers nav', done => {
|
test('enter in search input triggers nav', done => {
|
||||||
Polymer.Base.async(() => {
|
sinon.stub(page, 'show', () => {
|
||||||
sinon.stub(page, 'show', () => {
|
page.show.restore();
|
||||||
page.show.restore();
|
assert.notEqual(getActiveElement(), element.$.searchInput);
|
||||||
assert.notEqual(getActiveElement(), element.$.searchInput);
|
assert.notEqual(getActiveElement(), element.$.searchButton);
|
||||||
assert.notEqual(getActiveElement(), element.$.searchButton);
|
done();
|
||||||
done();
|
});
|
||||||
});
|
element.value = 'test';
|
||||||
element.value = 'test';
|
MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
|
||||||
MockInteractions.pressAndReleaseKeyOn(
|
null, 'enter');
|
||||||
element.$.searchInput.$.input.inputElement, 13,
|
|
||||||
null, 'enter');
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('search query should be double-escaped', done => {
|
test('search query should be double-escaped', () => {
|
||||||
Polymer.Base.async(() => {
|
const showStub = sinon.stub(page, 'show');
|
||||||
const showStub = sinon.stub(page, 'show');
|
element.$.searchInput.text = 'fate/stay';
|
||||||
element.$.searchInput.text = 'fate/stay';
|
MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
|
||||||
MockInteractions.pressAndReleaseKeyOn(
|
null, 'enter');
|
||||||
element.$.searchInput.$.input.inputElement, 13,
|
assert.equal(showStub.lastCall.args[0], '/q/fate%252Fstay');
|
||||||
null, 'enter');
|
showStub.restore();
|
||||||
assert.equal(showStub.lastCall.args[0], '/q/fate%252Fstay');
|
|
||||||
showStub.restore();
|
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('input blurred after commit', done => {
|
test('input blurred after commit', () => {
|
||||||
Polymer.Base.async(() => {
|
const showStub = sinon.stub(page, 'show');
|
||||||
const showStub = sinon.stub(page, 'show');
|
const blurSpy = sinon.spy(element.$.searchInput.$.input, 'blur');
|
||||||
const blurSpy = sinon.spy(
|
element.$.searchInput.text = 'fate/stay';
|
||||||
element.$.searchInput.$.input, 'blur');
|
MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
|
||||||
element.$.searchInput.text = 'fate/stay';
|
null, 'enter');
|
||||||
MockInteractions.pressAndReleaseKeyOn(
|
assert.isTrue(blurSpy.called);
|
||||||
element.$.searchInput.$.input.inputElement, 13,
|
showStub.restore();
|
||||||
null, 'enter');
|
blurSpy.restore();
|
||||||
assert.isTrue(blurSpy.called);
|
|
||||||
showStub.restore();
|
|
||||||
blurSpy.restore();
|
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('empty search query does not trigger nav', () => {
|
test('empty search query does not trigger nav', () => {
|
||||||
@@ -116,14 +104,12 @@ limitations under the License.
|
|||||||
assert.isFalse(showSpy.called);
|
assert.isFalse(showSpy.called);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('keyboard shortcuts', done => {
|
test('keyboard shortcuts', () => {
|
||||||
Polymer.Base.async(() => {
|
const focusSpy = sinon.spy(element.$.searchInput, 'focus');
|
||||||
const focusSpy = sinon.spy(element.$.searchInput, 'focus');
|
const selectAllSpy = sinon.spy(element.$.searchInput, 'selectAll');
|
||||||
const selectAllSpy = sinon.spy(element.$.searchInput, 'selectAll');
|
MockInteractions.pressAndReleaseKeyOn(document.body, 191, null, '/');
|
||||||
MockInteractions.pressAndReleaseKeyOn(document.body, 191, null, '/');
|
assert.isTrue(focusSpy.called);
|
||||||
assert.isTrue(focusSpy.called);
|
assert.isTrue(selectAllSpy.called);
|
||||||
assert.isTrue(selectAllSpy.called); done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
suite('_getSearchSuggestions', () => {
|
suite('_getSearchSuggestions', () => {
|
||||||
|
@@ -93,58 +93,49 @@ limitations under the License.
|
|||||||
</div>
|
</div>
|
||||||
<div class="pref">
|
<div class="pref">
|
||||||
<label for="lineWrappingInput">Fit to screen</label>
|
<label for="lineWrappingInput">Fit to screen</label>
|
||||||
<input type="checkbox"
|
<input
|
||||||
|
is="iron-input"
|
||||||
|
type="checkbox"
|
||||||
id="lineWrappingInput"
|
id="lineWrappingInput"
|
||||||
on-tap="_handlelineWrappingTap">
|
on-tap="_handlelineWrappingTap">
|
||||||
</div>
|
</div>
|
||||||
<div class="pref" id="columnsPref"
|
<div class="pref" id="columnsPref"
|
||||||
hidden$="[[_newPrefs.line_wrapping]]">
|
hidden$="[[_newPrefs.line_wrapping]]">
|
||||||
<label for="columnsInput">Diff width</label>
|
<label for="columnsInput">Diff width</label>
|
||||||
<iron-input
|
<input is="iron-input" type="number" id="columnsInput"
|
||||||
id="columnsInput"
|
prevent-invalid-input
|
||||||
bind-value="{{_newPrefs.line_length}}"
|
allowed-pattern="[0-9]"
|
||||||
allowed-pattern="[0-9]">
|
bind-value="{{_newPrefs.line_length}}">
|
||||||
<input type="number">
|
|
||||||
</iron-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="pref">
|
<div class="pref">
|
||||||
<label for="tabSizeInput">Tab width</label>
|
<label for="tabSizeInput">Tab width</label>
|
||||||
<iron-input
|
<input is="iron-input" type="number" id="tabSizeInput"
|
||||||
id="tabSizeInput"
|
prevent-invalid-input
|
||||||
allowed-pattern="[0-9]"
|
allowed-pattern="[0-9]"
|
||||||
bind-value="{{_newPrefs.tab_size}}">
|
bind-value="{{_newPrefs.tab_size}}">
|
||||||
<input type="number">
|
|
||||||
</iron-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="pref" hidden$="[[!_newPrefs.font_size]]">
|
<div class="pref" hidden$="[[!_newPrefs.font_size]]">
|
||||||
<label for="fontSizeInput">Font size</label>
|
<label for="fontSizeInput">Font size</label>
|
||||||
<iron-input
|
<input is="iron-input" type="number" id="fontSizeInput"
|
||||||
id="fontSizeInput"
|
prevent-invalid-input
|
||||||
allowed-pattern="[0-9]"
|
allowed-pattern="[0-9]"
|
||||||
bind-value="{{_newPrefs.font_size}}">
|
bind-value="{{_newPrefs.font_size}}">
|
||||||
<input type="number">
|
|
||||||
</iron-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="pref">
|
<div class="pref">
|
||||||
<label for="showTabsInput">Show tabs</label>
|
<label for="showTabsInput">Show tabs</label>
|
||||||
<input
|
<input is="iron-input" type="checkbox" id="showTabsInput"
|
||||||
type="checkbox"
|
|
||||||
id="showTabsInput"
|
|
||||||
on-tap="_handleShowTabsTap">
|
on-tap="_handleShowTabsTap">
|
||||||
</div>
|
</div>
|
||||||
<div class="pref">
|
<div class="pref">
|
||||||
<label for="showTrailingWhitespaceInput">
|
<label for="showTrailingWhitespaceInput">
|
||||||
Show trailing whitespace</label>
|
Show trailing whitespace</label>
|
||||||
<input
|
<input is="iron-input" type="checkbox"
|
||||||
id="showTrailingWhitespaceInput"
|
id="showTrailingWhitespaceInput"
|
||||||
type="checkbox"
|
|
||||||
on-tap="_handleShowTrailingWhitespaceTap">
|
on-tap="_handleShowTrailingWhitespaceTap">
|
||||||
</div>
|
</div>
|
||||||
<div class="pref">
|
<div class="pref">
|
||||||
<label for="syntaxHighlightInput">Syntax highlighting</label>
|
<label for="syntaxHighlightInput">Syntax highlighting</label>
|
||||||
<input
|
<input is="iron-input" type="checkbox" id="syntaxHighlightInput"
|
||||||
id="syntaxHighlightInput"
|
|
||||||
type="checkbox"
|
|
||||||
on-tap="_handleSyntaxHighlightTap">
|
on-tap="_handleSyntaxHighlightTap">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -45,39 +45,36 @@ limitations under the License.
|
|||||||
sandbox.restore();
|
sandbox.restore();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('model changes', done => {
|
test('model changes', () => {
|
||||||
Polymer.Base.async(() => {
|
element.prefs = {
|
||||||
element.prefs = {
|
context: 10,
|
||||||
context: 10,
|
font_size: 12,
|
||||||
font_size: 12,
|
line_length: 100,
|
||||||
line_length: 100,
|
show_tabs: true,
|
||||||
show_tabs: true,
|
tab_size: 8,
|
||||||
tab_size: 8,
|
show_whitespace_errors: true,
|
||||||
show_whitespace_errors: true,
|
syntax_highlighting: true,
|
||||||
syntax_highlighting: true,
|
};
|
||||||
};
|
assert.deepEqual(element.prefs, element._newPrefs);
|
||||||
assert.deepEqual(element.prefs, element._newPrefs);
|
|
||||||
|
|
||||||
element.$.contextSelect.value = '50';
|
element.$.contextSelect.value = '50';
|
||||||
element.fire('change', {}, {node: element.$.contextSelect});
|
element.fire('change', {}, {node: element.$.contextSelect});
|
||||||
element.$.columnsInput.bindValue = 80;
|
element.$.columnsInput.bindValue = 80;
|
||||||
element.$.fontSizeInput.bindValue = 10;
|
element.$.fontSizeInput.bindValue = 10;
|
||||||
element.$.tabSizeInput.bindValue = 4;
|
element.$.tabSizeInput.bindValue = 4;
|
||||||
MockInteractions.tap(element.$.showTabsInput);
|
MockInteractions.tap(element.$.showTabsInput);
|
||||||
MockInteractions.tap(element.$.showTrailingWhitespaceInput);
|
MockInteractions.tap(element.$.showTrailingWhitespaceInput);
|
||||||
MockInteractions.tap(element.$.syntaxHighlightInput);
|
MockInteractions.tap(element.$.syntaxHighlightInput);
|
||||||
MockInteractions.tap(element.$.lineWrappingInput);
|
MockInteractions.tap(element.$.lineWrappingInput);
|
||||||
|
|
||||||
assert.equal(element._newPrefs.context, 50);
|
assert.equal(element._newPrefs.context, 50);
|
||||||
assert.equal(element._newPrefs.font_size, 10);
|
assert.equal(element._newPrefs.font_size, 10);
|
||||||
assert.equal(element._newPrefs.line_length, 80);
|
assert.equal(element._newPrefs.line_length, 80);
|
||||||
assert.equal(element._newPrefs.tab_size, 4);
|
assert.equal(element._newPrefs.tab_size, 4);
|
||||||
assert.isFalse(element._newPrefs.show_tabs);
|
assert.isFalse(element._newPrefs.show_tabs);
|
||||||
assert.isFalse(element._newPrefs.show_whitespace_errors);
|
assert.isFalse(element._newPrefs.show_whitespace_errors);
|
||||||
assert.isTrue(element._newPrefs.line_wrapping);
|
assert.isTrue(element._newPrefs.line_wrapping);
|
||||||
assert.isFalse(element._newPrefs.syntax_highlighting);
|
assert.isFalse(element._newPrefs.syntax_highlighting);
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('clicking fit to screen hides line length input', () => {
|
test('clicking fit to screen hides line length input', () => {
|
||||||
|
@@ -16,7 +16,6 @@ limitations under the License.
|
|||||||
|
|
||||||
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
||||||
|
|
||||||
<link rel="import" href="../../../bower_components/iron-input/iron-input.html">
|
|
||||||
<link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.html">
|
<link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.html">
|
||||||
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
||||||
|
|
||||||
@@ -57,25 +56,24 @@ limitations under the License.
|
|||||||
<span
|
<span
|
||||||
hidden$="[[!mutable]]"
|
hidden$="[[!mutable]]"
|
||||||
class="value">
|
class="value">
|
||||||
<iron-input
|
<input
|
||||||
|
is="iron-input"
|
||||||
id="nameInput"
|
id="nameInput"
|
||||||
|
disabled="[[_saving]]"
|
||||||
|
on-keydown="_handleKeydown"
|
||||||
bind-value="{{_account.name}}">
|
bind-value="{{_account.name}}">
|
||||||
<input disabled="[[_saving]]"
|
|
||||||
on-keydown="_handleKeydown">
|
|
||||||
</iron-input>
|
|
||||||
</span>
|
</span>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<span class="title">Status</span>
|
<span class="title">Status</span>
|
||||||
<span class="value">
|
<span class="value">
|
||||||
<iron-input
|
<input
|
||||||
|
is="iron-input"
|
||||||
id="statusInput"
|
id="statusInput"
|
||||||
|
disabled="[[_saving]]"
|
||||||
|
on-keydown="_handleKeydown"
|
||||||
bind-value="{{_account.status}}">
|
bind-value="{{_account.status}}">
|
||||||
<input
|
</span>
|
||||||
disabled="[[_saving]]"
|
|
||||||
on-keydown="_handleKeydown">
|
|
||||||
</iron-input>
|
|
||||||
</span>
|
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
|
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
|
||||||
|
@@ -128,26 +128,23 @@ limitations under the License.
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('name', done => {
|
test('name', done => {
|
||||||
Polymer.Base.async(() => {
|
assert.isTrue(element.mutable);
|
||||||
assert.isTrue(element.mutable);
|
assert.isFalse(element.hasUnsavedChanges);
|
||||||
assert.isFalse(element.hasUnsavedChanges);
|
|
||||||
|
|
||||||
element.set('_account.name', 'new name');
|
element.set('_account.name', 'new name');
|
||||||
|
|
||||||
assert.isTrue(nameChangedSpy.called);
|
assert.isTrue(nameChangedSpy.called);
|
||||||
assert.isFalse(statusChangedSpy.called);
|
assert.isFalse(statusChangedSpy.called);
|
||||||
assert.isTrue(element.hasUnsavedChanges);
|
assert.isTrue(element.hasUnsavedChanges);
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(
|
MockInteractions.pressAndReleaseKeyOn(element.$.nameInput, 13);
|
||||||
element.$.nameInput.inputElement, 13);
|
|
||||||
|
|
||||||
assert.isTrue(nameStub.called);
|
assert.isTrue(nameStub.called);
|
||||||
assert.isFalse(statusStub.called);
|
assert.isFalse(statusStub.called);
|
||||||
nameStub.lastCall.returnValue.then(() => {
|
nameStub.lastCall.returnValue.then(() => {
|
||||||
assert.equal(nameStub.lastCall.args[0], 'new name');
|
assert.equal(nameStub.lastCall.args[0], 'new name');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('status', done => {
|
test('status', done => {
|
||||||
|
@@ -15,6 +15,7 @@ limitations under the License.
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
||||||
|
<link rel="import" href="../../../bower_components/iron-input/iron-input.html">
|
||||||
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
||||||
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
||||||
<link rel="import" href="../../../styles/shared-styles.html">
|
<link rel="import" href="../../../styles/shared-styles.html">
|
||||||
@@ -62,6 +63,7 @@ limitations under the License.
|
|||||||
<td class="emailColumn">[[item.email]]</td>
|
<td class="emailColumn">[[item.email]]</td>
|
||||||
<td class="preferredControl" on-tap="_handlePreferredControlTap">
|
<td class="preferredControl" on-tap="_handlePreferredControlTap">
|
||||||
<input
|
<input
|
||||||
|
is="iron-input"
|
||||||
class="preferredRadio"
|
class="preferredRadio"
|
||||||
type="radio"
|
type="radio"
|
||||||
on-change="_handlePreferredChange"
|
on-change="_handlePreferredChange"
|
||||||
|
@@ -81,22 +81,19 @@ limitations under the License.
|
|||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
<iron-input bind-value="{{_newName}}">
|
<input
|
||||||
<input
|
is="iron-input"
|
||||||
type="text"
|
placeholder="New Title"
|
||||||
placeholder="New Title"
|
on-keydown="_handleInputKeydown"
|
||||||
on-keydown="_handleInputKeydown">
|
bind-value="{{_newName}}">
|
||||||
</iron-input>
|
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
<iron-input
|
<input
|
||||||
class="newUrlInput"
|
class="newUrlInput"
|
||||||
|
is="iron-input"
|
||||||
|
placeholder="New URL"
|
||||||
|
on-keydown="_handleInputKeydown"
|
||||||
bind-value="{{_newUrl}}">
|
bind-value="{{_newUrl}}">
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
placeholder="New URL"
|
|
||||||
on-keydown="_handleInputKeydown">
|
|
||||||
</iron-input>
|
|
||||||
</th>
|
</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
|
@@ -58,7 +58,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
_computeAddDisabled(newName, newUrl) {
|
_computeAddDisabled(newName, newUrl) {
|
||||||
return !newName || !newUrl;
|
return !newName.length || !newUrl.length;
|
||||||
},
|
},
|
||||||
|
|
||||||
_handleInputKeydown(e) {
|
_handleInputKeydown(e) {
|
||||||
|
@@ -64,22 +64,19 @@ limitations under the License.
|
|||||||
Polymer.dom.flush();
|
Polymer.dom.flush();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('renders', done => {
|
test('renders', () => {
|
||||||
const rows = element.$$('tbody').querySelectorAll('tr');
|
const rows = element.$$('tbody').querySelectorAll('tr');
|
||||||
let tds;
|
let tds;
|
||||||
|
|
||||||
Polymer.Base.async(() => {
|
assert.equal(rows.length, menu.length);
|
||||||
assert.equal(rows.length, menu.length);
|
for (let i = 0; i < menu.length; i++) {
|
||||||
for (let i = 0; i < menu.length; i++) {
|
tds = rows[i].querySelectorAll('td');
|
||||||
tds = rows[i].querySelectorAll('td');
|
assert.equal(tds[0].textContent, menu[i].name);
|
||||||
assert.equal(tds[0].textContent, menu[i].name);
|
assert.equal(tds[1].textContent, menu[i].url);
|
||||||
assert.equal(tds[1].textContent, menu[i].url);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
assert.isTrue(element._computeAddDisabled(element._newName,
|
assert.isTrue(element._computeAddDisabled(element._newName,
|
||||||
element._newUrl));
|
element._newUrl));
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('_computeAddDisabled', () => {
|
test('_computeAddDisabled', () => {
|
||||||
@@ -89,27 +86,23 @@ limitations under the License.
|
|||||||
assert.isFalse(element._computeAddDisabled('name', 'url'));
|
assert.isFalse(element._computeAddDisabled('name', 'url'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('add a new menu item', done => {
|
test('add a new menu item', () => {
|
||||||
const newName = 'new name';
|
const newName = 'new name';
|
||||||
const newUrl = 'new url';
|
const newUrl = 'new url';
|
||||||
|
|
||||||
Polymer.Base.async(() => {
|
element._newName = newName;
|
||||||
element._newName = newName;
|
element._newUrl = newUrl;
|
||||||
element._newUrl = newUrl;
|
assert.isFalse(element._computeAddDisabled(element._newName,
|
||||||
|
element._newUrl));
|
||||||
|
|
||||||
assert.isFalse(element._computeAddDisabled(element._newName,
|
const originalMenuLength = element.menuItems.length;
|
||||||
element._newUrl));
|
|
||||||
|
|
||||||
const originalMenuLength = element.menuItems.length;
|
element._handleAddButton();
|
||||||
|
|
||||||
element._handleAddButton();
|
assert.equal(element.menuItems.length, originalMenuLength + 1);
|
||||||
|
assert.equal(element.menuItems[element.menuItems.length - 1].name,
|
||||||
assert.equal(element.menuItems.length, originalMenuLength + 1);
|
newName);
|
||||||
assert.equal(element.menuItems[element.menuItems.length - 1].name,
|
assert.equal(element.menuItems[element.menuItems.length - 1].url, newUrl);
|
||||||
newName);
|
|
||||||
assert.equal(element.menuItems[element.menuItems.length - 1].url, newUrl);
|
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('move items down', () => {
|
test('move items down', () => {
|
||||||
|
@@ -15,11 +15,10 @@ limitations under the License.
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
||||||
|
|
||||||
<link rel="import" href="../../../styles/gr-form-styles.html">
|
<link rel="import" href="../../../styles/gr-form-styles.html">
|
||||||
<link rel="import" href="../../../styles/shared-styles.html">
|
|
||||||
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
||||||
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
||||||
|
<link rel="import" href="../../../styles/shared-styles.html">
|
||||||
|
|
||||||
<dom-module id="gr-registration-dialog">
|
<dom-module id="gr-registration-dialog">
|
||||||
<template>
|
<template>
|
||||||
@@ -61,11 +60,12 @@ limitations under the License.
|
|||||||
<hr>
|
<hr>
|
||||||
<section>
|
<section>
|
||||||
<div class="title">Full Name</div>
|
<div class="title">Full Name</div>
|
||||||
<input
|
<input
|
||||||
id="name"
|
is="iron-input"
|
||||||
disabled="[[_saving]]"
|
id="name"
|
||||||
on-keydown="_handleNameKeydown"
|
bind-value="{{_account.name}}"
|
||||||
value="[[_account.name]]">
|
disabled="[[_saving]]"
|
||||||
|
on-keydown="_handleNameKeydown">
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<div class="title">Preferred Email</div>
|
<div class="title">Preferred Email</div>
|
||||||
|
@@ -222,31 +222,34 @@ limitations under the License.
|
|||||||
<section id="columnsPref" hidden$="[[_diffPrefs.line_wrapping]]">
|
<section id="columnsPref" hidden$="[[_diffPrefs.line_wrapping]]">
|
||||||
<span class="title">Diff width</span>
|
<span class="title">Diff width</span>
|
||||||
<span class="value">
|
<span class="value">
|
||||||
<iron-input
|
<input
|
||||||
|
is="iron-input"
|
||||||
|
type="number"
|
||||||
|
prevent-invalid-input
|
||||||
allowed-pattern="[0-9]"
|
allowed-pattern="[0-9]"
|
||||||
bind-value="{{_diffPrefs.line_length}}">
|
bind-value="{{_diffPrefs.line_length}}">
|
||||||
<input type="number">
|
|
||||||
</iron-input>
|
|
||||||
</span>
|
</span>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<span class="title">Tab width</span>
|
<span class="title">Tab width</span>
|
||||||
<span class="value">
|
<span class="value">
|
||||||
<iron-input
|
<input
|
||||||
|
is="iron-input"
|
||||||
|
type="number"
|
||||||
|
prevent-invalid-input
|
||||||
allowed-pattern="[0-9]"
|
allowed-pattern="[0-9]"
|
||||||
bind-value="{{_diffPrefs.tab_size}}">
|
bind-value="{{_diffPrefs.tab_size}}">
|
||||||
<input type="number">
|
|
||||||
</iron-input>
|
|
||||||
</span>
|
</span>
|
||||||
</section>
|
</section>
|
||||||
<section hidden$="[[!_diffPrefs.font_size]]">
|
<section hidden$="[[!_diffPrefs.font_size]]">
|
||||||
<span class="title">Font size</span>
|
<span class="title">Font size</span>
|
||||||
<span class="value">
|
<span class="value">
|
||||||
<iron-input
|
<input
|
||||||
allowed-pattern="[0-9]"
|
is="iron-input"
|
||||||
|
type="number"
|
||||||
|
prevent-invalid-input
|
||||||
|
allowed-pattern="[0-9]"
|
||||||
bind-value="{{_diffPrefs.font_size}}">
|
bind-value="{{_diffPrefs.font_size}}">
|
||||||
<input type="number">
|
|
||||||
</iron-input>
|
|
||||||
</span>
|
</span>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
@@ -336,15 +339,14 @@ limitations under the License.
|
|||||||
<section>
|
<section>
|
||||||
<span class="title">New email address</span>
|
<span class="title">New email address</span>
|
||||||
<span class="value">
|
<span class="value">
|
||||||
<iron-input
|
<input
|
||||||
id="newEmailInput"
|
id="newEmailInput"
|
||||||
bind-value="{{_newEmail}}">
|
bind-value="{{_newEmail}}"
|
||||||
<input
|
is="iron-input"
|
||||||
type="text"
|
type="text"
|
||||||
disabled="[[_addingEmail]]"
|
disabled="[[_addingEmail]]"
|
||||||
on-keydown="_handleNewEmailKeydown"
|
on-keydown="_handleNewEmailKeydown"
|
||||||
placeholder="email@example.com">
|
placeholder="email@example.com">
|
||||||
</iron-input>
|
|
||||||
</span>
|
</span>
|
||||||
</section>
|
</section>
|
||||||
<section
|
<section
|
||||||
|
@@ -102,6 +102,7 @@ limitations under the License.
|
|||||||
<input
|
<input
|
||||||
id="newFilter"
|
id="newFilter"
|
||||||
class="newFilterInput"
|
class="newFilterInput"
|
||||||
|
is="iron-input"
|
||||||
placeholder="branch:name, or other search expression">
|
placeholder="branch:name, or other search expression">
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
|
@@ -161,7 +161,7 @@ limitations under the License.
|
|||||||
test('_handleAddProject', () => {
|
test('_handleAddProject', () => {
|
||||||
element.$.newProject.value = {id: 'project d'};
|
element.$.newProject.value = {id: 'project d'};
|
||||||
element.$.newProject.setText('project d');
|
element.$.newProject.setText('project d');
|
||||||
element.$.newFilter.value = '';
|
element.$.newFilter.bindValue = '';
|
||||||
|
|
||||||
element._handleAddProject();
|
element._handleAddProject();
|
||||||
|
|
||||||
@@ -174,7 +174,7 @@ limitations under the License.
|
|||||||
test('_handleAddProject with invalid inputs', () => {
|
test('_handleAddProject with invalid inputs', () => {
|
||||||
element.$.newProject.value = {id: 'project b'};
|
element.$.newProject.value = {id: 'project b'};
|
||||||
element.$.newProject.setText('project b');
|
element.$.newProject.setText('project b');
|
||||||
element.$.newFilter.value = 'filter 1';
|
element.$.newFilter.bindValue = 'filter 1';
|
||||||
|
|
||||||
element._handleAddProject();
|
element._handleAddProject();
|
||||||
|
|
||||||
|
@@ -23,34 +23,32 @@ limitations under the License.
|
|||||||
<dom-module id="gr-autocomplete">
|
<dom-module id="gr-autocomplete">
|
||||||
<template>
|
<template>
|
||||||
<style include="shared-styles">
|
<style include="shared-styles">
|
||||||
iron-input, input {
|
input {
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
|
||||||
iron-input {
|
|
||||||
@apply --gr-autocomplete;
|
@apply --gr-autocomplete;
|
||||||
}
|
}
|
||||||
iron-input.borderless input,
|
input.borderless,
|
||||||
iron-input.borderless:focus input {
|
input.borderless:focus {
|
||||||
border: none;
|
border: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
iron-input.warnUncommitted input {
|
input.warnUncommitted {
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<iron-input id="input"
|
<input
|
||||||
|
id="input"
|
||||||
class$="[[_computeClass(borderless)]]"
|
class$="[[_computeClass(borderless)]]"
|
||||||
bind-value="{{text}}">
|
is="iron-input"
|
||||||
<input
|
disabled$="[[disabled]]"
|
||||||
disabled$="[[disabled]]"
|
bind-value="{{text}}"
|
||||||
placeholder="[[placeholder]]"
|
placeholder="[[placeholder]]"
|
||||||
on-keydown="_handleKeydown"
|
on-keydown="_handleKeydown"
|
||||||
on-focus="_onInputFocus"
|
on-focus="_onInputFocus"
|
||||||
on-blur="_onInputBlur"
|
on-blur="_onInputBlur"
|
||||||
autocomplete="off" />
|
autocomplete="off" />
|
||||||
</iron-input>
|
|
||||||
<!-- This container is needed for Safari and Firefox -->
|
<!-- This container is needed for Safari and Firefox -->
|
||||||
<div id="suggestionContainer">
|
<div id="suggestionContainer">
|
||||||
<gr-autocomplete-dropdown id="suggestions"
|
<gr-autocomplete-dropdown id="suggestions"
|
||||||
|
@@ -154,8 +154,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
selectAll() {
|
selectAll() {
|
||||||
this.$.input.inputElement.setSelectionRange(0,
|
this.$.input.setSelectionRange(0, this.$.input.value.length);
|
||||||
this.$.input.bindValue.length);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
clear() {
|
clear() {
|
||||||
|
@@ -100,14 +100,12 @@ limitations under the License.
|
|||||||
const cancelHandler = sandbox.spy();
|
const cancelHandler = sandbox.spy();
|
||||||
element.addEventListener('cancel', cancelHandler);
|
element.addEventListener('cancel', cancelHandler);
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 27,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 27, null, 'esc');
|
||||||
null, 'esc');
|
|
||||||
assert.isFalse(cancelHandler.called);
|
assert.isFalse(cancelHandler.called);
|
||||||
assert.isTrue(element.$.suggestions.hidden);
|
assert.isTrue(element.$.suggestions.hidden);
|
||||||
assert.equal(element._suggestions.length, 0);
|
assert.equal(element._suggestions.length, 0);
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 27,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 27, null, 'esc');
|
||||||
null, 'esc');
|
|
||||||
assert.isTrue(cancelHandler.called);
|
assert.isTrue(cancelHandler.called);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
@@ -139,23 +137,22 @@ limitations under the License.
|
|||||||
|
|
||||||
assert.equal(element.$.suggestions.$.cursor.index, 0);
|
assert.equal(element.$.suggestions.$.cursor.index, 0);
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 40,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 40, null,
|
||||||
null, 'down');
|
'down');
|
||||||
|
|
||||||
assert.equal(element.$.suggestions.$.cursor.index, 1);
|
assert.equal(element.$.suggestions.$.cursor.index, 1);
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 40,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 40, null,
|
||||||
null, 'down');
|
'down');
|
||||||
|
|
||||||
assert.equal(element.$.suggestions.$.cursor.index, 2);
|
assert.equal(element.$.suggestions.$.cursor.index, 2);
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 38,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 38, null, 'up');
|
||||||
null, 'up');
|
|
||||||
|
|
||||||
assert.equal(element.$.suggestions.$.cursor.index, 1);
|
assert.equal(element.$.suggestions.$.cursor.index, 1);
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 13,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 13, null,
|
||||||
null, 'enter');
|
'enter');
|
||||||
|
|
||||||
assert.equal(element.value, 1);
|
assert.equal(element.value, 1);
|
||||||
assert.isTrue(commitHandler.called);
|
assert.isTrue(commitHandler.called);
|
||||||
@@ -178,8 +175,8 @@ limitations under the License.
|
|||||||
const commitHandler = sandbox.spy();
|
const commitHandler = sandbox.spy();
|
||||||
element.addEventListener('commit', commitHandler);
|
element.addEventListener('commit', commitHandler);
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 13,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 13, null,
|
||||||
null, 'enter');
|
'enter');
|
||||||
|
|
||||||
assert.isTrue(commitHandler.called);
|
assert.isTrue(commitHandler.called);
|
||||||
assert.equal(element.text, 'suggestion');
|
assert.equal(element.text, 'suggestion');
|
||||||
@@ -200,8 +197,8 @@ limitations under the License.
|
|||||||
const commitHandler = sandbox.spy();
|
const commitHandler = sandbox.spy();
|
||||||
element.addEventListener('commit', commitHandler);
|
element.addEventListener('commit', commitHandler);
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 13,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 13, null,
|
||||||
null, 'enter');
|
'enter');
|
||||||
|
|
||||||
assert.isTrue(commitHandler.called);
|
assert.isTrue(commitHandler.called);
|
||||||
assert.equal(element.text, '');
|
assert.equal(element.text, '');
|
||||||
@@ -251,8 +248,8 @@ limitations under the License.
|
|||||||
const commitHandler = sandbox.spy();
|
const commitHandler = sandbox.spy();
|
||||||
element.addEventListener('commit', commitHandler);
|
element.addEventListener('commit', commitHandler);
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 13,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 13, null,
|
||||||
null, 'enter');
|
'enter');
|
||||||
|
|
||||||
assert.isTrue(commitHandler.called);
|
assert.isTrue(commitHandler.called);
|
||||||
assert.equal(element.text, 'blah 0');
|
assert.equal(element.text, 'blah 0');
|
||||||
@@ -270,16 +267,14 @@ limitations under the License.
|
|||||||
|
|
||||||
element._suggestions = ['tunnel snakes rule!'];
|
element._suggestions = ['tunnel snakes rule!'];
|
||||||
element.tabComplete = false;
|
element.tabComplete = false;
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 9,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 9, null, 'tab');
|
||||||
null, 'tab');
|
|
||||||
assert.isFalse(commitHandler.called);
|
assert.isFalse(commitHandler.called);
|
||||||
assert.isFalse(commitSpy.called);
|
assert.isFalse(commitSpy.called);
|
||||||
assert.isFalse(element._focused);
|
assert.isFalse(element._focused);
|
||||||
|
|
||||||
element.tabComplete = true;
|
element.tabComplete = true;
|
||||||
element._focused = true;
|
element._focused = true;
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 9,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 9, null, 'tab');
|
||||||
null, 'tab');
|
|
||||||
assert.isFalse(commitHandler.called);
|
assert.isFalse(commitHandler.called);
|
||||||
assert.isTrue(commitSpy.called);
|
assert.isTrue(commitSpy.called);
|
||||||
assert.isTrue(element._focused);
|
assert.isTrue(element._focused);
|
||||||
@@ -312,8 +307,8 @@ limitations under the License.
|
|||||||
test('enter does not call focus', () => {
|
test('enter does not call focus', () => {
|
||||||
element._suggestions = ['sugar bombs'];
|
element._suggestions = ['sugar bombs'];
|
||||||
focusSpy = sandbox.spy(element, 'focus');
|
focusSpy = sandbox.spy(element, 'focus');
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 13,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 13, null,
|
||||||
null, 'enter');
|
'enter');
|
||||||
flushAsynchronousOperations();
|
flushAsynchronousOperations();
|
||||||
|
|
||||||
assert.isTrue(commitSpy.called);
|
assert.isTrue(commitSpy.called);
|
||||||
@@ -325,8 +320,7 @@ limitations under the License.
|
|||||||
element._suggestions = ['sugar bombs'];
|
element._suggestions = ['sugar bombs'];
|
||||||
focusSpy = sandbox.spy(element, 'focus');
|
focusSpy = sandbox.spy(element, 'focus');
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 9,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 9, null, 'tab');
|
||||||
null, 'tab');
|
|
||||||
flushAsynchronousOperations();
|
flushAsynchronousOperations();
|
||||||
|
|
||||||
assert.isFalse(commitSpy.called);
|
assert.isFalse(commitSpy.called);
|
||||||
@@ -335,8 +329,7 @@ limitations under the License.
|
|||||||
|
|
||||||
element.tabComplete = true;
|
element.tabComplete = true;
|
||||||
element._suggestions = ['tunnel snakes drool'];
|
element._suggestions = ['tunnel snakes drool'];
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 9,
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 9, null, 'tab');
|
||||||
null, 'tab');
|
|
||||||
flushAsynchronousOperations();
|
flushAsynchronousOperations();
|
||||||
|
|
||||||
assert.isTrue(commitSpy.called);
|
assert.isTrue(commitSpy.called);
|
||||||
@@ -393,16 +386,12 @@ limitations under the License.
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('input-keydown event fired', done => {
|
test('input-keydown event fired', () => {
|
||||||
Polymer.Base.async(() => {
|
const listener = sandbox.spy();
|
||||||
const listener = sandbox.spy();
|
element.addEventListener('input-keydown', listener);
|
||||||
element.addEventListener('input-keydown', listener);
|
MockInteractions.pressAndReleaseKeyOn(element.$.input, 9, null, 'tab');
|
||||||
MockInteractions.pressAndReleaseKeyOn(element.$.input.inputElement, 9,
|
flushAsynchronousOperations();
|
||||||
null, 'tab');
|
assert.isTrue(listener.called);
|
||||||
flushAsynchronousOperations();
|
|
||||||
assert.isTrue(listener.called);
|
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
suite('warnUncommitted', () => {
|
suite('warnUncommitted', () => {
|
||||||
@@ -411,36 +400,27 @@ limitations under the License.
|
|||||||
inputClassList = element.$.input.classList;
|
inputClassList = element.$.input.classList;
|
||||||
});
|
});
|
||||||
|
|
||||||
test('enabled', done => {
|
test('enabled', () => {
|
||||||
Polymer.Base.async(() => {
|
element.warnUncommitted = true;
|
||||||
element.warnUncommitted = true;
|
element.text = 'blah blah blah';
|
||||||
element.text = 'blah blah blah';
|
MockInteractions.blur(element.$.input);
|
||||||
MockInteractions.blur(element.$.input.inputElement);
|
assert.isTrue(inputClassList.contains('warnUncommitted'));
|
||||||
assert.isTrue(inputClassList.contains('warnUncommitted'));
|
MockInteractions.focus(element.$.input);
|
||||||
MockInteractions.focus(element.$.input.inputElement);
|
assert.isFalse(inputClassList.contains('warnUncommitted'));
|
||||||
assert.isFalse(inputClassList.contains('warnUncommitted'));
|
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('disabled', done => {
|
test('disabled', () => {
|
||||||
Polymer.Base.async(() => {
|
element.warnUncommitted = false;
|
||||||
element.warnUncommitted = false;
|
element.text = 'blah blah blah';
|
||||||
element.text = 'blah blah blah';
|
MockInteractions.blur(element.$.input);
|
||||||
MockInteractions.blur(element.$.input.inputElement);
|
assert.isFalse(inputClassList.contains('warnUncommitted'));
|
||||||
assert.isFalse(inputClassList.contains('warnUncommitted'));
|
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('no text', done => {
|
test('no text', () => {
|
||||||
Polymer.Base.async(() => {
|
element.warnUncommitted = true;
|
||||||
element.warnUncommitted = true;
|
element.text = '';
|
||||||
element.text = '';
|
MockInteractions.blur(element.$.input);
|
||||||
MockInteractions.blur(element.$.input.inputElement);
|
assert.isFalse(inputClassList.contains('warnUncommitted'));
|
||||||
assert.isFalse(inputClassList.contains('warnUncommitted'));
|
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -15,6 +15,7 @@ limitations under the License.
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
||||||
|
<link rel="import" href="../../../bower_components/iron-input/iron-input.html">
|
||||||
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
||||||
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
||||||
<link rel="import" href="../../../styles/shared-styles.html">
|
<link rel="import" href="../../../styles/shared-styles.html">
|
||||||
@@ -45,13 +46,12 @@ limitations under the License.
|
|||||||
</style>
|
</style>
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<label>[[title]]</label>
|
<label>[[title]]</label>
|
||||||
<input
|
<input id="input" is="iron-input"
|
||||||
id="input"
|
|
||||||
type="text"
|
|
||||||
on-tap="_handleInputTap"
|
|
||||||
readonly
|
|
||||||
class$="copyText [[_computeInputClass(hideInput)]]"
|
class$="copyText [[_computeInputClass(hideInput)]]"
|
||||||
value="[[text]]">
|
type="text"
|
||||||
|
bind-value="[[text]]"
|
||||||
|
on-tap="_handleInputTap"
|
||||||
|
readonly>
|
||||||
<gr-button id="button"
|
<gr-button id="button"
|
||||||
class="copyToClipboard"
|
class="copyToClipboard"
|
||||||
on-tap="_copyToClipboard">
|
on-tap="_copyToClipboard">
|
||||||
|
@@ -45,12 +45,11 @@ limitations under the License.
|
|||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<iron-input
|
<input
|
||||||
|
is="iron-input"
|
||||||
id="input"
|
id="input"
|
||||||
bind-value="{{_inputText}}"
|
hidden$="[[!editing]]"
|
||||||
hidden$="[[!editing]]">
|
bind-value="{{_inputText}}">
|
||||||
<input>
|
|
||||||
</iron-input>
|
|
||||||
<label
|
<label
|
||||||
hidden$="[[editing]]"
|
hidden$="[[editing]]"
|
||||||
class$="[[_computeLabelClass(readOnly, value, placeholder)]]"
|
class$="[[_computeLabelClass(readOnly, value, placeholder)]]"
|
||||||
|
@@ -76,9 +76,8 @@
|
|||||||
this.editing = true;
|
this.editing = true;
|
||||||
|
|
||||||
this.async(() => {
|
this.async(() => {
|
||||||
this.$.input.inputElement.focus();
|
this.$.input.focus();
|
||||||
this.$.input.inputElement
|
this.$.input.setSelectionRange(0, this.$.input.value.length);
|
||||||
.setSelectionRange(0, this.$.input.inputElement.value.length);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -100,7 +99,7 @@
|
|||||||
_handleEnter(e) {
|
_handleEnter(e) {
|
||||||
e = this.getKeyboardEvent(e);
|
e = this.getKeyboardEvent(e);
|
||||||
const target = Polymer.dom(e).rootTarget;
|
const target = Polymer.dom(e).rootTarget;
|
||||||
if (target === this.$.input.inputElement) {
|
if (target === this.$.input) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
this._save();
|
this._save();
|
||||||
}
|
}
|
||||||
|
@@ -54,7 +54,7 @@ limitations under the License.
|
|||||||
setup(() => {
|
setup(() => {
|
||||||
element = fixture('basic');
|
element = fixture('basic');
|
||||||
|
|
||||||
input = element.$$('iron-input');
|
input = element.$$('input');
|
||||||
label = element.$$('label');
|
label = element.$$('label');
|
||||||
sandbox = sinon.sandbox.create();
|
sandbox = sinon.sandbox.create();
|
||||||
});
|
});
|
||||||
@@ -63,51 +63,46 @@ limitations under the License.
|
|||||||
sandbox.restore();
|
sandbox.restore();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('element render', done => {
|
test('element render', () => {
|
||||||
Polymer.Base.async(() => {
|
|
||||||
// The input is hidden and the label is visible:
|
// The input is hidden and the label is visible:
|
||||||
assert.isNotNull(input.getAttribute('hidden'));
|
assert.isNotNull(input.getAttribute('hidden'));
|
||||||
assert.isNull(label.getAttribute('hidden'));
|
assert.isNull(label.getAttribute('hidden'));
|
||||||
|
|
||||||
assert.isTrue(label.classList.contains('editable'));
|
assert.isTrue(label.classList.contains('editable'));
|
||||||
|
|
||||||
assert.equal(label.textContent, 'value text');
|
assert.equal(label.textContent, 'value text');
|
||||||
|
|
||||||
MockInteractions.tap(label);
|
MockInteractions.tap(label);
|
||||||
|
|
||||||
Polymer.dom.flush();
|
Polymer.dom.flush();
|
||||||
|
|
||||||
// The input is visible and the label is hidden:
|
// The input is visible and the label is hidden:
|
||||||
assert.isNull(input.getAttribute('hidden'));
|
assert.isNull(input.getAttribute('hidden'));
|
||||||
assert.isNotNull(label.getAttribute('hidden'));
|
assert.isNotNull(label.getAttribute('hidden'));
|
||||||
|
|
||||||
assert.equal(input.inputElement.value, 'value text');
|
assert.equal(input.value, 'value text');
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('edit value', done => {
|
test('edit value', done => {
|
||||||
Polymer.Base.async(() => {
|
const editedStub = sandbox.stub();
|
||||||
const editedStub = sandbox.stub();
|
element.addEventListener('changed', editedStub);
|
||||||
element.addEventListener('changed', editedStub);
|
|
||||||
|
|
||||||
MockInteractions.tap(label);
|
MockInteractions.tap(label);
|
||||||
|
|
||||||
Polymer.dom.flush();
|
Polymer.dom.flush();
|
||||||
|
|
||||||
element._inputText = 'new text';
|
element._inputText = 'new text';
|
||||||
|
|
||||||
assert.isFalse(editedStub.called);
|
assert.isFalse(editedStub.called);
|
||||||
|
|
||||||
element.async(() => {
|
element.async(() => {
|
||||||
assert.isTrue(editedStub.called);
|
assert.isTrue(editedStub.called);
|
||||||
assert.equal(input.inputElement.value, 'new text');
|
assert.equal(input.value, 'new text');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Press enter:
|
// Press enter:
|
||||||
MockInteractions.keyDownOn(input.inputElement, 13);
|
MockInteractions.keyDownOn(input, 13);
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -119,25 +114,22 @@ limitations under the License.
|
|||||||
setup(() => {
|
setup(() => {
|
||||||
element = fixture('read-only');
|
element = fixture('read-only');
|
||||||
|
|
||||||
input = element.$$('iron-input');
|
input = element.$$('input');
|
||||||
label = element.$$('label');
|
label = element.$$('label');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('disallows edit when read-only', done => {
|
test('disallows edit when read-only', () => {
|
||||||
Polymer.Base.async(() => {
|
|
||||||
// The input is hidden and the label is visible:
|
// The input is hidden and the label is visible:
|
||||||
assert.isNotNull(input.getAttribute('hidden'));
|
assert.isNotNull(input.getAttribute('hidden'));
|
||||||
assert.isNull(label.getAttribute('hidden'));
|
assert.isNull(label.getAttribute('hidden'));
|
||||||
|
|
||||||
MockInteractions.tap(label);
|
MockInteractions.tap(label);
|
||||||
|
|
||||||
Polymer.dom.flush();
|
Polymer.dom.flush();
|
||||||
|
|
||||||
// The input is still hidden and the label is still visible:
|
// The input is still hidden and the label is still visible:
|
||||||
assert.isNotNull(input.getAttribute('hidden'));
|
assert.isNotNull(input.getAttribute('hidden'));
|
||||||
assert.isNull(label.getAttribute('hidden'));
|
assert.isNull(label.getAttribute('hidden'));
|
||||||
done();
|
|
||||||
}, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('label is not marked as editable', () => {
|
test('label is not marked as editable', () => {
|
||||||
|
@@ -56,11 +56,10 @@ limitations under the License.
|
|||||||
<div id="topContainer">
|
<div id="topContainer">
|
||||||
<div>
|
<div>
|
||||||
<label>Filter:</label>
|
<label>Filter:</label>
|
||||||
<iron-input
|
<input is="iron-input"
|
||||||
|
type="text"
|
||||||
id="filter"
|
id="filter"
|
||||||
bind-value="{{filter}}">
|
bind-value="{{filter}}">
|
||||||
<input type="text">
|
|
||||||
</iron-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="createNewContainer"
|
<div id="createNewContainer"
|
||||||
class$="[[_computeCreateClass(createNew)]]">
|
class$="[[_computeCreateClass(createNew)]]">
|
||||||
|
@@ -17,4 +17,4 @@ fi
|
|||||||
|
|
||||||
unzip polygerrit-ui/polygerrit_components.bower_components.zip -d polygerrit-ui/app
|
unzip polygerrit-ui/polygerrit_components.bower_components.zip -d polygerrit-ui/app
|
||||||
|
|
||||||
${polylint_bin} --root polygerrit-ui/app --input elements/gr-app.html --b 'bower_components'
|
${polylint_bin} --root polygerrit-ui/app --input elements/gr-app.html
|
||||||
|
@@ -97,7 +97,6 @@ limitations under the License.
|
|||||||
--iron-autogrow-textarea: {
|
--iron-autogrow-textarea: {
|
||||||
border: 1px solid #d1d2d3;
|
border: 1px solid #d1d2d3;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
box-sizing: border-box;
|
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
padding: .25em .15em 0 .15em;
|
padding: .25em .15em 0 .15em;
|
||||||
}
|
}
|
||||||
@@ -105,6 +104,7 @@ limitations under the License.
|
|||||||
.gr-form-styles gr-autocomplete {
|
.gr-form-styles gr-autocomplete {
|
||||||
border: none;
|
border: none;
|
||||||
--gr-autocomplete: {
|
--gr-autocomplete: {
|
||||||
|
border: 1px solid #d1d2d3;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
height: 2em;
|
height: 2em;
|
||||||
|
@@ -32,7 +32,6 @@ limitations under the License.
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
}
|
}
|
||||||
iron-input,
|
|
||||||
input,
|
input,
|
||||||
iron-autogrow-textarea {
|
iron-autogrow-textarea {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
Reference in New Issue
Block a user