Original app written in Vue

This commit is contained in:
codevictory 2022-05-28 19:27:48 +03:00
parent 78d33e5487
commit ede231e623
31 changed files with 1241 additions and 521 deletions

View file

@ -1,13 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<link rel="icon" href="/small-logo.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Crimson+Text" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<title>Vite App</title>
</head>
<body>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</body>
</html>

206
package-lock.json generated
View file

@ -9,6 +9,7 @@
"version": "0.0.0",
"dependencies": {
"pinia": "^2.0.13",
"sass": "^1.52.1",
"vue": "^3.2.33",
"vue-router": "^4.0.14"
},
@ -1440,6 +1441,18 @@
"node": ">=4"
}
},
"node_modules/anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/arch": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
@ -1591,6 +1604,14 @@
"tweetnacl": "^0.14.3"
}
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"engines": {
"node": ">=8"
}
},
"node_modules/blob-util": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
@ -1623,7 +1644,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@ -1801,6 +1821,43 @@
"node": ">= 0.8.0"
}
},
"node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/chokidar/node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/ci-info": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz",
@ -3380,7 +3437,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@ -3481,7 +3537,6 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@ -3778,6 +3833,11 @@
"node": ">= 4"
}
},
"node_modules/immutable": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz",
"integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ=="
},
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@ -3837,6 +3897,17 @@
"node": ">=10"
}
},
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/is-ci": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
@ -3865,7 +3936,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -3883,7 +3953,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@ -3911,7 +3980,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": {
"node": ">=0.12.0"
}
@ -4555,6 +4623,14 @@
"integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
"dev": true
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@ -4737,7 +4813,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": {
"node": ">=8.6"
},
@ -4963,6 +5038,17 @@
}
]
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"node_modules/regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@ -5113,6 +5199,22 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
"node_modules/sass": {
"version": "1.52.1",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.52.1.tgz",
"integrity": "sha512-fSzYTbr7z8oQnVJ3Acp9hV80dM1fkMN7mSD/25mpcct9F7FPBMOI8krEYALgU1aZoqGhQNhTPsuSmxjnIvAm4Q==",
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
"sass": "sass.js"
},
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/saxes": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
@ -5512,7 +5614,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@ -7174,6 +7275,15 @@
"color-convert": "^1.9.0"
}
},
"anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
}
},
"arch": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
@ -7279,6 +7389,11 @@
"tweetnacl": "^0.14.3"
}
},
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
},
"blob-util": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
@ -7311,7 +7426,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
}
@ -7419,6 +7533,31 @@
"integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
"dev": true
},
"chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"fsevents": "~2.3.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"dependencies": {
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"requires": {
"is-glob": "^4.0.1"
}
}
}
},
"ci-info": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz",
@ -8523,7 +8662,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@ -8595,7 +8733,6 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"optional": true
},
"function-bind": {
@ -8802,6 +8939,11 @@
"integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
"dev": true
},
"immutable": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz",
"integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ=="
},
"import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@ -8846,6 +8988,14 @@
"integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
"dev": true
},
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"requires": {
"binary-extensions": "^2.0.0"
}
},
"is-ci": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
@ -8867,8 +9017,7 @@
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
"is-fullwidth-code-point": {
"version": "3.0.0",
@ -8880,7 +9029,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
@ -8898,8 +9046,7 @@
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"is-path-inside": {
"version": "3.0.3",
@ -9390,6 +9537,11 @@
"integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
"dev": true
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@ -9535,8 +9687,7 @@
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"pify": {
"version": "2.3.0",
@ -9657,6 +9808,14 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
"readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"requires": {
"picomatch": "^2.2.1"
}
},
"regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@ -9759,6 +9918,16 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
"sass": {
"version": "1.52.1",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.52.1.tgz",
"integrity": "sha512-fSzYTbr7z8oQnVJ3Acp9hV80dM1fkMN7mSD/25mpcct9F7FPBMOI8krEYALgU1aZoqGhQNhTPsuSmxjnIvAm4Q==",
"requires": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
"source-map-js": ">=0.6.2 <2.0.0"
}
},
"saxes": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
@ -10051,7 +10220,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}

View file

@ -13,6 +13,7 @@
},
"dependencies": {
"pinia": "^2.0.13",
"sass": "^1.52.1",
"vue": "^3.2.33",
"vue-router": "^4.0.14"
},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

BIN
public/runosaari-logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

