build: downgrade web deps (#4644)

revert to older transmission-web build dependencies
to make it easier to build on stock older systems, e.g.
Ubuntu 20.04 which ships with Node 10.
This commit is contained in:
Charles Kerr
2023-01-23 14:50:21 -06:00
committed by GitHub
parent e3a577c2d8
commit 5b14df51cb
8 changed files with 7288 additions and 2751 deletions

View File

@@ -78,10 +78,10 @@ fi
# format JS # format JS
cd "${root}/web" || exit 1 cd "${root}/web" || exit 1
npm_lint_args="$([ -n "$fix" ] && echo 'lint:fix' || echo 'lint')" npm_lint_args="$([ -n "$fix" ] && echo 'lint:fix' || echo 'lint')"
if ! npm install &>/dev/null; then if ! npm install --no-audit --no-fund --no-progress &>/dev/null; then
[ -n "$fix" ] || echo 'JS code could not be checked -- "npm install" failed' [ -n "$fix" ] || echo 'JS code could not be checked -- "npm install" failed'
exitcode=1 exitcode=1
elif ! npm run $npm_lint_args &>/dev/null; then elif ! npm run --silent $npm_lint_args; then
[ -n "$fix" ] || echo 'JS code needs formatting' [ -n "$fix" ] || echo 'JS code needs formatting'
exitcode=1 exitcode=1
fi fi

9
web/README.md Normal file
View File

@@ -0,0 +1,9 @@
# Notes
- Node.js and npm are only needed for building.
The result is a static file, `transmission-app.js`, which can be
served from an Transmission session, e.g. transmission-daemon.
- package.json's `devDependencies` are *intentionally* old to make
building on older stock systems possible, e.g. Ubuntu 20.04 which
ships with Node.js 10. Please don't bump deps without asking first.

9920
web/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"dev": "WEBPACK_MODE=development webpack serve --config webpack.config.js", "dev": "WEBPACK_MODE=development webpack serve --config webpack.config.js",
"build": "webpack --config webpack.config.js", "build": "webpack --config webpack.config.js --no-stats",
"css": "sass --no-source-map assets/css/", "css": "sass --no-source-map assets/css/",
"css:map": "sass assets/css/", "css:map": "sass assets/css/",
"lint": "run-p --silent lint:eslint lint:stylelint lint:prettier", "lint": "run-p --silent lint:eslint lint:stylelint lint:prettier",
@@ -17,34 +17,38 @@
"lint:stylelint": "stylelint assets/css/*scss", "lint:stylelint": "stylelint assets/css/*scss",
"lint:stylelint:fix": "stylelint --fix assets/css/*scss" "lint:stylelint:fix": "stylelint --fix assets/css/*scss"
}, },
"engines": {
"node": ">= 10.19.0"
},
"devDependencies": { "devDependencies": {
"@babel/core": "^7.20.12", "@babel/core": "~7.20.12",
"@babel/eslint-parser": "^7.19.1", "@babel/eslint-parser": "~7.19.1",
"@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-class-properties": "~7.18.6",
"@primer/stylelint-config": "^12.7.0", "@primer/css": "17.4.0",
"css-loader": "^6.7.3", "css-loader": "~5.2.7",
"css-minimizer-webpack-plugin": "^4.2.2", "css-minimizer-webpack-plugin": "~2.0.0",
"eslint": "^8.32.0", "eslint": "~7.32.0",
"eslint-plugin-sonarjs": "^0.18.0", "eslint-plugin-sonarjs": "~0.10.0",
"eslint-plugin-unicorn": "^45.0.2", "eslint-plugin-unicorn": "~31.0.0",
"file-loader": "^6.2.0", "file-loader": "~6.2.0",
"mini-css-extract-plugin": "^2.7.2", "mini-css-extract-plugin": "~1.5.1",
"npm-run-all": "^4.1.5", "npm-run-all": "~4.1.5",
"prettier": "^2.8.3", "prettier": "~2.8.3",
"sass": "^1.57.1", "sass": "~1.33.0",
"sass-loader": "^13.2.0", "sass-loader": "~10.2.0",
"style-loader": "^3.3.1", "style-loader": "~2.0.0",
"stylelint": "^14.16.1", "stylelint": "~13.13.1",
"stylelint-config-prettier": "^9.0.4", "stylelint-config-prettier": "~8.0.1",
"stylelint-config-sass-guidelines": "^9.0.1", "stylelint-config-primer": "~10.0.1",
"stylelint-config-standard": "^29.0.0", "stylelint-config-sass-guidelines": "~8.0.0",
"terser-webpack-plugin": "^5.3.6", "stylelint-config-standard": "~22.0.0",
"webpack": "^5.75.0", "terser-webpack-plugin": "~5.3.6",
"webpack-bundle-analyzer": "^4.7.0", "webpack": "~5.75.0",
"webpack-cli": "^4.10.0", "webpack-bundle-analyzer": "~4.7.0",
"webpack-dev-server": "^4.11.1" "webpack-cli": "~4.7.2",
"webpack-dev-server": "~3.10.3"
}, },
"dependencies": { "dependencies": {
"lodash.isequal": "^4.5.0" "lodash.isequal": "~4.5.0"
} }
} }

