Skip to content

Commit

Permalink
Merge issue3
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinkace committed Sep 20, 2016
1 parent 5584bbb commit 2f71ac1
Show file tree
Hide file tree
Showing 48 changed files with 1,035 additions and 357 deletions.
4 changes: 2 additions & 2 deletions .eslintrc
Expand Up @@ -80,7 +80,7 @@
"no-mixed-spaces-and-tabs": 2,
"no-multi-spaces": [2, { "exceptions" : { "VariableDeclarator": true } }],
"no-multi-str": 2,
"no-multiple-empty-lines": [2, { "max": 1 }],
"no-multiple-empty-lines": [2, { "max": 2 }],
"no-native-reassign": 2,
"no-negated-in-lhs": 2,
"no-new": 2,
Expand Down Expand Up @@ -125,7 +125,7 @@
"no-with": 2,
"object-property-newline": [2, { "allowMultiplePropertiesPerLine": true }],
"one-var": [2, { "initialized": "always" }],
"operator-linebreak": [2, "after", { "overrides": { "?": "before", ":": "before" } }],
"operator-linebreak": [2, "after", { "overrides": { "?": "after", ":": "after" } }],
"padded-blocks": [2, "never"],
"quotes": [2, "double", { "avoidEscape": true, "allowTemplateLiterals": true }],
"rest-spread-spacing": [2, "never"],
Expand Down
44 changes: 25 additions & 19 deletions lib/addClassNameToNode.js
@@ -1,33 +1,39 @@
"use strict";

const get = require("lodash/get"),
set = require("lodash/set"),
const get = require("lodash/get"),
set = require("lodash/set"),
uniq = require("lodash/uniq"),
concat = require("lodash/concat");

pseudoRegexp = require("./pseudoRegexp");

