PageRenderTime 40ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/addons/website_mass_mailing/static/src/js/website_mass_mailing.js

https://gitlab.com/thanhchatvn/cloud-odoo
JavaScript | 159 lines | 135 code | 22 blank | 2 comment | 20 complexity | 9a8fdb5b6b11afaf6b5d64be1c21d341 MD5 | raw file
  1. odoo.define('mass_mailing.website_integration', function (require) {
  2. "use strict";
  3. var ajax = require('web.ajax');
  4. var utils = require('web.utils');
  5. var animation = require('web_editor.snippets.animation');
  6. var website = require('website.website');
  7. animation.registry.subscribe = animation.Class.extend({
  8. selector: ".js_subscribe",
  9. start: function (editable_mode) {
  10. var self = this;
  11. // set value and display button
  12. self.$target.find("input").removeClass("hidden");
  13. ajax.jsonRpc('/website_mass_mailing/is_subscriber', 'call', {
  14. list_id: this.$target.data('list-id'),
  15. }).always(function (data) {
  16. self.$target.find('input.js_subscribe_email')
  17. .val(data.email ? data.email : "")
  18. .attr("disabled", data.is_subscriber && data.email.length ? "disabled" : false);
  19. self.$target.attr("data-subscribe", data.is_subscriber ? 'on' : 'off');
  20. self.$target.find('a.js_subscribe_btn')
  21. .attr("disabled", data.is_subscriber && data.email.length ? "disabled" : false);
  22. self.$target.removeClass("hidden");
  23. self.$target.find('.js_subscribe_btn').toggleClass('hidden', !!data.is_subscriber);
  24. self.$target.find('.js_subscribed_btn').toggleClass('hidden', !data.is_subscriber);
  25. });
  26. // not if editable mode to allow designer to edit alert field
  27. if (!editable_mode) {
  28. $('.js_subscribe > .alert').addClass("hidden");
  29. $('.js_subscribe > .input-group-btn.hidden').removeClass("hidden");
  30. this.$target.find('.js_subscribe_btn').on('click', function (event) {
  31. event.preventDefault();
  32. self.on_click();
  33. });
  34. }
  35. },
  36. on_click: function () {
  37. var self = this;
  38. var $email = this.$target.find(".js_subscribe_email:visible");
  39. if ($email.length && !$email.val().match(/.+@.+/)) {
  40. this.$target.addClass('has-error');
  41. return false;
  42. }
  43. this.$target.removeClass('has-error');
  44. ajax.jsonRpc('/website_mass_mailing/subscribe', 'call', {
  45. 'list_id': this.$target.data('list-id'),
  46. 'email': $email.length ? $email.val() : false,
  47. }).then(function (subscribe) {
  48. self.$target.find(".js_subscribe_email, .input-group-btn").addClass("hidden");
  49. self.$target.find(".alert").removeClass("hidden");
  50. self.$target.find('input.js_subscribe_email').attr("disabled", subscribe ? "disabled" : false);
  51. self.$target.attr("data-subscribe", subscribe ? 'on' : 'off');
  52. });
  53. },
  54. });
  55. animation.registry.newsletter_popup = animation.Class.extend({
  56. selector: ".o_newsletter_popup",
  57. start: function (editable_mode) {
  58. var self = this;
  59. var popupcontent = self.$target.find(".o_popup_content_dev").empty();
  60. if (!self.$target.data('list-id')) return;
  61. ajax.jsonRpc('/website_mass_mailing/get_content', 'call', {
  62. newsletter_id: self.$target.data('list-id')
  63. }).then(function (data) {
  64. if (data.content) {
  65. $('<div></div>').append(data.content).appendTo(popupcontent);
  66. }
  67. self.$target.find('input.popup_subscribe_email').val(data.email || "");
  68. self.redirect_url = data.redirect_url;
  69. if (!editable_mode && !data.is_subscriber) {
  70. $(document).on('mouseleave', _.bind(self.show_banner, self));
  71. self.$target.find('.popup_subscribe_btn').on('click', function (event) {
  72. event.preventDefault();
  73. self.on_click_subscribe();
  74. });
  75. } else { $(document).off('mouseleave'); }
  76. });
  77. },
  78. on_click_subscribe: function () {
  79. var self = this;
  80. var $email = self.$target.find(".popup_subscribe_email:visible");
  81. if ($email.length && !$email.val().match(/.+@.+/)) {
  82. self.$target.addClass('has-error');
  83. return false;
  84. }
  85. self.$target.removeClass('has-error');
  86. ajax.jsonRpc('/website_mass_mailing/subscribe', 'call', {
  87. 'list_id': self.$target.data('list-id'),
  88. 'email': $email.length ? $email.val() : false
  89. }).then(function (subscribe) {
  90. self.$target.find('#o_newsletter_popup').modal('hide');
  91. $(document).off('mouseleave');
  92. if (self.redirect_url) {
  93. if (_.contains(self.redirect_url.split('/'), window.location.host) || self.redirect_url.indexOf('/')== 0) {
  94. window.location.href = self.redirect_url;
  95. } else { window.open(self.redirect_url, '_blank'); }
  96. }
  97. });
  98. },
  99. show_banner: function() {
  100. var self = this;
  101. if (!utils.get_cookie("newsletter-popup-"+ self.$target.data('list-id')) && self.$target) {
  102. $('#o_newsletter_popup:first').modal('show').css({
  103. 'margin-top': '70px',
  104. 'position': 'fixed'
  105. });
  106. document.cookie = "newsletter-popup-"+ self.$target.data('list-id') +"=" + true + ";path=/";
  107. }
  108. }
  109. });
  110. });
  111. odoo.define('mass_mailing.unsubscribe', function (require) {
  112. var ajax = require('web.ajax');
  113. require('web_editor.base'); // wait for implicit dependencies to load
  114. if(!$('.o_unsubscribe_form').length) {
  115. return $.Deferred().reject("DOM doesn't contain '.o_unsubscribe_form'");
  116. }
  117. $('#unsubscribe_form').on('submit', function(e) {
  118. e.preventDefault();
  119. var email = $("input[name='email']").val();
  120. var mailing_id = parseInt($("input[name='mailing_id']").val());
  121. var checked_ids = [];
  122. $("input[type='checkbox']:checked").each(function(i){
  123. checked_ids[i] = parseInt($(this).val());
  124. });
  125. var unchecked_ids = [];
  126. $("input[type='checkbox']:not(:checked)").each(function(i){
  127. unchecked_ids[i] = parseInt($(this).val());
  128. });
  129. ajax.jsonRpc('/mail/mailing/unsubscribe', 'call', {'opt_in_ids': checked_ids, 'opt_out_ids': unchecked_ids, 'email': email, 'mailing_id': mailing_id})
  130. .then(function(result) {
  131. $('.alert-info').html('Your changes has been saved.').removeClass('alert-info').addClass('alert-success');
  132. })
  133. .fail(function() {
  134. $('.alert-info').html('You changes has not been saved, try again later.').removeClass('alert-info').addClass('alert-warning');
  135. });
  136. });
  137. });