diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index f3c9e2a4..00000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -js/*.js -!js/privatebin.js diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 8275c969..00000000 --- a/.eslintrc +++ /dev/null @@ -1,236 +0,0 @@ ---- -parserOptions: - ecmaVersion: 2017 - -ecmaFeatures: - modules: true - jsx: true - -env: - amd: true - browser: true - es6: true - jquery: true - node: true - mocha: true - -globals: - DOMPurify: readonly - cleanup: writable - describe: readonly - jsc: readonly - jsdom: writable - kjua: writable - WebCrypto: writable - -# http://eslint.org/docs/rules/ -rules: - # Possible Errors - comma-dangle: - - error - - never - no-cond-assign: 2 - no-console: 0 - no-constant-condition: 2 - no-control-regex: 2 - no-debugger: 2 - no-dupe-args: 2 - no-dupe-keys: 2 - no-duplicate-case: 2 - no-empty: 2 - no-empty-character-class: 2 - no-ex-assign: 2 - no-extra-boolean-cast: 2 - no-extra-parens: 0 - no-extra-semi: 2 - no-func-assign: 2 - no-inner-declarations: - - error - - functions - no-invalid-regexp: 2 - no-irregular-whitespace: 2 - no-negated-in-lhs: 2 - no-obj-calls: 2 - no-regex-spaces: 2 - no-sparse-arrays: 2 - no-unexpected-multiline: 2 - no-unreachable: 2 - use-isnan: 2 - valid-jsdoc: 0 - valid-typeof: 2 - - # Best Practices - accessor-pairs: 2 - block-scoped-var: 0 - complexity: - - error - - 20 - consistent-return: 0 - curly: 0 - default-case: 0 - dot-location: 0 - dot-notation: 0 - eqeqeq: 2 - guard-for-in: 2 - no-alert: 0 - no-caller: 2 - no-case-declarations: 2 - no-div-regex: 2 - no-else-return: 0 - no-empty-pattern: 2 - no-eq-null: 2 - no-eval: 2 - no-extend-native: 2 - no-extra-bind: 2 - no-fallthrough: 2 - no-floating-decimal: 0 - no-implicit-coercion: 0 - no-implied-eval: 2 - no-invalid-this: 0 - no-iterator: 2 - no-labels: 0 - no-lone-blocks: 2 - no-loop-func: 2 - no-magic-number: 0 - no-multi-spaces: 0 - no-multi-str: 0 - no-native-reassign: 2 - no-new-func: 2 - no-new-wrappers: 2 - no-new: 2 - no-octal-escape: 2 - no-octal: 2 - no-proto: 2 - no-redeclare: 0 - no-return-assign: 2 - no-script-url: 2 - no-self-compare: 2 - no-sequences: 0 - no-throw-literal: 0 - no-unused-expressions: 2 - no-useless-call: 2 - no-useless-concat: 2 - no-void: 2 - no-warning-comments: 0 - no-with: 2 - radix: 2 - vars-on-top: 0 - wrap-iife: 0 - yoda: 0 - - # Strict - strict: 0 - - # Variables - init-declarations: 0 - no-catch-shadow: 2 - no-delete-var: 2 - no-label-var: 2 - no-shadow-restricted-names: 2 - no-shadow: 0 - no-undef-init: 2 - no-undef: 0 - no-undefined: 0 - no-unused-vars: 0 - no-use-before-define: 0 - - # Node.js and CommonJS - callback-return: 2 - global-require: 2 - handle-callback-err: 2 - no-mixed-requires: 0 - no-new-require: 0 - no-path-concat: 2 - no-process-exit: 2 - no-restricted-modules: 0 - no-sync: 0 - - # Stylistic Issues - array-bracket-spacing: 0 - block-spacing: 0 - brace-style: 0 - camelcase: 0 - comma-spacing: 0 - comma-style: 0 - computed-property-spacing: 0 - consistent-this: 0 - eol-last: 0 - func-names: 0 - func-style: 0 - id-length: 0 - id-match: 0 - indent: 0 - jsx-quotes: 0 - key-spacing: 0 - linebreak-style: 0 - lines-around-comment: 0 - max-depth: 0 - max-len: 0 - max-nested-callbacks: 0 - max-params: 0 - max-statements: - - error - - 60 - new-cap: 0 - new-parens: 0 - newline-after-var: 0 - no-array-constructor: 0 - no-bitwise: 0 - no-continue: 0 - no-inline-comments: 0 - no-lonely-if: 0 - no-mixed-spaces-and-tabs: 0 - no-multiple-empty-lines: 0 - no-negated-condition: 0 - no-nested-ternary: 0 - no-new-object: 0 - no-plusplus: 0 - no-restricted-syntax: 0 - no-spaced-func: 0 - no-ternary: 0 - no-trailing-spaces: 0 - no-underscore-dangle: 0 - no-unneeded-ternary: 0 - object-curly-spacing: 0 - one-var: 0 - operator-assignment: 0 - operator-linebreak: 0 - padded-blocks: 0 - quote-props: 0 - quotes: - - error - - single - require-jsdoc: 0 - semi-spacing: 0 - semi: 0 - sort-vars: 0 - space-after-keywords: 0 - space-before-blocks: 0 - space-before-function-paren: 0 - space-before-keywords: 0 - space-in-parens: 0 - space-infix-ops: 0 - space-return-throw-case: 0 - space-unary-ops: 0 - spaced-comment: 0 - wrap-regex: 0 - - # ECMAScript 6 - arrow-body-style: 0 - arrow-parens: 0 - arrow-spacing: 0 - constructor-super: 0 - generator-star-spacing: 0 - no-arrow-condition: 0 - no-class-assign: 0 - no-const-assign: 0 - no-dupe-class-members: 0 - no-this-before-super: 0 - no-var: 0 - object-shorthand: 0 - prefer-arrow-callback: 0 - prefer-const: 0 - prefer-reflect: 0 - prefer-spread: 0 - prefer-template: 0 - require-yield: 0 diff --git a/.gitattributes b/.gitattributes index 9073910f..ae408079 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12,8 +12,6 @@ js/test/ export-ignore .csslintrc export-ignore .devcontainer export-ignore .editorconfig export-ignore -.eslintignore export-ignore -.eslintrc export-ignore .gitattributes export-ignore .github export-ignore .gitignore export-ignore @@ -26,6 +24,7 @@ js/test/ export-ignore .vscode export-ignore codacy-analysis.yml export-ignore crowdin.yml export-ignore +eslint.config.mjs export-ignore BADGES.md export-ignore CODE_OF_CONDUCT.md export-ignore Makefile export-ignore diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..25828cc2 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,213 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import globals from "globals"; + +export default defineConfig([globalIgnores(["js/*.js", "!js/privatebin.js"]), { + languageOptions: { + globals: { + ...globals.amd, + ...globals.browser, + ...globals.jquery, + ...globals.node, + ...globals.mocha, + DOMPurify: "readonly", + cleanup: "writable", + describe: "readonly", + jsc: "readonly", + jsdom: "writable", + kjua: "writable", + WebCrypto: "writable", + }, + + ecmaVersion: 2017, + sourceType: "commonjs", + }, + + rules: { + "comma-dangle": ["error", "never"], + "no-cond-assign": 2, + "no-console": 0, + "no-constant-condition": 2, + "no-control-regex": 2, + "no-debugger": 2, + "no-dupe-args": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-empty": 2, + "no-empty-character-class": 2, + "no-ex-assign": 2, + "no-extra-boolean-cast": 2, + "no-extra-parens": 0, + "no-extra-semi": 2, + "no-func-assign": 2, + "no-inner-declarations": ["error", "functions"], + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-negated-in-lhs": 2, + "no-obj-calls": 2, + "no-regex-spaces": 2, + "no-sparse-arrays": 2, + "no-unexpected-multiline": 2, + "no-unreachable": 2, + "use-isnan": 2, + "valid-jsdoc": 0, + "valid-typeof": 2, + "accessor-pairs": 2, + "block-scoped-var": 0, + complexity: ["error", 20], + "consistent-return": 0, + curly: 0, + "default-case": 0, + "dot-location": 0, + "dot-notation": 0, + eqeqeq: 2, + "guard-for-in": 2, + "no-alert": 0, + "no-caller": 2, + "no-case-declarations": 2, + "no-div-regex": 2, + "no-else-return": 0, + "no-empty-pattern": 2, + "no-eq-null": 2, + "no-eval": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-fallthrough": 2, + "no-floating-decimal": 0, + "no-implicit-coercion": 0, + "no-implied-eval": 2, + "no-invalid-this": 0, + "no-iterator": 2, + "no-labels": 0, + "no-lone-blocks": 2, + "no-loop-func": 2, + "no-magic-number": 0, + "no-multi-spaces": 0, + "no-multi-str": 0, + "no-native-reassign": 2, + "no-new-func": 2, + "no-new-wrappers": 2, + "no-new": 2, + "no-octal-escape": 2, + "no-octal": 2, + "no-proto": 2, + "no-redeclare": 0, + "no-return-assign": 2, + "no-script-url": 2, + "no-self-compare": 2, + "no-sequences": 0, + "no-throw-literal": 0, + "no-unused-expressions": 2, + "no-useless-call": 2, + "no-useless-concat": 2, + "no-void": 2, + "no-warning-comments": 0, + "no-with": 2, + radix: 2, + "vars-on-top": 0, + "wrap-iife": 0, + yoda: 0, + strict: 0, + "init-declarations": 0, + "no-catch-shadow": 2, + "no-delete-var": 2, + "no-label-var": 2, + "no-shadow-restricted-names": 2, + "no-shadow": 0, + "no-undef-init": 2, + "no-undef": 0, + "no-undefined": 0, + "no-unused-vars": 0, + "no-use-before-define": 0, + "callback-return": 2, + "global-require": 2, + "handle-callback-err": 2, + "no-mixed-requires": 0, + "no-new-require": 0, + "no-path-concat": 2, + "no-process-exit": 2, + "no-restricted-modules": 0, + "no-sync": 0, + "array-bracket-spacing": 0, + "block-spacing": 0, + "brace-style": 0, + camelcase: 0, + "comma-spacing": 0, + "comma-style": 0, + "computed-property-spacing": 0, + "consistent-this": 0, + "eol-last": 0, + "func-names": 0, + "func-style": 0, + "id-length": 0, + "id-match": 0, + indent: 0, + "jsx-quotes": 0, + "key-spacing": 0, + "linebreak-style": 0, + "lines-around-comment": 0, + "max-depth": 0, + "max-len": 0, + "max-nested-callbacks": 0, + "max-params": 0, + "max-statements": ["error", 60], + "new-cap": 0, + "new-parens": 0, + "newline-after-var": 0, + "no-array-constructor": 0, + "no-bitwise": 0, + "no-continue": 0, + "no-inline-comments": 0, + "no-lonely-if": 0, + "no-mixed-spaces-and-tabs": 0, + "no-multiple-empty-lines": 0, + "no-negated-condition": 0, + "no-nested-ternary": 0, + "no-new-object": 0, + "no-plusplus": 0, + "no-restricted-syntax": 0, + "no-spaced-func": 0, + "no-ternary": 0, + "no-trailing-spaces": 0, + "no-underscore-dangle": 0, + "no-unneeded-ternary": 0, + "object-curly-spacing": 0, + "one-var": 0, + "operator-assignment": 0, + "operator-linebreak": 0, + "padded-blocks": 0, + "quote-props": 0, + quotes: ["error", "single"], + "require-jsdoc": 0, + "semi-spacing": 0, + semi: 0, + "sort-vars": 0, + "space-after-keywords": 0, + "space-before-blocks": 0, + "space-before-function-paren": 0, + "space-before-keywords": 0, + "space-in-parens": 0, + "space-infix-ops": 0, + "space-return-throw-case": 0, + "space-unary-ops": 0, + "spaced-comment": 0, + "wrap-regex": 0, + "arrow-body-style": 0, + "arrow-parens": 0, + "arrow-spacing": 0, + "constructor-super": 0, + "generator-star-spacing": 0, + "no-arrow-condition": 0, + "no-class-assign": 0, + "no-const-assign": 0, + "no-dupe-class-members": 0, + "no-this-before-super": 0, + "no-var": 0, + "object-shorthand": 0, + "prefer-arrow-callback": 0, + "prefer-const": 0, + "prefer-reflect": 0, + "prefer-spread": 0, + "prefer-template": 0, + "require-yield": 0, + }, +}]); diff --git a/js/privatebin.js b/js/privatebin.js index 4e765db3..912aae18 100644 --- a/js/privatebin.js +++ b/js/privatebin.js @@ -10,8 +10,6 @@ * @namespace */ -// global Base64, DOMPurify, FileReader, baseX, bootstrap, history, navigator, prettyPrint, prettyPrintOne, showdown, kjua - jQuery.fn.draghover = function() { 'use strict'; return this.each(function() { diff --git a/lib/Configuration.php b/lib/Configuration.php index b5ee90b5..8a2f7270 100644 --- a/lib/Configuration.php +++ b/lib/Configuration.php @@ -119,9 +119,9 @@ class Configuration 'js/dark-mode-switch.js' => 'sha512-BhY7dNU14aDN5L+muoUmA66x0CkYUWkQT0nxhKBLP/o2d7jE025+dvWJa4OiYffBGEFgmhrD/Sp+QMkxGMTz2g==', 'js/jquery-3.7.1.js' => 'sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==', 'js/kjua-0.10.0.js' => 'sha512-BYj4xggowR7QD150VLSTRlzH62YPfhpIM+b/1EUEr7RQpdWAGKulxWnOvjFx1FUlba4m6ihpNYuQab51H6XlYg==', - 'js/legacy.js' => 'sha512-mXAgFn/DonfPANvPO6Kf08zRKCeQ75jXK69gcUUOpPLFkp3KHnDhnvij8nEJxlutD/670Bfi4RNMG6uEjA4nNQ==', + 'js/legacy.js' => 'sha512-rGXYUpIqbFoHAgBXZ0UlJBdNAIMOC9EQ67MG0X46D5uRB8LvwzgKirbSQRGdYfk8I2jsUcm+tvHXYboUnC6DUg==', 'js/prettify.js' => 'sha512-puO0Ogy++IoA2Pb9IjSxV1n4+kQkKXYAEUtVzfZpQepyDPyXk8hokiYDS7ybMogYlyyEIwMLpZqVhCkARQWLMg==', - 'js/privatebin.js' => 'sha512-Id47n8ZPz6j93KoR7DkaS48MxtwKftVq3RyZw9WRGpRT+6bYKP/ZkU84RscbcW3icxBTS9fQKQpdnmZ3rr00dQ==', + 'js/privatebin.js' => 'sha512-11h/j/h3QEv2Qt2zJLbmbbThQDuBisAwY/3dygHKx3h/Or1UZFhw+Q7COpCC7erndNtevTvYRqEEIsKw3tOJLQ==', 'js/purify-3.2.6.js' => 'sha512-zqwL4OoBLFx89QPewkz4Lz5CSA2ktU+f31fuECkF0iK3Id5qd3Zpq5dMby8KwHjIEpsUgOqwF58cnmcaNem0EA==', 'js/showdown-2.1.0.js' => 'sha512-WYXZgkTR0u/Y9SVIA4nTTOih0kXMEd8RRV6MLFdL6YU8ymhR528NLlYQt1nlJQbYz4EW+ZsS0fx1awhiQJme1Q==', 'js/zlib-1.3.1-1.js' => 'sha512-5bU9IIP4PgBrOKLZvGWJD4kgfQrkTz8Z3Iqeu058mbQzW3mCumOU6M3UVbVZU9rrVoVwaW4cZK8U8h5xjF88eQ==',