Add download & copy buttons
parent
2809d5fa7a
commit
8ee4a8eb88
|
@ -978,12 +978,112 @@
|
|||
"physical-cpu-count": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@sentry/apm": {
|
||||
"version": "5.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/apm/-/apm-5.15.5.tgz",
|
||||
"integrity": "sha512-2PyifsiQdvFEQhbL7tQnCKGLOO1JtZeqso3bc6ARJBvKxM77mtyMo/D0C2Uzt9sXCYiALhQ1rbB1aY8iYyglpg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sentry/browser": "5.15.5",
|
||||
"@sentry/hub": "5.15.5",
|
||||
"@sentry/minimal": "5.15.5",
|
||||
"@sentry/types": "5.15.5",
|
||||
"@sentry/utils": "5.15.5",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@sentry/browser": {
|
||||
"version": "5.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.15.5.tgz",
|
||||
"integrity": "sha512-rqDvjk/EvogfdbZ4TiEpxM/lwpPKmq23z9YKEO4q81+1SwJNua53H60dOk9HpRU8nOJ1g84TMKT2Ov8H7sqDWA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sentry/core": "5.15.5",
|
||||
"@sentry/types": "5.15.5",
|
||||
"@sentry/utils": "5.15.5",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@sentry/core": {
|
||||
"version": "5.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.15.5.tgz",
|
||||
"integrity": "sha512-enxBLv5eibBMqcWyr+vApqeix8uqkfn0iGsD3piKvoMXCgKsrfMwlb/qo9Ox0lKr71qIlZVt+9/A2vZohdgnlg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sentry/hub": "5.15.5",
|
||||
"@sentry/minimal": "5.15.5",
|
||||
"@sentry/types": "5.15.5",
|
||||
"@sentry/utils": "5.15.5",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@sentry/hub": {
|
||||
"version": "5.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.15.5.tgz",
|
||||
"integrity": "sha512-zX9o49PcNIVMA4BZHe//GkbQ4Jx+nVofqU/Il32/IbwKhcpPlhGX3c1sOVQo4uag3cqd/JuQsk+DML9TKkN0Lw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sentry/types": "5.15.5",
|
||||
"@sentry/utils": "5.15.5",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@sentry/minimal": {
|
||||
"version": "5.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.15.5.tgz",
|
||||
"integrity": "sha512-zQkkJ1l9AjmU/Us5IrOTzu7bic4sTPKCatptXvLSTfyKW7N6K9MPIIFeSpZf9o1yM2sRYdK7GV08wS2eCT3JYw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sentry/hub": "5.15.5",
|
||||
"@sentry/types": "5.15.5",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@sentry/node": {
|
||||
"version": "5.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.15.5.tgz",
|
||||
"integrity": "sha512-BK0iTOiiIM0UnydLeT/uUBY1o1Sp85aqwaQRMfZbjMCsgXERLNGvzzV68FDH1cyC1nR6dREK3Gs8bxS4S54aLQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sentry/apm": "5.15.5",
|
||||
"@sentry/core": "5.15.5",
|
||||
"@sentry/hub": "5.15.5",
|
||||
"@sentry/types": "5.15.5",
|
||||
"@sentry/utils": "5.15.5",
|
||||
"cookie": "^0.3.1",
|
||||
"https-proxy-agent": "^4.0.0",
|
||||
"lru_map": "^0.3.3",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@sentry/types": {
|
||||
"version": "5.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.15.5.tgz",
|
||||
"integrity": "sha512-F9A5W7ucgQLJUG4LXw1ZIy4iLevrYZzbeZ7GJ09aMlmXH9PqGThm1t5LSZlVpZvUfQ2rYA8NU6BdKJSt7B5LPw==",
|
||||
"dev": true
|
||||
},
|
||||
"@sentry/utils": {
|
||||
"version": "5.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.15.5.tgz",
|
||||
"integrity": "sha512-Nl9gl/MGnzSkuKeo3QaefoD/OJrFLB8HmwQ7HUbTXb6E7yyEzNKAQMHXGkwNAjbdYyYbd42iABP6Y5F/h39NtA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sentry/types": "5.15.5",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@types/color-name": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
|
||||
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/parse-json": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
|
||||
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/q": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
|
||||
|
@ -1054,6 +1154,12 @@
|
|||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
|
||||
"integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="
|
||||
},
|
||||
"agent-base": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
|
||||
"integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==",
|
||||
"dev": true
|
||||
},
|
||||
"ajv": {
|
||||
"version": "6.12.2",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
|
||||
|
@ -1918,6 +2024,12 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"cookie": {
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
|
||||
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
|
||||
"dev": true
|
||||
},
|
||||
"copy-descriptor": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
|
||||
|
@ -4304,6 +4416,16 @@
|
|||
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
|
||||
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
|
||||
},
|
||||
"https-proxy-agent": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
|
||||
"integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"agent-base": "5",
|
||||
"debug": "4"
|
||||
}
|
||||
},
|
||||
"iconv-lite": {
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
|
@ -4945,6 +5067,12 @@
|
|||
"type-check": "~0.3.2"
|
||||
}
|
||||
},
|
||||
"lines-and-columns": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
|
||||
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
|
||||
"dev": true
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
|
||||
|
@ -5017,6 +5145,12 @@
|
|||
"yallist": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"lru_map": {
|
||||
"version": "0.3.3",
|
||||
"resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
|
||||
"integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=",
|
||||
"dev": true
|
||||
},
|
||||
"magic-string": {
|
||||
"version": "0.22.5",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
|
||||
|
@ -5722,6 +5856,12 @@
|
|||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
||||
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
|
||||
},
|
||||
"path-type": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
|
||||
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
|
||||
"dev": true
|
||||
},
|
||||
"pbkdf2": {
|
||||
"version": "3.0.17",
|
||||
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
|
||||
|
@ -7146,6 +7286,134 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"sass-lint-auto-fix": {
|
||||
"version": "0.21.0",
|
||||
"resolved": "https://registry.npmjs.org/sass-lint-auto-fix/-/sass-lint-auto-fix-0.21.0.tgz",
|
||||
"integrity": "sha512-AKkNdCeCuDQOom+j74sWKLyjPVEhT1XOYUwH6CWjz03rh7ioWk9Ey/svZT/U8rgHIK7nLO+hBWOmbXPzIec1Ng==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sentry/node": "^5.7.0",
|
||||
"chalk": "^3.0.0",
|
||||
"commander": "^4.0.1",
|
||||
"cosmiconfig": "^6.0.0",
|
||||
"glob": "^7.1.4",
|
||||
"gonzales-pe-sl": "github:srowhani/gonzales-pe#dev",
|
||||
"sass-lint": "^1.13.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
|
||||
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/color-name": "^1.1.1",
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
|
||||
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true
|
||||
},
|
||||
"commander": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
|
||||
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
|
||||
"dev": true
|
||||
},
|
||||
"cosmiconfig": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
|
||||
"integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/parse-json": "^4.0.0",
|
||||
"import-fresh": "^3.1.0",
|
||||
"parse-json": "^5.0.0",
|
||||
"path-type": "^4.0.0",
|
||||
"yaml": "^1.7.2"
|
||||
}
|
||||
},
|
||||
"gonzales-pe-sl": {
|
||||
"version": "github:srowhani/gonzales-pe#3b052416074edc280f7d04bbe40b2e410693c4a3",
|
||||
"from": "github:srowhani/gonzales-pe#dev",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"minimist": "1.1.x"
|
||||
}
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"dev": true
|
||||
},
|
||||
"import-fresh": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
|
||||
"integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"parent-module": "^1.0.0",
|
||||
"resolve-from": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"minimist": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
|
||||
"integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=",
|
||||
"dev": true
|
||||
},
|
||||
"parse-json": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
|
||||
"integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
"error-ex": "^1.3.1",
|
||||
"json-parse-better-errors": "^1.0.1",
|
||||
"lines-and-columns": "^1.1.6"
|
||||
}
|
||||
},
|
||||
"resolve-from": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
||||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
|
||||
"dev": true
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
|
||||
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
|
@ -8464,6 +8732,15 @@
|
|||
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
|
||||
"dev": true
|
||||
},
|
||||
"yaml": {
|
||||
"version": "1.9.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz",
|
||||
"integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.9.2"
|
||||
}
|
||||
},
|
||||
"yargs": {
|
||||
"version": "14.2.3",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz",
|
||||
|
|
|
@ -14,9 +14,11 @@
|
|||
"dev:prep": "npm run build:template && npm run dev:static",
|
||||
"dev:static": "copyfiles --up 2 ./src/static/{*,**/*} dev",
|
||||
"test": "npm run test:eslint && npm run test:scss",
|
||||
"test:fix": "npm run test:eslint:fix && npm run test:scss:fix",
|
||||
"test:eslint": "eslint 'src/**/*.{js,vue}'",
|
||||
"test:eslint:fix": "npm run test:eslint -- --fix",
|
||||
"test:scss": "sass-lint 'src/**/*.scss' --verbose --no-exit --config .sasslintrc"
|
||||
"test:scss": "sass-lint 'src/**/*.scss' --verbose --no-exit --config .sasslintrc",
|
||||
"test:scss:fix": "sass-lint-auto-fix 'src/**/*.scss'"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
@ -54,6 +56,7 @@
|
|||
"posthtml-extend": "^0.3.0",
|
||||
"sass": "^1.26.3",
|
||||
"sass-lint": "^1.13.1",
|
||||
"sass-lint-auto-fix": "^0.21.0",
|
||||
"vue-template-compiler": "^2.6.11"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -113,25 +113,6 @@ $highlight: #f2c94c;
|
|||
}
|
||||
}
|
||||
|
||||
&.setup {
|
||||
p {
|
||||
color: $dark-blue;
|
||||
overflow-wrap: break-word;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
ol {
|
||||
margin: 0 1rem;
|
||||
|
||||
li {
|
||||
margin: 0 0 1.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.container {
|
||||
padding: 0 1.5rem;
|
||||
}
|
||||
|
@ -372,4 +353,30 @@ $highlight: #f2c94c;
|
|||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
.setup {
|
||||
.panel {
|
||||
|
||||
p {
|
||||
color: $dark-blue;
|
||||
overflow-wrap: break-word;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
ol {
|
||||
margin: 0 1rem;
|
||||
|
||||
li {
|
||||
margin: 0 0 1.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.buttons {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field is-horizontal">
|
||||
<div v-if="symlinkVhostEnabled" class="field is-horizontal">
|
||||
<div class="field-label">
|
||||
<label class="label">Symlink vhost</label>
|
||||
</div>
|
||||
|
@ -173,6 +173,19 @@
|
|||
shareQuery(query) {
|
||||
window.history.replaceState({}, '', `?${query}`);
|
||||
},
|
||||
// Disable symlink if modularized structure is disabled
|
||||
'$props.data.modularizedStructure': {
|
||||
handler(data) {
|
||||
if (data.computed) {
|
||||
this.$props.data.symlinkVhost.enabled = true;
|
||||
this.$props.data.symlinkVhost.computed = this.$props.data.symlinkVhost.value;
|
||||
} else {
|
||||
this.$props.data.symlinkVhost.enabled = false;
|
||||
this.$props.data.symlinkVhost.computed = false;
|
||||
}
|
||||
},
|
||||
deep: true,
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
confirm(title, body, callback) {
|
||||
|
|
|
@ -15,30 +15,37 @@ limitations under the License.
|
|||
-->
|
||||
|
||||
<template>
|
||||
<div class="panel setup">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li v-for="tab in tabs" :class="tabClass(tab.key)">
|
||||
<a @click="active = tab.key">{{ tab.display }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="setup">
|
||||
<div class="panel">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li v-for="tab in tabs" :class="tabClass(tab.key)">
|
||||
<a @click="active = tab.key">{{ tab.display }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<component :is="tab"
|
||||
v-for="tab in tabs"
|
||||
:key="tab.key"
|
||||
:data="$props.data"
|
||||
:style="{ display: active === tab.key ? undefined : 'none' }"
|
||||
class="container"
|
||||
></component>
|
||||
|
||||
<div class="navigation-buttons">
|
||||
<a v-if="previousTab !== false" class="button is-mini" @click="active = previousTab">
|
||||
<i class="fas fa-long-arrow-alt-left"></i> <span>Back</span>
|
||||
</a>
|
||||
<a v-if="nextTab !== false" class="button is-primary is-mini" @click="active = nextTab">
|
||||
<span>Next</span> <i class="fas fa-long-arrow-alt-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<component :is="tab"
|
||||
v-for="tab in tabs"
|
||||
:key="tab.key"
|
||||
:data="$props.data"
|
||||
:style="{ display: active === tab.key ? undefined : 'none' }"
|
||||
class="container"
|
||||
></component>
|
||||
|
||||
<div class="navigation-buttons">
|
||||
<a v-if="previousTab !== false" class="button is-mini" @click="active = previousTab">
|
||||
<i class="fas fa-long-arrow-alt-left"></i> <span>Back</span>
|
||||
</a>
|
||||
<a v-if="nextTab !== false" class="button is-primary is-mini" @click="active = nextTab">
|
||||
<span>Next</span> <i class="fas fa-long-arrow-alt-right"></i>
|
||||
</a>
|
||||
<div class="buttons is-centered">
|
||||
<a class="button is-success" @click="downloadZip">Download Config</a>
|
||||
<a class="button is-primary" @click="copyZip">Copy Base64</a>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -72,6 +79,13 @@ limitations under the License.
|
|||
if (index >= 0) return tabs[index];
|
||||
return false;
|
||||
},
|
||||
nginxDir() {
|
||||
return this.$props.data.global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, '');
|
||||
},
|
||||
zipName() {
|
||||
const domains = this.$props.data.domains.filter(d => d !== null).map(d => d.server.domain.computed);
|
||||
return `nginxconfig.io-${domains.join(',')}.zip`;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
tabClass(tab) {
|
||||
|
@ -80,6 +94,13 @@ limitations under the License.
|
|||
if (tabs.indexOf(tab) < tabs.indexOf(this.$data.active)) return 'is-before';
|
||||
return undefined;
|
||||
},
|
||||
downloadZip() {
|
||||
alert('Imagine I\'m a working download');
|
||||
},
|
||||
copyZip() {
|
||||
const command = `echo 'BASE64 HERE' | base64 --decode > ${this.nginxDir}/${this.zipName}`;
|
||||
alert(`Imagine I'm a working copy to clipboard\n\n${command}`);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -100,6 +100,8 @@
|
|||
return false;
|
||||
},
|
||||
sitesAvailable() {
|
||||
if (!this.$props.data.global.tools.modularizedStructure.computed) return `${this.nginxDir}/nginx.conf`;
|
||||
|
||||
const enabledAvailable = this.$props.data.global.tools.symlinkVhost.computed ? 'available' : 'enabled';
|
||||
return this.$props.data.domains
|
||||
.filter(domain => domain.https.certType.computed === 'letsEncrypt')
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
<b>Download</b> the generated config: <b><a @click="downloadZip">{{ zipName }}</a></b>
|
||||
<b>Download</b> the generated config: <b><a @click="$parent.downloadZip">{{ $parent.zipName }}</a></b>
|
||||
<br />
|
||||
and <b>upload</b> it to your server's <code class="slim">{{ nginxDir }}</code> directory.
|
||||
and <b>upload</b> it to your server's <code class="slim">{{ $parent.nginxDir }}</code> directory.
|
||||
</p>
|
||||
<p>
|
||||
or, <b><a @click="copyZip">Copy a base64 string of the compressed config</a></b>, paste it in
|
||||
or, <b><a @click="$parent.copyZip">Copy a base64 string of the compressed config</a></b>, paste it in
|
||||
your server's command line and execute it.
|
||||
</p>
|
||||
</li>
|
||||
|
@ -25,7 +25,7 @@
|
|||
<p>
|
||||
Navigate to your NGINX <b>configuration directory</b> on your server:
|
||||
<br />
|
||||
<code class="slim">cd {{ nginxDir }}</code>
|
||||
<code class="slim">cd {{ $parent.nginxDir }}</code>
|
||||
</p>
|
||||
</li>
|
||||
|
||||
|
@ -41,7 +41,7 @@
|
|||
<p>
|
||||
<b>Unzip</b> the new compressed configuration archive:
|
||||
<br />
|
||||
<code class="slim">unzip -o {{ zipName }}</code>
|
||||
<code class="slim">unzip -o {{ $parent.zipName }}</code>
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
@ -63,23 +63,5 @@
|
|||
i18n,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
nginxDir() {
|
||||
return this.$props.data.global.nginx.nginxConfigDirectory.computed;
|
||||
},
|
||||
zipName() {
|
||||
const domains = this.$props.data.domains.filter(d => d !== null).map(d => d.server.domain.computed);
|
||||
return `nginxconfig.io-${domains.join(',')}.zip`;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
downloadZip() {
|
||||
alert('Imagine I\'m a working download');
|
||||
},
|
||||
copyZip() {
|
||||
const command = `echo 'BASE64 HERE' | base64 --decode > ${this.nginxDir}${this.zipName}`;
|
||||
alert(`Imagine I'm a working copy to clipboard\n\n${command}`);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
Loading…
Reference in New Issue