selector-parse
Advanced tools
Comparing version 0.1.1 to 0.2.0
@@ -0,1 +1,4 @@ | ||
# 0.2.0 | ||
Change output that according to `HTMLElement` | ||
# 0.1.1 | ||
@@ -2,0 +5,0 @@ Add `jsnext:main` in pkg |
@@ -24,8 +24,11 @@ /*! | ||
selectors.forEach(function (selector) { | ||
var detail = specity(selector); | ||
var detail = specity(selector.trim()); | ||
if (detail.attr) { | ||
if (!result[detail.attr]) { | ||
result[detail.attr] = []; | ||
if (result[detail.attr] && detail.attr === 'class') { | ||
result.class.push(detail.val); | ||
} else if (detail.attr === 'class') { | ||
result.class = [detail.val]; | ||
} else if (!result[detail.attr]) { | ||
result[detail.attr] = detail.val; | ||
} | ||
result[detail.attr].push(detail.val); | ||
} else { | ||
@@ -36,5 +39,18 @@ result.tag = detail.val; | ||
result.dataSet = Object.keys(result).filter(function (attr) { | ||
return attr.indexOf('data-') === 0; | ||
}).reduce(function (dataSet, attr) { | ||
dataSet[attr.substr(5)] = result[attr]; | ||
delete result[attr]; | ||
return dataSet; | ||
}, {}); | ||
if (!result.tag) { | ||
result.tag = 'div'; | ||
} | ||
if (result.class) { | ||
result.className = result.classList = result.class; | ||
result.className = result.className.join(' '); | ||
delete result.class; | ||
} | ||
return result; | ||
@@ -41,0 +57,0 @@ } |
@@ -6,2 +6,2 @@ /*! | ||
*/ | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.selectorParse=e()}(this,function(){"use strict";function t(t){var r=/([#.[]?[^#.\[]+)/g,n=t.match(r);return n?e(n):{}}function e(t){var e={};return t.forEach(function(t){var n=r(t);n.attr?(e[n.attr]||(e[n.attr]=[]),e[n.attr].push(n.val)):e.tag=n.val}),e.tag||(e.tag="div"),e}function r(t){if("#"===t[0])return{attr:"id",val:t.slice(1,t.length)};if("."===t[0])return{attr:"class",val:t.slice(1,t.length)};if("["===t[0]&&"]"===t[t.length-1]){var e=t.slice(1,t.length-1).split("="),r=e[0],n=e[1]||!0;return{attr:r,val:n}}return{attr:null,val:t}}return t}); | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.selectorParse=e()}(this,function(){"use strict";function t(t){var a=/([#.[]?[^#.\[]+)/g,r=t.match(a);return r?e(r):{}}function e(t){var e={};return t.forEach(function(t){var r=a(t.trim());r.attr?e[r.attr]&&"class"===r.attr?e["class"].push(r.val):"class"===r.attr?e["class"]=[r.val]:e[r.attr]||(e[r.attr]=r.val):e.tag=r.val}),e.dataSet=Object.keys(e).filter(function(t){return 0===t.indexOf("data-")}).reduce(function(t,a){return t[a.substr(5)]=e[a],delete e[a],t},{}),e.tag||(e.tag="div"),e["class"]&&(e.className=e.classList=e["class"],e.className=e.className.join(" "),delete e["class"]),e}function a(t){if("#"===t[0])return{attr:"id",val:t.slice(1,t.length)};if("."===t[0])return{attr:"class",val:t.slice(1,t.length)};if("["===t[0]&&"]"===t[t.length-1]){var e=t.slice(1,t.length-1).split("="),a=e[0],r=e[1]||!0;return{attr:a,val:r}}return{attr:null,val:t}}return t}); |
@@ -13,8 +13,11 @@ function selectorParse(selector) { | ||
selectors.forEach(selector => { | ||
const detail = specity(selector); | ||
const detail = specity(selector.trim()); | ||
if (detail.attr) { | ||
if (!result[detail.attr]) { | ||
result[detail.attr] = []; | ||
if (result[detail.attr] && detail.attr === 'class') { | ||
result.class.push(detail.val); | ||
} else if (detail.attr === 'class') { | ||
result.class = [detail.val]; | ||
} else if (!result[detail.attr]) { | ||
result[detail.attr] = detail.val; | ||
} | ||
result[detail.attr].push(detail.val); | ||
} else { | ||
@@ -25,5 +28,18 @@ result.tag = detail.val; | ||
result.dataSet = Object.keys(result) | ||
.filter(attr => attr.indexOf('data-') === 0) | ||
.reduce((dataSet, attr) => { | ||
dataSet[attr.substr(5)] = result[attr]; | ||
delete result[attr]; | ||
return dataSet; | ||
}, {}); | ||
if (!result.tag) { | ||
result.tag = 'div'; | ||
} | ||
if (result.class) { | ||
result.className = result.classList = result.class; | ||
result.className = result.className.join(' '); | ||
delete result.class; | ||
} | ||
return result; | ||
@@ -30,0 +46,0 @@ } |
{ | ||
"name": "selector-parse", | ||
"version": "0.1.1", | ||
"version": "0.2.0", | ||
"description": "Selector parser", | ||
@@ -14,7 +14,7 @@ "main": "dist/selector-parse.js", | ||
"postpublish": "rm -rf es", | ||
"test": "xo && ava" | ||
"test": "xo && ava -v" | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/totora0155/selector-parse.js.git" | ||
"url": "git+https://github.com/totora0155/selector-parse.git" | ||
}, | ||
@@ -29,5 +29,5 @@ "keywords": [ | ||
"bugs": { | ||
"url": "https://github.com/totora0155/selector-parse.js/issues" | ||
"url": "https://github.com/totora0155/selector-parse/issues" | ||
}, | ||
"homepage": "https://github.com/totora0155/selector-parse.js#readme", | ||
"homepage": "https://github.com/totora0155/selector-parse#readme", | ||
"devDependencies": { | ||
@@ -44,4 +44,7 @@ "ava": "^0.13.0", | ||
"esnext": true, | ||
"space": 2 | ||
"space": 2, | ||
"ignores": [ | ||
"es/**" | ||
] | ||
} | ||
} |
@@ -21,3 +21,2 @@ # Selector Parse | ||
<script src="selector-parse.js"></script> | ||
<!-- <script src="selector-parse.min.js"></script> --> | ||
``` | ||
@@ -33,17 +32,18 @@ | ||
const selectorParse = require('selector-parse'); | ||
const selector = 'a#btn.box__a.icon__link[role=button][data-bool]'; | ||
const selector = `input | ||
#name | ||
.default.input__text | ||
[placeholder=John][required] | ||
[data-id=123][data-key=foo]`; | ||
const result = selectorParse(selector); | ||
console.log(result); | ||
``` | ||
output | ||
// { tag: 'input', | ||
// id: 'name', | ||
// placeholder: 'John', | ||
// required: true, | ||
// dataSet: { id: '123', key: 'foo' }, | ||
// classList: [ 'default', 'input__text' ], | ||
// className: 'default input__text' } | ||
```js | ||
{ tag: 'a', | ||
id: [ 'btn' ], | ||
class: [ 'box__a', 'icon__link' ], | ||
role: [ 'button' ], | ||
'data-bool': [ true ] } | ||
``` |
export default { | ||
entry: 'lib/selector-parse.js', | ||
dest: 'es/selector-parse.js', | ||
dest: 'es/selector-parse.js' | ||
}; |
const selectorParse = require('..'); | ||
const test = require('ava'); | ||
test('a', t => { | ||
const {tag} = selectorParse('a'); | ||
t.is(tag, 'a'); | ||
}); | ||
test('a#id', t => { | ||
const {tag, id} = selectorParse('a#id'); | ||
t.is(tag, 'a'); | ||
t.is(id, 'id'); | ||
}); | ||
test('#id', t => { | ||
const result = selectorParse('#id'); | ||
t.is(result.tag, 'div', 'Not equal result.tag is \'div\''); | ||
t.same(result.id, ['id'], 'Not equal result.id is [\'id\']'); | ||
const {tag, id} = selectorParse('#id'); | ||
t.is(tag, 'div'); | ||
t.is(id, 'id'); | ||
}); | ||
test('a.class', t => { | ||
const result = selectorParse('a.class'); | ||
t.is(result.tag, 'a', 'Not equal result.tag is \'a\''); | ||
t.same(result.class, ['class'], 'Not equal reuslt.class is [\'class\']'); | ||
test('#valid#invalid', t => { | ||
const {id} = selectorParse('#valid#invalid'); | ||
t.is(id, 'valid'); | ||
}); | ||
test('.class', t => { | ||
const {className, classList} = selectorParse('a.class'); | ||
t.is(className, 'class'); | ||
t.same(classList, ['class']); | ||
}); | ||
test('.btn.btn--large[class=icon__link]', t => { | ||
const {className, classList} = selectorParse('.btn.btn--large[class=icon__link]'); | ||
t.is(className, 'btn btn--large icon__link'); | ||
t.same(classList, ['btn', 'btn--large', 'icon__link']); | ||
}); | ||
test('[test]', t => { | ||
const result = selectorParse('[test]'); | ||
t.same(result.test, [true], 'Not equal result.test is [true]'); | ||
const {test} = selectorParse('[test]'); | ||
t.ok(test); | ||
}); | ||
test('[test][test=false]', t => { | ||
const {test} = selectorParse('[test]'); | ||
t.ok(test); | ||
}); | ||
test('[data-id=1][data-lang=js]', t => { | ||
const result = selectorParse('[data-id=1][data-lang=js]'); | ||
t.same(result['data-id'], ['1'], 'Not equal result[\'data-id\'] is [\'1\']'); | ||
t.same(result['data-lang'], ['js'], 'Not equal result[\'data-lang\'] is [\'js\']'); | ||
const {dataSet} = selectorParse('[data-id=1][data-lang=js]'); | ||
t.is(Object.keys(dataSet).length, 2); | ||
t.is(dataSet.id, '1'); | ||
t.is(dataSet.lang, 'js'); | ||
}); |
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
10528
208
1
1