summaryrefslogtreecommitdiff
path: root/addons/website/static/src/snippets/s_dynamic_snippet_carousel
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/website/static/src/snippets/s_dynamic_snippet_carousel
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website/static/src/snippets/s_dynamic_snippet_carousel')
-rw-r--r--addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.js46
-rw-r--r--addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.scss11
-rw-r--r--addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.xml35
-rw-r--r--addons/website/static/src/snippets/s_dynamic_snippet_carousel/options.js28
4 files changed, 120 insertions, 0 deletions
diff --git a/addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.js b/addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.js
new file mode 100644
index 00000000..cf43100a
--- /dev/null
+++ b/addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.js
@@ -0,0 +1,46 @@
+odoo.define('website.s_dynamic_snippet_carousel', function (require) {
+'use strict';
+
+const config = require('web.config');
+const core = require('web.core');
+const publicWidget = require('web.public.widget');
+const DynamicSnippet = require('website.s_dynamic_snippet');
+
+const DynamicSnippetCarousel = DynamicSnippet.extend({
+ selector: '.s_dynamic_snippet_carousel',
+ xmlDependencies: (DynamicSnippet.prototype.xmlDependencies || []).concat(
+ ['/website/static/src/snippets/s_dynamic_snippet_carousel/000.xml']
+ ),
+
+ /**
+ *
+ * @override
+ */
+ init: function () {
+ this._super.apply(this, arguments);
+ this.template_key = 'website.s_dynamic_snippet.carousel';
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ /**
+ * Method to be overridden in child components in order to prepare QWeb
+ * options
+ * @private
+ */
+ _getQWebRenderParams: function () {
+ return Object.assign(
+ this._super.apply(this, arguments),
+ {
+ interval : parseInt(this.$target[0].dataset.carouselInterval),
+ },
+ );
+ },
+
+});
+publicWidget.registry.dynamic_snippet_carousel = DynamicSnippetCarousel;
+
+return DynamicSnippetCarousel;
+});
diff --git a/addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.scss b/addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.scss
new file mode 100644
index 00000000..3eceb172
--- /dev/null
+++ b/addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.scss
@@ -0,0 +1,11 @@
+.s_dynamic {
+ .carousel-control-prev, .carousel-control-next {
+ position: absolute;
+ width: 4rem;
+
+ > span.fa {
+ color: gray('700');
+ background: radial-gradient($white 50%, transparent 50%);
+ }
+ }
+}
diff --git a/addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.xml b/addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.xml
new file mode 100644
index 00000000..1efb8f22
--- /dev/null
+++ b/addons/website/static/src/snippets/s_dynamic_snippet_carousel/000.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates xml:space="preserve">
+ <t t-name="website.s_dynamic_snippet.carousel">
+ <div t-att-id="uniqueId" class="carousel slide" t-att-data-interval="interval">
+ <!-- Content -->
+ <div class="carousel-inner row w-100 mx-auto" role="listbox">
+ <t t-set="colClass" t-value="'col-' + (12 / chunkSize).toString()"/>
+ <t t-set="slideIndexGenerator" t-value="Array.from(Array(Math.ceil(data.length/chunkSize)).keys())"/>
+ <t t-set="itemIndexGenerator" t-value="Array.from(Array(chunkSize).keys())"/>
+ <t t-foreach="slideIndexGenerator" t-as="slideIndex">
+ <div t-attf-class="carousel-item #{slideIndex_first ? 'active' : ''}">
+ <div class="row">
+ <t t-foreach="itemIndexGenerator" t-as="itemIndex">
+ <t t-if="(slideIndex * chunkSize + itemIndex) &lt; data.length">
+ <div t-attf-class="#{colClass}">
+ <t t-raw="data[slideIndex * chunkSize + itemIndex]"/>
+ </div>
+ </t>
+ </t>
+ </div>
+ </div>
+ </t>
+ </div>
+ <!-- Controls -->
+ <a t-attf-href="##{uniqueId}" class="carousel-control-prev" data-slide="prev" role="button" aria-label="Previous" title="Previous">
+ <span class="fa fa-chevron-circle-left fa-2x"/>
+ <span class="sr-only">Previous</span>
+ </a>
+ <a t-attf-href="##{uniqueId}" class="carousel-control-next" data-slide="next" role="button" aria-label="Next" title="Next">
+ <span class="fa fa-chevron-circle-right fa-2x"/>
+ <span class="sr-only">Next</span>
+ </a>
+ </div>
+ </t>
+</templates>
diff --git a/addons/website/static/src/snippets/s_dynamic_snippet_carousel/options.js b/addons/website/static/src/snippets/s_dynamic_snippet_carousel/options.js
new file mode 100644
index 00000000..cb9a3cf5
--- /dev/null
+++ b/addons/website/static/src/snippets/s_dynamic_snippet_carousel/options.js
@@ -0,0 +1,28 @@
+odoo.define('website.s_dynamic_snippet_carousel_options', function (require) {
+'use strict';
+
+const options = require('web_editor.snippets.options');
+const s_dynamic_snippet_options = require('website.s_dynamic_snippet_options');
+
+const dynamicSnippetCarouselOptions = s_dynamic_snippet_options.extend({
+
+ //--------------------------------------------------------------------------
+ // Options
+ //--------------------------------------------------------------------------
+
+ /**
+ *
+ * @override
+ * @private
+ */
+ _setOptionsDefaultValues: function () {
+ this._super.apply(this, arguments);
+ this._setOptionValue('carouselInterval', '5000');
+ }
+
+});
+
+options.registry.dynamic_snippet_carousel = dynamicSnippetCarouselOptions;
+
+return dynamicSnippetCarouselOptions;
+});