Latest commit

History

57 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Datavized Code Style

Our code style is based on Crockford's, with a few modifications.

The Basics

  • Indent with tabs, not spaces
  • Always end statements with semicolons
  • Conditionals and loops ("if", "while", "for") always use curly braces
  • Never use var. Use const wherever possible and let only if necessary.
  • Always use "strict equal" (=== and !==, not == or !=)
  • Define variables in scope, never global.

The Rules

Stylistic Issues

RuleValueDescription
array-bracket-spacingenforce consistent spacing inside array brackets
brace-styleenforce consistent brace style for blocks
camelcaseenforce camelcase naming convention
comma-danglerequire or disallow trailing commas
comma-spacingenforce consistent spacing before and after commas
comma-styleenforce consistent comma style
indenttabenforce consistent indentation
key-spacingenforce consistent spacing between keys and values in object literal properties
keyword-spacingenforce consistent spacing before and after keywords
linebreak-styleunixenforce consistent linebreak style
max-params5enforce a maximum number of parameters in function definitions
new-caprequire constructor names to begin with a capital letter
no-array-constructordisallow Array constructors
no-bitwisedisallow bitwise operators
no-continuedisallow continue statements
no-mixed-spaces-and-tabsdisallow mixed spaces and tabs for indentation
no-trailing-spacesdisallow trailing whitespace at the end of lines
no-underscore-dangledisallow dangling underscores in identifiers
one-varneverenforce variables to be declared either together or separately in functions
one-var-declaration-per-linerequire or disallow newlines around variable declarations
quote-propsas-neededrequire quotes around object literal property names
quotessingleenforce the consistent use of either backticks, double, or single quotes
semirequire or disallow semicolons instead of ASI
semi-spacingenforce consistent spacing before and after semicolons
space-before-blocksenforce consistent spacing before blocks
space-before-function-parenenforce consistent spacing before function definition opening parenthesis
space-in-parensenforce consistent spacing inside parentheses
space-infix-opsrequire spacing around infix operators
space-unary-opsenforce consistent spacing before or after unary operators

Best Practices

RuleValueDescription
babel/no-invalid-thisdisallow this keywords outside of classes or class-like objects
block-scoped-varenforce the use of variables within the scope they are defined
consistent-returnrequire return statements to either always or never specify values
curlyenforce consistent brace style for all control statements
dot-notationenforce dot notation whenever possible
eqeqeqrequire the use of === and !==
guard-for-inrequire for-in loops to include an if statement
no-callerdisallow the use of arguments.caller or arguments.callee
no-case-declarationsdisallow lexical declarations in case clauses
no-empty-patterndisallow empty destructuring patterns
no-evaldisallow the use of eval()
no-extend-nativedisallow extending native types
no-fallthroughdisallow fallthrough of case statements
no-global-assigndisallow assignments to native objects or read-only global variables
no-implicit-globalsdisallow declarations in the global scope
no-implied-evaldisallow the use of eval()-like methods
no-iteratordisallow the use of the __iterator__ property
no-loop-funcdisallow function declarations that contain unsafe references inside loop statements
no-multi-strdisallow multiline strings
no-newdisallow new operators outside of assignments or comparisons
no-new-funcdisallow new operators with the Function object
no-octaldisallow octal literals
no-redeclaredisallow variable redeclaration
no-self-assigndisallow assignments where both sides are exactly the same
no-sequencesdisallow comma operators
no-unused-labelsdisallow unused labels
no-useless-catchdisallow unnecessary catch clauses
no-useless-escapedisallow unnecessary escape characters
no-withdisallow with statements
radixenforce the consistent use of the radix argument when using parseInt()
require-awaitdisallow async functions which have no await expression
vars-on-toprequire var declarations be placed at the top of their containing scope
wrap-iifeanyrequire parentheses around immediate function invocations

ECMAScript 6

RuleValueDescription
constructor-superrequire super() calls in constructors
no-class-assigndisallow reassigning class members
no-const-assigndisallow reassigning const variables
no-dupe-class-membersdisallow duplicate class members
no-new-symboldisallow new operators with the Symbol object
no-this-before-superdisallow this/super before calling super() in constructors
no-useless-computed-keydisallow unnecessary computed property keys in objects and classes
no-varrequire let or const instead of var
prefer-constrequire const declarations for variables that are never reassigned after declared
require-yieldrequire generator functions to contain yield

Possible Errors

RuleValueDescription
for-directionenforce "for" loop update clause moving the counter in the right direction.
getter-returnenforce return statements in getters
no-async-promise-executordisallow using an async function as a Promise executor
no-compare-neg-zerodisallow comparing against -0
no-cond-assigndisallow assignment operators in conditional expressions
no-constant-conditiondisallow constant expressions in conditions
no-control-regexdisallow control characters in regular expressions
no-debuggerdisallow the use of debugger
no-dupe-argsdisallow duplicate arguments in function definitions
no-dupe-else-ifdisallow duplicate conditions in if-else-if chains
no-dupe-keysdisallow duplicate keys in object literals
no-duplicate-casedisallow duplicate case labels
no-emptydisallow empty block statements
no-empty-character-classdisallow empty character classes in regular expressions
no-ex-assigndisallow reassigning exceptions in catch clauses
no-extra-boolean-castdisallow unnecessary boolean casts
no-extra-parensdisallow unnecessary parentheses
no-extra-semidisallow unnecessary semicolons
no-func-assigndisallow reassigning function declarations
no-import-assigndisallow assigning to imported bindings
no-inner-declarationsdisallow variable or function declarations in nested blocks
no-invalid-regexpdisallow invalid regular expression strings in RegExp constructors
no-irregular-whitespacedisallow irregular whitespace
no-misleading-character-classdisallow characters which are made with multiple code points in character class syntax
no-obj-callsdisallow calling global object properties as functions
no-prototype-builtinsdisallow calling some Object.prototype methods directly on objects
no-regex-spacesdisallow multiple spaces in regular expressions
no-setter-returndisallow returning values from setters
no-sparse-arraysdisallow sparse arrays
no-unexpected-multilinedisallow confusing multiline expressions
no-unreachabledisallow unreachable code after return, throw, continue, and break statements
no-unsafe-finallydisallow control flow statements in finally blocks
no-unsafe-negationdisallow negating the left operand of relational operators
require-atomic-updatesdisallow assignments that can lead to race conditions due to usage of await or yield
use-isnanrequire calls to isNaN() when checking for NaN
valid-typeofenforce comparing typeof expressions against valid strings

Variables

RuleValueDescription
no-delete-vardisallow deleting variables
no-restricted-globalseventdisallow specified global variables
no-shadow-restricted-namesdisallow identifiers from shadowing restricted names
no-undefdisallow the use of undeclared variables unless mentioned in /*global */ comments
no-unused-varsdisallow unused variables
no-use-before-definedisallow the use of variables before they are defined

Strict Mode

RuleValueDescription
strictrequire or disallow strict mode directives

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

