Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added feature isHSL #1159

Merged
merged 25 commits into from
Feb 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
c38fdc3
isHSL WIP
ayala-io Oct 15, 2019
067f03c
Added another valid test case.
ayala-io Oct 15, 2019
6783382
Updated readme to include isHSL.
ayala-io Oct 15, 2019
be3ea74
Merge remote-tracking branch 'upstream/master' into add-feature-isHSL
ayala-io Dec 27, 2019
0a71904
WIP on validating degree values beyond [0,360]
ayala-io Dec 27, 2019
dc0b34b
Added + sign test case
ayala-io Dec 27, 2019
d2ea634
Merge remote-tracking branch 'upstream/master' into add-feature-isHSL
ayala-io Feb 22, 2020
cd611f2
More comprehensive HSL check WIP
ayala-io Feb 22, 2020
4315d00
WIP, new tests are needed.
ayala-io Feb 22, 2020
6e0b331
Added ezkemboi test cases
ayala-io Feb 22, 2020
c90164a
Added ezkemboi test cases
ayala-io Feb 22, 2020
5b5becc
Added ezkemboi test cases
ayala-io Feb 22, 2020
71966a4
isHSL WIP
ayala-io Oct 15, 2019
b7f2c19
Added another valid test case.
ayala-io Oct 15, 2019
42d4342
Updated readme to include isHSL.
ayala-io Oct 15, 2019
e72967b
WIP on validating degree values beyond [0,360]
ayala-io Dec 27, 2019
395a28e
Added + sign test case
ayala-io Dec 27, 2019
c9b6a98
More comprehensive HSL check WIP
ayala-io Feb 22, 2020
e873c8d
WIP, new tests are needed.
ayala-io Feb 22, 2020
2c95498
Added ezkemboi test cases
ayala-io Feb 22, 2020
b5e1e9d
Added ezkemboi test cases
ayala-io Feb 22, 2020
e12af35
Added ezkemboi test cases
ayala-io Feb 22, 2020
cd0ec4e
Updated description of isHSL in readme.
ayala-io Feb 23, 2020
cfcfee6
Merge remote-tracking branch 'origin/add-feature-isHSL' into add-feat…
ayala-io Feb 23, 2020
8d7c7a8
Fixed readme
ayala-io Feb 23, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ Validator | Description
**isHash(str, algorithm)** | check if the string is a hash of type algorithm.<br/><br/>Algorithm is one of `['md4', 'md5', 'sha1', 'sha256', 'sha384', 'sha512', 'ripemd128', 'ripemd160', 'tiger128', 'tiger160', 'tiger192', 'crc32', 'crc32b']`
**isHexadecimal(str)** | check if the string is a hexadecimal number.
**isHexColor(str)** | check if the string is a hexadecimal color.
**isHSL(str)** | check if the string is an HSL (hue, saturation, lightness, optional alpha) color based on [CSS Colors Level 4 specification](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value).<br/><br/>Comma-separated format supported. Space-separated format supported with the exception of a few edge cases (ex: `hsl(200grad+.1%62%/1)`).
**isRgbColor(str, [, includePercentValues])** | check if the string is a rgb or rgba color.<br/><br/>`includePercentValues` defaults to `true`. If you don't want to allow to set `rgb` or `rgba` values with percents, like `rgb(5%,5%,5%)`, or `rgba(90%,90%,90%,.3)`, then set it to false.
**isIdentityCard(str [, locale])** | check if the string is a valid identity card code.<br/><br/>`locale` is one of `['ES', 'zh-TW', 'he-IL']` OR `'any'`. If 'any' is used, function will check if any of the locals match.<br/><br/>Defaults to 'any'.
**isIn(str, values)** | check if the string is in a array of allowed values.
Expand Down Expand Up @@ -187,8 +188,8 @@ In general, we follow the "fork-and-pull" Git workflow.
2. Clone the project to your own machine
3. Work on your fork
1. Make your changes and additions
- Most of your changes should be focused on `src/` and `test/` folders and/or `README.md`.
- Files such as `validator.js`, `validator.min.js` and files in `lib/` folder are autogenerated when running tests (`npm test`) and need not to be changed **manually**.
- Most of your changes should be focused on `src/` and `test/` folders and/or `README.md`.
- Files such as `validator.js`, `validator.min.js` and files in `lib/` folder are autogenerated when running tests (`npm test`) and need not to be changed **manually**.
2. Change or add tests if needed
3. Run tests and make sure they pass
4. Add changes to README.md if needed
Expand Down
2 changes: 2 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import isDivisibleBy from './lib/isDivisibleBy';

