diff --git a/app/assets/javascripts/discourse/components/composer-toggles.js.es6 b/app/assets/javascripts/discourse/components/composer-toggles.js.es6 index def2000913f..f618e1ca61d 100644 --- a/app/assets/javascripts/discourse/components/composer-toggles.js.es6 +++ b/app/assets/javascripts/discourse/components/composer-toggles.js.es6 @@ -12,7 +12,9 @@ export default Ember.Component.extend({ @computed("composeState") fullscreenTitle(composeState) { - return composeState === "fullscreen" + return composeState === "draft" + ? "composer.open" + : composeState === "fullscreen" ? "composer.exit_fullscreen" : "composer.enter_fullscreen"; }, @@ -26,7 +28,9 @@ export default Ember.Component.extend({ @computed("composeState") fullscreenIcon(composeState) { - return composeState === "fullscreen" + return composeState === "draft" + ? "chevron-up" + : composeState === "fullscreen" ? "discourse-compress" : "discourse-expand"; } diff --git a/app/assets/javascripts/discourse/templates/composer.hbs b/app/assets/javascripts/discourse/templates/composer.hbs index 49a04a05efc..4055f0e51a0 100644 --- a/app/assets/javascripts/discourse/templates/composer.hbs +++ b/app/assets/javascripts/discourse/templates/composer.hbs @@ -179,7 +179,7 @@ - {{else}} + {{else}}
{{#if model.createdPost}} {{i18n 'composer.saved'}} @@ -197,7 +197,7 @@
{{composer-toggles composeState=model.composeState - toggleFullscreen=(action "fullscreenComposer") + toggleFullscreen=(action "openIfDraft") toggleComposer=(action "toggle") toggleToolbar=(action "toggleToolbar")}} diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 201668125fe..194a633a14c 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -1437,6 +1437,7 @@ en: toggle_direction: "Toggle Direction" help: "Markdown Editing Help" collapse: "minimize the composer panel" + open: "open the composer panel" abandon: "close composer and discard draft" enter_fullscreen: "enter fullscreen composer" exit_fullscreen: "exit fullscreen composer" diff --git a/test/javascripts/acceptance/composer-test.js.es6 b/test/javascripts/acceptance/composer-test.js.es6 index c878f5c9ce5..898e815bf95 100644 --- a/test/javascripts/acceptance/composer-test.js.es6 +++ b/test/javascripts/acceptance/composer-test.js.es6 @@ -398,6 +398,48 @@ QUnit.test("Composer can toggle whispers", async assert => { ); }); +QUnit.test( + "Composer can toggle layouts (open, fullscreen and draft)", + async assert => { + await visit("/t/this-is-a-test-topic/9"); + await click(".topic-post:eq(0) button.reply"); + + assert.ok( + find("#reply-control.open").length === 1, + "it starts in open state by default" + ); + + await click(".toggle-fullscreen"); + + assert.ok( + find("#reply-control.fullscreen").length === 1, + "it expands composer to full screen" + ); + + await click(".toggle-fullscreen"); + + assert.ok( + find("#reply-control.open").length === 1, + "it collapses composer to regular size" + ); + + await fillIn(".d-editor-input", "This is a dirty reply"); + await click(".toggler"); + + assert.ok( + find("#reply-control.draft").length === 1, + "it collapses composer to draft bar" + ); + + await click(".toggle-fullscreen"); + + assert.ok( + find("#reply-control.open").length === 1, + "from draft, it expands composer back to open state" + ); + } +); + QUnit.test( "Composer can toggle between reply and createTopic", async assert => {