From 7d8217f17f6d2e97d714f55dbcb3d19ec6960a9e Mon Sep 17 00:00:00 2001
From: Sebastian Rosauer <sebastian-rosauer@outlook.de>
Date: Sun, 13 Sep 2020 12:12:53 +0200
Subject: [PATCH 1/7] minor UI changes and Fixes

---
 public/we_tasks/task05/5_1.html               |  2 +-
 .../DocViewer.vue                             | 81 -------------------
 src/views/Home.vue                            | 14 ++--
 3 files changed, 8 insertions(+), 89 deletions(-)
 delete mode 100644 src/components/editor_components_14_unsecure/DocViewer.vue

diff --git a/public/we_tasks/task05/5_1.html b/public/we_tasks/task05/5_1.html
index 2927176..7e17b28 100644
--- a/public/we_tasks/task05/5_1.html
+++ b/public/we_tasks/task05/5_1.html
@@ -6,7 +6,7 @@
         <h1>Einkaufsliste!</h1>
         <label>Artikelname: </label>
         <input id="input" type="text"></input>
-        <button id="add">Hinzufügen!</button>
+        <button id="add">Hinzuf&uml;gen!</button>
         <ul id="shoppingList"></ul>
     </body>
 
diff --git a/src/components/editor_components_14_unsecure/DocViewer.vue b/src/components/editor_components_14_unsecure/DocViewer.vue
deleted file mode 100644
index c449008..0000000
--- a/src/components/editor_components_14_unsecure/DocViewer.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-<template>
-  <div>
-    <v-card v-if="file" width="800">
-      <v-card-title>{{ file.title }}</v-card-title>
-      <v-card-subtitle>
-        Besitzer: {{ file.author }}
-        <v-btn icon small @click="$emit('profile-click')"
-          ><v-icon>mdi-account-circle</v-icon></v-btn
-        >
-      </v-card-subtitle>
-      <v-card-text class="contentBox">{{ file.content }}</v-card-text>
-      <v-card-actions v-if="editable">
-        <v-spacer></v-spacer>
-        <v-btn outlined color="primary" @click="$emit('doc-change')"
-          >Ändern</v-btn
-        >
-        <v-btn outlined color="red" @click="deleteConfirmDialogOpened = true"
-          >Löschen</v-btn
-        >
-      </v-card-actions>
-
-      <v-dialog width="400" v-model="deleteConfirmDialogOpened" persistent>
-        <v-card>
-          <v-card-title>Löschen Bestätigen</v-card-title>
-          <v-card-text
-            >Sind sie sicher, dass sie das Dokument
-            <b>{{ file.title }}</b> unwiederruflich löschen
-            möchten?</v-card-text
-          >
-          <v-card-actions>
-            <v-spacer></v-spacer>
-            <v-btn
-              outlined
-              color="primary"
-              @click="deleteConfirmDialogOpened = false"
-              >Abbrechen</v-btn
-            >
-            <v-btn outlined color="red" @click="deleteHandler()">Löschen</v-btn>
-          </v-card-actions>
-        </v-card>
-      </v-dialog>
-    </v-card>
-  </div>
-</template>
-
-<script>
-/* eslint-disable no-debugger, no-console */
-import client from "../../services/Client";
-
-export default {
-  name: "DocViewer",
-  props: {
-    file: Object,
-    editable: Boolean
-  },
-  data: () => ({
-    deleteConfirmDialogOpened: false
-  }),
-  methods: {
-    getFile(fileId) {
-      let payload = new FormData();
-      payload.append("fileId", fileId);
-      return client.post(client.URLs.file, payload).then(result => {
-        if (result.success) {
-          return result.file;
-        }
-      });
-    },
-    deleteHandler() {
-      this.$emit("doc-delete");
-      this.deleteConfirmDialogOpened = false;
-    }
-  }
-};
-</script>
-
-<style scoped>
-.contentBox {
-  white-space: pre;
-}
-</style>
diff --git a/src/views/Home.vue b/src/views/Home.vue
index 39cd6ee..efa6e01 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -107,15 +107,14 @@
               Aufgabe 10.1: Counter in Vue.js<br />
               <sr_vuecounter></sr_vuecounter>
               <br />
-              <router-link to="/vuenavigator">Vuenavigator</router-link>
+              <router-link to="/vuenavigator">Aufgabe 10.2/3: Vuenavigator</router-link>
             </v-expansion-panel-content>
           </v-expansion-panel>
           <v-expansion-panel>
             <v-expansion-panel-header>Ãœbung 12 - PHP</v-expansion-panel-header>
             <v-expansion-panel-content
-              >Aufgabe 12.1/2/3: Content-Editor mit Registrierung und Login
-              <br />
-              <router-link to="/contenteditor">Content-Editor</router-link>
+              >
+              <router-link to="/contenteditor">Aufgabe 12.1/2/3: Content-Editor mit Registrierung und Login</router-link>
             </v-expansion-panel-content>
           </v-expansion-panel>
           <v-expansion-panel>
@@ -123,9 +122,10 @@
               >Ãœbung 13 - React</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              Aufgabe 13.1: React Tutorial
-              <br />
-              <a href="we_tasks/task13/index.html">React Login</a>
+              <a href="we_tasks/task13/index.html">Aufgabe 13.1: React Login</a>
+              <p/>
+              <b>Keine Zugangsdaten bekannt?</b> Diese React-Anwendung verwendet dasselbe Backend, wie der Content-Editor aus Ãœbung 12.
+              Registrieren sie einfach dort einen Account, um sich hier damit anzumelden.              
             </v-expansion-panel-content>
           </v-expansion-panel>
           <v-expansion-panel>
-- 
GitLab


From 508ccd9d9d612b190cc347f7264cbac19173392e Mon Sep 17 00:00:00 2001
From: Sebastian Rosauer <sebastian-rosauer@outlook.de>
Date: Sun, 13 Sep 2020 12:30:47 +0200
Subject: [PATCH 2/7] Content Editor: Removed pofile Icon from task12 Version,
 as it has no use

---
 .../editor_components/DocViewer.vue           |  3 -
 .../editor_components/DocViewer_profile.vue   | 81 +++++++++++++++++++
 src/views/Editor_14_secure.vue                |  2 +-
 src/views/Editor_14_unsecure.vue              |  5 +-
 4 files changed, 84 insertions(+), 7 deletions(-)
 create mode 100644 src/components/editor_components/DocViewer_profile.vue

diff --git a/src/components/editor_components/DocViewer.vue b/src/components/editor_components/DocViewer.vue
index c449008..936c982 100644
--- a/src/components/editor_components/DocViewer.vue
+++ b/src/components/editor_components/DocViewer.vue
@@ -4,9 +4,6 @@
       <v-card-title>{{ file.title }}</v-card-title>
       <v-card-subtitle>
         Besitzer: {{ file.author }}
-        <v-btn icon small @click="$emit('profile-click')"
-          ><v-icon>mdi-account-circle</v-icon></v-btn
-        >
       </v-card-subtitle>
       <v-card-text class="contentBox">{{ file.content }}</v-card-text>
       <v-card-actions v-if="editable">
diff --git a/src/components/editor_components/DocViewer_profile.vue b/src/components/editor_components/DocViewer_profile.vue
new file mode 100644
index 0000000..c449008
--- /dev/null
+++ b/src/components/editor_components/DocViewer_profile.vue
@@ -0,0 +1,81 @@
+<template>
+  <div>
+    <v-card v-if="file" width="800">
+      <v-card-title>{{ file.title }}</v-card-title>
+      <v-card-subtitle>
+        Besitzer: {{ file.author }}
+        <v-btn icon small @click="$emit('profile-click')"
+          ><v-icon>mdi-account-circle</v-icon></v-btn
+        >
+      </v-card-subtitle>
+      <v-card-text class="contentBox">{{ file.content }}</v-card-text>
+      <v-card-actions v-if="editable">
+        <v-spacer></v-spacer>
+        <v-btn outlined color="primary" @click="$emit('doc-change')"
+          >Ändern</v-btn
+        >
+        <v-btn outlined color="red" @click="deleteConfirmDialogOpened = true"
+          >Löschen</v-btn
+        >
+      </v-card-actions>
+
+      <v-dialog width="400" v-model="deleteConfirmDialogOpened" persistent>
+        <v-card>
+          <v-card-title>Löschen Bestätigen</v-card-title>
+          <v-card-text
+            >Sind sie sicher, dass sie das Dokument
+            <b>{{ file.title }}</b> unwiederruflich löschen
+            möchten?</v-card-text
+          >
+          <v-card-actions>
+            <v-spacer></v-spacer>
+            <v-btn
+              outlined
+              color="primary"
+              @click="deleteConfirmDialogOpened = false"
+              >Abbrechen</v-btn
+            >
+            <v-btn outlined color="red" @click="deleteHandler()">Löschen</v-btn>
+          </v-card-actions>
+        </v-card>
+      </v-dialog>
+    </v-card>
+  </div>
+</template>
+
+<script>
+/* eslint-disable no-debugger, no-console */
+import client from "../../services/Client";
+
+export default {
+  name: "DocViewer",
+  props: {
+    file: Object,
+    editable: Boolean
+  },
+  data: () => ({
+    deleteConfirmDialogOpened: false
+  }),
+  methods: {
+    getFile(fileId) {
+      let payload = new FormData();
+      payload.append("fileId", fileId);
+      return client.post(client.URLs.file, payload).then(result => {
+        if (result.success) {
+          return result.file;
+        }
+      });
+    },
+    deleteHandler() {
+      this.$emit("doc-delete");
+      this.deleteConfirmDialogOpened = false;
+    }
+  }
+};
+</script>
+
+<style scoped>
+.contentBox {
+  white-space: pre;
+}
+</style>
diff --git a/src/views/Editor_14_secure.vue b/src/views/Editor_14_secure.vue
index a6808c9..e0328b7 100644
--- a/src/views/Editor_14_secure.vue
+++ b/src/views/Editor_14_secure.vue
@@ -100,7 +100,7 @@ import Register from "../components/editor_components/Register";
 import Login from "../components/editor_components/Login";
 import TreeViewExplorer from "../components/editor_components/TreeViewExplorer";
 import DocEditor from "../components/editor_components/DocEditor";
-import DocViewer from "../components/editor_components/DocViewer";
+import DocViewer from "../components/editor_components/DocViewer_profile";
 import ProfileViwer from "../components/editor_components/ProfileViewer_secure";
 
 export default {
diff --git a/src/views/Editor_14_unsecure.vue b/src/views/Editor_14_unsecure.vue
index a065561..3749186 100644
--- a/src/views/Editor_14_unsecure.vue
+++ b/src/views/Editor_14_unsecure.vue
@@ -82,8 +82,7 @@
               file.title,
               file.directory,
               file.content
-            )
-          "
+            )"
         ></DocViewer>
       </v-layout>
     </v-main>
@@ -100,7 +99,7 @@ import Register from "../components/editor_components/Register";
 import Login from "../components/editor_components/Login";
 import TreeViewExplorer from "../components/editor_components/TreeViewExplorer";
 import DocEditor from "../components/editor_components/DocEditor";
