[MERGE] Forward-port of branch 13.0 to 14.0

This commit is contained in:
Antoine Vandevenne (anv) 2021-05-28 17:38:04 +02:00
commit 1758c674e6
17 changed files with 238 additions and 153 deletions

View File

@ -17,7 +17,7 @@ Configuration
Go to :menuselection:`Apps` and install the **VoIP Module**. Go to :menuselection:`Apps` and install the **VoIP Module**.
.. image:: media/axivox-voip-installation.png .. image:: axivox/voip-installation.png
:align: center :align: center
:alt: VoIP module installation on an Odoo database :alt: VoIP module installation on an Odoo database
@ -29,21 +29,28 @@ Go to :menuselection:`Settings --> General Settings --> Integrations`, and fill
- **WebSocket**: type in ``wss://pabx.axivox.com:3443`` - **WebSocket**: type in ``wss://pabx.axivox.com:3443``
- **VoIP Environment**: set as *Production* - **VoIP Environment**: set as *Production*
.. image:: media/axivox-voip-configuration.png .. image:: axivox/voip-configuration.png
:align: center :align: center
:alt: Integration of Axivox as VoIP provider in an Odoo database :alt: Integration of Axivox as VoIP provider in an Odoo database
Configure the VOIP user in the Odoo's user
------------------------------------------
Go to :menuselection:`Settings --> Users & Companies --> Users`, then open the user's form you want Go to :menuselection:`Settings --> Users & Companies --> Users`, then open the user's form you want
to configure. Under the **Preferences** tab, fill out the section **PBX Configuration**: to configure. Under the **Preferences** tab, fill out the section **PBX Configuration**:
- **SIP Login / Browser's Extension**: the Axivox *username* - **SIP Login / Browser's Extension**: the Axivox *username*
- **SIP Password**: the Axivox *SIP Password* - **SIP Password**: the Axivox *SIP Password*
.. image:: axivox/odoo-user.png
:align: center
:alt: Integration of Axivox user in the Odoo user preference
.. note:: .. note::
You can find all this information by logging in at https://manage.axivox.com/, selecting the user You can find all this information by logging in at https://manage.axivox.com/, selecting the user
you want to configure, and referring to the fields as pictured below. you want to configure, and referring to the fields as pictured below.
.. image:: media/axivox-manager-sip.png .. image:: axivox/manager-sip.png
:align: center :align: center
:alt: SIP credentials in the Axivox manager :alt: SIP credentials in the Axivox manager
@ -57,7 +64,7 @@ You can also receive phone calls. Odoo rings and displays a notification.
.. note:: .. note::
Your number is the one provided by Axivox. Your number is the one provided by Axivox.
.. image:: media/axivox-incoming-call.png .. image:: axivox/incoming-call.png
:align: center :align: center
:alt: Incoming VoIP call in Odoo :alt: Incoming VoIP call in Odoo
@ -65,7 +72,7 @@ You can also receive phone calls. Odoo rings and displays a notification.
If you see a *Missing Parameter* message in the **Odoo softphone**, refresh your Odoo window and If you see a *Missing Parameter* message in the **Odoo softphone**, refresh your Odoo window and
try again. try again.
.. image:: media/axivox-missing-parameter.png .. image:: axivox/missing-parameter.png
:align: center :align: center
:alt: "Missing Parameter" error message in the Odoo softphone :alt: "Missing Parameter" error message in the Odoo softphone
@ -74,6 +81,6 @@ You can also receive phone calls. Odoo rings and displays a notification.
international format, leading with the plus (+) sign followed by the international country code. international format, leading with the plus (+) sign followed by the international country code.
E.g., +16506913277 (where +1 is the international prefix for the United States). E.g., +16506913277 (where +1 is the international prefix for the United States).
.. image:: media/axivox-incorrect-number.png .. image:: axivox/incorrect-number.png
:align: center :align: center
:alt: "Incorrect Number" error message in the Odoo softphone :alt: "Incorrect Number" error message in the Odoo softphone

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -60,7 +60,8 @@ Then set your email domain name in the General Settings.
Can I use an Office 365 server Can I use an Office 365 server
------------------------------ ------------------------------
You can use an Office 365 server if you run Odoo on-premise. You can use an Office 365 server if you run Odoo on-premise.
Office 365 SMTP relays are not compatible with Odoo Online. Office 365 SMTP relays are not compatible with Odoo Online unless you configure
Odoo to force the outgoing "From" address (see below).
Please refer to `Microsoft's documentation <https://support.office.com/en-us/article/How-to-set-up-a-multifunction-device-or-application-to-send-email-using-Office-365-69f58e99-c550-4274-ad18-c805d654b4c4>`__ Please refer to `Microsoft's documentation <https://support.office.com/en-us/article/How-to-set-up-a-multifunction-device-or-application-to-send-email-using-Office-365-69f58e99-c550-4274-ad18-c805d654b4c4>`__
to configure a SMTP relay for your Odoo's IP address. to configure a SMTP relay for your Odoo's IP address.
@ -108,6 +109,48 @@ Restriction
----------- -----------
Please note that the port 25 is blocked for security reasons. Try using 587, 465 or 2525. Please note that the port 25 is blocked for security reasons. Try using 587, 465 or 2525.
Choose allowed "From" email addresses
-------------------------------------
Sometimes, an email's "From" (outgoing) address can belong to a different
domain, and that can be a problem.
For example, if a customer with address *mary@customer.example.com* responds to
a message, Odoo will try to redistribute that same email to other subscribers
in the thread. But if the domain *customer.example.com* forbids that kind of
usage for security (kudos for that), the Odoo's redistributed email would get
rejected by some recipients' mail servers.
To avoid those kind of problems, you should make sure all emails use a "From"
address from your authorized domain.
If your MTA supports `SRS (Sender Rewriting Scheme)
<https://en.wikipedia.org/wiki/Sender_Rewriting_Scheme>`_, you can enable it
to handle these situations. However, that is more complex and requires more
technical knowledge that is not meant to be covered by this documentation.
Instead, you can also configure Odoo to do something similar by itself:
#. Set your domain name in the General Settings.
.. image:: media/alias_domain.png
:align: center
#. In developer mode, go to :menuselection:`Settings --> Technical -->
Parameters --> System Parameters`.
#. Add one system parameter from these:
* If you want *all* your outgoing messages to use the same "From" address,
use the key ``mail.force.smtp.from`` and set that address as value
(such as ``outgoing@mycompany.example.com``).
* If you want to keep the original "From" address for emails that use your
same domain, but change it for emails that use a different domain, use
the key ``mail.dynamic.smtp.from`` and set as value the email address
that should be used in those cases (such as
``outgoing@mycompany.example.com``).
.. _discuss/email_servers/inbound_messages: .. _discuss/email_servers/inbound_messages:
How to manage inbound messages How to manage inbound messages

View File

@ -59,16 +59,23 @@ def resolve(old_resolve, tree, docname, *args, **kwargs):
_update_toctree_nodes(_subnode) _update_toctree_nodes(_subnode)
def _get_docname(_node): def _get_docname(_node):
""" """ Return the docname of the targeted document.
docname = a/b/c/the_page_being_rendered
docname = some_common_root/foo/bar/the_page_being_rendered
_ref = ../../contributing/documentation _ref = ../../contributing/documentation
_path_parts = ['..', '..', 'contributing', 'documentation'] _path_parts = ['..', '..', 'contributing', 'documentation']
_res = ['a', 'contributing', 'documentation'] _res = ['some_common_root', 'contributing', 'documentation']
_docname = a/contributing/documentation _docname = some_common_root/contributing/documentation
:return: The docname of the document targeted by `_node`, i.e. the relative path from the
documentation source directory (the `content/` directory)
:rtype: str
""" """
_ref = _node['refuri'].replace('.html', '') _ref = _node['refuri'].replace('.html', '')
_parent_directory_occurrences = _ref.count('..') _parent_directory_occurrences = _ref.count('..')
if not _parent_directory_occurrences: # The ref is already the docname if not _parent_directory_occurrences and '/' not in docname:
# The current document is at the root of the documentation source directory
# (e.g. docname == 'index'|'applications'|...). i.e., the ref is already the docname.
_docname = _ref _docname = _ref
else: else:
_path_parts = _ref.split('/') _path_parts = _ref.split('/')

View File

@ -79,6 +79,10 @@
{%- set main_classes = main_classes + ['o_index'] %} {%- set main_classes = main_classes + ['o_index'] %}
{%- endif %} {%- endif %}
{%- if 'show-content' in meta %} {# The page is an accessible toctree #}
{%- set main_classes = main_classes + ['o_hide_toc'] %}
{%- endif %}
{%- if 'code-column' in meta %} {# The page contains a 'memento' (dynamic side block) #} {%- if 'code-column' in meta %} {# The page contains a 'memento' (dynamic side block) #}
{%- set main_classes = main_classes + ['o_has_code_column'] %} {%- set main_classes = main_classes + ['o_has_code_column'] %}
{%- endif %} {%- endif %}
@ -110,7 +114,8 @@
{%- endif %} {%- endif %}
</main> </main>
{%- if 'hide-page-toc' not in meta %} {%- if 'hide-page-toc' not in meta %}
<aside id="o_page_toc" class="o_page_toc"> {# Shown when the JS has properly set all the classes on the TOC elements #}
<aside id="o_page_toc" class="o_page_toc" hidden>
{%- include "layout_templates/page_toc.html" %} {%- include "layout_templates/page_toc.html" %}
</aside> </aside>
{%- endif %} {%- endif %}

View File

@ -1,7 +1,7 @@
<div id="o_content"> <div id="o_content">
<section class="o_content_fw_banner row"> <section class="o_content_fw_banner row">
<div class="col-lg-6"> <div class="col-lg-6">
<h2 class="text-white">Odoo Documentation</h2> <h1 class="text-white">Odoo Documentation</h1>
<p class="text-white">The comprehensive guide for Odoo users. Easily find the tutorial and helpful tips that suit your needs.</p> <p class="text-white">The comprehensive guide for Odoo users. Easily find the tutorial and helpful tips that suit your needs.</p>
<div class="mt-3"> <div class="mt-3">
<a href="https://odoo.com/trial" class="btn btn-primary mb-2 o-hidden-ios">Try Odoo for FREE</a> <a href="https://odoo.com/trial" class="btn btn-primary mb-2 o-hidden-ios">Try Odoo for FREE</a>
@ -9,16 +9,11 @@
</div> </div>
</section> </section>
<section> <section>
<div class="row gx-lg-5 border-bottom"> <div class="row gx-lg-5">
<div class="col-lg-6 order-lg-2"> <div class="col-lg-6">
<div class="o_cat_banner mb-5"> <h2><i class="i-doc-apps d-lg-none me-2"></i>Applications</h2>
<img src="{{ pathto('_static/img/banner-applications.png', 1) }}" alt=""> <p class="text-muted">Master any app thanks to their end-user guides. Our wide array of functional workflows and processes are designed to help you unleash Odoo's potential.</p>
</div> <h5 class="text-muted pt-3 text-uppercase fw_semibold">Top Links</h5>
</div>
<div class="col-lg-6 order-lg-1">
<h3>Applications</h3>
<p>Master any app thanks to their end-user guides. Our wide array of functional workflows and processes are designed to help you unleash Odoo's potential.</p>
<h5 class="pt-3 text-uppercase fw_semibold">Top Links</h5>
<ul class="list-unstyled"> <ul class="list-unstyled">
<li> <li>
<a href="{{ pathto('applications/finance/accounting/overview/main_concepts/in_odoo') }}" class="stretched-link"> <a href="{{ pathto('applications/finance/accounting/overview/main_concepts/in_odoo') }}" class="stretched-link">
@ -42,15 +37,10 @@
</li> </li>
</ul> </ul>
</div> </div>
</div> <div class="col-lg-6">
<div class="row gx-lg-5"> <h2 class="border-top pt-4 pt-lg-0"><i class="i-doc-admin d-lg-none me-2"></i>Administration</h2>
<div class="col-lg-6 py-5 border-bottom"> <p class="text-muted">Easily setup your first Odoo installation. From downloads to day-to-day database administration, the dedicated tutorials have got you covered.</p>
<div class="o_cat_banner mb-4 p-lg-4"> <h5 class="text-muted pt-3 text-uppercase fw_semibold">Top Links</h5>
<i class="i-doc-admin"></i>
</div>
<h3>Administration</h3>
<p>Easily setup your first Odoo installation. From downloads to day-to-day database administration, the dedicated tutorials have got you covered.</p>
<h5 class="pt-3 text-uppercase fw_semibold">Top Links</h5>
<ul class="list-unstyled"> <ul class="list-unstyled">
<li> <li>
<a href=" {{ pathto('administration/install') }} " class="stretched-link"> <a href=" {{ pathto('administration/install') }} " class="stretched-link">
@ -74,13 +64,12 @@
</li> </li>
</ul> </ul>
</div> </div>
<div class="col-lg-6 py-5 border-bottom"> </div>
<div class="o_cat_banner mb-4 p-lg-4 o-bg-violet-light"> <div class="row gx-lg-5">
<i class="i-doc-dev"></i> <div class="col-lg-6">
</div> <h2 class="border-top pt-4"><i class="i-doc-dev d-lg-none me-2"></i>Developer</h2>
<h3>Developer</h3> <p class="text-muted">Learn to develop in Odoo by reading the framework references and programmer tutorials.</p>
<p>Learn to develop in Odoo by reading the framework references and programmer tutorials.</p> <h5 class="text-muted pt-3 text-uppercase fw_semibold">Top Links</h5>
<h5 class="pt-3 text-uppercase fw_semibold">Top Links</h5>
<ul class="list-unstyled"> <ul class="list-unstyled">
<li> <li>
<a href="{{ pathto('developer/reference/orm') }}" class="stretched-link"> <a href="{{ pathto('developer/reference/orm') }}" class="stretched-link">
@ -104,16 +93,10 @@
</li> </li>
</ul> </ul>
</div> </div>
</div> <div class="col-lg-6">
<div class="row gx-lg-5"> <h2 class="border-top pt-4"><i class="i-doc-services d-lg-none me-2"></i>Services</h2>
{# If changelog exists add class border-bottom #} <p class="text-muted">Find out how to open a support ticket should you need to contact a Customer Service Representative.</p>
<div class="col-lg-6 pt-5"> <h5 class="text-muted pt-3 text-uppercase fw_semibold">Top Links</h5>
<div class="o_cat_banner mb-4 p-lg-4 o-bg-violet-light">
<i class="i-doc-services"></i>
</div>
<h3>Services</h3>
<p>Find out how to open a support ticket should you need to contact a Customer Service Representative.</p>
<h5 class="pt-3 text-uppercase fw_semibold">Top Links</h5>
<ul class="list-unstyled"> <ul class="list-unstyled">
<li> <li>
<a href="{{ pathto('services/support/where_can_i_get_support') }}" class="stretched-link"> <a href="{{ pathto('services/support/where_can_i_get_support') }}" class="stretched-link">
@ -132,14 +115,12 @@
</li> </li>
</ul> </ul>
</div> </div>
{# If changelog exists add class border-bottom #} </div>
<div class="col-lg-6 pt-5"> <div class="row gx-lg-5">
<div class="o_cat_banner mb-4 p-lg-4"> <div class="col-lg-6">
<i class="i-doc-contribute"></i> <h2 class="border-top pt-4"><i class="i-doc-contribute d-lg-none me-2"></i>Contributing</h2>
</div> <p class="text-muted">You want to contribute to Odoo but don't know where to start? The tutorials and guidelines are there to help you make Odoo even better.</p>
<h3>Contributing</h3> <h5 class="text-muted pt-3 text-uppercase fw_semibold">Top Links</h5>
<p>You want to contribute to Odoo but don't know where to start? The tutorials and guidelines are there to help you make Odoo even better.</p>
<h5 class="pt-3 text-uppercase fw_semibold">Top Links</h5>
<ul class="list-unstyled"> <ul class="list-unstyled">
<li> <li>
<a href="{{ pathto('contributing/documentation/introduction_guide') }}" class="stretched-link"> <a href="{{ pathto('contributing/documentation/introduction_guide') }}" class="stretched-link">

View File

@ -1,6 +1,6 @@
<div class="o_versions row gx-2 me-3"> <div class="o_versions row gx-2 me-3">
<div class="col col-form-label"> <div class="col col-form-label">
<label class="fw_bold small me-2">Version</label> <label class="fw_bold small ms-2">Version</label>
</div> </div>
<div class="col"> <div class="col">
<div class="dropdown"> <div class="dropdown">

View File

@ -47,14 +47,21 @@
} }
}; };
document.addEventListener('scroll', () => {
// Allow to hide the searchbar when the page is scrolled in mobile.
_flagHeaderWithScrollPosition();
});
/** /**
* Mobile: Toggle open/close sidebar on click of nav button (&& on swipe left to right?). * Add/Remove the class `o_header_scrolled` on the header according to the scroll position.
*
*
* `o_active_toc_entry` class, and their related (parent) TOC entry list (<ul> elements) receive
* the `show` (Bootstrap) class.
* Also, the deepest TOC entry receives the `o_deepest_active_toc_entry` class, and its child
* Sidebar receives the `o-mobile-show` class.
*/ */
const _flagHeaderWithScrollPosition = () => {
const header = document.querySelector('.o_main_header');
if (this.scrollY > 0) {
header.classList.add('o_header_scrolled');
} else {
header.classList.remove('o_header_scrolled');
}
};
})(); })();

View File

@ -22,6 +22,9 @@
// Allow to hide the TOC entry referring the title (<h1> heading) // Allow to hide the TOC entry referring the title (<h1> heading)
_flagFirstHeadingRef(); _flagFirstHeadingRef();
// Show hidden menu when the css classes have been properly specified
this.pageToc.removeAttribute('hidden');
} }
}); });

View File

@ -173,7 +173,7 @@ $o-inverse-dark: #5b7687;
$o-inverse-darker: #485761; $o-inverse-darker: #485761;
$color-alpha: #00A19B; $color-alpha: #00A19B;
$color-alpha-dark: #00807D; $color-alpha-dark: #017e84;
$color-alpha-light: #26d1af; $color-alpha-light: #26d1af;
$color-alpha-lightest: #2aebc4; $color-alpha-lightest: #2aebc4;
@ -205,8 +205,6 @@ $gray-light: #d5d5d5;
$gray: #888888; $gray: #888888;
$gray-dark: #707070; $gray-dark: #707070;
$gray-darker: #282F33; $gray-darker: #282F33;
$gray-darkest: shade-color($gray-darker, 30%);
$primary: $color-alpha-dark; $primary: $color-alpha-dark;
$secondary: $o-violet-dark; $secondary: $o-violet-dark;

View File

@ -14,15 +14,18 @@ body {
a:not(:hover), a.o_logo { a:not(:hover), a.o_logo {
text-decoration: none !important; text-decoration: none !important;
} }
dd { dd {
margin-left: 1rem; margin-left: 1rem;
} }
// This fixes the scroll position on all elements, including refs // This fixes the scroll position on all elements, including refs
:target { :target {
&:before { &:before {
@include o-scroll-padding() @include o-scroll-padding()
} }
} }
abbr[title="Pull Request"] { abbr[title="Pull Request"] {
@include o-easter-egg(); @include o-easter-egg();
} }
@ -37,7 +40,7 @@ body {
// Header with logo, searchbar and switchers // Header with logo, searchbar and switchers
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
header.o_main_header{ header.o_main_header {
width: 100%; width: 100%;
height: $o-header-mobile-height; height: $o-header-mobile-height;
position: fixed; position: fixed;
@ -50,13 +53,16 @@ header.o_main_header{
height: $o-header-height; height: $o-header-height;
padding-right: 3rem; padding-right: 3rem;
} }
.o_logo_wrapper { .o_logo_wrapper {
padding: 0 1rem; padding: 0 1rem;
> .o_logo { > .o_logo {
img { img {
margin-bottom: -2px; margin-bottom: -2px;
vertical-align: baseline; vertical-align: baseline;
} }
span { span {
@include font-size($font-size-base); @include font-size($font-size-base);
color: $o-violet; color: $o-violet;
@ -73,36 +79,56 @@ header.o_main_header{
} }
.o_search_wrapper { .o_search_wrapper {
display: flex; display: flex;
opacity: 1;
@include transition(opacity .3s);
@include media-breakpoint-down(lg) { @include media-breakpoint-down(lg) {
display: block; display: block;
position: absolute; position: absolute;
width: 100%; width: 100%;
padding: 0 10px; padding: 0 10px;
top: calc(100% + 30px); top: calc(100% + 15px);
} }
} }
&.o_header_scrolled {
.o_search_wrapper {
@include media-breakpoint-down(lg) {
opacity: 0;
}
}
}
.highlight-link { .highlight-link {
@media only screen and (max-width: 1242px) and (min-width: 992px){
position: absolute;
bottom: 0;
}
margin-bottom: 0; margin-bottom: 0;
padding: 0 1rem; padding: 0 1rem;
text-align: center; text-align: center;
align-self: center; align-self: center;
a { a {
@include font-size($font-size-secondary); @include font-size($font-size-secondary);
} }
} }
.navbar-toggler { .navbar-toggler {
border: none; border: none;
&[aria-expanded="true"] { &[aria-expanded="true"] {
.icon-bar { .icon-bar {
&:nth-of-type(1) { &:nth-of-type(1) {
@include o-transform(rotate(45deg));; @include o-transform(rotate(45deg));;
@include o-transform-origin(10%, 10%) @include o-transform-origin(10%, 10%)
} }
&:nth-of-type(2) { &:nth-of-type(2) {
opacity: 0; opacity: 0;
filter: alpha(opacity=0); filter: alpha(opacity=0);
} }
&:nth-of-type(3) { &:nth-of-type(3) {
@include o-transform(rotate(-45deg)); @include o-transform(rotate(-45deg));
@include o-transform-origin(10%, 90%) @include o-transform-origin(10%, 90%)
@ -115,20 +141,25 @@ header.o_main_header{
height: 2px; height: 2px;
background-color: $gray-dark; background-color: $gray-dark;
@include o-transition(all, .2s); @include o-transition(all, .2s);
&+ .icon-bar { &+ .icon-bar {
margin-top: 4px; margin-top: 4px;
} }
&:nth-of-type(1) { &:nth-of-type(1) {
@include o-transform(rotate(0)); @include o-transform(rotate(0));
} }
&:nth-of-type(2) { &:nth-of-type(2) {
opacity: 1; opacity: 1;
filter: alpha(opacity=100); filter: alpha(opacity=100);
} }
&:nth-of-type(3) { &:nth-of-type(3) {
@include o-transform(rotate(0)); @include o-transform(rotate(0));
} }
} }
&:focus { &:focus {
box-shadow: none; box-shadow: none;
outline:none; outline:none;
@ -149,7 +180,8 @@ header.o_main_header{
@include media-breakpoint-up(lg) { @include media-breakpoint-up(lg) {
max-width: 500px; max-width: 500px;
} }
.btn{
.btn {
@include o-position-absolute($top: 50%, $right: 1rem); @include o-position-absolute($top: 50%, $right: 1rem);
@include o-transform (translateY(-50%)) ; @include o-transform (translateY(-50%)) ;
padding: 0; padding: 0;
@ -170,6 +202,7 @@ header.o_main_header{
position: fixed; position: fixed;
top: -100%; top: -100%;
left:0; left:0;
&.show { &.show {
top: $o-header-mobile-height; top: $o-header-mobile-height;
} }
@ -181,7 +214,7 @@ header.o_main_header{
padding-left: 3rem; padding-left: 3rem;
} }
@include o-transition(all, .3s); @include o-transition(all, .3s);
padding-top: 1rem; padding-top: 4rem;
padding-left: 1rem; padding-left: 1rem;
background-color: lighten($o-violet-dark, 70%) ; background-color: lighten($o-violet-dark, 70%) ;
z-index: 10; z-index: 10;
@ -193,37 +226,35 @@ header.o_main_header{
padding-bottom: .5rem; padding-bottom: .5rem;
} }
.toctree-l1 > ul {
padding-left: 1.5rem;
}
ul { ul {
.o_deepest_active_toc_entry { .o_deepest_active_toc_entry {
background-color: $gray-lightest; background-color: $gray-lighter;
border-left: 3px solid $gray-lighter;
margin-left: -3px;
} }
> .toctree-l1 { > .toctree-l1 {
&[class*="o_menu_"] > .o_toc_entry_wrapper > i:before {
&[class*="o_menu_"] > .o_toc_entry_wrapper > i { @include o-inline-icon($i-doc-apps, 0 5px 0 0);
opacity: .75; color: $o-violet-dark;
&:before {
@include o-inline-icon($i-doc-apps, 0 1rem 0 0);
color: $o-violet-dark;
margin-right: 0.5rem;
}
} }
&.o_menu_applications > .o_toc_entry_wrapper > i:before{ &.o_menu_applications > .o_toc_entry_wrapper > i:before{
content:'#{$i-doc-apps}'; content:'#{$i-doc-apps}';
} }
&.o_menu_administration > .o_toc_entry_wrapper > i:before{ &.o_menu_administration > .o_toc_entry_wrapper > i:before{
content:'#{$i-doc-admin}'; content:'#{$i-doc-admin}';
} }
&.o_menu_developer > .o_toc_entry_wrapper > i:before{ &.o_menu_developer > .o_toc_entry_wrapper > i:before{
content:'#{$i-doc-dev}'; content:'#{$i-doc-dev}';
} }
&.o_menu_services > .o_toc_entry_wrapper > i:before{ &.o_menu_services > .o_toc_entry_wrapper > i:before{
content:'#{$i-doc-services}'; content:'#{$i-doc-services}';
} }
&.o_menu_contributing > .o_toc_entry_wrapper > i:before{ &.o_menu_contributing > .o_toc_entry_wrapper > i:before{
content:'#{$i-doc-contribute}'; content:'#{$i-doc-contribute}';
} }
@ -232,12 +263,15 @@ header.o_main_header{
} }
scrollbar-width: thin; scrollbar-width: thin;
scrollbar-color: $o-violet-darker transparent; scrollbar-color: $o-violet-darker transparent;
&::-webkit-scrollbar { &::-webkit-scrollbar {
width: 5px; width: 5px;
} }
&::-webkit-scrollbar-track { &::-webkit-scrollbar-track {
background: $white; background: $white;
} }
&::-webkit-scrollbar-thumb { &::-webkit-scrollbar-thumb {
background-color: $o-violet-darker ; background-color: $o-violet-darker ;
border-radius: 0; border-radius: 0;
@ -250,21 +284,28 @@ header.o_main_header{
padding-left: 1rem; padding-left: 1rem;
li { li {
padding-left: .2rem; &.toctree_l2 {
padding-left: .2rem;
}
> a.reference { > a.reference {
padding-left: 1.2rem; padding-left: .8rem;
} }
a { a {
display: inline-block; display: inline-block;
padding: .5rem 0; padding: .4rem 0;
color: inherit; color: inherit;
opacity: .75; opacity: .75;
&.current, &:hover { &.current, &:hover {
opacity: 1; opacity: 1;
} }
} }
> .o_toc_entry_wrapper i {
opacity: .75;
}
&:not(.toctree-l1) { &:not(.toctree-l1) {
.o_toc_entry_wrapper { .o_toc_entry_wrapper {
&:not(.o_page_toc_title) { &:not(.o_page_toc_title) {
@ -276,6 +317,7 @@ header.o_main_header{
display: inline-block; display: inline-block;
margin-right: .2rem; margin-right: .2rem;
@include o-transition(rotate, .3s); @include o-transition(rotate, .3s);
font-size: .75rem;
font-weight: $fw_bold; font-weight: $fw_bold;
color: inherit; color: inherit;
@ -285,19 +327,21 @@ header.o_main_header{
} }
} }
} }
&.o_active_toc_entry { &.o_active_toc_entry {
&:not(.toctree-l1) > .o_toc_entry_wrapper { &:not(.toctree-l1) > .o_toc_entry_wrapper {
i[class^="i-"]:not(.collapsed) { i[class^="i-"]:not(.collapsed) {
@include o-transform(rotate(90deg)); @include o-transform(rotate(90deg));
} }
} }
> a , > .o_toc_entry_wrapper a { > a , > .o_toc_entry_wrapper a, > .o_toc_entry_wrapper i {
font-weight: $fw_bold; font-weight: $fw_bold;
opacity: 1; opacity: 1;
} }
} }
} }
} }
> ul { //is first ul in toc > ul { //is first ul in toc
padding-left: 0; padding-left: 0;
} }
@ -332,11 +376,12 @@ header.o_main_header{
a { a {
font-weight: $fw_regular; font-weight: $fw_regular;
color: $gray-darkest; color: $gray-darker;
} }
.o_page_toc_title { .o_page_toc_title {
display:none; display:none;
+ ul { + ul {
padding-left: 0; padding-left: 0;
} }
@ -349,7 +394,6 @@ header.o_main_header{
#wrap { #wrap {
margin-top: $o-header-mobile-height; margin-top: $o-header-mobile-height;
@include media-breakpoint-up(lg) { @include media-breakpoint-up(lg) {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@ -378,7 +422,6 @@ header.o_main_header{
padding-top: 7rem; padding-top: 7rem;
} }
padding-bottom: 3rem; padding-bottom: 3rem;
@include media-breakpoint-up(lg) { @include media-breakpoint-up(lg) {
left: $o-side-nav-width; left: $o-side-nav-width;
max-width: calc(100vw - (#{$o-side-nav-width} + var(--bs-gutter-x, 1.5rem)) - #{$o-on-page-width}); max-width: calc(100vw - (#{$o-side-nav-width} + var(--bs-gutter-x, 1.5rem)) - #{$o-on-page-width});
@ -404,14 +447,16 @@ header.o_main_header{
margin: -3rem -3rem 3rem; margin: -3rem -3rem 3rem;
padding: 2rem 3rem; padding: 2rem 3rem;
} }
.btn-primary { .btn-primary {
background-color: #00A09D; background-color: #00A09D;
border-color: #00A09D; border-color: #00A09D;
} }
} }
.row:first-of-type h2.border-top {
p, h5 { @include media-breakpoint-up(lg) {
color: $gray; border-top: 0 solid transparent !important;
}
} }
h5 { h5 {
@ -424,33 +469,14 @@ header.o_main_header{
padding-bottom: .5rem; padding-bottom: .5rem;
display: flex; display: flex;
align-items: center; align-items: center;
&:before { &:before {
@include o-inline-icon($i-article, 0 .2rem 0 0); @include o-inline-icon($i-article, 0 .2rem 0 0);
color: $gray-light; color: $gray-light;
} }
} }
} }
.o_cat_banner {
background-color: $o-violet;
border-radius: 5px;
text-align: center;
background-repeat: no-repeat;
background-size: 90%;
background-position: center;
i {
font-size: 100px;
color: $white;
}
&.o-bg-violet-light {
background-color: lighten($o-violet, 20%);
}
&:not(.shadow){
background-image: url('img/bg-cat.svg');
}
&.shadow {
box-shadow: 0px 2px 25px rgba(19, 28, 40, .08) !important;
}
}
.o_changelog { .o_changelog {
.row:last-of-type > .border-bottom { .row:last-of-type > .border-bottom {
border: none !important; border: none !important;
@ -459,7 +485,6 @@ header.o_main_header{
} }
// pages with full width: Legal // pages with full width: Legal
&.o_fullwidth_page { &.o_fullwidth_page {
.toctree-l1 > a { .toctree-l1 > a {
display: block; display: block;
@ -472,11 +497,9 @@ header.o_main_header{
} }
// pages with column for code on the right // pages with column for code on the right
&.o_has_code_column { &.o_has_code_column {
article.doc-body { article.doc-body {
> *{ > * {
max-width: 100%; max-width: 100%;
} }
@ -507,13 +530,11 @@ header.o_main_header{
@include o-code-col(); @include o-code-col();
} }
.o_git_link { .o_git_link {
right: calc(#{$o-codecol-width} + 2rem); right: calc(#{$o-codecol-width} + 2rem);
} }
section {
section {
> * { > * {
width: $o-halfpage-width; width: $o-halfpage-width;
float: left; float: left;
@ -554,13 +575,34 @@ header.o_main_header{
} }
} }
article.doc-body { &.o_hide_toc {
position: relative;
// hide ugly toctree on "in between" pages (e.g.: /applications.html, /administration.html, ...)
.toctree-wrapper { .toctree-wrapper {
display: none; display: none;
} }
}
.toctree-wrapper {
> ul {
padding-left: 0;
list-style: none;
}
.toctree-l1 > a[href="#"] {
font-size: 1.2rem;
font-weight: 600;
border-bottom: 2px solid $gray-darker;
}
a[href="#"] {
pointer-events: none;
cursor: default;
color: $gray-darker;
font-weight: $fw_regular;
}
}
article.doc-body {
position: relative;
.o_git_link { .o_git_link {
@include font-size($font-size-secondary); @include font-size($font-size-secondary);
@ -572,6 +614,7 @@ header.o_main_header{
margin-right: .2rem; margin-right: .2rem;
} }
} }
.command { .command {
font-family: var(--bs-font-monospace); font-family: var(--bs-font-monospace);
} }
@ -611,7 +654,7 @@ header.o_main_header{
> h2 { > h2 {
font-family: $font-family-serif; font-family: $font-family-serif;
color: $gray-darker; color: $gray-darker;
margin-top: 3rem; margin-top: 2rem;
margin-bottom: 1rem; margin-bottom: 1rem;
padding-bottom: .3rem; padding-bottom: .3rem;
border-bottom: 1px solid $gray-light; border-bottom: 1px solid $gray-light;
@ -647,14 +690,17 @@ header.o_main_header{
} }
.figure { .figure {
.caption, .caption-text { .caption, .caption-text {
font-weight: $fw_semibold; font-weight: $fw_semibold;
color: $gray; color: $gray;
} }
.caption, .caption-text, .legend, .legend p{
.caption, .caption-text, .legend, .legend p {
font-style: italic; font-style: italic;
margin: 0 auto; margin: 0 auto;
} }
@include media-breakpoint-up(md) { @include media-breakpoint-up(md) {
&:not([class^="col"]) .legend { &:not([class^="col"]) .legend {
max-width: 60%; max-width: 60%;
@ -666,9 +712,11 @@ header.o_main_header{
text-decoration: none; text-decoration: none;
font-size: 0; font-size: 0;
visibility: hidden !important; visibility: hidden !important;
&:before { &:before {
content: "\a0"; content: "\a0";
} }
&:after { &:after {
content: '#{$i-link}'; content: '#{$i-link}';
font-family: icomoon !important; font-family: icomoon !important;
@ -680,11 +728,13 @@ header.o_main_header{
@include o-transition(all, .1s) @include o-transition(all, .1s)
} }
} }
*:hover > a.headerlink:after{
*:hover > a.headerlink:after {
// This makes permalinks only visible on hover. // This makes permalinks only visible on hover.
visibility: visible; visibility: visible;
opacity: 1; opacity: 1;
} }
table.table { table.table {
@include media-breakpoint-down(lg){ @include media-breakpoint-down(lg){
display: block; display: block;
@ -693,10 +743,8 @@ header.o_main_header{
overflow-wrap: break-word; overflow-wrap: break-word;
} }
} }
} }
} }
} }
div[class^="highlight"] { div[class^="highlight"] {
@ -704,7 +752,6 @@ header.o_main_header{
overflow-x: auto; overflow-x: auto;
border: 1px solid $gray-light; border: 1px solid $gray-light;
margin: 1px 0 24px 0; margin: 1px 0 24px 0;
/* max-width: 90vw; */
div[class^="highlight"] { div[class^="highlight"] {
padding: 0px; padding: 0px;
@ -719,7 +766,7 @@ header.o_main_header{
overflow: auto; overflow: auto;
} }
} }
// fixes on pages
.guilabel, .menuselection { .guilabel, .menuselection {
font-weight: $fw_semibold; font-weight: $fw_semibold;
} }
@ -763,19 +810,7 @@ header.o_main_header{
text-align: left; text-align: left;
} }
// restyle numbers on lists
ol { ol {
/* list-style: none;
counter-reset: a;
> li {
position: relative;
counter-increment: a;
&:before {
content: counter(a) '.';
font-weight: $fw_semibold;
@include o-position-absolute(auto, auto, auto, -1.8rem);
}
} */
ol { ol {
list-style: lower-alpha; list-style: lower-alpha;
> li:before { > li:before {
@ -804,7 +839,7 @@ header.o_main_header{
background-color: $white !important; background-color: $white !important;
} }
> p , > ul{ > p , > ul {
margin-bottom: .5rem; margin-bottom: .5rem;
} }
> *:last-child { > *:last-child {
@ -849,8 +884,6 @@ header.o_main_header{
content: '#{$i-note}'; content: '#{$i-note}';
} }
} }
} }
&.alert-tip, &.tip { &.alert-tip, &.tip {
@ -909,7 +942,8 @@ header.o_main_header{
@include media-breakpoint-up(lg){ @include media-breakpoint-up(lg){
display: inline-block; display: inline-block;
width: calc(50% - 1rem); width: calc(50% - 1rem);
}s }
a { a {
color: $o-violet-dark; color: $o-violet-dark;
} }
@ -932,7 +966,7 @@ footer {
.o_get_help { .o_get_help {
padding-top: 3rem; padding-top: 3rem;
padding-bottom: 3rem; padding-bottom: 3rem;
background: $gray-100; background: $gray-lighter;
@include media-breakpoint-up(lg) { @include media-breakpoint-up(lg) {
padding-left: calc(#{$o-side-nav-width} + 3rem) padding-left: calc(#{$o-side-nav-width} + 3rem)
} }
@ -945,4 +979,4 @@ footer {
} }
} }
} }