diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/portal/static/src/scss | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/portal/static/src/scss')
| -rw-r--r-- | addons/portal/static/src/scss/bootstrap.extend.scss | 13 | ||||
| -rw-r--r-- | addons/portal/static/src/scss/bootstrap_overridden.scss | 34 | ||||
| -rw-r--r-- | addons/portal/static/src/scss/portal.scss | 563 | ||||
| -rw-r--r-- | addons/portal/static/src/scss/primary_variables.scss | 5 |
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; |
