diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.md b/.github/ISSUE_TEMPLATE/BUG_REPORT.md deleted file mode 100644 index 69b116fd..00000000 --- a/.github/ISSUE_TEMPLATE/BUG_REPORT.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: "\U0001F41E Bug Report" -about: Create a report to help us improve Lemmy -title: "" -labels: bug -assignees: "" ---- - -Found a bug? Please fill out the sections below. 👍 - -For backend issues, use [lemmy](https://github.com/LemmyNet/lemmy) - -### Issue Summary - -A summary of the bug. - -### Steps to Reproduce - -1. (for example) I clicked login, and an endless spinner show up. -2. I tried to install lemmy via this guide, and I'm getting this error. -3. ... - -### Technical details - -- Please post your log: `sudo docker-compose logs > lemmy_log.out`. -- What OS are you trying to install lemmy on? -- Any browser console errors? diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml new file mode 100644 index 00000000..64579090 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -0,0 +1,47 @@ +name: "\U0001F41E Bug Report" +description: Create a report to help us improve lemmy-ui +title: "[Bug]: " +labels: ["bug", "triage"] +body: + - type: markdown + attributes: + value: | + Found a bug? Please fill out the sections below. 👍 + Thanks for taking the time to fill out this bug report! + For backend issues, use [lemmy](https://github.com/LemmyNet/lemmy) + - type: textarea + id: summary + attributes: + label: Summary + description: A summary of the bug. + validations: + required: true + - type: textarea + id: reproduce + attributes: + label: Steps to Reproduce + description: | + Describe the steps to reproduce the bug. + The better your description is _(go 'here', click 'there'...)_ the fastest you'll get an _(accurate)_ resolution. + value: | + 1. + 2. + 3. + validations: + required: true + - type: textarea + id: technical + attributes: + label: Technical Details + description: | + - Any browser console errors? + validations: + required: true + - type: input + id: lemmy-ui-version + attributes: + label: Version + description: Which Lemmy UI version do you use? Displayed in the footer. + placeholder: ex. 0.17.4-rc.4 + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md deleted file mode 100644 index bfeca29a..00000000 --- a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -name: "\U0001F680 Feature request" -about: Suggest an idea for improving Lemmy -title: "" -labels: enhancement -assignees: "" ---- - -For backend issues, use [lemmy](https://github.com/LemmyNet/lemmy) - -### Is your proposal related to a problem? - - - -(Write your answer here.) - -### Describe the solution you'd like - - - -(Describe your proposed solution here.) - -### Describe alternatives you've considered - - - -(Write your answer here.) - -### Additional context - - - -(Write your answer here.) diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml new file mode 100644 index 00000000..375d06d3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml @@ -0,0 +1,41 @@ +name: "\U0001F680 Feature request" +description: Suggest an idea for improving Lemmy +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Have a suggestion about Lemmy's UI? + For backend issues, use [lemmy](https://github.com/LemmyNet/lemmy) + - type: textarea + id: problem + attributes: + label: Is your proposal related to a problem? + description: | + Provide a clear and concise description of what the problem is. + For example, "I'm always frustrated when..." + validations: + required: true + - type: textarea + id: solution + attributes: + label: Describe the solution you'd like. + description: | + Provide a clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Describe alternatives you've considered. + description: | + Let us know about other solutions you've tried or researched. + validations: + required: true + - type: textarea + id: context + attributes: + label: Additional context + description: | + Is there anything else you can add about the proposal? + You might want to link to related issues here, if you haven't already. diff --git a/.github/ISSUE_TEMPLATE/QUESTION.md b/.github/ISSUE_TEMPLATE/QUESTION.md deleted file mode 100644 index 15325873..00000000 --- a/.github/ISSUE_TEMPLATE/QUESTION.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: "? Question" -about: General questions about Lemmy -title: "" -labels: question -assignees: "" ---- - -What's the question you have about lemmy? diff --git a/.github/ISSUE_TEMPLATE/QUESTION.yml b/.github/ISSUE_TEMPLATE/QUESTION.yml new file mode 100644 index 00000000..460d9a44 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/QUESTION.yml @@ -0,0 +1,17 @@ +name: "? Question" +description: General questions about Lemmy +title: "Question: " +labels: ["question", "triage"] +body: + - type: markdown + attributes: + value: | + Have a question about Lemmy's UI? + Please check the docs first: https://join-lemmy.org/docs/en/index.html + - type: textarea + id: question + attributes: + label: Question + description: What's the question you have about Lemmy's UI? + validations: + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/hexbear.md b/.github/ISSUE_TEMPLATE/hexbear.md deleted file mode 100644 index 65483df8..00000000 --- a/.github/ISSUE_TEMPLATE/hexbear.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Hexbear -about: For hexbear issues -title: "" -labels: hexbear -assignees: "" ---- - -For hexbear-related issues diff --git a/.github/ISSUE_TEMPLATE/hexbear.yml b/.github/ISSUE_TEMPLATE/hexbear.yml new file mode 100644 index 00000000..199b97e9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/hexbear.yml @@ -0,0 +1,11 @@ +name: "Hexbear" +description: For hexbear issues +labels: ["hexbear", "triage"] +body: + - type: textarea + id: question + attributes: + label: Question + description: What's the question you have about hexbear? + validations: + required: true \ No newline at end of file diff --git a/deploy.sh b/deploy.sh index ce125fcd..c53988d2 100755 --- a/deploy.sh +++ b/deploy.sh @@ -4,7 +4,7 @@ set -e new_tag="$1" # Old deploy -# sudo docker build . --tag dessalines/lemmy-ui:$new_tag +# sudo docker build . --tag dessalines/lemmy-ui:$new_tag --platform=linux/amd64 # sudo docker push dessalines/lemmy-ui:$new_tag # Upgrade version diff --git a/src/assets/css/main.css b/src/assets/css/main.css index a0d72394..1c45341d 100644 --- a/src/assets/css/main.css +++ b/src/assets/css/main.css @@ -270,6 +270,10 @@ hr { -ms-filter: blur(10px); } +.img-cover { + object-fit: cover; +} + .img-expanded { max-height: 90vh; } diff --git a/src/assets/css/themes/_variables.bootstra_386-tmp.scss b/src/assets/css/themes/_variables.bootstra_386-tmp.scss deleted file mode 100644 index 7804f9b3..00000000 --- a/src/assets/css/themes/_variables.bootstra_386-tmp.scss +++ /dev/null @@ -1,865 +0,0 @@ -// -// Variables -// -------------------------------------------------- - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -//// colors from bs-2 -// Grays -// ------------------------- -$black: #000; -$grayDark: #555; -$gray: #bbb; -$grayLight: #bbb; -$white: #fff; - -// Accent colors -// ------------------------- -$blue: #5555ff; -$cyan: #55ffff; -$cyanDark: #00aaaa; -$blueDark: #000084; -$green: #55ff55; -$greenDark: #00aa00; -$magenta: #ff55ff; -$magentaDark: #aa00aa; -$red: #ff5555; -$redDark: #aa0000; -$yellow: #fefe54; -$brown: #aa5500; -$orange: #a85400; -$pink: #fe54fe; -$purple: #fe5454; - -// end colors - -$gray-base: $gray; -$gray-darker: $grayDark; -$gray-dark: $grayDark; -$gray-light: $grayLight; -$gray-lighter: $grayLight; - -$brand-primary: $gray; -$brand-primary-bg: $cyanDark; -$brand-success: $greenDark; -$brand-info: $brown; -$brand-warning: $magentaDark; -$brand-danger: $redDark; - -//== Scaffolding -// -//## Settings for some of the most global styles. - -//** Background color for ``. -$body-bg: $blueDark; -//** Global text color on ``. -$text-color: $gray-light; - -//** Global textual link color. -$link-color: $brand-primary; -//** Link hover color set via `darken()` function. -$link-hover-color: $white; -//** Link hover decoration. -$link-hover-decoration: none; - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -$font-family-sans-serif: DOS, Monaco, Menlo, Consolas, "Courier New", monospace; -$font-family-serif: DOS, Monaco, Menlo, Consolas, "Courier New", monospace; -//** Default monospace fonts for ``, ``, and `
`.
-$font-family-monospace: DOS, Monaco, Menlo, Consolas, "Courier New", monospace;
-$font-family-base: $font-family-sans-serif;
-
-$baseWidth: 10px;
-$font-size-base: 18px;
-$font-size-large: $font-size-base;
-$font-size-small: $font-size-base;
-
-$font-size-h1: $font-size-base;
-$font-size-h2: $font-size-base;
-$font-size-h3: $font-size-base;
-$font-size-h4: $font-size-base;
-$font-size-h5: $font-size-base;
-$font-size-h6: $font-size-base;
-
-//** Unit-less `line-height` for use in components like buttons.
-$baseLineHeight: 19px;
-$line-height-base: $baseLineHeight;
-//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
-$line-height-computed: $line-height-base;
-
-//** By default, this inherits from the ``.
-$headings-font-family: inherit;
-$headings-font-weight: normal;
-$headings-line-height: $line-height-base;
-$headings-color: inherit;
-
-$space: $baseWidth;
-$halfbaseLineHeight: ($baseLineHeight / 2);
-$borderWidth: 2px;
-$baseLineWidth: ($baseLineHeight / 2);
-$halfSpace: ($baseWidth / 2);
-$lhsNB: ($baseWidth / 2 + 1);
-$rhsNB: ($baseWidth / 2 - 1);
-$lhs: ($lhsNB - ($borderWidth));
-$rhs: ($rhsNB - ($borderWidth / 2));
-$tsNB: ($baseLineHeight / 2);
-$bsNB: $tsNB;
-$ts: ($tsNB - ($borderWidth / 2));
-$bs: $ts;
-$tsMargin: 3px;
-
-//== Iconography
-//
-//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
-
-//** Load fonts from this directory.
-$icon-font-path: "../fonts/";
-//** File name for all font files.
-$icon-font-name: "glyphicons-halflings-regular";
-//** Element ID within SVG icon file.
-$icon-font-svg-id: "glyphicons_halflingsregular";
-
-//== Components
-//
-//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
-
-$padding-base-vertical: 0px;
-$padding-base-horizontal: 0px;
-
-$padding-large-vertical: 0px;
-$padding-large-horizontal: $halfSpace;
-
-$padding-small-vertical: 0px;
-$padding-small-horizontal: 0px;
-
-$padding-xs-vertical: 0px;
-$padding-xs-horizontal: 0px;
-
-$line-height-large: $baseLineHeight;
-$line-height-small: $baseLineHeight;
-
-$border-radius-base: 0;
-$border-radius-large: 0;
-$border-radius-small: 0;
-
-//** Global color for active items (e.g., navs or dropdowns).
-$component-active-color: $white;
-//** Global background color for active items (e.g., navs or dropdowns).
-$component-active-bg: $black;
-
-//** Width of the `border` for generating carets that indicator dropdowns.
-$caret-width-base: 4px;
-//** Carets increase slightly in size for larger components.
-$caret-width-large: 5px;
-
-//== Tables
-//
-//## Customizes the `.table` component with basic values, each used across all table variations.
-
-//** Padding for ``s and ``s.
-$table-cell-padding: $ts $rhs $bs $lhs;
-//** Padding for cells in `.table-condensed`.
-$table-condensed-cell-padding: $ts $rhs $bs $lhs;
-
-//** Default background color used for all tables.
-$table-bg: transparent;
-//** Background color used for `.table-striped`.
-$table-bg-accent: $black;
-//** Background color used for `.table-hover`.
-$table-bg-hover: #f5f5f5;
-$table-bg-active: $table-bg-hover;
-
-//** Border color for table and cell borders.
-$table-border-color: $gray;
-
-//== Buttons
-//
-//## For each of Bootstrap's buttons, define text, background and border color.
-
-$btn-font-weight: normal;
-
-$btn-default-color: $black;
-$btn-default-bg: $grayLight;
-$btn-default-border: $grayLight;
-
-$btn-primary-color: $black;
-$btn-primary-bg: $cyanDark;
-$btn-primary-border: $grayLight;
-
-$btn-success-color: #fff;
-$btn-success-bg: $brand-success;
-$btn-success-border: $btn-success-bg;
-
-$btn-info-color: #fff;
-$btn-info-bg: $brand-info;
-$btn-info-border: $btn-info-bg;
-
-$btn-warning-color: #fff;
-$btn-warning-bg: $brand-warning;
-$btn-warning-border: $btn-warning-bg;
-
-$btn-danger-color: #fff;
-$btn-danger-bg: $brand-danger;
-$btn-danger-border: $btn-danger-bg;
-
-$btn-link-disabled-color: $gray-light;
-
-//== Forms
-//
-//##
-
-//** `` background color
-$input-bg: $cyanDark;
-//** `` background color
-$input-bg-disabled: $gray-lighter;
-
-//** Text color for ``s
-$input-color: $white;
-//** `` border color
-$input-border: #ccc;
-
-// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
-//** Default `.form-control` border radius
-// This has no effect on ``s in CSS.
-$input-border-radius: $border-radius-base;
-//** Large `.form-control` border radius
-$input-border-radius-large: $border-radius-large;
-//** Small `.form-control` border radius
-$input-border-radius-small: $border-radius-small;
-
-//** Border color for inputs on focus
-$input-border-focus: $black;
-
-//** Placeholder text color
-$input-color-placeholder: $black;
-
-//** Default `.form-control` height
-$input-height-base: $line-height-computed;
-//** Large `.form-control` height
-$input-height-large: $input-height-base;
-//** Small `.form-control` height
-$input-height-small: $input-height-base;
-
-$legend-color: $gray-dark;
-$legend-border-color: #e5e5e5;
-
-//** Background color for textual input addons
-$input-group-addon-bg: $gray-lighter;
-//** Border color for textual input addons
-$input-group-addon-border-color: $input-border;
-
-//** Disabled cursor for form controls and buttons.
-$cursor-disabled: not-allowed;
-
-//== Dropdowns
-//
-//## Dropdown menu container and contents.
-
-//** Background for the dropdown menu.
-$dropdown-bg: $gray;
-//** Dropdown menu `border-color`.
-$dropdown-border: rgb(0, 0, 0);
-//** Dropdown menu `border-color` **for IE8**.
-$dropdown-fallback-border: #ccc;
-//** Divider color for between dropdown items.
-$dropdown-divider-bg: $black;
-
-//** Dropdown link text color.
-$dropdown-link-color: $black;
-//** Hover color for dropdown links.
-$dropdown-link-hover-color: $gray;
-//** Hover background for dropdown links.
-$dropdown-link-hover-bg: $black;
-
-//** Active dropdown menu item text color.
-$dropdown-link-active-color: $component-active-color;
-//** Active dropdown menu item background color.
-$dropdown-link-active-bg: $component-active-bg;
-
-//** Disabled dropdown menu item background color.
-$dropdown-link-disabled-color: $gray-light;
-
-//** Text color for headers within dropdown menus.
-$dropdown-header-color: $black;
-
-//** Deprecated `$dropdown-caret-color` as of v3.1.0
-$dropdown-caret-color: #000;
-
-//-- Z-index master list
-//
-// Warning: Avoid customizing these values. They're used for a bird's eye view
-// of components dependent on the z-axis and are designed to all work together.
-//
-// Note: These variables are not generated into the Customizer.
-
-$zindex-navbar: 1000;
-$zindex-dropdown: 1000;
-$zindex-popover: 1060;
-$zindex-tooltip: 1070;
-$zindex-navbar-fixed: 1030;
-$zindex-modal: 1040;
-
-//== Media queries breakpoints
-//
-//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
-
-// Extra small screen / phone
-//** Deprecated `$screen-xs` as of v3.0.1
-$screen-xs: 480px;
-//** Deprecated `$screen-xs-min` as of v3.2.0
-$screen-xs-min: $screen-xs;
-//** Deprecated `$screen-phone` as of v3.0.1
-$screen-phone: $screen-xs-min;
-
-// Small screen / tablet
-//** Deprecated `$screen-sm` as of v3.0.1
-$screen-sm: 768px;
-$screen-sm-min: $screen-sm;
-//** Deprecated `$screen-tablet` as of v3.0.1
-$screen-tablet: $screen-sm-min;
-
-// Medium screen / desktop
-//** Deprecated `$screen-md` as of v3.0.1
-$screen-md: 992px;
-$screen-md-min: $screen-md;
-//** Deprecated `$screen-desktop` as of v3.0.1
-$screen-desktop: $screen-md-min;
-
-// Large screen / wide desktop
-//** Deprecated `$screen-lg` as of v3.0.1
-$screen-lg: 1200px;
-$screen-lg-min: $screen-lg;
-//** Deprecated `$screen-lg-desktop` as of v3.0.1
-$screen-lg-desktop: $screen-lg-min;
-
-// So media queries don't overlap when required, provide a maximum
-$screen-xs-max: ($screen-sm-min - 1);
-$screen-sm-max: ($screen-md-min - 1);
-$screen-md-max: ($screen-lg-min - 1);
-
-//== Grid system
-//
-//## Define your custom responsive grid.
-
-//** Number of columns in the grid.
-$grid-columns: 12;
-//** Padding between columns. Gets divided in half for the left and right.
-$grid-gutter-width: ($baseWidth * 2);
-// Navbar collapse
-//** Point at which the navbar becomes uncollapsed.
-$grid-float-breakpoint: $screen-sm-min;
-//** Point at which the navbar begins collapsing.
-$grid-float-breakpoint-max: ($grid-float-breakpoint);
-
-//== Container sizes
-//
-//## Define the maximum width of `.container` for different screen sizes.
-
-// Small screen / tablet
-$container-tablet: (720px + $grid-gutter-width);
-//** For `$screen-sm-min` and up.
-$container-sm: $container-tablet;
-
-// Medium screen / desktop
-$container-desktop: (940px + $grid-gutter-width);
-//** For `$screen-md-min` and up.
-$container-md: $container-desktop;
-
-// Large screen / wide desktop
-$container-large-desktop: (1140px + $grid-gutter-width);
-//** For `$screen-lg-min` and up.
-$container-lg: $container-large-desktop;
-
-//== Navbar
-//
-//##
-
-// Basics of a navbar
-$navbar-height: 0px;
-$navbar-margin-bottom: $line-height-computed;
-$navbar-border-radius: $border-radius-base;
-$navbar-padding-horizontal: ($baseWidth * 2);
-$navbar-padding-vertical: 0;
-$navbar-collapse-max-height: 340px;
-
-$navbar-default-color: $black;
-$navbar-default-bg: $grayLight;
-$navbar-default-border: $navbar-default-bg;
-
-// Navbar links
-$navbar-default-link-color: $black;
-$navbar-default-link-hover-color: $white;
-$navbar-default-link-hover-bg: $black;
-$navbar-default-link-active-color: $white;
-$navbar-default-link-active-bg: $black;
-$navbar-default-link-disabled-color: $gray;
-$navbar-default-link-disabled-bg: transparent;
-
-// Navbar brand label
-$navbar-default-brand-color: $navbar-default-link-color;
-$navbar-default-brand-hover-color: $navbar-default-brand-color;
-$navbar-default-brand-hover-bg: transparent;
-
-// Navbar toggle
-$navbar-default-toggle-hover-bg: #ddd;
-$navbar-default-toggle-icon-bar-bg: #888;
-$navbar-default-toggle-border-color: #ddd;
-
-// Inverted navbar
-// Reset inverted navbar basics
-$navbar-inverse-color: $gray;
-$navbar-inverse-bg: $black;
-$navbar-inverse-border: $navbar-inverse-bg;
-
-// Inverted navbar links
-$navbar-inverse-link-color: $gray-light;
-$navbar-inverse-link-hover-color: $black;
-$navbar-inverse-link-hover-bg: $grayLight;
-$navbar-inverse-link-active-color: $white;
-$navbar-inverse-link-active-bg: $grayDark;
-$navbar-inverse-link-disabled-color: $gray;
-$navbar-inverse-link-disabled-bg: transparent;
-
-// Inverted navbar brand label
-$navbar-inverse-brand-color: $navbar-inverse-link-color;
-$navbar-inverse-brand-hover-color: #fff;
-$navbar-inverse-brand-hover-bg: transparent;
-
-// Inverted navbar toggle
-$navbar-inverse-toggle-hover-bg: $grayLight;
-$navbar-inverse-toggle-icon-bar-bg: #fff;
-$navbar-inverse-toggle-border-color: #333;
-
-//== Navs
-//
-//##
-
-//=== Shared nav styles
-$nav-link-padding: 0 $baseWidth;
-$nav-link-hover-bg: $gray-lighter;
-
-$nav-disabled-link-color: $gray-light;
-$nav-disabled-link-hover-color: $gray-light;
-
-//== Tabs
-$nav-tabs-border-color: #ddd;
-
-$nav-tabs-link-hover-border-color: $gray-lighter;
-
-$nav-tabs-active-link-hover-bg: $black;
-$nav-tabs-active-link-hover-color: $white;
-
-$nav-tabs-justified-active-link-border-color: $body-bg;
-
-//== Pills
-$nav-pills-border-radius: $border-radius-base;
-$nav-pills-active-link-hover-bg: $component-active-bg;
-$nav-pills-active-link-hover-color: $component-active-color;
-
-//== Pagination
-//
-//##
-
-$pagination-color: $black;
-$pagination-bg: $gray;
-$pagination-border: #ddd;
-
-$pagination-hover-color: $link-hover-color;
-$pagination-hover-bg: $gray-lighter;
-$pagination-hover-border: #ddd;
-
-$pagination-active-color: #fff;
-$pagination-active-bg: $brand-primary;
-$pagination-active-border: $brand-primary;
-
-$pagination-disabled-color: $gray-light;
-$pagination-disabled-bg: #fff;
-$pagination-disabled-border: #ddd;
-
-//== Pager
-//
-//##
-
-$pager-bg: $pagination-bg;
-$pager-border: $pagination-border;
-$pager-border-radius: 0;
-
-$pager-hover-bg: $pagination-hover-bg;
-
-$pager-active-bg: $pagination-active-bg;
-$pager-active-color: $pagination-active-color;
-
-$pager-disabled-color: $pagination-disabled-color;
-
-//== Jumbotron
-//
-//##
-
-$jumbotron-padding: ($ts) ($rhs + $baseWidth) ($bs) ($lhs + $baseWidth);
-$jumbotron-color: $white;
-$jumbotron-bg: transparent;
-$jumbotron-heading-color: inherit;
-$jumbotron-font-size: $font-size-base;
-
-//== Form states and alerts
-//
-//## Define colors for form feedback states and, by default, alerts.
-
-$state-success-text: $green;
-$state-success-bg: $greenDark;
-$state-success-border: $state-success-bg;
-
-$state-info-text: $yellow;
-$state-info-bg: $brown;
-$state-info-border: $state-info-bg;
-
-$state-warning-text: $magenta;
-$state-warning-bg: $magentaDark;
-$state-warning-border: $state-warning-bg;
-
-$state-danger-text: $red;
-$state-danger-bg: $black;
-$state-danger-border: $state-danger-bg;
-
-//== Tooltips
-//
-//##
-
-//** Tooltip max width
-$tooltip-max-width: ($baseWidth * 25);
-//** Tooltip text color
-$tooltip-color: $white;
-//** Tooltip background color
-$tooltip-bg: $grayDark;
-$tooltip-opacity: 1;
-
-//** Tooltip arrow width
-$tooltip-arrow-width: 0px;
-//** Tooltip arrow color
-$tooltip-arrow-color: $tooltip-bg;
-
-//== Popovers
-//
-//##
-
-//** Popover body background color
-$popover-bg: $gray;
-//** Popover maximum width
-$popover-max-width: ($baseWidth * 20);
-//** Popover border color
-$popover-border-color: rgb(0, 0, 0);
-//** Popover fallback border color
-$popover-fallback-border-color: #ccc;
-
-//** Popover title background color
-$popover-title-bg: $greenDark;
-
-//** Popover arrow width
-$popover-arrow-width: 10px;
-//** Popover arrow color
-$popover-arrow-color: $popover-bg;
-
-//** Popover outer arrow width
-$popover-arrow-outer-width: ($popover-arrow-width + 1);
-//** Popover outer arrow color
-$popover-arrow-outer-color: $popover-border-color;
-//** Popover outer arrow fallback color
-$popover-arrow-outer-fallback-color: $popover-fallback-border-color;
-
-//== Labels
-//
-//##
-
-//** Default label background color
-$label-default-bg: $gray-light;
-//** Primary label background color
-$label-primary-bg: $brand-primary-bg;
-//** Success label background color
-$label-success-bg: $brand-success;
-//** Info label background color
-$label-info-bg: $brand-info;
-//** Warning label background color
-$label-warning-bg: $brand-warning;
-//** Danger label background color
-$label-danger-bg: $brand-danger;
-
-//** Default label text color
-$label-color: #fff;
-//** Default text color of a linked label
-$label-link-hover-color: #fff;
-
-//== Modals
-//
-//##
-
-//** Padding applied to the modal body
-$modal-inner-padding: 0 $baseWidth;
-
-//** Padding applied to the modal title
-$modal-title-padding: 0 $baseWidth;
-//** Modal title line-height
-$modal-title-line-height: $line-height-base;
-
-//** Background color of modal content area
-$modal-content-bg: $gray;
-//** Modal content border color
-$modal-content-border-color: rgb(0, 0, 0);
-//** Modal content border color **for IE8**
-$modal-content-fallback-border-color: #999;
-
-//** Modal backdrop background color
-$modal-backdrop-bg: #000;
-//** Modal backdrop opacity
-// $modal-backdrop-opacity:      @include 5;
-//** Modal header border color
-$modal-header-border-color: #e5e5e5;
-//** Modal footer border color
-$modal-footer-border-color: $modal-header-border-color;
-
-$modal-lg: 900px;
-$modal-md: 600px;
-$modal-sm: 300px;
-
-//== Alerts
-//
-//## Define alert colors, border radius, and padding.
-
-$alert-padding: $line-height-base ($baseWidth * 2);
-$alert-border-radius: $border-radius-base;
-$alert-link-font-weight: normal;
-
-$alert-success-bg: $state-success-bg;
-$alert-success-text: $state-success-text;
-$alert-success-border: $state-success-border;
-
-$alert-info-bg: $state-info-bg;
-$alert-info-text: $state-info-text;
-$alert-info-border: $state-info-border;
-
-$alert-warning-bg: $state-warning-bg;
-$alert-warning-text: $state-warning-text;
-$alert-warning-border: $state-warning-border;
-
-$alert-danger-bg: $state-danger-bg;
-$alert-danger-text: $state-danger-text;
-$alert-danger-border: $state-danger-border;
-
-//== Progress bars
-//
-//##
-
-//** Background color of the whole progress component
-$progress-bg: $black;
-//** Progress bar text color
-$progress-bar-color: $black;
-//** Variable for setting rounded corners on progress bar.
-$progress-border-radius: $border-radius-base;
-
-//** Default progress bar color
-$progress-bar-bg: $brand-primary;
-//** Success progress bar color
-$progress-bar-success-bg: $brand-success;
-//** Warning progress bar color
-$progress-bar-warning-bg: $brand-warning;
-//** Danger progress bar color
-$progress-bar-danger-bg: $brand-danger;
-//** Info progress bar color
-$progress-bar-info-bg: $brand-info;
-
-//== List group
-//
-//##
-
-//** Background color on `.list-group-item`
-$list-group-bg: $gray;
-//** `.list-group-item` border color
-$list-group-border: #ddd;
-//** List group border radius
-$list-group-border-radius: $border-radius-base;
-
-//** Background color of single list items on hover
-$list-group-hover-bg: $black;
-//** Text color of active list items
-$list-group-active-color: $component-active-color;
-//** Background color of active list items
-$list-group-active-bg: $component-active-bg;
-//** Border color of active list elements
-$list-group-active-border: $list-group-active-bg;
-//** Text color for content within active list items
-$list-group-active-text-color: $component-active-color;
-
-//** Text color of disabled list items
-$list-group-disabled-color: $gray-dark;
-//** Background color of disabled list items
-$list-group-disabled-bg: $gray-lighter;
-//** Text color for content within disabled list items
-$list-group-disabled-text-color: $list-group-disabled-color;
-
-$list-group-link-color: $black;
-$list-group-link-hover-color: $list-group-link-color;
-$list-group-link-heading-color: #333;
-
-//== Panels
-//
-//##
-
-$panel-bg: $gray;
-$panel-body-padding: 0 $rhsNB 0 $lhsNB;
-$panel-heading-padding: 0 $rhsNB 0 $lhsNB;
-$panel-footer-padding: $panel-heading-padding;
-$panel-border-radius: $border-radius-base;
-
-//** Border color for elements within panels
-$panel-inner-border: #ddd;
-$panel-footer-bg: #f5f5f5;
-
-$panel-default-text: $white;
-$panel-default-border: #ddd;
-$panel-default-heading-bg: $grayDark;
-
-$panel-primary-text: $white;
-$panel-primary-border: $brand-primary;
-$panel-primary-heading-bg: $cyanDark;
-
-$panel-success-text: $state-success-text;
-$panel-success-border: $state-success-border;
-$panel-success-heading-bg: $state-success-bg;
-
-$panel-info-text: $state-info-text;
-$panel-info-border: $state-info-border;
-$panel-info-heading-bg: $state-info-bg;
-
-$panel-warning-text: $state-warning-text;
-$panel-warning-border: $state-warning-border;
-$panel-warning-heading-bg: $state-warning-bg;
-
-$panel-danger-text: $state-danger-text;
-$panel-danger-border: $state-danger-border;
-$panel-danger-heading-bg: $state-danger-bg;
-
-//== Thumbnails
-//
-//##
-
-//** Padding around the thumbnail image
-$thumbnail-padding: 4px;
-//** Thumbnail background color
-$thumbnail-bg: $body-bg;
-//** Thumbnail border color
-$thumbnail-border: #ddd;
-//** Thumbnail border radius
-$thumbnail-border-radius: $border-radius-base;
-
-//** Custom text color for thumbnail captions
-$thumbnail-caption-color: $text-color;
-//** Padding around the thumbnail caption
-$thumbnail-caption-padding: 9px;
-
-//== Wells
-//
-//##
-
-$well-bg: $greenDark;
-$well-border: $well-bg;
-
-//== Badges
-//
-//##
-
-$badge-color: $black;
-//** Linked badge text color on hover
-$badge-link-hover-color: #fff;
-$badge-bg: $gray-light;
-
-//** Badge text color in active nav link
-$badge-active-color: $link-color;
-//** Badge background color in active nav link
-$badge-active-bg: $black;
-
-$badge-font-weight: normal;
-$badge-line-height: $line-height-base;
-$badge-border-radius: 0;
-
-//== Breadcrumbs
-//
-//##
-
-$breadcrumb-padding-vertical: 8px;
-$breadcrumb-padding-horizontal: 15px;
-//** Breadcrumb background color
-$breadcrumb-bg: #f5f5f5;
-//** Breadcrumb text color
-$breadcrumb-color: #ccc;
-//** Text color of current page in the breadcrumb
-$breadcrumb-active-color: $gray-light;
-//** Textual separator for between breadcrumb elements
-$breadcrumb-separator: "/";
-
-//== Carousel
-//
-//##
-
-$carousel-text-shadow: none;
-
-$carousel-control-color: #fff;
-$carousel-control-width: 15%;
-$carousel-control-opacity: 1;
-$carousel-control-font-size: $font-size-base;
-
-$carousel-indicator-active-bg: #fff;
-$carousel-indicator-border-color: #fff;
-
-$carousel-caption-color: #fff;
-
-//== Close
-//
-//##
-
-$close-font-weight: normal;
-$close-color: #000;
-$close-text-shadow: none;
-
-//== Code
-//
-//##
-
-$code-color: #c7254e;
-$code-bg: #f9f2f4;
-
-$kbd-color: #fff;
-$kbd-bg: #333;
-
-$pre-bg: #f5f5f5;
-$pre-color: $gray-dark;
-$pre-border-color: #ccc;
-$pre-scrollable-max-height: 340px;
-
-//== Type
-//
-//##
-
-//** Horizontal offset for forms and lists.
-$component-offset-horizontal: 180px;
-//** Text muted color
-$text-muted: $gray-dark;
-//** Abbreviations and acronyms border color
-$abbr-border-color: $gray-light;
-//** Headings small color
-$headings-small-color: $gray-light;
-//** Blockquote small color
-$blockquote-small-color: $gray-light;
-//** Blockquote font size
-$blockquote-font-size: $font-size-base;
-//** Blockquote border color
-$blockquote-border-color: $gray-lighter;
-//** Page header border color
-$page-header-border-color: $gray-lighter;
-//** Width of horizontal description list titles
-$dl-horizontal-offset: $component-offset-horizontal;
-//** Horizontal line color.
-$hr-border: $black;
diff --git a/src/assets/css/themes/_variables.i386.scss b/src/assets/css/themes/_variables.i386.scss
deleted file mode 100644
index 259646fd..00000000
--- a/src/assets/css/themes/_variables.i386.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-$blue: #5555ff;
-$cyan: #55ffff;
-$green: #55ff55;
-$indigo: #ff55ff;
-$red: #ff5555;
-$yellow: #fefe54;
-$orange: #a85400;
-$pink: #fe54fe;
-$purple: #fe5454;
-$primary: #fefe54;
-$body-bg: #000084;
-$gray-300: #bbb;
-$body-color: $gray-300;
-$link-hover-color: $white;
-$font-family-sans-serif: DOS, Monaco, Menlo, Consolas, "Courier New", monospace;
-$font-family-monospace: DOS, Monaco, Menlo, Consolas, "Courier New", monospace;
-$navbar-dark-color: $gray-300;
-$navbar-light-brand-color: $gray-300;
-$success: #00aa00;
-$danger: #aa0000;
-$info: #00aaaa;
-$warning: #aa00aa;
-$navbar-dark-active-color: $gray-100;
-$enable-rounded: false;
-$input-color: $white;
-$input-bg: rgb(102, 102, 102);
-$input-disabled-bg: $gray-800;
-$nav-tabs-link-active-color: $gray-100;
-$navbar-dark-hover-color: rgba($gray-300, 0.75);
-$light: $gray-800;
-$navbar-light-disabled-color: $gray-800;
-$navbar-light-active-color: $gray-100;
-$navbar-light-hover-color: $gray-200;
-$navbar-light-color: $gray-300;
-$card-bg: $gray-800;
-$card-border-color: $white;
-$input-placeholder-color: $gray-500;
-$mark-bg: #463b00;
-$secondary: $gray-900;
diff --git a/src/assets/css/themes/_variables.vaporwave-dark.scss b/src/assets/css/themes/_variables.vaporwave-dark.scss
deleted file mode 100644
index cbccc998..00000000
--- a/src/assets/css/themes/_variables.vaporwave-dark.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-$blue: #01cdfe;
-$indigo: #b967ff;
-$purple: #b967ff;
-$pink: rgb(255, 64, 186);
-$red: rgb(255, 95, 110);
-$orange: rgb(255, 167, 93);
-$yellow: #fffb96;
-$green: #05ffa1;
-$teal: #01cdfe;
-$cyan: #01cdfe;
-$enable-shadows: true;
-$enable-gradients: true;
-$enable-responsive-font-sizes: true;
-$body-bg: $gray-900;
-$body-color: $gray-200;
-$border-radius: 1rem;
-$border-radius-lg: 1rem;
-$font-family-monospace: Arial, "Noto Sans", sans-serif;
-$yiq-text-light: $gray-300;
-$secondary: $blue;
-$text-muted: $gray-500;
-$primary: $pink;
-$navbar-light-hover-color: rgba($primary, 0.7);
-$light: darken($gray-100, 1.5);
-$font-family-sans-serif: "Lucida Console", Monaco, monospace;
-$card-bg: $body-bg;
-$navbar-dark-color: rgba($body-bg, 0.5);
-$navbar-light-active-color: rgba($gray-200, 0.9);
-$navbar-light-disabled-color: rgba($gray-200, 0.3);
-$navbar-light-color: rgba($white, 0.5);
-$input-bg: $gray-700;
-$input-color: $gray-200;
-$input-disabled-bg: $gray-800;
-$input-border-color: $gray-800;
-$mark-bg: $gray-600;
-$pre-color: $gray-200;
-mark-bg: $gray-600;
diff --git a/src/assets/css/themes/_variables.vaporwave-light.scss b/src/assets/css/themes/_variables.vaporwave-light.scss
deleted file mode 100644
index 77495781..00000000
--- a/src/assets/css/themes/_variables.vaporwave-light.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-$blue: #01cdfe;
-$indigo: #b967ff;
-$purple: #b967ff;
-$pink: rgb(255, 64, 186);
-$red: rgb(255, 95, 110);
-$orange: rgb(255, 167, 93);
-$yellow: #fffb96;
-$green: #05ffa1;
-$teal: #01cdfe;
-$cyan: #01cdfe;
-$enable-shadows: true;
-$enable-gradients: true;
-$enable-responsive-font-sizes: true;
-$body-bg: $gray-100;
-$body-color: $gray-700;
-$border-radius: 1rem;
-$border-radius-lg: 1rem;
-$font-family-monospace: Arial, "Noto Sans", sans-serif;
-$yiq-text-light: $gray-300;
-$secondary: $blue;
-$text-muted: $gray-500;
-$primary: $pink;
-$navbar-light-hover-color: rgba($primary, 0.7);
-$light: darken($gray-100, 1.5);
-$font-family-sans-serif: "Lucida Console", Monaco, monospace;
diff --git a/src/server/index.tsx b/src/server/index.tsx
index b7f4fb5f..8d9bb255 100644
--- a/src/server/index.tsx
+++ b/src/server/index.tsx
@@ -9,7 +9,6 @@ import IsomorphicCookie from "isomorphic-cookie";
 import { GetSite, GetSiteResponse, LemmyHttp, Site } from "lemmy-js-client";
 import path from "path";
 import process from "process";
-import sanitize from "sanitize-html";
 import serialize from "serialize-javascript";
 import sharp from "sharp";
 import { App } from "../shared/components/app/app";
@@ -348,7 +347,7 @@ async function createSsrHtml(root: string, isoData: IsoDataOptionalSite) {
   
   
   
-  
+  
   
 
   
diff --git a/src/shared/components/common/markdown-textarea.tsx b/src/shared/components/common/markdown-textarea.tsx
index 7702d2bc..38a2c2ed 100644
--- a/src/shared/components/common/markdown-textarea.tsx
+++ b/src/shared/components/common/markdown-textarea.tsx
@@ -211,7 +211,7 @@ export class MarkdownTextArea extends Component<
                 }`}
                 onClick={linkEvent(this, this.handlePreviewToggle)}
               >