Latest commit

History

57 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Datavized Code Style

Our code style is based on Crockford's, with a few modifications.

The Basics

  • Indent with tabs, not spaces
  • Always end statements with semicolons
  • Conditionals and loops ("if", "while", "for") always use curly braces
  • Never use var. Use const wherever possible and let only if necessary.
  • Always use "strict equal" (=== and !==, not == or !=)
  • Define variables in scope, never global.

The Rules

Stylistic Issues

RuleValueDescription
array-bracket-spacingenforce consistent spacing inside array brackets
brace-styleenforce consistent brace style for blocks
camelcaseenforce camelcase naming convention
comma-danglerequire or disallow trailing commas
comma-spacingenforce consistent spacing before and after commas
comma-styleenforce consistent comma style
indenttabenforce consistent indentation
key-spacingenforce consistent spacing between keys and values in object literal properties
keyword-spacingenforce consistent spacing before and after keywords
linebreak-styleunixenforce consistent linebreak style
max-params5enforce a maximum number of parameters in function definitions
new-caprequire constructor names to begin with a capital letter
no-array-constructordisallow Array constructors
no-bitwisedisallow bitwise operators
no-continuedisallow continue statements
no-mixed-spaces-and-tabsdisallow mixed spaces and tabs for indentation
no-trailing-spacesdisallow trailing whitespace at the end of lines
no-underscore-dangledisallow dangling underscores in identifiers
one-varneverenforce variables to be declared either together or separately in functions
one-var-declaration-per-linerequire or disallow newlines around variable declarations
quote-propsas-neededrequire quotes around object literal property names
quotessingleenforce the consistent use of either backticks, double, or single quotes
semirequire or disallow semicolons instead of ASI
semi-spacingenforce consistent spacing before and after semicolons
space-before-blocksenforce consistent spacing before blocks
space-before-function-parenenforce consistent spacing before function definition opening parenthesis
space-in-parensenforce consistent spacing inside parentheses
space-infix-opsrequire spacing around infix operators
space-unary-opsenforce consistent spacing before or after unary operators

Best Practices

RuleValueDescription
babel/no-invalid-thisdisallow this keywords outside of classes or class-like objects
block-scoped-varenforce the use of variables within the scope they are defined
consistent-returnrequire return statements to either always or never specify values
curlyenforce consistent brace style for all control statements
dot-notationenforce dot notation whenever possible
eqeqeqrequire the use of === and !==
guard-for-inrequire for-in loops to include an if statement
no-callerdisallow the use of arguments.caller or arguments.callee
no-case-declarationsdisallow lexical declarations in case clauses
no-empty-patterndisallow empty destructuring patterns
no-evaldisallow the use of eval()
no-extend-nativedisallow extending native types
no-fallthroughdisallow fallthrough of case statements
no-global-assigndisallow assignments to native objects or read-only global variables
no-implicit-globalsdisallow declarations in the global scope
no-implied-evaldisallow the use of eval()-like methods
no-iteratordisallow the use of the __iterator__ property
no-loop-funcdisallow function declarations that contain unsafe references inside loop statements
no-multi-strdisallow multiline strings
no-newdisallow new operators outside of assignments or comparisons
no-new-funcdisallow new operators with the Function object
no-octaldisallow octal literals
no-redeclaredisallow variable redeclaration
no-self-assigndisallow assignments where both sides are exactly the same
no-sequencesdisallow comma operators
no-unused-labelsdisallow unused labels
no-useless-catchdisallow unnecessary catch clauses
no-useless-escapedisallow unnecessary escape characters
no-withdisallow with statements
radixenforce the consistent use of the radix argument when using parseInt()
require-awaitdisallow async functions which have no await expression
vars-on-toprequire var declarations be placed at the top of their containing scope
wrap-iifeanyrequire parentheses around immediate function invocations

ECMAScript 6

RuleValueDescription
constructor-superrequire super() calls in constructors
no-class-assigndisallow reassigning class members
no-const-assigndisallow reassigning const variables
no-dupe-class-membersdisallow duplicate class members
no-new-symboldisallow new operators with the Symbol object
no-this-before-superdisallow this/super before calling super() in constructors
no-useless-computed-keydisallow unnecessary computed property keys in objects and classes
no-varrequire let or const instead of var
prefer-constrequire const declarations for variables that are never reassigned after declared
require-yieldrequire generator functions to contain yield

Possible Errors

RuleValueDescription
for-directionenforce "for" loop update clause moving the counter in the right direction.
getter-returnenforce return statements in getters
no-async-promise-executordisallow using an async function as a Promise executor
no-compare-neg-zerodisallow comparing against -0
no-cond-assigndisallow assignment operators in conditional expressions
no-constant-conditiondisallow constant expressions in conditions
no-control-regexdisallow control characters in regular expressions
no-debuggerdisallow the use of debugger
no-dupe-argsdisallow duplicate arguments in function definitions
no-dupe-else-ifdisallow duplicate conditions in if-else-if chains
no-dupe-keysdisallow duplicate keys in object literals
no-duplicate-casedisallow duplicate case labels
no-emptydisallow empty block statements
no-empty-character-classdisallow empty character classes in regular expressions
no-ex-assigndisallow reassigning exceptions in catch clauses
no-extra-boolean-castdisallow unnecessary boolean casts
no-extra-parensdisallow unnecessary parentheses
no-extra-semidisallow unnecessary semicolons
no-func-assigndisallow reassigning function declarations
no-import-assigndisallow assigning to imported bindings
no-inner-declarationsdisallow variable or function declarations in nested blocks
no-invalid-regexpdisallow invalid regular expression strings in RegExp constructors
no-irregular-whitespacedisallow irregular whitespace
no-misleading-character-classdisallow characters which are made with multiple code points in character class syntax
no-obj-callsdisallow calling global object properties as functions
no-prototype-builtinsdisallow calling some Object.prototype methods directly on objects
no-regex-spacesdisallow multiple spaces in regular expressions
no-setter-returndisallow returning values from setters
no-sparse-arraysdisallow sparse arrays
no-unexpected-multilinedisallow confusing multiline expressions
no-unreachabledisallow unreachable code after return, throw, continue, and break statements
no-unsafe-finallydisallow control flow statements in finally blocks
no-unsafe-negationdisallow negating the left operand of relational operators
require-atomic-updatesdisallow assignments that can lead to race conditions due to usage of await or yield
use-isnanrequire calls to isNaN() when checking for NaN
valid-typeofenforce comparing typeof expressions against valid strings

Variables

RuleValueDescription
no-delete-vardisallow deleting variables
no-restricted-globalseventdisallow specified global variables
no-shadow-restricted-namesdisallow identifiers from shadowing restricted names
no-undefdisallow the use of undeclared variables unless mentioned in /*global */ comments
no-unused-varsdisallow unused variables
no-use-before-definedisallow the use of variables before they are defined

Strict Mode

RuleValueDescription
strictrequire or disallow strict mode directives

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

