feat(isISO6391): add ISO 639-1 validator - #1892

Merged
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391
Apr 22, 2022
Merged

feat(isISO6391): add ISO 639-1 validator#1892
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391

Conversation

@braaar

@braaarbraaar commented Jan 4, 2022

Copy link
Copy Markdown
Contributor

This PR adds a validator which validates ISO 639-1 languages codes, such as 'af', 'nb' and 'fr'.

I would like this feature because ISO 639-1 seems to be the most commonly used set of language codes when referring solely to a language and not a locale, and I will be using them for an upcoming project which uses validator.js.

This PR is essentially a cleaned up version of a previous PR which I suspect was closed partially due to the lack of cleanup: #1103.

Thanks to @ezkemboi and @profnandaa for their contributions in earlier PRs and issues.

My contribution is the cleanup of the diff as well as rewritten test code and readme entry.

See related issue: #989

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 4, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1892 (ae32fd5) into master (f055c11) will not change coverage.
The diff coverage is 100.00%.

Impacted file tree graph

@@ Coverage Diff @@## master #1892 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 102 103 +1 Lines 2072 2078 +6 Branches 472 472 =========================================
+ Hits 2072 2078 +6 
Impacted FilesCoverage Δ
src/index.js100.00% <100.00%> (ø)
src/lib/isISO6391.js100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f055c11...ae32fd5. Read the comment docs.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I understand the desire to stick to regex based validation, but ISO will never update this spec with breaking changes, as far as I understand it. This specific version of ISO 639 is not likely to be updated ever again. It was last updated in 2002 and has since been reviewed three times without changes.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I cleaned up the list of language codes so it's easier on the eyes, like the list in the ISO3166 validator

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I expect limited changes (and if they occur only in additions) and doing regex based validation is not realistic for this one. Looks good to me

@braaar

braaar commented Jan 7, 2022

Copy link
Copy Markdown
ContributorAuthor

I suppose a more complete implementation of this could be isISO639(str, versions) where you can specify which versions of ISO639 you wish to validate against (perhaps just 1 through 5, since version 6 was withdrawn).

The default behaviour without any options specified should match any of the 5 official and current versions of the standard.

Here's how I would implement that:

// declare 5 different sets with all the language codes in themconstsets=[isISO6391Set,isISO6392Set,isISO6393Set,isISO6394Set,isISO6395Set];exportdefaultfunctionisISO639(str,versions=[1,2,3,4,5]){assertString(str);returnversions.reduce((result,version)=>{constcurrentSet=sets[version-1];returncurrentSet.has(str)||result;},false);}

@WikiRik

Copy link
Copy Markdown
Member

That would be a more complete implementation, but I'm not sure how often that would be used. Especially with the large number of supported languages for ISO 639-3, it might be too much for this project.
Also, I am not sure if the default for matching any of the 5 would be smart for false positives. But I would like to hear the opinions of @profnandaa and @ezkemboi about this

@rhenandias

Copy link
Copy Markdown

I came looking for this feature today, any updates regarding this functionality?

I agree with the option to specify the version via an options parameter, however, I would set the default version to 1. For now the default set in commit works for me.

@profnandaaprofnandaa left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No objection from me. LGTM, thanks for your contrib 🎉

// Sorry for the delay in reviewing this.

@profnandaa
profnandaa merged commit b039202 into validatorjs:masterApr 22, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@braaar@WikiRik@rhenandias@profnandaa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(isISO6391): add ISO 639-1 validator - #1892

Merged
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391
Apr 22, 2022
Merged

feat(isISO6391): add ISO 639-1 validator#1892
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391

Conversation

@braaar

@braaarbraaar commented Jan 4, 2022

Copy link
Copy Markdown
Contributor

This PR adds a validator which validates ISO 639-1 languages codes, such as 'af', 'nb' and 'fr'.

I would like this feature because ISO 639-1 seems to be the most commonly used set of language codes when referring solely to a language and not a locale, and I will be using them for an upcoming project which uses validator.js.

