Skip to content

Commit a41ddb2

Browse files
author
Belema Gancarz
committed
Add JSHint to project, and fix errors.
1 parent 85ded30 commit a41ddb2

File tree

4 files changed

+72
-48
lines changed

4 files changed

+72
-48
lines changed

.jshintrc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"bitwise": true,
3+
"curly": true,
4+
"eqeqeq": true,
5+
"indent": 4,
6+
"newcap": true,
7+
"noarg": true,
8+
"undef": true,
9+
"unused": true,
10+
"globals": {
11+
"define": true,
12+
"module": true,
13+
"require": true
14+
}
15+
}

.travis.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
before_script: "npm install --dev"
2-
script: "npm test"
2+
script:
3+
- "npm run lint"
4+
- "npm test"
35
language: node_js
46
node_js:
57
- 0.8

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
, "engines": {"node": ">= 0.4.x"}
99
, "keywords": ["slugify", "slug", "string", "utf8", "utf-8", "unicode", "url"]
1010
, "scripts": {
11+
"lint": "./node_modules/.bin/jshint slug.js",
1112
"test": "./node_modules/.bin/mocha ./test/*.test.* --require should --reporter spec --colors --compilers coffee:coffee-script/register"}
1213
, "dependencies": {
1314
"unicode": ">= 0.3.1"}
1415
, "devDependencies": {
16+
"jshint": "~2.8.0",
1517
"mocha": "~1.17.1",
1618
"should": "~3.1.2",
1719
"coffee-script": "~1.7.1"}

slug.js

Lines changed: 52 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,47 +2,51 @@
22
// lazy require symbols table
33
var _symbols, removelist;
44
function symbols(code) {
5-
if (_symbols) return _symbols[code];
5+
if (_symbols) {
6+
return _symbols[code];
7+
}
68
_symbols = require('unicode/category/So');
79
removelist = ['sign','cross','of','symbol','staff','hand','black','white']
8-
.map(function (word) {return new RegExp(word, 'gi')});
10+
.map(function (word) {return new RegExp(word, 'gi');});
911
return _symbols[code];
1012
}
1113

14+
function multicharat(index, string, multicharmap) {
15+
for (var property in multicharmap) {
16+
if (!multicharmap.hasOwnProperty(property)) {
17+
continue;
18+
}
19+
if (string.indexOf(property) === index) {
20+
return property;
21+
}
22+
}
23+
}
24+
1225
function slug(string, opts) {
1326
string = string.toString();
14-
if ('string' === typeof opts)
27+
if ('string' === typeof opts) {
1528
opts = {replacement:opts};
29+
}
1630
opts = opts || {};
1731
opts.mode = opts.mode || slug.defaults.mode;
1832
var defaults = slug.defaults.modes[opts.mode];
1933
var keys = ['replacement','multicharmap','charmap','remove','lower'];
20-
for (var key, i = 0, l = keys.length; i < l; i++) { key = keys[i];
34+
keys.forEach(function (key) {
2135
opts[key] = (key in opts) ? opts[key] : defaults[key];
22-
}
23-
if ('undefined' === typeof opts.symbols)
36+
});
37+
if ('undefined' === typeof opts.symbols) {
2438
opts.symbols = defaults.symbols;
25-
26-
var lengths = [];
27-
for (var key in opts.multicharmap) {
28-
if (!opts.multicharmap.hasOwnProperty(key))
29-
continue;
30-
31-
var len = key.length;
32-
if (lengths.indexOf(len) === -1)
33-
lengths.push(len);
3439
}
3540

36-
var code, unicode, result = "";
37-
for (var char, i = 0, l = string.length; i < l; i++) { char = string[i];
38-
if (!lengths.some(function (len) {
39-
var str = string.substr(i, len);
40-
if (opts.multicharmap[str]) {
41-
i += len - 1;
42-
char = opts.multicharmap[str];
43-
return true;
44-
} else return false;
45-
})) {
41+
var code, unicode, result = '';
42+
for (var char, i = 0, l = string.length; i < l; i++) {
43+
char = string[i];
44+
var multichar = multicharat(0, string.substring(i), opts.multicharmap);
45+
46+
if (multichar) {
47+
i += multichar.length - 1;
48+
char = opts.multicharmap[multichar];
49+
} else {
4650
if (opts.charmap[char]) {
4751
char = opts.charmap[char];
4852
code = char.charCodeAt(0);
@@ -58,16 +62,16 @@ function slug(string, opts) {
5862
}
5963
}
6064
char = char.replace(/[^\w\s\-\.\_~]/g, ''); // allowed
61-
if (opts.remove) char = char.replace(opts.remove, ''); // add flavour
65+
if (opts.remove) {
66+
char = char.replace(opts.remove, ''); // add flavour
67+
}
6268
result += char;
6369
}
6470
result = result.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
6571
result = result.replace(/[-\s]+/g, opts.replacement); // convert spaces
6672
result = result.replace(opts.replacement+"$",''); // remove trailing separator
67-
if (opts.lower)
68-
result = result.toLowerCase();
69-
return result;
70-
};
73+
return opts.lower ? result.toLowerCase() : result;
74+
}
7175

7276
slug.defaults = {
7377
mode: 'pretty',
@@ -186,27 +190,28 @@ slug.defaults.modes = {
186190

187191
// Be compatible with different module systems
188192

189-
if (typeof define !== 'undefined' && define.amd) { // AMD
190-
// dont load symbols table in the browser
191-
for (var key in slug.defaults.modes) {
192-
if (!slug.defaults.modes.hasOwnProperty(key))
193-
continue;
194-
195-
slug.defaults.modes[key].symbols = false;
196-
}
197-
define([], function () {return slug});
198-
} else if (typeof module !== 'undefined' && module.exports) { // CommonJS
193+
// CommonJS
194+
if (typeof module !== 'undefined' && module.exports) {
199195
symbols(); // preload symbols table
200196
module.exports = slug;
201-
} else { // Script tag
202-
// dont load symbols table in the browser
203-
for (var key in slug.defaults.modes) {
204-
if (!slug.defaults.modes.hasOwnProperty(key))
205-
continue;
197+
return;
198+
}
206199

207-
slug.defaults.modes[key].symbols = false;
200+
// dont load symbols table in the browser
201+
for (var key in slug.defaults.modes) {
202+
if (!slug.defaults.modes.hasOwnProperty(key)) {
203+
continue;
208204
}
209-
root.slug = slug;
205+
slug.defaults.modes[key].symbols = false;
210206
}
211207

208+
// AMD
209+
if (typeof define !== 'undefined' && define.amd) {
210+
define([], function () {return slug;});
211+
return;
212+
}
213+
214+
// Script tag
215+
root.slug = slug;
216+
212217
}(this));

0 commit comments

Comments
 (0)