import isHexColor from './lib/isHexColor';
import isRgbColor from './lib/isRgbColor';
import isHSL from './lib/isHSL';

import isISRC from './lib/isISRC';

Expand Down Expand Up @@ -155,6 +156,7 @@ const validator = {
isDivisibleBy,
isHexColor,
isRgbColor,
isHSL,
isISRC,
isMD5,
isHash,
Expand Down
10 changes: 10 additions & 0 deletions src/lib/isHSL.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import assertString from './util/assertString';


const hslcomma = /^(hsl)a?\(\s*((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?))(deg|grad|rad|turn|\s*)(\s*,\s*(\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%){2}\s*(,\s*((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%?)\s*)?\)$/i;
const hslspace = /^(hsl)a?\(\s*((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?))(deg|grad|rad|turn|\s)(\s*(\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%){2}\s*(\/\s*((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%?)\s*)?\)$/i;

export default function isHSL(str) {
assertString(str);
return hslcomma.test(str) || hslspace.test(str);
}
48 changes: 48 additions & 0 deletions test/validators.js
Original file line number Diff line number Diff line change
Expand Up @@ -3126,6 +3126,54 @@ describe('Validators', () => {
});
});

it('should validate HSL color strings', () => {
test({
validator: 'isHSL',
valid: [
'hsl(360,0000000000100%,000000100%)',
'hsl(000010, 00000000001%, 00000040%)',
'HSL(00000,0000000000100%,000000100%)',
'hsL(0, 0%, 0%)',
'hSl( 360 , 100% , 100% )',
ayala-io marked this conversation as resolved.
Show resolved Hide resolved
'Hsl( 00150 , 000099% , 01% )',
'hsl(01080, 03%, 4%)',
'hsl(-540, 03%, 4%)',
'hsla(+540, 03%, 4%)',
'hsla(+540, 03%, 4%, 500)',
'hsl(+540deg, 03%, 4%, 500)',
'hsl(+540gRaD, 03%, 4%, 500)',
'hsl(+540.01e-98rad, 03%, 4%, 500)',
'hsl(-540.5turn, 03%, 4%, 500)',
'hsl(+540, 03%, 4%, 500e-01)',
'hsl(+540, 03%, 4%, 500e+80)',
'hsl(4.71239rad, 60%, 70%)',
'hsl(270deg, 60%, 70%)',
'hsl(200, +.1%, 62%, 1)',
'hsl(270 60% 70%)',
'hsl(200, +.1e-9%, 62e10%, 1)',
'hsl(.75turn, 60%, 70%)',
// 'hsl(200grad+.1%62%/1)', //supposed to pass, but need to handle delimiters
'hsl(200grad +.1% 62% / 1)',
'hsl(270, 60%, 50%, .15)',
'hsl(270, 60%, 50%, 15%)',
'hsl(270 60% 50% / .15)',
'hsl(270 60% 50% / 15%)',
],
invalid: [
'hsl (360,0000000000100%,000000100%)',
'hsl(0260, 100 %, 100%)',
'hsl(0160, 100%, 100%, 100 %)',
'hsl(-0160, 100%, 100a)',
'hsl(-0160, 100%, 100)',
'hsl(-0160 100%, 100%, )',
'hsl(270 deg, 60%, 70%)',
'hsl( deg, 60%, 70%)',
'hsl(, 60%, 70%)',
'hsl(3000deg, 70%)',
],
});
});

it('should validate rgb color strings', () => {
test({
validator: 'isRgbColor',
Expand Down