odoo.define('website_slides.slides_share', function (require) {
'use strict';
var publicWidget = require('web.public.widget');
require('website_slides.slides');
var ShareMail = publicWidget.Widget.extend({
events: {
'click button': '_sendMail',
},
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
/**
* @private
*/
_sendMail: function () {
var self = this;
var input = this.$('input');
var slideID = this.$('button').data('slide-id');
if (input.val() && input[0].checkValidity()) {
this.$el.removeClass('o_has_error').find('.form-control, .custom-select').removeClass('is-invalid');
this._rpc({
route: '/slides/slide/send_share_email',
params: {
slide_id: slideID,
email: input.val(),
},
}).then(function () {
self.$el.html($('
Thank you! Mail has been sent.
'));
});
} else {
this.$el.addClass('o_has_error').find('.form-control, .custom-select').addClass('is-invalid');
input.focus();
}
},
});
publicWidget.registry.websiteSlidesShare = publicWidget.Widget.extend({
selector: '#wrapwrap',
events: {
'click a.o_slides_social_share': '_onSlidesSocialShare',
},
/**
* @override
* @param {Object} parent
*/
start: function (parent) {
var self = this;
var defs = [this._super.apply(this, arguments)];
defs.push(new ShareMail(this).attachTo($('.oe_slide_js_share_email')));
if ($('div#statistic').length) {
this.slideURL = $('div#statistic').attr('slide-url');
this.socialURLs = {
linkedin: 'https://www.linkedin.com/countserv/count/share?url=',
twitter: 'https://cdn.api.twitter.com/1/urls/count.json?url=',
facebook: 'https://graph.facebook.com/?id=',
};
}
_.each(this.socialURLs, function (value, key) {
self._updateStatistics(key, self.slideURL);
});
return Promise.all(defs);
},
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
/**
* @private
* @param {string} socialSite
* @param {string} slide_url
*/
_updateStatistics: function (socialSite, slideURL) {
var self = this;
$.ajax({
url: self.socialURLs[socialSite] + slideURL,
dataType: 'jsonp',
success: function (data) {
var shareCount = (socialSite === 'facebook' ? data.shares : data.count) || 0;
$('#' + socialSite + '-badge').text(shareCount);
$('#total-share').text(parseInt($('#total-share').text()) + parseInt($('#' + socialSite + '-badge').text()));
},
});
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* @override
* @param {Object} ev
*/
_onSlidesSocialShare: function (ev) {
var self = this;
ev.preventDefault();
var key = $(ev.currentTarget).attr('social-key');
var popUpURL = $(ev.currentTarget).attr('href');
var popUp = window.open(popUpURL, 'Share Dialog', 'width=626,height=436');
$(window).on('focus', function () {
if (popUp.closed) {
self._updateStatistics(key, self.slide_url);
$(window).off('focus');
}
});
},
});
});