From 95771322bc2cb6f930c3b1ead54b29e36d8b639c Mon Sep 17 00:00:00 2001 From: JosephK Date: Wed, 3 Nov 2021 15:15:07 +0100 Subject: [PATCH 1/9] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20vue-fs=2021.7.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 9 +- .gitlab-ci.yml | 40 +- Makefile | 18 - README.md | 5 +- app/App.vue | 120 - app/assets/img/icons/fa/solid/cloud.svg | 1 - app/assets/img/icons/fa/solid/egg.svg | 1 - .../img/icons/fa/solid/external-link-alt.svg | 1 - app/assets/img/icons/fa/solid/language.svg | 1 - app/assets/img/icons/fa/solid/leaf.svg | 1 - app/assets/img/icons/fa/solid/pause.svg | 1 - app/assets/img/icons/fa/solid/play.svg | 1 - app/assets/img/icons/fa/solid/plus.svg | 1 - .../img/icons/fa/solid/question-circle.svg | 1 - app/assets/img/icons/fa/solid/random.svg | 1 - app/assets/img/icons/fa/solid/times.svg | 1 - app/assets/img/icons/fa/solid/video.svg | 1 - app/assets/img/opengraph/home.jpg | Bin 78742 -> 0 bytes app/assets/scss/fonts/fork-awesome.scss | 22 - app/assets/scss/frama/bootstrap4.scss | 32 - app/assets/scss/main.scss | 35 - app/components/partials/Header.vue | 33 - app/data/project.tpl.yml | 46 - app/locales/fr/_main.yml | 93 - commons | 1 + config/common.js | 79 + config/dev.js | 40 + config/env.js | 163 + config/feed.js | 54 + config/preview.js | 64 + config/prod.js | 64 + config/symlinks.js | 52 + index.html | 40 - package-lock.json | 13177 ++++++---------- package.json | 58 +- postcss.config.js | 5 - public/favicon.ico | Bin 0 -> 4286 bytes public/img/dots.png | Bin 0 -> 5670 bytes .../img/fr/slide-framatalk01.png | Bin .../img/fr/slide-framatalk02.png | Bin .../img/fr/slide-framatalk03.png | Bin .../img/fr/slide-framatalk04.png | Bin .../img/framatalk_watermark.png | Bin .../img/framatalk_watermark.xcf | Bin .../img/icons/apple-touch-icon.png | Bin {app/assets => public}/img/icons/favicon.png | Bin public/img/intro.jpg | Bin 0 -> 320261 bytes public/img/logo.svg | 1 + public/img/opengraph/home.jpg | Bin 0 -> 144485 bytes public/img/screens/1.png | Bin 0 -> 219551 bytes public/img/screens/2.png | Bin 0 -> 219551 bytes public/img/screens/3.png | Bin 0 -> 219551 bytes public/index.html | 10 + src/App.vue | 109 + .../partials => src/components}/Carousel.vue | 0 src/components/Header.vue | 67 + src/data.js | 39 + src/data/main.tpl.yml | 45 + app/data/project.yml => src/data/main.yml | 43 +- src/i18n.js | 118 + {app => src}/index.js | 0 src/main.js | 47 + {app => src}/mixins/instanceStatus.js | 0 src/router.js | 73 + .../scss/fonts/dejavu-sans.scss | 16 +- {app/assets => src}/scss/fonts/roboto.scss | 0 src/scss/frama/bootstrap4.scss | 6 + .../scss/frameworks/bootstrap4.scss | 14 +- src/scss/frameworks/icons.scss | 1636 ++ src/scss/frameworks/iconslk.scss | 24 + src/scss/main.scss | 21 + .../_main.yml => src/translations/br/main.yml | 0 .../_main.yml => src/translations/ca/main.yml | 0 .../_main.yml => src/translations/de/main.yml | 0 .../_main.yml => src/translations/en/main.yml | 25 +- .../_main.yml => src/translations/es/main.yml | 0 src/translations/fr/main.yml | 93 + .../_main.yml => src/translations/it/main.yml | 0 .../_main.yml => src/translations/oc/main.yml | 0 .../_main.yml => src/translations/uk/main.yml | 0 .../pages/Home.vue => src/views/Home.old | 0 src/views/Home.vue | 72 + {app/components/pages => src/views}/Info.vue | 65 +- src/views/home/Intro.vue | 442 + src/views/home/Limit.vue | 60 + src/views/home/What.vue | 169 + src/wiki.js | 123 + tools/cleanyml.sh | 45 - webpack.config.js | 280 +- 89 files changed, 9024 insertions(+), 8881 deletions(-) delete mode 100644 Makefile delete mode 100644 app/App.vue delete mode 100644 app/assets/img/icons/fa/solid/cloud.svg delete mode 100644 app/assets/img/icons/fa/solid/egg.svg delete mode 100644 app/assets/img/icons/fa/solid/external-link-alt.svg delete mode 100644 app/assets/img/icons/fa/solid/language.svg delete mode 100644 app/assets/img/icons/fa/solid/leaf.svg delete mode 100644 app/assets/img/icons/fa/solid/pause.svg delete mode 100644 app/assets/img/icons/fa/solid/play.svg delete mode 100644 app/assets/img/icons/fa/solid/plus.svg delete mode 100644 app/assets/img/icons/fa/solid/question-circle.svg delete mode 100644 app/assets/img/icons/fa/solid/random.svg delete mode 100644 app/assets/img/icons/fa/solid/times.svg delete mode 100644 app/assets/img/icons/fa/solid/video.svg delete mode 100644 app/assets/img/opengraph/home.jpg delete mode 100644 app/assets/scss/fonts/fork-awesome.scss delete mode 100644 app/assets/scss/frama/bootstrap4.scss delete mode 100644 app/assets/scss/main.scss delete mode 100644 app/components/partials/Header.vue delete mode 100644 app/data/project.tpl.yml delete mode 100644 app/locales/fr/_main.yml create mode 120000 commons create mode 100644 config/common.js create mode 100644 config/dev.js create mode 100644 config/env.js create mode 100644 config/feed.js create mode 100644 config/preview.js create mode 100644 config/prod.js create mode 100644 config/symlinks.js delete mode 100644 index.html delete mode 100644 postcss.config.js create mode 100644 public/favicon.ico create mode 100644 public/img/dots.png rename {app/assets => public}/img/fr/slide-framatalk01.png (100%) rename {app/assets => public}/img/fr/slide-framatalk02.png (100%) rename {app/assets => public}/img/fr/slide-framatalk03.png (100%) rename {app/assets => public}/img/fr/slide-framatalk04.png (100%) rename {app/assets => public}/img/framatalk_watermark.png (100%) rename {app/assets => public}/img/framatalk_watermark.xcf (100%) rename {app/assets => public}/img/icons/apple-touch-icon.png (100%) rename {app/assets => public}/img/icons/favicon.png (100%) create mode 100644 public/img/intro.jpg create mode 100644 public/img/logo.svg create mode 100644 public/img/opengraph/home.jpg create mode 100644 public/img/screens/1.png create mode 100644 public/img/screens/2.png create mode 100644 public/img/screens/3.png create mode 100644 public/index.html create mode 100644 src/App.vue rename {app/components/partials => src/components}/Carousel.vue (100%) create mode 100644 src/components/Header.vue create mode 100644 src/data.js create mode 100644 src/data/main.tpl.yml rename app/data/project.yml => src/data/main.yml (94%) create mode 100644 src/i18n.js rename {app => src}/index.js (100%) create mode 100644 src/main.js rename {app => src}/mixins/instanceStatus.js (100%) create mode 100644 src/router.js rename {app/assets => src}/scss/fonts/dejavu-sans.scss (56%) rename {app/assets => src}/scss/fonts/roboto.scss (100%) create mode 100644 src/scss/frama/bootstrap4.scss rename {app/assets => src}/scss/frameworks/bootstrap4.scss (81%) create mode 100644 src/scss/frameworks/icons.scss create mode 100644 src/scss/frameworks/iconslk.scss create mode 100644 src/scss/main.scss rename app/locales/br/_main.yml => src/translations/br/main.yml (100%) rename app/locales/ca/_main.yml => src/translations/ca/main.yml (100%) rename app/locales/de/_main.yml => src/translations/de/main.yml (100%) rename app/locales/en/_main.yml => src/translations/en/main.yml (80%) rename app/locales/es/_main.yml => src/translations/es/main.yml (100%) create mode 100644 src/translations/fr/main.yml rename app/locales/it/_main.yml => src/translations/it/main.yml (100%) rename app/locales/oc/_main.yml => src/translations/oc/main.yml (100%) rename app/locales/uk/_main.yml => src/translations/uk/main.yml (100%) rename app/components/pages/Home.vue => src/views/Home.old (100%) create mode 100644 src/views/Home.vue rename {app/components/pages => src/views}/Info.vue (79%) create mode 100644 src/views/home/Intro.vue create mode 100644 src/views/home/Limit.vue create mode 100644 src/views/home/What.vue create mode 100644 src/wiki.js delete mode 100755 tools/cleanyml.sh diff --git a/.gitignore b/.gitignore index 60983c2..f3bbe79 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,10 @@ node_modules/ -public/ -.zanata-cache/etag-cache.xml +dist/ npm-debug.log -/zanata.xml pnpm-lock.yaml tools/backup/ tools/tmp/ -app/locales/*/sfs.yml +src/translations/*/sfs.yml +src/translations/*/hos.yml +public/wiki/ +public/wiki.json diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1ed4d12..28be827 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: framasoft/vuefs:latest +image: node:12-buster stages: - test - deploy @@ -7,14 +7,15 @@ test: stage: test script: - npm install -g yaml-lint - - for f in $(find ./app/ -name "*.yml" -type f);do echo $f; yamllint $f;done; + - for f in $(find ./src/ -name "*.yml" -type f);do echo $f; yamllint $f;done; pages: stage: deploy script: - npm run commons - - npm run preview - - mv -f public/$(echo $CI_PAGES_URL | cut -d/ -f4-)/* public + - npm run sfs && npm run hos + - npm run prod + - rm -r public/ && mv -f dist/$(echo $CI_PAGES_URL | cut -d/ -f4-)/ public/ - find public -type f -iregex '.*\.\(htm\|html\|txt\|text\|js\|css\)$' -execdir gzip -f --keep {} \; artifacts: paths: @@ -27,27 +28,30 @@ pages: - master except: variables: - - $DEPLOYEMENT_KEY - - $DEPLOYEMENT_KNOWN_HOSTS - - $DEPLOYEMENT_USER - - $DEPLOYEMENT_HOST + - $DEPLOYMENT_KEY + - $DEPLOYMENT_USER + - $DEPLOYMENT_HOST production: stage: deploy +# before_script: +# - apt-get update +# - apt-get --yes --force-yes install rsync script: - npm run commons - - npm run prod -- --root=accueil - - cp ./public/accueil/fr/index.html ./public/accueil/index.html - - for f in $(find -type l);do cp --remove-destination $(readlink -f $f) $f;done; - - mkdir "${HOME}/.ssh" - - chmod 700 "${HOME}/.ssh" + - npm run sfs && npm run hos + - npm run prod -- --base=abc + - rm -r public/ && mv dist/ public/ + - cp ./public/abc/fr/index.html ./public/abc/index.html + - cd public/abc && for f in $(find -type l);do cp --remove-destination $(readlink -f $f) $f;done; - eval `ssh-agent -s` - - ssh-add <(echo "${DEPLOYEMENT_KEY}" | base64 --decode -i); - - cd public && echo "put -r ." | sftp -o "VerifyHostKeyDNS yes" ${DEPLOYEMENT_USER}@${DEPLOYEMENT_HOST}; + - ssh-add <(echo "${DEPLOYMENT_KEY}" | base64 --decode -i); + - echo "put -r ." | sftp -o "VerifyHostKeyDNS yes" ${DEPLOYMENT_USER}@${DEPLOYMENT_HOST}; +# - rsync -a --rsh='ssh -o "VerifyHostKeyDNS yes"' --delete . ${DEPLOYMENT_USER}@${DEPLOYMENT_HOST}; only: refs: - master variables: - - $DEPLOYEMENT_KEY - - $DEPLOYEMENT_USER - - $DEPLOYEMENT_HOST + - $DEPLOYMENT_KEY + - $DEPLOYMENT_USER + - $DEPLOYMENT_HOST diff --git a/Makefile b/Makefile deleted file mode 100644 index d0bb14a..0000000 --- a/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -backup-locales: - mkdir -p tools/backup/ - cp -r app/locales/* tools/backup/ - -restore-locales: - cp -r tools/backup/* app/locales/ - -clean-locales: backup-locales - cd tools && ./cleanyml.sh - -diff-locales: - (meld app/locales/ tools/backup/ &) - -preview: - npm run preview - -build: - npm run prod diff --git a/README.md b/README.md index 1964900..495982d 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![](https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/GitLab_Logo.svg/48px-GitLab_Logo.svg.png)](https://framagit.org) +[![](https://framasoft.org/nav/img/icons/ati/sites/git.png)](https://framagit.org) 🇬🇧 **Framasoft uses GitLab** for the development of its free softwares. Our Github repositories are only mirrors. If you want to work with us, **fork us on [framagit.org](https://framagit.org)**. (no registration needed, you can sign in with your Github account) @@ -10,15 +10,12 @@ Si vous souhaitez travailler avec nous, **forkez-nous sur [framagit.org](https:/ Framatalk est un service en ligne de visio-conférence que [Framasoft](https://framasoft.org) propose sur le site : . Il repose sur le logiciel [Jitsi Meet](https://jitsi.org/Projects/JitsiMeet) que nous n'avons pas modifié. -La page d'accueil s'appuie sur le framework CSS Bootstrap dont les fichiers se trouvent dans la [Framanav](https://framagit.org/framasoft/framanav). Si vous souhaitez traduire la page d’accueil, allez sur . - * * * Framatalk is an visio-conference online service provided by [Framasoft](https://framasoft.org) on . It’s based on [Jitsi Meet](https://jitsi.org/Projects/JitsiMeet) that we didn’t modify. -The homepage uses the CSS framework Bootstrap which you can find files in the [Framanav](https://framagit.org/framasoft/framanav). If you want to translate the homepage, go on . diff --git a/app/App.vue b/app/App.vue deleted file mode 100644 index a13490f..0000000 --- a/app/App.vue +++ /dev/null @@ -1,120 +0,0 @@ - - - diff --git a/app/assets/img/icons/fa/solid/cloud.svg b/app/assets/img/icons/fa/solid/cloud.svg deleted file mode 100644 index 38d2dc5..0000000 --- a/app/assets/img/icons/fa/solid/cloud.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/egg.svg b/app/assets/img/icons/fa/solid/egg.svg deleted file mode 100644 index 804ac67..0000000 --- a/app/assets/img/icons/fa/solid/egg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/external-link-alt.svg b/app/assets/img/icons/fa/solid/external-link-alt.svg deleted file mode 100644 index 859914b..0000000 --- a/app/assets/img/icons/fa/solid/external-link-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/language.svg b/app/assets/img/icons/fa/solid/language.svg deleted file mode 100644 index e45129e..0000000 --- a/app/assets/img/icons/fa/solid/language.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/leaf.svg b/app/assets/img/icons/fa/solid/leaf.svg deleted file mode 100644 index f31abe1..0000000 --- a/app/assets/img/icons/fa/solid/leaf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/pause.svg b/app/assets/img/icons/fa/solid/pause.svg deleted file mode 100644 index 63a15b6..0000000 --- a/app/assets/img/icons/fa/solid/pause.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/play.svg b/app/assets/img/icons/fa/solid/play.svg deleted file mode 100644 index d7fa87f..0000000 --- a/app/assets/img/icons/fa/solid/play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/plus.svg b/app/assets/img/icons/fa/solid/plus.svg deleted file mode 100644 index 95992e1..0000000 --- a/app/assets/img/icons/fa/solid/plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/question-circle.svg b/app/assets/img/icons/fa/solid/question-circle.svg deleted file mode 100644 index a8f4243..0000000 --- a/app/assets/img/icons/fa/solid/question-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/random.svg b/app/assets/img/icons/fa/solid/random.svg deleted file mode 100644 index 3c23b13..0000000 --- a/app/assets/img/icons/fa/solid/random.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/times.svg b/app/assets/img/icons/fa/solid/times.svg deleted file mode 100644 index 571a32a..0000000 --- a/app/assets/img/icons/fa/solid/times.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/icons/fa/solid/video.svg b/app/assets/img/icons/fa/solid/video.svg deleted file mode 100644 index e14b3b9..0000000 --- a/app/assets/img/icons/fa/solid/video.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/img/opengraph/home.jpg b/app/assets/img/opengraph/home.jpg deleted file mode 100644 index d769091dd3207b736ada9df47b1df9649b8cd50b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78742 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⁢_Wy7pO*^9q9;1r&pVJsgNz!aBLi<33Ew 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%0D{+kSU$=ocT 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 diff --git a/app/assets/scss/fonts/fork-awesome.scss b/app/assets/scss/fonts/fork-awesome.scss deleted file mode 100644 index 64898bd..0000000 --- a/app/assets/scss/fonts/fork-awesome.scss +++ /dev/null @@ -1,22 +0,0 @@ -@import '~fork-awesome/scss/variables'; -@import '~fork-awesome/scss/mixins'; -@import '~fork-awesome/scss/functions'; - -@font-face { - font-family: 'ForkAwesome'; - src: url('~fork-awesome/fonts/forkawesome-webfont.woff2') format('woff2'), - url('~fork-awesome/fonts/forkawesome-webfont.woff') format('woff'); - font-weight: normal; - font-style: normal; -} - -@import '~fork-awesome/scss/core'; -@import '~fork-awesome/scss/larger'; -@import '~fork-awesome/scss/fixed-width'; -@import '~fork-awesome/scss/list'; -@import '~fork-awesome/scss/bordered-pulled'; -@import '~fork-awesome/scss/animated'; -@import '~fork-awesome/scss/rotated-flipped'; -@import '~fork-awesome/scss/stacked'; -@import '~fork-awesome/scss/icons'; -@import '~fork-awesome/scss/screen-reader'; \ No newline at end of file diff --git a/app/assets/scss/frama/bootstrap4.scss b/app/assets/scss/frama/bootstrap4.scss deleted file mode 100644 index 467bd54..0000000 --- a/app/assets/scss/frama/bootstrap4.scss +++ /dev/null @@ -1,32 +0,0 @@ -@import '~vue-fs-commons/app/assets/scss/frama/bootstrap4/alert'; -@import '~vue-fs-commons/app/assets/scss/frama/bootstrap4/badge'; -@import '~vue-fs-commons/app/assets/scss/frama/bootstrap4/buttons'; -@import '~vue-fs-commons/app/assets/scss/frama/bootstrap4/links'; -@import '~vue-fs-commons/app/assets/scss/frama/bootstrap4/type&code'; -@import '~vue-fs-commons/app/assets/scss/frama/bootstrap4/carousel'; - -#f-i18n { - button { - color: $secondary; - fill: $secondary; - border: none; - - &:hover { - color: $light; - fill: $light; - } - } - - &.show button{ - color: $light; - fill: $light; - } - - li a { - background: transparent; - - &:hover, &focus { - background-color: $light; - } - } -} diff --git a/app/assets/scss/main.scss b/app/assets/scss/main.scss deleted file mode 100644 index dc59db3..0000000 --- a/app/assets/scss/main.scss +++ /dev/null @@ -1,35 +0,0 @@ -@import '~vue-fs-commons/app/assets/scss/frama/colors'; - -/* Variables */ - -/* Brown variant -$bsColor: (('f', 7), ('m', 7), ('m', 8), ('m', 2), ('b', 7), ('v', 6), ('o', 7), ('r', 8), ('d', 7)); - -$bgcolor: c(m, 3); - -$secondary: bs(c, 2); -$dark: bs(c, 3); -$light: bs(c, 4); -*/ - -$ombre: 0px 3px 4px rgba(50, 50, 50, 0.2); -$img-ombre: 0px 2px 6px rgba(50, 50, 50, 0.4); -$carousel-ombre: 0px 3px 3px rgba(50, 50, 50, 0.5); -$button-ombre: 0px 1px 1px rgba(50, 50, 50, 0.5); - -/* Frameworks */ -@import 'frameworks/bootstrap4'; - -/* Fonts */ -@import 'fonts/dejavu-sans'; -@import 'fonts/roboto'; - -/* Frama */ -@import 'frama/bootstrap4'; -@import '~vue-fs-commons/app/assets/scss/frama/common'; - -/* CHATONS color */ -$chatons: #ca8e0e; -#frama_other_message a { - color: $chatons; -} diff --git a/app/components/partials/Header.vue b/app/components/partials/Header.vue deleted file mode 100644 index 68c0c0d..0000000 --- a/app/components/partials/Header.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - - diff --git a/app/data/project.tpl.yml b/app/data/project.tpl.yml deleted file mode 100644 index 4b4637c..0000000 --- a/app/data/project.tpl.yml +++ /dev/null @@ -1,46 +0,0 @@ -# NB: The content of this file overwrites what is defined in commons/*.yml -# For example, -# link: -# soft: https://frama.pink -# -# will overwrites the value above in commons/link.yml -# soft: https://framasoft.org - -commons: # import everything if empty -# - blog - - cloud - - color -# - country - - doc -# - emoji - - git - - icon - - license - - link - - people - - soft - - src - - status - - taxonomy - -meta: - title: Framasoft - author: Framasoft - canonical: https://framasoft.org - description: Description is neededed for search engines, Twitter card and OpenGraph -# i18n: https://weblate.framasoft.org/projects/ - preload: - - /fonts/Roboto-Regular.woff2 - - /img/icons/apple-touch-icon.png - - /img/icons/favicon.png - example: - title: '@:meta.title - @:about' - description: '@:meta.lead' - preload: - - /img/opengraph/home.jpg - -txt: -# soft: text from color.soft (but you can reassign it here) - -html: -# soft: color.soft diff --git a/app/locales/fr/_main.yml b/app/locales/fr/_main.yml deleted file mode 100644 index 8dff873..0000000 --- a/app/locales/fr/_main.yml +++ /dev/null @@ -1,93 +0,0 @@ -meta: - lead: VisioconfĂ©rence -what: - md: |- - @:color.talk vous permet de discuter avec vos amis sans installation - complexe de logiciel ou inscription.
- Vous discutez simplement, sans aucune analyse des données liées aux conversations.
- Tout se passe entre vous et vos amis, directement depuis votre navigateur web. -tip: |- - **Astuce** : si votre conversation subit des ralentissements, - c’est probablement un problème de bande passante (débit internet trop faible). - - Désactivez la vidéo (bouton « vidéo {icon} ») pour résoudre le problème ;) -public: - link: Lien du salon - create: Créer - change: Changer d'instance - atalk: un salon - external: Suite à une grande utilisation du service de vidéo-conférence @:color.talk - hébergé par l'association @:color.soft, ce salon sera créé sur **l'instance [{title}]({website})** - chatons: (membre du collectif [CHATONS](https://chatons.org)). - full_list: Liste complète des **{nbinstances} instances répertoriées**. - frama_other: Ce salon sera créé sur le service @:color.talk\. D'autres - CHATONS et structures proposent également un service - semblable en accès libre. -slides: -- '@:color.talk : une conversation audio/vidéo en deux clics' -- Autorisez l’accès à un micro -- Autorisez l’accès à une caméra -- Partagez l’adresse web (URL) pour échanger sur @:color.talk ! -help: - title: Prise en main - md: |- - 1. Créez un salon - 2. Autorisez votre navigateur à utiliser votre micro et votre webcam - 3. Invitez vos collaborateurs à vous rejoindre en leur envoyant par courriel - l’adresse du salon (cliquez sur le bouton « Inviter un participant {icon} » - dans la barre du bas pour l’obtenir) - - Dans les options, il vous est possible de protéger votre salon par un mot - de passe, tchatter, gérer vos contacts, activer/désactiver le son et la vidéo… -software: - title: Le logiciel - md: |- - @:color.talk repose sur le logiciel libre [@:soft.talk](@:src.talk) - - Il s’agit d’une instance parmi d’autres, [les développeurs de Jitsi Meet - proposent également la leur]({link}) - - Jitsi Meet est sous licence @:(license.apache2). -garden: - title: Cultivez votre jardin - md: |- - Pour participer au développement du logiciel, proposer des améliorations - ou simplement le télécharger, rendez-vous sur [le site de développement](@:src.talk) - - Si vous souhaitez installer ce logiciel pour votre propre usage et ainsi - gagner en autonomie, nous vous aidons sur : - -page_info: - title: Liste des instances Jitsi Meet - intro: Voici la liste des instances vers lequelles vous pouvez être redirigé⋅e⋅s - en créeant un salon de vidéo-conférence à partir de la page d’accueil de Framatalk. - title_pool: Liste des {nbinstances} instances dans le pool - add_yourself: Si vous êtes **une organisation** ayant les ressources pour héberger - un tel service et souhaitez y être ajouté⋅e, vous pouvez nous contacter via [contact.framasoft.org](https://contact.framasoft.org). - title_other: Liste de {nbinstances} autres instances - intro_other: Nous ne connaissons pas spécialement ces instances, donc nous ne redirigons - pas vers elles car nous ne connaissons pas leurs politique de vie privée ni leur - capacité à tenir la charge mais nous les listons ci-dessous. - title_specific: Instances spécifiques - columns: - title: Nom de l’instance - chatons: Type - url: URL - country: Pays - instance: - type: - chatons: CHATONS - other: Autre - title_bbb: "Instances Big Blue Button" - description_bbb: "[Big Blue Button](https://bigbluebutton.org/) est un système de\ - \ visioconférence développé pour la formation à distance. Dans certains cas, il\ - \ peut s'agit d'une bonne alternative à Jitsi. Il est toutefois nécessaire d'avoir\ - \ un compte pour créer des salons de visioconférence." - audio_only: - title: Audioconférence - description: Si vous n'avez pas besoin de la vidéo, une réunion Mumble fera l'affaire. - Il est conseillé d'[installer le client Mumble](https://www.mumble.info/downloads/) - pour votre plateforme pour une meilleure expérience. - resources: - title: Ressources diff --git a/commons b/commons new file mode 120000 index 0000000..fb73ecf --- /dev/null +++ b/commons @@ -0,0 +1 @@ +./node_modules/vue-fs-commons/src/ \ No newline at end of file diff --git a/config/common.js b/config/common.js new file mode 100644 index 0000000..2ecbf79 --- /dev/null +++ b/config/common.js @@ -0,0 +1,79 @@ +/* eslint-disable import/no-commonjs */ +/* eslint-disable import/no-extraneous-dependencies */ +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const VueLoaderPlugin = require('vue-loader/lib/plugin'); +const Webpack = require('webpack'); + +function buildConfig(env) { + const config = { + entry: './src/main.js', + output: { + path: `${env.dist}${env.basepath}`, + publicPath: env.basepath, + }, + module: { + rules: [ + { + test: /\.vue$/, + loader: 'vue-loader', + }, + { + test: /\.(png|jpg|gif|svg)$/, + loader: 'file-loader', + options: { + name: '[path][name].[ext]', + }, + }, + { + test: /\.(ttf|eot|woff(2)?)(\?[a-z0-9=&.]+)?$/, + loader: 'file-loader', + options: { + name: 'fonts/[name].[ext]', + }, + }, + { + test: /\.ya?ml$/, + loader: 'yaml-import-loader', + }, + { + test: /\.s?css$/, + use: [ + 'vue-style-loader', + 'css-hot-loader', + MiniCssExtractPlugin.loader, + 'css-loader', + 'sass-loader', + ], + }, + { + enforce: 'pre', + test: /\.js$/, + exclude: /node_modules/, + loader: 'eslint-loader', + }, + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel-loader', + }, + ], + }, + resolve: { + alias: { + vue$: 'vue/dist/vue.esm.js', + }, + }, + plugins: [ + new VueLoaderPlugin(), + new CopyWebpackPlugin(env.assets), + new Webpack.DefinePlugin({ + 'process.env.CONFIG': JSON.stringify(env), + }), + ], + }; + + return config; +} + +module.exports = buildConfig; diff --git a/config/dev.js b/config/dev.js new file mode 100644 index 0000000..6a23613 --- /dev/null +++ b/config/dev.js @@ -0,0 +1,40 @@ +/* eslint-disable import/no-commonjs */ +/* eslint-disable import/no-extraneous-dependencies */ +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); + +function buildConfig(env) { + const config = Object.assign({}, require('./common')(env)); // eslint-disable-line + + config.output.filename = '[name].bundle.js'; + + Object.assign(config, { + devServer: { + contentBase: env.dist, + historyApiFallback: true, + hot: true, + inline: true, + open: false, + publicPath: '/', + writeToDisk: true, + }, + devtool: 'eval-source-map', + mode: 'development', + }); + + config.plugins.push( + new HtmlWebpackPlugin({ + title: 'DEVELOPMENT prerender-spa-plugin', + template: 'public/index.html', + filename: 'index.html', + }), + new MiniCssExtractPlugin({ + filename: '[name].css', + chunkFilename: '[id].css', + }), + ); + + return config; +} + +module.exports = buildConfig; diff --git a/config/env.js b/config/env.js new file mode 100644 index 0000000..ae76b53 --- /dev/null +++ b/config/env.js @@ -0,0 +1,163 @@ +/* eslint-disable global-require */ +/* eslint-disable import/no-commonjs */ +/* eslint-disable import/no-extraneous-dependencies */ + +const download = require('download'); +const fs = require('fs'); +const path = require('path'); +const yaml = require('js-yaml'); + +const data = yaml.load(fs.readFileSync('./src/data/main.yml', { encoding: 'utf-8' })); +if (!('config' in data)) { data.config = {}; } +if (!('wiki' in data.config)) { data.config.wiki = {}; } + +const mode = { + dev: process.env.NODE_ENV === 'development', + preview: /^pages/.test(process.env.CI_JOB_NAME) && process.env.NODE_ENV === 'production', + prod: !/^pages/.test(process.env.CI_JOB_NAME) && process.env.NODE_ENV === 'production', +}; + +const env = { + assets: [], + basepath: mode.preview + ? `${process.env.CI_PAGES_URL.replace(/^.*\/\/[^/]+/, '')}/` + : '/', + commons: { + available: [], + enabled: [], + }, + date: fs.statSync('./src').mtime, + dist: path.resolve(__dirname, '../dist'), + img: { + assets: './public/img/', + dist: './dist/img/', + }, + framanav: ('framanav' in data.config) ? data.config.framanav : false, + meta: data.meta, + mode: mode.preview ? 'preview' : process.env.NODE_ENV, + routes: [], + src: path.resolve(__dirname, '../src'), + translations: { + all: yaml.load(fs.readFileSync('./commons/translations/lang.yml', { encoding: 'utf-8' })), + available: [], + default: ('defaultLang' in data.config) ? data.config.defaultLang : 'en', + translate: ('translate' in data.config) ? data.config.translate : '', + }, + url: mode.preview + ? process.env.CI_PAGES_URL.replace(/\/?$/, '/').replace(/^http:/, 'https:') + : 'http://localhost:8080/', + views: [], + wiki: { + api: ('api' in data.config.wiki) ? data.config.wiki.api : '', + base: ('base' in data.config.wiki) ? data.config.wiki.base : '', + }, +}; + +if (mode.prod && env.meta.canonical !== undefined) { + env.url = env.meta.canonical.replace(/\/?$/, '/'); +} + +// Custom base +for (let i = 0; i < process.argv.length; i += 1) { + if (process.argv[i].indexOf('--base=') > -1) { + env.basepath = `/${process.argv[i].split('=')[1]}/`; + } +} +env.img.dist = `./dist${env.basepath}img/`; +env.base = env.basepath.replace(/\/$/, '').replace(/^\//, ''); + +// Get assets list +fs.readdirSync('./public').forEach((file) => { + env.assets.push({ from: path.resolve(__dirname, `../public/${file}`), to: file }); +}); + +// Get translations list +fs.readdirSync('./src/translations') + .forEach((lg) => { + if (env.translations[lg] === undefined) { + env.translations[lg] = []; + } + fs.readdirSync(`./src/translations/${lg}`) + .forEach((file) => { + if (/[A-Za-z0-9-]+\.ya?ml/.test(file)) { + env.translations[lg].push(file.replace(/([A-Za-z0-9-]+)\.ya?ml/, '$1')); + } + }); + }); + +env.translations.available = Object + .keys(env.translations.all) + .filter(lg => Object.keys(env.translations).includes(lg) + && (env.translations[lg].includes('main'))); + +// Get views list +fs.readdirSync('./src/views') + .forEach((file) => { + if (/[A-Za-z0-9-]+\.vue/.test(file)) { + env.views.push(file.replace(/([A-Za-z0-9-]+)\.vue/, '$1')); + } + }); + +// Get commons data list +fs.readdirSync('./commons/data') + .forEach((file) => { + if (/[A-Za-z0-9-]+\.ya?ml/.test(file)) { + env.commons.available.push(file.replace(/([A-Za-z0-9-]+)\.ya?ml/, '$1')); + } + }); +/* Take all data commons if enabled list is empty */ +[env.commons.enabled] = ('commons' in data.config && data.config.commons.length) + ? [data.config.commons] + : [env.commons.available]; + +for (let j = 0; j < env.views.length; j += 1) { + env.routes.push(`${env.basepath}${env.views[j].toLowerCase().replace('home', '')}`); + // Localized routes + for (let i = 0; i < env.translations.available.length; i += 1) { + env.routes.push(`${env.basepath}${env.translations.available[i]}${ + env.views[j].toLowerCase().replace(/^/, '/').replace('/home', '')}`); + } +} + +/* --- Wiki ----------------------------------------------------------------- */ +fs.writeFileSync(path.resolve(__dirname, '../public/wiki.json'), '[]'); + +async function downloadWikiFiles(json) { + const files = [...new Set( // no duplicate + Array.from( // find files in the wiki pages + JSON.stringify(json).matchAll(/\(uploads\/(.*?)\)/g), + m => `${env.wiki.base}uploads/${m[1]}`, + ), + )]; + + await Promise.all(files.map(url => download( + url, + url.replace(`${env.wiki.base}uploads/`, './public/wiki/').replace(/([^/]+$)/, ''), + ))); +} + +if (env.wiki.api !== '') { + fs.mkdirSync(path.resolve(__dirname, '../public/wiki/'), { recursive: true }); + env.assets.push( + { from: path.resolve(__dirname, '../public/wiki.json'), to: 'wiki.json' }, + { from: path.resolve(__dirname, '../public/wiki/'), to: 'wiki/' }, + ); + + // Download json + download(env.wiki.api, './public/', { filename: 'wiki.json' }) + .then(() => { + const json = require('../public/wiki.json'); // eslint-disable-line + // Get wiki data + const wiki = require('../src/wiki')(env, json); + // Download attached files + downloadWikiFiles(json); + // RSS + require('./feed')(env, wiki); + }) + .catch((err) => { console.error(err); }); // eslint-disable-line +} + +/* --- Symlinks-------------------------------------------------------------- */ +require('./symlinks')(env); + +module.exports = env; diff --git a/config/feed.js b/config/feed.js new file mode 100644 index 0000000..d10a1ef --- /dev/null +++ b/config/feed.js @@ -0,0 +1,54 @@ +/* eslint-disable import/no-commonjs */ +/* eslint-disable import/no-extraneous-dependencies */ + +const Feed = require('feed').Feed; // eslint-disable-line +const fs = require('fs'); +const marked = require('marked'); + +function buildFeeds(env, wiki) { + env.translations.available.forEach((lg) => { + if (wiki[lg] !== undefined) { + if (Object.keys(wiki[lg]).includes('news') + || Object.keys(wiki[lg]).includes('newsletter')) { + const type = Object.keys(wiki[lg]).includes('news') ? 'news' : 'newsletter'; + + const feed = new Feed({ + author: env.meta.author, + copyright: env.meta.copyright || '', + description: env.meta.description || '', + favicon: `${env.url}img/icons/favicon.png`, + generator: 'Vue-Fs', + id: env.url, + image: `${env.url}img/opengraph/${type}.jpg`, + lg, + link: env.url, + title: env.meta.title || '', + updated: new Date(), + }); + + Object.keys(wiki[lg][type].posts) + .slice() // shallow copy of the array + .sort() // posts sorted + .reverse() // with latest in first + .slice(0, 10) // and only 10 posts kept in the feed + .forEach((date) => { + feed.addItem({ + content: marked(wiki[lg][type].posts[date].text), + date: new Date(`20${date}`), + id: wiki[lg][type].posts[date].url, + link: wiki[lg][type].posts[date].url, + title: wiki[lg][type].posts[date].title, + }); + }); + + fs.mkdirSync(`./dist${env.basepath}${lg}/${type}/`, { recursive: true }); + fs.writeFileSync( + `./dist${env.basepath}${lg}/${type}/feed.xml`, + feed.rss2(), + ); + } + } + }); +} + +module.exports = buildFeeds; diff --git a/config/preview.js b/config/preview.js new file mode 100644 index 0000000..1f4b3ed --- /dev/null +++ b/config/preview.js @@ -0,0 +1,64 @@ +/* eslint-disable import/no-commonjs */ +/* eslint-disable import/no-extraneous-dependencies */ +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); +const PrerenderSPAPlugin = require('prerender-spa-plugin'); +const Renderer = require('@prerenderer/renderer-jsdom'); +const TerserPlugin = require('terser-webpack-plugin'); + +function buildConfig(env) { + const config = Object.assign({}, require('./common')(env)); // eslint-disable-line + + config.output.filename = '[name].[hash].bundle.js'; + + Object.assign(config, { + devtool: '#source-map', + mode: 'production', + optimization: { + minimizer: [ + new TerserPlugin({ + cache: true, + parallel: true, + sourceMap: true, // set to true if you want JS source maps + }), + new OptimizeCSSAssetsPlugin({}), + ], + splitChunks: { + chunks: 'all', + }, + }, + }); + + config.plugins.push( + new HtmlWebpackPlugin({ + title: 'PRODUCTION prerender-spa-plugin', + template: 'public/index.html', + filename: `${env.dist}/index.html`, + }), + new MiniCssExtractPlugin({ + filename: '[name].css', + chunkFilename: '[id].css', + }), + new PrerenderSPAPlugin({ + staticDir: env.dist, + routes: env.routes, + renderer: new Renderer({ + maxConcurrentRoutes: 1, + renderAfterElementExists: 'meta[name="description"]', // when vue-meta is ok + }), + postProcess(renderedRoute) { + // eslint-disable-next-line no-param-reassign + renderedRoute.html = renderedRoute.html + .replace(/