This PR is essentially a cleaned up version of a previous PR which I suspect was closed partially due to the lack of cleanup: #1103.

Thanks to @ezkemboi and @profnandaa for their contributions in earlier PRs and issues.

My contribution is the cleanup of the diff as well as rewritten test code and readme entry.

See related issue: #989

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 4, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1892 (ae32fd5) into master (f055c11) will not change coverage.
The diff coverage is 100.00%.

Impacted file tree graph

@@ Coverage Diff @@## master #1892 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 102 103 +1 Lines 2072 2078 +6 Branches 472 472 =========================================
+ Hits 2072 2078 +6 
Impacted FilesCoverage Δ
src/index.js100.00% <100.00%> (ø)
src/lib/isISO6391.js100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f055c11...ae32fd5. Read the comment docs.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I understand the desire to stick to regex based validation, but ISO will never update this spec with breaking changes, as far as I understand it. This specific version of ISO 639 is not likely to be updated ever again. It was last updated in 2002 and has since been reviewed three times without changes.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I cleaned up the list of language codes so it's easier on the eyes, like the list in the ISO3166 validator

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I expect limited changes (and if they occur only in additions) and doing regex based validation is not realistic for this one. Looks good to me

@braaar

braaar commented Jan 7, 2022

Copy link
Copy Markdown
ContributorAuthor

I suppose a more complete implementation of this could be isISO639(str, versions) where you can specify which versions of ISO639 you wish to validate against (perhaps just 1 through 5, since version 6 was withdrawn).

The default behaviour without any options specified should match any of the 5 official and current versions of the standard.

Here's how I would implement that:

// declare 5 different sets with all the language codes in themconstsets=[isISO6391Set,isISO6392Set,isISO6393Set,isISO6394Set,isISO6395Set];exportdefaultfunctionisISO639(str,versions=[1,2,3,4,5]){assertString(str);returnversions.reduce((result,version)=>{constcurrentSet=sets[version-1];returncurrentSet.has(str)||result;},false);}

@WikiRik

Copy link
Copy Markdown
Member

That would be a more complete implementation, but I'm not sure how often that would be used. Especially with the large number of supported languages for ISO 639-3, it might be too much for this project.
Also, I am not sure if the default for matching any of the 5 would be smart for false positives. But I would like to hear the opinions of @profnandaa and @ezkemboi about this

@rhenandias

Copy link
Copy Markdown

I came looking for this feature today, any updates regarding this functionality?

I agree with the option to specify the version via an options parameter, however, I would set the default version to 1. For now the default set in commit works for me.

@profnandaaprofnandaa left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No objection from me. LGTM, thanks for your contrib 🎉

// Sorry for the delay in reviewing this.

@profnandaa
profnandaa merged commit b039202 into validatorjs:masterApr 22, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@braaar@WikiRik@rhenandias@profnandaa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(isISO6391): add ISO 639-1 validator - #1892

Merged
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391
Apr 22, 2022
Merged

feat(isISO6391): add ISO 639-1 validator#1892
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391

Conversation

@braaar

@braaarbraaar commented Jan 4, 2022

Copy link
Copy Markdown
Contributor

This PR adds a validator which validates ISO 639-1 languages codes, such as 'af', 'nb' and 'fr'.

I would like this feature because ISO 639-1 seems to be the most commonly used set of language codes when referring solely to a language and not a locale, and I will be using them for an upcoming project which uses validator.js.

This PR is essentially a cleaned up version of a previous PR which I suspect was closed partially due to the lack of cleanup: #1103.

Thanks to @ezkemboi and @profnandaa for their contributions in earlier PRs and issues.

My contribution is the cleanup of the diff as well as rewritten test code and readme entry.

See related issue: #989

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 4, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1892 (ae32fd5) into master (f055c11) will not change coverage.
The diff coverage is 100.00%.

Impacted file tree graph