Latest commit

History

57 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Datavized Code Style

Our code style is based on Crockford's, with a few modifications.

The Basics

  • Indent with tabs, not spaces
  • Always end statements with semicolons
  • Conditionals and loops ("if", "while", "for") always use curly braces
  • Never use var. Use const wherever possible and let only if necessary.
  • Always use "strict equal" (=== and !==, not == or !=)
  • Define variables in scope, never global.

The Rules

Stylistic Issues

RuleValueDescription
array-bracket-spacingenforce consistent spacing inside array brackets
brace-styleenforce consistent brace style for blocks
camelcaseenforce camelcase naming convention
comma-danglerequire or disallow trailing commas
comma-spacingenforce consistent spacing before and after commas
comma-styleenforce consistent comma style
indenttabenforce consistent indentation
key-spacingenforce consistent spacing between keys and values in object literal properties
keyword-spacingenforce consistent spacing before and after keywords
linebreak-styleunixenforce consistent linebreak style
max-params5enforce a maximum number of parameters in function definitions
new-caprequire constructor names to begin with a capital letter
no-array-constructordisallow Array constructors
no-bitwisedisallow bitwise operators
no-continuedisallow continue statements
no-mixed-spaces-and-tabsdisallow mixed spaces and tabs for indentation
no-trailing-spacesdisallow trailing whitespace at the end of lines
no-underscore-dangledisallow dangling underscores in identifiers
one-varneverenforce variables to be declared either together or separately in functions
one-var-declaration-per-linerequire or disallow newlines around variable declarations
quote-propsas-neededrequire quotes around object literal property names
quotessingleenforce the consistent use of either backticks, double, or single quotes
semirequire or disallow semicolons instead of ASI
semi-spacingenforce consistent spacing before and after semicolons
space-before-blocksenforce consistent spacing before blocks
space-before-function-parenenforce consistent spacing before function definition opening parenthesis
space-in-parensenforce consistent spacing inside parentheses
space-infix-opsrequire spacing around infix operators
space-unary-opsenforce consistent spacing before or after unary operators

Best Practices

RuleValueDescription
babel/no-invalid-thisdisallow this keywords outside of classes or class-like objects
block-scoped-varenforce the use of variables within the scope they are defined
consistent-returnrequire return statements to either always or never specify values
curlyenforce consistent brace style for all control statements
dot-notationenforce dot notation whenever possible
eqeqeqrequire the use of === and !==
guard-for-inrequire for-in loops to include an if statement
no-callerdisallow the use of arguments.caller or arguments.callee
no-case-declarationsdisallow lexical declarations in case clauses
no-empty-patterndisallow empty destructuring patterns
no-evaldisallow the use of eval()
no-extend-nativedisallow extending native types
no-fallthroughdisallow fallthrough of case statements
no-global-assigndisallow assignments to native objects or read-only global variables
no-implicit-globalsdisallow declarations in the global scope
no-implied-evaldisallow the use of eval()-like methods
no-iteratordisallow the use of the __iterator__ property
no-loop-funcdisallow function declarations that contain unsafe references inside loop statements
no-multi-strdisallow multiline strings
no-newdisallow new operators outside of assignments or comparisons
no-new-funcdisallow new operators with the Function object
no-octaldisallow octal literals
no-redeclaredisallow variable redeclaration
no-self-assigndisallow assignments where both sides are exactly the same
no-sequencesdisallow comma operators
no-unused-labelsdisallow unused labels
no-useless-catchdisallow unnecessary catch clauses
no-useless-escapedisallow unnecessary escape characters
no-withdisallow with statements
radixenforce the consistent use of the radix argument when using parseInt()
require-awaitdisallow async functions which have no await expression
vars-on-toprequire var declarations be placed at the top of their containing scope
wrap-iifeanyrequire parentheses around immediate function invocations

ECMAScript 6

RuleValueDescription
constructor-superrequire super() calls in constructors
no-class-assigndisallow reassigning class members
no-const-assigndisallow reassigning const variables
no-dupe-class-membersdisallow duplicate class members
no-new-symboldisallow new operators with the Symbol object
no-this-before-superdisallow this/super before calling super() in constructors
no-useless-computed-keydisallow unnecessary computed property keys in objects and classes
no-varrequire let or const instead of var
prefer-constrequire const declarations for variables that are never reassigned after declared
require-yieldrequire generator functions to contain yield

Possible Errors

RuleValueDescription
for-directionenforce "for" loop update clause moving the counter in the right direction.
getter-returnenforce return statements in getters
no-async-promise-executordisallow using an async function as a Promise executor
no-compare-neg-zerodisallow comparing against -0
no-cond-assigndisallow assignment operators in conditional expressions
no-constant-conditiondisallow constant expressions in conditions
no-control-regexdisallow control characters in regular expressions
no-debuggerdisallow the use of debugger
no-dupe-argsdisallow duplicate arguments in function definitions
no-dupe-else-ifdisallow duplicate conditions in if-else-if chains
no-dupe-keysdisallow duplicate keys in object literals
no-duplicate-casedisallow duplicate case labels
no-emptydisallow empty block statements
no-empty-character-classdisallow empty character classes in regular expressions
no-ex-assigndisallow reassigning exceptions in catch clauses
no-extra-boolean-castdisallow unnecessary boolean casts
no-extra-parensdisallow unnecessary parentheses
no-extra-semidisallow unnecessary semicolons
no-func-assigndisallow reassigning function declarations
no-import-assigndisallow assigning to imported bindings
no-inner-declarationsdisallow variable or function declarations in nested blocks
no-invalid-regexpdisallow invalid regular expression strings in RegExp constructors
no-irregular-whitespacedisallow irregular whitespace
no-misleading-character-classdisallow characters which are made with multiple code points in character class syntax
no-obj-callsdisallow calling global object properties as functions
no-prototype-builtinsdisallow calling some Object.prototype methods directly on objects
no-regex-spacesdisallow multiple spaces in regular expressions
no-setter-returndisallow returning values from setters
no-sparse-arraysdisallow sparse arrays
no-unexpected-multilinedisallow confusing multiline expressions
no-unreachabledisallow unreachable code after return, throw, continue, and break statements
no-unsafe-finallydisallow control flow statements in finally blocks
no-unsafe-negationdisallow negating the left operand of relational operators
require-atomic-updatesdisallow assignments that can lead to race conditions due to usage of await or yield
use-isnanrequire calls to isNaN() when checking for NaN
valid-typeofenforce comparing typeof expressions against valid strings

Variables

RuleValueDescription
no-delete-vardisallow deleting variables
no-restricted-globalseventdisallow specified global variables
no-shadow-restricted-namesdisallow identifiers from shadowing restricted names
no-undefdisallow the use of undeclared variables unless mentioned in /*global */ comments
no-unused-varsdisallow unused variables
no-use-before-definedisallow the use of variables before they are defined

Strict Mode

RuleValueDescription
strictrequire or disallow strict mode directives

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

