Merge "Fire event when gr-diff-cursor is attached to DOM"

This commit is contained in:
Tao Zhou
2019-12-06 14:08:14 +00:00
committed by Gerrit Code Review
2 changed files with 46 additions and 3 deletions

View File

@@ -35,9 +35,9 @@
const LEFT_SIDE_CLASS = 'target-side-left';
const RIGHT_SIDE_CLASS = 'target-side-right';
class GrDiffCursor extends Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element)) {
class GrDiffCursor extends Polymer.mixinBehaviors([Gerrit.FireBehavior],
Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(Polymer.Element))) {
static get is() { return 'gr-diff-cursor'; }
static get properties() {
@@ -105,6 +105,23 @@
];
}
ready() {
super.ready();
Polymer.RenderStatus.afterNextRender(this, () => {
/*
This represents the diff cursor is ready for interaction coming from
client components. It is more then Polymer "ready" lifecycle, as no
"ready" events are automatically fired by Polymer, it means
the cursor is completely interactable - in this case attached and
painted on the page. We name it "ready" instead of "rendered" as the
long-term goal is to make gr-diff-cursor a javascript class - not a DOM
element with an actual lifecycle. This will be triggered only once
per element.
*/
this.fire('ready', null, {bubbles: false});
});
}
attached() {
super.attached();
// Catch when users are scrolling as the view loads.

View File

@@ -42,6 +42,12 @@ limitations under the License.
</template>
</test-fixture>
<test-fixture id="empty">
<template>
<div></div>
</template>
</test-fixture>
<script>
suite('gr-diff-cursor tests', () => {
let sandbox;
@@ -370,4 +376,24 @@ limitations under the License.
});
});
});
suite('gr-diff-cursor event tests', () => {
let sandbox;
let someEmptyDiv;
setup(() => {
sandbox = sinon.sandbox.create();
someEmptyDiv = fixture('empty');
});
teardown(() => sandbox.restore());
test('ready is fired after component is rendered', done => {
const cursorElement = document.createElement('gr-diff-cursor');
cursorElement.addEventListener('ready', () => {
done();
});
someEmptyDiv.appendChild(cursorElement);
});
});
</script>