@@ Coverage Diff @@## master #1892 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 102 103 +1 Lines 2072 2078 +6 Branches 472 472 =========================================
+ Hits 2072 2078 +6 
Impacted FilesCoverage Δ
src/index.js100.00% <100.00%> (ø)
src/lib/isISO6391.js100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f055c11...ae32fd5. Read the comment docs.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I understand the desire to stick to regex based validation, but ISO will never update this spec with breaking changes, as far as I understand it. This specific version of ISO 639 is not likely to be updated ever again. It was last updated in 2002 and has since been reviewed three times without changes.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I cleaned up the list of language codes so it's easier on the eyes, like the list in the ISO3166 validator

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I expect limited changes (and if they occur only in additions) and doing regex based validation is not realistic for this one. Looks good to me

@braaar

braaar commented Jan 7, 2022

Copy link
Copy Markdown
ContributorAuthor

I suppose a more complete implementation of this could be isISO639(str, versions) where you can specify which versions of ISO639 you wish to validate against (perhaps just 1 through 5, since version 6 was withdrawn).

The default behaviour without any options specified should match any of the 5 official and current versions of the standard.

Here's how I would implement that:

// declare 5 different sets with all the language codes in themconstsets=[isISO6391Set,isISO6392Set,isISO6393Set,isISO6394Set,isISO6395Set];exportdefaultfunctionisISO639(str,versions=[1,2,3,4,5]){assertString(str);returnversions.reduce((result,version)=>{constcurrentSet=sets[version-1];returncurrentSet.has(str)||result;},false);}

@WikiRik

Copy link
Copy Markdown
Member

That would be a more complete implementation, but I'm not sure how often that would be used. Especially with the large number of supported languages for ISO 639-3, it might be too much for this project.
Also, I am not sure if the default for matching any of the 5 would be smart for false positives. But I would like to hear the opinions of @profnandaa and @ezkemboi about this

@rhenandias

Copy link
Copy Markdown

I came looking for this feature today, any updates regarding this functionality?

I agree with the option to specify the version via an options parameter, however, I would set the default version to 1. For now the default set in commit works for me.

@profnandaaprofnandaa left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No objection from me. LGTM, thanks for your contrib 🎉

// Sorry for the delay in reviewing this.

@profnandaa
profnandaa merged commit b039202 into validatorjs:masterApr 22, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@braaar@WikiRik@rhenandias@profnandaa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(isISO6391): add ISO 639-1 validator - #1892

Merged
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391
Apr 22, 2022
Merged

feat(isISO6391): add ISO 639-1 validator#1892
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391

Conversation

@braaar

@braaarbraaar commented Jan 4, 2022

Copy link
Copy Markdown
Contributor

This PR adds a validator which validates ISO 639-1 languages codes, such as 'af', 'nb' and 'fr'.

I would like this feature because ISO 639-1 seems to be the most commonly used set of language codes when referring solely to a language and not a locale, and I will be using them for an upcoming project which uses validator.js.

This PR is essentially a cleaned up version of a previous PR which I suspect was closed partially due to the lack of cleanup: #1103.

Thanks to @ezkemboi and @profnandaa for their contributions in earlier PRs and issues.

My contribution is the cleanup of the diff as well as rewritten test code and readme entry.

See related issue: #989

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 4, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1892 (ae32fd5) into master (f055c11) will not change coverage.
The diff coverage is 100.00%.

Impacted file tree graph

@@ Coverage Diff @@## master #1892 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 102 103 +1 Lines 2072 2078 +6 Branches 472 472 =========================================
+ Hits 2072 2078 +6 
Impacted FilesCoverage Δ
src/index.js100.00% <100.00%> (ø)
src/lib/isISO6391.js100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f055c11...ae32fd5. Read the comment docs.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I understand the desire to stick to regex based validation, but ISO will never update this spec with breaking changes, as far as I understand it. This specific version of ISO 639 is not likely to be updated ever again. It was last updated in 2002 and has since been reviewed three times without changes.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I cleaned up the list of language codes so it's easier on the eyes, like the list in the ISO3166 validator

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I expect limited changes (and if they occur only in additions) and doing regex based validation is not realistic for this one. Looks good to me

