Skip to content

Commit 71ea3a8

Browse files
committed
ADD: test for localize
0 parents  commit 71ea3a8

13 files changed

+514
-0
lines changed

.editorconfig

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
root=true
2+
3+
[*]
4+
indent_style=space
5+
indent_size=2
6+
end_of_line=lf
7+
charset=utf-8

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

.travis.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
language: node_js
2+
3+
node_js:
4+
- '6.2.1'
5+
6+
script: 'npm test'

README.md

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# cssobj-plugin-selector-localize
2+
3+
Localize class names for cssobj.
4+
5+
## Install
6+
7+
install from github directly:
8+
9+
``` javascript
10+
npm install cssobj/cssobj-plugin-selector-localize
11+
```
12+
13+
## API
14+
15+
``` javascript
16+
var localize = require('cssobj-plugin-selector-localize')
17+
var loc = localize(prefix, localNames)
18+
```
19+
20+
### prefix
21+
22+
- Type: `String`
23+
24+
- Default: Random String
25+
26+
If pass empty string `''`, will use `''` (empty prefix)
27+
28+
If pass other falsy value, will use default.
29+
30+
### localNames
31+
32+
- Type: `Object`
33+
34+
- Default: `{}`
35+
36+
**key/val** pair to define how class name map into local name.
37+
38+
Key is original class name.
39+
40+
Val is localized name.
41+
42+
## Usage
43+
44+
### Localize
45+
46+
``` javascript
47+
var localize = require('cssobj-plugin-selector-localize')
48+
var ret = cssobj({'.item': {color: 'red'}}, {
49+
plugins:{ selector: localize() }
50+
})
51+
// css is => ._1hisnf23_item {color: red;}
52+
53+
// you can get the map using:
54+
ret.map('item') // === _1hisnf23_item
55+
56+
```
57+
58+
### Global
59+
60+
There's 2 way to make class **Global**
61+
62+
#### 1. :global(classNames)
63+
64+
Add **:global()** to wrap class names, to make them global.
65+
66+
``` javascript
67+
var ret = cssobj({'body :global(.nav .item) .login': {color: 'red'}}, {
68+
plugins:{ selector: localize() }
69+
})
70+
// css is => body .nav .item ._1hisnf23_login {color: red;}
71+
```
72+
73+
#### 2. .!className
74+
75+
Just add **!** in front of class name, if you want it global.
76+
77+
``` javascript
78+
var ret = cssobj({'body .!nav .!item .login': {color: 'red'}}, {
79+
plugins:{ selector: localize() }
80+
})
81+
// css is => body .nav .item ._1hisnf23_login {color: red;}
82+
```
83+
84+
### Custom Prefix
85+
86+
You can control the prefix:
87+
88+
``` javascript
89+
var ret = cssobj({'body .nav .item .login': {color: 'red'}}, {
90+
plugins:{ selector: localize('_your_prefix_') }
91+
})
92+
// css is => body ._your_prefix_nav ._your_prefix_item ._your_prefix_login {color: red;}
93+
```
94+
95+
96+
### Custom Local Names
97+
98+
You can control the map for each class name:
99+
100+
``` javascript
101+
var ret = cssobj({'body .nav .!item .login': {color: 'red'}}, {
102+
plugins:{ selector: localize(null, {nav: '_abc_'}) }
103+
})
104+
// css is => body ._abc_ .!item ._1hisnf23_login {color: red;}
105+
```
106+
107+
### Get the class map
108+
109+
``` javascript
110+
var ret = cssobj({'body .nav .item .login': {color: 'red'}}, {
111+
plugins:{ selector: localize('_prefix_', {nav: '_abc_'}) }
112+
})
113+
114+
ret.map('nav') // === _abc_
115+
ret.map('item') // === _prefix_item
116+
```
117+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
define('cssobj_plugin_selector_localize', function () { 'use strict';
2+
3+
// random string, should used across all cssobj plugins
4+
var random = (function () {
5+
var count = 0
6+
return function () {
7+
count++
8+
return '_' + Math.floor(Math.random() * Math.pow(2, 32)).toString(36) + count + '_'
9+
}
10+
})()
11+
12+
var reClass = /:global\s*\(((?:\s*\.[A-Za-z0-9_-]+\s*)+)\)|(\.)([!A-Za-z0-9_-]+)/g
13+
14+
function cssobj_plugin_selector_localize(prefix, localNames) {
15+
16+
prefix = prefix!=='' ? prefix || random() : ''
17+
18+
localNames = localNames || {}
19+
20+
var replacer = function (match, global, dot, name) {
21+
if (global) {
22+
return global
23+
}
24+
if (name[0] === '!') {
25+
return dot + name.substr(1)
26+
}
27+
28+
return dot + map(name)
29+
}
30+
31+
var map = function(name) {
32+
return name in localNames ? localNames[name] : prefix + name
33+
}
34+
35+
return function localizeName (sel, node, result) {
36+
if(!result.map) result.map = map
37+
return sel.replace(reClass, replacer)
38+
}
39+
}
40+
41+
return cssobj_plugin_selector_localize;
42+
43+
});
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
'use strict';
2+
3+
// random string, should used across all cssobj plugins
4+
var random = (function () {
5+
var count = 0
6+
return function () {
7+
count++
8+
return '_' + Math.floor(Math.random() * Math.pow(2, 32)).toString(36) + count + '_'
9+
}
10+
})()
11+
12+
var reClass = /:global\s*\(((?:\s*\.[A-Za-z0-9_-]+\s*)+)\)|(\.)([!A-Za-z0-9_-]+)/g
13+
14+
function cssobj_plugin_selector_localize(prefix, localNames) {
15+
16+
prefix = prefix!=='' ? prefix || random() : ''
17+
18+
localNames = localNames || {}
19+
20+
var replacer = function (match, global, dot, name) {
21+
if (global) {
22+
return global
23+
}
24+
if (name[0] === '!') {
25+
return dot + name.substr(1)
26+
}
27+
28+
return dot + map(name)
29+
}
30+
31+
var map = function(name) {
32+
return name in localNames ? localNames[name] : prefix + name
33+
}
34+
35+
return function localizeName (sel, node, result) {
36+
if(!result.map) result.map = map
37+
return sel.replace(reClass, replacer)
38+
}
39+
}
40+
41+
module.exports = cssobj_plugin_selector_localize;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// random string, should used across all cssobj plugins
2+
var random = (function () {
3+
var count = 0
4+
return function () {
5+
count++
6+
return '_' + Math.floor(Math.random() * Math.pow(2, 32)).toString(36) + count + '_'
7+
}
8+
})()
9+
10+
var reClass = /:global\s*\(((?:\s*\.[A-Za-z0-9_-]+\s*)+)\)|(\.)([!A-Za-z0-9_-]+)/g
11+
12+
function cssobj_plugin_selector_localize(prefix, localNames) {
13+
14+
prefix = prefix!=='' ? prefix || random() : ''
15+
16+
localNames = localNames || {}
17+
18+
var replacer = function (match, global, dot, name) {
19+
if (global) {
20+
return global
21+
}
22+
if (name[0] === '!') {
23+
return dot + name.substr(1)
24+
}
25+
26+
return dot + map(name)
27+
}
28+
29+
var map = function(name) {
30+
return name in localNames ? localNames[name] : prefix + name
31+
}
32+
33+
return function localizeName (sel, node, result) {
34+
if(!result.map) result.map = map
35+
return sel.replace(reClass, replacer)
36+
}
37+
}
38+
39+
export default cssobj_plugin_selector_localize;
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
var cssobj_plugin_selector_localize = (function () {
2+
'use strict';
3+
4+
// random string, should used across all cssobj plugins
5+
var random = (function () {
6+
var count = 0
7+
return function () {
8+
count++
9+
return '_' + Math.floor(Math.random() * Math.pow(2, 32)).toString(36) + count + '_'
10+
}
11+
})()
12+
13+
var reClass = /:global\s*\(((?:\s*\.[A-Za-z0-9_-]+\s*)+)\)|(\.)([!A-Za-z0-9_-]+)/g
14+
15+
function cssobj_plugin_selector_localize(prefix, localNames) {
16+
17+
prefix = prefix!=='' ? prefix || random() : ''
18+
19+
localNames = localNames || {}
20+
21+
var replacer = function (match, global, dot, name) {
22+
if (global) {
23+
return global
24+
}
25+
if (name[0] === '!') {
26+
return dot + name.substr(1)
27+
}
28+
29+
return dot + map(name)
30+
}
31+
32+
var map = function(name) {
33+
return name in localNames ? localNames[name] : prefix + name
34+
}
35+
36+
return function localizeName (sel, node, result) {
37+
if(!result.map) result.map = map
38+
return sel.replace(reClass, replacer)
39+
}
40+
}
41+
42+
return cssobj_plugin_selector_localize;
43+
44+
}());

