diff --git a/app/assets/javascripts/discourse/app/widgets/post-small-action.js b/app/assets/javascripts/discourse/app/widgets/post-small-action.js index e13857f3311..246de3c0303 100644 --- a/app/assets/javascripts/discourse/app/widgets/post-small-action.js +++ b/app/assets/javascripts/discourse/app/widgets/post-small-action.js @@ -97,39 +97,8 @@ export default createWidget("post-small-action", { html(attrs) { const contents = []; - - if (attrs.canRecover) { - contents.push( - this.attach("button", { - className: "small-action-recover", - icon: "undo", - action: "recoverPost", - title: "post.controls.undelete", - }) - ); - } - - if (attrs.canDelete) { - contents.push( - this.attach("button", { - className: "small-action-delete", - icon: "trash-alt", - action: "deletePost", - title: "post.controls.delete", - }) - ); - } - - if (attrs.canEdit && !attrs.canRecover) { - contents.push( - this.attach("button", { - className: "small-action-edit", - icon: "pencil-alt", - action: "editPost", - title: "post.controls.edit", - }) - ); - } + const buttons = []; + const customMessage = []; contents.push( avatarFor.call(this, "small", { @@ -149,19 +118,56 @@ export default createWidget("post-small-action", { attrs.actionCodePath ); contents.push(new RawHtml({ html: `

${description}

` })); + } - if (attrs.cooked) { - contents.push( - new RawHtml({ - html: `
${attrs.cooked}
`, - }) - ); - } + if (attrs.canRecover) { + buttons.push( + this.attach("button", { + className: "btn-flat small-action-recover", + icon: "undo", + action: "recoverPost", + title: "post.controls.undelete", + }) + ); + } + + if (attrs.canEdit && !attrs.canRecover) { + buttons.push( + this.attach("button", { + className: "btn-flat small-action-edit", + icon: "pencil-alt", + action: "editPost", + title: "post.controls.edit", + }) + ); + } + + if (attrs.canDelete) { + buttons.push( + this.attach("button", { + className: "btn-flat btn-danger small-action-delete", + icon: "trash-alt", + action: "deletePost", + title: "post.controls.delete", + }) + ); + } + + if (!attrs.actionDescriptionWidget && attrs.cooked) { + customMessage.push( + new RawHtml({ + html: `
${attrs.cooked}
`, + }) + ); } return [ h("div.topic-avatar", iconNode(icons[attrs.actionCode] || "exclamation")), - h("div.small-action-desc", contents), + h("div.small-action-desc", [ + h("div.small-action-contents", contents), + h("div.small-action-buttons", buttons), + customMessage, + ]), ]; }, }); diff --git a/app/assets/javascripts/discourse/tests/integration/components/widgets/post-small-action-test.js b/app/assets/javascripts/discourse/tests/integration/components/widgets/post-small-action-test.js index 78323564497..90a7658f136 100644 --- a/app/assets/javascripts/discourse/tests/integration/components/widgets/post-small-action-test.js +++ b/app/assets/javascripts/discourse/tests/integration/components/widgets/post-small-action-test.js @@ -16,9 +16,9 @@ module( hbs`` ); - assert.ok(!exists(".small-action-desc > .small-action-delete")); - assert.ok(!exists(".small-action-desc > .small-action-recover")); - assert.ok(!exists(".small-action-desc > .small-action-edit")); + assert.ok(!exists(".small-action-desc .small-action-delete")); + assert.ok(!exists(".small-action-desc .small-action-recover")); + assert.ok(!exists(".small-action-desc .small-action-edit")); }); test("shows edit button if canEdit", async function (assert) { @@ -29,7 +29,7 @@ module( ); assert.ok( - exists(".small-action-desc > .small-action-edit"), + exists(".small-action-desc .small-action-edit"), "it adds the edit small action button" ); }); @@ -55,11 +55,11 @@ module( ); assert.ok( - !exists(".small-action-desc > .small-action-edit"), + !exists(".small-action-desc .small-action-edit"), "it does not add the edit small action button" ); assert.ok( - exists(".small-action-desc > .small-action-recover"), + exists(".small-action-desc .small-action-recover"), "it adds the recover small action button" ); }); @@ -72,7 +72,7 @@ module( ); assert.ok( - exists(".small-action-desc > .small-action-delete"), + exists(".small-action-desc .small-action-delete"), "it adds the delete small action button" ); }); @@ -85,7 +85,7 @@ module( ); assert.ok( - exists(".small-action-desc > .small-action-recover"), + exists(".small-action-desc .small-action-recover"), "it adds the recover small action button" ); }); diff --git a/app/assets/stylesheets/common/base/topic-post.scss b/app/assets/stylesheets/common/base/topic-post.scss index d21e8a6f575..6fab2deb383 100644 --- a/app/assets/stylesheets/common/base/topic-post.scss +++ b/app/assets/stylesheets/common/base/topic-post.scss @@ -1123,121 +1123,107 @@ blockquote > *:last-child { display: flex; align-items: center; + &.deleted { + background-color: var(--danger-low-mid); + } + .topic-avatar, .small-action-desc { border-top: 1px solid var(--primary-low); } .topic-avatar { - align-self: flex-start; - padding: 0.7em 0; + display: flex; + align-self: stretch; flex: 0 0 auto; + margin: 0; + padding-top: 1em; width: var(--topic-avatar-width); + justify-content: center; .d-icon { - font-size: 2em; + font-size: var(--font-up-3); width: var(--topic-avatar-width); - text-align: center; color: var(--primary-low-mid); } } - &.deleted { - background-color: var(--danger-low-mid); - } - - .small-action-desc.timegap { - color: var(--primary-medium); - } - .small-action-desc { box-sizing: border-box; display: flex; flex-wrap: wrap; - align-items: center; + color: var(--primary-700); padding: 1em 0 1em var(--topic-body-width-padding); - text-transform: uppercase; - font-weight: bold; - font-size: var(--font-down-1); - color: var(--primary-medium); width: calc( var(--topic-body-width) + (var(--topic-body-width-padding) * 2) ); min-width: 0; // Allows flex container to shrink - button { - align-self: flex-start; - font-size: var(--font-up-1); - .d-icon { - font-size: var(--font-down-1); - } - } - - .custom-message { - flex: 1 1 100%; - text-transform: none; - font-weight: normal; - font-size: var(--font-up-1); - order: 12; - word-break: break-word; - min-width: 0; // Allows content like oneboxes to shrink - p { - margin-bottom: 0; - } - } - a.trigger-user-card { - align-self: stretch; - } .avatar { - margin-right: 0.8em; + margin-right: 0.5em; float: left; } - > p { + p { margin: 0; padding-right: 0.5em; - line-height: var(--line-height-medium); - flex: 1 1; - .mention { - // needs some special sizing and positioning due to surrounding all-caps text - position: relative; - top: -1px; - font-size: var(--font-0); - text-transform: initial; - } + } + } + + .small-action-contents { + flex: 1 1 auto; + } + + .small-action-buttons { + margin-left: auto; + } + + .small-action-custom-message { + flex: 1 1 100%; + font-weight: normal; + margin-top: 0.5em; + word-break: break-word; + min-width: 0; // Allows content like oneboxes to shrink + color: var(--primary); + p { + margin-bottom: 0; } } button { background: transparent; - border: 0; - order: 9; - &:last-of-type { - margin-left: auto; - order: 8; + font-size: var(--font-down-1); + .d-icon { + color: var(--primary-500); + } + + .discourse-no-touch & { + &:hover, + &:focus { + background: var(--primary-200); + .d-icon { + color: var(--primary); + } + } } } &.topic-post-visited { - border-top: none; - - + .small-action { - border-top: none; - } - .topic-post-visited-line { text-align: center; border-bottom: 1px solid var(--danger-medium); - line-height: 0.1em; - margin: 1rem 0px; + z-index: z("base") + 2; // ensures last visit border is on top of post borders + line-height: 0; + margin: 0; + margin-bottom: -1px; + color: var(--danger-medium); + font-size: var(--font-down-1); width: calc( var(--topic-body-width) + var(--topic-avatar-width) + (var(--topic-body-width-padding) * 2) ); .topic-post-visited-message { background-color: var(--secondary); - color: var(--danger-medium); - font-size: var(--font-down-1); - padding: 0 8px; + padding: 0 0.5em; } } } diff --git a/app/assets/stylesheets/common/foundation/color_transformations.scss b/app/assets/stylesheets/common/foundation/color_transformations.scss index 9b4325536cf..761d5e706ce 100644 --- a/app/assets/stylesheets/common/foundation/color_transformations.scss +++ b/app/assets/stylesheets/common/foundation/color_transformations.scss @@ -18,7 +18,7 @@ $primary-300: dark-light-diff($primary, $secondary, 80%, -60%) !default; $primary-400: dark-light-diff($primary, $secondary, 70%, -45%) !default; $primary-500: dark-light-diff($primary, $secondary, 60%, -40%) !default; $primary-600: dark-light-diff($primary, $secondary, 50%, -35%) !default; -$primary-700: dark-light-diff($primary, $secondary, 30%, -30%) !default; +$primary-700: dark-light-diff($primary, $secondary, 38%, -30%) !default; $primary-800: dark-light-diff($primary, $secondary, 30%, -25%) !default; $primary-900: dark-light-diff($primary, $secondary, 15%, -10%) !default; diff --git a/app/assets/stylesheets/mobile/personal-message.scss b/app/assets/stylesheets/mobile/personal-message.scss index d193ed5c96a..3dd3f0ebbdd 100644 --- a/app/assets/stylesheets/mobile/personal-message.scss +++ b/app/assets/stylesheets/mobile/personal-message.scss @@ -35,19 +35,6 @@ width: 100%; } - .small-action { - margin-left: 0; - } - - .small-action-desc.timegap { - margin-left: 0; - padding: 1em 1em 1em 0; - } - - .small-action:not(.time-gap) { - padding: 1em; - } - .topic-meta-data .names .first.staff { flex-basis: 100%; & + .second, diff --git a/app/assets/stylesheets/mobile/topic-post.scss b/app/assets/stylesheets/mobile/topic-post.scss index dd4e81e0e48..e5ff07b7daf 100644 --- a/app/assets/stylesheets/mobile/topic-post.scss +++ b/app/assets/stylesheets/mobile/topic-post.scss @@ -342,18 +342,6 @@ span.highlighted { /* must render on top of topic-body + topic-meta-data, otherwise not tappable */ } -.small-action .topic-avatar { - display: flex; - align-self: stretch; - align-items: flex-start; - margin-right: 0; - float: unset; - height: auto; - .d-icon { - font-size: 1.8em; - } -} - .topic-meta-data { margin-left: 50px; font-size: var(--font-down-1); diff --git a/plugins/chat/assets/stylesheets/common/common.scss b/plugins/chat/assets/stylesheets/common/common.scss index 10ef7b7ad0b..133a99b718e 100644 --- a/plugins/chat/assets/stylesheets/common/common.scss +++ b/plugins/chat/assets/stylesheets/common/common.scss @@ -605,14 +605,6 @@ body.has-full-page-chat { } } -.small-action { - .open-chat { - text-transform: uppercase; - font-weight: 700; - font-size-adjust: var(--font-down-0); - } -} - .chat-message-collapser, .chat-message-text { > p {