-import DocViewer from "../components/editor_components/DocViewer";
+import DocViewer from "../components/editor_components/DocViewer_profile";
 import ProfileViwer from "../components/editor_components/ProfileViewer_unsecure";
 
 export default {
-- 
GitLab


From 26928b31f7c508ea187eb4df751755b302be285b Mon Sep 17 00:00:00 2001
From: Sebastian Rosauer <sebastian-rosauer@outlook.de>
Date: Tue, 15 Sep 2020 12:17:14 +0200
Subject: [PATCH 3/7] Fixed deployment issues and some small ui changes

---
 public/we_tasks/task05/5_1.html               |  4 +-
 .../task12/navigator_services/config.php      |  2 +-
 public/we_tasks/task13/asset-manifest.json    | 28 ++++-----
 public/we_tasks/task13/index.html             |  2 +-
 ...nifest.254f8cdd869077f1c070a2d77cd9e93d.js | 26 +++++++++
 ...nifest.5d45fa9982b9463de0ad268c9a0aa0f5.js | 26 ---------
 public/we_tasks/task13/service-worker.js      |  4 +-
 .../task13/static/js/main.0d0a7c61.chunk.js   |  2 -
 .../static/js/main.0d0a7c61.chunk.js.map      |  1 -
 .../task13/static/js/main.498bcac4.chunk.js   |  2 +
 .../static/js/main.498bcac4.chunk.js.map      |  1 +
 .../task13/static/js/runtime-main.901bcd76.js |  2 +
 ...19.js.map => runtime-main.901bcd76.js.map} |  2 +-
 .../task13/static/js/runtime-main.fa9ca119.js |  2 -
 .../editor_components/DocViewer.vue           |  4 +-
 src/router/index.js                           |  3 +-
 src/views/Editor.vue                          |  5 +-
 src/views/Editor_14_unsecure.vue              |  3 +-
 src/views/Home.vue                            | 58 ++++++++++---------
 src/views/Vuenavigator.vue                    |  2 +-
 vue.config.js                                 |  4 +-
 21 files changed, 95 insertions(+), 88 deletions(-)
 create mode 100644 public/we_tasks/task13/precache-manifest.254f8cdd869077f1c070a2d77cd9e93d.js
 delete mode 100644 public/we_tasks/task13/precache-manifest.5d45fa9982b9463de0ad268c9a0aa0f5.js
 delete mode 100644 public/we_tasks/task13/static/js/main.0d0a7c61.chunk.js
 delete mode 100644 public/we_tasks/task13/static/js/main.0d0a7c61.chunk.js.map
 create mode 100644 public/we_tasks/task13/static/js/main.498bcac4.chunk.js
 create mode 100644 public/we_tasks/task13/static/js/main.498bcac4.chunk.js.map
 create mode 100644 public/we_tasks/task13/static/js/runtime-main.901bcd76.js
 rename public/we_tasks/task13/static/js/{runtime-main.fa9ca119.js.map => runtime-main.901bcd76.js.map} (91%)
 delete mode 100644 public/we_tasks/task13/static/js/runtime-main.fa9ca119.js

diff --git a/public/we_tasks/task05/5_1.html b/public/we_tasks/task05/5_1.html
index 7e17b28..ad3571a 100644
--- a/public/we_tasks/task05/5_1.html
+++ b/public/we_tasks/task05/5_1.html
@@ -6,7 +6,7 @@
         <h1>Einkaufsliste!</h1>
         <label>Artikelname: </label>
         <input id="input" type="text"></input>
-        <button id="add">Hinzuf&uml;gen!</button>
+        <button id="add">Hinzuf&uuml;gen!</button>
         <ul id="shoppingList"></ul>
     </body>
 
