Skip to content

Commit 7466845

Browse files
author
Ihor Melnychenko
committed
MAGETWO-38867: Create mixin for declarative widget description
1 parent 61773e8 commit 7466845

File tree

2 files changed

+31
-57
lines changed

2 files changed

+31
-57
lines changed

lib/web/mage/apply/main.js

Lines changed: 22 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@ define([
1313
nodeSelector = '[' + dataAttr + ']';
1414

1515
/**
16-
* Initializes components assigned to a specfied element via data-* attribute.
16+
* Initializes components assigned to a specified element via data-* attribute.
1717
*
1818
* @param {HTMLElement} el - Element to initialize components with.
1919
* @param {Object|String} config - Initial components' config.
2020
* @param {String} component - Components' path.
2121
*/
2222
function init(el, config, component) {
2323
require([component], function (fn) {
24+
2425
if (typeof fn === 'object') {
2526
fn = fn[component];
2627
}
@@ -32,31 +33,7 @@ define([
3233
}
3334
});
3435
}
35-
/**
36-
* Initializes mixins assigned to a specfied component.
37-
*
38-
* @param {Object} mixinList - object contains mixins list.
39-
* @param {Object} itemContainer - object with component config and DOM element link.
40-
* @return {Promise}
41-
*/
42-
function initMixins(mixinList, itemContainer){
43-
var configStack,
44-
element = itemContainer.el,
45-
result = $.Deferred();
46-
47-
_.each(mixinList, function (mixinArray, componentName) {
48-
configStack = itemContainer.data[componentName];
49-
require(mixinArray, function(){
50-
for (var i = 0, len = arguments.length; i < len; i++){
51-
$.extend(true, configStack, arguments[i](configStack, element));
52-
}
53-
54-
result.resolve(itemContainer);
55-
});
56-
});
5736

58-
return result;
59-
}
6037
/**
6138
* Parses elements 'data-mage-init' attribute as a valid JSON data.
6239
* Note: data-mage-init attribute will be removed.
@@ -90,21 +67,27 @@ define([
9067
.map(getData)
9168
.concat(virtuals)
9269
.forEach(function (itemContainer) {
93-
var mixins = itemContainer.data.mixins;
94-
delete itemContainer.data.mixins;
70+
var configStack,
71+
element = itemContainer.el;
72+
73+
_.each(itemContainer.data, function (obj, key) {
74+
75+
if (obj.mixins) {
76+
require(obj.mixins, function () {
77+
for (var i = 0, len = arguments.length; i < len; i++) {
78+
$.extend(true, itemContainer.data[key], arguments[i](itemContainer.data[key], element));
79+
}
80+
81+
delete obj.mixins;
82+
_.each(itemContainer.data, init.bind(null, element));
83+
})
84+
} else {
85+
_.each(itemContainer.data, init.bind(null, element));
86+
}
87+
88+
}
89+
);
9590

96-
if (mixins) {
97-
$.when(
98-
initMixins(mixins, itemContainer)
99-
).then(function (mergedItemContainer) {
100-
_.each(
101-
mergedItemContainer.data,
102-
init.bind(null, mergedItemContainer.el)
103-
)
104-
});
105-
} else {
106-
_.each(itemContainer.data, init.bind(null, itemContainer.el));
107-
}
10891
});
10992
},
11093
applyFor: init

lib/web/mage/apply/scripts.js

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,39 +28,30 @@ define([
2828
* Merges provided data with a current data
2929
* of a elements' "data-mage-init" attribute.
3030
*
31-
* @param {Object} components - Object with compoenets and theirs configuration.
31+
* @param {Object} components - Object with components and theirs configuration.
3232
* @param {HTMLElement} elem - Element whose data should be modified.
3333
*/
3434
function setData(components, elem) {
35-
var data = elem.getAttribute(dataAttr),
36-
iterator;
35+
var data = elem.getAttribute(dataAttr);
3736

3837
data = !!data ? JSON.parse(data) : {};
39-
40-
if(components.mixins) {
41-
data.mixins = data.mixins || {};
42-
43-
for(iterator in components.mixins){
44-
if(!data.mixins[iterator]) {
45-
data.mixins[iterator] = components.mixins[iterator].slice();
46-
}else {
47-
data.mixins[iterator] = data.mixins[iterator].concat(components.mixins[iterator]);
48-
}
38+
_.each(components, function(obj, key) {
39+
if (_.has(obj, 'mixins')) {
40+
data[key].mixins = data[key].mixins || [];
41+
data[key].mixins = data[key].mixins.concat(obj.mixins);
42+
delete obj.mixins;
4943
}
50-
51-
delete components.mixins;
52-
}
44+
});
5345

5446
data = $.extend(true, data, components);
5547
data = JSON.stringify(data);
56-
5748
elem.setAttribute(dataAttr, data);
5849
}
5950

6051
/**
6152
* Search for the elements by privded selector and extends theirs data.
6253
*
63-
* @param {Object} components - Object with compoenets and theirs configuration.
54+
* @param {Object} components - Object with components and theirs configuration.
6455
* @param {String} selector - Selector for the elements.
6556
*/
6657
function processElems(components, selector) {

0 commit comments

Comments
 (0)