Latest commit

History

57 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Datavized Code Style

Our code style is based on Crockford's, with a few modifications.

The Basics

  • Indent with tabs, not spaces
  • Always end statements with semicolons
  • Conditionals and loops ("if", "while", "for") always use curly braces
  • Never use var. Use const wherever possible and let only if necessary.
  • Always use "strict equal" (=== and !==, not == or !=)
  • Define variables in scope, never global.

The Rules

Stylistic Issues

RuleValueDescription
array-bracket-spacingenforce consistent spacing inside array brackets
brace-styleenforce consistent brace style for blocks
camelcaseenforce camelcase naming convention
comma-danglerequire or disallow trailing commas
comma-spacingenforce consistent spacing before and after commas
comma-styleenforce consistent comma style
indenttabenforce consistent indentation
key-spacingenforce consistent spacing between keys and values in object literal properties
keyword-spacingenforce consistent spacing before and after keywords
linebreak-styleunixenforce consistent linebreak style
max-params5enforce a maximum number of parameters in function definitions
new-caprequire constructor names to begin with a capital letter
no-array-constructordisallow Array constructors
no-bitwisedisallow bitwise operators
no-continuedisallow continue statements
no-mixed-spaces-and-tabsdisallow mixed spaces and tabs for indentation
no-trailing-spacesdisallow trailing whitespace at the end of lines
no-underscore-dangledisallow dangling underscores in identifiers
one-varneverenforce variables to be declared either together or separately in functions
one-var-declaration-per-linerequire or disallow newlines around variable declarations
quote-propsas-neededrequire quotes around object literal property names
quotessingleenforce the consistent use of either backticks, double, or single quotes
semirequire or disallow semicolons instead of ASI
semi-spacingenforce consistent spacing before and after semicolons
space-before-blocksenforce consistent spacing before blocks
space-before-function-parenenforce consistent spacing before function definition opening parenthesis
space-in-parensenforce consistent spacing inside parentheses
space-infix-opsrequire spacing around infix operators
space-unary-opsenforce consistent spacing before or after unary operators

Best Practices

RuleValueDescription
babel/no-invalid-thisdisallow this keywords outside of classes or class-like objects
block-scoped-varenforce the use of variables within the scope they are defined
consistent-returnrequire return statements to either always or never specify values
curlyenforce consistent brace style for all control statements
dot-notationenforce dot notation whenever possible
eqeqeqrequire the use of === and !==
guard-for-inrequire for-in loops to include an if statement
no-callerdisallow the use of arguments.caller or arguments.callee
no-case-declarationsdisallow lexical declarations in case clauses
no-empty-patterndisallow empty destructuring patterns
no-evaldisallow the use of eval()
no-extend-nativedisallow extending native types
no-fallthroughdisallow fallthrough of case statements
no-global-assigndisallow assignments to native objects or read-only global variables
no-implicit-globalsdisallow declarations in the global scope
no-implied-evaldisallow the use of eval()-like methods
no-iteratordisallow the use of the __iterator__ property
no-loop-funcdisallow function declarations that contain unsafe references inside loop statements
no-multi-strdisallow multiline strings
no-newdisallow new operators outside of assignments or comparisons
no-new-funcdisallow new operators with the Function object
no-octaldisallow octal literals
no-redeclaredisallow variable redeclaration
no-self-assigndisallow assignments where both sides are exactly the same
no-sequencesdisallow comma operators
no-unused-labelsdisallow unused labels
no-useless-catchdisallow unnecessary catch clauses
no-useless-escapedisallow unnecessary escape characters
no-withdisallow with statements
radixenforce the consistent use of the radix argument when using parseInt()
require-awaitdisallow async functions which have no await expression
vars-on-toprequire var declarations be placed at the top of their containing scope
wrap-iifeanyrequire parentheses around immediate function invocations

ECMAScript 6

RuleValueDescription
constructor-superrequire super() calls in constructors
no-class-assigndisallow reassigning class members
no-const-assigndisallow reassigning const variables
no-dupe-class-membersdisallow duplicate class members
no-new-symboldisallow new operators with the Symbol object
no-this-before-superdisallow this/super before calling super() in constructors
no-useless-computed-keydisallow unnecessary computed property keys in objects and classes
no-varrequire let or const instead of var
prefer-constrequire const declarations for variables that are never reassigned after declared
require-yieldrequire generator functions to contain yield

Possible Errors

RuleValueDescription
for-directionenforce "for" loop update clause moving the counter in the right direction.
getter-returnenforce return statements in getters
no-async-promise-executordisallow using an async function as a Promise executor
no-compare-neg-zerodisallow comparing against -0
no-cond-assigndisallow assignment operators in conditional expressions
no-constant-conditiondisallow constant expressions in conditions
no-control-regexdisallow control characters in regular expressions
no-debuggerdisallow the use of debugger
no-dupe-argsdisallow duplicate arguments in function definitions
no-dupe-else-ifdisallow duplicate conditions in if-else-if chains
no-dupe-keysdisallow duplicate keys in object literals
no-duplicate-casedisallow duplicate case labels
no-emptydisallow empty block statements
no-empty-character-classdisallow empty character classes in regular expressions
no-ex-assigndisallow reassigning exceptions in catch clauses
no-extra-boolean-castdisallow unnecessary boolean casts
no-extra-parensdisallow unnecessary parentheses
no-extra-semidisallow unnecessary semicolons
no-func-assigndisallow reassigning function declarations
no-import-assigndisallow assigning to imported bindings
no-inner-declarationsdisallow variable or function declarations in nested blocks
no-invalid-regexpdisallow invalid regular expression strings in RegExp constructors
no-irregular-whitespacedisallow irregular whitespace
no-misleading-character-classdisallow characters which are made with multiple code points in character class syntax
no-obj-callsdisallow calling global object properties as functions
no-prototype-builtinsdisallow calling some Object.prototype methods directly on objects
no-regex-spacesdisallow multiple spaces in regular expressions
no-setter-returndisallow returning values from setters
no-sparse-arraysdisallow sparse arrays
no-unexpected-multilinedisallow confusing multiline expressions
no-unreachabledisallow unreachable code after return, throw, continue, and break statements
no-unsafe-finallydisallow control flow statements in finally blocks
no-unsafe-negationdisallow negating the left operand of relational operators
require-atomic-updatesdisallow assignments that can lead to race conditions due to usage of await or yield
use-isnanrequire calls to isNaN() when checking for NaN
valid-typeofenforce comparing typeof expressions against valid strings

Variables

RuleValueDescription
no-delete-vardisallow deleting variables
no-restricted-globalseventdisallow specified global variables
no-shadow-restricted-namesdisallow identifiers from shadowing restricted names
no-undefdisallow the use of undeclared variables unless mentioned in /*global */ comments
no-unused-varsdisallow unused variables
no-use-before-definedisallow the use of variables before they are defined

Strict Mode

RuleValueDescription
strictrequire or disallow strict mode directives

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