View File

@@ -62,7 +62,6 @@ export class Prefs extends EventTarget {
static _setCookie(key, value) { static _setCookie(key, value) {
const date = new Date(); const date = new Date();
date.setFullYear(date.getFullYear() + 1); date.setFullYear(date.getFullYear() + 1);
// eslint-disable-next-line unicorn/no-document-cookie
document.cookie = `${key}=${value}; SameSite=Strict; expires=${date.toGMTString()}`; document.cookie = `${key}=${value}; SameSite=Strict; expires=${date.toGMTString()}`;
} }

View File

@@ -41,6 +41,18 @@ export const Utils = {
}, },
}; };
function toggleClass(buttons, button, pages, page, callback) {
for (const element of buttons.children) {
element.classList.toggle('selected', element === button);
}
for (const element of pages.children) {
element.classList.toggle('hidden', element !== page);
}
if (callback) {
callback(page);
}
}
export function createTextualTabsContainer(id, tabs, callback) { export function createTextualTabsContainer(id, tabs, callback) {
const root = document.createElement('div'); const root = document.createElement('div');
root.id = id; root.id = id;
@@ -67,17 +79,9 @@ export function createTextualTabsContainer(id, tabs, callback) {
page.classList.add('hidden', 'tabs-page'); page.classList.add('hidden', 'tabs-page');
pages.append(page); pages.append(page);
button.addEventListener('click', () => { button.addEventListener('click', () =>
for (const element of buttons.children) { toggleClass(buttons, button, pages, page, callback)
element.classList.toggle('selected', element === button); );
}
for (const element of pages.children) {
element.classList.toggle('hidden', element !== page);
}
if (callback) {
callback(page);
}
});
} }
button_array[0].classList.add('selected'); button_array[0].classList.add('selected');
@@ -114,17 +118,9 @@ export function createTabsContainer(id, tabs, callback) {
page.classList.add('hidden', 'tabs-page'); page.classList.add('hidden', 'tabs-page');
pages.append(page); pages.append(page);
button.addEventListener('click', () => { button.addEventListener('click', () =>
for (const element of buttons.children) { toggleClass(buttons, button, pages, page, callback)
element.classList.toggle('selected', element === button); );
}
for (const element of pages.children) {
element.classList.toggle('hidden', element !== page);
}
if (callback) {
callback(page);
}
});
} }
button_array[0].classList.add('selected'); button_array[0].classList.add('selected');

View File

@@ -5,8 +5,8 @@ module.exports = {
"stylelint-config-prettier" "stylelint-config-prettier"
], ],
"plugins": [ "plugins": [
"@primer/stylelint-config/plugins/no-undefined-vars", "stylelint-config-primer/plugins/no-undefined-vars",
"@primer/stylelint-config/plugins/no-unused-vars" "stylelint-config-primer/plugins/no-unused-vars"
], ],
"rules": { "rules": {
"block-no-empty": true, "block-no-empty": true,

View File

@@ -28,8 +28,7 @@ const config = {
use: ['style-loader', 'css-loader'], use: ['style-loader', 'css-loader'],
}, },
{ {
include: /(assets)\/(img)/, test: /\.(png|svg)/,
test: /\.(jpe?g|png|gif|svg|webp)$/,
type: 'asset/inline', type: 'asset/inline',
}, },
], ],