@braaar

braaar commented Jan 7, 2022

Copy link
Copy Markdown
ContributorAuthor

I suppose a more complete implementation of this could be isISO639(str, versions) where you can specify which versions of ISO639 you wish to validate against (perhaps just 1 through 5, since version 6 was withdrawn).

The default behaviour without any options specified should match any of the 5 official and current versions of the standard.

Here's how I would implement that:

// declare 5 different sets with all the language codes in themconstsets=[isISO6391Set,isISO6392Set,isISO6393Set,isISO6394Set,isISO6395Set];exportdefaultfunctionisISO639(str,versions=[1,2,3,4,5]){assertString(str);returnversions.reduce((result,version)=>{constcurrentSet=sets[version-1];returncurrentSet.has(str)||result;},false);}

@WikiRik

Copy link
Copy Markdown
Member

That would be a more complete implementation, but I'm not sure how often that would be used. Especially with the large number of supported languages for ISO 639-3, it might be too much for this project.
Also, I am not sure if the default for matching any of the 5 would be smart for false positives. But I would like to hear the opinions of @profnandaa and @ezkemboi about this

@rhenandias

Copy link
Copy Markdown

I came looking for this feature today, any updates regarding this functionality?

I agree with the option to specify the version via an options parameter, however, I would set the default version to 1. For now the default set in commit works for me.

@profnandaaprofnandaa left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No objection from me. LGTM, thanks for your contrib 🎉

// Sorry for the delay in reviewing this.

@profnandaa
profnandaa merged commit b039202 into validatorjs:masterApr 22, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@braaar@WikiRik@rhenandias@profnandaa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(isISO6391): add ISO 639-1 validator - #1892

Merged
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391
Apr 22, 2022
Merged

feat(isISO6391): add ISO 639-1 validator#1892
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391

Conversation

@braaar

@braaarbraaar commented Jan 4, 2022

Copy link
Copy Markdown
Contributor

This PR adds a validator which validates ISO 639-1 languages codes, such as 'af', 'nb' and 'fr'.

I would like this feature because ISO 639-1 seems to be the most commonly used set of language codes when referring solely to a language and not a locale, and I will be using them for an upcoming project which uses validator.js.

This PR is essentially a cleaned up version of a previous PR which I suspect was closed partially due to the lack of cleanup: #1103.

Thanks to @ezkemboi and @profnandaa for their contributions in earlier PRs and issues.

My contribution is the cleanup of the diff as well as rewritten test code and readme entry.

See related issue: #989

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 4, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1892 (ae32fd5) into master (f055c11) will not change coverage.
The diff coverage is 100.00%.

Impacted file tree graph

@@ Coverage Diff @@## master #1892 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 102 103 +1 Lines 2072 2078 +6 Branches 472 472 =========================================
+ Hits 2072 2078 +6 
Impacted FilesCoverage Δ
src/index.js100.00% <100.00%> (ø)
src/lib/isISO6391.js100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f055c11...ae32fd5. Read the comment docs.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I understand the desire to stick to regex based validation, but ISO will never update this spec with breaking changes, as far as I understand it. This specific version of ISO 639 is not likely to be updated ever again. It was last updated in 2002 and has since been reviewed three times without changes.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I cleaned up the list of language codes so it's easier on the eyes, like the list in the ISO3166 validator

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I expect limited changes (and if they occur only in additions) and doing regex based validation is not realistic for this one. Looks good to me

@braaar

braaar commented Jan 7, 2022

Copy link
Copy Markdown
ContributorAuthor

I suppose a more complete implementation of this could be isISO639(str, versions) where you can specify which versions of ISO639 you wish to validate against (perhaps just 1 through 5, since version 6 was withdrawn).