dist/cssobj-plugin-selector-localize.min.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"name": "cssobj-plugin-selector-localize",
3+
"version": "1.0.0",
4+
"description": "Localize class name for cssobj",
5+
"main": "dist/cssobj-plugin-selector-localize.cjs.js",
6+
"jsnext:main": "dist/cssobj-plugin-selector-localize.es.js",
7+
"scripts": {
8+
"test": "mocha",
9+
"report": "cd dist && gzip < cssobj-plugin-selector-localize.min.js > cssobj-plugin-selector-localize.min.gz && ls -lh && rm -f *.gz",
10+
"make": "rollup -c && uglifyjs dist/cssobj-plugin-selector-localize.iife.js -cm -o dist/cssobj-plugin-selector-localize.min.js"
11+
},
12+
"repository": {
13+
"type": "git",
14+
"url": "git+https://github.com/cssobj/cssobj-plugin-selector-localize.git"
15+
},
16+
"keywords": [
17+
"cssobj",
18+
"localize"
19+
],
20+
"author": "James Yang <jamesyang999@gmail.com>",
21+
"license": "MIT",
22+
"bugs": {
23+
"url": "https://github.com/cssobj/cssobj-plugin-selector-localize/issues"
24+
},
25+
"homepage": "https://github.com/cssobj/cssobj-plugin-selector-localize#readme",
26+
"devDependencies": {
27+
"chai": "^3.5.0",
28+
"mocha": "^2.5.3"
29+
}
30+
}

