refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version - #2117

Merged
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards
Jun 26, 2023
Merged

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version#2117
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards

Conversation

@pano9000

Copy link
Copy Markdown
Contributor

Hello,

I've refactored the way the allCards variable is created/handled in isCreditCard:
It currently is manually hardcoding all of the previously already defined RegExp into one huge RegExp, that it later then checks against.

This is problematic, because:

  • it adds unnecessary code duplication (you need to store the provider RegExps in two places: 1x on its own and 1x inside allCards
  • (at least to my eyes) it is unreadable
  • therefore it makes it a nightmare to update RegExps or add new providers

I've replace it with a dynamically created array with the RegExps from the cards object instead, which will make it a lot easier to maintain and update, when new providers are added:

  • you only need to add the RegExp inside the cards object
  • no manual copying of the RegExp necessary

Since we are now working with an array instead of one huge RegExp, I had to also change the last "else if":
There I am using the Array some() method, which checks if any of the items inside the array return true for a given function.

Checklist

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

get rid of the hardcoded allCards variable, which was a manual copy of the existing regExp for card provider.
Replace it with a dynamically created array instead, which will make it easier to maintain, when new providers are added.
@codecov

codecovBot commented Dec 6, 2022

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (1ecdd21) compared to base (531dc7f).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2117 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 104 104 Lines 2308 2313 +5 Branches 578 579 +1 =========================================
+ Hits 2308 2313 +5 
Impacted FilesCoverage Δ
src/lib/isCreditCard.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

add "istanbull ignore else", similarly to how it is was done in:
9ee09a7
const tmpCardsArray = [];
for (const cardProvider in cards) {
// istanbul ignore else
if (cards.hasOwnProperty(cardProvider)) {

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.

Why is this if-statement needed?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I originally did not have it in there either, but there is an linting rule that forced me to add it :-)
It otherwise threw me guard-for-in error
https://eslint.org/docs/latest/rules/guard-for-in

@brianwhaley

Copy link
Copy Markdown
Contributor

Interesting that we are doing this... i would have to look back, but i think that i had a similar solution to this in the first refactor I did. Glad it is coming back, makes maintenance much easier. Any card provider can be added very easily now.

@pano9000
pano9000 requested review from profnandaa and removed request for profnandaaMarch 10, 2023 00:07

@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.

LGTM, thanks.

@profnandaa
profnandaa merged commit 4c25f26 into validatorjs:masterJun 26, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@pano9000@brianwhaley@profnandaa@braaar@rubiin@WikiRik
, '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

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version - #2117

Merged
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards
Jun 26, 2023
Merged

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version#2117
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards

Conversation

@pano9000

Copy link
Copy Markdown
Contributor

Hello,

I've refactored the way the allCards variable is created/handled in isCreditCard:
It currently is manually hardcoding all of the previously already defined RegExp into one huge RegExp, that it later then checks against.

This is problematic, because:

  • it adds unnecessary code duplication (you need to store the provider RegExps in two places: 1x on its own and 1x inside allCards
  • (at least to my eyes) it is unreadable
  • therefore it makes it a nightmare to update RegExps or add new providers

I've replace it with a dynamically created array with the RegExps from the cards object instead, which will make it a lot easier to maintain and update, when new providers are added:

  • you only need to add the RegExp inside the cards object
  • no manual copying of the RegExp necessary

Since we are now working with an array instead of one huge RegExp, I had to also change the last "else if":
There I am using the Array some() method, which checks if any of the items inside the array return true for a given function.

Checklist

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

get rid of the hardcoded allCards variable, which was a manual copy of the existing regExp for card provider.
Replace it with a dynamically created array instead, which will make it easier to maintain, when new providers are added.
@codecov

codecovBot commented Dec 6, 2022

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (1ecdd21) compared to base (531dc7f).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2117 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 104 104 Lines 2308 2313 +5 Branches 578 579 +1 =========================================
+ Hits 2308 2313 +5 
Impacted FilesCoverage Δ
src/lib/isCreditCard.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

add "istanbull ignore else", similarly to how it is was done in:
9ee09a7
const tmpCardsArray = [];
for (const cardProvider in cards) {
// istanbul ignore else
if (cards.hasOwnProperty(cardProvider)) {

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.

Why is this if-statement needed?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I originally did not have it in there either, but there is an linting rule that forced me to add it :-)
It otherwise threw me guard-for-in error
https://eslint.org/docs/latest/rules/guard-for-in

@brianwhaley

Copy link
Copy Markdown
Contributor

Interesting that we are doing this... i would have to look back, but i think that i had a similar solution to this in the first refactor I did. Glad it is coming back, makes maintenance much easier. Any card provider can be added very easily now.

@pano9000
pano9000 requested review from profnandaa and removed request for profnandaaMarch 10, 2023 00:07

@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.

LGTM, thanks.

@profnandaa
profnandaa merged commit 4c25f26 into validatorjs:masterJun 26, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@pano9000@brianwhaley@profnandaa@braaar@rubiin@WikiRik
, '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

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version - #2117

Merged
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards
Jun 26, 2023
Merged

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version#2117
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards

Conversation

@pano9000

Copy link
Copy Markdown
Contributor

Hello,

I've refactored the way the allCards variable is created/handled in isCreditCard:
It currently is manually hardcoding all of the previously already defined RegExp into one huge RegExp, that it later then checks against.

This is problematic, because:

  • it adds unnecessary code duplication (you need to store the provider RegExps in two places: 1x on its own and 1x inside allCards
  • (at least to my eyes) it is unreadable
  • therefore it makes it a nightmare to update RegExps or add new providers

I've replace it with a dynamically created array with the RegExps from the cards object instead, which will make it a lot easier to maintain and update, when new providers are added:

  • you only need to add the RegExp inside the cards object
  • no manual copying of the RegExp necessary

Since we are now working with an array instead of one huge RegExp, I had to also change the last "else if":
There I am using the Array some() method, which checks if any of the items inside the array return true for a given function.

Checklist

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

get rid of the hardcoded allCards variable, which was a manual copy of the existing regExp for card provider.
Replace it with a dynamically created array instead, which will make it easier to maintain, when new providers are added.
@codecov

codecovBot commented Dec 6, 2022

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (1ecdd21) compared to base (531dc7f).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2117 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 104 104 Lines 2308 2313 +5 Branches 578 579 +1 =========================================
+ Hits 2308 2313 +5 
Impacted FilesCoverage Δ
src/lib/isCreditCard.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

add "istanbull ignore else", similarly to how it is was done in:
9ee09a7
const tmpCardsArray = [];
for (const cardProvider in cards) {
// istanbul ignore else
if (cards.hasOwnProperty(cardProvider)) {

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.

Why is this if-statement needed?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I originally did not have it in there either, but there is an linting rule that forced me to add it :-)
It otherwise threw me guard-for-in error
https://eslint.org/docs/latest/rules/guard-for-in

@brianwhaley

Copy link
Copy Markdown
Contributor

Interesting that we are doing this... i would have to look back, but i think that i had a similar solution to this in the first refactor I did. Glad it is coming back, makes maintenance much easier. Any card provider can be added very easily now.

@pano9000
pano9000 requested review from profnandaa and removed request for profnandaaMarch 10, 2023 00:07

@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.

LGTM, thanks.

@profnandaa
profnandaa merged commit 4c25f26 into validatorjs:masterJun 26, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@pano9000@brianwhaley@profnandaa@braaar@rubiin@WikiRik
, '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

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version - #2117

Merged
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards
Jun 26, 2023
Merged

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version#2117
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards

Conversation

@pano9000

Copy link
Copy Markdown
Contributor

Hello,

I've refactored the way the allCards variable is created/handled in isCreditCard:
It currently is manually hardcoding all of the previously already defined RegExp into one huge RegExp, that it later then checks against.

This is problematic, because:

  • it adds unnecessary code duplication (you need to store the provider RegExps in two places: 1x on its own and 1x inside allCards
  • (at least to my eyes) it is unreadable
  • therefore it makes it a nightmare to update RegExps or add new providers

I've replace it with a dynamically created array with the RegExps from the cards object instead, which will make it a lot easier to maintain and update, when new providers are added:

  • you only need to add the RegExp inside the cards object
  • no manual copying of the RegExp necessary

Since we are now working with an array instead of one huge RegExp, I had to also change the last "else if":
There I am using the Array some() method, which checks if any of the items inside the array return true for a given function.

Checklist

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

get rid of the hardcoded allCards variable, which was a manual copy of the existing regExp for card provider.
Replace it with a dynamically created array instead, which will make it easier to maintain, when new providers are added.
@codecov

codecovBot commented Dec 6, 2022

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (1ecdd21) compared to base (531dc7f).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2117 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 104 104 Lines 2308 2313 +5 Branches 578 579 +1 =========================================
+ Hits 2308 2313 +5 
Impacted FilesCoverage Δ
src/lib/isCreditCard.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

add "istanbull ignore else", similarly to how it is was done in:
9ee09a7
const tmpCardsArray = [];
for (const cardProvider in cards) {
// istanbul ignore else
if (cards.hasOwnProperty(cardProvider)) {

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.

Why is this if-statement needed?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I originally did not have it in there either, but there is an linting rule that forced me to add it :-)
It otherwise threw me guard-for-in error
https://eslint.org/docs/latest/rules/guard-for-in

@brianwhaley

Copy link
Copy Markdown
Contributor

Interesting that we are doing this... i would have to look back, but i think that i had a similar solution to this in the first refactor I did. Glad it is coming back, makes maintenance much easier. Any card provider can be added very easily now.

@pano9000
pano9000 requested review from profnandaa and removed request for profnandaaMarch 10, 2023 00:07

@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.

LGTM, thanks.

@profnandaa
profnandaa merged commit 4c25f26 into validatorjs:masterJun 26, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@pano9000@brianwhaley@profnandaa@braaar@rubiin@WikiRik
, '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

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version - #2117

Merged
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards
Jun 26, 2023
Merged

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version#2117
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards

Conversation

@pano9000

Copy link
Copy Markdown
Contributor

Hello,

I've refactored the way the allCards variable is created/handled in isCreditCard:
It currently is manually hardcoding all of the previously already defined RegExp into one huge RegExp, that it later then checks against.

This is problematic, because:

  • it adds unnecessary code duplication (you need to store the provider RegExps in two places: 1x on its own and 1x inside allCards
  • (at least to my eyes) it is unreadable
  • therefore it makes it a nightmare to update RegExps or add new providers

I've replace it with a dynamically created array with the RegExps from the cards object instead, which will make it a lot easier to maintain and update, when new providers are added:

  • you only need to add the RegExp inside the cards object
  • no manual copying of the RegExp necessary

Since we are now working with an array instead of one huge RegExp, I had to also change the last "else if":
There I am using the Array some() method, which checks if any of the items inside the array return true for a given function.

Checklist

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

get rid of the hardcoded allCards variable, which was a manual copy of the existing regExp for card provider.
Replace it with a dynamically created array instead, which will make it easier to maintain, when new providers are added.
@codecov

codecovBot commented Dec 6, 2022

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (1ecdd21) compared to base (531dc7f).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2117 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 104 104 Lines 2308 2313 +5 Branches 578 579 +1 =========================================
+ Hits 2308 2313 +5 
Impacted FilesCoverage Δ
src/lib/isCreditCard.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

add "istanbull ignore else", similarly to how it is was done in:
9ee09a7
const tmpCardsArray = [];
for (const cardProvider in cards) {
// istanbul ignore else
if (cards.hasOwnProperty(cardProvider)) {

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.

Why is this if-statement needed?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I originally did not have it in there either, but there is an linting rule that forced me to add it :-)
It otherwise threw me guard-for-in error
https://eslint.org/docs/latest/rules/guard-for-in

@brianwhaley

Copy link
Copy Markdown
Contributor

Interesting that we are doing this... i would have to look back, but i think that i had a similar solution to this in the first refactor I did. Glad it is coming back, makes maintenance much easier. Any card provider can be added very easily now.

@pano9000
pano9000 requested review from profnandaa and removed request for profnandaaMarch 10, 2023 00:07

@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.

LGTM, thanks.

@profnandaa
profnandaa merged commit 4c25f26 into validatorjs:masterJun 26, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@pano9000@brianwhaley@profnandaa@braaar@rubiin@WikiRik
, '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

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version - #2117

Merged
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards
Jun 26, 2023
Merged

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version#2117
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards

Conversation

@pano9000

Copy link
Copy Markdown
Contributor

Hello,

I've refactored the way the allCards variable is created/handled in isCreditCard:
It currently is manually hardcoding all of the previously already defined RegExp into one huge RegExp, that it later then checks against.

This is problematic, because:

  • it adds unnecessary code duplication (you need to store the provider RegExps in two places: 1x on its own and 1x inside allCards
  • (at least to my eyes) it is unreadable
  • therefore it makes it a nightmare to update RegExps or add new providers

I've replace it with a dynamically created array with the RegExps from the cards object instead, which will make it a lot easier to maintain and update, when new providers are added:

  • you only need to add the RegExp inside the cards object
  • no manual copying of the RegExp necessary

Since we are now working with an array instead of one huge RegExp, I had to also change the last "else if":
There I am using the Array some() method, which checks if any of the items inside the array return true for a given function.

Checklist

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

get rid of the hardcoded allCards variable, which was a manual copy of the existing regExp for card provider.
Replace it with a dynamically created array instead, which will make it easier to maintain, when new providers are added.
@codecov

codecovBot commented Dec 6, 2022

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (1ecdd21) compared to base (531dc7f).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2117 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 104 104 Lines 2308 2313 +5 Branches 578 579 +1 =========================================
+ Hits 2308 2313 +5 
Impacted FilesCoverage Δ
src/lib/isCreditCard.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

add "istanbull ignore else", similarly to how it is was done in:
9ee09a7
const tmpCardsArray = [];
for (const cardProvider in cards) {
// istanbul ignore else
if (cards.hasOwnProperty(cardProvider)) {

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.

Why is this if-statement needed?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I originally did not have it in there either, but there is an linting rule that forced me to add it :-)
It otherwise threw me guard-for-in error
https://eslint.org/docs/latest/rules/guard-for-in

@brianwhaley

Copy link
Copy Markdown
Contributor

Interesting that we are doing this... i would have to look back, but i think that i had a similar solution to this in the first refactor I did. Glad it is coming back, makes maintenance much easier. Any card provider can be added very easily now.

@pano9000
pano9000 requested review from profnandaa and removed request for profnandaaMarch 10, 2023 00:07

@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.

LGTM, thanks.

@profnandaa
profnandaa merged commit 4c25f26 into validatorjs:masterJun 26, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@pano9000@brianwhaley@profnandaa@braaar@rubiin@WikiRik
, '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

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version - #2117

Merged
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards
Jun 26, 2023
Merged

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version#2117
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards

Conversation

@pano9000

Copy link
Copy Markdown
Contributor

Hello,

I've refactored the way the allCards variable is created/handled in isCreditCard:
It currently is manually hardcoding all of the previously already defined RegExp into one huge RegExp, that it later then checks against.

This is problematic, because:

  • it adds unnecessary code duplication (you need to store the provider RegExps in two places: 1x on its own and 1x inside allCards
  • (at least to my eyes) it is unreadable
  • therefore it makes it a nightmare to update RegExps or add new providers

I've replace it with a dynamically created array with the RegExps from the cards object instead, which will make it a lot easier to maintain and update, when new providers are added:

  • you only need to add the RegExp inside the cards object
  • no manual copying of the RegExp necessary

Since we are now working with an array instead of one huge RegExp, I had to also change the last "else if":
There I am using the Array some() method, which checks if any of the items inside the array return true for a given function.

Checklist

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

get rid of the hardcoded allCards variable, which was a manual copy of the existing regExp for card provider.
Replace it with a dynamically created array instead, which will make it easier to maintain, when new providers are added.
@codecov

codecovBot commented Dec 6, 2022

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (1ecdd21) compared to base (531dc7f).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2117 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 104 104 Lines 2308 2313 +5 Branches 578 579 +1 =========================================
+ Hits 2308 2313 +5 
Impacted FilesCoverage Δ
src/lib/isCreditCard.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

add "istanbull ignore else", similarly to how it is was done in:
9ee09a7
const tmpCardsArray = [];
for (const cardProvider in cards) {
// istanbul ignore else
if (cards.hasOwnProperty(cardProvider)) {

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.

Why is this if-statement needed?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I originally did not have it in there either, but there is an linting rule that forced me to add it :-)
It otherwise threw me guard-for-in error
https://eslint.org/docs/latest/rules/guard-for-in

@brianwhaley

Copy link
Copy Markdown
Contributor

Interesting that we are doing this... i would have to look back, but i think that i had a similar solution to this in the first refactor I did. Glad it is coming back, makes maintenance much easier. Any card provider can be added very easily now.

@pano9000
pano9000 requested review from profnandaa and removed request for profnandaaMarch 10, 2023 00:07

@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.

LGTM, thanks.

@profnandaa
profnandaa merged commit 4c25f26 into validatorjs:masterJun 26, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@pano9000@brianwhaley@profnandaa@braaar@rubiin@WikiRik
, '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

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version - #2117

Merged
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards
Jun 26, 2023
Merged

refactor(isCreditCard): create allCards dynamically and get rid of hard-to-maintain hardcoded version#2117
profnandaa merged 2 commits into
validatorjs:masterfrom
pano9000:refactor_isCreditCard-allCards

Conversation

@pano9000

Copy link
Copy Markdown
Contributor

Hello,

I've refactored the way the allCards variable is created/handled in isCreditCard:
It currently is manually hardcoding all of the previously already defined RegExp into one huge RegExp, that it later then checks against.

This is problematic, because:

  • it adds unnecessary code duplication (you need to store the provider RegExps in two places: 1x on its own and 1x inside allCards
  • (at least to my eyes) it is unreadable
  • therefore it makes it a nightmare to update RegExps or add new providers

I've replace it with a dynamically created array with the RegExps from the cards object instead, which will make it a lot easier to maintain and update, when new providers are added:

  • you only need to add the RegExp inside the cards object
  • no manual copying of the RegExp necessary

Since we are now working with an array instead of one huge RegExp, I had to also change the last "else if":
There I am using the Array some() method, which checks if any of the items inside the array return true for a given function.

Checklist

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

get rid of the hardcoded allCards variable, which was a manual copy of the existing regExp for card provider.
Replace it with a dynamically created array instead, which will make it easier to maintain, when new providers are added.
@codecov

codecovBot commented Dec 6, 2022

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (1ecdd21) compared to base (531dc7f).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2117 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 104 104 Lines 2308 2313 +5 Branches 578 579 +1 =========================================
+ Hits 2308 2313 +5 
Impacted FilesCoverage Δ
src/lib/isCreditCard.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

add "istanbull ignore else", similarly to how it is was done in:
9ee09a7
const tmpCardsArray = [];
for (const cardProvider in cards) {
// istanbul ignore else
if (cards.hasOwnProperty(cardProvider)) {

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.

Why is this if-statement needed?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I originally did not have it in there either, but there is an linting rule that forced me to add it :-)
It otherwise threw me guard-for-in error
https://eslint.org/docs/latest/rules/guard-for-in

@brianwhaley

Copy link
Copy Markdown
Contributor

Interesting that we are doing this... i would have to look back, but i think that i had a similar solution to this in the first refactor I did. Glad it is coming back, makes maintenance much easier. Any card provider can be added very easily now.

@pano9000
pano9000 requested review from profnandaa and removed request for profnandaaMarch 10, 2023 00:07

@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.

LGTM, thanks.

@profnandaa
profnandaa merged commit 4c25f26 into validatorjs:masterJun 26, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@pano9000@brianwhaley@profnandaa@braaar@rubiin@WikiRik