module.exports = function(node, className) {
if(get(node, [ "attrs", "class" ])) {
node.attrs.class = `${node.attrs.class} ${className}`
.split(" ")
.sort((class1, class2) => {
let class1Test = pseudoRegexp.test(class1);
module.exports = function(node) {
let classes,
pseudoClasses;

if(class1Test ? pseudoRegexp.test(class2) : !pseudoRegexp.test(class2)) {
return class1 > class2;
}
if(!node.pseudo || !node.pseudo.length) {
return node;
}

classes = (get(node, [ "attrs", "class" ]) || "").split(" ");

pseudoClasses = uniq(node.pseudo)
.filter((pseudo) => {
// don't add undefined classes, or if already present
if(!pseudo || classes.indexOf(pseudo) !== -1) {
return false;
}

if(pseudoRegexp.test(class2)) {
return -1;
}
return true;
})
.sort();

return 1;
})
.join(" ");
delete node.pseudo;

if(!pseudoClasses.length) {
return node;
}

set(node, [ "attrs", "class" ], className);
set(node, [ "attrs", "class" ], concat(classes, pseudoClasses).join(" ").trim());

return node;
};
48 changes: 40 additions & 8 deletions lib/addClassNames.js
Expand Up @@ -4,18 +4,50 @@ const pseudoRegexp = require("./pseudoRegexp"),

groups = require("./groups"),

uniq = require("lodash/uniq");
classNamer = require("./classNamer"),

module.exports = function addClassNames(classNames, include) {
include.forEach((inc) => {
if(pseudoRegexp.test(inc)) {
return classNames.push(inc);
flatten = require("lodash/flatten");


function key(o, i) {
i = i || 0;

return Object.keys(o)[i];
}

function value(o, i) {
i = i || 0;

return o[key(o, i)];
}


module.exports = function(classNames, include) {
include = typeof include === "string" ? [ include ] : include;

flatten(include).forEach((inc) => {
if(typeof inc === "string") {
inc = {
classOrGroup : inc,
classNamer : classNamer
};
} else {
inc = {
classOrGroup : key(inc),
classNamer : typeof value(inc) === "function" ? value(inc) : classNamer.bind(value(inc))
};
}

if(pseudoRegexp.test(inc.classOrGroup)) {
classNames[inc.classOrGroup] = inc.classNamer;

return;
}

groups[inc].forEach((groupItem) => {
classNames.push(groupItem);
groups[inc.classOrGroup].forEach((className) => {
classNames[className] = inc.classNamer;
});
});

return uniq(classNames);
return classNames;
};
9 changes: 9 additions & 0 deletions lib/addPseudoToNode.js
@@ -0,0 +1,9 @@
"use strict";

module.exports = function(node, className) {
node.pseudo ?
node.pseudo.push(className) :
node.pseudo = [ className ];

return node;
};
19 changes: 10 additions & 9 deletions lib/classNameFunctions/default.js
@@ -1,17 +1,19 @@
"use strict";

const walk = require("posthtml/lib/api").walk,
get = require("lodash/get"),

addClassNameToNode = require("../addClassNameToNode"),

const className = ":default",
eligibleTags = [
"button",
"input"
],
className = ":default";

module.exports = function(node) {
walk = require("posthtml/lib/api").walk,

addPseudoToNode = require("../addPseudoToNode"),

get = require("lodash/get");


module.exports = function(classNamer, node) {
let test = false;

if(!node.tag || node.tag !== "form" || !node.content.length) {
Expand All @@ -25,9 +27,8 @@ module.exports = function(node) {
}

test = true;
addClassNameToNode(subNode, className);

return subNode;
return addPseudoToNode(subNode, classNamer(className));
});

return node;
Expand Down
9 changes: 5 additions & 4 deletions lib/classNameFunctions/disabled.js
@@ -1,12 +1,13 @@
"use strict";

const addClassNameToNode = require("../addClassNameToNode"),
const className = ":disabled",

className = ":disabled";
addPseudoToNode = require("../addPseudoToNode");

module.exports = function(node) {

module.exports = function(classNamer, node) {
if(node.attrs && typeof node.attrs.disabled === "string") {
addClassNameToNode(node, className);
addPseudoToNode(node, classNamer(className));
}

return node;
Expand Down
13 changes: 6 additions & 7 deletions lib/classNameFunctions/empty.js
@@ -1,19 +1,18 @@
"use strict";

const addClassNameToNode = require("../addClassNameToNode"),

className = ":empty",

const className = ":empty",
ineligibleTags = [
"html"
];
],

addPseudoToNode = require("../addPseudoToNode");

module.exports = function(node) {
module.exports = function(classNamer, node) {
if(!node.tag || node.content || ineligibleTags.indexOf(node.tag) >= 0) {
return node;
}

addClassNameToNode(node, className);
addPseudoToNode(node, classNamer(className));

return node;
};
18 changes: 9 additions & 9 deletions lib/classNameFunctions/enabled.js
@@ -1,11 +1,6 @@
"use strict";

const get = require("lodash/get"),

addClassNameToNode = require("../addClassNameToNode"),

className = ":enabled",

const className = ":enabled",
eligibleTags = [
"a",
"button",
Expand All @@ -15,9 +10,14 @@ const get = require("lodash/get"),
"option",
"select",
"textarea"
];
],

addPseudoToNode = require("../addPseudoToNode"),

get = require("lodash/get");


module.exports = function(node) {
module.exports = function(classNamer, node) {
if(!node.tag) {
return node;
}
Expand All @@ -27,7 +27,7 @@ module.exports = function(node) {
return node;
}

addClassNameToNode(node, className);
addPseudoToNode(node, classNamer(className));
}

return node;
Expand Down
9 changes: 6 additions & 3 deletions lib/classNameFunctions/first-child.js
@@ -1,8 +1,11 @@
"use strict";

const addClassNameToNode = require("../addClassNameToNode");
const className = ":first-child",

module.exports = function(node) {
addPseudoToNode = require("../addPseudoToNode");


module.exports = function(classNamer, node) {
if(!node.tag || !node.content || !node.content.length) {
return node;
}
Expand All @@ -12,7 +15,7 @@ module.exports = function(node) {
return false;
}

addClassNameToNode(child, ":first-child");
addPseudoToNode(child, classNamer(className));

return true;
});
Expand Down
9 changes: 6 additions & 3 deletions lib/classNameFunctions/first-of-type.js
@@ -1,8 +1,11 @@
"use strict";

const addClassNameToNode = require("../addClassNameToNode");
const className = ":first-of-type",

module.exports = function(node) {
addPseudoToNode = require("../addPseudoToNode");


module.exports = function(classNamer, node) {
let tags = [];

if(!node.tag || !node.content || !node.content.length) {
Expand All @@ -15,7 +18,7 @@ module.exports = function(node) {
}

tags.push(child.tag);
addClassNameToNode(child, ":first-of-type");
addPseudoToNode(child, classNamer(className));
});

return node;
Expand Down
9 changes: 6 additions & 3 deletions lib/classNameFunctions/last-child.js
@@ -1,8 +1,11 @@
"use strict";

const addClassNameToNode = require("../addClassNameToNode");
const className = ":last-child",

module.exports = function(node) {
addPseudoToNode = require("../addPseudoToNode");


module.exports = function(classNamer, node) {
let lastChild;

if(!node.tag || !node.content || !node.content.length) {
Expand All @@ -18,7 +21,7 @@ module.exports = function(node) {
});

if(lastChild) {
addClassNameToNode(lastChild, ":last-child");
addPseudoToNode(lastChild, classNamer(className));
}

return node;
Expand Down
11 changes: 7 additions & 4 deletions lib/classNameFunctions/last-of-type.js
@@ -1,10 +1,13 @@
"use strict";

const each = require("lodash/each"),
const className = ":last-of-type",

addClassNameToNode = require("../addClassNameToNode");
addPseudoToNode = require("../addPseudoToNode"),

module.exports = function(node) {
each = require("lodash/each");


module.exports = function(classNamer, node) {
let lastChildren = {};

if(!node.tag || !node.content || !node.content.length) {
Expand All @@ -20,7 +23,7 @@ module.exports = function(node) {
});

each(lastChildren, (child) => {
addClassNameToNode(child, ":last-of-type");
addPseudoToNode(child, classNamer(className));
});

return node;
Expand Down
9 changes: 6 additions & 3 deletions lib/classNameFunctions/only-child.js
@@ -1,8 +1,11 @@
"use strict";

const addClassNameToNode = require("../addClassNameToNode");
const className = ":only-child",

module.exports = function(node) {
addPseudoToNode = require("../addPseudoToNode");


module.exports = function(classNamer, node) {
let onlyChild;

if(!node.tag || !node.content || !node.content.length) {
Expand All @@ -28,7 +31,7 @@ module.exports = function(node) {
});

if(onlyChild) {
addClassNameToNode(onlyChild, ":only-child");
addPseudoToNode(onlyChild, classNamer(className));
}

return node;
Expand Down

0 comments on commit 2f71ac1

Please sign in to comment.