summaryrefslogtreecommitdiff
path: root/addons/website_event_track_exhibitor/static/src
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_event_track_exhibitor/static/src
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_event_track_exhibitor/static/src')
-rw-r--r--addons/website_event_track_exhibitor/static/src/js/event_exhibitor_connect.js137
-rw-r--r--addons/website_event_track_exhibitor/static/src/scss/event_exhibitor_templates.scss114
-rw-r--r--addons/website_event_track_exhibitor/static/src/xml/event_exhibitor_connect.xml77
3 files changed, 328 insertions, 0 deletions
diff --git a/addons/website_event_track_exhibitor/static/src/js/event_exhibitor_connect.js b/addons/website_event_track_exhibitor/static/src/js/event_exhibitor_connect.js
new file mode 100644
index 00000000..eb0c12fd
--- /dev/null
+++ b/addons/website_event_track_exhibitor/static/src/js/event_exhibitor_connect.js
@@ -0,0 +1,137 @@
+odoo.define('website_event_track_exhibitor.event_exhibitor_connect', function (require) {
+'use strict';
+
+var Dialog = require('web.Dialog');
+var publicWidget = require('web.public.widget');
+
+var ExhibitorConnectClosedDialog = Dialog.extend({
+ events: _.extend({}, Dialog.prototype.events, {
+ 'click .o_wesponsor_js_connect_modal_contry': '_onClickCountryFlag',
+ }),
+ template: 'exhibitor.connect.closed.modal',
+
+ /**
+ * @override
+ * @param {Object} parent;
+ * @param {Object} options holding a sponsorData obj with required values to
+ * display (see .xml for details);
+ */
+ init: function (parent, options) {
+ options = _.defaults(options || {}, {
+ size: 'medium',
+ renderHeader: false,
+ renderFooter: false,
+ backdrop: true,
+ });
+ this.sponsorId = options.sponsorId;
+ this._super(parent, options);
+ },
+
+ /**
+ * @override
+ * Wait for fetching sponsor data;
+ */
+ willStart: function () {
+ return Promise.all([
+ this._super(...arguments),
+ this._fetchSponsor()
+ ]);
+ },
+
+ //---------------------------------------------------------------------
+ // Private
+ //---------------------------------------------------------------------
+
+ /**
+ * @private
+ * @returns {Promise<*>} promise after fetching sponsor data, given its
+ * sponsorId. Necessary to render template content;
+ */
+ _fetchSponsor: function () {
+ let self = this;
+ let rpcPromise = this._rpc({
+ route: `/event_sponsor/${this.sponsorId}/read`,
+ }).then(function (readData) {
+ self.sponsorData = readData;
+ return Promise.resolve();
+ });
+ return rpcPromise;
+ },
+});
+
+
+publicWidget.registry.eventExhibitorConnect = publicWidget.Widget.extend({
+ selector: '.o_wesponsor_js_connect',
+ xmlDependencies: ['/website_event_track_exhibitor/static/src/xml/event_exhibitor_connect.xml'],
+
+ /**
+ * @override
+ * @public
+ */
+ init: function () {
+ this._super(...arguments);
+ this._onConnectClick = _.debounce(this._onConnectClick, 500, true);
+ },
+
+ /**
+ * @override
+ * @public
+ */
+ start: function () {
+ var self = this;
+ return this._super(...arguments).then(function () {
+ self.eventIsOngoing = self.$el.data('eventIsOngoing') || false;
+ self.sponsorIsOngoing = self.$el.data('sponsorIsOngoing') || false;
+ self.isParticipating = self.$el.data('isParticipating') || false;
+ self.userEventManager = self.$el.data('userEventManager') || false;
+ self.$el.on('click', self._onConnectClick.bind(self));
+ });
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //-------------------------------------------------------------------------
+
+ /**
+ * @private
+ * @param {Event} ev
+ * On click, if sponsor is not within opening hours, display a modal instead
+ * of redirecting on the sponsor view;
+ */
+ _onConnectClick: function (ev) {
+ ev.stopPropagation();
+ ev.preventDefault();
+
+ if (this.userEventManager) {
+ document.location = this.$el.data('sponsorUrl');
+ } else if (!this.eventIsOngoing && !this.isParticipating) {
+ document.location = this.$el.data('registerUrl');
+ } else if (!this.eventIsOngoing || ! this.sponsorIsOngoing) {
+ return this._openClosedDialog();
+ } else {
+ document.location = this.$el.data('sponsorUrl');
+ }
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ _openClosedDialog: function ($element) {
+ const sponsorId = this.$el.data('sponsorId');
+ return new ExhibitorConnectClosedDialog(
+ this, {
+ sponsorId: sponsorId,
+ }
+ ).open();
+ },
+
+});
+
+
+return {
+ ExhibitorConnectClosedDialog: ExhibitorConnectClosedDialog,
+ eventExhibitorConnect: publicWidget.registry.eventExhibitorConnect,
+};
+
+});
diff --git a/addons/website_event_track_exhibitor/static/src/scss/event_exhibitor_templates.scss b/addons/website_event_track_exhibitor/static/src/scss/event_exhibitor_templates.scss
new file mode 100644
index 00000000..a03b1a5c
--- /dev/null
+++ b/addons/website_event_track_exhibitor/static/src/scss/event_exhibitor_templates.scss
@@ -0,0 +1,114 @@
+.o_wesponsor_index {
+
+ /*
+ * COMMON
+ */
+
+ .o_wesponsor_gradient {
+ background-image: linear-gradient(120deg, #875A7B, darken(#875A7B, 10%));
+ opacity: 0.8;
+ }
+
+ /*
+ * MAIN PAGE: LIST
+ */
+
+ // Sponsor card
+ .o_wesponsor_card {
+ .card-body {
+ padding: 1rem;
+ }
+
+ .card-footer {
+ padding: 0.75rem 1rem;
+ }
+
+ .o_wesponsor_card_header_badge {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ padding: $card-spacer-y $card-spacer-x;
+ text-align: right;
+ }
+ &.o_wesponsor_card_unpublished {
+ opacity: 0.8;
+ }
+
+ .o_wesponsor_bg_image {
+ background-size: contain;
+ background-repeat: no-repeat;
+ background-position:center;
+ }
+
+ // Display connect block on hover on large devices only
+ .o_wesponsor_connect_button {
+ z-index: 1;
+ position: absolute !important;
+ right: 0;
+ top: 0;
+ padding-top: 30%;
+ margin-left: auto;
+ margin-right: auto;
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ background-color: rgba(0,0,0,0);
+
+ a {
+ display: none;
+ }
+ }
+
+ @include media-breakpoint-up(md) {
+ :hover .o_wesponsor_connect_button {
+ cursor: pointer;
+ transition: background-color .2s linear;
+ background-color: rgba(0,0,0,.1);
+
+ a {
+ display: inline-block;
+ }
+ }
+ }
+ }
+
+ /*
+ * EXHIBITOR PAGE
+ */
+
+ .o_wevent_online_page_container {
+
+ // Jitsi container
+ #o_wsponsor_jitsi_iframe {
+ height: 85vh;
+ }
+
+ .o_wesponsor_exhibitor_aside {
+ .o_wesponsor_sponsor_name {
+ line-height: 1rem;
+ }
+
+ .o_wesponsor_aside_logo {
+ max-width: 40px;
+ object-fit: contain;
+ object-position: top;
+ }
+
+ // Ribbon color (FIXME)
+ .ribbon_Gold {
+ background-color: #e3aa24;
+ color:$white;
+ }
+
+ .ribbon_Silver {
+ background-color: #adb5bd;
+ color: $white;
+ }
+
+ .ribbon_Bronze {
+ background-color: #c7632a;
+ color: $white;
+ }
+ }
+ }
+}
diff --git a/addons/website_event_track_exhibitor/static/src/xml/event_exhibitor_connect.xml b/addons/website_event_track_exhibitor/static/src/xml/event_exhibitor_connect.xml
new file mode 100644
index 00000000..1e138a44
--- /dev/null
+++ b/addons/website_event_track_exhibitor/static/src/xml/event_exhibitor_connect.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates xml:space="preserve">
+
+ <t t-name="exhibitor.connect.closed.modal">
+ <div class="o_wesponsor_js_connect_modal_main container">
+ <div class="row mt-2">
+ <t t-if="! widget.sponsorData.event_is_ongoing">
+ <div class="col-12 alert alert-warning text-center" role="alert"
+ t-if="widget.sponsorData.event_is_done">
+ Event <span t-esc="widget.sponsorData.event_name" class="font-weight-bold"/> is over.
+
+ <br/>
+ <span>Join us next time to meet <b t-esc="widget.sponsorData.name"/>!</span>
+ </div>
+ <div class="col-12 alert alert-warning text-center" role="alert"
+ t-else="">
+ <span t-esc="widget.sponsorData.name" class="font-weight-bold"/> is not available right now.<br />
+ Event <span t-esc="widget.sponsorData.event_name" class="font-weight-bold"/>
+ <span t-if="widget.sponsorData.event_start_today">
+ starts in
+ <span t-esc="widget.sponsorData.event_start_remaining"/> minutes
+ </span>
+ <span class="my-0" t-else="">
+ starts on <span t-esc="widget.sponsorData.event_date_begin_located"/>
+ </span>
+ </div>
+ </t>
+ <div class="col-12 alert alert-warning text-center" role="alert"
+ t-else="">
+ <span t-esc="widget.sponsorData.name" class="font-weight-bold"/> is not available right now.<br />
+ Come back between
+ <strong>
+ <t t-esc="widget.sponsorData.hour_from_str"/>
+ -
+ <t t-esc="widget.sponsorData.hour_to_str"/>
+ </strong> (<span t-esc="widget.sponsorData.event_date_tz"/>)
+ to meet them !
+ </div>
+ <div class="col-2">
+ <img class="img" style="max-width: 100%;"
+ t-att-src="widget.sponsorData.website_image_url"
+ t-att-alt="widget.sponsorData.name"/>
+ </div>
+ <div class="col-10">
+ <div class="d-flex align-items-top mb-3">
+ <div class="d-flex flex-column">
+ <div class="d-flex align-items-center">
+ <h4 t-esc="widget.sponsorData.name" class="mb4"/>
+ <span class="badge badge-primary ml-2"
+ t-esc="widget.sponsorData.sponsor_type_name"/>
+ </div>
+ <span class="text-muted" t-if="widget.sponsorData.subtitle" t-esc="widget.sponsorData.subtitle"/>
+ <span t-if="widget.sponsorData.url">
+ <i class="fa fa-home mr-2"/><a t-att-href="widget.sponsorData.url"><span t-esc="widget.sponsorData.url"/></a>
+ </span>
+ <span t-if="widget.sponsorData.email">
+ <i class="fa fa-envelope mr-2"/><a t-att-mailto="widget.sponsorData.email"><span t-esc="widget.sponsorData.email"/></a>
+ </span>
+ <span t-if="widget.sponsorData.phone">
+ <i class="fa fa-phone mr-2"/><span t-esc="widget.sponsorData.phone"/>
+ </span>
+ </div>
+ <img t-if="widget.sponsorData.country_flag_url"
+ class="img ml-auto"
+ style="max-height: 36px;"
+ t-att-src="widget.sponsorData.country_flag_url"
+ t-att-alt="widget.sponsorData.country_name"/>
+ </div>
+ </div>
+ <span class="col-12" t-if="widget.sponsorData.website_description" t-raw="widget.sponsorData.website_description"/>
+ </div>
+ <div>
+ </div>
+ </div>
+ </t>
+
+</templates>