Skip to content

Commit d23e179

Browse files
authored
Merge pull request #5812 from magento-tsg/2.4.0-develop-pr55
[TSG] Fixes for 2.4.0 (pr55) (2.4.0-develop)
2 parents e10e680 + f667f74 commit d23e179

File tree

2 files changed

+97
-8
lines changed

2 files changed

+97
-8
lines changed

app/code/Magento/Ui/view/base/web/js/block-loader.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@ define([
1515
blockContentLoadingClass = '_block-content-loading',
1616
blockLoader,
1717
blockLoaderClass,
18-
loaderImageHref;
18+
blockLoaderElement = $.Deferred(),
19+
loaderImageHref = $.Deferred();
1920

2021
templateLoader.loadTemplate(blockLoaderTemplatePath).done(function (blockLoaderTemplate) {
21-
blockLoader = template($.trim(blockLoaderTemplate), {
22-
loaderImageHref: loaderImageHref
22+
loaderImageHref.done(function (loaderHref) {
23+
blockLoader = template($.trim(blockLoaderTemplate), {
24+
loaderImageHref: loaderHref
25+
});
26+
blockLoader = $(blockLoader);
27+
blockLoaderClass = '.' + blockLoader.attr('class');
28+
blockLoaderElement.resolve();
2329
});
24-
blockLoader = $(blockLoader);
25-
blockLoaderClass = '.' + blockLoader.attr('class');
2630
});
2731

2832
/**
@@ -70,7 +74,7 @@ define([
7074
}
7175

7276
return function (loaderHref) {
73-
loaderImageHref = loaderHref;
77+
loaderImageHref.resolve(loaderHref);
7478
ko.bindingHandlers.blockLoader = {
7579
/**
7680
* Process loader for block
@@ -81,9 +85,9 @@ define([
8185
element = $(element);
8286

8387
if (ko.unwrap(displayBlockLoader())) {
84-
addBlockLoader(element);
88+
blockLoaderElement.done(addBlockLoader(element));
8589
} else {
86-
removeBlockLoader(element);
90+
blockLoaderElement.done(removeBlockLoader(element));
8791
}
8892
}
8993
};
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
define([
7+
'squire',
8+
'jquery'
9+
], function (Squire, $) {
10+
'use strict';
11+
12+
var blockLoaderTmpl = '<div data-role="loader" class="loading-mask" style="position: absolute;">\n' +
13+
' <div class="loader">\n' +
14+
' <img src="<%= loaderImageHref %>" alt="Loading..." title="Loading..." style="position: absolute;">\n' +
15+
' </div>\n' +
16+
'</div>',
17+
injector = new Squire(),
18+
mocks = {
19+
'Magento_Ui/js/lib/knockout/template/loader': {
20+
/** Method stub. */
21+
loadTemplate: function () {
22+
var defer = $.Deferred();
23+
24+
defer.resolve(blockLoaderTmpl);
25+
26+
return defer;
27+
}
28+
}
29+
},
30+
obj,
31+
ko;
32+
33+
beforeEach(function (done) {
34+
injector.mock(mocks);
35+
injector.require(['Magento_Ui/js/block-loader', 'ko'], function (blockLoader, knockout) {
36+
obj = blockLoader;
37+
ko = knockout;
38+
done();
39+
});
40+
});
41+
42+
afterEach(function () {
43+
try {
44+
injector.clean();
45+
injector.remove();
46+
} catch (e) {
47+
}
48+
});
49+
50+
describe('Magento_Ui/js/block-loader', function () {
51+
var blockContentLoadingClass = '_block-content-loading',
52+
loaderImageUrl = 'https://static.magento.com/loader.gif',
53+
element = $('<span data-bind="blockLoader: isLoading"/>'),
54+
isLoading,
55+
context;
56+
57+
beforeEach(function () {
58+
isLoading = ko.observable();
59+
context = ko.bindingContext.prototype.createChildContext({
60+
isLoading: isLoading
61+
});
62+
obj(loaderImageUrl);
63+
$('body').append(element);
64+
ko.applyBindings(context, element[0]);
65+
});
66+
67+
afterEach(function () {
68+
ko.cleanNode(element[0]);
69+
element.remove();
70+
});
71+
72+
it('Check adding loader block to element', function () {
73+
isLoading(true);
74+
expect(element.hasClass(blockContentLoadingClass)).toBeTruthy();
75+
expect(element.children().attr('class')).toEqual('loading-mask');
76+
expect(element.find('img').attr('src')).toEqual(loaderImageUrl);
77+
});
78+
79+
it('Check removing loader block from element', function () {
80+
isLoading(false);
81+
expect(element.hasClass(blockContentLoadingClass)).toBeFalsy();
82+
expect(element.children().length).toEqual(0);
83+
});
84+
});
85+
});

0 commit comments

Comments
 (0)