Latest commit

History

57 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Datavized Code Style

Our code style is based on Crockford's, with a few modifications.

The Basics

  • Indent with tabs, not spaces
  • Always end statements with semicolons
  • Conditionals and loops ("if", "while", "for") always use curly braces
  • Never use var. Use const wherever possible and let only if necessary.
  • Always use "strict equal" (=== and !==, not == or !=)
  • Define variables in scope, never global.

The Rules

Stylistic Issues

RuleValueDescription
array-bracket-spacingenforce consistent spacing inside array brackets
brace-styleenforce consistent brace style for blocks
camelcaseenforce camelcase naming convention
comma-danglerequire or disallow trailing commas
comma-spacingenforce consistent spacing before and after commas
comma-styleenforce consistent comma style
indenttabenforce consistent indentation
key-spacingenforce consistent spacing between keys and values in object literal properties
keyword-spacingenforce consistent spacing before and after keywords
linebreak-styleunixenforce consistent linebreak style
max-params5enforce a maximum number of parameters in function definitions
new-caprequire constructor names to begin with a capital letter
no-array-constructordisallow Array constructors
no-bitwisedisallow bitwise operators
no-continuedisallow continue statements
no-mixed-spaces-and-tabsdisallow mixed spaces and tabs for indentation
no-trailing-spacesdisallow trailing whitespace at the end of lines
no-underscore-dangledisallow dangling underscores in identifiers
one-varneverenforce variables to be declared either together or separately in functions
one-var-declaration-per-linerequire or disallow newlines around variable declarations
quote-propsas-neededrequire quotes around object literal property names
quotessingleenforce the consistent use of either backticks, double, or single quotes
semirequire or disallow semicolons instead of ASI
semi-spacingenforce consistent spacing before and after semicolons
space-before-blocksenforce consistent spacing before blocks
space-before-function-parenenforce consistent spacing before function definition opening parenthesis
space-in-parensenforce consistent spacing inside parentheses
space-infix-opsrequire spacing around infix operators
space-unary-opsenforce consistent spacing before or after unary operators

Best Practices

RuleValueDescription
babel/no-invalid-thisdisallow this keywords outside of classes or class-like objects
block-scoped-varenforce the use of variables within the scope they are defined
consistent-returnrequire return statements to either always or never specify values
curlyenforce consistent brace style for all control statements
dot-notationenforce dot notation whenever possible
eqeqeqrequire the use of === and !==
guard-for-inrequire for-in loops to include an if statement
no-callerdisallow the use of arguments.caller or arguments.callee
no-case-declarationsdisallow lexical declarations in case clauses
no-empty-patterndisallow empty destructuring patterns
no-evaldisallow the use of eval()
no-extend-nativedisallow extending native types
no-fallthroughdisallow fallthrough of case statements
no-global-assigndisallow assignments to native objects or read-only global variables
no-implicit-globalsdisallow declarations in the global scope
no-implied-evaldisallow the use of eval()-like methods
no-iteratordisallow the use of the __iterator__ property
no-loop-funcdisallow function declarations that contain unsafe references inside loop statements
no-multi-strdisallow multiline strings
no-newdisallow new operators outside of assignments or comparisons
no-new-funcdisallow new operators with the Function object
no-octaldisallow octal literals
no-redeclaredisallow variable redeclaration
no-self-assigndisallow assignments where both sides are exactly the same
no-sequencesdisallow comma operators
no-unused-labelsdisallow unused labels
no-useless-catchdisallow unnecessary catch clauses
no-useless-escapedisallow unnecessary escape characters
no-withdisallow with statements
radixenforce the consistent use of the radix argument when using parseInt()
require-awaitdisallow async functions which have no await expression
vars-on-toprequire var declarations be placed at the top of their containing scope
wrap-iifeanyrequire parentheses around immediate function invocations

ECMAScript 6

RuleValueDescription
constructor-superrequire super() calls in constructors
no-class-assigndisallow reassigning class members
no-const-assigndisallow reassigning const variables
no-dupe-class-membersdisallow duplicate class members
no-new-symboldisallow new operators with the Symbol object
no-this-before-superdisallow this/super before calling super() in constructors
no-useless-computed-keydisallow unnecessary computed property keys in objects and classes
no-varrequire let or const instead of var
prefer-constrequire const declarations for variables that are never reassigned after declared
require-yieldrequire generator functions to contain yield

Possible Errors

RuleValueDescription
for-directionenforce "for" loop update clause moving the counter in the right direction.
getter-returnenforce return statements in getters
no-async-promise-executordisallow using an async function as a Promise executor
no-compare-neg-zerodisallow comparing against -0
no-cond-assigndisallow assignment operators in conditional expressions
no-constant-conditiondisallow constant expressions in conditions
no-control-regexdisallow control characters in regular expressions
no-debuggerdisallow the use of debugger
no-dupe-argsdisallow duplicate arguments in function definitions
no-dupe-else-ifdisallow duplicate conditions in if-else-if chains
no-dupe-keysdisallow duplicate keys in object literals
no-duplicate-casedisallow duplicate case labels
no-emptydisallow empty block statements
no-empty-character-classdisallow empty character classes in regular expressions
no-ex-assigndisallow reassigning exceptions in catch clauses
no-extra-boolean-castdisallow unnecessary boolean casts
no-extra-parensdisallow unnecessary parentheses
no-extra-semidisallow unnecessary semicolons
no-func-assigndisallow reassigning function declarations
no-import-assigndisallow assigning to imported bindings
no-inner-declarationsdisallow variable or function declarations in nested blocks
no-invalid-regexpdisallow invalid regular expression strings in RegExp constructors
no-irregular-whitespacedisallow irregular whitespace
no-misleading-character-classdisallow characters which are made with multiple code points in character class syntax
no-obj-callsdisallow calling global object properties as functions
no-prototype-builtinsdisallow calling some Object.prototype methods directly on objects
no-regex-spacesdisallow multiple spaces in regular expressions
no-setter-returndisallow returning values from setters
no-sparse-arraysdisallow sparse arrays
no-unexpected-multilinedisallow confusing multiline expressions
no-unreachabledisallow unreachable code after return, throw, continue, and break statements
no-unsafe-finallydisallow control flow statements in finally blocks
no-unsafe-negationdisallow negating the left operand of relational operators
require-atomic-updatesdisallow assignments that can lead to race conditions due to usage of await or yield
use-isnanrequire calls to isNaN() when checking for NaN
valid-typeofenforce comparing typeof expressions against valid strings

Variables

RuleValueDescription
no-delete-vardisallow deleting variables
no-restricted-globalseventdisallow specified global variables
no-shadow-restricted-namesdisallow identifiers from shadowing restricted names
no-undefdisallow the use of undeclared variables unless mentioned in /*global */ comments
no-unused-varsdisallow unused variables
no-use-before-definedisallow the use of variables before they are defined

Strict Mode

RuleValueDescription
strictrequire or disallow strict mode directives

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

