DEV: port full-width component to be included directly (#126)
Removes the [full-width component](https://github.com/discourse/discourse-full-width-component) dependency by adding most of the code directly to the theme. There was one grid definition in the CSS I ended up removing because it was conflicting with an existing override in the theme. Anyone who has previously installed the theme should manually remove the full-width component from it.
This commit is contained in:
+2
-3
@@ -13,8 +13,7 @@
|
|||||||
"serialize_topic_is_hot": true
|
"serialize_topic_is_hot": true
|
||||||
},
|
},
|
||||||
"components": [
|
"components": [
|
||||||
"https://github.com/discourse/discourse-sidebar-new-topic-button.git",
|
"https://github.com/discourse/discourse-sidebar-new-topic-button.git"
|
||||||
"https://github.com/discourse/discourse-full-width-component.git"
|
|
||||||
],
|
],
|
||||||
"color_schemes": {
|
"color_schemes": {
|
||||||
"Horizon": {
|
"Horizon": {
|
||||||
@@ -138,4 +137,4 @@
|
|||||||
"hover": "584B3E"
|
"hover": "584B3E"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,256 @@
|
|||||||
|
// Full width layout
|
||||||
|
|
||||||
|
$sidebar-width: 17em;
|
||||||
|
|
||||||
|
.wrap {
|
||||||
|
max-width: unset; // undoing core default
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-header #site-logo {
|
||||||
|
// constraining the logo to fit its grid container
|
||||||
|
// this prevents the logo from shifting header content
|
||||||
|
// when the sidebar is opened
|
||||||
|
max-height: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
object-fit: contain; // contains logo without squishing/stretching
|
||||||
|
}
|
||||||
|
|
||||||
|
#main-outlet-wrapper {
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
body.has-sidebar-page & {
|
||||||
|
.sidebar-wrapper {
|
||||||
|
width: var(--d-sidebar-width);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body.has-full-page-chat & {
|
||||||
|
grid-template-columns: min-content;
|
||||||
|
gap: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-wrapper {
|
||||||
|
width: 100%; // safari has issues without this
|
||||||
|
}
|
||||||
|
|
||||||
|
#main-outlet {
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: var(--d-max-width);
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
body.has-full-page-chat & {
|
||||||
|
max-width: unset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-full-page-chat:not(.discourse-sidebar) .full-page-chat {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main-outlet > .regular {
|
||||||
|
max-width: var(--d-max-width);
|
||||||
|
margin: 0 auto;
|
||||||
|
|
||||||
|
body.has-sidebar-page & {
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-header .title:not(.title--minimized) {
|
||||||
|
// allowing overflow here isn't always ideal
|
||||||
|
// but works well enough most of the time
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-header {
|
||||||
|
> .wrap {
|
||||||
|
.contents {
|
||||||
|
display: grid;
|
||||||
|
grid-template-areas: "logo lspace extra-info rspace panel";
|
||||||
|
grid-template-columns:
|
||||||
|
minmax(auto, 1fr)
|
||||||
|
auto
|
||||||
|
minmax(0, calc(var(--d-max-width)))
|
||||||
|
auto
|
||||||
|
minmax(auto, 1fr);
|
||||||
|
|
||||||
|
.d-header-mode {
|
||||||
|
grid-area: extra-info;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
@include breakpoint("tablet") {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-header .title {
|
||||||
|
min-width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-sidebar-page & {
|
||||||
|
// at wide widths, when 1fr > 0
|
||||||
|
// we want the panel to be the same width as the sidebar
|
||||||
|
// this way we can get more accurate centering
|
||||||
|
grid-template-columns:
|
||||||
|
calc(var(--d-sidebar-width) - 11px) // 11px is wrap padding
|
||||||
|
1fr
|
||||||
|
minmax(0, calc(var(--d-max-width)))
|
||||||
|
1fr
|
||||||
|
minmax(0, calc(var(--d-sidebar-width) - 11px));
|
||||||
|
gap: 1em;
|
||||||
|
|
||||||
|
// at narrower widths, when 1fr = 0
|
||||||
|
// we can center without matching the sidebar's width
|
||||||
|
// which allows the title to take up the remaining width
|
||||||
|
@media screen and (max-width: 1400px) {
|
||||||
|
grid-template-columns:
|
||||||
|
calc(var(--d-sidebar-width) - 11px)
|
||||||
|
1fr
|
||||||
|
minmax(0, calc(var(--d-max-width)))
|
||||||
|
1fr
|
||||||
|
auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1000px) {
|
||||||
|
gap: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-header-mode {
|
||||||
|
grid-area: extra-info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-sidebar-toggle {
|
||||||
|
grid-area: logo;
|
||||||
|
}
|
||||||
|
|
||||||
|
.before-header-panel-outlet {
|
||||||
|
grid-area: extra-info;
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-header-mode {
|
||||||
|
.bootstrap-mode {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-logo-wrapper-outlet {
|
||||||
|
grid-area: logo;
|
||||||
|
margin-left: 3.7em; // 2.7em hamburger width + 1em for margin
|
||||||
|
margin-right: 0.725em;
|
||||||
|
display: flex;
|
||||||
|
overflow: visible;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
flex: 1 0 auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
grid-area: panel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.extra-info-wrapper {
|
||||||
|
grid-area: extra-info;
|
||||||
|
max-width: var(--d-max-width);
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-search--enabled .floating-search-input-wrapper {
|
||||||
|
grid-area: extra-info;
|
||||||
|
|
||||||
|
@include breakpoint(tablet) {
|
||||||
|
grid-area: rspace;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include breakpoint(mobile-extra-large) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body.has-sidebar-page {
|
||||||
|
.wrap {
|
||||||
|
max-width: unset; // undoing core default
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-header-mode,
|
||||||
|
.extra-info-wrapper {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: calc($reply-area-max-width + ($sidebar-width * 2))) {
|
||||||
|
#reply-control.show-preview {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-container {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: calc($reply-area-max-width + ($sidebar-width * 2))) and (min-width: calc($reply-area-max-width + calc($sidebar-width / 2))) {
|
||||||
|
#reply-control.show-preview:not(.fullscreen) {
|
||||||
|
margin-left: $sidebar-width;
|
||||||
|
width: auto;
|
||||||
|
|
||||||
|
// overruling new core composer changes
|
||||||
|
max-width: $reply-area-max-width;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-container {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// overruling new core composer changes
|
||||||
|
@media screen and (min-width: $reply-area-max-width) {
|
||||||
|
#reply-control.show-preview:not(.fullscreen) {
|
||||||
|
max-width: $reply-area-max-width;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body.sidebar-animate {
|
||||||
|
#main-outlet-wrapper {
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-header-wrap .wrap {
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-header-icons {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rtl {
|
||||||
|
.d-header .title {
|
||||||
|
margin-right: 3.7em; // 2.7em hamburger width + 1em for margin
|
||||||
|
margin-left: 0.725em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// provides some extra space for login buttons
|
||||||
|
@media screen and (min-width: 1400px) {
|
||||||
|
.anon {
|
||||||
|
.d-header .panel {
|
||||||
|
grid-column-start: -4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fixing bulk select (only needed for desktop)
|
||||||
|
|
||||||
.bulk-select-enabled {
|
.bulk-select-enabled {
|
||||||
.topic-list-header .topic-list-data.default {
|
.topic-list-header .topic-list-data.default {
|
||||||
position: sticky;
|
position: sticky;
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import { apiInitializer } from "discourse/lib/api";
|
||||||
|
|
||||||
|
export default apiInitializer("0.8", (api) => {
|
||||||
|
document.body.classList.add("full-width-enabled");
|
||||||
|
|
||||||
|
// When the sidebar is visible, force the HomeLogo to be in an 'un-minimized' state.
|
||||||
|
api.registerValueTransformer?.(
|
||||||
|
"home-logo-minimized",
|
||||||
|
({ value, context }) => {
|
||||||
|
if (value && context.showSidebar) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user