-                {i18n.t("preview")}
+                {this.state.previewMode ? i18n.t("edit") : i18n.t("preview")}
               
             )}
             {/* A flex expander */}
@@ -435,30 +435,45 @@ export class MarkdownTextArea extends Component<
   handleKeyBinds(i: MarkdownTextArea, event: KeyboardEvent) {
     if (event.ctrlKey) {
       switch (event.key) {
-        case "k":
+        case "k": {
           i.handleInsertLink(i, event);
           break;
-        case "b":
+        }
+        case "Enter": {
+          if (!this.isDisabled) {
+            i.handleSubmit(i, event);
+          }
+
+          break;
+        }
+        case "b": {
           i.handleInsertBold(i, event);
           break;
-        case "i":
+        }
+        case "i": {
           i.handleInsertItalic(i, event);
           break;
-        case "e":
+        }
+        case "e": {
           i.handleInsertCode(i, event);
           break;
-        case "8":
+        }
+        case "8": {
           i.handleInsertList(i, event);
           break;
-        case "s":
+        }
+        case "s": {
           i.handleInsertSpoiler(i, event);
           break;
-        case "p":
+        }
+        case "p": {
           if (i.state.content) i.handlePreviewToggle(i, event);
           break;
-        case ".":
+        }
+        case ".": {
           i.handleInsertQuote(i, event);
           break;
+        }
       }
     }
   }