Latest commit

History

57 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Datavized Code Style

Our code style is based on Crockford's, with a few modifications.

The Basics

  • Indent with tabs, not spaces
  • Always end statements with semicolons
  • Conditionals and loops ("if", "while", "for") always use curly braces
  • Never use var. Use const wherever possible and let only if necessary.
  • Always use "strict equal" (=== and !==, not == or !=)
  • Define variables in scope, never global.

The Rules

Stylistic Issues

RuleValueDescription
array-bracket-spacingenforce consistent spacing inside array brackets
brace-styleenforce consistent brace style for blocks
camelcaseenforce camelcase naming convention
comma-danglerequire or disallow trailing commas
comma-spacingenforce consistent spacing before and after commas
comma-styleenforce consistent comma style
indenttabenforce consistent indentation
key-spacingenforce consistent spacing between keys and values in object literal properties
keyword-spacingenforce consistent spacing before and after keywords
linebreak-styleunixenforce consistent linebreak style
max-params5enforce a maximum number of parameters in function definitions
new-caprequire constructor names to begin with a capital letter
no-array-constructordisallow Array constructors
no-bitwisedisallow bitwise operators
no-continuedisallow continue statements
no-mixed-spaces-and-tabsdisallow mixed spaces and tabs for indentation
no-trailing-spacesdisallow trailing whitespace at the end of lines
no-underscore-dangledisallow dangling underscores in identifiers
one-varneverenforce variables to be declared either together or separately in functions
one-var-declaration-per-linerequire or disallow newlines around variable declarations
quote-propsas-neededrequire quotes around object literal property names
quotessingleenforce the consistent use of either backticks, double, or single quotes
semirequire or disallow semicolons instead of ASI
semi-spacingenforce consistent spacing before and after semicolons
space-before-blocksenforce consistent spacing before blocks
space-before-function-parenenforce consistent spacing before function definition opening parenthesis
space-in-parensenforce consistent spacing inside parentheses
space-infix-opsrequire spacing around infix operators
space-unary-opsenforce consistent spacing before or after unary operators

Best Practices

RuleValueDescription
babel/no-invalid-thisdisallow this keywords outside of classes or class-like objects
block-scoped-varenforce the use of variables within the scope they are defined
consistent-returnrequire return statements to either always or never specify values
curlyenforce consistent brace style for all control statements
dot-notationenforce dot notation whenever possible
eqeqeqrequire the use of === and !==
guard-for-inrequire for-in loops to include an if statement
no-callerdisallow the use of arguments.caller or arguments.callee
no-case-declarationsdisallow lexical declarations in case clauses
no-empty-patterndisallow empty destructuring patterns
no-evaldisallow the use of eval()
no-extend-nativedisallow extending native types
no-fallthroughdisallow fallthrough of case statements
no-global-assigndisallow assignments to native objects or read-only global variables
no-implicit-globalsdisallow declarations in the global scope
no-implied-evaldisallow the use of eval()-like methods
no-iteratordisallow the use of the __iterator__ property
no-loop-funcdisallow function declarations that contain unsafe references inside loop statements
no-multi-strdisallow multiline strings
no-newdisallow new operators outside of assignments or comparisons
no-new-funcdisallow new operators with the Function object
no-octaldisallow octal literals
no-redeclaredisallow variable redeclaration
no-self-assigndisallow assignments where both sides are exactly the same
no-sequencesdisallow comma operators
no-unused-labelsdisallow unused labels
no-useless-catchdisallow unnecessary catch clauses
no-useless-escapedisallow unnecessary escape characters
no-withdisallow with statements
radixenforce the consistent use of the radix argument when using parseInt()
require-awaitdisallow async functions which have no await expression
vars-on-toprequire var declarations be placed at the top of their containing scope
wrap-iifeanyrequire parentheses around immediate function invocations

ECMAScript 6

RuleValueDescription
constructor-superrequire super() calls in constructors
no-class-assigndisallow reassigning class members
no-const-assigndisallow reassigning const variables
no-dupe-class-membersdisallow duplicate class members
no-new-symboldisallow new operators with the Symbol object
no-this-before-superdisallow this/super before calling super() in constructors
no-useless-computed-keydisallow unnecessary computed property keys in objects and classes
no-varrequire let or const instead of var
prefer-constrequire const declarations for variables that are never reassigned after declared
require-yieldrequire generator functions to contain yield

Possible Errors

RuleValueDescription
for-directionenforce "for" loop update clause moving the counter in the right direction.
getter-returnenforce return statements in getters
no-async-promise-executordisallow using an async function as a Promise executor
no-compare-neg-zerodisallow comparing against -0
no-cond-assigndisallow assignment operators in conditional expressions
no-constant-conditiondisallow constant expressions in conditions
no-control-regexdisallow control characters in regular expressions
no-debuggerdisallow the use of debugger
no-dupe-argsdisallow duplicate arguments in function definitions
no-dupe-else-ifdisallow duplicate conditions in if-else-if chains
no-dupe-keysdisallow duplicate keys in object literals
no-duplicate-casedisallow duplicate case labels
no-emptydisallow empty block statements
no-empty-character-classdisallow empty character classes in regular expressions
no-ex-assigndisallow reassigning exceptions in catch clauses
no-extra-boolean-castdisallow unnecessary boolean casts
no-extra-parensdisallow unnecessary parentheses
no-extra-semidisallow unnecessary semicolons
no-func-assigndisallow reassigning function declarations
no-import-assigndisallow assigning to imported bindings
no-inner-declarationsdisallow variable or function declarations in nested blocks
no-invalid-regexpdisallow invalid regular expression strings in RegExp constructors
no-irregular-whitespacedisallow irregular whitespace
no-misleading-character-classdisallow characters which are made with multiple code points in character class syntax
no-obj-callsdisallow calling global object properties as functions
no-prototype-builtinsdisallow calling some Object.prototype methods directly on objects
no-regex-spacesdisallow multiple spaces in regular expressions
no-setter-returndisallow returning values from setters
no-sparse-arraysdisallow sparse arrays
no-unexpected-multilinedisallow confusing multiline expressions
no-unreachabledisallow unreachable code after return, throw, continue, and break statements
no-unsafe-finallydisallow control flow statements in finally blocks
no-unsafe-negationdisallow negating the left operand of relational operators
require-atomic-updatesdisallow assignments that can lead to race conditions due to usage of await or yield
use-isnanrequire calls to isNaN() when checking for NaN
valid-typeofenforce comparing typeof expressions against valid strings

Variables

RuleValueDescription
no-delete-vardisallow deleting variables
no-restricted-globalseventdisallow specified global variables
no-shadow-restricted-namesdisallow identifiers from shadowing restricted names
no-undefdisallow the use of undeclared variables unless mentioned in /*global */ comments
no-unused-varsdisallow unused variables
no-use-before-definedisallow the use of variables before they are defined

Strict Mode

RuleValueDescription
strictrequire or disallow strict mode directives

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