The default behaviour without any options specified should match any of the 5 official and current versions of the standard.

Here's how I would implement that:

// declare 5 different sets with all the language codes in themconstsets=[isISO6391Set,isISO6392Set,isISO6393Set,isISO6394Set,isISO6395Set];exportdefaultfunctionisISO639(str,versions=[1,2,3,4,5]){assertString(str);returnversions.reduce((result,version)=>{constcurrentSet=sets[version-1];returncurrentSet.has(str)||result;},false);}

@WikiRik

Copy link
Copy Markdown
Member

That would be a more complete implementation, but I'm not sure how often that would be used. Especially with the large number of supported languages for ISO 639-3, it might be too much for this project.
Also, I am not sure if the default for matching any of the 5 would be smart for false positives. But I would like to hear the opinions of @profnandaa and @ezkemboi about this

@rhenandias

Copy link
Copy Markdown

I came looking for this feature today, any updates regarding this functionality?

I agree with the option to specify the version via an options parameter, however, I would set the default version to 1. For now the default set in commit works for me.

@profnandaaprofnandaa left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No objection from me. LGTM, thanks for your contrib 🎉

// Sorry for the delay in reviewing this.

@profnandaa
profnandaa merged commit b039202 into validatorjs:masterApr 22, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@braaar@WikiRik@rhenandias@profnandaa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(isISO6391): add ISO 639-1 validator - #1892

Merged
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391
Apr 22, 2022
Merged

feat(isISO6391): add ISO 639-1 validator#1892
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391

Conversation

@braaar

@braaarbraaar commented Jan 4, 2022

Copy link
Copy Markdown
Contributor

This PR adds a validator which validates ISO 639-1 languages codes, such as 'af', 'nb' and 'fr'.

I would like this feature because ISO 639-1 seems to be the most commonly used set of language codes when referring solely to a language and not a locale, and I will be using them for an upcoming project which uses validator.js.

This PR is essentially a cleaned up version of a previous PR which I suspect was closed partially due to the lack of cleanup: #1103.

Thanks to @ezkemboi and @profnandaa for their contributions in earlier PRs and issues.

My contribution is the cleanup of the diff as well as rewritten test code and readme entry.

See related issue: #989

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 4, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1892 (ae32fd5) into master (f055c11) will not change coverage.
The diff coverage is 100.00%.

Impacted file tree graph

@@ Coverage Diff @@## master #1892 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 102 103 +1 Lines 2072 2078 +6 Branches 472 472 =========================================
+ Hits 2072 2078 +6 
Impacted FilesCoverage Δ
src/index.js100.00% <100.00%> (ø)
src/lib/isISO6391.js100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f055c11...ae32fd5. Read the comment docs.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I understand the desire to stick to regex based validation, but ISO will never update this spec with breaking changes, as far as I understand it. This specific version of ISO 639 is not likely to be updated ever again. It was last updated in 2002 and has since been reviewed three times without changes.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I cleaned up the list of language codes so it's easier on the eyes, like the list in the ISO3166 validator

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I expect limited changes (and if they occur only in additions) and doing regex based validation is not realistic for this one. Looks good to me

@braaar

braaar commented Jan 7, 2022

Copy link
Copy Markdown
ContributorAuthor

I suppose a more complete implementation of this could be isISO639(str, versions) where you can specify which versions of ISO639 you wish to validate against (perhaps just 1 through 5, since version 6 was withdrawn).

The default behaviour without any options specified should match any of the 5 official and current versions of the standard.

Here's how I would implement that:

// declare 5 different sets with all the language codes in themconstsets=[isISO6391Set,isISO6392Set,isISO6393Set,isISO6394Set,isISO6395Set];exportdefaultfunctionisISO639(str,versions=[1,2,3,4,5]){assertString(str);returnversions.reduce((result,version)=>{constcurrentSet=sets[version-1];returncurrentSet.has(str)||result;},false);}

