Skip to content

Commit

Permalink
Async remove from array
Browse files Browse the repository at this point in the history
  • Loading branch information
Vova Bilonenko committed Mar 20, 2013
1 parent c3e974c commit ff710fa
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 12 deletions.
39 changes: 39 additions & 0 deletions i-bem/__json/_async/i-bem__json_async_yes.test.js
Expand Up @@ -317,6 +317,45 @@ describe('__async bem-json', function () {

});

it('async remove from array', function () {
var json;


BEM.JSON.decl({name: 'b-test', modName: 'test', modVal: 'async-remove-from-arr'}, {
onBlock: function (ctx) {
ctx.content([
{elem: 'item', content: 'test string'},
{elem: 'item2', content: 'test string'}
], true);
},
onElem: {
'item': function (ctx) {
ctx.wait();
setTimeout(function () {
ctx.remove();
ctx.resume();
}, 100);
}
}
});

BEM.JSON.buildAsync({block: 'b-test', mods: {test: 'async-remove-from-arr'}}, function (jsonParam) {
json = jsonParam;
});

waitsFor(function () {
return json;
}, 'json never builded', 1000);

runs(function () {
expect(json).toBeDefined();
expect(json.content).toBeDefined();
expect(json.content[0]).toBe(null);
expect(json.content[1].content).toBe('test string');
});

});

it('async wrap', function () {
var json;

Expand Down
32 changes: 21 additions & 11 deletions i-bem/__json/i-bem__json.js
Expand Up @@ -144,9 +144,13 @@ if (typeof BEM === 'undefined') {
* @param {number} [siblingsCount] amount of elents in parent content
* @return {*} bemjson
*/
_buildInner: function (params, pos, siblingsCount) {
_buildInner: function (params, pos, siblingsCount, parent) {
var currBlock,
paramsType = type(params);
if (parent && isBem(params)) {
params._parent = parent;
params._pos = pos;
}
if (paramsType === 'object' || paramsType === 'array') {
if (
(!params.block) || //not block (elem or array)
Expand Down Expand Up @@ -445,24 +449,27 @@ if (typeof BEM === 'undefined') {

//remove
if (this._isRemoved) {
//remove from parent
if (parent) {
parent.content = null;
//remove from array
if (isArray(parent) && this._params._pos) {
parent[this._params._pos - 1] = null;
} else if (parent.content) { //remove from parent.content
parent.content = null;
}
}
//remove param
this._params = null;
return;
}

//add link to parent for remove
if (isBem(params.content)) {
params.content._parent = params;
}

//build content
params.content = this._buildInner(params.content, 1, 1);
params.content = this._buildInner(params.content, 1, 1, params);

//build wraper
if (params._wrapper) {
this._params = this._buildInner(params._wrapper, 1, 1);
this._params = this._buildInner(params._wrapper, 1, 1, parent);
if (parent) {
parent.content = this._params;
}
Expand Down Expand Up @@ -499,11 +506,14 @@ if (typeof BEM === 'undefined') {
this._buildBem();
params = this._params;
} else if (isArray(params)) { //build array
params = params.map(function (param, pos) {
return ctx._buildInner(param, pos + 1, params.length); //pos start from 1
params.forEach(function (param, pos) {
params[pos] = ctx._buildInner(param, pos + 1, params.length, params); //pos start from 1
});
// params = params.map(function (param, pos) {
// return ctx._buildInner(param, pos + 1, params.length, params); //pos start from 1
// });
} else if (params.content) { //some object with content
params.content = this._buildInner(params.content, 1, 1);
params.content = this._buildInner(params.content, 1, 1, params);
}
return params;
},
Expand Down
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -2,7 +2,7 @@
"author": "Vova Bilonenko",
"name": "bem-json",
"description": "Template engine for BEM",
"version": "0.1.1",
"version": "0.1.2",
"repository": {
"type": "git",
"url": "https://github.com/delfrrr/bem-json.git"
Expand Down

0 comments on commit ff710fa

Please sign in to comment.