@@ -17,7 +17,7 @@
 
         add.onclick = function(){
             const listItem = document.createElement('li');
-            listItem.innerHTML = `${input.value} <button>Löschen!</button>`;
+            listItem.innerHTML = `${input.value} <button>L&ouml;schen!</button>`;
             const deleteButton = listItem.querySelector('button');
             deleteButton.onclick = function (){
                 shoppingList.removeChild(listItem);
diff --git a/public/we_tasks/task12/navigator_services/config.php b/public/we_tasks/task12/navigator_services/config.php
index 918ba82..2994c39 100644
--- a/public/we_tasks/task12/navigator_services/config.php
+++ b/public/we_tasks/task12/navigator_services/config.php
@@ -1,4 +1,4 @@
 <?php
     header('Access-Control-Allow-Origin: *');
 
-    $assetsDir = '/home/sebastian/privateServerDocs/Assets';
\ No newline at end of file
+    $assetsDir = '/home/srosau2s/privateServerDocs/Assets';
\ No newline at end of file
diff --git a/public/we_tasks/task13/asset-manifest.json b/public/we_tasks/task13/asset-manifest.json
index f78d48a..d486b9a 100644
--- a/public/we_tasks/task13/asset-manifest.json
+++ b/public/we_tasks/task13/asset-manifest.json
@@ -1,22 +1,22 @@
 {
   "files": {
-    "main.css": "/we_tasks/task13/static/css/main.45ab13bf.chunk.css",
-    "main.js": "/we_tasks/task13/static/js/main.0d0a7c61.chunk.js",
-    "main.js.map": "/we_tasks/task13/static/js/main.0d0a7c61.chunk.js.map",
-    "runtime-main.js": "/we_tasks/task13/static/js/runtime-main.fa9ca119.js",
-    "runtime-main.js.map": "/we_tasks/task13/static/js/runtime-main.fa9ca119.js.map",
-    "static/js/2.86fe90b7.chunk.js": "/we_tasks/task13/static/js/2.86fe90b7.chunk.js",
-    "static/js/2.86fe90b7.chunk.js.map": "/we_tasks/task13/static/js/2.86fe90b7.chunk.js.map",
-    "index.html": "/we_tasks/task13/index.html",
-    "precache-manifest.5d45fa9982b9463de0ad268c9a0aa0f5.js": "/we_tasks/task13/precache-manifest.5d45fa9982b9463de0ad268c9a0aa0f5.js",
-    "service-worker.js": "/we_tasks/task13/service-worker.js",
-    "static/css/main.45ab13bf.chunk.css.map": "/we_tasks/task13/static/css/main.45ab13bf.chunk.css.map",
-    "static/js/2.86fe90b7.chunk.js.LICENSE.txt": "/we_tasks/task13/static/js/2.86fe90b7.chunk.js.LICENSE.txt"
+    "main.css": "/~srosau2s/we_tasks/task13/static/css/main.45ab13bf.chunk.css",
+    "main.js": "/~srosau2s/we_tasks/task13/static/js/main.498bcac4.chunk.js",
+    "main.js.map": "/~srosau2s/we_tasks/task13/static/js/main.498bcac4.chunk.js.map",
+    "runtime-main.js": "/~srosau2s/we_tasks/task13/static/js/runtime-main.901bcd76.js",
+    "runtime-main.js.map": "/~srosau2s/we_tasks/task13/static/js/runtime-main.901bcd76.js.map",
+    "static/js/2.86fe90b7.chunk.js": "/~srosau2s/we_tasks/task13/static/js/2.86fe90b7.chunk.js",
+    "static/js/2.86fe90b7.chunk.js.map": "/~srosau2s/we_tasks/task13/static/js/2.86fe90b7.chunk.js.map",
+    "index.html": "/~srosau2s/we_tasks/task13/index.html",
+    "precache-manifest.254f8cdd869077f1c070a2d77cd9e93d.js": "/~srosau2s/we_tasks/task13/precache-manifest.254f8cdd869077f1c070a2d77cd9e93d.js",
+    "service-worker.js": "/~srosau2s/we_tasks/task13/service-worker.js",
+    "static/css/main.45ab13bf.chunk.css.map": "/~srosau2s/we_tasks/task13/static/css/main.45ab13bf.chunk.css.map",
+    "static/js/2.86fe90b7.chunk.js.LICENSE.txt": "/~srosau2s/we_tasks/task13/static/js/2.86fe90b7.chunk.js.LICENSE.txt"
   },
   "entrypoints": [
-    "static/js/runtime-main.fa9ca119.js",
+    "static/js/runtime-main.901bcd76.js",
     "static/js/2.86fe90b7.chunk.js",
     "static/css/main.45ab13bf.chunk.css",
-    "static/js/main.0d0a7c61.chunk.js"
+    "static/js/main.498bcac4.chunk.js"
   ]
 }
\ No newline at end of file
diff --git a/public/we_tasks/task13/index.html b/public/we_tasks/task13/index.html
index bf45210..34a8c76 100644
--- a/public/we_tasks/task13/index.html
+++ b/public/we_tasks/task13/index.html
@@ -1 +1 @@
-<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/we_tasks/task13/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/we_tasks/task13/logo192.png"/><link rel="manifest" href="/we_tasks/task13/manifest.json"/><title>React App</title><link href="/we_tasks/task13/static/css/main.45ab13bf.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,l,a=r[0],f=r[1],i=r[2],c=0,s=[];c<a.length;c++)l=a[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,i||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var f=t[a];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/we_tasks/task13/";var a=this.webpackJsonpheros=this.webpackJsonpheros||[],f=a.push.bind(a);a.push=r,a=a.slice();for(var i=0;i<a.length;i++)r(a[i]);var p=f;t()}([])</script><script src="/we_tasks/task13/static/js/2.86fe90b7.chunk.js"></script><script src="/we_tasks/task13/static/js/main.0d0a7c61.chunk.js"></script></body></html>
\ No newline at end of file
+<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/~srosau2s/we_tasks/task13/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/~srosau2s/we_tasks/task13/logo192.png"/><link rel="manifest" href="/~srosau2s/we_tasks/task13/manifest.json"/><title>React App</title><link href="/~srosau2s/we_tasks/task13/static/css/main.45ab13bf.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,a,l=r[0],f=r[1],i=r[2],s=0,c=[];s<l.length;s++)a=l[s],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&c.push(o[a][0]),o[a]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(p&&p(r);c.length;)c.shift()();return u.push.apply(u,i||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var f=t[l];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="/~srosau2s/we_tasks/task13/";var l=this.webpackJsonpheros=this.webpackJsonpheros||[],f=l.push.bind(l);l.push=r,l=l.slice();for(var i=0;i<l.length;i++)r(l[i]);var p=f;t()}([])</script><script src="/~srosau2s/we_tasks/task13/static/js/2.86fe90b7.chunk.js"></script><script src="/~srosau2s/we_tasks/task13/static/js/main.498bcac4.chunk.js"></script></body></html>
\ No newline at end of file
diff --git a/public/we_tasks/task13/precache-manifest.254f8cdd869077f1c070a2d77cd9e93d.js b/public/we_tasks/task13/precache-manifest.254f8cdd869077f1c070a2d77cd9e93d.js
new file mode 100644
index 0000000..4da2c65
--- /dev/null
+++ b/public/we_tasks/task13/precache-manifest.254f8cdd869077f1c070a2d77cd9e93d.js
@@ -0,0 +1,26 @@
+self.__precacheManifest = (self.__precacheManifest || []).concat([
+  {
+    "revision": "ab8847c38e2e4ad5a602905f2b51a6fa",
+    "url": "/~srosau2s/we_tasks/task13/index.html"
+  },
+  {
+    "revision": "cf6d55de6ab0fdfcba00",
+    "url": "/~srosau2s/we_tasks/task13/static/css/main.45ab13bf.chunk.css"
+  },
+  {
+    "revision": "3e558ce6058d91fe0067",
+    "url": "/~srosau2s/we_tasks/task13/static/js/2.86fe90b7.chunk.js"
+  },
+  {
+    "revision": "e88a3e95b5364d46e95b35ae8c0dc27d",
+    "url": "/~srosau2s/we_tasks/task13/static/js/2.86fe90b7.chunk.js.LICENSE.txt"
+  },
+  {
+    "revision": "cf6d55de6ab0fdfcba00",
+    "url": "/~srosau2s/we_tasks/task13/static/js/main.498bcac4.chunk.js"
+  },
+  {
+    "revision": "21c1042444d3fb4e1c76",
+    "url": "/~srosau2s/we_tasks/task13/static/js/runtime-main.901bcd76.js"
+  }
+]);
\ No newline at end of file
diff --git a/public/we_tasks/task13/precache-manifest.5d45fa9982b9463de0ad268c9a0aa0f5.js b/public/we_tasks/task13/precache-manifest.5d45fa9982b9463de0ad268c9a0aa0f5.js
deleted file mode 100644
index 62df9a9..0000000
--- a/public/we_tasks/task13/precache-manifest.5d45fa9982b9463de0ad268c9a0aa0f5.js
+++ /dev/null
@@ -1,26 +0,0 @@
-self.__precacheManifest = (self.__precacheManifest || []).concat([
-  {
-    "revision": "505fba567e14a03212b476367779e702",
-    "url": "/we_tasks/task13/index.html"
-  },
-  {
-    "revision": "3f95d400c0b9c574386f",
-    "url": "/we_tasks/task13/static/css/main.45ab13bf.chunk.css"
-  },
-  {
-    "revision": "3e558ce6058d91fe0067",
-    "url": "/we_tasks/task13/static/js/2.86fe90b7.chunk.js"
-  },
-  {
-    "revision": "e88a3e95b5364d46e95b35ae8c0dc27d",
-    "url": "/we_tasks/task13/static/js/2.86fe90b7.chunk.js.LICENSE.txt"
-  },
-  {
-    "revision": "3f95d400c0b9c574386f",
-    "url": "/we_tasks/task13/static/js/main.0d0a7c61.chunk.js"
-  },
-  {
-    "revision": "127921ea3726f5be891c",
-    "url": "/we_tasks/task13/static/js/runtime-main.fa9ca119.js"
-  }
-]);
\ No newline at end of file
diff --git a/public/we_tasks/task13/service-worker.js b/public/we_tasks/task13/service-worker.js
index 6299728..23731bd 100644
--- a/public/we_tasks/task13/service-worker.js
+++ b/public/we_tasks/task13/service-worker.js
@@ -14,7 +14,7 @@
 importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
 
 importScripts(
-  "/we_tasks/task13/precache-manifest.5d45fa9982b9463de0ad268c9a0aa0f5.js"
+  "/~srosau2s/we_tasks/task13/precache-manifest.254f8cdd869077f1c070a2d77cd9e93d.js"
 );
 
 self.addEventListener('message', (event) => {
@@ -33,7 +33,7 @@ workbox.core.clientsClaim();
 self.__precacheManifest = [].concat(self.__precacheManifest || []);
 workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
 
-workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("/we_tasks/task13/index.html"), {
+workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("/~srosau2s/we_tasks/task13/index.html"), {
   
   blacklist: [/^\/_/,/\/[^/?]+\.[^/]+$/],
 });
diff --git a/public/we_tasks/task13/static/js/main.0d0a7c61.chunk.js b/public/we_tasks/task13/static/js/main.0d0a7c61.chunk.js
deleted file mode 100644
index cac90b0..0000000
--- a/public/we_tasks/task13/static/js/main.0d0a7c61.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(this.webpackJsonpheros=this.webpackJsonpheros||[]).push([[0],{13:function(e,t,n){},14:function(e,t,n){"use strict";n.r(t);var a=n(1),r=n(2),i=n(3),s=n(5),l=n(4),o=n(0),u=n.n(o),c=n(7),m=n.n(c),d=(n(13),new(function(){function e(){Object(a.a)(this,e),this.URLs=null}return Object(r.a)(e,[{key:"setURLs",value:function(e){this.URLs||(this.URLs={filestructure:e+"/get-filestructure-service.php",file:e+"/get-file-service.php",register:e+"/register-service.php",login:e+"/login-service.php",logout:e+"/logout-service.php",contentUpdate:e+"/content-update-service.php"})}},{key:"get",value:function(e){return fetch(e,{method:"GET"}).then((function(e){return e.json()}))}},{key:"post",value:function(e,t){return fetch(e,{method:"POST",body:t}).then((function(e){return e.json()}))}}]),e}()));d.setURLs("http://localhost:80/we_tasks/task12/navigator_services");var h=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(a.a)(this,n),(r=t.call(this,e)).state={user:null,response:null},r.handleLogin=r.handleLogin.bind(Object(i.a)(r)),r.handleLogout=r.handleLogout.bind(Object(i.a)(r)),r}return Object(r.a)(n,[{key:"render",value:function(){return u.a.createElement("div",{id:"gridContainer"},u.a.createElement("div",{id:"header"},u.a.createElement("h1",null,"React Login"),u.a.createElement(p,{handleLogin:this.handleLogin,handleLogout:this.handleLogout,user:this.state.user})),u.a.createElement(g,{user:this.state.user}),u.a.createElement(f,{response:this.state.response}))}},{key:"handleLogin",value:function(e){console.log("Handle Login");var t=this.state;e.success&&(t.user=e.user),t.response=e,this.setState(t)}},{key:"handleLogout",value:function(e){console.log("Handle Logout");var t=this.state;e.success&&(t.user=null),t.response=e,this.setState(t)}}]),n}(u.a.Component),p=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(a.a)(this,n),(r=t.call(this,e)).state={name:"",pw:""},r}return Object(r.a)(n,[{key:"render",value:function(){var e=this;return this.props.user?u.a.createElement("div",{id:"mainMenu"},u.a.createElement("span",null,"Angemeldet als ",u.a.createElement("b",null,this.props.user.nickname)),u.a.createElement("button",{onClick:function(){return e.logout()},id:"logout"},"Logout")):u.a.createElement("div",{id:"mainMenu"},u.a.createElement("input",{id:"name",placeholder:"Name",type:"text",value:this.state.name,onChange:function(t){return e.handleNameChange(t)}}),u.a.createElement("input",{id:"password",placeholder:"Password",type:"text",value:this.state.pw,onChange:function(t){return e.handlePwChange(t)}}),u.a.createElement("button",{onClick:function(){return e.login()},id:"login"},"Login"))}},{key:"handleNameChange",value:function(e){var t=this.state;t.name=e.target.value,this.setState(t)}},{key:"handlePwChange",value:function(e){var t=this.state;t.pw=e.target.value,this.setState(t)}},{key:"login",value:function(){var e=this;console.log("login");var t=new FormData;t.append("accountname",this.state.name),t.append("password",this.state.pw),d.post(d.URLs.login,t).then((function(t){e.props.handleLogin(t)})),this.setState({name:"",pw:""})}},{key:"logout",value:function(){var e=this;if(this.props.user){var t=new FormData;t.append("sessionId",this.props.user.sessionId),d.post(d.URLs.logout,t).then((function(t){e.props.handleLogout(t)}))}}}]),n}(u.a.Component),g=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(){return Object(a.a)(this,n),t.apply(this,arguments)}return Object(r.a)(n,[{key:"render",value:function(){return this.props.user?u.a.createElement("div",{id:"content"},u.a.createElement("table",null,u.a.createElement("tbody",null,u.a.createElement("tr",null,u.a.createElement("td",null,u.a.createElement("h2",null,"Batman")),u.a.createElement("td",null,u.a.createElement("h2",null,"Iron Man")),u.a.createElement("td",null,u.a.createElement("h2",null,"Hulk"))),u.a.createElement("tr",null,u.a.createElement("td",null,u.a.createElement("img",{src:"../images/Batman.jpg",alt:"Batman_IMG"}),u.a.createElement("p",null),u.a.createElement("a",{href:"https://commons.wikimedia.org/wiki/File:9.17.16BatmanCosplayerByLuigiNovi1.jpg"},"\xa9 Luigi Novi / Wikimedia Commons")),u.a.createElement("td",null,u.a.createElement("img",{src:"../images/Ironman.jpg",alt:"Ironman_IMG"}),u.a.createElement("p",null),u.a.createElement("a",{href:"https://commons.wikimedia.org/wiki/File:Iron_Man_Comic_Con_1.jpg"},"\xa9 greyloch / Wikimedia Commons")),u.a.createElement("td",null,u.a.createElement("img",{src:"../images/Hulk.jpg",alt:"Hulk_img"}),u.a.createElement("p",null),u.a.createElement("a",{href:"https://commons.wikimedia.org/wiki/File:Madrid_-_Casa_del_Libro_de_la_Gran_V%C3%ADa_4.jpg"},"\xa9 Zarateman / Wikimedia Commons"))),u.a.createElement("tr",null,u.a.createElement("td",null,"Batman (englisch f\xfcr Fledermausmann) ist eine von Bob Kane erdachte und durch Bill Finger weiterentwickelte Comicfigur, deren zivile Identit\xe4t die des Milliard\xe4rs Bruce Wayne ist und der einen schwarzen, einer Fledermaus \xe4hnelnden Anzug tr\xe4gt. Batman erschien erstmals im Mai 1939 in dem US-amerikanischen Comicmagazin Detective Comics (Ausgabe 27). Der herausgebende Verlag nannte sich sp\xe4ter nach der Abk\xfcrzung dieser Serie in DC Comics um; Batman gilt als seine beliebteste Comicfigur.",u.a.createElement("p",null),u.a.createElement("a",{href:"https://de.wikipedia.org/wiki/Batman"},"Wikipedia")),u.a.createElement("td",null,"Iron Man (deutsch: \u201eEisenmann\u201c, in den ersten deutschen Ver\xf6ffentlichungen \u201eDer Eiserne\u201c) ist eine Comicfigur der Marvel Comics. Erschaffen wurde sie von Stan Lee und Larry Lieber sowie den Zeichnern Don Heck und Jack Kirby. Ihr erster Auftritt war in dem Comic Tales of Suspense #39 im M\xe4rz 1963. 1968 erhielt sie eine eigene Reihe mit dem Titel Iron Man, die bis 1996 fortgesetzt wurde. Iron Mans R\xfcstung ist rot-golden und mit modernster Technik ausgestattet, wie zum Beispiel Laserstrahlen.",u.a.createElement("p",null),u.a.createElement("a",{href:"https://de.wikipedia.org/wiki/Iron_Man"},"Wikipedia")),u.a.createElement("td",null,"Hulk [h\u028clk] (engl. Koloss, Klotz) ist die Titelfigur aus den gleichnamigen Marvel-Comics. Die erste Ausgabe wurde im Mai 1962 von Stan Lee und Jack Kirby ver\xf6ffentlicht. Im Comic wird die Geschichte des Nuklearphysikers Dr. Bruce Banner erz\xe4hlt, der nach einem Unfall mit dem Prototyp einer Gamma-Bombe gro\xdfen Mengen an Gammastrahlung ausgesetzt wurde und sich fortan bei jedem Anflug von Wut in das rasende Monster Hulk verwandelt. Der h\xfcnenhafte Kraftprotz ger\xe4t wegen seiner durchschlagenden St\xe4rke im jeweiligen Storyverlauf h\xe4ufig in Auseinandersetzungen mit bewaffneten Streitkr\xe4ften, die Hulk stoppen und ihn auch als \u201eWaffe\u201c f\xfcr sich nutzen wollen. Hulks gr\xfcne Hautfarbe erkl\xe4rt sich durch die unz\xe4hligen Chloroplasten in seiner Haut, mit denen er die n\xf6tigen Stoffwechselprodukte f\xfcr seinen Energiebedarf herstellen kann.",u.a.createElement("p",null),u.a.createElement("a",{href:"https://de.wikipedia.org/wiki/Hulk_(Comic)"},"Wikipedia")))))):u.a.createElement("div",{id:"content"},u.a.createElement("span",null,"Zugriff Verweigert! Authentifizierung erforderlich!"))}}]),n}(u.a.Component),f=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(a.a)(this,n),(r=t.call(this,e)).state={opened:!1},r}return Object(r.a)(n,[{key:"componentDidUpdate",value:function(e){var t=this;if(e.response!==this.props.response){var n=this.state;n.opened=!0,console.log("open true"),this.setState(n),setTimeout((function(){var e=t.state;e.opened=!1,console.log("open false"),t.setState(e)}),5e3)}}},{key:"render",value:function(){if(!this.props.response)return"";var e=(this.state.opened?"opened ":"")+(this.props.response?this.props.response.success?"success ":"error ":"");return u.a.createElement("div",{id:"snackbarContainer"},u.a.createElement("div",{id:"snackbar",className:e},u.a.createElement("span",null,this.props.response?this.props.response.message:"")))}}]),n}(u.a.Component);m.a.render(u.a.createElement(h,null),document.getElementById("root"))},8:function(e,t,n){e.exports=n(14)}},[[8,1,2]]]);
-//# sourceMappingURL=main.0d0a7c61.chunk.js.map
\ No newline at end of file
diff --git a/public/we_tasks/task13/static/js/main.0d0a7c61.chunk.js.map b/public/we_tasks/task13/static/js/main.0d0a7c61.chunk.js.map
deleted file mode 100644
index a4cc414..0000000
--- a/public/we_tasks/task13/static/js/main.0d0a7c61.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["Client.js","index.js"],"names":["client","this","URLs","baseURL","filestructure","file","register","login","logout","contentUpdate","url","fetch","method","then","result","json","payload","body","setURLs","App","props","state","user","response","handleLogin","bind","handleLogout","id","console","log","success","setState","React","Component","Login","name","pw","nickname","onClick","placeholder","type","value","onChange","event","handleNameChange","handlePwChange","target","FormData","append","post","sessionId","ContentViewer","src","alt","href","Snackbar","opened","prevProps","setTimeout","snackbarClasses","className","message","ReactDOM","render","document","getElementById"],"mappings":"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","file":"static/js/main.0d0a7c61.chunk.js","sourcesContent":["/* eslint-disable no-debugger, no-console */\nclass Client {\n  constructor() {\n    this.URLs = null;\n  }\n\n  setURLs(baseURL) {\n    if (!this.URLs) {\n      this.URLs = {\n        filestructure: baseURL + \"/get-filestructure-service.php\",\n        file: baseURL + \"/get-file-service.php\",\n        register: baseURL + \"/register-service.php\",\n        login: baseURL + \"/login-service.php\",\n        logout: baseURL + \"/logout-service.php\",\n        contentUpdate: baseURL + \"/content-update-service.php\",\n      };\n    }\n  }\n\n  get(url) {\n    return fetch(url, {\n      method: \"GET\",\n    }).then((result) => result.json());\n  }\n  post(url, payload) {\n    return fetch(url, {\n      method: \"POST\",\n      body: payload,\n    }).then((result) => result.json());\n  }\n}\n\nconst client = new Client();\n\nexport default client;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport client from \"./Client\";\n\nclient.setURLs(\"http://localhost:80/we_tasks/task12/navigator_services\");\n\nclass App extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      user: null,\n      response: null,\n    };\n    this.handleLogin = this.handleLogin.bind(this);\n    this.handleLogout = this.handleLogout.bind(this);\n  }\n\n  render() {\n    return (\n      <div id=\"gridContainer\">\n        <div id=\"header\">\n          <h1>React Login</h1>\n          <Login\n            handleLogin={this.handleLogin}\n            handleLogout={this.handleLogout}\n            user={this.state.user}\n          ></Login>\n        </div>\n        <ContentViewer user={this.state.user}></ContentViewer>\n        <Snackbar response={this.state.response}></Snackbar>\n      </div>\n    );\n  }\n\n  handleLogin(result) {\n    console.log(\"Handle Login\");\n    const state = this.state;\n    if (result.success) {\n      state.user = result.user;\n    }\n    state.response = result;\n    this.setState(state);\n  }\n  handleLogout(result) {\n    console.log(\"Handle Logout\");\n    const state = this.state;\n    if (result.success) {\n      state.user = null;\n    }\n    state.response = result;\n    this.setState(state);\n  }\n}\n\nclass Login extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      name: \"\",\n      pw: \"\",\n    };\n  }\n\n  render() {\n    if (this.props.user) {\n      return (\n        <div id=\"mainMenu\">\n          <span>\n            Angemeldet als <b>{this.props.user.nickname}</b>\n          </span>\n          <button onClick={() => this.logout()} id=\"logout\">\n            Logout\n          </button>\n        </div>\n      );\n    } else {\n      return (\n        <div id=\"mainMenu\">\n          <input\n            id=\"name\"\n            placeholder=\"Name\"\n            type=\"text\"\n            value={this.state.name}\n            onChange={(event) => this.handleNameChange(event)}\n          ></input>\n          <input\n            id=\"password\"\n            placeholder=\"Password\"\n            type=\"text\"\n            value={this.state.pw}\n            onChange={(event) => this.handlePwChange(event)}\n          ></input>\n          <button onClick={() => this.login()} id=\"login\">\n            Login\n          </button>\n        </div>\n      );\n    }\n  }\n\n  handleNameChange(event) {\n    const state = this.state;\n    state.name = event.target.value;\n    this.setState(state);\n  }\n  handlePwChange(event) {\n    const state = this.state;\n    state.pw = event.target.value;\n    this.setState(state);\n  }\n  login() {\n    console.log(\"login\");\n\n    let payload = new FormData();\n    payload.append(\"accountname\", this.state.name);\n    payload.append(\"password\", this.state.pw);\n    client.post(client.URLs.login, payload).then((result) => {\n      this.props.handleLogin(result);\n    });\n\n    this.setState({\n      name: \"\",\n      pw: \"\",\n    });\n  }\n  logout() {\n    if (this.props.user) {\n      let payload = new FormData();\n      payload.append(\"sessionId\", this.props.user.sessionId);\n      client.post(client.URLs.logout, payload).then((result) => {\n        this.props.handleLogout(result);\n      });\n    }\n  }\n}\n\nclass ContentViewer extends React.Component {\n  render() {\n    if (this.props.user) {\n      return (\n        <div id=\"content\">\n          <table>\n            <tbody>\n              <tr>\n                <td>\n                  <h2>Batman</h2>\n                </td>\n                <td>\n                  <h2>Iron Man</h2>\n                </td>\n                <td>\n                  <h2>Hulk</h2>\n                </td>\n              </tr>\n              <tr>\n                <td>\n                  <img src=\"../images/Batman.jpg\" alt=\"Batman_IMG\"></img>\n                  <p></p>\n                  <a href=\"https://commons.wikimedia.org/wiki/File:9.17.16BatmanCosplayerByLuigiNovi1.jpg\">\n                    © Luigi Novi / Wikimedia Commons\n                  </a>\n                </td>\n                <td>\n                  <img src=\"../images/Ironman.jpg\" alt=\"Ironman_IMG\"></img>\n                  <p></p>\n                  <a href=\"https://commons.wikimedia.org/wiki/File:Iron_Man_Comic_Con_1.jpg\">\n                    © greyloch / Wikimedia Commons\n                  </a>\n                </td>\n                <td>\n                  <img src=\"../images/Hulk.jpg\" alt=\"Hulk_img\"></img>\n                  <p></p>\n                  <a href=\"https://commons.wikimedia.org/wiki/File:Madrid_-_Casa_del_Libro_de_la_Gran_V%C3%ADa_4.jpg\">\n                    © Zarateman / Wikimedia Commons\n                  </a>\n                </td>\n              </tr>\n              <tr>\n                <td>\n                  Batman (englisch für Fledermausmann) ist eine von Bob Kane\n                  erdachte und durch Bill Finger weiterentwickelte Comicfigur,\n                  deren zivile Identität die des Milliardärs Bruce Wayne ist und\n                  der einen schwarzen, einer Fledermaus ähnelnden Anzug trägt.\n                  Batman erschien erstmals im Mai 1939 in dem US-amerikanischen\n                  Comicmagazin Detective Comics (Ausgabe 27). Der herausgebende\n                  Verlag nannte sich später nach der Abkürzung dieser Serie in\n                  DC Comics um; Batman gilt als seine beliebteste Comicfigur.\n                  <p></p>\n                  <a href=\"https://de.wikipedia.org/wiki/Batman\">Wikipedia</a>\n                </td>\n                <td>\n                  Iron Man (deutsch: „Eisenmann“, in den ersten deutschen\n                  Veröffentlichungen „Der Eiserne“) ist eine Comicfigur der\n                  Marvel Comics. Erschaffen wurde sie von Stan Lee und Larry\n                  Lieber sowie den Zeichnern Don Heck und Jack Kirby. Ihr erster\n                  Auftritt war in dem Comic Tales of Suspense #39 im März 1963.\n                  1968 erhielt sie eine eigene Reihe mit dem Titel Iron Man, die\n                  bis 1996 fortgesetzt wurde. Iron Mans Rüstung ist rot-golden\n                  und mit modernster Technik ausgestattet, wie zum Beispiel\n                  Laserstrahlen.\n                  <p></p>\n                  <a href=\"https://de.wikipedia.org/wiki/Iron_Man\">Wikipedia</a>\n                </td>\n                <td>\n                  Hulk [hʌlk] (engl. Koloss, Klotz) ist die Titelfigur aus den\n                  gleichnamigen Marvel-Comics. Die erste Ausgabe wurde im Mai\n                  1962 von Stan Lee und Jack Kirby veröffentlicht. Im Comic wird\n                  die Geschichte des Nuklearphysikers Dr. Bruce Banner erzählt,\n                  der nach einem Unfall mit dem Prototyp einer Gamma-Bombe\n                  großen Mengen an Gammastrahlung ausgesetzt wurde und sich\n                  fortan bei jedem Anflug von Wut in das rasende Monster Hulk\n                  verwandelt. Der hünenhafte Kraftprotz gerät wegen seiner\n                  durchschlagenden Stärke im jeweiligen Storyverlauf häufig in\n                  Auseinandersetzungen mit bewaffneten Streitkräften, die Hulk\n                  stoppen und ihn auch als „Waffe“ für sich nutzen wollen. Hulks\n                  grüne Hautfarbe erklärt sich durch die unzähligen\n                  Chloroplasten in seiner Haut, mit denen er die nötigen\n                  Stoffwechselprodukte für seinen Energiebedarf herstellen kann.\n                  <p></p>\n                  <a href=\"https://de.wikipedia.org/wiki/Hulk_(Comic)\">\n                    Wikipedia\n                  </a>\n                </td>\n              </tr>\n            </tbody>\n          </table>\n        </div>\n      );\n    } else {\n      return (\n        <div id=\"content\">\n          <span>Zugriff Verweigert! Authentifizierung erforderlich!</span>\n        </div>\n      );\n    }\n  }\n}\n\nclass Snackbar extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      opened: false,\n    };\n  }\n\n  componentDidUpdate(prevProps) {\n    if (prevProps.response !== this.props.response) {\n      const state = this.state;\n      state.opened = true;\n      console.log(\"open true\");\n      this.setState(state);\n      setTimeout(() => {\n        const state = this.state;\n        state.opened = false;\n        console.log(\"open false\");\n        this.setState(state);\n      }, 5000);\n    }\n  }\n\n  render() {\n    if (!this.props.response) {\n      return \"\";\n    }\n\n    const snackbarClasses =\n      (this.state.opened ? \"opened \" : \"\") +\n      (this.props.response\n        ? this.props.response.success\n          ? \"success \"\n          : \"error \"\n        : \"\");\n    return (\n      <div id=\"snackbarContainer\">\n        <div id=\"snackbar\" className={snackbarClasses}>\n          <span>{this.props.response ? this.props.response.message : \"\"}</span>\n        </div>\n      </div>\n    );\n  }\n}\n\nReactDOM.render(<App />, document.getElementById(\"root\"));\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/public/we_tasks/task13/static/js/main.498bcac4.chunk.js b/public/we_tasks/task13/static/js/main.498bcac4.chunk.js
new file mode 100644
index 0000000..db898e5
--- /dev/null
+++ b/public/we_tasks/task13/static/js/main.498bcac4.chunk.js
@@ -0,0 +1,2 @@
+(this.webpackJsonpheros=this.webpackJsonpheros||[]).push([[0],{13:function(e,t,n){},14:function(e,t,n){"use strict";n.r(t);var a=n(1),r=n(2),i=n(3),s=n(5),l=n(4),o=n(0),u=n.n(o),c=n(7),m=n.n(c),d=(n(13),new(function(){function e(){Object(a.a)(this,e),this.URLs=null}return Object(r.a)(e,[{key:"setURLs",value:function(e){this.URLs||(this.URLs={filestructure:e+"/get-filestructure-service.php",file:e+"/get-file-service.php",register:e+"/register-service.php",login:e+"/login-service.php",logout:e+"/logout-service.php",contentUpdate:e+"/content-update-service.php"})}},{key:"get",value:function(e){return fetch(e,{method:"GET"}).then((function(e){return e.json()}))}},{key:"post",value:function(e,t){return fetch(e,{method:"POST",body:t}).then((function(e){return e.json()}))}}]),e}()));d.setURLs("/~srosau2s/we_tasks/task12/navigator_services");var h=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(a.a)(this,n),(r=t.call(this,e)).state={user:null,response:null},r.handleLogin=r.handleLogin.bind(Object(i.a)(r)),r.handleLogout=r.handleLogout.bind(Object(i.a)(r)),r}return Object(r.a)(n,[{key:"render",value:function(){return u.a.createElement("div",{id:"gridContainer"},u.a.createElement("div",{id:"header"},u.a.createElement("h1",null,"React Login"),u.a.createElement(p,{handleLogin:this.handleLogin,handleLogout:this.handleLogout,user:this.state.user})),u.a.createElement(g,{user:this.state.user}),u.a.createElement(f,{response:this.state.response}))}},{key:"handleLogin",value:function(e){console.log("Handle Login");var t=this.state;e.success&&(t.user=e.user),t.response=e,this.setState(t)}},{key:"handleLogout",value:function(e){console.log("Handle Logout");var t=this.state;e.success&&(t.user=null),t.response=e,this.setState(t)}}]),n}(u.a.Component),p=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(a.a)(this,n),(r=t.call(this,e)).state={name:"",pw:""},r}return Object(r.a)(n,[{key:"render",value:function(){var e=this;return this.props.user?u.a.createElement("div",{id:"mainMenu"},u.a.createElement("span",null,"Angemeldet als ",u.a.createElement("b",null,this.props.user.nickname)),u.a.createElement("button",{onClick:function(){return e.logout()},id:"logout"},"Logout")):u.a.createElement("div",{id:"mainMenu"},u.a.createElement("input",{id:"name",placeholder:"Name",type:"text",value:this.state.name,onChange:function(t){return e.handleNameChange(t)}}),u.a.createElement("input",{id:"password",placeholder:"Password",type:"text",value:this.state.pw,onChange:function(t){return e.handlePwChange(t)}}),u.a.createElement("button",{onClick:function(){return e.login()},id:"login"},"Login"))}},{key:"handleNameChange",value:function(e){var t=this.state;t.name=e.target.value,this.setState(t)}},{key:"handlePwChange",value:function(e){var t=this.state;t.pw=e.target.value,this.setState(t)}},{key:"login",value:function(){var e=this;console.log("login");var t=new FormData;t.append("accountname",this.state.name),t.append("password",this.state.pw),d.post(d.URLs.login,t).then((function(t){e.props.handleLogin(t)})),this.setState({name:"",pw:""})}},{key:"logout",value:function(){var e=this;if(this.props.user){var t=new FormData;t.append("sessionId",this.props.user.sessionId),d.post(d.URLs.logout,t).then((function(t){e.props.handleLogout(t)}))}}}]),n}(u.a.Component),g=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(){return Object(a.a)(this,n),t.apply(this,arguments)}return Object(r.a)(n,[{key:"render",value:function(){return this.props.user?u.a.createElement("div",{id:"content"},u.a.createElement("table",null,u.a.createElement("tbody",null,u.a.createElement("tr",null,u.a.createElement("td",null,u.a.createElement("h2",null,"Batman")),u.a.createElement("td",null,u.a.createElement("h2",null,"Iron Man")),u.a.createElement("td",null,u.a.createElement("h2",null,"Hulk"))),u.a.createElement("tr",null,u.a.createElement("td",null,u.a.createElement("img",{src:"../images/Batman.jpg",alt:"Batman_IMG"}),u.a.createElement("p",null),u.a.createElement("a",{href:"https://commons.wikimedia.org/wiki/File:9.17.16BatmanCosplayerByLuigiNovi1.jpg"},"\xa9 Luigi Novi / Wikimedia Commons")),u.a.createElement("td",null,u.a.createElement("img",{src:"../images/Ironman.jpg",alt:"Ironman_IMG"}),u.a.createElement("p",null),u.a.createElement("a",{href:"https://commons.wikimedia.org/wiki/File:Iron_Man_Comic_Con_1.jpg"},"\xa9 greyloch / Wikimedia Commons")),u.a.createElement("td",null,u.a.createElement("img",{src:"../images/Hulk.jpg",alt:"Hulk_img"}),u.a.createElement("p",null),u.a.createElement("a",{href:"https://commons.wikimedia.org/wiki/File:Madrid_-_Casa_del_Libro_de_la_Gran_V%C3%ADa_4.jpg"},"\xa9 Zarateman / Wikimedia Commons"))),u.a.createElement("tr",null,u.a.createElement("td",null,"Batman (englisch f\xfcr Fledermausmann) ist eine von Bob Kane erdachte und durch Bill Finger weiterentwickelte Comicfigur, deren zivile Identit\xe4t die des Milliard\xe4rs Bruce Wayne ist und der einen schwarzen, einer Fledermaus \xe4hnelnden Anzug tr\xe4gt. Batman erschien erstmals im Mai 1939 in dem US-amerikanischen Comicmagazin Detective Comics (Ausgabe 27). Der herausgebende Verlag nannte sich sp\xe4ter nach der Abk\xfcrzung dieser Serie in DC Comics um; Batman gilt als seine beliebteste Comicfigur.",u.a.createElement("p",null),u.a.createElement("a",{href:"https://de.wikipedia.org/wiki/Batman"},"Wikipedia")),u.a.createElement("td",null,"Iron Man (deutsch: \u201eEisenmann\u201c, in den ersten deutschen Ver\xf6ffentlichungen \u201eDer Eiserne\u201c) ist eine Comicfigur der Marvel Comics. Erschaffen wurde sie von Stan Lee und Larry Lieber sowie den Zeichnern Don Heck und Jack Kirby. Ihr erster Auftritt war in dem Comic Tales of Suspense #39 im M\xe4rz 1963. 1968 erhielt sie eine eigene Reihe mit dem Titel Iron Man, die bis 1996 fortgesetzt wurde. Iron Mans R\xfcstung ist rot-golden und mit modernster Technik ausgestattet, wie zum Beispiel Laserstrahlen.",u.a.createElement("p",null),u.a.createElement("a",{href:"https://de.wikipedia.org/wiki/Iron_Man"},"Wikipedia")),u.a.createElement("td",null,"Hulk [h\u028clk] (engl. Koloss, Klotz) ist die Titelfigur aus den gleichnamigen Marvel-Comics. Die erste Ausgabe wurde im Mai 1962 von Stan Lee und Jack Kirby ver\xf6ffentlicht. Im Comic wird die Geschichte des Nuklearphysikers Dr. Bruce Banner erz\xe4hlt, der nach einem Unfall mit dem Prototyp einer Gamma-Bombe gro\xdfen Mengen an Gammastrahlung ausgesetzt wurde und sich fortan bei jedem Anflug von Wut in das rasende Monster Hulk verwandelt. Der h\xfcnenhafte Kraftprotz ger\xe4t wegen seiner durchschlagenden St\xe4rke im jeweiligen Storyverlauf h\xe4ufig in Auseinandersetzungen mit bewaffneten Streitkr\xe4ften, die Hulk stoppen und ihn auch als \u201eWaffe\u201c f\xfcr sich nutzen wollen. Hulks gr\xfcne Hautfarbe erkl\xe4rt sich durch die unz\xe4hligen Chloroplasten in seiner Haut, mit denen er die n\xf6tigen Stoffwechselprodukte f\xfcr seinen Energiebedarf herstellen kann.",u.a.createElement("p",null),u.a.createElement("a",{href:"https://de.wikipedia.org/wiki/Hulk_(Comic)"},"Wikipedia")))))):u.a.createElement("div",{id:"content"},u.a.createElement("span",null,"Zugriff Verweigert! Authentifizierung erforderlich!"))}}]),n}(u.a.Component),f=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(a.a)(this,n),(r=t.call(this,e)).state={opened:!1},r}return Object(r.a)(n,[{key:"componentDidUpdate",value:function(e){var t=this;if(e.response!==this.props.response){var n=this.state;n.opened=!0,console.log("open true"),this.setState(n),setTimeout((function(){var e=t.state;e.opened=!1,console.log("open false"),t.setState(e)}),5e3)}}},{key:"render",value:function(){if(!this.props.response)return"";var e=(this.state.opened?"opened ":"")+(this.props.response?this.props.response.success?"success ":"error ":"");return u.a.createElement("div",{id:"snackbarContainer"},u.a.createElement("div",{id:"snackbar",className:e},u.a.createElement("span",null,this.props.response?this.props.response.message:"")))}}]),n}(u.a.Component);m.a.render(u.a.createElement(h,null),document.getElementById("root"))},8:function(e,t,n){e.exports=n(14)}},[[8,1,2]]]);
+//# sourceMappingURL=main.498bcac4.chunk.js.map
\ No newline at end of file
diff --git a/public/we_tasks/task13/static/js/main.498bcac4.chunk.js.map b/public/we_tasks/task13/static/js/main.498bcac4.chunk.js.map
new file mode 100644
index 0000000..ed0b258
--- /dev/null
+++ b/public/we_tasks/task13/static/js/main.498bcac4.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["Client.js","index.js"],"names":["client","this","URLs","baseURL","filestructure","file","register","login","logout","contentUpdate","url","fetch","method","then","result","json","payload","body","setURLs","App","props","state","user","response","handleLogin","bind","handleLogout","id","console","log","success","setState","React","Component","Login","name","pw","nickname","onClick","placeholder","type","value","onChange","event","handleNameChange","handlePwChange","target","FormData","append","post","sessionId","ContentViewer","src","alt","href","Snackbar","opened","prevProps","setTimeout","snackbarClasses","className","message","ReactDOM","render","document","getElementById"],"mappings":"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","file":"static/js/main.498bcac4.chunk.js","sourcesContent":["/* eslint-disable no-debugger, no-console */\nclass Client {\n  constructor() {\n    this.URLs = null;\n  }\n\n  setURLs(baseURL) {\n    if (!this.URLs) {\n      this.URLs = {\n        filestructure: baseURL + \"/get-filestructure-service.php\",\n        file: baseURL + \"/get-file-service.php\",\n        register: baseURL + \"/register-service.php\",\n        login: baseURL + \"/login-service.php\",\n        logout: baseURL + \"/logout-service.php\",\n        contentUpdate: baseURL + \"/content-update-service.php\",\n      };\n    }\n  }\n\n  get(url) {\n    return fetch(url, {\n      method: \"GET\",\n    }).then((result) => result.json());\n  }\n  post(url, payload) {\n    return fetch(url, {\n      method: \"POST\",\n      body: payload,\n    }).then((result) => result.json());\n  }\n}\n\nconst client = new Client();\n\nexport default client;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport client from \"./Client\";\n\nclient.setURLs(\"/~srosau2s/we_tasks/task12/navigator_services\");\n\nclass App extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      user: null,\n      response: null,\n    };\n    this.handleLogin = this.handleLogin.bind(this);\n    this.handleLogout = this.handleLogout.bind(this);\n  }\n\n  render() {\n    return (\n      <div id=\"gridContainer\">\n        <div id=\"header\">\n          <h1>React Login</h1>\n          <Login\n            handleLogin={this.handleLogin}\n            handleLogout={this.handleLogout}\n            user={this.state.user}\n          ></Login>\n        </div>\n        <ContentViewer user={this.state.user}></ContentViewer>\n        <Snackbar response={this.state.response}></Snackbar>\n      </div>\n    );\n  }\n\n  handleLogin(result) {\n    console.log(\"Handle Login\");\n    const state = this.state;\n    if (result.success) {\n      state.user = result.user;\n    }\n    state.response = result;\n    this.setState(state);\n  }\n  handleLogout(result) {\n    console.log(\"Handle Logout\");\n    const state = this.state;\n    if (result.success) {\n      state.user = null;\n    }\n    state.response = result;\n    this.setState(state);\n  }\n}\n\nclass Login extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      name: \"\",\n      pw: \"\",\n    };\n  }\n\n  render() {\n    if (this.props.user) {\n      return (\n        <div id=\"mainMenu\">\n          <span>\n            Angemeldet als <b>{this.props.user.nickname}</b>\n          </span>\n          <button onClick={() => this.logout()} id=\"logout\">\n            Logout\n          </button>\n        </div>\n      );\n    } else {\n      return (\n        <div id=\"mainMenu\">\n          <input\n            id=\"name\"\n            placeholder=\"Name\"\n            type=\"text\"\n            value={this.state.name}\n            onChange={(event) => this.handleNameChange(event)}\n          ></input>\n          <input\n            id=\"password\"\n            placeholder=\"Password\"\n            type=\"text\"\n            value={this.state.pw}\n            onChange={(event) => this.handlePwChange(event)}\n          ></input>\n          <button onClick={() => this.login()} id=\"login\">\n            Login\n          </button>\n        </div>\n      );\n    }\n  }\n\n  handleNameChange(event) {\n    const state = this.state;\n    state.name = event.target.value;\n    this.setState(state);\n  }\n  handlePwChange(event) {\n    const state = this.state;\n    state.pw = event.target.value;\n    this.setState(state);\n  }\n  login() {\n    console.log(\"login\");\n\n    let payload = new FormData();\n    payload.append(\"accountname\", this.state.name);\n    payload.append(\"password\", this.state.pw);\n    client.post(client.URLs.login, payload).then((result) => {\n      this.props.handleLogin(result);\n    });\n\n    this.setState({\n      name: \"\",\n      pw: \"\",\n    });\n  }\n  logout() {\n    if (this.props.user) {\n      let payload = new FormData();\n      payload.append(\"sessionId\", this.props.user.sessionId);\n      client.post(client.URLs.logout, payload).then((result) => {\n        this.props.handleLogout(result);\n      });\n    }\n  }\n}\n\nclass ContentViewer extends React.Component {\n  render() {\n    if (this.props.user) {\n      return (\n        <div id=\"content\">\n          <table>\n            <tbody>\n              <tr>\n                <td>\n                  <h2>Batman</h2>\n                </td>\n                <td>\n                  <h2>Iron Man</h2>\n                </td>\n                <td>\n                  <h2>Hulk</h2>\n                </td>\n              </tr>\n              <tr>\n                <td>\n                  <img src=\"../images/Batman.jpg\" alt=\"Batman_IMG\"></img>\n                  <p></p>\n                  <a href=\"https://commons.wikimedia.org/wiki/File:9.17.16BatmanCosplayerByLuigiNovi1.jpg\">\n                    © Luigi Novi / Wikimedia Commons\n                  </a>\n                </td>\n                <td>\n                  <img src=\"../images/Ironman.jpg\" alt=\"Ironman_IMG\"></img>\n                  <p></p>\n                  <a href=\"https://commons.wikimedia.org/wiki/File:Iron_Man_Comic_Con_1.jpg\">\n                    © greyloch / Wikimedia Commons\n                  </a>\n                </td>\n                <td>\n                  <img src=\"../images/Hulk.jpg\" alt=\"Hulk_img\"></img>\n                  <p></p>\n                  <a href=\"https://commons.wikimedia.org/wiki/File:Madrid_-_Casa_del_Libro_de_la_Gran_V%C3%ADa_4.jpg\">\n                    © Zarateman / Wikimedia Commons\n                  </a>\n                </td>\n              </tr>\n              <tr>\n                <td>\n                  Batman (englisch für Fledermausmann) ist eine von Bob Kane\n                  erdachte und durch Bill Finger weiterentwickelte Comicfigur,\n                  deren zivile Identität die des Milliardärs Bruce Wayne ist und\n                  der einen schwarzen, einer Fledermaus ähnelnden Anzug trägt.\n                  Batman erschien erstmals im Mai 1939 in dem US-amerikanischen\n                  Comicmagazin Detective Comics (Ausgabe 27). Der herausgebende\n                  Verlag nannte sich später nach der Abkürzung dieser Serie in\n                  DC Comics um; Batman gilt als seine beliebteste Comicfigur.\n                  <p></p>\n                  <a href=\"https://de.wikipedia.org/wiki/Batman\">Wikipedia</a>\n                </td>\n                <td>\n                  Iron Man (deutsch: „Eisenmann“, in den ersten deutschen\n                  Veröffentlichungen „Der Eiserne“) ist eine Comicfigur der\n                  Marvel Comics. Erschaffen wurde sie von Stan Lee und Larry\n                  Lieber sowie den Zeichnern Don Heck und Jack Kirby. Ihr erster\n                  Auftritt war in dem Comic Tales of Suspense #39 im März 1963.\n                  1968 erhielt sie eine eigene Reihe mit dem Titel Iron Man, die\n                  bis 1996 fortgesetzt wurde. Iron Mans Rüstung ist rot-golden\n                  und mit modernster Technik ausgestattet, wie zum Beispiel\n                  Laserstrahlen.\n                  <p></p>\n                  <a href=\"https://de.wikipedia.org/wiki/Iron_Man\">Wikipedia</a>\n                </td>\n                <td>\n                  Hulk [hʌlk] (engl. Koloss, Klotz) ist die Titelfigur aus den\n                  gleichnamigen Marvel-Comics. Die erste Ausgabe wurde im Mai\n                  1962 von Stan Lee und Jack Kirby veröffentlicht. Im Comic wird\n                  die Geschichte des Nuklearphysikers Dr. Bruce Banner erzählt,\n                  der nach einem Unfall mit dem Prototyp einer Gamma-Bombe\n                  großen Mengen an Gammastrahlung ausgesetzt wurde und sich\n                  fortan bei jedem Anflug von Wut in das rasende Monster Hulk\n                  verwandelt. Der hünenhafte Kraftprotz gerät wegen seiner\n                  durchschlagenden Stärke im jeweiligen Storyverlauf häufig in\n                  Auseinandersetzungen mit bewaffneten Streitkräften, die Hulk\n                  stoppen und ihn auch als „Waffe“ für sich nutzen wollen. Hulks\n                  grüne Hautfarbe erklärt sich durch die unzähligen\n                  Chloroplasten in seiner Haut, mit denen er die nötigen\n                  Stoffwechselprodukte für seinen Energiebedarf herstellen kann.\n                  <p></p>\n                  <a href=\"https://de.wikipedia.org/wiki/Hulk_(Comic)\">\n                    Wikipedia\n                  </a>\n                </td>\n              </tr>\n            </tbody>\n          </table>\n        </div>\n      );\n    } else {\n      return (\n        <div id=\"content\">\n          <span>Zugriff Verweigert! Authentifizierung erforderlich!</span>\n        </div>\n      );\n    }\n  }\n}\n\nclass Snackbar extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      opened: false,\n    };\n  }\n\n  componentDidUpdate(prevProps) {\n    if (prevProps.response !== this.props.response) {\n      const state = this.state;\n      state.opened = true;\n      console.log(\"open true\");\n      this.setState(state);\n      setTimeout(() => {\n        const state = this.state;\n        state.opened = false;\n        console.log(\"open false\");\n        this.setState(state);\n      }, 5000);\n    }\n  }\n\n  render() {\n    if (!this.props.response) {\n      return \"\";\n    }\n\n    const snackbarClasses =\n      (this.state.opened ? \"opened \" : \"\") +\n      (this.props.response\n        ? this.props.response.success\n          ? \"success \"\n          : \"error \"\n        : \"\");\n    return (\n      <div id=\"snackbarContainer\">\n        <div id=\"snackbar\" className={snackbarClasses}>\n          <span>{this.props.response ? this.props.response.message : \"\"}</span>\n        </div>\n      </div>\n    );\n  }\n}\n\nReactDOM.render(<App />, document.getElementById(\"root\"));\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/public/we_tasks/task13/static/js/runtime-main.901bcd76.js b/public/we_tasks/task13/static/js/runtime-main.901bcd76.js
new file mode 100644
index 0000000..5238836
--- /dev/null
+++ b/public/we_tasks/task13/static/js/runtime-main.901bcd76.js
@@ -0,0 +1,2 @@
+!function(e){function r(r){for(var n,a,l=r[0],f=r[1],i=r[2],s=0,c=[];s<l.length;s++)a=l[s],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&c.push(o[a][0]),o[a]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(p&&p(r);c.length;)c.shift()();return u.push.apply(u,i||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var f=t[l];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="/~srosau2s/we_tasks/task13/";var l=this.webpackJsonpheros=this.webpackJsonpheros||[],f=l.push.bind(l);l.push=r,l=l.slice();for(var i=0;i<l.length;i++)r(l[i]);var p=f;t()}([]);
+//# sourceMappingURL=runtime-main.901bcd76.js.map
\ No newline at end of file
diff --git a/public/we_tasks/task13/static/js/runtime-main.fa9ca119.js.map b/public/we_tasks/task13/static/js/runtime-main.901bcd76.js.map
similarity index 91%
rename from public/we_tasks/task13/static/js/runtime-main.fa9ca119.js.map
rename to public/we_tasks/task13/static/js/runtime-main.901bcd76.js.map
index ebcb431..504ce43 100644
--- a/public/we_tasks/task13/static/js/runtime-main.fa9ca119.js.map
+++ b/public/we_tasks/task13/static/js/runtime-main.901bcd76.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAKlC,IAFGe,GAAqBA,EAAoBhB,GAEtCO,EAASC,QACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrBiB,EAAG,GAGAZ,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU8B,QAGnC,IAAIC,EAASH,EAAiB5B,GAAY,CACzCK,EAAGL,EACHgC,GAAG,EACHF,QAAS,IAUV,OANAhB,EAAQd,GAAUW,KAAKoB,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAG/DK,EAAOC,GAAI,EAGJD,EAAOD,QAKfJ,EAAoBO,EAAInB,EAGxBY,EAAoBQ,EAAIN,EAGxBF,EAAoBS,EAAI,SAASL,EAASM,EAAMC,GAC3CX,EAAoBY,EAAER,EAASM,IAClC5B,OAAO+B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEX,EAAoBgB,EAAI,SAASZ,GACX,qBAAXa,QAA0BA,OAAOC,aAC1CpC,OAAO+B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DrC,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKzC,OAAO0C,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBzC,OAAO+B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBS,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAL,EAAoBS,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRX,EAAoBY,EAAI,SAASgB,EAAQC,GAAY,OAAO/C,OAAOC,UAAUC,eAAeC,KAAK2C,EAAQC,IAGzG7B,EAAoB8B,EAAI,oBAExB,IAAIC,EAAaC,KAAwB,kBAAIA,KAAwB,mBAAK,GACtEC,EAAmBF,EAAW5C,KAAKuC,KAAKK,GAC5CA,EAAW5C,KAAOf,EAClB2D,EAAaA,EAAWG,QACxB,IAAI,IAAIvD,EAAI,EAAGA,EAAIoD,EAAWlD,OAAQF,IAAKP,EAAqB2D,EAAWpD,IAC3E,IAAIU,EAAsB4C,EAI1BxC,I","file":"static/js/runtime-main.fa9ca119.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/we_tasks/task13/\";\n\n \tvar jsonpArray = this[\"webpackJsonpheros\"] = this[\"webpackJsonpheros\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.901bcd76.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/~srosau2s/we_tasks/task13/\";\n\n \tvar jsonpArray = this[\"webpackJsonpheros\"] = this[\"webpackJsonpheros\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/public/we_tasks/task13/static/js/runtime-main.fa9ca119.js b/public/we_tasks/task13/static/js/runtime-main.fa9ca119.js
deleted file mode 100644
index 2335e46..0000000
--- a/public/we_tasks/task13/static/js/runtime-main.fa9ca119.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(e){function r(r){for(var n,l,a=r[0],f=r[1],i=r[2],c=0,s=[];c<a.length;c++)l=a[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,i||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var f=t[a];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/we_tasks/task13/";var a=this.webpackJsonpheros=this.webpackJsonpheros||[],f=a.push.bind(a);a.push=r,a=a.slice();for(var i=0;i<a.length;i++)r(a[i]);var p=f;t()}([]);
-//# sourceMappingURL=runtime-main.fa9ca119.js.map
\ No newline at end of file
diff --git a/src/components/editor_components/DocViewer.vue b/src/components/editor_components/DocViewer.vue
index 936c982..ce9cf80 100644
--- a/src/components/editor_components/DocViewer.vue
+++ b/src/components/editor_components/DocViewer.vue
@@ -2,9 +2,7 @@
   <div>
     <v-card v-if="file" width="800">
       <v-card-title>{{ file.title }}</v-card-title>
-      <v-card-subtitle>
-        Besitzer: {{ file.author }}
-      </v-card-subtitle>
+      <v-card-subtitle> Besitzer: {{ file.author }} </v-card-subtitle>
       <v-card-text class="contentBox">{{ file.content }}</v-card-text>
       <v-card-actions v-if="editable">
         <v-spacer></v-spacer>
diff --git a/src/router/index.js b/src/router/index.js
index cbb8a97..9436141 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -46,7 +46,8 @@ const routes = [
 ];
 
 const router = new VueRouter({
-  routes
+  routes,
+  base: "/~srosau2s/"
 });
 
 export default router;
diff --git a/src/views/Editor.vue b/src/views/Editor.vue
index 74c2597..ed2c2ab 100644
--- a/src/views/Editor.vue
+++ b/src/views/Editor.vue
@@ -80,8 +80,7 @@
               file.title,
               file.directory,
               file.content
-            )
-          "
+            )"
         ></DocViewer>
       </v-layout>
     </v-main>
@@ -92,7 +91,7 @@
 /* eslint-disable no-debugger, no-console */
 
 import client from "../services/Client";
-client.setURLs("http://localhost:80/we_tasks/task12/navigator_services");
+client.setURLs("/~srosau2s/we_tasks/task12/navigator_services");
 
 import Register from "../components/editor_components/Register";
 import Login from "../components/editor_components/Login";
diff --git a/src/views/Editor_14_unsecure.vue b/src/views/Editor_14_unsecure.vue
index 3749186..36da027 100644
--- a/src/views/Editor_14_unsecure.vue
+++ b/src/views/Editor_14_unsecure.vue
@@ -82,7 +82,8 @@
               file.title,
               file.directory,
               file.content
-            )"
+            )
+          "
         ></DocViewer>
       </v-layout>
     </v-main>
diff --git a/src/views/Home.vue b/src/views/Home.vue
index efa6e01..52bb7f9 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -10,11 +10,11 @@
               >Ãœbung 2 - HTML und CSS</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="/we_tasks/task02/2_3.html"
+              <a href="/~srosau2s/we_tasks/task02/2_3.html"
                 >Aufgabe 2.3: HTML-Wireframe</a
               >
               <br />
-              <a href="we_tasks/task02/2_4.html"
+              <a href="/~srosau2s/we_tasks/task02/2_4.html"
                 >Aufgabe 2.4: Wireframe with HTML and CSS</a
               >
             </v-expansion-panel-content>
@@ -24,16 +24,16 @@
               >Ãœbung 3 - Responsive Web Design (RWD)</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="we_tasks/task03/3_1.html"
+              <a href="/~srosau2s/we_tasks/task03/3_1.html"
                 >Aufgabe 3.1: Responsiv mit Flexbox Desktop-First</a
               ><br />
-              <a href="we_tasks/task03/3_2.html"
+              <a href="/~srosau2s/we_tasks/task03/3_2.html"
                 >Aufgabe 3.2: Responsiv mit Flexbox Mobile-First</a
               ><br />
-              <a href="we_tasks/task03/3_3.html"
+              <a href="/~srosau2s/we_tasks/task03/3_3.html"
                 >Aufgabe 3.3: Responsiv mit Grid Layout Desktop-First</a
               ><br />
-              <a href="we_tasks/task03/3_4.html"
+              <a href="/~srosau2s/we_tasks/task03/3_4.html"
                 >Aufgabe 3.4: Responsiv mit Grid Layout Mobile-First</a
               >
             </v-expansion-panel-content>
@@ -43,12 +43,12 @@
               >Ãœbung 5 - Document Object Model (DOM)</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="we_tasks/task05/5_1.html">Aufgabe 5.1: Einkaufsliste</a
+              <a href="/~srosau2s/we_tasks/task05/5_1.html">Aufgabe 5.1: Einkaufsliste</a
               ><br />
-              <a href="we_tasks/task05/5_2.html"
+              <a href="/~srosau2s/we_tasks/task05/5_2.html"
                 >Aufgabe 5.2: Rednerliste mit Zeitmessung</a
               ><br />
-              <a href="we_tasks/task05/5_3.html"
+              <a href="/~srosau2s/we_tasks/task05/5_3.html"
                 >Aufgabe 5.3: Performancemessungen</a
               >
             </v-expansion-panel-content>
@@ -58,10 +58,10 @@
               >Ãœbung 6 - Asynchrones Javascript</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="we_tasks/task06/6_1.html">Aufgabe 6.1: Promises</a><br />
-              <a href="we_tasks/task06/6_2.html">Aufgabe 6.2: async / await</a
+              <a href="/~srosau2s/we_tasks/task06/6_1.html">Aufgabe 6.1: Promises</a><br />
+              <a href="/~srosau2s/we_tasks/task06/6_2.html">Aufgabe 6.2: async / await</a
               ><br />
-              <a href="we_tasks/task06/6_3.html">Aufgabe 6.3: WWW-Navigator</a>
+              <a href="/~srosau2s/we_tasks/task06/6_3.html">Aufgabe 6.3: WWW-Navigator</a>
             </v-expansion-panel-content>
           </v-expansion-panel>
           <v-expansion-panel>
@@ -69,11 +69,11 @@
               >Ãœbung 7 - Modulares Web</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="we_tasks/task07/7_1.html"
+              <a href="/~srosau2s/we_tasks/task07/7_1.html"
                 >Aufgabe 7.1: Counter mit Start und Limit</a
               ><br />
-              <a href="we_tasks/task07/7_2.html">Aufgabe 7.2: Stoppuhr</a><br />
-              <a href="we_tasks/task07/7_3.html"
+              <a href="/~srosau2s/we_tasks/task07/7_2.html">Aufgabe 7.2: Stoppuhr</a><br />
+              <a href="/~srosau2s/we_tasks/task07/7_3.html"
                 >Aufgabe 7.3: Flexible Menü-Komponente</a
               >
             </v-expansion-panel-content>
@@ -81,9 +81,9 @@
           <v-expansion-panel>
             <v-expansion-panel-header>Ãœbung 8 - SVG</v-expansion-panel-header>
             <v-expansion-panel-content>
-              <a href="we_tasks/task08/8_1.html">Aufgabe 8.1: SVG-Diagramm</a
+              <a href="/~srosau2s/we_tasks/task08/8_1.html">Aufgabe 8.1: SVG-Diagramm</a
               ><br />
-              <a href="we_tasks/task08/8_2.html"
+              <a href="/~srosau2s/we_tasks/task08/8_2.html"
                 >Aufgabe 8.2: Statistik-Balkendiagramm</a
               ><br />
             </v-expansion-panel-content>
@@ -93,8 +93,8 @@
               >Ãœbung 9 - WebApps</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="we_tasks/task09/9_1.html">Aufgabe 9.1: Routing</a><br />
-              <a href="we_tasks/task09/9_2.html"
+              <a href="/~srosau2s/we_tasks/task09/9_1.html">Aufgabe 9.1: Routing</a><br />
+              <a href="/~srosau2s/we_tasks/task09/9_2.html"
                 >Aufgabe 9.2: State Management</a
               ><br />
             </v-expansion-panel-content>
@@ -107,14 +107,18 @@
               Aufgabe 10.1: Counter in Vue.js<br />
               <sr_vuecounter></sr_vuecounter>
               <br />
-              <router-link to="/vuenavigator">Aufgabe 10.2/3: Vuenavigator</router-link>
+              <router-link to="/vuenavigator"
+                >Aufgabe 10.2/3: Vuenavigator</router-link
+              >
             </v-expansion-panel-content>
           </v-expansion-panel>
           <v-expansion-panel>
             <v-expansion-panel-header>Ãœbung 12 - PHP</v-expansion-panel-header>
-            <v-expansion-panel-content
+            <v-expansion-panel-content>
+              <router-link to="/contenteditor"
+                >Aufgabe 12.1/2/3: Content-Editor mit Registrierung und
+                Login</router-link
               >
-              <router-link to="/contenteditor">Aufgabe 12.1/2/3: Content-Editor mit Registrierung und Login</router-link>
             </v-expansion-panel-content>
           </v-expansion-panel>
           <v-expansion-panel>
@@ -122,10 +126,12 @@
               >Ãœbung 13 - React</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="we_tasks/task13/index.html">Aufgabe 13.1: React Login</a>
-              <p/>
-              <b>Keine Zugangsdaten bekannt?</b> Diese React-Anwendung verwendet dasselbe Backend, wie der Content-Editor aus Ãœbung 12.
-              Registrieren sie einfach dort einen Account, um sich hier damit anzumelden.              
+              <a href="/~srosau2s/we_tasks/task13/index.html">Aufgabe 13.1: React Login</a>
+              <p />
+              <b>Keine Zugangsdaten bekannt?</b> Diese React-Anwendung verwendet
+              dasselbe Backend, wie der Content-Editor aus Ãœbung 12.
+              Registrieren sie einfach dort einen Account, um sich hier damit
+              anzumelden.
             </v-expansion-panel-content>
           </v-expansion-panel>
           <v-expansion-panel>
diff --git a/src/views/Vuenavigator.vue b/src/views/Vuenavigator.vue
index c981ab1..1fe38c4 100644
--- a/src/views/Vuenavigator.vue
+++ b/src/views/Vuenavigator.vue
@@ -24,7 +24,7 @@
 <script>
 import sr_vuemenu from "../components/sr_vuemenu";
 
-const baseLocation = "/we_tasks/task10";
+const baseLocation = "/~srosau2s/we_tasks/task10";
 
 export default {
   name: "Vuenavigator",
diff --git a/vue.config.js b/vue.config.js
index 78a9545..366013c 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -1,3 +1,5 @@
 module.exports = {
-  transpileDependencies: ["vuetify"]
+  transpileDependencies: ["vuetify"],
+  "publicPath": "/~srosau2s/",
+
 };
-- 
GitLab


From 50cd2f5b9a1652a77a9b1edb38ad5caf780ecd0f Mon Sep 17 00:00:00 2001
From: Sebastian Rosauer <sebastian-rosauer@outlook.de>
Date: Tue, 15 Sep 2020 14:05:10 +0200
Subject: [PATCH 4/7] Enabled auto word-wrap

---
 .../we_tasks/task12/navigator_services/login-service.php  | 2 +-
 src/components/editor_components/DocViewer.vue            | 2 +-
 src/components/editor_components/DocViewer_profile.vue    | 2 +-
 src/components/editor_components/ProfileViewer_secure.vue | 8 ++++++--
 .../editor_components/ProfileViewer_unsecure.vue          | 8 ++++++--
 5 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/public/we_tasks/task12/navigator_services/login-service.php b/public/we_tasks/task12/navigator_services/login-service.php
index 4ab3fe9..d9e4a3f 100644
--- a/public/we_tasks/task12/navigator_services/login-service.php
+++ b/public/we_tasks/task12/navigator_services/login-service.php
@@ -44,7 +44,7 @@
     }
     $payload = [
         'success' => false,
-        'message' => 'Account oder Passwort nicht gefunden.',
+        'message' => 'Account nicht gefunden oder Passwort falsch',
     ];
     http_response_code(401);
     exit(json_encode($payload));
\ No newline at end of file
diff --git a/src/components/editor_components/DocViewer.vue b/src/components/editor_components/DocViewer.vue
index ce9cf80..725e9df 100644
--- a/src/components/editor_components/DocViewer.vue
+++ b/src/components/editor_components/DocViewer.vue
@@ -71,6 +71,6 @@ export default {
 
 <style scoped>
 .contentBox {
-  white-space: pre;
+  white-space: pre-wrap;
 }
 </style>
diff --git a/src/components/editor_components/DocViewer_profile.vue b/src/components/editor_components/DocViewer_profile.vue
index c449008..b2e0312 100644
--- a/src/components/editor_components/DocViewer_profile.vue
+++ b/src/components/editor_components/DocViewer_profile.vue
@@ -76,6 +76,6 @@ export default {
 
 <style scoped>
 .contentBox {
-  white-space: pre;
+  white-space: pre-wrap;
 }
 </style>
diff --git a/src/components/editor_components/ProfileViewer_secure.vue b/src/components/editor_components/ProfileViewer_secure.vue
index 785bdc6..a6114cf 100644
--- a/src/components/editor_components/ProfileViewer_secure.vue
+++ b/src/components/editor_components/ProfileViewer_secure.vue
@@ -4,7 +4,7 @@
       <v-card>
         <v-card-title>{{ user.nickname }}</v-card-title>
         <v-card-subtitle>{{ user.email }}</v-card-subtitle>
-        <v-card-text>{{ user.status }}</v-card-text>
+        <v-card-text class="statusBox">{{ user.status }}</v-card-text>
       </v-card>
     </v-dialog>
 
@@ -71,4 +71,8 @@ export default {
 };
 </script>
 
-<style></style>
+<style scoped>
+  .statusBox {
+    white-space: pre-wrap;
+  }
+</style>
diff --git a/src/components/editor_components/ProfileViewer_unsecure.vue b/src/components/editor_components/ProfileViewer_unsecure.vue
index 7f409ed..bfaf99a 100644
--- a/src/components/editor_components/ProfileViewer_unsecure.vue
+++ b/src/components/editor_components/ProfileViewer_unsecure.vue
@@ -4,7 +4,7 @@
       <v-card>
         <v-card-title>{{ user.nickname }}</v-card-title>
         <v-card-subtitle>{{ user.email }}</v-card-subtitle>
-        <v-card-text v-html="user.status"></v-card-text>
+        <v-card-text class="statusBox" v-html="user.status"></v-card-text>
       </v-card>
     </v-dialog>
 
@@ -71,4 +71,8 @@ export default {
 };
 </script>
 
-<style></style>
+<style scoped>
+  .statusBox {
+    white-space: pre-wrap;
+  }
+</style>
-- 
GitLab


From b424f8762466c67822c682505c4c31810d184272 Mon Sep 17 00:00:00 2001
From: Sebastian Rosauer <sebastian-rosauer@outlook.de>
Date: Thu, 17 Sep 2020 11:20:35 +0200
Subject: [PATCH 5/7] Added better field validation for register component

---
 src/components/editor_components/Register.vue | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/components/editor_components/Register.vue b/src/components/editor_components/Register.vue
index 3526f09..f83aa0a 100644
--- a/src/components/editor_components/Register.vue
+++ b/src/components/editor_components/Register.vue
@@ -68,12 +68,18 @@ export default {
   data: () => ({
     opened: false,
     accountname: "",
-    accountnameRules: [v => !!v || "Accountname benötigt"],
+    accountnameRules: [
+      v => !!v || "Accountname benötigt",
+      v => (!!v && /^[0-9a-zA-Z_\-]+$/.test(v)) || "Dateiname ungültig"
+    ],
     password: "",
     passwordRules: [v => !!v || "Passwort benötigt"],
     passwordconfirm: "",
     nickname: "",
-    nicknameRules: [v => !!v || "Nickname benötigt"],
+    nicknameRules: [
+      v => !!v || "Nickname benötigt",
+      v => (!!v && /^[0-9a-zA-Z_\- ]+$/.test(v)) || "Dateiname ungültig"
+    ],
     email: "",
     emailRules: [
       v => !v || /.+@.+/.test(v) || "Eingabe ist keine gültige E-Mail Adresse"
-- 
GitLab


From 73e19b440ff34d17bfeaf10111b69bfe8c0383fc Mon Sep 17 00:00:00 2001
From: Sebastian Rosauer <sebastian-rosauer@outlook.de>
Date: Thu, 17 Sep 2020 11:24:15 +0200
Subject: [PATCH 6/7] forgot to hit 'save' before last commit...

---
 .../ProfileViewer_secure.vue                  |  6 ++--
 .../ProfileViewer_unsecure.vue                |  6 ++--
 src/components/editor_components/Register.vue |  4 +--
 src/views/Editor.vue                          |  3 +-
 src/views/Home.vue                            | 29 ++++++++++++++-----
 vue.config.js                                 |  3 +-
 6 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/src/components/editor_components/ProfileViewer_secure.vue b/src/components/editor_components/ProfileViewer_secure.vue
index a6114cf..edeebae 100644
--- a/src/components/editor_components/ProfileViewer_secure.vue
+++ b/src/components/editor_components/ProfileViewer_secure.vue
@@ -72,7 +72,7 @@ export default {
 </script>
 
 <style scoped>
-  .statusBox {
-    white-space: pre-wrap;
-  }
+.statusBox {
+  white-space: pre-wrap;
+}
 </style>
diff --git a/src/components/editor_components/ProfileViewer_unsecure.vue b/src/components/editor_components/ProfileViewer_unsecure.vue
index bfaf99a..db5d1d0 100644
--- a/src/components/editor_components/ProfileViewer_unsecure.vue
+++ b/src/components/editor_components/ProfileViewer_unsecure.vue
@@ -72,7 +72,7 @@ export default {
 </script>
 
 <style scoped>
-  .statusBox {
-    white-space: pre-wrap;
-  }
+.statusBox {
+  white-space: pre-wrap;
+}
 </style>
diff --git a/src/components/editor_components/Register.vue b/src/components/editor_components/Register.vue
index f83aa0a..1e34e5b 100644
--- a/src/components/editor_components/Register.vue
+++ b/src/components/editor_components/Register.vue
@@ -70,7 +70,7 @@ export default {
     accountname: "",
     accountnameRules: [
       v => !!v || "Accountname benötigt",
-      v => (!!v && /^[0-9a-zA-Z_\-]+$/.test(v)) || "Dateiname ungültig"
+      v => (!!v && /^[0-9a-zA-Z_-]+$/.test(v)) || "Dateiname ungültig"
     ],
     password: "",
     passwordRules: [v => !!v || "Passwort benötigt"],
@@ -78,7 +78,7 @@ export default {
     nickname: "",
     nicknameRules: [
       v => !!v || "Nickname benötigt",
-      v => (!!v && /^[0-9a-zA-Z_\- ]+$/.test(v)) || "Dateiname ungültig"
+      v => (!!v && /^[0-9a-zA-Z_- ]+$/.test(v)) || "Dateiname ungültig"
     ],
     email: "",
     emailRules: [
diff --git a/src/views/Editor.vue b/src/views/Editor.vue
index ed2c2ab..9b60bd5 100644
--- a/src/views/Editor.vue
+++ b/src/views/Editor.vue
@@ -80,7 +80,8 @@
               file.title,
               file.directory,
               file.content
-            )"
+            )
+          "
         ></DocViewer>
       </v-layout>
     </v-main>
diff --git a/src/views/Home.vue b/src/views/Home.vue
index 52bb7f9..461fbe7 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -43,7 +43,8 @@
               >Ãœbung 5 - Document Object Model (DOM)</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="/~srosau2s/we_tasks/task05/5_1.html">Aufgabe 5.1: Einkaufsliste</a
+              <a href="/~srosau2s/we_tasks/task05/5_1.html"
+                >Aufgabe 5.1: Einkaufsliste</a
               ><br />
               <a href="/~srosau2s/we_tasks/task05/5_2.html"
                 >Aufgabe 5.2: Rednerliste mit Zeitmessung</a
@@ -58,10 +59,15 @@
               >Ãœbung 6 - Asynchrones Javascript</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="/~srosau2s/we_tasks/task06/6_1.html">Aufgabe 6.1: Promises</a><br />
-              <a href="/~srosau2s/we_tasks/task06/6_2.html">Aufgabe 6.2: async / await</a
+              <a href="/~srosau2s/we_tasks/task06/6_1.html"
+                >Aufgabe 6.1: Promises</a
               ><br />
-              <a href="/~srosau2s/we_tasks/task06/6_3.html">Aufgabe 6.3: WWW-Navigator</a>
+              <a href="/~srosau2s/we_tasks/task06/6_2.html"
+                >Aufgabe 6.2: async / await</a
+              ><br />
+              <a href="/~srosau2s/we_tasks/task06/6_3.html"
+                >Aufgabe 6.3: WWW-Navigator</a
+              >
             </v-expansion-panel-content>
           </v-expansion-panel>
           <v-expansion-panel>
@@ -72,7 +78,9 @@
               <a href="/~srosau2s/we_tasks/task07/7_1.html"
                 >Aufgabe 7.1: Counter mit Start und Limit</a
               ><br />
-              <a href="/~srosau2s/we_tasks/task07/7_2.html">Aufgabe 7.2: Stoppuhr</a><br />
+              <a href="/~srosau2s/we_tasks/task07/7_2.html"
+                >Aufgabe 7.2: Stoppuhr</a
+              ><br />
               <a href="/~srosau2s/we_tasks/task07/7_3.html"
                 >Aufgabe 7.3: Flexible Menü-Komponente</a
               >
@@ -81,7 +89,8 @@
           <v-expansion-panel>
             <v-expansion-panel-header>Ãœbung 8 - SVG</v-expansion-panel-header>
             <v-expansion-panel-content>
-              <a href="/~srosau2s/we_tasks/task08/8_1.html">Aufgabe 8.1: SVG-Diagramm</a
+              <a href="/~srosau2s/we_tasks/task08/8_1.html"
+                >Aufgabe 8.1: SVG-Diagramm</a
               ><br />
               <a href="/~srosau2s/we_tasks/task08/8_2.html"
                 >Aufgabe 8.2: Statistik-Balkendiagramm</a
@@ -93,7 +102,9 @@
               >Ãœbung 9 - WebApps</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="/~srosau2s/we_tasks/task09/9_1.html">Aufgabe 9.1: Routing</a><br />
+              <a href="/~srosau2s/we_tasks/task09/9_1.html"
+                >Aufgabe 9.1: Routing</a
+              ><br />
               <a href="/~srosau2s/we_tasks/task09/9_2.html"
                 >Aufgabe 9.2: State Management</a
               ><br />
@@ -126,7 +137,9 @@
               >Ãœbung 13 - React</v-expansion-panel-header
             >
             <v-expansion-panel-content>
-              <a href="/~srosau2s/we_tasks/task13/index.html">Aufgabe 13.1: React Login</a>
+              <a href="/~srosau2s/we_tasks/task13/index.html"
+                >Aufgabe 13.1: React Login</a
+              >
               <p />
               <b>Keine Zugangsdaten bekannt?</b> Diese React-Anwendung verwendet
               dasselbe Backend, wie der Content-Editor aus Ãœbung 12.
diff --git a/vue.config.js b/vue.config.js
index 366013c..9050765 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -1,5 +1,4 @@
 module.exports = {
   transpileDependencies: ["vuetify"],
-  "publicPath": "/~srosau2s/",
-
+  publicPath: "/~srosau2s/"
 };
-- 
GitLab


From 5d56d9736ec70b37261dcdb810b1c58b40eb98cd Mon Sep 17 00:00:00 2001
From: Sebastian Rosauer <sebastian-rosauer@outlook.de>
Date: Thu, 17 Sep 2020 11:29:54 +0200
Subject: [PATCH 7/7] added escape character in regex

---
 src/components/editor_components/Register.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/editor_components/Register.vue b/src/components/editor_components/Register.vue
index 1e34e5b..7cd2897 100644
--- a/src/components/editor_components/Register.vue
+++ b/src/components/editor_components/Register.vue
@@ -78,7 +78,7 @@ export default {
     nickname: "",
     nicknameRules: [
       v => !!v || "Nickname benötigt",
-      v => (!!v && /^[0-9a-zA-Z_- ]+$/.test(v)) || "Dateiname ungültig"
+      v => (!!v && /^[0-9a-zA-Z_\- ]+$/.test(v)) || "Dateiname ungültig"
     ],
     email: "",
     emailRules: [
-- 
GitLab