notification.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**
  2. * Copyright © Magento, Inc. All rights reserved.
  3. * See COPYING.txt for license details.
  4. */
  5. define([
  6. 'jquery',
  7. 'mage/template',
  8. 'jquery/ui'
  9. ], function ($, mageTemplate) {
  10. 'use strict';
  11. $.widget('mage.notification', {
  12. options: {
  13. templates: {
  14. global: '<div data-role="messages" id="messages">' +
  15. '<div class="message <% if (data.error) { %>error<% } %>"><div><%- data.message %></div></div>' +
  16. '</div>',
  17. error: '<div data-role="messages" id="messages">' +
  18. '<div class="messages"><div class="message message-error error">' +
  19. '<div data-ui-id="messages-message-error"><%- data.message %></div></div>' +
  20. '</div></div>'
  21. }
  22. },
  23. placeholder: '[data-role=messages]',
  24. /**
  25. * Notification creation
  26. * @protected
  27. */
  28. _create: function () {
  29. $(document).on('ajaxComplete ajaxError', $.proxy(this._add, this));
  30. },
  31. /**
  32. * Add new message
  33. * @protected
  34. * @param {Object} event - object
  35. * @param {Object} jqXHR - The jQuery XMLHttpRequest object returned by $.ajax()
  36. */
  37. _add: function (event, jqXHR) {
  38. var response;
  39. try {
  40. response = JSON.parse(jqXHR.responseText);
  41. if (response && response.error && response['html_message']) {
  42. $(this.placeholder).html(response['html_message']);
  43. }
  44. } catch (e) {}
  45. },
  46. /**
  47. * Adds new message.
  48. *
  49. * @param {Object} data - Data with a message to be displayed.
  50. */
  51. add: function (data) {
  52. var template = data.error ? this.options.templates.error : this.options.templates.global,
  53. message = mageTemplate(template, {
  54. data: data
  55. }),
  56. messageContainer;
  57. if (typeof data.insertMethod === 'function') {
  58. data.insertMethod(message);
  59. } else {
  60. messageContainer = data.messageContainer || this.placeholder;
  61. $(messageContainer).prepend(message);
  62. }
  63. return this;
  64. },
  65. /**
  66. * Removes error messages.
  67. */
  68. clear: function () {
  69. $(this.placeholder).html('');
  70. }
  71. });
  72. return $.mage.notification;
  73. });