Latest commit

History

57 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Datavized Code Style

Our code style is based on Crockford's, with a few modifications.

The Basics

  • Indent with tabs, not spaces
  • Always end statements with semicolons
  • Conditionals and loops ("if", "while", "for") always use curly braces
  • Never use var. Use const wherever possible and let only if necessary.
  • Always use "strict equal" (=== and !==, not == or !=)
  • Define variables in scope, never global.

The Rules

Stylistic Issues

RuleValueDescription
array-bracket-spacingenforce consistent spacing inside array brackets
brace-styleenforce consistent brace style for blocks
camelcaseenforce camelcase naming convention
comma-danglerequire or disallow trailing commas
comma-spacingenforce consistent spacing before and after commas
comma-styleenforce consistent comma style
indenttabenforce consistent indentation
key-spacingenforce consistent spacing between keys and values in object literal properties
keyword-spacingenforce consistent spacing before and after keywords
linebreak-styleunixenforce consistent linebreak style
max-params5enforce a maximum number of parameters in function definitions
new-caprequire constructor names to begin with a capital letter
no-array-constructordisallow Array constructors
no-bitwisedisallow bitwise operators
no-continuedisallow continue statements
no-mixed-spaces-and-tabsdisallow mixed spaces and tabs for indentation
no-trailing-spacesdisallow trailing whitespace at the end of lines
no-underscore-dangledisallow dangling underscores in identifiers
one-varneverenforce variables to be declared either together or separately in functions
one-var-declaration-per-linerequire or disallow newlines around variable declarations
quote-propsas-neededrequire quotes around object literal property names
quotessingleenforce the consistent use of either backticks, double, or single quotes
semirequire or disallow semicolons instead of ASI
semi-spacingenforce consistent spacing before and after semicolons
space-before-blocksenforce consistent spacing before blocks
space-before-function-parenenforce consistent spacing before function definition opening parenthesis
space-in-parensenforce consistent spacing inside parentheses
space-infix-opsrequire spacing around infix operators
space-unary-opsenforce consistent spacing before or after unary operators

Best Practices

RuleValueDescription
babel/no-invalid-thisdisallow this keywords outside of classes or class-like objects
block-scoped-varenforce the use of variables within the scope they are defined
consistent-returnrequire return statements to either always or never specify values
curlyenforce consistent brace style for all control statements
dot-notationenforce dot notation whenever possible
eqeqeqrequire the use of === and !==
guard-for-inrequire for-in loops to include an if statement
no-callerdisallow the use of arguments.caller or arguments.callee
no-case-declarationsdisallow lexical declarations in case clauses
no-empty-patterndisallow empty destructuring patterns
no-evaldisallow the use of eval()
no-extend-nativedisallow extending native types
no-fallthroughdisallow fallthrough of case statements
no-global-assigndisallow assignments to native objects or read-only global variables
no-implicit-globalsdisallow declarations in the global scope
no-implied-evaldisallow the use of eval()-like methods
no-iteratordisallow the use of the __iterator__ property
no-loop-funcdisallow function declarations that contain unsafe references inside loop statements
no-multi-strdisallow multiline strings
no-newdisallow new operators outside of assignments or comparisons
no-new-funcdisallow new operators with the Function object
no-octaldisallow octal literals
no-redeclaredisallow variable redeclaration
no-self-assigndisallow assignments where both sides are exactly the same
no-sequencesdisallow comma operators
no-unused-labelsdisallow unused labels
no-useless-catchdisallow unnecessary catch clauses
no-useless-escapedisallow unnecessary escape characters
no-withdisallow with statements
radixenforce the consistent use of the radix argument when using parseInt()
require-awaitdisallow async functions which have no await expression
vars-on-toprequire var declarations be placed at the top of their containing scope
wrap-iifeanyrequire parentheses around immediate function invocations

ECMAScript 6

RuleValueDescription
constructor-superrequire super() calls in constructors
no-class-assigndisallow reassigning class members
no-const-assigndisallow reassigning const variables
no-dupe-class-membersdisallow duplicate class members
no-new-symboldisallow new operators with the Symbol object
no-this-before-superdisallow this/super before calling super() in constructors
no-useless-computed-keydisallow unnecessary computed property keys in objects and classes
no-varrequire let or const instead of var
prefer-constrequire const declarations for variables that are never reassigned after declared
require-yieldrequire generator functions to contain yield

Possible Errors

RuleValueDescription
for-directionenforce "for" loop update clause moving the counter in the right direction.
getter-returnenforce return statements in getters
no-async-promise-executordisallow using an async function as a Promise executor
no-compare-neg-zerodisallow comparing against -0
no-cond-assigndisallow assignment operators in conditional expressions
no-constant-conditiondisallow constant expressions in conditions
no-control-regexdisallow control characters in regular expressions
no-debuggerdisallow the use of debugger
no-dupe-argsdisallow duplicate arguments in function definitions
no-dupe-else-ifdisallow duplicate conditions in if-else-if chains
no-dupe-keysdisallow duplicate keys in object literals
no-duplicate-casedisallow duplicate case labels
no-emptydisallow empty block statements
no-empty-character-classdisallow empty character classes in regular expressions
no-ex-assigndisallow reassigning exceptions in catch clauses
no-extra-boolean-castdisallow unnecessary boolean casts
no-extra-parensdisallow unnecessary parentheses
no-extra-semidisallow unnecessary semicolons
no-func-assigndisallow reassigning function declarations
no-import-assigndisallow assigning to imported bindings
no-inner-declarationsdisallow variable or function declarations in nested blocks
no-invalid-regexpdisallow invalid regular expression strings in RegExp constructors
no-irregular-whitespacedisallow irregular whitespace
no-misleading-character-classdisallow characters which are made with multiple code points in character class syntax
no-obj-callsdisallow calling global object properties as functions
no-prototype-builtinsdisallow calling some Object.prototype methods directly on objects
no-regex-spacesdisallow multiple spaces in regular expressions
no-setter-returndisallow returning values from setters
no-sparse-arraysdisallow sparse arrays
no-unexpected-multilinedisallow confusing multiline expressions
no-unreachabledisallow unreachable code after return, throw, continue, and break statements
no-unsafe-finallydisallow control flow statements in finally blocks
no-unsafe-negationdisallow negating the left operand of relational operators
require-atomic-updatesdisallow assignments that can lead to race conditions due to usage of await or yield
use-isnanrequire calls to isNaN() when checking for NaN
valid-typeofenforce comparing typeof expressions against valid strings

Variables

RuleValueDescription
no-delete-vardisallow deleting variables
no-restricted-globalseventdisallow specified global variables
no-shadow-restricted-namesdisallow identifiers from shadowing restricted names
no-undefdisallow the use of undeclared variables unless mentioned in /*global */ comments
no-unused-varsdisallow unused variables
no-use-before-definedisallow the use of variables before they are defined

Strict Mode

RuleValueDescription
strictrequire or disallow strict mode directives

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

