summaryrefslogtreecommitdiff
path: root/addons/website/static/src/xml
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website/static/src/xml')
-rw-r--r--addons/website/static/src/xml/theme_preview.xml38
-rw-r--r--addons/website/static/src/xml/track_page.xml15
-rw-r--r--addons/website/static/src/xml/translator.xml15
-rw-r--r--addons/website/static/src/xml/website.backend.xml100
-rw-r--r--addons/website/static/src/xml/website.background.video.xml16
-rw-r--r--addons/website/static/src/xml/website.contentMenu.xml59
-rw-r--r--addons/website/static/src/xml/website.cookies_bar.xml67
-rw-r--r--addons/website/static/src/xml/website.editor.xml156
-rw-r--r--addons/website/static/src/xml/website.pageProperties.xml177
-rw-r--r--addons/website/static/src/xml/website.res_config_settings.xml22
-rw-r--r--addons/website/static/src/xml/website.seo.xml168
-rw-r--r--addons/website/static/src/xml/website.share.xml13
-rw-r--r--addons/website/static/src/xml/website.xml101
-rw-r--r--addons/website/static/src/xml/website_widget.xml17
14 files changed, 964 insertions, 0 deletions
diff --git a/addons/website/static/src/xml/theme_preview.xml b/addons/website/static/src/xml/theme_preview.xml
new file mode 100644
index 00000000..67ce152e
--- /dev/null
+++ b/addons/website/static/src/xml/theme_preview.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<templates id="template" xml:space="preserve">
+ <t t-name="website.ThemePreview.Buttons">
+ <div>
+ <div class="o_form_buttons_view" role="toolbar" aria-label="Main actions">
+ <button type="object" name="button_choose_theme" class="btn btn-primary o_use_theme">
+ Start Now
+ </button>
+ <button class="btn btn-link o_switch_theme">
+ Choose another theme
+ </button>
+ </div>
+ </div>
+ </t>
+
+ <t t-name="website.ThemePreview.SwitchModeButton">
+ <div class="btn-group btn-group-toggle ml-1" data-toggle="buttons">
+ <label class="btn btn-secondary active">
+ <input type="radio" name="viewer" data-mode='desktop' autocomplete="off" checked='checked'/> Desktop
+ </label>
+ <label class="btn btn-secondary">
+ <input type="radio" name="viewer" data-mode='mobile' autocomplete="off"/> Mobile
+ </label>
+ </div>
+ </t>
+ <t t-name="website.ThemePreview.Loader">
+ <div class="o_theme_install_loader_container position-fixed fixed-top fixed-left
+ h-100 w-100 d-flex flex-column align-items-center text-white font-weight-bold">
+ <t t-if="showTips">Building your website...</t>
+ <div class="o_theme_install_loader"></div>
+ <p t-if="showTips" class="o_theme_install_loader_tip text-center w-25">
+ TIP: Follow the
+ <span class="o_tooltip o_tooltip_visible top o_animated position-relative"></span>
+ to build the perfect page in 5 steps.
+ </p>
+ </div>
+ </t>
+</templates>
diff --git a/addons/website/static/src/xml/track_page.xml b/addons/website/static/src/xml/track_page.xml
new file mode 100644
index 00000000..2d4093dc
--- /dev/null
+++ b/addons/website/static/src/xml/track_page.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<templates id="template" xml:space="preserve">
+
+ <t t-name="website.track_page">
+ <div role="separator" class="dropdown-divider"/>
+ <a href="#" name="switch-track-page" class="dropdown-item" role="menuitem">
+ <label class="o_switch" for="switch-track-page">
+ <input id="switch-track-page" type="checkbox"/>
+ <span/>
+ Track Visitor
+ </label>
+ </a>
+ </t>
+
+</templates>
diff --git a/addons/website/static/src/xml/translator.xml b/addons/website/static/src/xml/translator.xml
new file mode 100644
index 00000000..d3067f5e
--- /dev/null
+++ b/addons/website/static/src/xml/translator.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<templates id="template" xml:space="preserve">
+<div t-name="website.TranslatorInfoDialog">
+ <p>You are about to enter the translation mode.</p>
+ <p>Here are the visuals used to help you translate efficiently:</p>
+ <ul class="oe_translate_examples">
+ <li data-oe-translation-state="to_translate">Content to translate</li>
+ <li data-oe-translation-state="translated">Translated content</li>
+ </ul>
+ <p>
+ In this mode, you can only translate texts. To change the structure of the page, you must edit the master page.
+ Each modification on the master page is automatically applied to all translated versions.
+ </p>
+</div>
+</templates>
diff --git a/addons/website/static/src/xml/website.backend.xml b/addons/website/static/src/xml/website.backend.xml
new file mode 100644
index 00000000..943a948e
--- /dev/null
+++ b/addons/website/static/src/xml/website.backend.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates id="template" xml:space="preserve">
+ <div t-name="WidgetWebsiteButton" class="o_stat_info published">
+ <span class="o_stat_text o_value"/>
+ <span class="o_stat_text">On Website</span>
+ </div>
+
+ <t t-name="WidgetWebsiteButtonIcon">
+ <button type="button" class="btn oe_stat_button">
+ <i class="fa fa-fw o_button_icon fa-globe"/>
+ <div class="o_stat_info">
+ <span class="o_stat_text">Go to<br/>Website</span>
+ </div>
+ </button>
+ </t>
+
+ <t t-name="website.WebsiteDashboardMain">
+ <div class="o_dashboards">
+ <div class="container-fluid o_website_dashboard">
+ <t t-call="website.dashboard_header"/>
+ <t t-call="website.dashboard_content"/>
+ </div>
+ </div>
+ </t>
+
+ <t t-name="website.dashboard_header">
+ <div class="row o_dashboard_common"/>
+ </t>
+
+ <t t-name="website.dashboard_content">
+ <div class="o_website_dashboard_content">
+ <t t-call="website.google_analytics_content"/>
+ </div>
+ </t>
+ <t t-name="website.google_analytics_content">
+ <div class="row o_dashboard_visits" t-if="widget.groups.website_designer">
+ <div class="col-12 o_box">
+ <h2>Visits</h2>
+ <div t-if="widget.dashboards_data.visits &amp;&amp; widget.dashboards_data.visits.ga_client_id">
+ <div class="row js_analytics_components"/>
+ <a href="#" class="js_link_analytics_settings">Edit my Analytics Client ID</a>
+ </div>
+ <div t-if="!(widget.dashboards_data.visits &amp;&amp; widget.dashboards_data.visits.ga_client_id)" class="col-lg-12">
+ <div class="o_demo_background">
+ <div class="o_layer">
+ </div>
+ <div class="o_buttons text-center">
+ <h3>There is no data currently available.</h3>
+ <button class="btn btn-primary js_link_analytics_settings d-block mx-auto mb8">Connect Google Analytics</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </t>
+
+ <div t-name="website.unauthorized_analytics" class="col-12 js_unauthorized_message mb16">
+ <span t-if="reason === 'not_connected'">You need to log in to your Google Account before: </span>
+ <span t-if="reason === 'no_right'">You do not seem to have access to this Analytics Account.</span>
+ <span t-if="reason === 'not_initialized'">Google Analytics initialization failed. Maybe this domain is not whitelisted in your Google Analytics project for this client ID.</span>
+ </div>
+
+ <div t-name="website.ga_dialog_content">
+ Your Tracking ID: <input type="text" name="ga_analytics_key" placeholder="UA-XXXXXXXX-Y" t-att-value="ga_analytics_key" style="width: 100%"></input>
+ <a href="https://www.odoo.com/documentation/14.0/applications/websites/website/optimize/google_analytics.html" target="_blank">
+ <i class="fa fa-arrow-right"/>
+ How to get my Tracking ID
+ </a>
+ <br/><br/>
+ Your Client ID: <input type="text" name="ga_client_id" t-att-value="ga_key" style="width: 100%"></input>
+ <a href="https://www.odoo.com/documentation/14.0/applications/websites/website/optimize/google_analytics_dashboard.html" target="_blank">
+ <i class="fa fa-arrow-right"/>
+ How to get my Client ID
+ </a>
+ </div>
+
+ <t t-name="website.DateRangeButtons">
+ <!-- TODO: Hide in mobile as it is going to push in control panel and it breaks UI, maybe we will improve it in future -->
+ <div class="btn-group o_date_range_buttons d-none d-md-inline-flex float-right">
+ <button class="btn btn-secondary js_date_range active" data-date="week">Last Week</button>
+ <button class="btn btn-secondary js_date_range" data-date="month">Last Month</button>
+ <button class="btn btn-secondary js_date_range" data-date="year">Last Year</button>
+ </div>
+ <div class="btn-group d-none d-md-inline-block float-right" style="margin-right: 20px;">
+ <t t-foreach="widget.websites" t-as="website">
+ <button t-attf-class="btn btn-secondary js_website #{website.selected ? 'active' : ''}"
+ t-att-data-website-id="website.id">
+ <t t-esc="website.name"/>
+ </button>
+ </t>
+ </div>
+ </t>
+
+ <t t-name="website.GoToButtons">
+ <a role="button" href="/" class="btn btn-primary" title="Go to Website">
+ Go to Website
+ </a>
+ </t>
+
+</templates>
diff --git a/addons/website/static/src/xml/website.background.video.xml b/addons/website/static/src/xml/website.background.video.xml
new file mode 100644
index 00000000..18c1f4bd
--- /dev/null
+++ b/addons/website/static/src/xml/website.background.video.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates xml:space="preserve">
+ <t t-name="website.background.video">
+ <div class="o_bg_video_container">
+ <div class="o_bg_video_loading d-flex justify-content-center align-items-center text-primary">
+ <div class="spinner-border" style="width: 4em; height: 4em;" role="status">
+ <span class="sr-only">Loading...</span>
+ </div>
+ </div>
+ <iframe t-att-id="iframeID"
+ class="o_bg_video_iframe fade"
+ frameBorder="0"
+ t-att-src="videoSrc"/>
+ </div>
+ </t>
+</templates>
diff --git a/addons/website/static/src/xml/website.contentMenu.xml b/addons/website/static/src/xml/website.contentMenu.xml
new file mode 100644
index 00000000..af318703
--- /dev/null
+++ b/addons/website/static/src/xml/website.contentMenu.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates id="template" xml:space="preserve">
+<t t-name="website.contentMenu.dialog.submenu">
+ <li t-att-data-menu-id="submenu.fields['id']" t-att-data-mega-menu="submenu.fields['is_mega_menu'] ? true : undefined">
+ <div class="input-group">
+ <div class="input-group-prepend">
+ <span class="input-group-text fa fa-bars" role="img" aria-label="Dropdown menu" title="Dropdown menu"/>
+ </div>
+ <span class="form-control d-flex align-items-center">
+ <span class="js_menu_label o_text_overflow flex-grow-1">
+ <t t-esc="submenu.fields['name']"/>
+ </span>
+ <span t-if="submenu.fields['is_mega_menu']" class="badge badge-primary">Mega Menu</span>
+ <i t-if="submenu.is_homepage" class="fa fa-home ml-3" role="img" aria-label="Home" title="Home"/>
+ </span>
+ <span class="input-group-append">
+ <button type="button" class="btn btn-primary js_edit_menu fa fa-pencil-square-o" aria-label="Edit Menu Item" title="Edit Menu Item"/>
+ <button type="button" class="btn btn-danger js_delete_menu fa fa-trash-o" aria-label="Delete Menu Item" title="Delete Menu Item"/>
+ </span>
+ </div>
+ <t t-set="children" t-value="submenu.children"/>
+ <ul t-if="children">
+ <t t-foreach="children" t-as="submenu">
+ <t t-call="website.contentMenu.dialog.submenu"/>
+ </t>
+ </ul>
+ </li>
+</t>
+<div t-name="website.contentMenu.dialog.select">
+ <select class="form-control mb16" t-if="widget.roots">
+ <t t-foreach="widget.roots" t-as="root">
+ <option t-att-value="root.id"><t t-esc="root.name"/></option>
+ </t>
+ </select>
+</div>
+<div t-name="website.contentMenu.dialog.edit">
+ <select class="form-control mb16" t-if="widget.roots">
+ <t t-foreach="widget.roots" t-as="root">
+ <option t-att-value="root.id"><t t-esc="root.name"/></option>
+ </t>
+ </select>
+ <ul class="oe_menu_editor list-unstyled">
+ <t t-foreach="widget.menu.children" t-as="submenu">
+ <t t-call="website.contentMenu.dialog.submenu"/>
+ </t>
+ </ul>
+ <div class="mt32">
+ <small class="float-right text-muted">
+ Drag to the right to get a submenu
+ </small>
+ <a href="#" class="js_add_menu">
+ <i class="fa fa-plus-circle"/> Add Menu Item
+ </a><br/>
+ <a href="#" class="js_add_menu" data-type="mega">
+ <i class="fa fa-plus-circle"/> Add Mega Menu Item
+ </a>
+ </div>
+</div>
+</templates>
diff --git a/addons/website/static/src/xml/website.cookies_bar.xml b/addons/website/static/src/xml/website.cookies_bar.xml
new file mode 100644
index 00000000..1f437869
--- /dev/null
+++ b/addons/website/static/src/xml/website.cookies_bar.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates id="template" xml:space="preserve">
+ <t t-name="website.cookies_bar.text_title">
+ <h3 class="o_cookies_bar_text_title">
+ Respecting your privacy is our priority.
+ </h3>
+ </t>
+ <t t-name="website.cookies_bar.text_primary">
+ <p class="o_cookies_bar_text_primary">
+ We use cookies to provide you a better user experience.
+ </p>
+ </t>
+ <t t-name="website.cookies_bar.text_secondary">
+ <p class="o_cookies_bar_text_secondary">
+ We use them to store info about your habits on our website. It will helps us to provide you the very best experience and customize what you see. <br/>
+ By clicking on this banner, you give us permission to collect data.
+ </p>
+ </t>
+ <t t-name="website.cookies_bar.discrete">
+ <section class="o_colored_level o_cc o_cc1">
+ <div class="container">
+ <div class="row">
+ <div class="col-lg-8 pt16">
+ <p>We use cookies to provide you a better user experience.</p>
+ </div>
+ <div class="col-lg-4 pt16 text-right">
+ <a href="/cookie-policy" class="o_cookies_bar_text_policy btn btn-link btn-sm">Cookie Policy</a>
+ <a href="#" role="button" class="js_close_popup o_cookies_bar_text_button btn btn-primary btn-sm">I agree</a>
+ </div>
+ </div>
+ </div>
+ </section>
+ </t>
+ <t t-name="website.cookies_bar.classic">
+ <section class="o_colored_level o_cc o_cc1 pt32 pb16">
+ <div class="container">
+ <div class="row">
+ <div class="col-lg-6">
+ <t t-call="website.cookies_bar.text_title"/>
+ <t t-call="website.cookies_bar.text_primary"/>
+ <t t-call="website.cookies_bar.text_secondary"/>
+ </div>
+ <div class="col-lg-3 offset-lg-3">
+ <a href="#" role="button" class="js_close_popup o_cookies_bar_text_button btn btn-primary btn-block">I agree</a>
+ <a href="/cookie-policy" class="o_cookies_bar_text_policy btn btn-link btn-block">Cookie Policy</a>
+ </div>
+ </div>
+ </div>
+ </section>
+ </t>
+ <t t-name="website.cookies_bar.popup">
+ <section class="o_colored_level o_cc o_cc1 p-5">
+ <div class="container text-center">
+ <div class="row">
+ <div class="col-lg-12">
+ <img t-attf-src="/web/image/website/#{websiteId}/logo/250x250" class="img img-fluid mb-4" alt="Website Logo"/>
+ <t t-call="website.cookies_bar.text_title"/>
+ <t t-call="website.cookies_bar.text_primary"/>
+ <t t-call="website.cookies_bar.text_secondary"/>
+ <a href="/cookie-policy" class=" o_cookies_bar_text_policy btn btn-link mr-2">Cookie Policy</a>
+ <a href="#" role="button" class="js_close_popup o_cookies_bar_text_button btn btn-primary">I agree</a>
+ </div>
+ </div>
+ </div>
+ </section>
+ </t>
+</templates>
diff --git a/addons/website/static/src/xml/website.editor.xml b/addons/website/static/src/xml/website.editor.xml
new file mode 100644
index 00000000..3ce515bd
--- /dev/null
+++ b/addons/website/static/src/xml/website.editor.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates id="template" xml:space="preserve">
+ <div t-name="website.homepage_editor_welcome_message" class="container text-center o_homepage_editor_welcome_message">
+ <h2 class="mt0">Welcome to your <b>Homepage</b>!</h2>
+ <p class="lead d-none d-md-block">Click on <b>Edit</b> in the top right corner to start designing.</p>
+ </div>
+ <div t-name="website.leaving_current_page_edition">
+ <p>What do you want to do?</p>
+ <p class="text-muted">Your current changes will be saved automatically.</p>
+ </div>
+
+ <!-- Editor top bar which contains the summernote tools and save/discard buttons -->
+ <t t-name="website.editorbar">
+ <div class="o_we_website_top_actions">
+ <div class="o_we_external_history_buttons">
+ <button type="button" data-action="undo" class="btn btn-secondary fa fa-undo"/>
+ <button type="button" data-action="redo" class="btn btn-secondary fa fa-repeat"/>
+ </div>
+ <form class="ml-auto">
+ <button type="button" class="btn btn-secondary" data-action="cancel" accesskey="j">Discard</button>
+ <button type="button" class="btn btn-primary" data-action="save" accesskey="s">Save</button>
+ </form>
+ </div>
+ </t>
+ <!-- Custom checkbox (material-design-like toggle) -->
+ <t t-name="website.components.switch">
+ <label class="o_switch" t-att-for="id">
+ <input type="checkbox" t-att-id="id" t-att-checked="checked ? 'checked' : undefined"/>
+ <span/>
+ <div t-if="label"><t t-esc="label"/></div>
+ </label>
+ </t>
+
+ <t t-extend="wysiwyg.widgets.link">
+ <t t-jquery="#o_link_dialog_url_input" t-operation="after">
+ <small class="form-text text-muted">Hint: Type '/' to search an existing page and '#' to link to an anchor.</small>
+ </t>
+ <t t-jquery="div#o_url_input" t-operation="after">
+ <div class="form-group row o_link_dialog_page_anchor d-none">
+ <label class="col-form-label col-md-3" for="o_link_dialog_anchor_input">Page Anchor</label>
+ <div class="col-md-9">
+ <select name="link_anchor" class="form-control link-style"></select>
+ <small class="form-text font-weight-bold o_anchors_loading">Loading...</small>
+ </div>
+ </div>
+ </t>
+ </t>
+ <!-- Anchor Name option dialog -->
+ <div t-name="website.dialog.anchorName">
+ <div class="form-group row">
+ <label class="col-form-label col-md-3" for="anchorName">Choose an anchor name</label>
+ <div class="col-md-9">
+ <input type="text" class="form-control o_input_anchor_name" id="anchorName" t-attf-value="#{currentAnchor}" placeholder="Anchor name"/>
+ <div class="invalid-feedback">
+ <p class="d-none o_anchor_already_exists">The chosen name already exists</p>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Add a Google Font option dialog -->
+ <div t-name="website.dialog.addGoogleFont">
+ <div class="form-group row">
+ <label class="col-form-label col-md-3" for="google_font_html">Google Font address</label>
+ <div class="col-md-9">
+ <textarea id="google_font_html" class="form-control o_input_google_font"
+ placeholder="https://fonts.google.com/specimen/Roboto" style="height: 100px;"/>
+ <span class="float-right text-muted">
+ Select one font on <a target="_blank" href="https://fonts.google.com">fonts.google.com</a> and copy paste the address of the font page here.
+ </span>
+ </div>
+ </div>
+ <p>Adding a font requires a reload of the page. This will save all your changes.</p>
+ </div>
+ <t t-name="website.delete_google_font_btn">
+ <t t-set="delete_font_title">Delete this font</t>
+ <i role="button"
+ class="text-danger ml-2 fa fa-trash-o o_we_delete_google_font_btn"
+ t-att-aria-label="delete_font_title"
+ t-att-title="delete_font_title"
+ t-att-data-font-index="index"/>
+ </t>
+ <t t-name="website.add_google_font_btn">
+ <we-button href="#" class="o_we_add_google_font_btn"
+ t-att-data-variable="variable">
+ Add a Google Font
+ </we-button>
+ </t>
+
+ <t t-name="website.color_combination_edition">
+ <we-colorpicker string="Background" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-bg"/>
+ <we-colorpicker string="Text" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-text"/>
+ <we-collapse>
+ <we-colorpicker string="Headings" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-headings"/>
+ <we-colorpicker string="Headings 2" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-h2"/>
+ <we-colorpicker string="Headings 3" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-h3"/>
+ <we-colorpicker string="Headings 4" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-h4"/>
+ <we-colorpicker string="Headings 5" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-h5"/>
+ <we-colorpicker string="Headings 6" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-h6"/>
+ </we-collapse>
+ <we-colorpicker string="Links" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-link"/>
+ <we-row string="Primary Buttons">
+ <we-colorpicker title="Background" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-btn-primary"/>
+ <we-colorpicker title="Border" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-btn-primary-border"/>
+ </we-row>
+ <we-row string="Secondary Buttons">
+ <we-colorpicker title="Background" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-btn-secondary"/>
+ <we-colorpicker title="Border" data-customize-website-color="null" t-attf-data-color="o-cc#{number}-btn-secondary-border"/>
+ </we-row>
+ </t>
+ <div t-name="website.s_google_map_modal">
+ <p>Use Google Map on your website (Contact Us page, snippets, etc).</p>
+ <div class="form-group row mb-0">
+ <label class="col-sm-2 col-form-label" for="pin_address">API Key</label>
+ <div class="col">
+ <div class="input-group">
+ <div class="input-group-prepend">
+ <div class="input-group-text"><i class="fa fa-key"/></div>
+ </div>
+ <input type="text" class="form-control" id="api_key_input"
+ t-att-value="apiKey or ''"
+ placeholder="BSgzTvR5L1GB9jriT451iTN4huVPxHmltG6T6eo"/>
+ </div>
+ <small id="api_key_help" class="text-danger">
+ </small>
+ <div class="small form-text text-muted">
+ Hint: How to use Google Map on your website (Contact Us page and as a snippet)
+ <br/>
+ <a target="_blank" href="https://console.developers.google.com/flows/enableapi?apiid=maps_backend,static_maps_backend&amp;keyType=CLIENT_SIDE&amp;reusekey=true">
+ <i class="fa fa-arrow-right"/>
+ Create a Google Project and Get a Key
+ </a>
+ <br/>
+ <a target="_blank" href="https://cloud.google.com/maps-platform/pricing">
+ <i class="fa fa-arrow-right"/>
+ Enable billing on your Google Project
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Theme - custom code -->
+ <div t-name="website.custom_code_dialog_content">
+ <div class="mb-2" t-esc="contentText"/>
+ <div class="o_ace_editor_container"/>
+ </div>
+
+ <t t-name="website.new_content_loader">
+ <div class="o_new_content_loader_container position-fixed fixed-top fixed-left
+ h-100 w-100 d-flex flex-column align-items-center text-white font-weight-bold">
+ <p id="new_content_loader_text"/>
+ <div class="o_new_content_loader"/>
+ </div>
+ </t>
+</templates>
diff --git a/addons/website/static/src/xml/website.pageProperties.xml b/addons/website/static/src/xml/website.pageProperties.xml
new file mode 100644
index 00000000..5afdbb5f
--- /dev/null
+++ b/addons/website/static/src/xml/website.pageProperties.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates id="template" xml:space="preserve">
+
+<!-- Tooltip Dependencies -->
+
+<t t-name="website.get_tooltip_dependencies">
+ <t t-foreach="dependencies" t-as="dep">
+ <b><t t-esc="dep"/></b>
+ <ul>
+ <li t-foreach="dep_value" t-as="item">
+ <a t-att-href="item_value['link']"
+ t-att-title="item_value['item']"
+ class="o_text_overflow">
+ <t t-esc="item_value['item']"/>
+ </a>
+ </li>
+ </ul>
+ </t>
+</t>
+<t t-name="website.show_page_key_dependencies">
+ <div class="col-md-9 offset-md-3">
+ <span class="text-muted" id="warn_about_call_message">
+ <t t-set="depTooltip">
+ <t t-call="website.get_tooltip_dependencies"/>
+ </t>
+ It looks like your file is being called by
+ <a href="#" data-toggle="popover" t-att-data-content="depTooltip" data-html="true" title="Dependencies"><t t-esc="dep_text" /></a>.
+ Changing its name will break these calls.
+ </span>
+ </div>
+</t>
+<t t-name="website.show_page_dependencies">
+ <t t-set="depTooltip">
+ <t t-call="website.get_tooltip_dependencies"/>
+ </t>
+ (could be used in <a href="#" data-toggle="popover" t-att-data-content="depTooltip" data-html="true" title="Dependencies"><t t-esc="dep_text" /></a>)
+</t>
+
+<!-- Page Properties -->
+
+<div t-name="website.pagesMenu.page_info" class="o_page_management_info">
+ <form>
+ <ul class="nav nav-tabs" role="tablist">
+ <li class="nav-item"><a aria-controls="basic_page_info" role="tab" data-toggle="tab" class="nav-link active" href="#basic_page_info">Name</a></li>
+ <li class="nav-item"><a aria-controls="advances_page_info" role="tab" data-toggle="tab" class="nav-link" href="#advances_page_info">Publish</a></li>
+ </ul>
+ <div class="tab-content mt16">
+ <div role="tabpanel" id="basic_page_info" class="tab-pane fade show active">
+ <div class="form-group row">
+ <label class="col-form-label col-md-3" for="page_name">Page Name</label>
+ <div class="col-md-9">
+ <input type="text" class="form-control" id="page_name" t-att-value="widget.page.name" />
+ </div>
+ </div>
+ <div class="form-group warn_about_call"></div>
+ <div class="form-group row">
+ <label class="col-form-label col-md-3" for="page_url">Page URL</label>
+ <div class="col-md-9">
+ <div class="input-group">
+ <div class="input-group-prepend">
+ <span class="input-group-text" t-att-title="widget.serverUrl"><small><t t-esc="widget.serverUrlTrunc"/></small></span>
+ </div>
+ <input type="text" class="form-control" id="page_url" t-att-value="widget.page.url" />
+ </div>
+ </div>
+ </div>
+ <div class="form-group row ask_for_redirect">
+ <label class="col-form-label col-md-3" for="create_redirect">Redirect Old URL</label>
+ <div class="col-md-2">
+ <a>
+ <label class="o_switch" for="create_redirect" >
+ <input type="checkbox" id="create_redirect"/>
+ <span/>
+ </label>
+ </a>
+ </div>
+ <div class="col-md-7 mt4">
+ <span class="text-muted" id="dependencies_redirect"></span>
+ </div>
+ </div>
+ <div class="form-group row ask_for_redirect">
+ <label class="col-form-label col-md-3 redirect_type" for="redirect_type">Type</label>
+ <div class="col-md-6 redirect_type">
+ <select class="form-control" id="redirect_type">
+ <option value="301">301 Moved permanently</option>
+ <option value="302">302 Moved temporarily</option>
+ </select>
+ </div>
+ </div>
+ </div>
+ <div role="tabpanel" id="advances_page_info" class="tab-pane fade">
+ <div class="form-group row">
+ <label class="control-label col-md-4" for="is_menu">Show in Top Menu</label>
+ <div class="col-sm-8">
+ <label class="o_switch" for="is_menu" >
+ <input type="checkbox" t-att-checked="widget.page.menu_ids.length > 0 ? true : undefined" id="is_menu"/>
+ <span/>
+ </label>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="control-label col-md-4" for="is_homepage">Use as Homepage</label>
+ <div class="col-sm-8">
+ <label class="o_switch" for="is_homepage" >
+ <input type="checkbox" t-att-checked="widget.page.is_homepage ? true : undefined" id="is_homepage"/>
+ <span/>
+ </label>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="control-label col-md-4" for="is_indexed">
+ Indexed
+ <i class="fa fa-question-circle-o" title="Hide this page from search results" role="img" aria-label="Info"></i>
+ </label>
+ <div class="col-md-2">
+ <label class="o_switch" for="is_indexed" >
+ <input type="checkbox" t-att-checked="widget.page.website_indexed ? true : undefined" id="is_indexed"/>
+ <span/>
+ </label>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="control-label col-md-4" for="is_published">Publish</label>
+ <div class="col-sm-8">
+ <label class="o_switch js_publish_btn" for="is_published">
+ <input type="checkbox" t-att-checked="widget.page.website_published ? true : undefined" id="is_published"/>
+ <span/>
+ </label>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="control-label col-md-4" for="date_publish">Publishing Date</label>
+ <div class="col-md-8">
+ <div class="input-group date" id="date_publish_container" data-target-input="nearest">
+ <input type="text" class="form-control datetimepicker-input" data-target="#date_publish_container" id="date_publish"/>
+ <div class="input-group-append" data-target="#date_publish_container" data-toggle="datetimepicker">
+ <div class="input-group-text"><i class="fa fa-calendar"></i></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="control-label col-md-4" for="visibility">Visibility</label>
+ <div class="col-md-8">
+ <div class="input-group">
+ <select id="visibility" class="form-control col-md-4">
+ <option value="" t-att-selected="widget.page.visibility == ''">Public</option>
+ <option value="connected" t-att-selected="widget.page.visibility == 'connected' ? 'selected' : undefined">Signed In</option>
+ <option value="restricted_group" t-att-selected="widget.page.visibility == 'restricted_group' ? 'selected' : undefined">Some Users</option>
+ <option value="password" t-att-selected="widget.page.visibility == 'password' ? 'selected' : undefined">Password</option>
+ </select>
+ <div class="ml-1 input-group-prepend show_visibility_password" >
+ <div class="input-group-text"><i class="fa fa-key"></i></div>
+ </div>
+ <input type="password" id="visibility_password"
+ t-att-value='widget.page.visibility_password'
+ t-att-required="widget.page.visibility == 'password' ? 'required' : None"
+ class="form-control show_visibility_password"/>
+ <t t-if="widget.page.hasSingleGroup">
+ <div class="ml-1 input-group-prepend show_group_id">
+ <div class="input-group-text"><i class="fa fa-group"></i></div>
+ </div>
+ <t t-set="group" t-value="widget.page.group_id"/>
+ <input type="text" class="form-control show_group_id" id="group_id" t-att-value="group ? group[1] : ''" t-att-data-group-id='group ? group[0] : 0' />
+ </t>
+ <t t-else="">
+ <t t-set='groups_tooltip'>More than one group has been set on the view.</t>
+ <a class="show_group_id btn btn-link mx-auto" href="/web#model=ir.ui.view&amp;id=681" t-att-title='groups_tooltip'>Discard &amp; Edit in backend</a>
+ </t>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </form>
+</div>
+</templates>
diff --git a/addons/website/static/src/xml/website.res_config_settings.xml b/addons/website/static/src/xml/website.res_config_settings.xml
new file mode 100644
index 00000000..6b6d4817
--- /dev/null
+++ b/addons/website/static/src/xml/website.res_config_settings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates id="template" xml:space="preserve">
+<t t-name="website.res_config_settings.cookies_modal_main">
+ <main role="alert">
+ <p>
+ <b>Cookie bars may significantly impair the experience</b> of
+ your visitors. We recommend you avoid them unless you have
+ verified with a legal advisor that you absolutely need cookie
+ consent in your country.
+ </p>
+ <p>
+ For session cookies, authentification and analytics*,
+ <b>you do not need to ask for the consent</b> (see e.g. Opinion
+ 04/2012 on Cookie Consent Exemption by the EU Art.29 WP).
+ </p>
+ <p>
+ * provided that your analytics is anonymized, which is not the
+ case by default with Google Analytics.
+ </p>
+ </main>
+</t>
+</templates>
diff --git a/addons/website/static/src/xml/website.seo.xml b/addons/website/static/src/xml/website.seo.xml
new file mode 100644
index 00000000..b10faaff
--- /dev/null
+++ b/addons/website/static/src/xml/website.seo.xml
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="utf-8"?>
+<templates id="template" xml:space="preserve">
+ <t t-name="Configurator.language_promote">
+ <t t-foreach="language" t-as="lang">
+ <option t-att-value="lang[0]" t-att-selected="lang[0] == def_lang ? 'selected' : null"><t t-esc="lang[2]" /></option>
+ </t>
+ </t>
+
+ <div t-name="website.seo_configuration" role="form">
+ <section class="js_seo_meta_title_description"/>
+ <section class="js_seo_meta_keywords"/>
+ <section class="js_seo_image"/>
+ </div>
+
+ <t t-name="website.seo_suggestion_list">
+ <ul class="list-inline mb0">
+ <!-- filled in JS -->
+ </ul>
+ </t>
+
+ <t t-name="website.seo_list">
+ <tbody>
+ <!-- filled in JS -->
+ </tbody>
+ </t>
+
+ <t t-name="website.seo_keyword">
+ <tr class="js_seo_keyword" t-att-data-keyword="widget.keyword">
+ <td t-esc="widget.keyword"/>
+ <td class="text-center"><i t-if="widget.used_h1" class="fa fa-check" t-attf-title="{{ widget.keyword }} is used in page first level heading"/></td>
+ <td class="text-center"><i t-if="widget.used_h2" class="fa fa-check" t-attf-title="{{ widget.keyword }} is used in page second level heading"/></td>
+ <td class="text-center"><i class="js_seo_keyword_title fa fa-check" style="visibility: hidden;" t-attf-title="{{ widget.keyword }} is used in page title"/></td>
+ <td class="text-center"><i class="js_seo_keyword_description fa fa-check" style="visibility: hidden;" t-attf-title="{{ widget.keyword }} is used in page description"/></td>
+ <td class="text-center"><i t-if="widget.used_content" class="fa fa-check" t-attf-title="{{ widget.keyword }} is used in page content"/></td>
+ <td class="o_seo_keyword_suggestion"/>
+ <td class="text-center"><a href="#" class="oe_remove" data-action="remove-keyword" t-attf-title="Remove {{ widget.keyword }}"><i class="fa fa-trash"/></a></td>
+ </tr>
+ </t>
+
+ <t t-name="website.seo_suggestion">
+ <li class="list-inline-item">
+ <span class="o_seo_suggestion badge badge-info" t-att-data-keyword="widget.keyword" t-attf-title="Add {{ widget.keyword }}" t-esc="widget.keyword"/>
+ </li>
+ </t>
+
+ <t t-name="website.seo_preview">
+ <div class="oe_seo_preview_g">
+ <div class="rc">
+ <div class="r"><t t-esc="widget.title"/></div>
+ <div class="s">
+ <div class="kv"><t t-esc="widget.url"/></div>
+ <div class="st"><t t-esc="widget.description"/></div>
+ </div>
+ </div>
+ </div>
+ </t>
+
+ <div t-name="website.seo_meta_title_description">
+ <div class="row">
+ <div class="col-lg-6">
+ <div class="form-group">
+ <label for="website_meta_title">
+ Title <i class="fa fa-question-circle-o" title="The title will take a default value unless you specify one."/>
+ </label>
+ <input type="text" name="website_meta_title" id="website_meta_title" class="form-control" placeholder="Keep empty to use default value" maxlength="70" size="70"/>
+ </div>
+ <div class="form-group">
+ <label for="website_meta_description">
+ Description <i class="fa fa-question-circle-o" t-att-title="widget.previewDescription"/>
+ </label>
+ <textarea name="website_meta_description" id="website_meta_description" placeholder="Keep empty to use default value" class="form-control"/>
+ <div class="alert alert-warning mt16 mb0 small" id="website_meta_description_warning" style="display: none;"/>
+ </div>
+ <div class="form-group" t-if='widget.canEditUrl'>
+ <label for="website_seo_name">
+ Custom Url <i class="fa fa-question-circle-o" t-att-title="widget.seoNameHelp" />
+ </label>
+ <div class="input-group">
+ <div class="input-group-prepend">
+ <span class="input-group-text seo_name_pre"></span>
+ </div>
+ <input type="text" name="website_seo_name" id="website_seo_name" class="form-control" t-att-placeholder="widget.seoNameDefault" />
+ <div class="input-group-append" title="Unalterable unique identifier">
+ <span class="input-group-text seo_name_post"></span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="col-lg-6">
+ <div class="card-header">Preview</div>
+ <div class="card mb0 p-0">
+ <div class="card-body">
+ <div class="js_seo_preview"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <t t-name="website.seo_meta_keywords">
+ <label for="website_meta_keywords">
+ Keywords
+ </label>
+ <div class="form-inline" role="form">
+ <div class="input-group">
+ <input type="text" name="website_meta_keywords" id="website_meta_keywords" class="form-control" placeholder="Keyword" maxlength="30"/>
+ <span title="The language of the keyword and related keywords." class="input-group-append">
+ <select name="seo_page_language" id="language-box" class="btn form-control"/>
+ </span>
+ <span class="input-group-append">
+ <button data-action="add" class="btn btn-primary btn-sm" type="button">Add</button>
+ </span>
+ </div>
+ </div>
+ <div class="table-responsive mt16">
+ <table class="table table-sm">
+ <thead>
+ <tr>
+ <th>Keyword</th>
+ <th class="text-center" title="Used in page first level heading">H1</th>
+ <th class="text-center" title="Used in page second level heading">H2</th>
+ <th class="text-center" title="Used in page title">T</th>
+ <th class="text-center" title="Used in page description">D</th>
+ <th class="text-center" title="Used in page content">C</th>
+ <th title="Most searched topics related to your keyword, ordered by importance">Related keywords</th>
+ <th class="text-center"></th>
+ </tr>
+ </thead>
+ <!-- body inserted in JS -->
+ </table>
+ </div>
+ </t>
+
+ <div t-name="website.seo_meta_image_selector" class="o_seo_og_image">
+ <t t-call="website.og_image_body"/>
+ </div>
+
+ <t t-name="website.og_image_body">
+ <h4><small>Select an image for social share</small></h4>
+ <div class="row">
+ <div class="col-lg-6">
+ <t t-foreach="widget.images" t-as="image">
+ <div t-attf-class="o_meta_img mt4 #{new window.URL(image, window.location.origin).pathname === new window.URL(widget.activeMetaImg, window.location.origin).pathname and ' o_active_image' or ''}">
+ <img t-att-src="image"/>
+ </div>
+ </t>
+ <div t-if="widget.customImgUrl" t-attf-class="o_meta_img mt4 #{widget.customImgUrl === widget.activeMetaImg and ' o_active_image' or ''}">
+ <span class="o-custom-label w-100 text-white text-center">Custom</span>
+ <img t-att-src="widget.customImgUrl"/>
+ </div>
+ <div class="o_meta_img_upload mt4" title="Click to choose more images">
+ <i class="fa fa-upload"/>
+ </div>
+ </div>
+ <div class="col-lg-6">
+ <div class="card p-0 mb16">
+ <div class="card-header">Social Preview</div>
+ <img class="card-img-top o_meta_active_img" t-att-src="widget.activeMetaImg"/>
+ <div class="card-body px-3 py-2">
+ <h6 class="text-primary card-title mb0"><t t-esc="widget.metaTitle"/></h6>
+ <small class="card-subtitle text-muted"><t t-esc="widget.serverUrl"/></small>
+ <p t-esc="widget.metaDescription"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </t>
+</templates>
diff --git a/addons/website/static/src/xml/website.share.xml b/addons/website/static/src/xml/website.share.xml
new file mode 100644
index 00000000..f07a2907
--- /dev/null
+++ b/addons/website/static/src/xml/website.share.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates id="template" xml:space="preserve">
+ <t t-name="website.social_hover">
+ <div class="text-nowrap css_editable_mode_hidden">
+ <t t-foreach="medias" t-as="media">
+ <a href="#"
+ t-attf-class="fa fa-3x fa-#{media}-square text-#{media} oe_social_#{media}"
+ t-att-title="media"
+ t-att-aria-label="media"/>
+ </t>
+ </div>
+ </t>
+</templates>
diff --git a/addons/website/static/src/xml/website.xml b/addons/website/static/src/xml/website.xml
new file mode 100644
index 00000000..8d196b9b
--- /dev/null
+++ b/addons/website/static/src/xml/website.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates id="template" xml:space="preserve">
+ <t t-name="website.prompt">
+ <div role="dialog" class="modal o_technical_modal" tabindex="-1">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <header class="modal-header" t-if="window_title">
+ <h3 class="modal-title"><t t-esc="window_title"/></h3>
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
+ </header>
+ <main class="modal-body">
+ <form role="form" t-att-id="id">
+ <div class="form-group row mb0">
+ <label for="page-name" class="col-md-3 col-form-label">
+ <t t-esc="field_name"/>:
+ </label>
+ <div class="col-md-9">
+ <input t-if="field_type == 'input'" type="text" class="form-control" required="required"/>
+ <textarea t-if="field_type == 'textarea'" class="form-control" required="required" rows="5"></textarea>
+ <select t-if="field_type == 'select'" class="form-control"></select>
+ </div>
+ </div>
+ </form>
+ </main>
+ <footer class="modal-footer">
+ <button type="button" class="btn btn-primary btn-continue">Continue</button>
+ <button type="button" class="btn btn-secondary" data-dismiss="modal" aria-label="Cancel">Cancel</button>
+ </footer>
+ </div>
+ </div>
+ </div>
+ </t>
+
+ <t t-name="website.dependencies">
+ <p class="text-warning">Don't forget to update all links referring to this page.</p>
+ <t t-if="dependencies and _.keys(dependencies).length">
+ <p class="text-warning">We found these ones:</p>
+ <div t-foreach="dependencies" t-as="type" class="mb16">
+ <a class="collapsed fa fa-caret-right" data-toggle="collapse" t-attf-href="#collapseDependencies#{type_index}" aria-expanded="false" t-attf-aria-controls="collapseDependencies#{type_index}">
+ <t t-esc="type"/>&amp;nbsp;
+ <span class="text-muted"><t t-esc="type_value.length"/> found(s)</span>
+ </a>
+ <div t-attf-id="collapseDependencies#{type_index}" class="collapse" aria-expanded="false">
+ <ul>
+ <li t-foreach="type_value" t-as="error">
+ <a t-if="!_.contains(['', '#', false], error.link)" t-att-href="error.link">
+ <t t-raw="error.text"/>
+ </a>
+ <t t-else="">
+ <t t-raw="error.text"/>
+ </t>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </t>
+ </t>
+
+ <div t-name="website.delete_page">
+ <p>Are you sure you want to delete this page ?</p>
+ <t t-call="website.dependencies"/>
+ </div>
+
+ <div t-name="website.rename_page">
+ <div class="card">
+ <div class="card-body">
+ <form>
+ <div class="form-group row mb0">
+ <label for="new_name" class="col-form-label col-md-4">Rename Page To:</label>
+ <div class="col-md-8">
+ <input type="text" class="form-control" id="new_name" placeholder="e.g. About Us"/>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ <t t-call="website.dependencies"/>
+ </div>
+
+ <div t-name="website.duplicate_page_action_dialog">
+ <div class="form-group row">
+ <label class="col-form-label col-md-3" for="page_name">Page Name</label>
+ <div class="col-md-9">
+ <input type="text" class="form-control" id="page_name"/>
+ </div>
+ </div>
+ </div>
+
+ <t t-name="website.oe_applications_menu">
+ <t t-as="menu" t-foreach="menu_data.children">
+ <a role="menuitem" class="dropdown-item"
+ t-att-data-action-id="menu.action ? menu.action.split(',')[1] : undefined"
+ t-att-data-action-model="menu.action ? menu.action.split(',')[0] : undefined"
+ t-att-data-menu="menu.id"
+ t-att-data-menu-xmlid="menu.xmlid"
+ t-att-href="_.str.sprintf('/web#menu_id=%s&amp;action=%s', menu.id, menu.action ? menu.action.split(',')[1] : '')">
+ <span class="oe_menu_text" t-esc="menu.name"/>
+ </a>
+ </t>
+ </t>
+</templates>
diff --git a/addons/website/static/src/xml/website_widget.xml b/addons/website/static/src/xml/website_widget.xml
new file mode 100644
index 00000000..48a6d7c5
--- /dev/null
+++ b/addons/website/static/src/xml/website_widget.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<templates xml:space="preserve">
+
+ <t t-name="website.iframeWidget">
+ <iframe
+ t-if="url"
+ height="100%"
+ width="100%"
+ frameBorder="0"
+ t-att-src="url"
+ class='d-block'
+ ></iframe>
+ <div t-else="">No Url</div>
+ </t>
+
+</templates>