diff --git a/src/shared/components/common/pictrs-image.tsx b/src/shared/components/common/pictrs-image.tsx
index 6b9db565..0b3493b5 100644
--- a/src/shared/components/common/pictrs-image.tsx
+++ b/src/shared/components/common/pictrs-image.tsx
@@ -38,8 +38,9 @@ export class PictrsImage extends Component {
             "img-expanded slight-radius":
               !this.props.thumbnail && !this.props.icon,
             "img-blur": this.props.thumbnail && this.props.nsfw,
-            "rounded-circle img-icon mr-2": this.props.icon,
-            "ml-2 mb-0 rounded-circle avatar-overlay": this.props.iconOverlay,
+            "rounded-circle img-cover img-icon mr-2": this.props.icon,
+            "ml-2 mb-0 rounded-circle img-cover avatar-overlay":
+              this.props.iconOverlay,
             "avatar-pushup": this.props.pushup,
           })}
         />
diff --git a/src/shared/utils.ts b/src/shared/utils.ts
index f98fa563..c7a5da03 100644
--- a/src/shared/utils.ts
+++ b/src/shared/utils.ts
@@ -207,12 +207,12 @@ export function hotRank(score: number, timeStr: string): number {
 
 export function mdToHtml(text: string) {
   // restore '>' character to fix quotes
-  return { __html: md.render(text.split(">").join(">")) };
+  return { __html: md.render(text) };
 }
 
 export function mdToHtmlNoImages(text: string) {
   // restore '>' character to fix quotes
-  return { __html: mdNoImages.render(text.split(">").join(">")) };
+  return { __html: mdNoImages.render(text) };
 }
 
 export function mdToHtmlInline(text: string) {