discourse/app/assets/stylesheets/desktop/topic-post.scss

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

772 lines
14 KiB
SCSS
Raw Normal View History

.full-width {
margin-left: 0;
2013-02-06 03:16:51 +08:00
}
.staff {
.topic-post:first-child {
nav.post-controls .post-admin-menu {
bottom: -125px;
}
}
}
.topic-body {
padding: 0;
&:first-of-type {
border-top: none;
}
.reply-to-tab {
z-index: z("base") + 1;
color: var(--primary-med-or-secondary-med);
}
.actions .fade-out {
.discourse-no-touch & {
opacity: 0.7;
transition: background 0.25s, opacity 0.7s ease-in-out;
animation: none; // replaces jsuites animation on .fade-out
}
.discourse-touch & {
opacity: 1;
}
2013-02-06 03:16:51 +08:00
}
&:hover .actions .fade-out,
.selected .actions .fade-out {
opacity: 1;
2013-02-06 03:16:51 +08:00
}
}
section.post-menu-area {
position: relative;
padding-left: var(--topic-body-width-padding);
}
2018-10-17 00:39:55 +08:00
.post-links-container {
margin-left: var(--topic-body-width-padding);
2018-10-17 00:39:55 +08:00
}
nav.post-controls {
// for consistency, try to control spacing by editing these variables
--control-margin: 0.33em;
--control-icon-space: 0.33em;
.actions {
button {
margin-left: var(--control-margin);
&.btn-icon-text,
&.create {
margin-left: calc(var(--control-margin) * 1.52);
.d-icon {
margin-right: var(--control-icon-space);
}
}
}
// Some buttons can be doubled up, like likes or flags
.double-button {
margin-left: var(--control-margin);
&:hover {
button {
background: var(--primary-low);
color: var(--primary-medium);
}
}
button {
margin-left: 0;
margin-right: 0;
&.like {
// Like button with 0 likes
&.d-hover,
&:hover {
background: var(--love-low);
.d-icon {
color: var(--love);
}
}
}
&.has-like {
// Like button after I've liked
&.d-hover,
&:hover {
background: var(--primary-low);
.d-icon {
color: var(--primary-medium);
}
}
}
&.button-count {
// Like count button
&.d-hover,
&:hover {
color: var(--primary);
}
+ .toggle-like {
// Like button when like count is present
&.d-hover,
&:hover {
background: var(--primary-low);
}
}
}
}
}
2014-05-13 20:53:11 +08:00
}
.show-replies {
display: flex;
align-items: center;
margin-left: 0;
border-radius: var(--d-button-border-radius);
.topic-post & {
margin-right: 0.5em;
}
white-space: nowrap;
.d-icon {
margin-inline: var(--control-icon-space);
margin-left: 0;
}
&[aria-expanded="true"] {
background: var(--primary-low);
color: var(--primary-high);
box-shadow: 0px 0px 0px 1px var(--primary-300);
z-index: 1;
.d-icon {
color: var(--primary-high);
}
&:hover,
&:focus {
background: var(--primary-300);
color: var(--primary);
}
}
}
2014-04-30 10:13:16 +08:00
}
pre.codeblock-buttons {
.copy-cmd:not(.action-complete),
.fullscreen-cmd:not(.action-complete) {
opacity: 0;
transition: 0.2s;
visibility: hidden;
}
}
pre.codeblock-buttons:hover {
.copy-cmd,
.fullscreen-cmd {
opacity: 0.7;
visibility: visible;
&:hover {
opacity: 1;
}
}
}
2014-04-30 10:13:16 +08:00
.embedded-posts {
h1,
h2,
h3 {
margin: 10px 0;
}
border: 1px solid var(--primary-low);
2014-07-10 23:40:31 +08:00
.topic-body {
box-sizing: border-box;
width: calc(100% - 70px); // [100% - .topic-avatar width]
// WARNING: overflow hide is required for quoted / embedded images
// which expect "normal" post width, but expansions are narrower
overflow: hidden;
}
// this is covered by .topic-body .regular on a normal post
// but no such class structure exists for an embedded, expanded post
.cooked {
margin-top: 15px;
}
2014-07-10 23:40:31 +08:00
.topic-avatar {
padding-left: 25px;
padding-top: 15px;
2014-07-10 23:40:31 +08:00
}
.collapse-down,
.collapse-up {
2018-01-17 05:06:04 +08:00
position: absolute;
color: var(--primary-medium);
background: var(--secondary);
border: 1px solid var(--primary-low);
2018-01-17 05:06:04 +08:00
padding: 6px 9px 8px;
z-index: 99; // Needs to be higher than topic-avatar
.d-icon {
color: currentColor;
}
.discourse-no-touch & {
&:hover {
background: var(--primary-low);
color: var(--primary-high);
.d-icon {
color: currentColor;
}
}
2018-01-17 05:06:04 +08:00
}
2013-02-06 03:16:51 +08:00
}
// bottom means "reply expansion" below a post
2014-07-10 23:40:31 +08:00
&.bottom {
position: relative;
max-width: calc(100% - 66px);
margin-bottom: 30px;
border: none;
> div {
position: relative;
&:last-of-type {
margin-bottom: 0;
.row {
// Main reply line
&:before {
content: "";
position: absolute;
top: -22px;
width: 1px;
height: calc(100% + 1.25em);
background: var(--primary-300);
left: 32px;
}
}
}
.row {
padding-bottom: 0.5em;
// Main reply line
&:before {
content: "";
position: absolute;
top: -22px;
width: 1px;
height: calc(100% + 1.5em);
background: var(--primary-300);
left: 32px;
}
.topic-avatar {
border-top: none;
padding-left: 9px;
position: relative;
}
.topic-body {
border-top: none;
padding-bottom: 2.5em;
.topic-meta-data {
position: unset;
.post-link-arrow {
position: absolute;
bottom: 0.75em;
.archetype-private_message & {
bottom: 0;
}
.post-info.arrow {
display: block;
margin-right: 0;
.d-icon {
margin-left: 0;
}
&:hover,
&:focus {
color: var(--primary-high);
}
}
}
}
.cooked {
margin-top: 0.25em;
padding-top: 0.5em;
}
}
}
&.hidden {
display: block;
opacity: 0;
}
}
.collapse-up {
2018-01-17 05:06:04 +08:00
transform: translate(-50%, -164%);
background: var(--primary-low);
color: var(--primary-high);
border: 1px solid var(--primary-300);
padding: 6px;
left: 32px;
bottom: -3em;
z-index: 1;
.archetype-private_message & {
display: flex;
}
.d-icon {
transform: scale(0.871);
}
.discourse-no-touch & {
&:hover,
&:focus {
color: var(--primary);
background: var(--primary-300);
}
}
}
.load-more-replies {
font-size: var(--font-down-1);
position: absolute;
left: 55%;
transform: translate(-50%, 50%);
padding: 0.35em 0.5em;
}
.topic-avatar {
padding-left: 1em;
}
}
// top means "in reply to expansion" above a post
&.top {
margin-left: 0px;
border: none;
.collapse-down {
transform: translate(17%, 230%);
z-index: 1;
}
width: calc(
var(--topic-body-width) + (var(--topic-body-width-padding) * 2) +
var(--topic-avatar-width) - (var(--topic-avatar-width) + 2px)
); // 2px accounts for left and right borders
.row {
.topic-body,
.topic-avatar {
border-top: none;
}
.topic-avatar {
padding-left: 0;
}
.topic-body {
overflow: visible;
&::before {
content: "";
position: absolute;
top: 16px;
width: 1px;
height: calc(100% + 1.5em);
background: var(--primary-300);
left: -22px;
}
}
}
}
&.top.topic-body {
2016-01-27 09:03:18 +08:00
padding: 0;
}
.post-date {
color: var(--primary-med-or-secondary-high);
}
.d-icon-arrow-up,
.d-icon-arrow-down {
margin-left: 5px;
}
.reply:first-of-type .row {
border-top: none;
}
2014-04-30 10:13:16 +08:00
.topic-meta-data {
position: relative;
}
2014-04-30 10:13:16 +08:00
.topic-meta-data h5 {
position: absolute;
z-index: z("base");
font-size: var(--font-down-1);
2014-04-30 10:13:16 +08:00
a {
font-weight: bold;
color: var(--primary-low-mid-or-secondary-high);
2014-04-30 10:13:16 +08:00
}
}
.arrow {
color: var(--primary-med-or-secondary-high);
}
2014-04-30 10:13:16 +08:00
}
2013-02-06 03:16:51 +08:00
.post-action {
.relative-date {
margin-left: 5px;
2013-02-06 03:16:51 +08:00
}
.avatar {
margin-right: 2px;
}
}
2013-09-04 23:53:00 +08:00
span.post-count {
background: var(--primary);
color: var(--secondary);
opacity: 0.8;
}
2014-04-03 03:54:21 +08:00
button.expand-post {
margin-top: 10px;
margin-left: var(--topic-body-width-padding);
2014-04-03 03:54:21 +08:00
}
2014-12-09 04:39:36 +08:00
video {
max-height: 500px;
}
.video {
// Height determined by aspect-ratio
max-height: 500px;
> video {
max-height: unset;
}
}
@keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
2014-10-07 06:32:38 +08:00
.btn-group {
2013-02-06 03:16:51 +08:00
position: relative;
}
.dropdown-toggle {
float: left;
position: relative;
}
.post-select {
float: right;
margin-right: 20px;
margin-top: -20px;
}
.deleted-user-avatar {
font-size: var(--font-up-6);
}
.info-line {
margin: 10px 0;
color: var(--primary);
}
2014-06-30 15:58:27 +08:00
/* solo quotes */
2014-06-30 15:58:27 +08:00
blockquote {
2014-06-30 18:03:54 +08:00
/* leave browser defaults for top and bottom here */
margin-left: 0;
margin-right: 0;
padding: 12px;
}
2014-06-30 15:58:27 +08:00
/* quotes with attribution */
2014-06-30 15:58:27 +08:00
.quote {
2018-06-19 02:10:48 +08:00
& > blockquote {
.onebox-result {
background-color: var(--primary-very-low);
}
}
aside {
.quote,
.title,
blockquote,
.onebox,
.onebox-result {
background: var(--primary-very-low);
border-left: 5px solid var(--primary-low);
}
2018-06-19 02:10:48 +08:00
aside.quote > blockquote,
aside.quote > .title {
border-left: 0;
}
}
}
.topic-post-visited {
+ .topic-post {
.topic-avatar,
.topic-body {
border-top: none;
}
}
}
// variables are used to calculate the width of .gap
.topic-body {
width: calc(var(--topic-body-width) + (var(--topic-body-width-padding) * 2));
float: left;
min-width: 0; // prevents some elements, like <pre>, from blowing out the width
position: relative;
border-top: 1px solid var(--primary-low);
padding: 0.8em 0 0 0;
.topic-meta-data {
padding: 0 var(--topic-body-width-padding) 0.25em
var(--topic-body-width-padding);
}
.cooked {
padding: 1em var(--topic-body-width-padding) 0.25em
var(--topic-body-width-padding);
}
.group-request {
padding: 0.5em var(--topic-body-width-padding) 0
var(--topic-body-width-padding);
}
2019-03-21 23:50:41 +08:00
a.expand-hidden {
padding-left: var(--topic-body-width-padding);
2019-03-21 23:50:41 +08:00
}
}
.topic-avatar {
border-top: 1px solid var(--primary-low);
padding-top: 15px;
width: $topic-avatar-width;
float: left;
z-index: z("base") + 1;
height: 100%;
overflow-anchor: none;
}
2015-06-29 16:14:54 +08:00
.gap {
box-sizing: border-box;
2015-06-29 16:14:54 +08:00
}
.topic-area > .loading-container {
// loader needs to be same width as posts
width: calc(
2022-10-26 05:59:09 +08:00
var(--topic-body-width) + var(--topic-avatar-width) +
(var(--topic-body-width-padding) * 2)
);
max-width: 100%;
}
/* hide the reply border above the time gap notices */
2018-06-19 02:10:48 +08:00
.time-gap + .topic-post .topic-body,
.time-gap + .topic-post .topic-avatar {
border-top: none;
}
2018-06-19 02:10:48 +08:00
.time-gap + .topic-post .embedded-posts.top {
border-bottom: none;
2018-03-30 05:32:56 +08:00
}
2013-10-22 04:54:53 +08:00
.posts-wrapper {
position: relative;
-webkit-font-smoothing: subpixel-antialiased;
}
.dropdown,
.multiselect {
position: relative;
}
.caret {
display: inline-block;
width: 0;
height: 0;
vertical-align: middle;
border-top: 4px solid var(--primary);
border-right: 4px solid transparent;
border-left: 4px solid transparent;
content: "";
margin-left: 5px;
}
.selected-posts {
width: 200px;
position: fixed;
z-index: z("dropdown") + 1; // 1 higher than .select-posts
box-shadow: var(--shadow-card);
2018-07-21 04:37:43 +08:00
padding: 0.714em;
margin-bottom: 5px;
right: 10px;
2018-07-13 04:38:51 +08:00
@include breakpoint(extra-large, min-width) {
right: auto;
margin-left: 330px;
left: 50%;
}
button {
2018-07-21 04:37:43 +08:00
width: 100%;
margin: 4px auto;
display: inline-block;
text-align: left;
}
&.hidden {
display: none;
}
.controls {
margin-top: 10px;
}
p {
font-size: var(--font-down-1);
margin: 0 0 10px 0;
}
p.cancel {
margin: 10px 0 0 0;
}
h3 {
font-size: var(--font-up-4);
color: var(--primary);
margin-bottom: 5px;
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
.d-icon {
margin-right: 7px;
}
}
}
2013-10-23 15:52:15 +08:00
a.attachment:before {
display: inline-block;
margin-right: 4px;
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
// ideally, the SVG used here should be in HTML and reference the SVG sprite
content: svg-uri(
'<svg xmlns="http://www.w3.org/2000/svg" width="14px" height="16px" viewBox="0 0 512 512" fill="#{$tertiary}"><path d="M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"></path></svg>'
);
vertical-align: middle;
}
2013-10-30 21:11:05 +08:00
.topic-meta-data {
align-items: center;
.names {
display: flex;
align-items: center;
}
&:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
.post-info {
a {
color: var(--primary-med-or-secondary-med);
}
a.wiki {
color: var(--wiki);
}
}
}
.who-liked,
.who-read {
2015-07-10 12:48:44 +08:00
margin-top: 20px;
margin-bottom: 0;
2015-07-10 12:48:44 +08:00
width: 100%;
text-align: right;
}
span.highlighted {
background-color: var(--tertiary-low);
2014-05-14 16:05:24 +08:00
}
.first.new-user:not(.staff) a {
color: var(--primary-low-mid);
2014-05-14 16:05:24 +08:00
}
.topic-post.sticky-avatar {
> article > .row > .topic-avatar {
position: sticky;
top: calc(var(--header-offset) - 0.25em);
margin-bottom: 25px;
}
}
/* Tablet (portrait) ----------- */
@media all and (max-width: 790px) {
2014-07-10 23:40:31 +08:00
.topic-avatar {
width: 45px;
2014-07-10 23:40:31 +08:00
}
.topic-post .reply-to-tab {
right: 15%;
}
2014-07-10 23:40:31 +08:00
.topic-body {
box-sizing: border-box;
width: calc(100% - 47px); //100% - [width of .topic-avatar + 2px]
}
2014-07-10 23:40:31 +08:00
.embedded-posts {
// top means "in reply to expansion" above a post
&.top {
width: calc(100% - 56px); // [100% - margin-left]
2014-07-10 23:40:31 +08:00
}
}
}