diff --git a/apps/sms/js/compose.js b/apps/sms/js/compose.js index 53abc71f7..6c636358b 100644 --- a/apps/sms/js/compose.js +++ b/apps/sms/js/compose.js @@ -409,13 +409,15 @@ var Compose = (function() { if (element.text) { this.append(element.text); } - }, Compose); - }); + }, this); + this.ignoreEvents = false; + this.focus(); + }.bind(this)); + this.ignoreEvents = true; } else { this.append(message.body); + this.focus(); } - - this.focus(); }, getText: function() { @@ -708,5 +710,11 @@ var Compose = (function() { } }); + Object.defineProperty(compose, 'ignoreEvents', { + set: function composeIgnoreEvents(value) { + dom.message.classList.toggle('ignoreEvents', value); + } + }); + return compose; }()); diff --git a/apps/sms/style/sms.css b/apps/sms/style/sms.css index 54aa5a1a5..7c2121ed9 100644 --- a/apps/sms/style/sms.css +++ b/apps/sms/style/sms.css @@ -715,6 +715,10 @@ form.bottom[role="search"].messages-compose-form { font-size: 1.8rem; } +#messages-input.ignoreEvents { + pointer-events: none; +} + #messages-input.placeholder:after, #messages-subject-input::-moz-placeholder { color: #888; diff --git a/apps/sms/test/unit/compose_test.js b/apps/sms/test/unit/compose_test.js index 0d9983431..7000ce759 100644 --- a/apps/sms/test/unit/compose_test.js +++ b/apps/sms/test/unit/compose_test.js @@ -1,7 +1,7 @@ /* global MocksHelper, MockAttachment, MockL10n, loadBodyHTML, Compose, Attachment, MockMozActivity, Settings, Utils, AttachmentMenu, Draft, document, XMLHttpRequest, Blob, navigator, - setTimeout, ThreadUI */ + setTimeout, ThreadUI, SMIL */ /*jshint strict:false */ /*jslint node: true */ @@ -22,6 +22,7 @@ requireApp('sms/test/unit/mock_settings.js'); requireApp('sms/test/unit/mock_utils.js'); requireApp('sms/test/unit/mock_moz_activity.js'); requireApp('sms/test/unit/mock_thread_ui.js'); +require('/test/unit/mock_smil.js'); var mocksHelperForCompose = new MocksHelper([ 'AttachmentMenu', @@ -30,7 +31,8 @@ var mocksHelperForCompose = new MocksHelper([ 'Utils', 'MozActivity', 'Attachment', - 'ThreadUI' + 'ThreadUI', + 'SMIL' ]).init(); suite('compose_test.js', function() { @@ -714,6 +716,34 @@ suite('compose_test.js', function() { assert.equal(message.getAttribute('x-inputmode'), '-moz-sms'); }); }); + + suite('Compose fromMessage', function() { + setup(function() { + this.sinon.spy(Compose, 'append'); + this.sinon.spy(HTMLElement.prototype, 'focus'); + this.sinon.stub(SMIL, 'parse'); + }); + test('from sms', function() { + Compose.fromMessage({type: 'sms', body: 'test'}); + sinon.assert.called(Compose.append); + sinon.assert.called(message.focus); + }); + + test('from mms', function() { + var testString = ['test\nstring 1\nin slide 1', + 'test\nstring 2\nin slide 2']; + Compose.fromMessage({type: 'mms'}); + + // Should not be focused before parse complete. + sinon.assert.notCalled(message.focus); + assert.isTrue(message.classList.contains('ignoreEvents')); + SMIL.parse.yield([{text: testString[0]}, {text: testString[1]}]); + + sinon.assert.calledWith(Compose.append); + sinon.assert.called(message.focus); + assert.isFalse(message.classList.contains('ignoreEvents')); + }); + }); }); suite('Attachment pre-send menu', function() {