summaryrefslogtreecommitdiff
path: root/addons/portal/static/src/scss
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/portal/static/src/scss
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/portal/static/src/scss')
-rw-r--r--addons/portal/static/src/scss/bootstrap.extend.scss13
-rw-r--r--addons/portal/static/src/scss/bootstrap_overridden.scss34
-rw-r--r--addons/portal/static/src/scss/portal.scss563
-rw-r--r--addons/portal/static/src/scss/primary_variables.scss5
4 files changed, 615 insertions, 0 deletions
diff --git a/addons/portal/static/src/scss/bootstrap.extend.scss b/addons/portal/static/src/scss/bootstrap.extend.scss
new file mode 100644
index 00000000..21eacb47
--- /dev/null
+++ b/addons/portal/static/src/scss/bootstrap.extend.scss
@@ -0,0 +1,13 @@
+@each $breakpoint in map-keys($grid-breakpoints) {
+ @include media-breakpoint-up($breakpoint) {
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+
+ @if $infix != '' { // Standard ones are already created by bootstrap
+ @each $prop, $abbrev in (width: w, height: h) {
+ @each $size, $length in $sizes {
+ .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }
+ }
+ }
+ }
+ }
+}
diff --git a/addons/portal/static/src/scss/bootstrap_overridden.scss b/addons/portal/static/src/scss/bootstrap_overridden.scss
new file mode 100644
index 00000000..243cff2d
--- /dev/null
+++ b/addons/portal/static/src/scss/bootstrap_overridden.scss
@@ -0,0 +1,34 @@
+// This variable affects the `.h-*` and `.w-*` classes.
+$sizes: () !default;
+$sizes: map-merge((
+ 0: 0,
+), $sizes);
+
+// Body
+//
+// Settings for the `<body>` element.
+
+$body-bg: $o-portal-default-body-bg !default;
+
+// Fonts
+//
+// Font, line-height, and color for body text, headings, and more.
+
+$font-size-sm: (12 / 16) * 1rem !default;
+
+// Buttons
+//
+// For each of Bootstrap's buttons, define text, background, and border color.
+
+$btn-padding-y-sm: (1 / 16) * 1rem !default;
+$btn-padding-x-sm: (5 / 16) * 1rem !default;
+
+// Navbar
+
+$navbar-dark-toggler-border-color: transparent;
+$navbar-light-toggler-border-color: transparent;
+
+// Modals
+
+$modal-lg: $o-modal-lg;
+$modal-md: $o-modal-md;
diff --git a/addons/portal/static/src/scss/portal.scss b/addons/portal/static/src/scss/portal.scss
new file mode 100644
index 00000000..3aa87818
--- /dev/null
+++ b/addons/portal/static/src/scss/portal.scss
@@ -0,0 +1,563 @@
+///
+/// This file regroups the frontend general design rules and portal design
+/// rules.
+///
+
+// ====== Variables =========
+$o-theme-navbar-logo-height: $nav-link-height !default;
+$o-theme-navbar-fixed-logo-height: $nav-link-height !default;
+
+// Portal toolbar (filters, search bar)
+$o-portal-mobile-toolbar: true; // Enable/Disable custom design
+$o-portal-mobile-toolbar-border: $border-color;
+$o-portal-mobile-toolbar-bg: $gray-200;
+
+// Portal Tables
+$o-portal-table-th-pt: map-get($spacers, 2) !default; // bts4 pt-2
+$o-portal-table-th-pb: map-get($spacers, 2) !default; // bts4 pb-2
+$o-portal-table-td-pt: map-get($spacers, 1) !default; // bts4 pt-1
+$o-portal-table-td-pb: map-get($spacers, 1) !default; // bts4 pb-1
+
+// Portal custom bg color
+$o-portal-bg-color: desaturate($gray-200, 100%);
+
+// Check if portal uses default colors
+$o-portal-use-default-colors: $body-bg == $o-portal-default-body-bg;
+
+// Frontend general
+body {
+ // Set frontend direction that will be flipped with
+ // rtlcss for right-to-left text direction.
+ direction: ltr;
+}
+
+header {
+ .navbar-brand {
+ flex: 0 0 auto;
+ max-width: 75%;
+
+ &.logo {
+ padding-top: 0;
+ padding-bottom: 0;
+
+ img {
+ // object-fit does not work on IE but is only used as a fallback
+ object-fit: contain;
+ display: block;
+ width: auto;
+ height: $o-theme-navbar-logo-height;
+
+ @include media-breakpoint-down(sm) {
+ max-height: min($o-theme-navbar-logo-height, 5rem);
+ }
+ }
+ }
+ }
+ .nav-link {
+ white-space: nowrap;
+ }
+}
+.navbar {
+ margin-bottom: 0;
+ .nav.navbar-nav.float-right {
+ @include media-breakpoint-down(sm) {
+ float: none!important;
+ }
+ }
+}
+@include media-breakpoint-up(md) {
+ .navbar-expand-md ul.nav > li.divider {
+ display: list-item;
+ }
+}
+ul.flex-column > li > a {
+ padding: 2px 15px;
+}
+
+// Link without text but an icon
+a, .btn-link {
+ &.fa:hover {
+ text-decoration: $o-theme-btn-icon-hover-decoration;
+ }
+}
+
+// Odoo options classes
+.jumbotron {
+ margin-bottom: 0;
+}
+
+// Typography
+ul {
+ list-style-type: disc;
+}
+ul ul {
+ list-style-type: circle;
+}
+ul ul ul {
+ list-style-type: square;
+}
+ul ul ul ul {
+ list-style-type: disc;
+}
+ul ul ul ul ul {
+ list-style-type: circle;
+}
+ul ul ul ul ul ul {
+ list-style-type: square;
+}
+ul ul ul ul ul ul ul {
+ list-style-type: disc;
+}
+ol {
+ list-style-type: decimal;
+}
+ol ol {
+ list-style-type: lower-alpha;
+}
+ol ol ol {
+ list-style-type: lower-greek;
+}
+ol ol ol ol {
+ list-style-type: decimal;
+}
+ol ol ol ol ol {
+ list-style-type: lower-alpha;
+}
+ol ol ol ol ol ol {
+ list-style-type: lower-greek;
+}
+ol ol ol ol ol ol ol {
+ list-style-type: decimal;
+}
+li > p {
+ margin: 0;
+}
+
+// Bootstrap hacks
+%o-double-container-no-padding {
+ padding-right: 0;
+ padding-left: 0;
+}
+.container {
+ .container, .container-fluid {
+ @extend %o-double-container-no-padding;
+ }
+}
+.container-fluid .container-fluid {
+ @extend %o-double-container-no-padding;
+}
+#wrap {
+ .container, .container-fluid {
+ // BS3 used to do this on all containers so that margins and floats are
+ // cleared inside containers. As lots of current odoo layouts may rely
+ // on this for some alignments, this is restored (at least for a while)
+ // here only for main containers of the frontend.
+ &::before, &::after {
+ content: "";
+ display: table;
+ clear: both;
+ }
+ }
+}
+[class^="col-lg-"] {
+ min-height: 24px;
+}
+.input-group {
+ flex-flow: row nowrap;
+}
+.list-group-item:not([class*="list-group-item-"]):not(.active) {
+ color: color-yiq($list-group-bg);
+}
+
+%o-portal-breadcrumbs {
+ background-color: inherit;
+}
+
+// Replaces old BS3 page-header class
+%o-page-header {
+ margin-bottom: $headings-margin-bottom * 2;
+ padding-bottom: $headings-margin-bottom;
+ border-bottom-width: $border-width;
+ border-bottom-style: solid;
+ border-bottom-color: $border-color;
+ line-height: 2.1rem;
+}
+.o_page_header {
+ @extend %o-page-header;
+}
+
+// Images spacing
+img, .media_iframe_video, .o_image {
+ &.float-right {
+ margin-left: $grid-gutter-width / 2;
+ }
+ &.float-left {
+ margin-right: $grid-gutter-width / 2;
+ }
+}
+
+// Others
+::-moz-selection {
+ background: rgba(150, 150, 220, 0.3);
+}
+::selection {
+ background: rgba(150, 150, 220, 0.3);
+}
+.oe_search_box {
+ padding-right: 23px;
+}
+
+// Kept for (up to) saas-12 compatibility
+.para_large {
+ font-size: 120%;
+}
+.jumbotron .para_large p {
+ font-size: 150%;
+}
+.readable {
+ font-size: 120%;
+ max-width: 700px;
+ margin-left: auto;
+ margin-right: auto;
+
+ .container {
+ padding-left: 0;
+ padding-right: 0;
+ width: auto;
+ }
+}
+
+// Background (kept for 8.0 compatibility) (! some are still used by website_blog)
+.oe_dark {
+ background-color: rgba(200, 200, 200, 0.14);
+}
+.oe_black {
+ background-color: rgba(0, 0, 0, 0.9);
+ color: white;
+}
+.oe_green {
+ background-color: #169C78;
+ color: white;
+ .text-muted {
+ color: #ddd !important;
+ }
+}
+.oe_blue_light {
+ background-color: #41b6ab;
+ color: white;
+ .text-muted {
+ color: #ddd !important;
+ }
+}
+.oe_blue {
+ background-color: #34495e;
+ color: white;
+}
+.oe_orange {
+ background-color: #f05442;
+ color: white;
+ .text-muted {
+ color: #ddd !important;
+ }
+}
+.oe_purple {
+ background-color: #b163a3;
+ color: white;
+ .text-muted {
+ color: #ddd !important;
+ }
+}
+.oe_red {
+ background-color: #9C1b31;
+ color: white;
+ .text-muted {
+ color: #ddd !important;
+ }
+}
+.oe_none {
+ background-color: #FFFFFF;
+}
+.oe_yellow {
+ background-color: #A2A51B;
+}
+.oe_green {
+ background-color: #149F2C;
+}
+
+// Portal specific
+// === Page custom bg ===
+// To be applied to all portal pages if bg-color is white (default).
+@if ($o-portal-use-default-colors) {
+ #wrapwrap.o_portal {
+ @include o-bg-color($o-portal-bg-color, $with-extras: false);
+ }
+}
+
+.o_portal {
+ .breadcrumb {
+ @extend %o-portal-breadcrumbs;
+ }
+
+ > tbody.o_portal_report_tbody {
+ vertical-align: middle;
+ }
+}
+
+.o_portal_wrap {
+ .o_portal_my_home > .o_page_header > a:hover {
+ text-decoration: none;
+ }
+
+ .o_portal_navbar {
+ .breadcrumb {
+ padding-left: 0;
+ padding-right: 0;
+ @extend %o-portal-breadcrumbs;
+ }
+
+ @if ($o-portal-use-default-colors) {
+ background-color: white!important;
+ }
+ }
+
+ .o_portal_my_doc_table {
+ th {
+ padding-top: $o-portal-table-th-pt;
+ padding-bottom: $o-portal-table-th-pb;
+ max-width: 500px;
+ }
+
+ td {
+ padding-top: $o-portal-table-td-pt;
+ padding-bottom: $o-portal-table-td-pb;
+ max-width: 10rem;
+
+ }
+
+ tr:last-child td {
+ padding-bottom: $o-portal-table-td-pb * 1.5;
+ }
+
+ td, th {
+ vertical-align: middle;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+
+ address {
+ span[itemprop="name"] {
+ margin-bottom: 0.3em;
+ }
+
+ div[itemprop="address"] > div {
+ position: relative;
+
+ span[itemprop="streetAddress"] {
+ line-height: 1.2;
+ margin-bottom: 0.3em;
+ }
+
+ .fa {
+ @include o-position-absolute(0, $left: 0);
+ line-height: $line-height-base;
+
+ + span, + div {
+ display: block;
+ // FontAwesome '.fa-fw' fixed-with + margin
+ padding-left: 1.28571429em + 0.5em;
+ }
+ }
+ }
+ }
+
+ .o_my_sidebar div[itemprop="address"] > div {
+ margin-top: 0.5em;
+ }
+
+ @if ($o-portal-mobile-toolbar) {
+ #o_portal_navbar_content {
+ @include media-breakpoint-down(md) {
+ margin: $navbar-padding-y (-$navbar-padding-x) 0;
+ padding: $navbar-padding-y $navbar-padding-x ;
+ border-top: $border-width solid $o-portal-mobile-toolbar-border;
+ background-color: $o-portal-mobile-toolbar-bg;
+ }
+ }
+ }
+
+ table.table tr {
+ word-wrap: break-word;
+ }
+}
+
+.oe_attachments .o_image_small {
+ height: 40px;
+ width: 50px;
+ background-repeat: no-repeat;
+}
+
+form label {
+ font-weight: $font-weight-bold;
+ &.label-optional {
+ font-weight: $font-weight-normal;
+ }
+}
+
+.o_portal_contact_img {
+ width: 2.3em;
+ height: 2.3em;
+ object-fit: cover;
+}
+
+.o_portal_sidebar {
+ #sidebar_content.card {
+ border-left: 0;
+ border-bottom: 0;
+
+ > div.card-body {
+ border-left: $border-width solid $border-color;
+ }
+
+ > ul > li {
+ border-left: $border-width solid $border-color;
+ margin-bottom: -1px;
+ }
+
+ > div.card-footer {
+ border-left: $border-width solid $border-color;
+ border-bottom: $border-width solid $border-color;
+ }
+ }
+
+ .o_portal_html_view {
+ overflow: hidden;
+ background: white;
+ position: relative;
+
+ .o_portal_html_loader {
+ @include o-position-absolute(45%, 0, auto, 0);
+ }
+
+ iframe {
+ position: relative;
+ }
+ }
+}
+
+// ------------------------------------------------------------
+// Frontend Discuss widget
+// ------------------------------------------------------------
+
+// Readonly display
+.o_portal_chatter {
+ padding: 10px;
+
+ .o_portal_chatter_avatar {
+ width: 45px;
+ height: 45px;
+ margin-right: 1rem;
+ }
+
+ .o_portal_chatter_header {
+ margin-bottom: 15px;
+ }
+
+ .o_portal_chatter_composer {
+ margin-bottom: 15px;
+ }
+
+ .o_portal_chatter_messages {
+ margin-bottom: 15px;
+
+ .o_portal_chatter_message {
+ div.media-body > p:not(.o_portal_chatter_puslished_date):last-of-type {
+ margin-bottom: 5px;
+ }
+ }
+
+ .o_portal_chatter_message_title {
+ p {
+ font-size:85%;
+ color:$o-main-color-muted;
+ margin: 0px;
+ }
+ }
+ }
+
+ .o_portal_chatter_pager {
+ text-align: center;
+ }
+
+
+}
+
+// Readonly / Composer mix display
+.o_portal_chatter,
+.o_portal_chatter_composer {
+ .o_portal_chatter_attachment {
+ .o_portal_chatter_attachment_name {
+ word-wrap: break-word;
+ }
+
+ .o_portal_chatter_attachment_delete {
+ @include o-position-absolute($top: 0, $right: 0);
+ opacity: 0;
+ }
+
+ &:hover .o_portal_chatter_attachment_delete {
+ opacity: 1;
+ }
+ }
+
+ .o_portal_message_internal_off {
+ .btn-danger {
+ display: none;
+ }
+ }
+
+ .o_portal_message_internal_on {
+ .btn-success {
+ display: none;
+ }
+ }
+}
+
+.o_portal_security_body {
+ @extend .mx-auto;
+ max-width: map-get($container-max-widths, sm);
+ section {
+ @extend .mt-4;
+ form.oe_reset_password_form {
+ max-width: initial;
+ margin: initial;
+ }
+ .form-group {
+ // for the absolutely positioned meter on new password
+ position: relative;
+ }
+ label, button {
+ @extend .text-nowrap;
+ }
+ }
+}
+
+// Copyright
+.o_footer_copyright {
+ .o_footer_copyright_name {
+ vertical-align: middle;
+ }
+ .js_language_selector {
+ display: inline-block;
+ }
+ @include media-breakpoint-up(md) {
+ .row {
+ display: flex;
+ > div {
+ margin: auto 0;
+ }
+ }
+ }
+}
+
diff --git a/addons/portal/static/src/scss/primary_variables.scss b/addons/portal/static/src/scss/primary_variables.scss
new file mode 100644
index 00000000..57a12f4c
--- /dev/null
+++ b/addons/portal/static/src/scss/primary_variables.scss
@@ -0,0 +1,5 @@
+$o-portal-default-body-bg: white;
+
+$o-theme-navbar-logo-height: null;
+
+$o-theme-btn-icon-hover-decoration: none;