Skip to content

Commit

Permalink
fix editing mods
Browse files Browse the repository at this point in the history
  • Loading branch information
escaton committed Mar 14, 2016
1 parent 19536e7 commit 5fe2cd2
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 17 deletions.
25 changes: 16 additions & 9 deletions src/pages/bem-sidebar/blocks/injected-helpers/injected-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,37 +76,44 @@ export function getEntities() {
return res;
}

export function modAdd(owner, mod) {
export function modAdd(owner, mod, originalMod) {
var el = $0;
var classList = el.classList;
var elInitedClass = BEM.INTERNAL.buildClass(owner.block, 'js', 'inited');
var isElInited = classList.contains(elInitedClass);
if (isElInited) {
$(el).bem(owner.block).setMod(mod.name, mod.value);
var block = $(el).bem(owner.block);
if (originalMod && (originalMod.name !== mod.name)) {
block.delMod(originalMod.name);
}
block.setMod(mod.name, mod.value);
} else {
var oldClass = BEM.INTERNAL.buildClass(owner.block, owner.elem, mod.name, '.+');
var newClass = BEM.INTERNAL.buildClass(owner.block, owner.elem, mod.name, mod.value);
var modRegex = new RegExp('^' + oldClass + '$');
var maskToRemove = [BEM.INTERNAL.buildClass(owner.block, owner.elem, mod.name, '.+')];
if (originalMod && (originalMod.name !== mod.name)) {
maskToRemove.push(BEM.INTERNAL.buildClass(owner.block, owner.elem, originalMod.name, '.+'))
}
var regexToRemove = new RegExp('^(' + maskToRemove.join('|') + ')$');
var classListArray = Array.prototype.slice.call(classList, 0);
var classToRemove = classListArray.filter((className) => {
return modRegex.test(className);
return regexToRemove.test(className);
});
classToRemove.forEach((className) => {
classList.remove(className);
});
var newClass = BEM.INTERNAL.buildClass(owner.block, owner.elem, mod.name, mod.value);
classList.add(newClass);
}
}

export function modRemove(owner, mod) {
export function modRemove(owner, mod, originalMod) {
var el = $0;
var classList = el.classList;
var elInitedClass = BEM.INTERNAL.buildClass(owner.block, 'js', 'inited');
var isElInited = classList.contains(elInitedClass);
if (isElInited) {
$(el).bem(owner.block).delMod(mod.name);
$(el).bem(owner.block).delMod(originalMod.name);
} else {
var deleteClass = BEM.INTERNAL.buildClass(owner.block, owner.elem, mod.name, mod.value);
var deleteClass = BEM.INTERNAL.buildClass(owner.block, owner.elem, originalMod.name, originalMod.value);
classList.remove(deleteClass);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ class Mod extends React.Component {
window.postMessage({
cmd: 'mod-' + cmd,
owner: self.props.owner,
mod: Object.assign({}, originalMod ? self.state.originalMod : self.state.mod)
mod: Object.assign({}, self.state.mod),
originalMod: originalMod && Object.assign({}, self.state.originalMod)
}, '*');
}
modBlur(fieldName, e) {
Expand All @@ -63,7 +64,7 @@ class Mod extends React.Component {
self.props.removeMod();
self.commit('remove', true);
} else if (fieldName === 'value' && self.checkChanges()) {
self.commit('add');
self.commit('add', true);
}
}
}
Expand Down
12 changes: 6 additions & 6 deletions src/pages/bem-sidebar/blocks/sidebar/sidebar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,25 +69,25 @@ class App extends React.Component {
self.elementSelected();
break;
case 'mod-add':
self.modAdd(data.owner, data.mod);
self.modAdd(data);
break;
case 'mod-remove':
self.modRemove(data.owner, data.mod);
self.modRemove(data);
break;
default:
}
}
modAdd(owner, mod) {
modAdd({owner, mod, originalMod}) {
var self = this;
self.evalHelper.executeFunction('modAdd', [owner, mod], (result, error) => {
self.evalHelper.executeFunction('modAdd', [owner, mod, originalMod], (result, error) => {
if (error) {
console.error(error);
}
});
}
modRemove(owner, mod) {
modRemove({owner, mod, originalMod}) {
var self = this;
self.evalHelper.executeFunction('modRemove', [owner, mod], (result, error) => {
self.evalHelper.executeFunction('modRemove', [owner, mod, originalMod], (result, error) => {
if (error) {
console.error(error);
}
Expand Down

0 comments on commit 5fe2cd2

Please sign in to comment.