diff --git a/.eslintignore b/.eslintignore
index d20efc1f..4c5eee36 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,2 +1,3 @@
jest.config.js
test/*
+static/sw.js
diff --git a/.github/workflows/deployment-dev.yml b/.github/workflows/deployment-dev.yml
index f5d10570..5fe08766 100644
--- a/.github/workflows/deployment-dev.yml
+++ b/.github/workflows/deployment-dev.yml
@@ -16,7 +16,10 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: 16
- - run: yarn install && yarn ci-dev-build
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 8
+ - run: pnpm install && pnpm ci-dev-build
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
- uses: actions/setup-node@v3
diff --git a/.github/workflows/deployment-live.yml b/.github/workflows/deployment-live.yml
index 3258ed0f..16c50a74 100644
--- a/.github/workflows/deployment-live.yml
+++ b/.github/workflows/deployment-live.yml
@@ -14,10 +14,13 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: 16
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 8
- name: Install and Build 🔧
run: |
- yarn install
- yarn nuxt generate
+ pnpm install
+ pnpm nuxt generate
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
- name: Deploy 🚀
diff --git a/.github/workflows/deployment-pr.yml b/.github/workflows/deployment-pr.yml
index c1f458e7..92d4f8ff 100644
--- a/.github/workflows/deployment-pr.yml
+++ b/.github/workflows/deployment-pr.yml
@@ -16,7 +16,10 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: 16
- - run: yarn install && yarn ci-dev-build
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 8
+ - run: pnpm install && pnpm ci-dev-build
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
- uses: actions/setup-node@v3
diff --git a/.github/workflows/husky.yml b/.github/workflows/husky.yml
index 80edb7b7..d291a53f 100644
--- a/.github/workflows/husky.yml
+++ b/.github/workflows/husky.yml
@@ -20,12 +20,13 @@ jobs:
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 8
- uses: actions/setup-node@v3
with:
node-version: 16
- - name: install yarn
- run: npm install -g yarn
- name: install dependencies
- run: yarn install
- - run: yarn run prettier --write .
- - run: yarn run eslint .
+ run: pnpm install
+ - run: pnpm exec prettier --write .
+ - run: pnpm exec eslint .
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 00000000..b6a7d89c
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+16
diff --git a/.prettierignore b/.prettierignore
index 381b1b84..5e32d445 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -2,3 +2,4 @@
*.md
node_modules
coverage
+pnpm-lock.yaml
diff --git a/.python-version b/.python-version
new file mode 100644
index 00000000..2c073331
--- /dev/null
+++ b/.python-version
@@ -0,0 +1 @@
+3.11
diff --git a/.tool-versions b/.tool-versions
new file mode 100644
index 00000000..074c8849
--- /dev/null
+++ b/.tool-versions
@@ -0,0 +1,3 @@
+nodejs 16.20.2
+python 3.11.9
+pnpm 8.15.8
diff --git a/README.md b/README.md
index ef8dd618..8990b856 100644
--- a/README.md
+++ b/README.md
@@ -19,20 +19,21 @@ Please report bugs in the github issues.
# Running whatsanalyze locally
## Build Setup
+We use node 16, with 18 we had issues with our linter. The project also needs python to be installed, but the version needs to be `3.11` or lower.
```bash
# install dependencies
-$ yarn install
+$ pnpm install
# serve with hot reload at localhost:3000
-$ yarn dev
+$ pnpm dev
# build for production and launch server
-$ yarn build
-$ yarn start
+$ pnpm build
+$ pnpm start
# generate static project
-$ yarn generate
+$ pnpm generate
```
Search for prettier and eslint in pycharm to set it up on saving a file.
diff --git a/components/About.vue b/components/About.vue
index 073fff49..7c08b785 100644
--- a/components/About.vue
+++ b/components/About.vue
@@ -23,8 +23,11 @@
sm="6"
>
-
+
{{ person.name }}
@@ -40,13 +43,13 @@
-
+
-
+
@@ -66,20 +69,20 @@ export default {
// eslint-disable-next-line no-undef
require("~/assets/img/uni/Otago_Logo.png"),
// eslint-disable-next-line no-undef
- require("~/assets/img/uni/Stockholm_Logo.png")
+ require("~/assets/img/uni/Stockholm_Logo.png"),
],
persons: [
{
// eslint-disable-next-line no-undef
image: require("~/assets/img/us/Sebastian_WA.jpg"),
name: "Sebastian Fellner",
- description: ["Computer Science MSc", "AI Enthusiast"]
+ description: ["Computer Science MSc", "AI Enthusiast"],
},
{
// eslint-disable-next-line no-undef
image: require("~/assets/img/us/Paul_WA.jpg"),
name: "Paul Kehnel",
- description: ["Computer Science MSc", "Bicycle Dude"]
+ description: ["Computer Science MSc", "Bicycle Dude"],
},
{
// eslint-disable-next-line no-undef
@@ -91,11 +94,11 @@ export default {
// eslint-disable-next-line no-undef
image: require("~/assets/img/us/Moritz_WA.jpeg"),
name: "Moritz Wolf",
- description: ["Robotics MSc", "Outdoor Specialist"]
- }
- ]
+ description: ["Robotics MSc", "Outdoor Specialist"],
+ },
+ ],
};
- }
+ },
};
diff --git a/components/ArrowDown.vue b/components/ArrowDown.vue
index 39d65ef3..05c39ef0 100644
--- a/components/ArrowDown.vue
+++ b/components/ArrowDown.vue
@@ -1,7 +1,12 @@
-
+
mdi-chevron-down
@@ -14,8 +19,8 @@ export default {
methods: {
goToExportExplainer() {
this.$vuetify.goTo(".exportexplainer", { duration: 300 });
- }
- }
+ },
+ },
};
@@ -35,4 +40,4 @@ export default {
opacity: 0.5;
}
}
-
\ No newline at end of file
+
diff --git a/components/ChatVisualization/Chat.vue b/components/ChatVisualization/Chat.vue
index 2511100c..1575a996 100644
--- a/components/ChatVisualization/Chat.vue
+++ b/components/ChatVisualization/Chat.vue
@@ -83,10 +83,7 @@
"
class="my-8"
>
-
+
Load next {{ offset }} messages
@@ -106,18 +103,18 @@ export default {
return {
startIdx: 0,
selectedEgo: "",
- offset: 20
+ offset: 20,
};
},
methods: {
parseMessage(message) {
const validUrl = new RegExp(
"(https?:\\/\\/)?" + // protocol
- "((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|" + // domain name
- "((\\d{1,3}\\.){3}\\d{1,3}))" + // OR ip (v4) address
- "(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*" + // port and path
- "(\\?[;&a-z\\d%_.~+=-]*)?" + // query string
- "(\\#[-a-z\\d_]*)?",
+ "((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|" + // domain name
+ "((\\d{1,3}\\.){3}\\d{1,3}))" + // OR ip (v4) address
+ "(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*" + // port and path
+ "(\\?[;&a-z\\d%_.~+=-]*)?" + // query string
+ "(\\#[-a-z\\d_]*)?",
"i"
);
const words = message.split(" ");
@@ -152,8 +149,8 @@ export default {
this.startIdx += this.offset;
const container = this.$el.querySelector("#chat");
container.scrollTop = 0;
- }
- }
+ },
+ },
};
@@ -171,7 +168,7 @@ export default {
overflow: scroll;
overflow-x: hidden;
background-color: rgb(13, 20, 24);
- background-image: url("https://whatsapp-chat-parser.netlify.app/static/media/bg-dark.ffb9199c.png");
+ background-image: url("/dark-bg.jpg");
}
.myMessage {
diff --git a/components/ChatVisualization/PdfDownloadPopup.vue b/components/ChatVisualization/PdfDownloadPopup.vue
index e45ed50c..f649f4c6 100644
--- a/components/ChatVisualization/PdfDownloadPopup.vue
+++ b/components/ChatVisualization/PdfDownloadPopup.vue
@@ -82,12 +82,9 @@
Supporting us keeps the 💻 running 🎉
-
+
+
+
\ No newline at end of file
+
diff --git a/components/DownloadPopup.vue b/components/DownloadPopup.vue
index 8644443e..00c2fef8 100644
--- a/components/DownloadPopup.vue
+++ b/components/DownloadPopup.vue
@@ -22,7 +22,7 @@
-
+
{{ $t("didWeMake") }}
{{ $t("buyUsCoffee") }}
@@ -65,12 +65,8 @@
-
+
+
diff --git a/components/ExportExplainer.vue b/components/ExportExplainer.vue
index aa07fc1f..98c574bd 100644
--- a/components/ExportExplainer.vue
+++ b/components/ExportExplainer.vue
@@ -9,9 +9,8 @@
:key="data.title"
class="text-body-1 text-md-h4"
grow
- >{{ data.title }}
-
+ >{{ data.title }}
+
@@ -37,9 +36,8 @@
:disabled="!installButtonStatus"
class="mt-5 pa-2 white--text btn-color"
@click="downloadPWA"
- >{{ $t("addToHomescreen") }}
-
+ >{{ $t("addToHomescreen") }}
+
-
+
@@ -132,7 +129,11 @@ import img5 from "@/assets/img/Android/5.png";
import img5_lazy from "@/assets/img/Android/5copy.png";
import img6 from "@/assets/img/Android/6.png";
import img6_lazy from "@/assets/img/Android/6copy.png";
-import { GTAG_INSTALL, GTAG_INTERACTION, gtagEvent } from "~/functions/gtagValues";
+import {
+ GTAG_INSTALL,
+ GTAG_INTERACTION,
+ gtagEvent,
+} from "~/functions/gtagValues";
let apple = () => false;
// eslint-disable-next-line no-undef
@@ -150,12 +151,12 @@ if (process.browser) {
export default {
props: {
cta: {
- default: function() {
+ default: function () {
return "selectFile";
},
- type: String
+ type: String,
},
- to: { default: null, type: String }
+ to: { default: null, type: String },
},
data() {
return {
@@ -174,74 +175,74 @@ export default {
imgLazy: iOS_img1_lazy,
text: "",
x: "50%",
- y: "10%"
+ y: "10%",
},
{
img: iOS_img2,
imgLazy: iOS_img2_lazy,
text: "",
x: "50%",
- y: "88%"
+ y: "88%",
},
{
img: iOS_img3,
imgLazy: iOS_img3_lazy,
text: "",
x: "20%",
- y: "61%"
+ y: "61%",
},
{
img: iOS_img4,
imgLazy: iOS_img4_lazy,
text: "",
x: "50%",
- y: "76%"
+ y: "76%",
},
{
img: iOS_img5,
imgLazy: iOS_img5_lazy,
text: "",
x: "50%",
- y: "63%"
+ y: "63%",
},
{
img: iOS_img6,
imgLazy: iOS_img6_lazy,
text: "",
x: "50%",
- y: "32%"
+ y: "32%",
},
{
img: iOS_img7,
imgLazy: iOS_img7_lazy,
text: "",
x: "50%",
- y: "81.5%"
- }
+ y: "81.5%",
+ },
],
tabItems: [
{
- text: "tabItemiOS1"
+ text: "tabItemiOS1",
},
{
- text: "tabItemiOS2"
+ text: "tabItemiOS2",
},
{
- text: "tabItemiOS3"
+ text: "tabItemiOS3",
},
{
- text: "tabItemiOS4"
+ text: "tabItemiOS4",
},
{
- text: "tabItemiOS5"
+ text: "tabItemiOS5",
},
{
- text: "tabItemiOS6"
+ text: "tabItemiOS6",
},
{
- text: "tabItemiOS7"
- }
- ]
+ text: "tabItemiOS7",
+ },
+ ],
},
{
title: "Android",
@@ -252,66 +253,66 @@ export default {
imgLazy: img1_lazy,
text: "",
x: "78%",
- y: "51%"
+ y: "51%",
},
{
img: img2,
imgLazy: img2_lazy,
text: "",
x: "89%",
- y: "13%"
+ y: "13%",
},
{
img: img3,
imgLazy: img3_lazy,
text: "",
x: "60%",
- y: "37%"
+ y: "37%",
},
{
img: img4,
imgLazy: img4_lazy,
text: "",
x: "60%",
- y: "27%"
+ y: "27%",
},
{
img: img5,
imgLazy: img5_lazy,
text: "",
x: "67%",
- y: "48%"
+ y: "48%",
},
{
img: img6,
imgLazy: img6_lazy,
text: "",
x: "14%",
- y: "73%"
- }
+ y: "73%",
+ },
],
tabItems: [
{
- text: "tabItemAndroid1"
+ text: "tabItemAndroid1",
},
{
- text: "tabItemAndroid2"
+ text: "tabItemAndroid2",
},
{
- text: "tabItemAndroid3"
+ text: "tabItemAndroid3",
},
{
- text: "tabItemAndroid4"
+ text: "tabItemAndroid4",
},
{
- text: "tabItemAndroid5"
+ text: "tabItemAndroid5",
},
{
- text: "tabItemAndroid6"
- }
- ]
- }
- ]
+ text: "tabItemAndroid6",
+ },
+ ],
+ },
+ ],
};
},
created() {
@@ -323,7 +324,7 @@ export default {
gtagEvent("jump_to_filehandler_" + this.tab, GTAG_INTERACTION, 0);
this.$vuetify.goTo(".filehandler", {
duration: 300,
- offset: 100
+ offset: 100,
});
}
},
@@ -368,8 +369,8 @@ export default {
});
}
},
- gtagEvent
- }
+ gtagEvent,
+ },
};
diff --git a/components/FeedbackBtn.vue b/components/FeedbackBtn.vue
index 7d0487f8..f6431bc5 100644
--- a/components/FeedbackBtn.vue
+++ b/components/FeedbackBtn.vue
@@ -116,14 +116,14 @@ export default {
email: "",
emailRules: [
(v) => !!v || this.$t("email"),
- (v) => /.+@.+\..+/.test(v) || this.$t("email")
+ (v) => /.+@.+\..+/.test(v) || this.$t("email"),
],
text: "",
starValue: 0,
starRules: [(v) => !!v || this.$t("rating")],
select: null,
dialog: false,
- message: null
+ message: null,
};
},
@@ -141,14 +141,14 @@ export default {
text: this.text,
rating: this.starValue,
locale: this.$i18n.locale,
- created: this.$fireModule.firestore.FieldValue.serverTimestamp()
+ created: this.$fireModule.firestore.FieldValue.serverTimestamp(),
})
.then(() => {
this.message = this.$t("messageReceived");
});
}
- }
- }
+ },
+ },
};