diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website_event_track_exhibitor/static/src | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_event_track_exhibitor/static/src')
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> |