rollup.config.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// rollup.config.js
2+
3+
export default {
4+
entry: 'src/cssobj-plugin-selector-localize.js',
5+
moduleName: 'cssobj_plugin_selector_localize',
6+
moduleId: 'cssobj_plugin_selector_localize',
7+
targets: [
8+
{ format: 'iife', dest: 'dist/cssobj-plugin-selector-localize.iife.js' },
9+
{ format: 'amd', dest: 'dist/cssobj-plugin-selector-localize.amd.js' },
10+
{ format: 'cjs', dest: 'dist/cssobj-plugin-selector-localize.cjs.js' },
11+
{ format: 'es', dest: 'dist/cssobj-plugin-selector-localize.es.js' }
12+
]
13+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// cssobj plugin
2+
3+
import {random} from '../../cssobj-helper/lib/cssobj-helper.js'
4+
5+
var reClass = /:global\s*\(((?:\s*\.[A-Za-z0-9_-]+\s*)+)\)|(\.)([!A-Za-z0-9_-]+)/g
6+
7+
export default function cssobj_plugin_selector_localize(prefix, localNames) {
8+
9+
prefix = prefix!=='' ? prefix || random() : ''
10+
11+
localNames = localNames || {}
12+
13+
var replacer = function (match, global, dot, name) {
14+
if (global) {
15+
return global
16+
}
17+
if (name[0] === '!') {
18+
return dot + name.substr(1)
19+
}
20+
21+
return dot + map(name)
22+
}
23+
24+
var map = function(name) {
25+
return name in localNames ? localNames[name] : prefix + name
26+
}
27+
28+
return function localizeName (sel, node, result) {
29+
if(!result.map) result.map = map
30+
return sel.replace(reClass, replacer)
31+
}
32+
}
33+
34+

0 commit comments

Comments
 (0)