fix bottom bar, migrate placeholder
This commit is contained in:
parent
159d19e939
commit
3d7dc4d03c
@ -2,7 +2,7 @@
|
|||||||
"$schema": "./node_modules/@angular/service-worker/config/schema.json",
|
"$schema": "./node_modules/@angular/service-worker/config/schema.json",
|
||||||
"index": "/index.html",
|
"index": "/index.html",
|
||||||
"appData": {
|
"appData": {
|
||||||
"version": "1.5.4"
|
"version": "1.5.5"
|
||||||
},
|
},
|
||||||
"assetGroups": [
|
"assetGroups": [
|
||||||
{
|
{
|
||||||
|
181
package-lock.json
generated
181
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "bstlboard",
|
"name": "bstlboard",
|
||||||
"version": "1.5.4",
|
"version": "1.5.5",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "bstlboard",
|
"name": "bstlboard",
|
||||||
"version": "1.5.4",
|
"version": "1.5.5",
|
||||||
"license": "AGPL3",
|
"license": "AGPL3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular-material-components/datetime-picker": "^9.0.0",
|
"@angular-material-components/datetime-picker": "^9.0.0",
|
||||||
@ -3726,14 +3726,11 @@
|
|||||||
"yarn": ">= 1.13.0"
|
"yarn": ">= 1.13.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@socket.io/base64-arraybuffer": {
|
"node_modules/@socket.io/component-emitter": {
|
||||||
"version": "1.0.2",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
|
||||||
"integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==",
|
"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.6.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"node_modules/@tootallnate/once": {
|
"node_modules/@tootallnate/once": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
@ -3763,12 +3760,6 @@
|
|||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/component-emitter": {
|
|
||||||
"version": "1.2.11",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
|
|
||||||
"integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"node_modules/@types/connect": {
|
"node_modules/@types/connect": {
|
||||||
"version": "3.4.35",
|
"version": "3.4.35",
|
||||||
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
|
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
|
||||||
@ -3795,10 +3786,13 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/cors": {
|
"node_modules/@types/cors": {
|
||||||
"version": "2.8.12",
|
"version": "2.8.13",
|
||||||
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
|
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
|
||||||
"integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==",
|
"integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/eslint": {
|
"node_modules/@types/eslint": {
|
||||||
"version": "8.4.1",
|
"version": "8.4.1",
|
||||||
@ -4183,9 +4177,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/adjust-sourcemap-loader/node_modules/loader-utils": {
|
"node_modules/adjust-sourcemap-loader/node_modules/loader-utils": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
|
||||||
"integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
|
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"big.js": "^5.2.2",
|
"big.js": "^5.2.2",
|
||||||
@ -5224,12 +5218,6 @@
|
|||||||
"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
|
"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/component-emitter": {
|
|
||||||
"version": "1.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
|
||||||
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"node_modules/compressible": {
|
"node_modules/compressible": {
|
||||||
"version": "2.0.18",
|
"version": "2.0.18",
|
||||||
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
|
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
|
||||||
@ -6061,9 +6049,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/engine.io": {
|
"node_modules/engine.io": {
|
||||||
"version": "6.1.3",
|
"version": "6.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz",
|
||||||
"integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==",
|
"integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/cookie": "^0.4.1",
|
"@types/cookie": "^0.4.1",
|
||||||
@ -6082,13 +6070,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/engine.io-parser": {
|
"node_modules/engine.io-parser": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
|
||||||
"integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==",
|
"integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
|
||||||
"@socket.io/base64-arraybuffer": "~1.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.0.0"
|
"node": ">=10.0.0"
|
||||||
}
|
}
|
||||||
@ -11607,9 +11592,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/resolve-url-loader/node_modules/loader-utils": {
|
"node_modules/resolve-url-loader/node_modules/loader-utils": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
|
||||||
"integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
|
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"big.js": "^5.2.2",
|
"big.js": "^5.2.2",
|
||||||
@ -12210,36 +12195,35 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/socket.io": {
|
"node_modules/socket.io": {
|
||||||
"version": "4.4.1",
|
"version": "4.5.4",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz",
|
||||||
"integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==",
|
"integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"accepts": "~1.3.4",
|
"accepts": "~1.3.4",
|
||||||
"base64id": "~2.0.0",
|
"base64id": "~2.0.0",
|
||||||
"debug": "~4.3.2",
|
"debug": "~4.3.2",
|
||||||
"engine.io": "~6.1.0",
|
"engine.io": "~6.2.1",
|
||||||
"socket.io-adapter": "~2.3.3",
|
"socket.io-adapter": "~2.4.0",
|
||||||
"socket.io-parser": "~4.0.4"
|
"socket.io-parser": "~4.2.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.0.0"
|
"node": ">=10.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/socket.io-adapter": {
|
"node_modules/socket.io-adapter": {
|
||||||
"version": "2.3.3",
|
"version": "2.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
|
||||||
"integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==",
|
"integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/socket.io-parser": {
|
"node_modules/socket.io-parser": {
|
||||||
"version": "4.0.4",
|
"version": "4.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
|
||||||
"integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
|
"integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/component-emitter": "^1.2.10",
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
"component-emitter": "~1.3.0",
|
|
||||||
"debug": "~4.3.1"
|
"debug": "~4.3.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -16573,10 +16557,10 @@
|
|||||||
"jsonc-parser": "3.2.0"
|
"jsonc-parser": "3.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@socket.io/base64-arraybuffer": {
|
"@socket.io/component-emitter": {
|
||||||
"version": "1.0.2",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
|
||||||
"integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==",
|
"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@tootallnate/once": {
|
"@tootallnate/once": {
|
||||||
@ -16604,12 +16588,6 @@
|
|||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/component-emitter": {
|
|
||||||
"version": "1.2.11",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
|
|
||||||
"integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"@types/connect": {
|
"@types/connect": {
|
||||||
"version": "3.4.35",
|
"version": "3.4.35",
|
||||||
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
|
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
|
||||||
@ -16636,10 +16614,13 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/cors": {
|
"@types/cors": {
|
||||||
"version": "2.8.12",
|
"version": "2.8.13",
|
||||||
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
|
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
|
||||||
"integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==",
|
"integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"@types/eslint": {
|
"@types/eslint": {
|
||||||
"version": "8.4.1",
|
"version": "8.4.1",
|
||||||
@ -17010,9 +16991,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loader-utils": {
|
"loader-utils": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
|
||||||
"integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
|
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"big.js": "^5.2.2",
|
"big.js": "^5.2.2",
|
||||||
@ -17796,12 +17777,6 @@
|
|||||||
"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
|
"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"component-emitter": {
|
|
||||||
"version": "1.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
|
||||||
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"compressible": {
|
"compressible": {
|
||||||
"version": "2.0.18",
|
"version": "2.0.18",
|
||||||
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
|
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
|
||||||
@ -18449,9 +18424,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"engine.io": {
|
"engine.io": {
|
||||||
"version": "6.1.3",
|
"version": "6.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz",
|
||||||
"integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==",
|
"integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/cookie": "^0.4.1",
|
"@types/cookie": "^0.4.1",
|
||||||
@ -18467,13 +18442,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"engine.io-parser": {
|
"engine.io-parser": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
|
||||||
"integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==",
|
"integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {
|
|
||||||
"@socket.io/base64-arraybuffer": "~1.0.2"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"enhanced-resolve": {
|
"enhanced-resolve": {
|
||||||
"version": "5.12.0",
|
"version": "5.12.0",
|
||||||
@ -22615,9 +22587,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loader-utils": {
|
"loader-utils": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
|
||||||
"integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
|
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"big.js": "^5.2.2",
|
"big.js": "^5.2.2",
|
||||||
@ -23074,33 +23046,32 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"socket.io": {
|
"socket.io": {
|
||||||
"version": "4.4.1",
|
"version": "4.5.4",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz",
|
||||||
"integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==",
|
"integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"accepts": "~1.3.4",
|
"accepts": "~1.3.4",
|
||||||
"base64id": "~2.0.0",
|
"base64id": "~2.0.0",
|
||||||
"debug": "~4.3.2",
|
"debug": "~4.3.2",
|
||||||
"engine.io": "~6.1.0",
|
"engine.io": "~6.2.1",
|
||||||
"socket.io-adapter": "~2.3.3",
|
"socket.io-adapter": "~2.4.0",
|
||||||
"socket.io-parser": "~4.0.4"
|
"socket.io-parser": "~4.2.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"socket.io-adapter": {
|
"socket.io-adapter": {
|
||||||
"version": "2.3.3",
|
"version": "2.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
|
||||||
"integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==",
|
"integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"socket.io-parser": {
|
"socket.io-parser": {
|
||||||
"version": "4.0.4",
|
"version": "4.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
|
||||||
"integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
|
"integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/component-emitter": "^1.2.10",
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
"component-emitter": "~1.3.0",
|
|
||||||
"debug": "~4.3.1"
|
"debug": "~4.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "bstlboard",
|
"name": "bstlboard",
|
||||||
"version": "1.5.4",
|
"version": "1.5.5",
|
||||||
"license": "AGPL3",
|
"license": "AGPL3",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<mat-progress-bar *ngIf="!entry" mode="indeterminate"></mat-progress-bar>
|
<mat-progress-bar *ngIf="!entry" mode="indeterminate"></mat-progress-bar>
|
||||||
<form [formGroup]="form" (ngSubmit)="entry.id ? update() : create()" #formDirective="ngForm" *ngIf="entry && settings">
|
<form [formGroup]="form" (ngSubmit)="entry.id ? update() : create()" #formDirective="ngForm"
|
||||||
|
*ngIf="entry && settings">
|
||||||
<mat-card>
|
<mat-card>
|
||||||
<mat-card-content>
|
<mat-card-content>
|
||||||
<p>{{ (entry.id ? 'submission.edit' : 'submission.info') | i18n}}</p>
|
<p>{{ (entry.id ? 'submission.edit' : 'submission.info') | i18n}}</p>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-select placeholder="{{'submission.entryType' | i18n}}" formControlName="entryType">
|
<mat-label>{{'submission.entryType' | i18n}}</mat-label>
|
||||||
|
<mat-select formControlName="entryType">
|
||||||
<mat-select-trigger>
|
<mat-select-trigger>
|
||||||
<mat-icon>{{'entryType.' + entryType + '.icon' | i18n}}</mat-icon> {{'entryType.' + entryType | i18n}}
|
<mat-icon>{{'entryType.' + entryType + '.icon' | i18n}}</mat-icon> {{'entryType.' + entryType | i18n}}
|
||||||
</mat-select-trigger>
|
</mat-select-trigger>
|
||||||
@ -16,23 +18,24 @@
|
|||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input matInput placeholder="{{'submission.url' | i18n}}" formControlName="url" type="url"
|
<mat-label>{{'submission.url' | i18n}}</mat-label>
|
||||||
[required]="entryType == 'LINK'" matAutofocus>
|
<input matInput formControlName="url" type="url" [required]="entryType == 'LINK'" matAutofocus>
|
||||||
<mat-error *ngIf="hasError('url')">
|
<mat-error *ngIf="hasError('url')">
|
||||||
{{'submission.url.error' | i18n}}
|
{{'submission.url.error' | i18n}}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input matInput placeholder="{{'submission.title' | i18n}}" formControlName="title" type="text" required
|
<mat-label>{{'submission.title' | i18n}}</mat-label>
|
||||||
(focus)="onTitleFocus($event)">
|
<input matInput formControlName="title" type="text" required (focus)="onTitleFocus($event)">
|
||||||
<mat-error>
|
<mat-error>
|
||||||
{{'submission.title.error' | i18n}}
|
{{'submission.title.error' | i18n}}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<textarea matAutosize matAutosizeMinRows="3" matInput placeholder="{{'submission.text' | i18n}}"
|
<mat-label>{{'submission.text' | i18n}}</mat-label>
|
||||||
[required]="entryType != 'LINK'" formControlName="text"></textarea>
|
<textarea matAutosize matAutosizeMinRows="3" matInput [required]="entryType != 'LINK'"
|
||||||
|
formControlName="text"></textarea>
|
||||||
<mat-error>
|
<mat-error>
|
||||||
{{'submission.text.error' | i18n}}
|
{{'submission.text.error' | i18n}}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
|
@ -24,15 +24,15 @@
|
|||||||
{{'login.invalid' | i18n}}
|
{{'login.invalid' | i18n}}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input id="username" name="username" matInput placeholder="{{'username' | i18n}}" required
|
<mat-label>{{'username' | i18n}}</mat-label>
|
||||||
matAutofocus>
|
<input id="username" name="username" matInput required matAutofocus>
|
||||||
<mat-error>
|
<mat-error>
|
||||||
{{'username.missing' | i18n}}
|
{{'username.missing' | i18n}}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input id="password" name="password" matInput type="password"
|
<mat-label>{{'password' | i18n}}</mat-label>
|
||||||
placeholder="{{'password' | i18n}}" required>
|
<input id="password" name="password" matInput type="password" required>
|
||||||
<mat-error>
|
<mat-error>
|
||||||
{{'password.invalid.hint' | i18n}}
|
{{'password.invalid.hint' | i18n}}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
<input matInput [formControl]="searchFormControl">
|
<input matInput [formControl]="searchFormControl">
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-select placeholder="{{'search.types' | i18n}}" [value]="searchType"
|
<mat-label>{{'search.types' | i18n}}</mat-label>
|
||||||
(selectionChange)="searchType = $event.value; refresh()">
|
<mat-select [value]="searchType" (selectionChange)="searchType = $event.value; refresh()">
|
||||||
<mat-select-trigger>
|
<mat-select-trigger>
|
||||||
<span *ngIf="searchType">
|
<span *ngIf="searchType">
|
||||||
<mat-icon>{{'search.types.' + searchType + '.icon' | i18n}}</mat-icon> {{'search.types.' +
|
<mat-icon>{{'search.types.' + searchType + '.icon' | i18n}}</mat-icon> {{'search.types.' +
|
||||||
@ -24,8 +24,8 @@
|
|||||||
</mat-select>
|
</mat-select>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-select placeholder="{{'search.byDate' | i18n}}" [value]="byDate"
|
<mat-label>{{'search.byDate' | i18n}}</mat-label>
|
||||||
(selectionChange)="byDate = $event.value; refresh()">
|
<mat-select [value]="byDate" (selectionChange)="byDate = $event.value; refresh()">
|
||||||
<mat-select-trigger>
|
<mat-select-trigger>
|
||||||
<mat-icon>{{'search.byDate.' + byDate + '.icon' | i18n}}</mat-icon> {{'search.byDate.' +
|
<mat-icon>{{'search.byDate.' + byDate + '.icon' | i18n}}</mat-icon> {{'search.byDate.' +
|
||||||
byDate | i18n}}
|
byDate | i18n}}
|
||||||
@ -41,7 +41,8 @@
|
|||||||
</mat-select>
|
</mat-select>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-select placeholder="{{'search.asc' | i18n}}" [value]="asc" (selectionChange)="asc = $event.value; refresh()">
|
<mat-label>{{'search.asc' | i18n}}</mat-label>
|
||||||
|
<mat-select [value]="asc" (selectionChange)="asc = $event.value; refresh()">
|
||||||
<mat-select-trigger>
|
<mat-select-trigger>
|
||||||
<mat-icon>{{'search.asc.' + asc + '.icon' | i18n}}</mat-icon> {{'search.asc.' +
|
<mat-icon>{{'search.asc.' + asc + '.icon' | i18n}}</mat-icon> {{'search.asc.' +
|
||||||
asc | i18n}}
|
asc | i18n}}
|
||||||
|
@ -4,14 +4,15 @@
|
|||||||
<mat-card-content>
|
<mat-card-content>
|
||||||
<mat-card-title><a routerLink="/u/{{user.username}}">{{user.username}}</a></mat-card-title>
|
<mat-card-title><a routerLink="/u/{{user.username}}">{{user.username}}</a></mat-card-title>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input matInput placeholder="{{'settings.email' | i18n}}" formControlName="email" type="email">
|
<mat-label>{{'settings.email' | i18n}}</mat-label>
|
||||||
|
<input matInput formControlName="email" type="email">
|
||||||
<mat-error *ngIf="hasError('email')">
|
<mat-error *ngIf="hasError('email')">
|
||||||
{{'settings.email.error' | i18n}}
|
{{'settings.email.error' | i18n}}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<textarea matAutosize matAutosizeMinRows="3" matInput placeholder="{{'settings.about' | i18n}}"
|
<mat-label>{{'settings.about' | i18n}}</mat-label>
|
||||||
formControlName="about"></textarea>
|
<textarea matAutosize matAutosizeMinRows="3" matInput formControlName="about"></textarea>
|
||||||
<mat-error>
|
<mat-error>
|
||||||
{{'settings.about.error' | i18n}}
|
{{'settings.about.error' | i18n}}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
@ -24,8 +25,8 @@
|
|||||||
mat-icon-button (click)="resetGravity()">
|
mat-icon-button (click)="resetGravity()">
|
||||||
<mat-icon>cancel</mat-icon>
|
<mat-icon>cancel</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<input type="number" min="0" max="2" step="0.1" matInput placeholder="{{'settings.gravity' | i18n}}"
|
<mat-label>{{'settings.gravity' | i18n}}</mat-label>
|
||||||
formControlName="gravity">
|
<input type="number" min="0" max="2" step="0.1" matInput formControlName="gravity">
|
||||||
<mat-hint *ngIf="form.get('gravity').value != 0">
|
<mat-hint *ngIf="form.get('gravity').value != 0">
|
||||||
{{'settings.gravity.hint' | i18n}}
|
{{'settings.gravity.hint' | i18n}}
|
||||||
</mat-hint>
|
</mat-hint>
|
||||||
@ -39,8 +40,8 @@
|
|||||||
mat-icon-button (click)="resetEntryDelay()">
|
mat-icon-button (click)="resetEntryDelay()">
|
||||||
<mat-icon>cancel</mat-icon>
|
<mat-icon>cancel</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<input type="number" min="0" max="15" step="1" matInput placeholder="{{'settings.entryDelay' | i18n}}"
|
<mat-label>{{'settings.entryDelay' | i18n}}</mat-label>
|
||||||
formControlName="entryDelay">
|
<input type="number" min="0" max="15" step="1" matInput formControlName="entryDelay">
|
||||||
<mat-hint *ngIf="form.get('entryDelay').value != 0">
|
<mat-hint *ngIf="form.get('entryDelay').value != 0">
|
||||||
{{'settings.entryDelay.hint' | i18n}}
|
{{'settings.entryDelay.hint' | i18n}}
|
||||||
</mat-hint>
|
</mat-hint>
|
||||||
@ -54,8 +55,8 @@
|
|||||||
matPrefix mat-icon-button (click)="resetCommentDelay()">
|
matPrefix mat-icon-button (click)="resetCommentDelay()">
|
||||||
<mat-icon>cancel</mat-icon>
|
<mat-icon>cancel</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<input type="number" min="0" max="15" step="1" matInput placeholder="{{'settings.commentDelay' | i18n}}"
|
<mat-label>{{'settings.commentDelay' | i18n}}</mat-label>
|
||||||
formControlName="commentDelay">
|
<input type="number" min="0" max="15" step="1" matInput formControlName="commentDelay">
|
||||||
<mat-hint *ngIf="form.get('commentDelay').value != 0">
|
<mat-hint *ngIf="form.get('commentDelay').value != 0">
|
||||||
{{'settings.commentDelay.hint' | i18n}}
|
{{'settings.commentDelay.hint' | i18n}}
|
||||||
</mat-hint>
|
</mat-hint>
|
||||||
@ -70,8 +71,8 @@
|
|||||||
mat-icon-button (click)="resetPageSize()">
|
mat-icon-button (click)="resetPageSize()">
|
||||||
<mat-icon>cancel</mat-icon>
|
<mat-icon>cancel</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<input type="number" min="1" max="100" step="1" matInput placeholder="{{'settings.pageSize' | i18n}}"
|
<mat-label>{{'settings.pageSize' | i18n}}</mat-label>
|
||||||
formControlName="pageSize">
|
<input type="number" min="1" max="100" step="1" matInput formControlName="pageSize">
|
||||||
<mat-hint *ngIf="form.get('pageSize').value != 0">
|
<mat-hint *ngIf="form.get('pageSize').value != 0">
|
||||||
{{'settings.pageSize.hint' | i18n}}
|
{{'settings.pageSize.hint' | i18n}}
|
||||||
</mat-hint>
|
</mat-hint>
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
<p>{{ (view.id ? 'views.edit' : 'views.create') | i18n}}</p>
|
<p>{{ (view.id ? 'views.edit' : 'views.create') | i18n}}</p>
|
||||||
|
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input matInput placeholder="{{'views.name' | i18n}}" formControlName="name" matAutofocus>
|
<mat-label>{{'views.name' | i18n}}</mat-label>
|
||||||
|
<input matInput formControlName="name" matAutofocus>
|
||||||
<mat-error *ngIf="hasError('name')">
|
<mat-error *ngIf="hasError('name')">
|
||||||
<div *ngFor="let error of form.get('name').errors | keyvalue">
|
<div *ngFor="let error of form.get('name').errors | keyvalue">
|
||||||
{{'views.name.error.' + error.key | i18n}}<br>
|
{{'views.name.error.' + error.key | i18n}}<br>
|
||||||
@ -15,7 +16,8 @@
|
|||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-select placeholder="{{'views.sorting' | i18n}}" formControlName="sorting">
|
<mat-label>{{'views.sorting' | i18n}}</mat-label>
|
||||||
|
<mat-select formControlName="sorting">
|
||||||
<mat-select-trigger>
|
<mat-select-trigger>
|
||||||
<mat-icon>{{'sorting.' + sorting + '.icon' | i18n}}</mat-icon> {{'sorting.' + sorting | i18n}}
|
<mat-icon>{{'sorting.' + sorting + '.icon' | i18n}}</mat-icon> {{'sorting.' + sorting | i18n}}
|
||||||
</mat-select-trigger>
|
</mat-select-trigger>
|
||||||
@ -32,7 +34,8 @@
|
|||||||
</ui-tagspicker>
|
</ui-tagspicker>
|
||||||
|
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-select placeholder="{{'views.entryType' | i18n}}" formControlName="entryType">
|
<mat-label>{{'views.entryType' | i18n}}</mat-label>
|
||||||
|
<mat-select formControlName="entryType">
|
||||||
<mat-select-trigger>
|
<mat-select-trigger>
|
||||||
<span *ngIf="entryType">
|
<span *ngIf="entryType">
|
||||||
<mat-icon>{{'entryType.' + entryType + '.icon' | i18n}}</mat-icon> {{'entryType.' +
|
<mat-icon>{{'entryType.' + entryType + '.icon' | i18n}}</mat-icon> {{'entryType.' +
|
||||||
@ -51,7 +54,8 @@
|
|||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input matInput placeholder="{{'views.index' | i18n}}" formControlName="index" type="number" min="0">
|
<mat-label>{{'views.index' | i18n}}</mat-label>
|
||||||
|
<input matInput formControlName="index" type="number" min="0">
|
||||||
<mat-error *ngIf="hasError('index')">
|
<mat-error *ngIf="hasError('index')">
|
||||||
<div *ngFor="let error of form.get('index').errors | keyvalue">
|
<div *ngFor="let error of form.get('index').errors | keyvalue">
|
||||||
{{'views.index.error.' + error.key | i18n}}<br>
|
{{'views.index.error.' + error.key | i18n}}<br>
|
||||||
|
@ -60,7 +60,7 @@
|
|||||||
<span> | </span>
|
<span> | </span>
|
||||||
<a href="javascript:" (click)="modDeleteComment(comment)">{{'moderation.comment.delete' |
|
<a href="javascript:" (click)="modDeleteComment(comment)">{{'moderation.comment.delete' |
|
||||||
i18n}}</a>
|
i18n}}</a>
|
||||||
</span>
|
</span>
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
@ -68,8 +68,8 @@
|
|||||||
<ng-container *ngIf="comment.metadata && comment.metadata.edit">
|
<ng-container *ngIf="comment.metadata && comment.metadata.edit">
|
||||||
<form [formGroup]="form" (ngSubmit)="update()" #formDirective="ngForm">
|
<form [formGroup]="form" (ngSubmit)="update()" #formDirective="ngForm">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<textarea matAutosize matAutosizeMinRows="3" matInput formControlName="text"
|
<mat-label>{{'comment.text' | i18n}}</mat-label>
|
||||||
placeholder="{{'comment.text' | i18n}}" required></textarea>
|
<textarea matAutosize matAutosizeMinRows="3" matInput formControlName="text" required></textarea>
|
||||||
<mat-error *ngIf="hasError('text')">
|
<mat-error *ngIf="hasError('text')">
|
||||||
{{'comment.text.error' | i18n}}
|
{{'comment.text.error' | i18n}}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
<form [formGroup]="form" (ngSubmit)="create()" #formDirective="ngForm">
|
<form [formGroup]="form" (ngSubmit)="create()" #formDirective="ngForm">
|
||||||
|
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<textarea matAutosize matAutosizeMinRows="3" matInput formControlName="text" placeholder="{{'comment.text' | i18n}}" required></textarea>
|
<mat-label>{{'comment.text' | i18n}}</mat-label>
|
||||||
|
<textarea matAutosize matAutosizeMinRows="3" matInput formControlName="text" required></textarea>
|
||||||
<mat-error *ngIf="hasError('text')">
|
<mat-error *ngIf="hasError('text')">
|
||||||
{{'comment.text.error' | i18n}}
|
{{'comment.text.error' | i18n}}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
|
@ -35,27 +35,28 @@
|
|||||||
|
|
||||||
<span class="spacer"></span>
|
<span class="spacer"></span>
|
||||||
|
|
||||||
<div class="mat-mdc-paginator flex wrap">
|
<div class="mat-mdc-paginator flex" [ngClass]="{'wrap' : filterOpen}">
|
||||||
<div *ngIf="filter" class="mat-mdc-paginator flex wrap filter-container">
|
<div *ngIf="filter" class="mat-mdc-paginator flex wrap filter-container">
|
||||||
<a mat-icon-button (click)="filterOpen=!filterOpen" title="{{'entries.filter' | i18n}}"
|
<a mat-icon-button (click)="filterOpen=!filterOpen" title="{{'entries.filter' | i18n}}"
|
||||||
[color]="filterOpen ? 'accent' : 'primary'">
|
[color]="filterOpen ? 'accent' : 'primary'">
|
||||||
<mat-icon>filter_alt</mat-icon>
|
<mat-icon>filter_alt</mat-icon>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<div class="flex wrap filter" *ngIf="filterOpen">
|
<form class="flex wrap filter" *ngIf="filterOpen">
|
||||||
<ui-tagspicker [(model)]="tags" placeholder="{{'entries.filter.tags' | i18n}}" [change]="boundTagsPickerChange">
|
<ui-tagspicker [(model)]="tags" placeholder="{{'entries.filter.tags' | i18n}}" [change]="boundTagsPickerChange"
|
||||||
|
appearance="outline">
|
||||||
</ui-tagspicker>
|
</ui-tagspicker>
|
||||||
<mat-form-field>
|
<mat-form-field appearance="outline">
|
||||||
|
<mat-label>{{'entries.filter.date' | i18n}}</mat-label>
|
||||||
<input matInput [matDatepicker]="picker" [value]="entries && entries.filter && entries.filter.date"
|
<input matInput [matDatepicker]="picker" [value]="entries && entries.filter && entries.filter.date"
|
||||||
(dateChange)="setFilter('date', $event.value && $event.value.toISOString() || undefined)"
|
(dateChange)="setFilter('date', $event.value && $event.value.toISOString() || undefined)">
|
||||||
placeholder="{{'entries.filter.date' | i18n}}">
|
|
||||||
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
|
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
|
||||||
<mat-datepicker #picker touchUi></mat-datepicker>
|
<mat-datepicker #picker touchUi></mat-datepicker>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<mat-form-field>
|
<mat-form-field appearance="outline">
|
||||||
<mat-select placeholder="{{'entries.filter.entryType' | i18n}}"
|
<mat-label>{{'entries.filter.entryType' | i18n}}</mat-label>
|
||||||
[value]="entries && entries.filter && entries.filter.type"
|
<mat-select [value]="entries && entries.filter && entries.filter.type"
|
||||||
(selectionChange)="setFilter('type', $event.value || undefined)">
|
(selectionChange)="setFilter('type', $event.value || undefined)">
|
||||||
<mat-select-trigger>
|
<mat-select-trigger>
|
||||||
<span *ngIf="entries.filter.type">
|
<span *ngIf="entries.filter.type">
|
||||||
@ -75,16 +76,16 @@
|
|||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<ui-tagspicker [(model)]="excludedTags" placeholder="{{'entries.filter.excludedTags' | i18n}}"
|
<ui-tagspicker [(model)]="excludedTags" placeholder="{{'entries.filter.excludedTags' | i18n}}"
|
||||||
[change]="boundExcludedTagsPickerChange">
|
[change]="boundExcludedTagsPickerChange" appearance="outline">
|
||||||
</ui-tagspicker>
|
</ui-tagspicker>
|
||||||
|
|
||||||
<mat-form-field *ngIf="gravityFilter">
|
<mat-form-field *ngIf="gravityFilter" appearance="outline">
|
||||||
|
<mat-label>{{'entries.filter.gravity' | i18n}}</mat-label>
|
||||||
<input matInput type="number" step="0.01" min="0" max="2.0"
|
<input matInput type="number" step="0.01" min="0" max="2.0"
|
||||||
[value]="entries && entries.filter && entries.filter.gravity"
|
[value]="entries && entries.filter && entries.filter.gravity"
|
||||||
(change)="setFilter('gravity', $event.target && $event.target.value || undefined)"
|
(change)="setFilter('gravity', $event.target && $event.target.value || undefined)">
|
||||||
placeholder="{{'entries.filter.gravity' | i18n}}">
|
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<span class="spacer"></span>
|
<span class="spacer"></span>
|
||||||
<mat-paginator [pageSizeOptions]="pageSizeOptions" [pageIndex]="entries.number" [length]="entries.totalElements"
|
<mat-paginator [pageSizeOptions]="pageSizeOptions" [pageIndex]="entries.number" [length]="entries.totalElements"
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
&> * {
|
&>* {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
margin-left: 15px;
|
margin-left: 15px;
|
||||||
@ -56,4 +56,4 @@ ui-tagspicker {
|
|||||||
@media screen and (min-width: 992px) {
|
@media screen and (min-width: 992px) {
|
||||||
max-width: 50%;
|
max-width: 50%;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -45,8 +45,8 @@
|
|||||||
</mat-toolbar>
|
</mat-toolbar>
|
||||||
|
|
||||||
<mat-sidenav-container>
|
<mat-sidenav-container>
|
||||||
<mat-sidenav #sidenav [mode]="isBiggerScreen() ? 'side' : 'over'" [(opened)]="opened || searchFocus" [autoFocus]="false"
|
<mat-sidenav #sidenav [mode]="isBiggerScreen() ? 'side' : 'over'" [(opened)]="opened || searchFocus"
|
||||||
(click)="!isBiggerScreen() && this.close()">
|
[autoFocus]="false" (click)="!isBiggerScreen() && this.close()">
|
||||||
<mat-nav-list *ngIf="authenticated">
|
<mat-nav-list *ngIf="authenticated">
|
||||||
<ui-viewmenu></ui-viewmenu>
|
<ui-viewmenu></ui-viewmenu>
|
||||||
<mat-divider *ngIf="moderator"></mat-divider>
|
<mat-divider *ngIf="moderator"></mat-divider>
|
||||||
@ -65,8 +65,9 @@
|
|||||||
</a>
|
</a>
|
||||||
</mat-nav-list>
|
</mat-nav-list>
|
||||||
<mat-form-field *ngIf="authenticated" (click)="preventClose($event)">
|
<mat-form-field *ngIf="authenticated" (click)="preventClose($event)">
|
||||||
|
<mat-label>{{'search' | i18n}}</mat-label>
|
||||||
<input matInput type="text" (change)="search($event.target && $event.target.value || undefined, $event)"
|
<input matInput type="text" (change)="search($event.target && $event.target.value || undefined, $event)"
|
||||||
placeholder="{{'search' | i18n}}" (focus)="searchFocus = true" (blur)="searchFocus = false">
|
(focus)="searchFocus = true" (blur)="searchFocus = false">
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<span class="spacer"></span>
|
<span class="spacer"></span>
|
||||||
<mat-nav-list>
|
<mat-nav-list>
|
||||||
@ -86,7 +87,8 @@
|
|||||||
style="font-size: 0.7em;">
|
style="font-size: 0.7em;">
|
||||||
{{'page.privacy-policy' | i18n}}
|
{{'page.privacy-policy' | i18n}}
|
||||||
</a>
|
</a>
|
||||||
<span style="font-size: 0.7em; margin-right: 1em; float: right;">v{{version}} <span *ngIf="hasUpdate" (click)="updateSw()">{{'updateSw' | i18n}}</span></span>
|
<span style="font-size: 0.7em; margin-right: 1em; float: right;">v{{version}} <span *ngIf="hasUpdate"
|
||||||
|
(click)="updateSw()">{{'updateSw' | i18n}}</span></span>
|
||||||
</mat-nav-list>
|
</mat-nav-list>
|
||||||
</mat-sidenav>
|
</mat-sidenav>
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<mat-form-field>
|
<mat-form-field [appearance]="appearance">
|
||||||
|
<mat-label>{{placeholder}}</mat-label>
|
||||||
<mat-chip-grid #tagList>
|
<mat-chip-grid #tagList>
|
||||||
<mat-chip-row *ngFor="let tag of tags" [removable]="true" (removed)="removeTag(tag)">
|
<mat-chip-row *ngFor="let tag of tags" [removable]="true" (removed)="removeTag(tag)">
|
||||||
<mat-icon inline="true">tag</mat-icon>{{tag}}
|
<mat-icon inline="true">tag</mat-icon>{{tag}}
|
||||||
@ -6,10 +7,10 @@
|
|||||||
<mat-icon>cancel</mat-icon>
|
<mat-icon>cancel</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</mat-chip-row>
|
</mat-chip-row>
|
||||||
<input *ngIf="max == 0 || !tags || tags.length < max" #tagsInput placeholder="{{placeholder}}"
|
<input *ngIf="max == 0 || !tags || tags.length < max" #tagsInput [formControl]="searchFormControl"
|
||||||
[formControl]="searchFormControl" [matAutocomplete]="auto" [matChipInputFor]="tagList"
|
[matAutocomplete]="auto" [matChipInputFor]="tagList" [matChipInputSeparatorKeyCodes]="separatorKeysCodes"
|
||||||
[matChipInputSeparatorKeyCodes]="separatorKeysCodes" (matChipInputTokenEnd)="addInputTag($event)">
|
(matChipInputTokenEnd)="addInputTag($event)">
|
||||||
<mat-hint *ngIf="max > 1" align="end">{{tags && tags.length || 0}}/{{max}}</mat-hint>
|
<mat-hint *ngIf="max > 1" align="end">{{tags && tags.length || 0}}/{{max}}</mat-hint>
|
||||||
</mat-chip-grid>
|
</mat-chip-grid>
|
||||||
<mat-autocomplete #auto="matAutocomplete" (optionSelected)="addOptionTag($event)">
|
<mat-autocomplete #auto="matAutocomplete" (optionSelected)="addOptionTag($event)">
|
||||||
<mat-option *ngFor="let option of searchTags | async" [value]="option">
|
<mat-option *ngFor="let option of searchTags | async" [value]="option">
|
||||||
|
@ -10,13 +10,14 @@ import { TagsService } from 'src/app/services/tags.service';
|
|||||||
@Component({
|
@Component({
|
||||||
selector: 'ui-tagspicker',
|
selector: 'ui-tagspicker',
|
||||||
templateUrl: './tagspicker.ui.html',
|
templateUrl: './tagspicker.ui.html',
|
||||||
styleUrls: [ './tagspicker.ui.scss' ]
|
styleUrls: ['./tagspicker.ui.scss']
|
||||||
})
|
})
|
||||||
export class UiTagsPicker implements OnInit {
|
export class UiTagsPicker implements OnInit {
|
||||||
|
|
||||||
@Input() change: Function;
|
@Input() change: Function;
|
||||||
@Input() model: any;
|
@Input() model: any;
|
||||||
@Input() placeholder: string;
|
@Input() placeholder: string;
|
||||||
|
@Input() appearance: string;
|
||||||
@Input() max: number = 0;
|
@Input() max: number = 0;
|
||||||
tags: string[] = [];
|
tags: string[] = [];
|
||||||
searchTags: Observable<Object>;
|
searchTags: Observable<Object>;
|
||||||
@ -24,7 +25,7 @@ export class UiTagsPicker implements OnInit {
|
|||||||
@ViewChild('tagsInput') tagsInput: ElementRef<HTMLInputElement>;
|
@ViewChild('tagsInput') tagsInput: ElementRef<HTMLInputElement>;
|
||||||
searchFormControl = new FormControl();
|
searchFormControl = new FormControl();
|
||||||
|
|
||||||
readonly separatorKeysCodes = [ ENTER, COMMA, SPACE ] as const;
|
readonly separatorKeysCodes = [ENTER, COMMA, SPACE] as const;
|
||||||
|
|
||||||
constructor(private tagsService: TagsService) { }
|
constructor(private tagsService: TagsService) { }
|
||||||
|
|
||||||
|
@ -150,6 +150,7 @@ qrcode canvas {
|
|||||||
max-width: 400px !important;
|
max-width: 400px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.flex {
|
.flex {
|
||||||
display: flex !important;
|
display: flex !important;
|
||||||
|
|
||||||
@ -173,6 +174,16 @@ qrcode canvas {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media (max-width: 576px) {
|
||||||
|
mat-paginator {
|
||||||
|
.mat-mdc-paginator-range-actions {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.scroll-container {
|
.scroll-container {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user