@WikiRik

Copy link
Copy Markdown
Member

That would be a more complete implementation, but I'm not sure how often that would be used. Especially with the large number of supported languages for ISO 639-3, it might be too much for this project.
Also, I am not sure if the default for matching any of the 5 would be smart for false positives. But I would like to hear the opinions of @profnandaa and @ezkemboi about this

@rhenandias

Copy link
Copy Markdown

I came looking for this feature today, any updates regarding this functionality?

I agree with the option to specify the version via an options parameter, however, I would set the default version to 1. For now the default set in commit works for me.

@profnandaaprofnandaa left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No objection from me. LGTM, thanks for your contrib 🎉

// Sorry for the delay in reviewing this.

@profnandaa
profnandaa merged commit b039202 into validatorjs:masterApr 22, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@braaar@WikiRik@rhenandias@profnandaa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(isISO6391): add ISO 639-1 validator - #1892

Merged
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391
Apr 22, 2022
Merged

feat(isISO6391): add ISO 639-1 validator#1892
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391

Conversation

@braaar

@braaarbraaar commented Jan 4, 2022

Copy link
Copy Markdown
Contributor

This PR adds a validator which validates ISO 639-1 languages codes, such as 'af', 'nb' and 'fr'.

I would like this feature because ISO 639-1 seems to be the most commonly used set of language codes when referring solely to a language and not a locale, and I will be using them for an upcoming project which uses validator.js.

This PR is essentially a cleaned up version of a previous PR which I suspect was closed partially due to the lack of cleanup: #1103.

Thanks to @ezkemboi and @profnandaa for their contributions in earlier PRs and issues.

My contribution is the cleanup of the diff as well as rewritten test code and readme entry.

See related issue: #989

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 4, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1892 (ae32fd5) into master (f055c11) will not change coverage.
The diff coverage is 100.00%.

Impacted file tree graph

@@ Coverage Diff @@## master #1892 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 102 103 +1 Lines 2072 2078 +6 Branches 472 472 =========================================
+ Hits 2072 2078 +6 
Impacted FilesCoverage Δ
src/index.js100.00% <100.00%> (ø)
src/lib/isISO6391.js100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f055c11...ae32fd5. Read the comment docs.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I understand the desire to stick to regex based validation, but ISO will never update this spec with breaking changes, as far as I understand it. This specific version of ISO 639 is not likely to be updated ever again. It was last updated in 2002 and has since been reviewed three times without changes.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I cleaned up the list of language codes so it's easier on the eyes, like the list in the ISO3166 validator

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I expect limited changes (and if they occur only in additions) and doing regex based validation is not realistic for this one. Looks good to me

@braaar

braaar commented Jan 7, 2022

Copy link
Copy Markdown
ContributorAuthor

I suppose a more complete implementation of this could be isISO639(str, versions) where you can specify which versions of ISO639 you wish to validate against (perhaps just 1 through 5, since version 6 was withdrawn).

The default behaviour without any options specified should match any of the 5 official and current versions of the standard.

Here's how I would implement that:

// declare 5 different sets with all the language codes in themconstsets=[isISO6391Set,isISO6392Set,isISO6393Set,isISO6394Set,isISO6395Set];exportdefaultfunctionisISO639(str,versions=[1,2,3,4,5]){assertString(str);returnversions.reduce((result,version)=>{constcurrentSet=sets[version-1];returncurrentSet.has(str)||result;},false);}

@WikiRik

Copy link
Copy Markdown
Member

That would be a more complete implementation, but I'm not sure how often that would be used. Especially with the large number of supported languages for ISO 639-3, it might be too much for this project.
Also, I am not sure if the default for matching any of the 5 would be smart for false positives. But I would like to hear the opinions of @profnandaa and @ezkemboi about this

@rhenandias

Copy link
Copy Markdown

I came looking for this feature today, any updates regarding this functionality?

