klick on selectes dates unselects it
.dockerignore added mongo adapted to newest version package.json: all debedencies updated
This commit is contained in:
8
.dockerignore
Normal file
8
.dockerignore
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
node_modules
|
||||||
|
npm-debug.log
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.env
|
||||||
|
.DS_Store
|
||||||
|
log
|
||||||
|
*.log
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,4 +1,4 @@
|
|||||||
node_modules
|
node_modules
|
||||||
*.tgz
|
|
||||||
.DS_*
|
.DS_*
|
||||||
log
|
log
|
||||||
|
.env
|
||||||
|
|||||||
90
bin/www
90
bin/www
@@ -1,90 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module dependencies.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var app = require('../app');
|
|
||||||
var debug = require('debug')('Spritzschema:server');
|
|
||||||
var http = require('http');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get port from environment and store in Express.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var port = normalizePort(process.env.PORT || '3200');
|
|
||||||
app.set('port', port);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create HTTP server.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var server = http.createServer(app);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Listen on provided port, on all network interfaces.
|
|
||||||
*/
|
|
||||||
|
|
||||||
server.listen(port);
|
|
||||||
server.on('error', onError);
|
|
||||||
server.on('listening', onListening);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Normalize a port into a number, string, or false.
|
|
||||||
*/
|
|
||||||
|
|
||||||
function normalizePort(val) {
|
|
||||||
var port = parseInt(val, 10);
|
|
||||||
|
|
||||||
if (isNaN(port)) {
|
|
||||||
// named pipe
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (port >= 0) {
|
|
||||||
// port number
|
|
||||||
return port;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Event listener for HTTP server "error" event.
|
|
||||||
*/
|
|
||||||
|
|
||||||
function onError(error) {
|
|
||||||
if (error.syscall !== 'listen') {
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
|
|
||||||
var bind = typeof port === 'string'
|
|
||||||
? 'Pipe ' + port
|
|
||||||
: 'Port ' + port;
|
|
||||||
|
|
||||||
// handle specific listen errors with friendly messages
|
|
||||||
switch (error.code) {
|
|
||||||
case 'EACCES':
|
|
||||||
console.error(bind + ' requires elevated privileges');
|
|
||||||
process.exit(1);
|
|
||||||
break;
|
|
||||||
case 'EADDRINUSE':
|
|
||||||
console.error(bind + ' is already in use');
|
|
||||||
process.exit(1);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Event listener for HTTP server "listening" event.
|
|
||||||
*/
|
|
||||||
|
|
||||||
function onListening() {
|
|
||||||
var addr = server.address();
|
|
||||||
var bind = typeof addr === 'string'
|
|
||||||
? 'pipe ' + addr
|
|
||||||
: 'port ' + addr.port;
|
|
||||||
debug('Listening on ' + bind);
|
|
||||||
}
|
|
||||||
@@ -21,8 +21,8 @@ services:
|
|||||||
dockerfile: Dockerfile_spritzschema
|
dockerfile: Dockerfile_spritzschema
|
||||||
volumes:
|
volumes:
|
||||||
- ${PWD}/log:/var/log
|
- ${PWD}/log:/var/log
|
||||||
#ports:
|
ports:
|
||||||
# - '3100:3014'
|
- '3200:3200'
|
||||||
container_name: spritzschema
|
container_name: spritzschema
|
||||||
environment:
|
environment:
|
||||||
- MONGOHOST=mongodb
|
- MONGOHOST=mongodb
|
||||||
|
|||||||
@@ -1,216 +0,0 @@
|
|||||||
internal/modules/cjs/loader.js:550
|
|
||||||
throw err;
|
|
||||||
^
|
|
||||||
|
|
||||||
Error: Cannot find module '/opt/app/bin/www.js'
|
|
||||||
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:548:15)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:475:25)
|
|
||||||
at Function.Module.runMain (internal/modules/cjs/loader.js:695:10)
|
|
||||||
at startup (internal/bootstrap/node.js:201:19)
|
|
||||||
at bootstrapNodeJSCore (internal/bootstrap/node.js:516:3)
|
|
||||||
internal/modules/cjs/loader.js:550
|
|
||||||
throw err;
|
|
||||||
^
|
|
||||||
|
|
||||||
Error: Cannot find module '/opt/app/bin/www.js'
|
|
||||||
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:548:15)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:475:25)
|
|
||||||
at Function.Module.runMain (internal/modules/cjs/loader.js:695:10)
|
|
||||||
at startup (internal/bootstrap/node.js:201:19)
|
|
||||||
at bootstrapNodeJSCore (internal/bootstrap/node.js:516:3)
|
|
||||||
internal/modules/cjs/loader.js:550
|
|
||||||
throw err;
|
|
||||||
^
|
|
||||||
|
|
||||||
Error: Cannot find module '/opt/app/bin/www.js'
|
|
||||||
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:548:15)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:475:25)
|
|
||||||
at Function.Module.runMain (internal/modules/cjs/loader.js:695:10)
|
|
||||||
at startup (internal/bootstrap/node.js:201:19)
|
|
||||||
at bootstrapNodeJSCore (internal/bootstrap/node.js:516:3)
|
|
||||||
internal/modules/cjs/loader.js:550
|
|
||||||
throw err;
|
|
||||||
^
|
|
||||||
|
|
||||||
Error: Cannot find module '/opt/app/bin/www.js'
|
|
||||||
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:548:15)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:475:25)
|
|
||||||
at Function.Module.runMain (internal/modules/cjs/loader.js:695:10)
|
|
||||||
at startup (internal/bootstrap/node.js:201:19)
|
|
||||||
at bootstrapNodeJSCore (internal/bootstrap/node.js:516:3)
|
|
||||||
internal/modules/cjs/loader.js:550
|
|
||||||
throw err;
|
|
||||||
^
|
|
||||||
|
|
||||||
Error: Cannot find module '/opt/app/bin/www.js'
|
|
||||||
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:548:15)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:475:25)
|
|
||||||
at Function.Module.runMain (internal/modules/cjs/loader.js:695:10)
|
|
||||||
at startup (internal/bootstrap/node.js:201:19)
|
|
||||||
at bootstrapNodeJSCore (internal/bootstrap/node.js:516:3)
|
|
||||||
/opt/app/node_modules/mongodb/lib/operations/add_user.js:16
|
|
||||||
this.options = options ?? {};
|
|
||||||
^
|
|
||||||
|
|
||||||
SyntaxError: Unexpected token ?
|
|
||||||
at new Script (vm.js:51:7)
|
|
||||||
at createScript (vm.js:136:10)
|
|
||||||
at Object.runInThisContext (vm.js:197:10)
|
|
||||||
at Module._compile (internal/modules/cjs/loader.js:618:28)
|
|
||||||
at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
|
|
||||||
at Module.load (internal/modules/cjs/loader.js:566:32)
|
|
||||||
at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:498:3)
|
|
||||||
at Module.require (internal/modules/cjs/loader.js:598:17)
|
|
||||||
at require (internal/modules/cjs/helpers.js:11:18)
|
|
||||||
/opt/app/node_modules/mongodb/lib/operations/add_user.js:16
|
|
||||||
this.options = options ?? {};
|
|
||||||
^
|
|
||||||
|
|
||||||
SyntaxError: Unexpected token ?
|
|
||||||
at new Script (vm.js:51:7)
|
|
||||||
at createScript (vm.js:136:10)
|
|
||||||
at Object.runInThisContext (vm.js:197:10)
|
|
||||||
at Module._compile (internal/modules/cjs/loader.js:618:28)
|
|
||||||
at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
|
|
||||||
at Module.load (internal/modules/cjs/loader.js:566:32)
|
|
||||||
at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:498:3)
|
|
||||||
at Module.require (internal/modules/cjs/loader.js:598:17)
|
|
||||||
at require (internal/modules/cjs/helpers.js:11:18)
|
|
||||||
/opt/app/node_modules/mongodb/lib/operations/add_user.js:16
|
|
||||||
this.options = options ?? {};
|
|
||||||
^
|
|
||||||
|
|
||||||
SyntaxError: Unexpected token ?
|
|
||||||
at new Script (vm.js:51:7)
|
|
||||||
at createScript (vm.js:136:10)
|
|
||||||
at Object.runInThisContext (vm.js:197:10)
|
|
||||||
at Module._compile (internal/modules/cjs/loader.js:618:28)
|
|
||||||
at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
|
|
||||||
at Module.load (internal/modules/cjs/loader.js:566:32)
|
|
||||||
at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:498:3)
|
|
||||||
at Module.require (internal/modules/cjs/loader.js:598:17)
|
|
||||||
at require (internal/modules/cjs/helpers.js:11:18)
|
|
||||||
/opt/app/node_modules/mongodb/lib/operations/add_user.js:16
|
|
||||||
this.options = options ?? {};
|
|
||||||
^
|
|
||||||
|
|
||||||
SyntaxError: Unexpected token ?
|
|
||||||
at new Script (vm.js:51:7)
|
|
||||||
at createScript (vm.js:136:10)
|
|
||||||
at Object.runInThisContext (vm.js:197:10)
|
|
||||||
at Module._compile (internal/modules/cjs/loader.js:618:28)
|
|
||||||
at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
|
|
||||||
at Module.load (internal/modules/cjs/loader.js:566:32)
|
|
||||||
at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:498:3)
|
|
||||||
at Module.require (internal/modules/cjs/loader.js:598:17)
|
|
||||||
at require (internal/modules/cjs/helpers.js:11:18)
|
|
||||||
/opt/app/node_modules/mongodb/lib/operations/add_user.js:16
|
|
||||||
this.options = options ?? {};
|
|
||||||
^
|
|
||||||
|
|
||||||
SyntaxError: Unexpected token ?
|
|
||||||
at new Script (vm.js:51:7)
|
|
||||||
at createScript (vm.js:136:10)
|
|
||||||
at Object.runInThisContext (vm.js:197:10)
|
|
||||||
at Module._compile (internal/modules/cjs/loader.js:618:28)
|
|
||||||
at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
|
|
||||||
at Module.load (internal/modules/cjs/loader.js:566:32)
|
|
||||||
at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:498:3)
|
|
||||||
at Module.require (internal/modules/cjs/loader.js:598:17)
|
|
||||||
at require (internal/modules/cjs/helpers.js:11:18)
|
|
||||||
/opt/app/node_modules/mongodb/lib/operations/add_user.js:16
|
|
||||||
this.options = options ?? {};
|
|
||||||
^
|
|
||||||
|
|
||||||
SyntaxError: Unexpected token ?
|
|
||||||
at new Script (vm.js:51:7)
|
|
||||||
at createScript (vm.js:136:10)
|
|
||||||
at Object.runInThisContext (vm.js:197:10)
|
|
||||||
at Module._compile (internal/modules/cjs/loader.js:618:28)
|
|
||||||
at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
|
|
||||||
at Module.load (internal/modules/cjs/loader.js:566:32)
|
|
||||||
at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:498:3)
|
|
||||||
at Module.require (internal/modules/cjs/loader.js:598:17)
|
|
||||||
at require (internal/modules/cjs/helpers.js:11:18)
|
|
||||||
/opt/app/node_modules/mongodb/lib/operations/add_user.js:16
|
|
||||||
this.options = options ?? {};
|
|
||||||
^
|
|
||||||
|
|
||||||
SyntaxError: Unexpected token ?
|
|
||||||
at new Script (vm.js:51:7)
|
|
||||||
at createScript (vm.js:136:10)
|
|
||||||
at Object.runInThisContext (vm.js:197:10)
|
|
||||||
at Module._compile (internal/modules/cjs/loader.js:618:28)
|
|
||||||
at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
|
|
||||||
at Module.load (internal/modules/cjs/loader.js:566:32)
|
|
||||||
at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:498:3)
|
|
||||||
at Module.require (internal/modules/cjs/loader.js:598:17)
|
|
||||||
at require (internal/modules/cjs/helpers.js:11:18)
|
|
||||||
/opt/app/node_modules/mongodb/lib/operations/add_user.js:16
|
|
||||||
this.options = options ?? {};
|
|
||||||
^
|
|
||||||
|
|
||||||
SyntaxError: Unexpected token ?
|
|
||||||
at new Script (vm.js:51:7)
|
|
||||||
at createScript (vm.js:136:10)
|
|
||||||
at Object.runInThisContext (vm.js:197:10)
|
|
||||||
at Module._compile (internal/modules/cjs/loader.js:618:28)
|
|
||||||
at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
|
|
||||||
at Module.load (internal/modules/cjs/loader.js:566:32)
|
|
||||||
at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:498:3)
|
|
||||||
at Module.require (internal/modules/cjs/loader.js:598:17)
|
|
||||||
at require (internal/modules/cjs/helpers.js:11:18)
|
|
||||||
/opt/app/node_modules/mongodb/lib/operations/add_user.js:16
|
|
||||||
this.options = options ?? {};
|
|
||||||
^
|
|
||||||
|
|
||||||
SyntaxError: Unexpected token ?
|
|
||||||
at new Script (vm.js:51:7)
|
|
||||||
at createScript (vm.js:136:10)
|
|
||||||
at Object.runInThisContext (vm.js:197:10)
|
|
||||||
at Module._compile (internal/modules/cjs/loader.js:618:28)
|
|
||||||
at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
|
|
||||||
at Module.load (internal/modules/cjs/loader.js:566:32)
|
|
||||||
at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
|
|
||||||
at Function.Module._load (internal/modules/cjs/loader.js:498:3)
|
|
||||||
at Module.require (internal/modules/cjs/loader.js:598:17)
|
|
||||||
at require (internal/modules/cjs/helpers.js:11:18)
|
|
||||||
[0mGET / [32m200 [0m129.693 ms - 1506[0m
|
|
||||||
[0mGET /stylesheets/style.css [32m200 [0m2.144 ms - 1401[0m
|
|
||||||
[0mGET /javascripts/script.js [32m200 [0m1.857 ms - 3544[0m
|
|
||||||
[0mPOST /data [32m200 [0m36.148 ms - 112[0m
|
|
||||||
[0mGET /data [32m200 [0m8.668 ms - 1344[0m
|
|
||||||
[0mGET /favicon.ico [33m404 [0m18.839 ms - 1191[0m
|
|
||||||
[0mGET /apple-touch-icon-precomposed.png [33m404 [0m10.870 ms - 1191[0m
|
|
||||||
[0mGET /apple-touch-icon.png [33m404 [0m6.037 ms - 1191[0m
|
|
||||||
[0mPOST /data [32m200 [0m16.301 ms - 112[0m
|
|
||||||
[0mPOST /data [32m200 [0m19.368 ms - 112[0m
|
|
||||||
[0mPOST /data [32m200 [0m27.182 ms - 112[0m
|
|
||||||
[0mPOST /data [32m200 [0m21.520 ms - 112[0m
|
|
||||||
[0mPOST /data [32m200 [0m19.805 ms - 112[0m
|
|
||||||
[0mGET / [36m304 [0m30.570 ms - -[0m
|
|
||||||
[0mGET /stylesheets/style.css [36m304 [0m0.815 ms - -[0m
|
|
||||||
[0mGET /javascripts/script.js [36m304 [0m0.457 ms - -[0m
|
|
||||||
[0mPOST /data [32m200 [0m6.669 ms - 112[0m
|
|
||||||
[0mGET /data [32m200 [0m6.880 ms - 1344[0m
|
|
||||||
[0mGET / [36m304 [0m36.222 ms - -[0m
|
|
||||||
[0mGET /javascripts/script.js [36m304 [0m0.884 ms - -[0m
|
|
||||||
[0mGET /stylesheets/style.css [36m304 [0m1.445 ms - -[0m
|
|
||||||
[0mPOST /data [32m200 [0m6.596 ms - 112[0m
|
|
||||||
[0mGET /data [32m200 [0m5.509 ms - 1344[0m
|
|
||||||
[0mPOST /data [32m200 [0m24.185 ms - 112[0m
|
|
||||||
[0mPOST /data [32m200 [0m16.616 ms - 112[0m
|
|
||||||
[0mPOST /data [32m200 [0m18.812 ms - 112[0m
|
|
||||||
[0mGET / [32m200 [0m44.980 ms - 1506[0m
|
|
||||||
[0mGET /javascripts/script.js [36m304 [0m0.314 ms - -[0m
|
|
||||||
[0mGET /stylesheets/style.css [36m304 [0m0.354 ms - -[0m
|
|
||||||
[0mPOST /data [32m200 [0m7.021 ms - 112[0m
|
|
||||||
[0mGET /data [32m200 [0m5.864 ms - 1344[0m
|
|
||||||
@@ -16,7 +16,7 @@ let COLLECTION = 'spritzschema'
|
|||||||
if (options.testing) {
|
if (options.testing) {
|
||||||
COLLECTION = 'spritzschema_test'
|
COLLECTION = 'spritzschema_test'
|
||||||
}
|
}
|
||||||
const client = new MongoClient(MONGO_URL, { useUnifiedTopology: true })
|
const client = new MongoClient(MONGO_URL)
|
||||||
try {
|
try {
|
||||||
await client.connect()
|
await client.connect()
|
||||||
if (cmd === 'getdata') {
|
if (cmd === 'getdata') {
|
||||||
|
|||||||
1550
package-lock.json
generated
1550
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
19
package.json
19
package.json
@@ -1,19 +1,20 @@
|
|||||||
{
|
{
|
||||||
"name": "spritzschema",
|
"name": "spritzschema",
|
||||||
"version": "1.2.2",
|
"version": "1.3.0",
|
||||||
"date": "2023-07-06",
|
"date": "2026-01-18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node ./bin/www.js >>/var/log/spritzschema.log 2>&1"
|
"start": "node ./bin/www.js >>/var/log/spritzschema.log 2>&1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cookie-parser": "~1.4.4",
|
"cookie-parser": "~1.4.7",
|
||||||
"debug": "~2.6.9",
|
"debug": "~4.4.3",
|
||||||
"express": "^4.18.2",
|
"express": "^5.2.1",
|
||||||
"http-errors": "~1.6.3",
|
"http-errors": "~2.0.1",
|
||||||
"mongodb": "^5.4.0",
|
"mongodb": "^7.0.0",
|
||||||
"morgan": "~1.9.1",
|
"morgan": "^1.10.1",
|
||||||
"pug": "^3.0.2"
|
"pug": "^3.0.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,10 @@ document.addEventListener('DOMContentLoaded', async function () {
|
|||||||
let field = e.target;
|
let field = e.target;
|
||||||
let d = schema.data[34].day
|
let d = schema.data[34].day
|
||||||
field.setAttribute('aria-label','x');
|
field.setAttribute('aria-label','x');
|
||||||
field.setAttribute('disabled','disabled');
|
// field.setAttribute('disabled','disabled');
|
||||||
schema.data[parseInt(field.id.slice(2))-1].status = true
|
let status = schema.data[parseInt(field.id.slice(2))-1].status
|
||||||
|
status = !status
|
||||||
|
schema.data[parseInt(field.id.slice(2))-1].status = status
|
||||||
schema.data[parseInt(field.id.slice(2))-1].einheit = curEinheit
|
schema.data[parseInt(field.id.slice(2))-1].einheit = curEinheit
|
||||||
await storeData(schema)
|
await storeData(schema)
|
||||||
fillSchema(schema)
|
fillSchema(schema)
|
||||||
@@ -69,10 +71,10 @@ document.addEventListener('DOMContentLoaded', async function () {
|
|||||||
document.querySelector(sel).innerHTML = buildCellHtml(day, setArray[i].einheit)
|
document.querySelector(sel).innerHTML = buildCellHtml(day, setArray[i].einheit)
|
||||||
if (setArray[i].status) {
|
if (setArray[i].status) {
|
||||||
document.querySelector(sel).setAttribute('aria-label', 'x')
|
document.querySelector(sel).setAttribute('aria-label', 'x')
|
||||||
document.querySelector(sel).setAttribute('disabled', 'disabled')
|
// document.querySelector(sel).setAttribute('disabled', 'disabled')
|
||||||
} else {
|
} else {
|
||||||
document.querySelector(sel).setAttribute('aria-label', '')
|
document.querySelector(sel).setAttribute('aria-label', '')
|
||||||
document.querySelector(sel).removeAttribute('disabled')
|
// document.querySelector(sel).removeAttribute('disabled')
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
document.querySelector(sel).setAttribute('disabled', 'disabled')
|
document.querySelector(sel).setAttribute('disabled', 'disabled')
|
||||||
|
|||||||
@@ -87,5 +87,4 @@ footer {
|
|||||||
}
|
}
|
||||||
#wtg {
|
#wtg {
|
||||||
float: left;
|
float: left;
|
||||||
margin-left: -20px;
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user