From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- .../static/src/js/event_exhibitor_connect.js | 137 +++++++++++++++++++++ .../static/src/scss/event_exhibitor_templates.scss | 114 +++++++++++++++++ .../static/src/xml/event_exhibitor_connect.xml | 77 ++++++++++++ 3 files changed, 328 insertions(+) create mode 100644 addons/website_event_track_exhibitor/static/src/js/event_exhibitor_connect.js create mode 100644 addons/website_event_track_exhibitor/static/src/scss/event_exhibitor_templates.scss create mode 100644 addons/website_event_track_exhibitor/static/src/xml/event_exhibitor_connect.xml (limited to 'addons/website_event_track_exhibitor/static/src') 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 @@ + + + + +
+
+ + + + + +
+ +
+
+
+
+
+

+ +

+ + + + + + + + + + +
+ +
+
+ +
+
+
+
+
+ +
-- cgit v1.2.3