BIN
public/small-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,125 +1,129 @@
<script setup lang="ts">
import { RouterLink, RouterView } from "vue-router";
import HelloWorld from "@/components/HelloWorld.vue";
import { RouterView } from "vue-router";
import Header from '@/components/Header.vue';
import Footer from '@/components/Footer.vue'
</script>
<template>
<header>
<img
alt="Vue logo"
class="logo"
src="@/assets/logo.svg"
width="125"
height="125"
/>
<div class="wrapper">
<HelloWorld msg="You did it!" />
<nav>
<RouterLink to="/">Home</RouterLink>
<RouterLink to="/about">About</RouterLink>
</nav>
</div>
</header>
<Header />
<main>
<RouterView />
</main>
<Footer />
</template>
<style>
@import "@/assets/base.css";
<style land='scss'>
@import "@/assets/base.scss";
#app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
font-weight: normal;
html {
overflow-x: hidden;
}
header {
line-height: 1.5;
max-height: 100vh;
body {
font-family: 'Crimson Text', sans-serif;
color: #2f273e;
font-size: 1.1rem;
margin: 0px;
}
.logo {
display: block;
margin: 0 auto 2rem;
}
a,
.green {
text-decoration: none;
color: hsla(160, 100%, 37%, 1);
transition: 0.4s;
}
@media (hover: hover) {
a:hover {
background-color: hsla(160, 100%, 37%, 0.2);
}
}
nav {
width: 100%;
font-size: 12px;
text-align: center;
margin-top: 2rem;
}
nav a.router-link-exact-active {
color: var(--color-text);
}
nav a.router-link-exact-active:hover {
background-color: transparent;
}
nav a {
display: inline-block;
padding: 0 1rem;
border-left: 1px solid var(--color-border);
}
nav a:first-of-type {
border: 0;
}
@media (min-width: 1024px) {
@media screen and (max-width: 600px) {
body {
background-color: #d5caf2;
overflow-x: hidden;
}
}
main {
display: flex;
place-items: center;
}
flex-direction: column;
align-items: center;
width: 100%;
min-height: 500px;
}
#app {
display: grid;
grid-template-columns: 1fr 1fr;
padding: 0 2rem;
}
a {
color: #2f273e;
text-decoration: none;
}
header {
display: flex;
place-items: center;
padding-right: calc(var(--section-gap) / 2);
}
a:hover {
text-decoration: underline;
}
header .wrapper {
display: flex;
place-items: flex-start;
flex-wrap: wrap;
}
.logo {
margin: 0 2rem 0 0;
}
nav {
ul {
text-align: left;
margin-left: -1rem;
font-size: 1rem;
max-width: 44%;
}
padding: 1rem 0;
margin-top: 1rem;
@media screen and (max-width: 600px) {
ul {
max-width: 90% !important;
}
}
h1,
h2,
h3,
h4,
h5 {
text-shadow: 3px 3px 3px #ababab;
}
h1 {
font-size: 3rem;
}
p {
text-align: justify;
}
</style>
<style lang="scss">
section.main {
display: flex;
flex-direction: column;
align-items: center;
width: 80%;
max-width: 1000px;
background-image: linear-gradient(to top, rgba(255, 0, 0, 0), #d5caf2);
text-align: center;
border-radius: 3px 3px 0px 0px;
p {
padding: 0px 20px;
max-width: 56%;
width: 100%;
}
@media screen and (max-width: 600px) {
p {
max-width: none;
}
}
.link-back {
font-weight: bolder;
margin-top: 20px;
margin-bottom: 20px;
text-decoration: underline;
}
}
section.logo~section.main {
border-radius: 0px;
}
.generic-link {
color: #2222ed;
text-decoration: underline;
}
hr {
width: inherit;
}
.foot-note {
margin-top: 20px;
margin-bottom: 20px;
}
</style>

View file

@ -1,74 +0,0 @@
/* color palette from <https://github.com/vuejs/theme> */
:root {
--vt-c-white: #ffffff;
--vt-c-white-soft: #f8f8f8;
--vt-c-white-mute: #f2f2f2;
--vt-c-black: #181818;
--vt-c-black-soft: #222222;
--vt-c-black-mute: #282828;
--vt-c-indigo: #2c3e50;
--vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
--vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
--vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
--vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
--vt-c-text-light-1: var(--vt-c-indigo);
--vt-c-text-light-2: rgba(60, 60, 60, 0.66);
--vt-c-text-dark-1: var(--vt-c-white);
--vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
}
/* semantic color variables for this project */
:root {
--color-background: var(--vt-c-white);
--color-background-soft: var(--vt-c-white-soft);
--color-background-mute: var(--vt-c-white-mute);
--color-border: var(--vt-c-divider-light-2);
--color-border-hover: var(--vt-c-divider-light-1);
--color-heading: var(--vt-c-text-light-1);
--color-text: var(--vt-c-text-light-1);
--section-gap: 160px;
}
@media (prefers-color-scheme: dark) {
:root {
--color-background: var(--vt-c-black);
--color-background-soft: var(--vt-c-black-soft);
--color-background-mute: var(--vt-c-black-mute);
--color-border: var(--vt-c-divider-dark-2);
--color-border-hover: var(--vt-c-divider-dark-1);
--color-heading: var(--vt-c-text-dark-1);
--color-text: var(--vt-c-text-dark-2);
}
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
position: relative;
font-weight: normal;
}
body {
min-height: 100vh;
color: var(--color-text);
background: var(--color-background);
transition: color 0.5s, background-color 0.5s;
line-height: 1.6;
font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,
Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
font-size: 15px;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

275
src/assets/base.scss Normal file
View file

@ -0,0 +1,275 @@
/* Alerts and form errors */
.alert {
display: flex;
justify-content: center;
padding: 15px;
border: 1px solid transparent;
border-radius: 4px;
margin-bottom: 20px;
}
.alert-info {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-warning {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
.alert p {
text-align: center;
margin: 0px;
}
.alert:empty {
display: none;
}
.invalid-feedback {
color: #a94442;
display: block;
margin: -1rem 0 2rem;
}
html {
overflow-x: hidden;
}
body {
font-family: 'Crimson Text', sans-serif;
color: #2f273e;
font-size: 1.1rem;
margin: 0px;
}
@media screen and (max-width: 600px) {
body {
background-color: #d5caf2;
overflow-x: hidden;
}
}
header {
display: flex;
flex-direction: column;
align-items: center;
nav {
display: flex;
justify-content: center;
a {
padding: 15px;
color: #2f273e;
text-decoration: none;
}
a:hover {
background-image: linear-gradient(to bottom, rgba(255, 0, 0, 0), #d5caf2);
text-decoration: underline;
}
@media screen and (max-width: 600px) {
a {
width: 100%;
padding: 0px;
text-align: center;
text-decoration: underline;
font-size: 1.5rem;
margin-bottom: 4px;
}
}
&.mobile-main-nav-bar {
visibility: hidden;
height: 0px;
}
@media screen and (max-width: 600px) {
&.mobile-main-nav-bar {
height: auto;
display: flex;
visibility: visible;
flex-direction: column;
align-items: center;
background-color: #d5caf2;
width: 80%;
margin-bottom: 30px;
}
&.main-nav-bar {
visibility: hidden;
height: 0px;
}
}
}
.mobile-main-title {
visibility: hidden;
height: 0px;
margin: 0px;
}
@media screen and (max-width: 600px) {
.mobile-main-title {
visibility: visible !important;
height: 100% !important;
margin-top: 30px !important;
margin-bottom: 30px !important;
text-align: center;
}
}
}
main {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
min-height: 500px;
}
footer {
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 30px;
.container {
display: flex;
justify-content: space-between;
width: 50%;
align-items: start;
.middle img {
max-width: 55px;
margin-top: 10px;
}
.right {
text-align: right;
}
}
.mobile-middle {
visibility: hidden;
img {
max-width: 55px;
margin-top: 10px;
}
}
}
@media screen and (max-width: 600px) {
footer {
.container {
width: 95% !important;
flex-direction: column;
align-items: center;
margin-top: 20px;
margin-bottom: 20px;
div {
text-align: center !important;
}
.middle {
visibility: hidden;
max-height: 15px;
}
}
.mobile-middle {
visibility: visible;
}
}
}
a {
color: #2f273e;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
ul {
text-align: left;
max-width: 44%;
}
@media screen and (max-width: 600px) {
ul {
max-width: 90% !important;
}
}
h1,
h2,
h3,
h4,
h5 {
text-shadow: 3px 3px 3px #ababab;
}
h1 {
font-size: 3rem;
}
p {
text-align: justify;
}
section.main {
display: flex;
flex-direction: column;
align-items: center;
width: 80%;
max-width: 1000px;
background-image: linear-gradient(to top, rgba(255, 0, 0, 0), #d5caf2);
text-align: center;
border-radius: 3px 3px 0px 0px;
p {
padding: 0px 20px;
max-width: 56%;
width: 100%;
}
@media screen and (max-width: 600px) {
p {
max-width: none;
}
}
.link-back {
font-weight: bolder;
margin-top: 20px;
margin-bottom: 20px;
text-decoration: underline;
}
}
section.logo ~ section.main {
border-radius: 0px;
}
.generic-link {
color: #2222ed;
text-decoration: underline;
}
hr {
width: inherit;
}
.foot-note {
margin-top: 20px;
margin-bottom: 20px;
}

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69" xmlns:v="https://vecta.io/nano"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>

Before

Width:  |  Height:  |  Size: 308 B

82
src/components/Footer.vue Normal file
View file

@ -0,0 +1,82 @@
<template>
<footer>
<div class="mobile-middle">
<a href="/#nav-bar"><img src="small-logo.png" alt="small logo" /></a>
</div>
<div class="container">
<div class="left">
Livonsaari & Palva & Velkuanmaa<br />
Naantalin saaristo<br />
</div>
<div class="middle">
<a href="/#nav-bar"><img src="small-logo.png" alt="small logo" /></a>
</div>
<div class="right">
Katariina Vuorinen <br />
<a class="generic-link" href="mailto:runosaari@gmail.com">runosaari@gmail.com</a>
</div>
</div>
<div>
<a class="generic-link" href="https://github.com/codevictory/runosaari.net">lähdekoodi</a>
by codevictory
</div>
</footer>
</template>
<style lang="scss">
footer {
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 30px;
.container {
display: flex;
justify-content: space-between;
width: 50%;
align-items: start;
.middle img {
max-width: 55px;
margin-top: 10px;
}
.right {
text-align: right;
}
}
.mobile-middle {
visibility: hidden;
img {
max-width: 55px;
margin-top: 10px;
}
}
}
@media screen and (max-width: 600px) {
footer {
.container {
width: 95% !important;
flex-direction: column;
align-items: center;
margin-top: 20px;
margin-bottom: 20px;
div {
text-align: center !important;
}
.middle {
visibility: hidden;
max-height: 15px;
}
}
.mobile-middle {
visibility: visible;
}
}
}
</style>

101
src/components/Header.vue Normal file
View file

@ -0,0 +1,101 @@
<script setup lang="ts">
import { RouterLink } from "vue-router";
</script>
<template>
<header>
<nav class="main-nav-bar">
<RouterLink to="/">Etusivu</RouterLink>
<RouterLink to="/program">Ohjelma</RouterLink>
<RouterLink to="/performers">Esiintyjät</RouterLink>
<RouterLink to="/info">Info</RouterLink>
<RouterLink to="/safety">Turvallisuus</RouterLink>
<RouterLink to="/archive">Arkisto</RouterLink>
</nav>
<h1 class="mobile-main-title">
<RouterLink to="/">Runosaari 2022</RouterLink>
</h1>
<nav class="mobile-main-nav-bar" id="nav-bar">
<RouterLink to="/#logo-start">Etusivu</RouterLink>
<RouterLink to="/program#program-start">Ohjelma</RouterLink>
<RouterLink to="/performers#performers-start">Esiintyjät</RouterLink>
<RouterLink to="/info#contact-start">Info</RouterLink>
<RouterLink to="/safety#safety-start">Turvallisuus</RouterLink>
<RouterLink to="/archive#archive-start">Arkisto</RouterLink>
</nav>
</header>
</template>
<style lang="scss">
header {
display: flex;
flex-direction: column;
align-items: center;
nav {
display: flex;
justify-content: center;
a {
padding: 15px;
color: #2f273e;
text-decoration: none;
}
a:hover {
background-image: linear-gradient(to bottom, rgba(255, 0, 0, 0), #d5caf2);
text-decoration: underline;
}
@media screen and (max-width: 600px) {
a {
width: 100%;
padding: 0px;
text-align: center;
text-decoration: underline;
font-size: 1.5rem;
margin-bottom: 4px;
}
}
&.mobile-main-nav-bar {
visibility: hidden;
height: 0px;
}
@media screen and (max-width: 600px) {
&.mobile-main-nav-bar {
height: auto;
display: flex;
visibility: visible;
flex-direction: column;
align-items: center;
background-color: #d5caf2;
width: 80%;
margin-bottom: 30px;
}
&.main-nav-bar {
visibility: hidden;
height: 0px;
}
}
}
.mobile-main-title {
visibility: hidden;
height: 0px;
margin: 0px;
}
@media screen and (max-width: 600px) {
.mobile-main-title {
visibility: visible !important;
height: 100% !important;
margin-top: 30px !important;
margin-bottom: 30px !important;
text-align: center;
}
}
}
</style>

View file

@ -1,40 +0,0 @@
<script setup lang="ts">
defineProps<{
msg: string;
}>();
</script>
<template>
<div class="greetings">
<h1 class="green">{{ msg }}</h1>
<h3>
Youve successfully created a project with
<a target="_blank" href="https://vitejs.dev/">Vite</a> +
<a target="_blank" href="https://vuejs.org/">Vue 3</a>. What's next?
</h3>
</div>
</template>
<style scoped>
h1 {
font-weight: 500;
font-size: 2.6rem;
top: -10px;
}
h3 {
font-size: 1.2rem;
}
.greetings h1,
.greetings h3 {
text-align: center;
}
@media (min-width: 1024px) {
.greetings h1,
.greetings h3 {
text-align: left;
}
}
</style>

View file

@ -1,93 +0,0 @@
<script setup lang="ts">
import WelcomeItem from "./WelcomeItem.vue";
import DocumentationIcon from "./icons/IconDocumentation.vue";
import ToolingIcon from "./icons/IconTooling.vue";
import EcosystemIcon from "./icons/IconEcosystem.vue";
import CommunityIcon from "./icons/IconCommunity.vue";
import SupportIcon from "./icons/IconSupport.vue";
</script>
<template>
<WelcomeItem>
<template #icon>
<DocumentationIcon />
</template>
<template #heading>Documentation</template>
Vues
<a target="_blank" href="https://vuejs.org/">official documentation</a>
provides you with all information you need to get started.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<ToolingIcon />
</template>
<template #heading>Tooling</template>
This project is served and bundled with
<a href="https://vitejs.dev/guide/features.html" target="_blank">Vite</a>.
The recommended IDE setup is
<a href="https://code.visualstudio.com/" target="_blank">VSCode</a> +
<a href="https://github.com/johnsoncodehk/volar" target="_blank">Volar</a>.
If you need to test your components and web pages, check out
<a href="https://www.cypress.io/" target="_blank">Cypress</a> and
<a
href="https://docs.cypress.io/guides/component-testing/introduction"
target="_blank"
>Cypress Component Testing</a
>.
<br />
More instructions are available in <code>README.md</code>.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<EcosystemIcon />
</template>
<template #heading>Ecosystem</template>
Get official tools and libraries for your project:
<a target="_blank" href="https://pinia.vuejs.org/">Pinia</a>,
<a target="_blank" href="https://router.vuejs.org/">Vue Router</a>,
<a target="_blank" href="https://test-utils.vuejs.org/">Vue Test Utils</a>,
and
<a target="_blank" href="https://github.com/vuejs/devtools">Vue Dev Tools</a
>. If you need more resources, we suggest paying
<a target="_blank" href="https://github.com/vuejs/awesome-vue"
>Awesome Vue</a
>
a visit.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<CommunityIcon />
</template>
<template #heading>Community</template>
Got stuck? Ask your question on
<a target="_blank" href="https://chat.vuejs.org">Vue Land</a>, our official
Discord server, or
<a target="_blank" href="https://stackoverflow.com/questions/tagged/vue.js"
>StackOverflow</a
>. You should also subscribe to
<a target="_blank" href="https://news.vuejs.org">our mailing list</a> and
follow the official
<a target="_blank" href="https://twitter.com/vuejs">@vuejs</a>
twitter account for latest news in the Vue world.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<SupportIcon />
</template>
<template #heading>Support Vue</template>
As an independent project, Vue relies on community backing for its
sustainability. You can help us by
<a target="_blank" href="https://vuejs.org/sponsor/">becoming a sponsor</a>.
</WelcomeItem>
</template>

View file

@ -1,86 +0,0 @@
<template>
<div class="item">
<i>
<slot name="icon"></slot>
</i>
<div class="details">
<h3>
<slot name="heading"></slot>
</h3>
<slot></slot>
</div>
</div>
</template>
<style scoped>
.item {
margin-top: 2rem;
display: flex;
}
.details {
flex: 1;
margin-left: 1rem;
}
i {
display: flex;
place-items: center;
place-content: center;
width: 32px;
height: 32px;
color: var(--color-text);
}
h3 {
font-size: 1.2rem;
font-weight: 500;
margin-bottom: 0.4rem;
color: var(--color-heading);
}
@media (min-width: 1024px) {
.item {
margin-top: 0;
padding: 0.4rem 0 1rem calc(var(--section-gap) / 2);
}
i {
top: calc(50% - 25px);
left: -26px;
position: absolute;
border: 1px solid var(--color-border);
background: var(--color-background);
border-radius: 8px;
width: 50px;
height: 50px;
}
.item:before {
content: " ";
border-left: 1px solid var(--color-border);
position: absolute;
left: 0;
bottom: calc(50% + 25px);
height: calc(50% - 25px);
}
.item:after {
content: " ";
border-left: 1px solid var(--color-border);
position: absolute;
left: 0;
top: calc(50% + 25px);
height: calc(50% - 25px);
}
.item:first-of-type:before {
display: none;
}
.item:last-of-type:after {
display: none;
}
}
</style>

View file

@ -1,12 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="20"
height="20"
fill="currentColor"
>
<path
d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z"
/>
</svg>
</template>

View file

@ -1,12 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="20"
height="17"
fill="currentColor"
>
<path
d="M11 2.253a1 1 0 1 0-2 0h2zm-2 13a1 1 0 1 0 2 0H9zm.447-12.167a1 1 0 1 0 1.107-1.666L9.447 3.086zM1 2.253L.447 1.42A1 1 0 0 0 0 2.253h1zm0 13H0a1 1 0 0 0 1.553.833L1 15.253zm8.447.833a1 1 0 1 0 1.107-1.666l-1.107 1.666zm0-14.666a1 1 0 1 0 1.107 1.666L9.447 1.42zM19 2.253h1a1 1 0 0 0-.447-.833L19 2.253zm0 13l-.553.833A1 1 0 0 0 20 15.253h-1zm-9.553-.833a1 1 0 1 0 1.107 1.666L9.447 14.42zM9 2.253v13h2v-13H9zm1.553-.833C9.203.523 7.42 0 5.5 0v2c1.572 0 2.961.431 3.947 1.086l1.107-1.666zM5.5 0C3.58 0 1.797.523.447 1.42l1.107 1.666C2.539 2.431 3.928 2 5.5 2V0zM0 2.253v13h2v-13H0zm1.553 13.833C2.539 15.431 3.928 15 5.5 15v-2c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM5.5 15c1.572 0 2.961.431 3.947 1.086l1.107-1.666C9.203 13.523 7.42 13 5.5 13v2zm5.053-11.914C11.539 2.431 12.928 2 14.5 2V0c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM14.5 2c1.573 0 2.961.431 3.947 1.086l1.107-1.666C18.203.523 16.421 0 14.5 0v2zm3.5.253v13h2v-13h-2zm1.553 12.167C18.203 13.523 16.421 13 14.5 13v2c1.573 0 2.961.431 3.947 1.086l1.107-1.666zM14.5 13c-1.92 0-3.703.523-5.053 1.42l1.107 1.666C11.539 15.431 12.928 15 14.5 15v-2z"
/>
</svg>
</template>

View file

@ -1,12 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="18"
height="20"
fill="currentColor"
>
<path
d="M11.447 8.894a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm0 1.789a1 1 0 1 0 .894-1.789l-.894 1.789zM7.447 7.106a1 1 0 1 0-.894 1.789l.894-1.789zM10 9a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0H8zm9.447-5.606a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm2 .789a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zM18 5a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0h-2zm-5.447-4.606a1 1 0 1 0 .894-1.789l-.894 1.789zM9 1l.447-.894a1 1 0 0 0-.894 0L9 1zm-2.447.106a1 1 0 1 0 .894 1.789l-.894-1.789zm-6 3a1 1 0 1 0 .894 1.789L.553 4.106zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zm-2-.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 2.789a1 1 0 1 0 .894-1.789l-.894 1.789zM2 5a1 1 0 1 0-2 0h2zM0 7.5a1 1 0 1 0 2 0H0zm8.553 12.394a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 1a1 1 0 1 0 .894 1.789l-.894-1.789zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zM8 19a1 1 0 1 0 2 0H8zm2-2.5a1 1 0 1 0-2 0h2zm-7.447.394a1 1 0 1 0 .894-1.789l-.894 1.789zM1 15H0a1 1 0 0 0 .553.894L1 15zm1-2.5a1 1 0 1 0-2 0h2zm12.553 2.606a1 1 0 1 0 .894 1.789l-.894-1.789zM17 15l.447.894A1 1 0 0 0 18 15h-1zm1-2.5a1 1 0 1 0-2 0h2zm-7.447-5.394l-2 1 .894 1.789 2-1-.894-1.789zm-1.106 1l-2-1-.894 1.789 2 1 .894-1.789zM8 9v2.5h2V9H8zm8.553-4.894l-2 1 .894 1.789 2-1-.894-1.789zm.894 0l-2-1-.894 1.789 2 1 .894-1.789zM16 5v2.5h2V5h-2zm-4.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zm-2.894-1l-2 1 .894 1.789 2-1L8.553.106zM1.447 5.894l2-1-.894-1.789-2 1 .894 1.789zm-.894 0l2 1 .894-1.789-2-1-.894 1.789zM0 5v2.5h2V5H0zm9.447 13.106l-2-1-.894 1.789 2 1 .894-1.789zm0 1.789l2-1-.894-1.789-2 1 .894 1.789zM10 19v-2.5H8V19h2zm-6.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zM2 15v-2.5H0V15h2zm13.447 1.894l2-1-.894-1.789-2 1 .894 1.789zM18 15v-2.5h-2V15h2z"
/>
</svg>
</template>

View file

@ -1,12 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="20"
height="20"
fill="currentColor"
>
<path
d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.666.105 5.5 5.5 0 0 0-.114 7.665L10 18.78l8.39-8.4a5.5 5.5 0 0 0-.114-7.665 5.5 5.5 0 0 0-7.666-.105l-.61.61z"
/>
</svg>
</template>

View file

@ -1,19 +0,0 @@
<!-- This icon is from <https://github.com/Templarian/MaterialDesign>, distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license-->
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true"
role="img"
class="iconify iconify--mdi"
width="24"
height="24"
preserveAspectRatio="xMidYMid meet"
viewBox="0 0 24 24"
>
<path
d="M20 18v-4h-3v1h-2v-1H9v1H7v-1H4v4h16M6.33 8l-1.74 4H7v-1h2v1h6v-1h2v1h2.41l-1.74-4H6.33M9 5v1h6V5H9m12.84 7.61c.1.22.16.48.16.8V18c0 .53-.21 1-.6 1.41c-.4.4-.85.59-1.4.59H4c-.55 0-1-.19-1.4-.59C2.21 19 2 18.53 2 18v-4.59c0-.32.06-.58.16-.8L4.5 7.22C4.84 6.41 5.45 6 6.33 6H7V5c0-.55.18-1 .57-1.41C7.96 3.2 8.44 3 9 3h6c.56 0 1.04.2 1.43.59c.39.41.57.86.57 1.41v1h.67c.88 0 1.49.41 1.83 1.22l2.34 5.39z"
fill="currentColor"
></path>
</svg>
</template>

View file

@ -0,0 +1,13 @@
import type Performer from '@/types/Performer';
const Performers: Array<Performer> = [
{ name: "asd", paragraphs: ["asd"], imagePath: "asd"},
{ name: "sadad", paragraphs: ["sad", "asd"], imagePath: "wqewqe"},
{ name: "sadad", paragraphs: ["sad", "asd"], imagePath: "wqewqe"},
{ name: "sadad", paragraphs: ["sad", "asd"], imagePath: "wqewqe"},
{ name: "sadad", paragraphs: ["sad", "asd"], imagePath: "wqewqe"},
{ name: "sadad", paragraphs: ["sad", "asd"], imagePath: "wqewqe"},
{ name: "sadad", paragraphs: ["sad", "asd"], imagePath: "wqewqe"}
];
export default Performers;

View file

@ -1,5 +1,10 @@
import { createRouter, createWebHistory } from "vue-router";
import HomeView from "@/views/HomeView.vue";
import InfoView from '@/views/InfoView.vue';
import ProgramView from '@/views/ProgramView.vue';
import PerformersView from '@/views/PerformersView.vue';
import SafetyView from '@/views/SafetyView.vue';
import ArchiveView from '@/views/ArchiveView.vue';
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
@ -10,12 +15,29 @@ const router = createRouter({
component: HomeView,
},
{
path: "/about",
name: "about",
// route level code-splitting
// this generates a separate chunk (About.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import("../views/AboutView.vue"),
path: "/info",
name: "info",
component: InfoView,
},
{
path: "/program",
name: "program",
component: ProgramView,
},
{
path: "/performers",
name: "performers",
component: PerformersView,
},
{
path: "/safety",
name: "safety",
component: SafetyView,
},
{
path: "/archive",
name: "archive",
component: ArchiveView,
},
],
});

7
src/types/Performer.ts Normal file
View file

@ -0,0 +1,7 @@
type Performer = {
name: String,
paragraphs: Array<String>,
imagePath: String
}
export default Performer;

View file

@ -1,15 +0,0 @@
<template>
<div class="about">
<h1>This is an about page</h1>
</div>
</template>
<style>
@media (min-width: 1024px) {
.about {
min-height: 100vh;
display: flex;
align-items: center;
}
}
</style>

88
src/views/ArchiveView.vue Normal file
View file

@ -0,0 +1,88 @@
<script context="module" lang="ts">
import Performers2021 from '@/data/performers/2021';
import type Performer from '@/types/Performer';
export default {
data(): { performers2021: Array<Performer> } {
return {
performers2021: Performers2021
}
}
}
</script>
<template>
<section class="main">
<h1 id="archive-start">Arkisto</h1>
<p v-if="pageIsVisible">ASDsa</p>
<div v-else="!pageIsVisible">
<h2>2021</h2>
<div class="performers-container">
<div class="performer-name" v-for="p in performers2021" :key="p.name">
<span class="fa fa-chevron-right" />
<a>{{ p.name }}</a>
</div>
</div>
</div>
</section>
</template>
<style scoped lang="scss">
.performer-img {
max-width: 57%;
margin-top: 10px;
}
@media screen and (max-width: 600px) {
.performer-img {
max-width: 100%;
}
}
.performer-paragraph {
text-align: left;
}
.performers-container {
display: flex;
flex-wrap: wrap;
width: 80%;
justify-content: space-evenly;
font-size: 1.2em;
.performer-name {
width: 40%;
margin-bottom: 4%;
border-radius: 3px;
display: flex;
align-items: center;
padding: 5px;
}
a {
color: #2f273e;
margin-left: 10px;
text-align: left;
}
}
@media screen and (max-width: 600px) {
.performers-container {
.performer-name {
width: 100%;
margin-bottom: 10%;
text-align: left;
padding-left: 5%;
a {
text-decoration: underline;
}
}
}
}
.performer-link {
color: blue;
}
</style>

View file

@ -1,9 +1,114 @@
<script setup lang="ts">
import TheWelcome from "@/components/TheWelcome.vue";
</script>
<template>
<main>
<TheWelcome />
</main>
<section class="logo" id="logo-start">
<picture>
<source srcset="runosaari-logo_small.jpg" media="(max-width: 600px)" alt="Runosaari logo" />
<source srcset="runosaari-logo.jpg" alt="Runosaari logo" />
<img src="runosaari-logo.jpg" alt="Runosaari logo" />
</picture>
<div id="logo-credits">
<div>@Sanna Hukkanen</div>
</div>
</section>
<section class="main">
<h1 id="main-title">Runosaari 2022</h1>
<h2>
<span class="time-and-place">~ 20.-23.7. Livonsaari & Velkuanmaa ~</span><br />
Eksymisretki omaan luontoosi, metsänpeiton suojaan!
</h2>
<p>
Lumi ja jää vähenee, vedenpinta nousee ja pandemian aallot viistävät meidänkin rantojamme.
Peurojen kurittaman monimuotoisuuden keskelle nousee RUNOSAARI täynnä ihmetystä ja kysymyksiä:
onko tulevaisuudella tulevaisuutta? Kuinka luontoon lomittuminen voi olla mahdollista? Jos
eksymme metsänpeittoon, voimmeko löytää jonnekin?
</p>
<p>
Uusi poikkitaiteellinen runofestivaali järjestetään toista kertaa Livonsaaressa, Palvassa ja
Velkuanmaassa 20.-23.7.2022! Ohjelmassa runous yhdistyy elävään musiikkiin ja erilaisiin
taiteellisiin työpajoihin. Livonsaaren perinteinen Seurantalo pikniknurmikkoineen ja
lähimetsineen tarjoaa puitteet lavaesiintyjille, työpajoille ja elävälle musiikille. Cafe
Laiturissa runous kohtaa yleisön meren äärellä. Velkuanmaan pastoraali-idylli kahden lossin
takana viettelee saaristoluonnon syvyyksiin, ja runoiltapäivässä saamme nauttia soitosta ja
runoudesta Saaristohotelli Vaihelan leppoisalla terassilla.
</p>
<p>
Runosaari-festivaaliin osallistuu toistakymmentä maamme eturivin runoilijaa, muusikoita,
työpajan vetäjiä ja muita esiintyjiä ke 20.7. la 23.7.2022.
</p>
<p>
Tapahtuman järjestää Runosaari-työryhmä. Yhteistyössä: Runoviikko ry, Kirjan talo Bokens hus
ry, Livonsaaren kyläyhdistys ry, Velkuan saaristolaisyhdistys ry, Aviador Kustannus, Enostone
Kustannus, Cafe Laituri ja Saaristohotelli Vaihela.
</p>
<p>
<i>[Ohjelmaa päivitetään]</i>
</p>
</section>
</template>
<style scoped lang="scss">
section.logo {
width: 80%;
max-width: 1000px;
background-color: #d5caf2;
border-radius: 3px 3px 0px 0px;
padding-top: 3px;
img {
width: 100%;
}
#logo-credits {
font-size: 90%;
display: flex;
justify-content: right;
background-color: #d5caf2;
max-width: 990px;
padding-right: 10px;
}
}
section.text {
display: flex;
flex-direction: column;
align-items: center;
width: 80%;
max-width: 1000px;
background-image: linear-gradient(to top, rgba(255, 0, 0, 0), #d5caf2);
text-align: center;
p {
padding: 0px 20px;
max-width: 56%;
}
@media screen and (max-width: 600px) {
p {
max-width: 90% !important;
}
}
}
@media screen and (max-width: 600px) {
section.text {
width: 90% !important;
}
}
@media screen and (max-width: 600px) {
#main-title {
visibility: hidden;
height: 0px;
margin: 0px;
}
}
@media screen and (max-width: 600px) {
.time-and-place {
font-size: 1.1rem;
}
}
</style>

39
src/views/InfoView.vue Normal file
View file

@ -0,0 +1,39 @@
<template>
<section class="main">
<h1 id="contact-start">Info</h1>
<i>[Tietoja päivitetään]</i>
<p>Tapahtuman järjestää Runosaari-työryhmä.</p>
<p>Tapahtumaa tukee Varsinais-Suomen rahasto ja Pro Sinervo</p>
<p>
Yhteistyössä: Runoviikko ry, Kirjan talo Bokens hus ry, Livonsaaren kyläyhdistys ry, Velkuan
saaristolaisyhdistys ry, Aviador Kustannus, Enostone Kustannus, Cafe Laituri ja Saaristohotelli
Vaihela.
</p>
<p>Tapahtumapaikat:</p>
<p>Livonsaarelle tulee silta tietä myöten, ajoaika Turusta n. 40 min (37 km).</p>
<p>
Torstaina Palvan saareen kuljetaan yhdellä lossilla. Livonsaaresta Teersaloon on matkaa noin
7km. Teersalosta lähtee lossi puolen tunnin välein. Cafe Laituriin on Palvan saaren
lossirannasta 1,5 km matka ja viitta perille.
</p>
<p>Lauantaina Livonsaaresta Velkuanmaalle kuljetaan kahdella lossilla.</p>
<p>
Palvan saari ylitetään tietä myöten suoraan saariston syvyyksiin Velkuanmaalle vievään lossiin.
</p>
<p>
Lossirannasta etäisyys Vaihelaan 2 km. (Esim: lähtö Seurantalolta klo 12:50, lossi Teersalosta
Palvaan 13:00, lossi Palvasta Velkuanmaahan 13:15.)
</p>
<p>Tapahtuma tuo korkeatasoista kotimaista runoutta saaristoon. Esitykset striimataan.</p>
<p>Ota yhteyttä: Katariina Vuorinen, runosaari@gmail.com</p>
<p>Tapahtuman</p>
<h2>SURVIVAL-ohjeet saariston syrjäseudulle</h2>
<ul>
<li>
Perjantain 22.7. tapahtumapaikka: Livonsaaren Seurantalo, Velkuantie 987. Livonsaareen tulee
silta tietä myöten ja Seurantalon pihassa on pysäköintitilaa. Info:
<a href="https://https://www.livonsaari.fi/" class="generic-link">www.livonsaari.fi/</a>
</li>
</ul>
</section>
</template>

View file

@ -0,0 +1,66 @@
<template>
<section class="main">
<h1 id="performers-start">Esiintyjät</h1>
<i>Lisätietoja tulossa myöhemmin!</i>
</section>
</template>
<style scoped lang="scss">
.performer-img {
max-width: 57%;
margin-top: 10px;
}
@media screen and (max-width: 600px) {
.performer-img {
max-width: 100%;
}
}
.performer-paragraph {
text-align: left;
}
.performers-container {
display: flex;
flex-wrap: wrap;
width: 80%;
justify-content: space-evenly;
font-size: 1.2em;
.performer-name {
width: 40%;
margin-bottom: 4%;
border-radius: 3px;
display: flex;
align-items: center;
padding: 5px;
}
a {
color: #2f273e;
margin-left: 10px;
text-align: left;
}
}
@media screen and (max-width: 600px) {
.performers-container {
.performer-name {
width: 100%;
margin-bottom: 10%;
text-align: left;
padding-left: 5%;
a {
text-decoration: underline;
}
}
}
}
.performer-link {
color: blue;
}
</style>

72
src/views/ProgramView.vue Normal file
View file

@ -0,0 +1,72 @@
<template>
<section class="main">
<h1 id="program-start">Ohjelma</h1>
<i>OHJELMA PÄIVITTYY KEVÄÄN MITTAAN, PYSYKÄÄ KUULOLLA!</i>
<h2>Keskiviikko 20.7.</h2>
<p class="performance-paragraph">
18-20 Olen polkuni päässä -illassa Ella Pyhältö lausuu rakastettuja runoja Irja ja Veikko
Aro-Heinilän kotipihalla (sateella sisällä).
</p>
<p class="performance-paragraph">Sydämellisesti tervetuloa!</p>
<p class="performance-paragraph">Paikka: Huhtakarintie 24, Livonsaari</p>
<h2>Torstai 21.7.</h2>
<p class="performance-paragraph">
14-16 Ainot ja Lauri esittävät Lähellä-nimisen poikkitaiteellisen kokoonpanon, joka on saanut
kolmannen kiinnityksen kiertopalkintoon Willi Kansa -katselmuksessa marraskuussa 2021 Irja ja
Veikko Aro-Heinilän pihamaalla. Toisessa osassa iltapäivää kuullaan Irja Aro-Heinilän ja Arto
Juurakon tekstejä Ainojen ja Laurin esittäminä.
</p>
<p class="performance-paragraph">
17-19 Runollinen, musiikillinen ja merellinen matinea Cafe Laiturissa. Esiintymässä mm. Anja
Erämaja.
</p>
<p class="performance-paragraph">
Paikka: Huhtakarintie 24, Livonsaari sekä Cafe Laituri, Voiponlahdentie 37, Palva
</p>
<h2>Perjantai 22.7.</h2>
<p class="performance-paragraph">
11-14 Monologityöpaja, vetäjä teatteritaiteen maisteri Kati Urho.
</p>
<p class="performance-paragraph">
Ympäristöjargonia luovasti -työpaja, vetäjä journalisti ja viestintäkonsultti Laura Rantanen.
</p>
<p class="performance-paragraph">
14-20 Runoutta, musiikkia ja poikkitaiteellisia yllätyksiä puutarhalavalla tai myrskyn sattuessa
Seurantalon salissa.
</p>
<p class="performance-paragraph">
Esiintymässä mm. Kari Aronpuro, Sanna Karlström, Katariina Vuorinen, Aki Salmela, Heidi Iivari
ja Laura Laakso.
</p>
<p class="performance-paragraph">
Musiikillisesta puolesta vastaa saksofonisti Mikko Innanen sekä Äyräs-kokoonpano: Olga Välimaa
(laulu), Kauko Röyhkä (laulu, kitara, basso), Ilkka Turta (kitara), Kimmo Laine (basso,
koskettimet), Roberto Lanz (rummut).
</p>
<p class="performance-paragraph">
Tapahtuman ajan Sinervon talolla pitää majaa kiehtovien kirjojen tori.
</p>
<p class="performance-paragraph">Paikka: Sinervon talo, Sauniementie 5, Teersalo</p>
<h2>Lauantai 23.7.</h2>
<p class="performance-paragraph">
13-17 Runollinen iltapäivä. Romanttinen Velkuanmaa kutsuu mystisen äärelle.
</p>
<p class="performance-paragraph">
Saaristohotelli Vaihelan terassilla runoilijat vievät kuulijat luomiinsa maailmoihin yhdessä
muusikoiden kanssa. Samalla ehtii myös nauttimaan lounasta, juttelemaan muiden festarikävijöiden
kanssa ja ihailemaan ympäröivää luontoa.
</p>
<p class="performance-paragraph">
Juha Kulmala ja Diodi-yhtye, Saila Susiluoto ja Markku Pääskynen (luuttu).
</p>
<p class="performance-paragraph">
Paikka: Vaihelan saaristohotelli, Velkuanmaantie 168, Velkuanmaa
</p>
</section>
</template>
<style scoped lang="scss">
.workshop-paragraph {
text-align: center !important;
margin: 12px;
}
</style>

48
src/views/SafetyView.vue Normal file
View file

@ -0,0 +1,48 @@
<template>
<section class="main">
<h1 id="safety-start">Turvallisemman tilan periaatteet</h1>
<p>
Runosaaren tapahtumissa noudatetaan turvallisemman tilan periaatteita. Pyrimme tapahtumissamme
turvaamaan näiden periaatteiden toteutumisen omalla toiminnallamme, tilojen suunnittelulla sekä
henkilökunnan, esiintyjien ja yleisön informoinnilla.
</p>
<ul>
<li>
<b>Kunnioitus.</b> Jokaisella ihmisellä on oikeus tulla kunnioitetuksi omana itsenään. Kunnioitathan
muiden ihmisten fyysistä ja psyykkistä koskemattomuutta, mielipiteitä sekä ihmisarvoa. Jokaisella
on oikeus poistua epämukavaksi kokemastaan tilanteesta tai keskustelusta. Ethän myöskään ota ihmisistä
kuvia kysymättä ensin.
</li>
<br />
<li>
<b>Olettaminen.</b> Ethän oleta kenenkään sukupuolta, kansallisuutta, seksuaalista suuntautumista,
kulttuuria, kieltä, uskontoa, arvoja, terveydentilaa tai toimintakykyä. Ethän tee johtopäätelmiä
kenenkään ulkonäön, käytöksen tai oletetun sosioekonomisen aseman perusteella.
</li>
<br />
<li>
<b>Kommunikointi.</b> Pyrithän luomaan ympärillesi ystävällistä ja turvallista ilmapiiriä. Ole
avoin muita ihmisiä kohtaan, kuuntele ja käytä kunnioittavaa kieltä. Ethän oleta puheessasi kenenkään
sukupuolta tai muita ominaisuuksia. Ethän käytä stereotypisoivaa, toiseuttavaa tai halventaa kieltä.
Jos kuitenkin vahingossa loukkaat sanoillasi jotakuta, pyydäthän anteeksi.
</li>
<br />
<li>
<b>Toimiminen.</b> Mikäli havaitset epäasiallista käytöstä tai koet olosi uhatuksi, älä epäröi
pyytää apua Runosaaren ja tapahtumapaikkojen työntekijöiltä. Jos koet, että olet kohdannut häirintää
tapahtumissamme ja siihen ei ole onnistuttu puuttumaan voit olla yhteydessä Runosaaren tuotantokoordinaattoriin
Katariina Vuoriseen: runosaari@gmail.com.
</li>
</ul>
<h1 id="covid-start">Covid-19-lauseke</h1>
<p>
Järjestämme tilaisuuden voimassa olevien säädösten ja ohjeiden mukaan. Jotta yleisömäärää
voidaan tarpeen vaatiessa rajata, koko tapahtumaan pyydetään ilmoittautumaan etukäteen.
Työpajoihin ilmoittaudutaan erikseen. Tarkistamme koronatilanteen kesäkuun alussa, jolloin
päätämme, missä muodossa tapahtuma järjestetään. Varaudumme siihen, että ohjelmaan voi tulla
myös viime hetken peruutuksia. Tapahtuman konsepti mahdollistaa joka tapauksessa sen
järjestämisen ulkotiloissa, pienissä ryhmissä ja turvavälein: työpajat pidetään ulkona tai
ilmastoiduissa tiloissa ja lavaesityksiä voi seurata myös etälähetyksenä.
</p>
</section>
</template>