I agree with the option to specify the version via an options parameter, however, I would set the default version to 1. For now the default set in commit works for me.

@profnandaaprofnandaa left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No objection from me. LGTM, thanks for your contrib 🎉

// Sorry for the delay in reviewing this.

@profnandaa
profnandaa merged commit b039202 into validatorjs:masterApr 22, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@braaar@WikiRik@rhenandias@profnandaa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(isISO6391): add ISO 639-1 validator - #1892

Merged
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391
Apr 22, 2022
Merged

feat(isISO6391): add ISO 639-1 validator#1892
profnandaa merged 5 commits into
validatorjs:masterfrom
braaar:iso6391

Conversation

@braaar

@braaarbraaar commented Jan 4, 2022

Copy link
Copy Markdown
Contributor

This PR adds a validator which validates ISO 639-1 languages codes, such as 'af', 'nb' and 'fr'.

I would like this feature because ISO 639-1 seems to be the most commonly used set of language codes when referring solely to a language and not a locale, and I will be using them for an upcoming project which uses validator.js.

This PR is essentially a cleaned up version of a previous PR which I suspect was closed partially due to the lack of cleanup: #1103.

Thanks to @ezkemboi and @profnandaa for their contributions in earlier PRs and issues.

My contribution is the cleanup of the diff as well as rewritten test code and readme entry.

See related issue: #989

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 4, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1892 (ae32fd5) into master (f055c11) will not change coverage.
The diff coverage is 100.00%.

Impacted file tree graph

@@ Coverage Diff @@## master #1892 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 102 103 +1 Lines 2072 2078 +6 Branches 472 472 =========================================
+ Hits 2072 2078 +6 
Impacted FilesCoverage Δ
src/index.js100.00% <100.00%> (ø)
src/lib/isISO6391.js100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f055c11...ae32fd5. Read the comment docs.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I understand the desire to stick to regex based validation, but ISO will never update this spec with breaking changes, as far as I understand it. This specific version of ISO 639 is not likely to be updated ever again. It was last updated in 2002 and has since been reviewed three times without changes.

@braaar

Copy link
Copy Markdown
ContributorAuthor

I cleaned up the list of language codes so it's easier on the eyes, like the list in the ISO3166 validator

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I expect limited changes (and if they occur only in additions) and doing regex based validation is not realistic for this one. Looks good to me

@braaar

braaar commented Jan 7, 2022

Copy link
Copy Markdown
ContributorAuthor

I suppose a more complete implementation of this could be isISO639(str, versions) where you can specify which versions of ISO639 you wish to validate against (perhaps just 1 through 5, since version 6 was withdrawn).

The default behaviour without any options specified should match any of the 5 official and current versions of the standard.

Here's how I would implement that:

// declare 5 different sets with all the language codes in themconstsets=[isISO6391Set,isISO6392Set,isISO6393Set,isISO6394Set,isISO6395Set];exportdefaultfunctionisISO639(str,versions=[1,2,3,4,5]){assertString(str);returnversions.reduce((result,version)=>{constcurrentSet=sets[version-1];returncurrentSet.has(str)||result;},false);}

@WikiRik

Copy link
Copy Markdown
Member

That would be a more complete implementation, but I'm not sure how often that would be used. Especially with the large number of supported languages for ISO 639-3, it might be too much for this project.
Also, I am not sure if the default for matching any of the 5 would be smart for false positives. But I would like to hear the opinions of @profnandaa and @ezkemboi about this

@rhenandias

Copy link
Copy Markdown

I came looking for this feature today, any updates regarding this functionality?

I agree with the option to specify the version via an options parameter, however, I would set the default version to 1. For now the default set in commit works for me.

@profnandaaprofnandaa left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No objection from me. LGTM, thanks for your contrib 🎉

// Sorry for the delay in reviewing this.

@profnandaa
profnandaa merged commit b039202 into validatorjs:masterApr 22, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@braaar@WikiRik@rhenandias@profnandaa