Merge "Fix problem where gr-formatted-text would sometimes not display"

This commit is contained in:
Wyatt Allen 2017-03-06 18:20:29 +00:00 committed by Gerrit Code Review
commit 47689369e1
4 changed files with 74 additions and 3 deletions

View File

@ -201,7 +201,7 @@ limitations under the License.
</div> </div>
</div> </div>
<template is="dom-if" if="[[comment.robot_id]]"> <template is="dom-if" if="[[comment.robot_id]]">
<div class="robotId" hidden$="[[collapsed]]""> <div class="robotId" hidden$="[[collapsed]]">
[[comment.robot_id]] [[comment.robot_id]]
</div> </div>
</template> </template>

View File

@ -20,7 +20,10 @@
is: 'gr-formatted-text', is: 'gr-formatted-text',
properties: { properties: {
content: String, content: {
type: String,
observer: '_contentChanged',
},
config: Object, config: Object,
noTrailingMargin: { noTrailingMargin: {
type: Boolean, type: Boolean,
@ -51,6 +54,14 @@
return this._blocksToText(this._computeBlocks(this.content)); return this._blocksToText(this._computeBlocks(this.content));
}, },
_contentChanged: function(content) {
// In the case where the config may not be set (perhaps due to the
// request for it still being in flight), set the content anyway to
// prevent waiting on the config to display the text.
if (this.config) { return; }
this.$.container.textContent = content;
},
/** /**
* Given a source string, update the DOM inside #container. * Given a source string, update the DOM inside #container.
*/ */
@ -63,7 +74,8 @@
} }
// Add new content. // Add new content.
this._computeNodes(this._computeBlocks(content)).forEach(function(node) { this._computeNodes(this._computeBlocks(content))
.forEach(function(node) {
container.appendChild(node); container.appendChild(node);
}); });
}, },

View File

@ -32,6 +32,7 @@ limitations under the License.
<script> <script>
suite('gr-formatted-text tests', function() { suite('gr-formatted-text tests', function() {
var element; var element;
var sandbox;
function assertBlock(result, index, type, text) { function assertBlock(result, index, type, text) {
assert.equal(result[index].type, type); assert.equal(result[index].type, type);
@ -45,6 +46,11 @@ limitations under the License.
setup(function() { setup(function() {
element = fixture('basic'); element = fixture('basic');
sandbox = sinon.sandbox.create();
});
teardown(function() {
sandbox.restore();
}); });
test('parse null undefined and empty', function() { test('parse null undefined and empty', function() {
@ -354,5 +360,22 @@ limitations under the License.
var expected = 'Paragraph\n\n pre\n\nList\nOf\nItems\n\nQuote'; var expected = 'Paragraph\n\n pre\n\nList\nOf\nItems\n\nQuote';
assert.equal(result, expected); assert.equal(result, expected);
}); });
test('_contentOrConfigChanged not called without config', function() {
var contentStub = sandbox.stub(element, '_contentChanged');
var contentConfigStub = sandbox.stub(element, '_contentOrConfigChanged');
element.content = 'some text';
assert.isTrue(contentStub.called);
assert.isFalse(contentConfigStub.called);
});
test('_contentOrConfigChanged called with config', function() {
var contentStub = sandbox.stub(element, '_contentChanged');
var contentConfigStub = sandbox.stub(element, '_contentOrConfigChanged');
element.content = 'some text';
element.config = {};
assert.isTrue(contentStub.called);
assert.isTrue(contentConfigStub.called);
});
}); });
</script> </script>

View File

@ -35,9 +35,11 @@ limitations under the License.
<script> <script>
suite('gr-linked-text tests', function() { suite('gr-linked-text tests', function() {
var element; var element;
var sandbox;
setup(function() { setup(function() {
element = fixture('basic'); element = fixture('basic');
sandbox = sinon.sandbox.create();
element.config = { element.config = {
ph: { ph: {
match: '([Bb]ug|[Ii]ssue)\\s*#?(\\d+)', match: '([Bb]ug|[Ii]ssue)\\s*#?(\\d+)',
@ -68,6 +70,10 @@ limitations under the License.
}; };
}); });
teardown(function() {
sandbox.restore();
});
test('URL pattern was parsed and linked.', function() { test('URL pattern was parsed and linked.', function() {
// Reguar inline link. // Reguar inline link.
var url = 'https://code.google.com/p/gerrit/issues/detail?id=3650'; var url = 'https://code.google.com/p/gerrit/issues/detail?id=3650';
@ -207,5 +213,35 @@ limitations under the License.
assert.equal(links[1].href, 'ftp://foo/45'); assert.equal(links[1].href, 'ftp://foo/45');
assert.equal(links[1].textContent, '45'); assert.equal(links[1].textContent, '45');
}); });
test('_contentOrConfigChanged called with config', function() {
var contentStub = sandbox.stub(element, '_contentChanged');
var contentConfigStub = sandbox.stub(element, '_contentOrConfigChanged');
element.content = 'some text';
assert.isTrue(contentStub.called);
assert.isTrue(contentConfigStub.called);
});
});
suite('gr-linked-text with null config', function() {
var element;
var sandbox;
setup(function() {
element = fixture('basic');
sandbox = sinon.sandbox.create();
});
teardown(function() {
sandbox.restore();
});
test('_contentOrConfigChanged not called without config', function() {
var contentStub = sandbox.stub(element, '_contentChanged');
var contentConfigStub = sandbox.stub(element, '_contentOrConfigChanged');
element.content = 'some text';
assert.isTrue(contentStub.called);
assert.isFalse(contentConfigStub.called);
});
}); });
</script> </script>