Latest commit

History

57 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Datavized Code Style

Our code style is based on Crockford's, with a few modifications.

The Basics

  • Indent with tabs, not spaces
  • Always end statements with semicolons
  • Conditionals and loops ("if", "while", "for") always use curly braces
  • Never use var. Use const wherever possible and let only if necessary.
  • Always use "strict equal" (=== and !==, not == or !=)
  • Define variables in scope, never global.

The Rules

Stylistic Issues

RuleValueDescription
array-bracket-spacingenforce consistent spacing inside array brackets
brace-styleenforce consistent brace style for blocks
camelcaseenforce camelcase naming convention
comma-danglerequire or disallow trailing commas
comma-spacingenforce consistent spacing before and after commas
comma-styleenforce consistent comma style
indenttabenforce consistent indentation
key-spacingenforce consistent spacing between keys and values in object literal properties
keyword-spacingenforce consistent spacing before and after keywords
linebreak-styleunixenforce consistent linebreak style
max-params5enforce a maximum number of parameters in function definitions
new-caprequire constructor names to begin with a capital letter
no-array-constructordisallow Array constructors
no-bitwisedisallow bitwise operators
no-continuedisallow continue statements
no-mixed-spaces-and-tabsdisallow mixed spaces and tabs for indentation
no-trailing-spacesdisallow trailing whitespace at the end of lines
no-underscore-dangledisallow dangling underscores in identifiers
one-varneverenforce variables to be declared either together or separately in functions
one-var-declaration-per-linerequire or disallow newlines around variable declarations
quote-propsas-neededrequire quotes around object literal property names
quotessingleenforce the consistent use of either backticks, double, or single quotes
semirequire or disallow semicolons instead of ASI
semi-spacingenforce consistent spacing before and after semicolons
space-before-blocksenforce consistent spacing before blocks
space-before-function-parenenforce consistent spacing before function definition opening parenthesis
space-in-parensenforce consistent spacing inside parentheses
space-infix-opsrequire spacing around infix operators
space-unary-opsenforce consistent spacing before or after unary operators

Best Practices

RuleValueDescription
babel/no-invalid-thisdisallow this keywords outside of classes or class-like objects
block-scoped-varenforce the use of variables within the scope they are defined
consistent-returnrequire return statements to either always or never specify values
curlyenforce consistent brace style for all control statements
dot-notationenforce dot notation whenever possible
eqeqeqrequire the use of === and !==
guard-for-inrequire for-in loops to include an if statement
no-callerdisallow the use of arguments.caller or arguments.callee
no-case-declarationsdisallow lexical declarations in case clauses
no-empty-patterndisallow empty destructuring patterns
no-evaldisallow the use of eval()
no-extend-nativedisallow extending native types
no-fallthroughdisallow fallthrough of case statements
no-global-assigndisallow assignments to native objects or read-only global variables
no-implicit-globalsdisallow declarations in the global scope
no-implied-evaldisallow the use of eval()-like methods
no-iteratordisallow the use of the __iterator__ property
no-loop-funcdisallow function declarations that contain unsafe references inside loop statements
no-multi-strdisallow multiline strings
no-newdisallow new operators outside of assignments or comparisons
no-new-funcdisallow new operators with the Function object
no-octaldisallow octal literals
no-redeclaredisallow variable redeclaration
no-self-assigndisallow assignments where both sides are exactly the same
no-sequencesdisallow comma operators
no-unused-labelsdisallow unused labels
no-useless-catchdisallow unnecessary catch clauses
no-useless-escapedisallow unnecessary escape characters
no-withdisallow with statements
radixenforce the consistent use of the radix argument when using parseInt()
require-awaitdisallow async functions which have no await expression
vars-on-toprequire var declarations be placed at the top of their containing scope
wrap-iifeanyrequire parentheses around immediate function invocations

ECMAScript 6

RuleValueDescription
constructor-superrequire super() calls in constructors
no-class-assigndisallow reassigning class members
no-const-assigndisallow reassigning const variables
no-dupe-class-membersdisallow duplicate class members
no-new-symboldisallow new operators with the Symbol object
no-this-before-superdisallow this/super before calling super() in constructors
no-useless-computed-keydisallow unnecessary computed property keys in objects and classes
no-varrequire let or const instead of var
prefer-constrequire const declarations for variables that are never reassigned after declared
require-yieldrequire generator functions to contain yield

Possible Errors

RuleValueDescription
for-directionenforce "for" loop update clause moving the counter in the right direction.
getter-returnenforce return statements in getters
no-async-promise-executordisallow using an async function as a Promise executor
no-compare-neg-zerodisallow comparing against -0
no-cond-assigndisallow assignment operators in conditional expressions
no-constant-conditiondisallow constant expressions in conditions
no-control-regexdisallow control characters in regular expressions
no-debuggerdisallow the use of debugger
no-dupe-argsdisallow duplicate arguments in function definitions
no-dupe-else-ifdisallow duplicate conditions in if-else-if chains
no-dupe-keysdisallow duplicate keys in object literals
no-duplicate-casedisallow duplicate case labels
no-emptydisallow empty block statements
no-empty-character-classdisallow empty character classes in regular expressions
no-ex-assigndisallow reassigning exceptions in catch clauses
no-extra-boolean-castdisallow unnecessary boolean casts
no-extra-parensdisallow unnecessary parentheses
no-extra-semidisallow unnecessary semicolons
no-func-assigndisallow reassigning function declarations
no-import-assigndisallow assigning to imported bindings
no-inner-declarationsdisallow variable or function declarations in nested blocks
no-invalid-regexpdisallow invalid regular expression strings in RegExp constructors
no-irregular-whitespacedisallow irregular whitespace
no-misleading-character-classdisallow characters which are made with multiple code points in character class syntax
no-obj-callsdisallow calling global object properties as functions
no-prototype-builtinsdisallow calling some Object.prototype methods directly on objects
no-regex-spacesdisallow multiple spaces in regular expressions
no-setter-returndisallow returning values from setters
no-sparse-arraysdisallow sparse arrays
no-unexpected-multilinedisallow confusing multiline expressions
no-unreachabledisallow unreachable code after return, throw, continue, and break statements
no-unsafe-finallydisallow control flow statements in finally blocks
no-unsafe-negationdisallow negating the left operand of relational operators
require-atomic-updatesdisallow assignments that can lead to race conditions due to usage of await or yield
use-isnanrequire calls to isNaN() when checking for NaN
valid-typeofenforce comparing typeof expressions against valid strings

Variables

RuleValueDescription
no-delete-vardisallow deleting variables
no-restricted-globalseventdisallow specified global variables
no-shadow-restricted-namesdisallow identifiers from shadowing restricted names
no-undefdisallow the use of undeclared variables unless mentioned in /*global */ comments
no-unused-varsdisallow unused variables
no-use-before-definedisallow the use of variables before they are defined

Strict Mode

RuleValueDescription
strictrequire or disallow strict mode directives

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages