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