odoo.define('website_slides.slides.slide.like', function (require) { 'use strict'; var core = require('web.core'); var publicWidget = require('web.public.widget'); require('website_slides.slides'); var _t = core._t; var SlideLikeWidget = publicWidget.Widget.extend({ events: { 'click .o_wslides_js_slide_like_up': '_onClickUp', 'click .o_wslides_js_slide_like_down': '_onClickDown', }, //-------------------------------------------------------------------------- // Private //-------------------------------------------------------------------------- /** * @private * @param {Object} $el * @param {String} message */ _popoverAlert: function ($el, message) { $el.popover({ trigger: 'focus', placement: 'bottom', container: 'body', html: true, content: function () { return message; } }).popover('show'); }, //-------------------------------------------------------------------------- // Handlers //-------------------------------------------------------------------------- /** * @private */ _onClick: function (slideId, voteType) { var self = this; this._rpc({ route: '/slides/slide/like', params: { slide_id: slideId, upvote: voteType === 'like', }, }).then(function (data) { if (! data.error) { self.$el.find('span.o_wslides_js_slide_like_up span').text(data.likes); self.$el.find('span.o_wslides_js_slide_like_down span').text(data.dislikes); } else { if (data.error === 'public_user') { var message = _t('Please login to vote this lesson'); var signupAllowed = data.error_signup_allowed || false; if (signupAllowed) { message = _t('Please create an account to vote this lesson'); } self._popoverAlert(self.$el, _.str.sprintf(message, (document.URL))); } else if (data.error === 'vote_done') { self._popoverAlert(self.$el, _t('You have already voted for this lesson')); } else if (data.error === 'slide_access') { self._popoverAlert(self.$el, _t('You don\'t have access to this lesson')); } else if (data.error === 'channel_membership_required') { self._popoverAlert(self.$el, _t('You must be member of this course to vote')); } else if (data.error === 'channel_comment_disabled') { self._popoverAlert(self.$el, _t('Votes and comments are disabled for this course')); } else if (data.error === 'channel_karma_required') { self._popoverAlert(self.$el, _t('You don\'t have enough karma to vote')); } else { self._popoverAlert(self.$el, _t('Unknown error')); } } }); }, _onClickUp: function (ev) { var slideId = $(ev.currentTarget).data('slide-id'); return this._onClick(slideId, 'like'); }, _onClickDown: function (ev) { var slideId = $(ev.currentTarget).data('slide-id'); return this._onClick(slideId, 'dislike'); }, }); publicWidget.registry.websiteSlidesSlideLike = publicWidget.Widget.extend({ selector: '#wrapwrap', /** * @override * @param {Object} parent */ start: function () { var self = this; var defs = [this._super.apply(this, arguments)]; $('.o_wslides_js_slide_like').each(function () { defs.push(new SlideLikeWidget(self).attachTo($(this))); }); return Promise.all(defs); }, }); return { slideLikeWidget: SlideLikeWidget, websiteSlidesSlideLike: publicWidget.registry.websiteSlidesSlideLike }; });