Merge branch 'master' into 'master'

Newsletter 1.4 and various improvements

See merge request framasoft/peertube/joinpeertube!68
This commit is contained in:
JosephK 2019-09-27 08:58:12 +02:00
commit d1ce3526eb
67 changed files with 2171 additions and 12502 deletions

1
.gitignore vendored
View file

@ -3,3 +3,4 @@ public/
.zanata-cache/etag-cache.xml .zanata-cache/etag-cache.xml
npm-debug.log npm-debug.log
/zanata.xml /zanata.xml
pnpm-lock.yaml

View file

@ -1,13 +1,21 @@
image: framasoft/vuefs:latest image: framasoft/vuefs:latest
stages: stages:
- test
- deploy - deploy
test:
stage: test
script:
- npm install -g yaml-lint
- for f in $(find ./app/ -name "*.yml" -type f);do yamllint $f;done;
pages: pages:
stage: deploy stage: deploy
script: script:
- npm install - npm install
- npm run preview - npm run preview
- mv -f public/$CI_PROJECT_NAME/* public - mv -f public/$CI_PROJECT_NAME/* public
- find public -type f -iregex '.*\.\(htm\|html\|txt\|text\|js\|css\)$' -execdir gzip -f --keep {} \;
artifacts: artifacts:
paths: paths:
- public - public
@ -24,22 +32,31 @@ production:
- for f in $(find -type l);do cp --remove-destination $(readlink -f $f) $f;done; - for f in $(find -type l);do cp --remove-destination $(readlink -f $f) $f;done;
- mkdir "${HOME}/.ssh" - mkdir "${HOME}/.ssh"
- chmod 700 "${HOME}/.ssh" - chmod 700 "${HOME}/.ssh"
- if [ ! -z ${DEPLOYEMENT_KNOWN_HOSTS+x} ]; then echo -e "${DEPLOYEMENT_KNOWN_HOSTS}" > ${HOME}/.ssh/known_hosts; fi - echo -e "${DEPLOYEMENT_KNOWN_HOSTS}" > ${HOME}/.ssh/known_hosts;
- eval `ssh-agent -s` - eval `ssh-agent -s`
- if [ ! -z ${DEPLOYEMENT_KEY+x} ]; then ssh-add <(echo "${DEPLOYEMENT_KEY}" | base64 --decode -i); fi - ssh-add <(echo "${DEPLOYEMENT_KEY}" | base64 --decode -i);
- if [ ! -z ${DEPLOYEMENT_KEY+x} ]; then cd public && echo "put -r ." | sftp ${DEPLOYEMENT_USER}@${DEPLOYEMENT_HOST}:../../web; fi - cd public && echo "put -r ." | sftp ${DEPLOYEMENT_USER}@${DEPLOYEMENT_HOST}:../../web;
only: only:
refs:
- master - master
variables:
- $DEPLOYEMENT_KEY
- $DEPLOYEMENT_KNOWN_HOSTS
- $DEPLOYEMENT_USER
- $DEPLOYEMENT_HOST
# Push new translations strings to https://trad.framasoft.org # Push new translations strings to https://trad.framasoft.org
#trads: trads:
# stage: deploy stage: deploy
# image: framasoft/push-trad:latest image: framasoft/push-trad:latest
# script: script:
# - sed -e "s@<project-version>.*</project-version>@<project-version>$CI_COMMIT_REF_SLUG</project-version>@" -i zanata/zanata.xml - sed -e "s@<project-version>.*</project-version>@<project-version>$CI_COMMIT_REF_SLUG</project-version>@" -i zanata/zanata.xml
# - sed -e "s@<project>.*</project>@<project>join-peertube</project>@" -i zanata/zanata.xml - sed -e "s@<project>.*</project>@<project>join-peertube</project>@" -i zanata/zanata.xml
# - cp zanata/zanata.xml zanata.xml - cp -n zanata/zanata.xml zanata.xml
# - if [ ! -z ${ZANATA_CONFIG_FRAMABOT+x} ]; then mkdir -p ${HOME}/.config; echo -e "${ZANATA_CONFIG_FRAMABOT}" > ${HOME}/.config/zanata.ini; fi - mkdir -p ${HOME}/.config; echo -e "${ZANATA_CONFIG_FRAMABOT}" > ${HOME}/.config/zanata.ini;
# - if [ ! -z ${ZANATA_CONFIG_FRAMABOT+x} ]; then make push-locales; fi - make push-locales;
# only: only:
# - master refs:
- master
variables:
- $ZANATA_CONFIG_FRAMABOT

1
.npmrc Normal file
View file

@ -0,0 +1 @@
puppeteer_skip_chromium_download=true

View file

@ -8,8 +8,8 @@ prepare-locales:
rm -f zanata/yml/*.yml zanata/po/*.po zanata/po/*.pot zanata/po/*.err rm -f zanata/yml/*.yml zanata/po/*.po zanata/po/*.pot zanata/po/*.err
clean-locales: backup-locales prepare-locales clean-locales: backup-locales prepare-locales
zanata/scripts/yml2po.sh zanata/scripts/selfyml2po.sh
zanata/scripts/po2yml.sh zanata/scripts/selfpo2yml.sh
po: po:
zanata/scripts/yml2po.sh zanata/scripts/yml2po.sh
@ -21,7 +21,7 @@ push-locales: po
zanata-cli -q -B push --push-type both zanata-cli -q -B push --push-type both
pull-locales: prepare-locales pull-locales: prepare-locales
cp -n zanata/zanata.xml zanata.xml cp zanata/zanata.xml zanata.xml
sed -e 's@<project></project>@<project>join-peertube</project>@' -i zanata.xml sed -e 's@<project></project>@<project>join-peertube</project>@' -i zanata.xml
zanata-cli -q -B pull --pull-type both --min-doc-percent 75 zanata-cli -q -B pull --pull-type both --min-doc-percent 75
make yml make yml

View file

@ -2,8 +2,24 @@
<div id="app"> <div id="app">
<vue-headful <vue-headful
:title="$t('meta.title')" :title="$t('meta.title')"
:description="$t('meta.description')"
:html="{ body: {id: $route.meta.id } }" :html="{ body: {id: $route.meta.id } }"
:lang="$route.meta.lang" :lang="$route.meta.lang"
:head="{
'link[rel^=shortcut]': {href: `${$root.baseurl}icons/favicon.png`},
'link[rel=apple-touch-icon]': {href: `${$root.baseurl}icons/apple-touch-icon.png`},
'link[rel=canonical]': {href: `${$root.canonical}${$route.path}`},
'meta[property^=og][property$=title]': {content: `${$t('meta.title')}`},
'meta[property^=og][property$=image]': {content: `${$root.baseurl}icons/apple-touch-icon.png`},
'meta[property^=og][property$=url]': {content: $root.baseurl},
'meta[property^=og][property$=description]': {content: `${$t('meta.description')}`},
'meta[name^=twitter][name$=title]': {content: `${$t('meta.title')}`},
'meta[name^=twitter][name$=image]': {content: `${$root.baseurl}icons/apple-touch-icon.png`},
'meta[name^=twitter][name$=description]': {content: `${$t('meta.description')}`},
}"
/> />
<header-component></header-component> <header-component></header-component>
<router-view></router-view> <router-view></router-view>
@ -16,6 +32,6 @@ export default {
name: 'app', name: 'app',
components: { components: {
HeaderComponent, HeaderComponent,
}, }
} }
</script> </script>

View file

@ -0,0 +1,10 @@
@font-face {
font-family: 'PTSansCaption';
src: url('../fonts/ptsans_caption/PTC55F-webfont.eot');
src: url('../fonts/ptsans_caption/PTC55F-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/ptsans_caption/PTC55F-webfont.woff') format('woff'),
url('../fonts/ptsans_caption/PTC55F-webfont.ttf') format('truetype'),
url('../fonts/ptsans_caption/PTC55F-webfont.svg#RobotoRegular') format('svg');
font-weight: normal;
font-style: normal;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 399 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View file

@ -33,7 +33,7 @@
// @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/pagination"; // @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/pagination";
// @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/pager"; // @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/pager";
// @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/labels"; // @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/labels";
// @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/badges"; @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/badges";
// @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/jumbotron"; // @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/jumbotron";
// @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/thumbnails"; // @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/thumbnails";
@import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/alerts"; @import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/alerts";

View file

@ -63,6 +63,18 @@ main .intro .col-md-6 {
margin: 0; margin: 0;
} }
figure {
border: 10px solid rgb(255, 243, 234);
}
figcaption {
display: block;
background: rgb(255, 243, 234);
text-align: center;
font-size: 12px;
padding-top: 10px;
}
/* Sections background */ /* Sections background */
body { body {
background: #211F20 url('../img/network.png') bottom center repeat-y; background: #211F20 url('../img/network.png') bottom center repeat-y;

View file

@ -1,40 +1,57 @@
<template> <template>
<main> <main>
<vue-headful <vue-headful
:title="$t('meta.title') + ' - ' + $t('hof.title')" :title="$t('meta.title') + ' - ' + $t('hof.title')"
/> />
<div class="container"> <div class="container">
<section class="col-lg-8 faq"> <section class="col-lg-8 faq">
<h1>{{ $t('news.title') }}</h1> <h1>{{ $t('news.title') }}</h1>
<span>{{ $t('news.subtitle') }}</span> <span>{{ $t('news.subtitle') }}</span>
<div v-for="(bloc, key) in $t('news.blocs')" :id="key"> <div v-for="key in Object.keys($t('news.blocs'))" :key="key"
<a :href="`#${key}`"><h2>{{ bloc.title }}</h2></a> :id="key" class="article">
<p class="small"> <!-- <img class="img-fluid" :src="`${$root['/']}img/news/${key}.jpg`" alt=""> -->
<i aria-hidden="true" class="fa fa-calendar"></i> <div class="content-wrapper">
<time v-if="bloc.date" :datetime="bloc.date.data">{{ bloc.date.text }}</time> <h3>
</p> <a :href="`#${key}`" v-html="$t(`news.blocs.${key}.title`)"></a>
<p v-for="p in bloc.text" v-html="p"></p> </h3>
<hr /> <p class="text-muted small">
</div> <i class="fa fa-calendar" aria-hidden="true"></i>
</section> <time :datetime="`20${key}`">{{ $t(`news.blocs.${key}.date`) }}</time>
<aside class="col-lg-4"> </p>
<div class="sticky-top"> <v-text :section="`news.blocs.${key}.text`" />
<div class="bloc"> <hr />
<nav> </div>
<h3>{{ $t('news.latest-articles') }}</h3>
<ul>
<li v-for="(bloc, key) in $t('news.blocs')">
<a :href="`#${key}`">{{ bloc.title }}</a>
<time v-if="bloc.date" :datetime="bloc.date.data" class="text-muted small">
{{ bloc.date.text }}
</time>
</li>
</ul>
</nav>
</div>
</div>
</aside>
</div> </div>
</main> </section>
<aside class="col-lg-4">
<div class="sticky-top">
<div class="bloc">
<nav>
<h3>{{ $t('news.latest-articles') }}</h3>
<ul>
<li v-for="key in Object.keys($t('news.blocs'))" :key="key">
<a :href="`#${key}`" v-html="$t(`news.blocs.${key}.title`)"></a>
<time v-if="$t(`news.blocs.${key}.date`)"
:datetime="`20${key}`"
class="text-muted small">
{{ $t(`news.blocs.${key}.date`) }}
</time>
</li>
</ul>
</nav>
</div>
</div>
</aside>
</div>
</main>
</template> </template>
<script>
import VText from '../partials/V-Text.vue';
export default {
components: {
VText,
},
}
</script>

View file

@ -19,8 +19,9 @@
<ul class="nav navbar-nav navbar-right"> <ul class="nav navbar-nav navbar-right">
<li> <li>
<router-link <router-link
:to="'/' + $t('lang') + '/news'" :to="'/' + $t('lang') + '/news'">
v-html="$t('menu.news')"> <span v-html="$t('menu.news')"></span>
<span class="badge" v-text="Object.keys($t('news.blocs')).length"></span>
</router-link> </router-link>
</li> </li>
<li> <li>
@ -50,7 +51,7 @@
</a> </a>
</li> </li>
<li> <li>
<router-link <router-link
:to="'/' + $t('lang') + '/hall-of-fame'" :to="'/' + $t('lang') + '/hall-of-fame'"
v-html="$t('menu.hall-of-fame')"> v-html="$t('menu.hall-of-fame')">
</router-link> </router-link>

View file

@ -9,13 +9,14 @@
<span class="caret"></span> <span class="caret"></span>
</btn> </btn>
<template slot="dropdown"> <template slot="dropdown">
<li v-for="lang in locales.avalaible" <li v-for="lang in locales.available"
:key="lang"
@click="changeLanguage(lang)"> @click="changeLanguage(lang)">
<router-link :to="'/' + lang + '/' + ($route.path.split('/')[2] || '')"> <router-link :to="`/${lang}/${($route.path.split('/')[2] || '')}`">
{{ locales[lang] }} {{ locales[lang] }}
</router-link> </router-link>
</li> </li>
<li role="separator" class="divider" v-if="$root.meta.i18n"></li> <li v-if="$root.meta.i18n" role="separator" class="divider"></li>
<li v-if="$root.meta.i18n"> <li v-if="$root.meta.i18n">
<a :href="$root.meta.i18n"> <a :href="$root.meta.i18n">
<i class="fa fa-fw fa-plus" aria-hidden="true"></i> <i class="fa fa-fw fa-plus" aria-hidden="true"></i>

View file

@ -0,0 +1,86 @@
<template>
<article>
<div v-for="tag in sectionElements()" :key="tag">
<div class="alert alert-info"
v-if="/^alert/.test(tag)"
v-html="$t(`${section}.${tag}`)">
</div>
<h2
v-if="/^h2/.test(tag)" :id="id(tag)"
v-html="$t(`${section}.${tag}`)">
</h2>
<h3
v-if="/^h3/.test(tag)" :id="id(tag)"
v-html="$t(`${section}.${tag}`)">
</h3>
<h4
v-if="/^h4/.test(tag)" :id="id(tag)"
v-html="$t(`${section}.${tag}`)">
</h4>
<h5
v-if="/^h5/.test(tag)"
v-html="$t(`${section}.${tag}`)">
</h5>
<h6
v-if="/^h6/.test(tag)"
v-html="$t(`${section}.${tag}`)">
</h6>
<ul v-if="/^ul/.test(tag)">
<li
v-for="li in tagIndexes(tag)"
:key="li"
v-html="$t(`${section}.${tag}[${li}]`)">
</li>
</ul>
<ol v-if="/^ol/.test(tag)">
<li
v-for="li in tagIndexes(tag)"
:key="li"
v-html="$t(`${section}.${tag}[${li}]`)">
</li>
</ol>
<p
v-for="p in pIndexes(tag)"
:key="p"
v-html="$t(`${section}.${tag}[${p}]`)">
</p>
<blockquote
v-for="bq in bqIndexes(tag)"
:key="bq"
v-html="$t(`${section}.${tag}[${bq}]`)">
</blockquote>
</div>
</article>
</template>
<script>
export default {
props: {
section: {
type: String,
required: true,
},
},
methods: {
sectionElements() {
return Object.keys(this.$t(this.section));
},
tagIndexes(tag) {
return Object.keys(this.$t(`${this.section}.${tag}`));
},
pIndexes(tag) {
return this.tagIndexes(tag).filter(i => /^p/.test(tag));
},
bqIndexes(tag) {
return this.tagIndexes(tag).filter(i => /^blockquote/.test(tag));
},
id(tag) {
let id = `${this.section.replace('.', '-')}-${tag}`;
if (tag.split('-')[1] !== undefined) {
id = tag.split('-')[1];
}
return id;
},
},
};
</script>

View file

@ -1,241 +0,0 @@
meta:
title: Join PeerTube
author: Framasoft
canonical: https://joinpeertube.org
i18n: https://trad.framasoft.org/project/view/join-peertube/master
txt:
# soft: text from color.soft
html:
# soft: <a href="link.soft">color.soft</a>
color:
soft: <b class="violet">Frama</b><b class="orange">soft</b>
cuo: <b class="violet">Contributopia</b>
evl: <b class="violet" lang="fr">EnVente</b><b class="jaune" lang="fr">Libre</b>
agenda: <b class="violet">Fram</b><b class="vert">agenda</b>
bag: <b class="violet">Frama</b><b class="vert">bag</b>
bee: <b class="violet">Frama</b><b class="vert" lang="en">bee</b>
bin: <b class="violet">Frama</b><b class="vert" lang="en">bin</b>
blog: <b class="violet">Frama</b><b class="rouge">blog</b>
board: <b class="violet">Frama</b><b class="vert" lang="en">board</b>
book: <b class="violet">Frama</b><b class="rouge" lang="en">book</b>
bookin: <b class="violet">Frama</b><b class="rouge" lang="en">bookin</b>
calc: <b class="violet">Frama</b><b class="vert">calc</b>
carte: <b class="violet">Frama</b><b class="vert">carte</b>
cloud: <b class="violet">Frama</b><b class="vert" lang="en">cloud</b>
colibri: <b class="violet">Frama</b><b class="jaune" lang="fr">colibri</b>
date: <b class="violet">Frama</b><b class="vert">date</b>
docs: <b class="violet">Frama</b><b class="jaune">docs</b>
drive: <b class="violet">Frama</b><b class="vert" lang="en">drive</b>
drop: <b class="violet">Frama</b><b class="vert">drop</b>
dvd: <b class="violet">Frama</b><b class="bleu"><abbr>dvd</abbr></b>
forms: <b class="violet">Frama</b><b class="vert">forms</b>
games: <b class="violet">Frama</b><b class="vert" lang="en">games</b>
git: <b class="violet">Frama</b><b class="vert" lang="en">git</b>
key: <b class="violet">Frama</b><b class="bleu" lang="en">key</b>
lab: <b class="violet">Frama</b><b class="jaune">lab</b>
lang: <b class="violet">Frama</b><b class="rouge" lang="en">lang</b>
libre: <b class="violet">Frama</b><b class="bleu" lang="fr">libre</b>
link: <b class="violet">Frama</b><b class="vert" lang="en">link</b>
listes: <b class="violet">Frama</b><b class="vert" lang="fr">listes</b>
maestro: <b class="violet">Fra</b><b class="vert" lang="it">maestro</b>
memo: <b class="violet">Fra</b><b class="vert" lang="fr">memo</b>
mindmap: <b class="violet">Fra</b><b class="vert" lang="en">mindmap</b>
minetest: <b class="violet">Fra</b><b class="vert" lang="en">minetest</b>
my: <b class="violet" lang="en">My</b><b class="vert">Frama</b>
news: <b class="violet">Frama</b><b class="vert" lang="en">news</b>
notes: <b class="violet">Frama</b><b class="vert">notes</b>
pack: <b class="violet">Frama</b><b class="bleu">pack</b>
pad: <b class="violet">Frama</b><b class="vert">pad</b>
piaf: <b class="violet">Frama</b><b class="vert">piaf</b>
pic: <b class="violet">Frama</b><b class="vert">pic</b>
site: <b class="violet">Frama</b><b class="vert">site</b>
slides: <b class="violet">Frama</b><b class="vert" lang="en">slides</b>
sphere: <b class="violet">Frama</b><b class="vert" lang="fr">sphère</b>
team: <b class="violet">Frama</b><b class="vert" lang="en">team</b>
talk: <b class="violet">Frama</b><b class="vert" lang="en">talk</b>
tube: <b class="violet">Frama</b><b class="rouge">tube</b>
vectoriel: <b class="violet">Frama</b><b class="vert" lang="fr">vectoriel</b>
vox: <b class="violet">Frama</b><b class="vert">vox</b>
wiki: <b class="violet">Frama</b><b class="vert">wiki</b>
zic: <b class="violet">Frama</b><b class="rouge">zic</b>
huitre: <b class="violet" lang="fr">Huit</b><b class="vert">re</b>
tontonroger: <b class="violet" lang="fr">Tonton</b> <b class="vert">Roger</b>
trouvons: <b class="violet" lang="fr">Trouvons</b><b class="vert">.org</b>
link:
gitPT: https://github.com/Chocobozzz/PeerTube
instancesPT: https://instances.joinpeertube.org
docsPT: https://docs.joinpeertube.org
mastodon: https://joinmastodon.org
activitypub: https://activitypub.rocks
tosdr: https://tosdr.org/#youtube
soft: https://framasoft.org
dio: https://degooglisons-internet.org
cuo: https://contributopia.org
soutenir: https://soutenir.framasoft.org
contact: https://contact.framasoft.org
newsletter: https://contact.framasoft.org/newsletter
participer: https://participer.framasoft.org
evl: https://enventelibre.org
wikifs: https://wiki.framasoft.org
press: https://wiki.framasoft.org/speakabout
agenda: https://framagenda.org
bag: https://framabag.org
bee: https://framabee.org
bin: https://framabin.org
blog: https://framablog.org
board: https://framaboard.org
book: https://framabook.org
bookin: https://framabookin.org
calc: https://framacalc.org
carte: https://framacarte.org
cloud: https://framacloud.org
colibri: https://framacolibri.org
date: https://framadate.org
docs: https://docs.framasoft.org
drive: https://framadrive.org
drop: https://framadrop.org
dvd: https://framadvd.org
forms: https://framaforms.org
games: https://framagames.org
git: https://framagit.org
key: https://framakey.org
lab: https://framalab.org
lang: https://participer.framasoft.org/traduction-rejoignez-framalang/
libre: https://framalibre.org
link: https://frama.link
listes: https://framalistes.org
maestro: https://framaestro.org
memo: https://framemo.org
mindmap: https://framindmap.org
minetest: https://framinetest.org
my: https://my.framasoft.org
news: https://framanews.org
notes: https://framanotes.org
pack: https://framapack.org
pad: https://framapad.org
piaf: https://framapiaf.org
pic: https://framapic.org
site: https://frama.site
slides: https://framaslides.org
sphere: https://framasphere.org
talk: https://framatalk.org
team: https://framateam.org
tube: https://framatube.org
vectoriel: https://framavectoriel.org
vox: https://framavox.org
wiki: https://frama.wiki
zic: https://framazic.org
huitre: https://huit.re
tontonroger: https://tontonroger.org
trouvons: https://trouvons.org
icon:
dio: fa-shield
cuo: fa-shield
soutenir: fa-heart
contact: fa-envelop
participer: fa-paw
evl: fa-shopping-cart
agenda: fa-calendar
bag: fa-briefcase
bee: fa-search
bin: fa-paste
blog: fa-pencil
board: fa-dashboard
book: fa-book
bookin: fa-coffee
calc: fa-th
carte: fa-map
colibri: fa-comment
date: fa-calendar-check-o
docs: fa-graduation-cap
drive: fa-cloud-upload
drop: fa-send
dvd: fa-play-circle-o
forms: fa-list-ul
games: fa-gamepad
git: fa-git
key: fa-usb
lab: fa-flask
lang: fa-language
libre: fa-linux
link: fa-link
listes: fa-group
maestro: fa-magic
memo: fa-object-group
mindmap: fa-sitemap
minetest: fa-cube
my: fa-star
news: fa-newspaper-o
notes: fa-sticky-note
pack: fa-download
pad: fa-align-left
piaf: fa-mastodon
pic: fa-photo
site: fa-globe
slides: fa-pie-chart
sphere: fa-diaspora
talk: fa-video-camera
team: fa-comments-o
tube: fa-film
vectoriel: fa-paint-brush
vox: fa-bullhorn
wiki: fa-puzzle-piece
zic: fa-music
huitre: fa-link
tontonroger: fa-search
trouvons: fa-search
license:
lal: <a href="http://artlibre.org">Art Libre</a>
cc0: <a href="https://creativecommons.org/publicdomain/zero/1.0">Creative Commons 0</a>
ccby3: <a href="https://creativecommons.org/licenses/by/3.0"><span lang="en">Creative Commons By</span> 3.0</a>
ccby4: <a href="https://creativecommons.org/licenses/by/4.0"><span lang="en">Creative Commons By</span> 4.0</a>
ccbysa3: <a href="https://creativecommons.org/licenses/by-sa/3.0"><span lang="en">Creative Commons By</span>-<abbr>SA</abbr> 3.0</a>
ccbysa4: <a href="https://creativecommons.org/licenses/by-sa/4.0"><span lang="en">Creative Commons By</span>-<abbr>SA</abbr> 4.0</a>
ccbysa2fr: <a href="https://creativecommons.org/licenses/by-sa/2.0/fr"><span lang="en">Creative Commons By</span>-<abbr>SA</abbr> 2.0</a>
ccbysa3fr: <a href="https://creativecommons.org/licenses/by-sa/3.0/fr"><span lang="en">Creative Commons By</span>-<abbr>SA</abbr> 3.0</a>
ccbysa4fr: <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr"><span lang="en">Creative Commons By</span>-<abbr>SA</abbr> 4.0</a>
gpl2: <a href="https://www.gnu.org/licenses/gpl-2.0.html">GNU <abbr lang="en" title="General Public License">GPL</abbr> v2</a>
gpl3: <a href="https://www.gnu.org/licenses/gpl-3.0.txt">GNU <abbr lang="en" title="General Public License">GPL</abbr> v3</a>
gnufdl: <a href="https://www.gnu.org/copyleft/fdl.html">GNU <abbr lang="en" title="Free Documentation License">FDL</abbr></a>
agpl3: <a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU <abbr lang="en" title="Affero General Public License">AGPL</abbr> v3</a>
apache2: <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache 2.0</a>
cecillb: <a href="http://www.cecill.info/licences.fr.html">CeCILL-B</a>
people:
aka: Alexis Kauffmann
ben: Benjamin Jean
christophe: Christophe Masutti
cyrille: Cyrille Largillier
dorme: Geoffrey Dorme
fat115: fat115
fla: Flaburgan
fred: Fredéric Urbain
gab: Gabriel Dejeante
gee: Simon «Gee» Giraudot
jo: JosephK
kinou: Christelle Thomas
lam: Lamessen
lldemars: L.L. de Mars
luc: Luc Didry
martin: Martin Gubri
sandra: peupleLà (Sandra Guigonis)
simonl: Simon Leblanc
pouhiou: Pouhiou
pyg: Pierre-Yves Gosset
tcit: Thomas Citharel
emoji:
wink: 😉

View file

@ -0,0 +1,70 @@
soft: <b class="violet">Frama</b><b class="orange">soft</b>
cuo: <b class="violet">Contributopia</b>
wikifs: <b class="violet">Frama</b><b class="jaune">wiki</b>
agenda: <b class="violet">Fram</b><b class="vert">agenda</b>
bag: <b class="violet">Frama</b><b class="vert">bag</b>
bee: <b class="violet">Frama</b><b class="vert" lang="en">bee</b>
bin: <b class="violet">Frama</b><b class="vert" lang="en">bin</b>
blog: <b class="violet">Frama</b><b class="rouge">blog</b>
board: <b class="violet">Frama</b><b class="vert" lang="en">board</b>
book: <b class="violet">Frama</b><b class="rouge" lang="en">book</b>
bookin: <b class="violet">Frama</b><b class="rouge" lang="en">bookin</b>
calc: <b class="violet">Frama</b><b class="vert">calc</b>
carte: <b class="violet">Frama</b><b class="vert">carte</b>
clic: <b class="violet">Frama</b><b class="vert">clic</b>
cloud: <b class="violet">Frama</b><b class="vert" lang="en">cloud</b>
colibri: <b class="violet">Frama</b><b class="jaune" lang="fr">colibri</b>
date: <b class="violet">Frama</b><b class="vert">date</b>
docs: <b class="violet">Frama</b><b class="jaune">docs</b>
drive: <b class="violet">Frama</b><b class="vert" lang="en">drive</b>
drop: <b class="violet">Frama</b><b class="vert">drop</b>
dvd: <b class="violet">Frama</b><b class="bleu"><abbr>dvd</abbr></b>
forms: <b class="violet">Frama</b><b class="vert">forms</b>
games: <b class="violet">Frama</b><b class="rouge" lang="en">games</b>
git: <b class="violet">Frama</b><b class="vert" lang="en">git</b>
key: <b class="violet">Frama</b><b class="bleu" lang="en">key</b>
lab: <b class="violet">Frama</b><b class="jaune">lab</b>
lang: <b class="violet">Frama</b><b class="rouge" lang="en">lang</b>
libre: <b class="violet">Frama</b><b class="bleu" lang="fr">libre</b>
link: <b class="violet">Frama</b><b class="vert" lang="en">link</b>
listes: <b class="violet">Frama</b><b class="vert" lang="fr">listes</b>
maestro: <b class="violet">Fra</b><b class="vert" lang="it">maestro</b>
memo: <b class="violet">Fra</b><b class="vert" lang="fr">memo</b>
mindmap: <b class="violet">Fra</b><b class="vert" lang="en">mindmap</b>
minetest: <b class="violet">Fra</b><b class="rouge" lang="en">minetest</b>
my: <b class="violet" lang="en">My</b><b class="vert">Frama</b>
news: <b class="violet">Frama</b><b class="vert" lang="en">news</b>
notes: <b class="violet">Frama</b><b class="vert">notes</b>
pack: <b class="violet">Frama</b><b class="bleu">pack</b>
pad: <b class="violet">Frama</b><b class="vert">pad</b>
petitions: <b class="violet">Frama</b><b class="vert">petitions</b>
piaf: <b class="violet">Frama</b><b class="vert">piaf</b>
pic: <b class="violet">Frama</b><b class="vert">pic</b>
site: <b class="violet">Frama</b><b class="vert">site</b>
slides: <b class="violet">Frama</b><b class="vert" lang="en">slides</b>
sphere: <b class="violet">Frama</b><b class="vert" lang="fr">sphère</b>
story: <b class="violet">Frama</b><b class="vert">story</b>
team: <b class="violet">Frama</b><b class="vert" lang="en">team</b>
talk: <b class="violet">Frama</b><b class="vert" lang="en">talk</b>
tube: <b class="violet">Frama</b><b class="rouge">tube</b>
vectoriel: <b class="violet">Frama</b><b class="vert" lang="fr">vectoriel</b>
vox: <b class="violet">Frama</b><b class="vert">vox</b>
wiki: <b class="violet">Frama</b><b class="vert">wiki</b>
zic: <b class="violet">Frama</b><b class="rouge">zic</b>
huitre: <b class="violet" lang="fr">Huit</b><b class="vert">re</b>
tontonroger: <b class="violet" lang="fr">Tonton</b> <b class="vert">Roger</b>
trouvons: <b class="violet" lang="fr">Trouvons</b><b class="vert">.org</b>
clibre: CLibre.eu
evl: <b class="violet" lang="fr">EnVente</b><b class="jaune" lang="fr">Libre</b>
planet: Planet-libre
ptilouk: Ptilouk
start: <b class="violet">Frama</b><b class="bleu">start</b>
vvl: Veni Vidi Libri
diaspora: Diaspora
mastodon: Mastodon
twitter: Twitter
facebook: Facebook

View file

@ -0,0 +1,204 @@
ZA: Afrique du Sud
AL: Albanie
DZ: Algérie
DE: Allemagne
AD: Andorre
AO: Angola
AI: Anguilla
AG: Antigua-et-Barbuda
AN: Antilles néerlandaises
SA: Arabie saoudite
AR: Argentine
AM: Arménie
AW: Aruba
AU: Australie
AT: Autriche
AZ: Azerbaïdjan
BS: Bahamas
BH: Bahreïn
BB: Barbade
BE: Belgique
BZ: Belize
BJ: Bénin
BM: Bermudes
BT: Bhoutan
BY: Biélorussie
BO: Bolivie
BA: Bosnie-Herzégovine
BW: Botswana
BR: Brésil
BN: Brunéi Darussalam
BG: Bulgarie
BF: Burkina Faso
BI: Burundi
KH: Cambodge
CM: Cameroun
CA: Canada
CV: Cap-Vert
CL: Chili
C2: Chine
CN: Chine
CY: Chypre
CO: Colombie
KM: Comores
CG: Congo-Brazzaville
CD: Congo-Kinshasa
KR: Corée du Sud
CR: Costa Rica
CI: Côte dIvoire
HR: Croatie
DK: Danemark
DJ: Djibouti
DM: Dominique
EG: Égypte
SV: El Salvador
AE: Émirats arabes unis
EC: Équateur
ER: Érythrée
ES: Espagne
EE: Estonie
VA: État de la Cité du Vatican
FM: États fédérés de Micronésie
US: États-Unis
ET: Éthiopie
FJ: Fidji
FI: Finlande
FR: France
GA: Gabon
GM: Gambie
GE: Géorgie
GI: Gibraltar
GR: Grèce
GD: Grenade
GL: Groenland
GP: Guadeloupe
GT: Guatemala
GN: Guinée
GW: Guinée-Bissau
GY: Guyana
GF: Guyane française
HN: Honduras
HU: Hongrie
NF: Île Norfolk
KY: Îles Caïmans
CK: Îles Cook
FO: Îles Féroé
FK: Îles Malouines
MH: Îles Marshall
PN: Îles Pitcairn
SB: Îles Salomon
TC: Îles Turques-et-Caïques
VG: Îles Vierges britanniques
IN: Inde
ID: Indonésie
IE: Irlande
IS: Islande
IL: Israël
IT: Italie
JM: Jamaïque
JP: Japon
JO: Jordanie
KZ: Kazakhstan
KE: Kenya
KG: Kirghizistan
KI: Kiribati
KW: Koweït
RE: La Réunion
LA: Laos
LS: Lesotho
LV: Lettonie
LI: Liechtenstein
LT: Lituanie
LU: Luxembourg
MK: Macédoine
MG: Madagascar
MY: Malaisie
MW: Malawi
MV: Maldives
ML: Mali
MT: Malte
MA: Maroc
MQ: Martinique
MU: Maurice
MR: Mauritanie
YT: Mayotte
MX: Mexique
MD: Moldavie
MC: Monaco
MN: Mongolie
ME: Monténégro
MS: Montserrat
MZ: Mozambique
NA: Namibie
NR: Nauru
NP: Népal
NI: Nicaragua
NE: Niger
NG: Nigéria
NU: Niue
NO: Norvège
NC: Nouvelle-Calédonie
NZ: Nouvelle-Zélande
OM: Oman
UG: Ouganda
PW: Palaos
PA: Panama
PG: Papouasie-Nouvelle-Guinée
PY: Paraguay
NL: Pays-Bas
PE: Pérou
PH: Philippines
PL: Pologne
PF: Polynésie française
PT: Portugal
QA: Qatar
HK: R.A.S. chinoise de Hong Kong
DO: République dominicaine
CZ: République tchèque
RO: Roumanie
GB: Royaume-Uni
RU: Russie
RW: Rwanda
KN: Saint-Christophe-et-Niévès
SM: Saint-Marin
PM: Saint-Pierre-et-Miquelon
VC: Saint-Vincent-et-les-Grenadines
SH: Sainte-Hélène
LC: Sainte-Lucie
WS: Samoa
ST: Sao Tomé-et-Principe
SN: Sénégal
RS: Serbie
SC: Seychelles
SL: Sierra Leone
SG: Singapour
SK: Slovaquie
SI: Slovénie
SO: Somalie
LK: Sri Lanka
SE: Suède
CH: Suisse
SR: Suriname
SJ: Svalbard et Jan Mayen
SZ: Swaziland
TJ: Tadjikistan
TW: Taïwan
TZ: Tanzanie
TD: Tchad
TH: Thaïlande
TG: Togo
TO: Tonga
TT: Trinité-et-Tobago
TN: Tunisie
TM: Turkménistan
TR: Turquie
TV: Tuvalu
UA: Ukraine
UY: Uruguay
VU: Vanuatu
VE: Venezuela
VN: Vietnam
WF: Wallis-et-Futuna
YE: Yémen
ZM: Zambie
ZW: Zimbabwe

84
app/data/commons/doc.yml Normal file
View file

@ -0,0 +1,84 @@
agenda:
- fr/agenda
bag:
- fr/wallabag
bee:
- fr/searx
bin:
- fr/privatebin
board:
- fr/kanboard
calc:
- fr/ethercalc
carte:
- fr/umap
clic:
- fr/dolomon
- en/dolomon
date:
- fr/framadate
- en/framadate
drive:
- fr/nextcloud
drop:
- fr/lufi
- en/lufi
forms:
- fr/framaforms
git:
- fr/gitlab
key:
- fr/framakey
libre:
- fr/framalibre
link:
- fr/lstu
- en/lstu
listes:
- fr/sympa
maestro:
- fr/framaestro
memo:
- fr/scrumblr
mindmap:
- fr/wisemapping
my:
- fr/shaarli
news:
- fr/ttrss
notes:
- fr/turtl
pack:
- fr/framapack
piaf:
- fr/mastodon
- en/mastodon
pic:
- fr/lutim
- en/lutim
site:
- fr/framasite
site-noemie:
- fr/noemiecms
site-grav:
- fr/grav
slides:
- fr/strut
sphere:
- fr/diaspora
- en/diaspora
talk:
- fr/jitsimeet
- en/jitsimeet
team:
- fr/mattermost
- en/mattermost
vox:
- fr/loomio
- en/loomio
wiki:
- fr/dokuwiki
huitre:
- fr/lstu
- en/lstu

View file

@ -0,0 +1,6 @@
wink: 😉
hug: 🤗
speaking-head: 🗣
keyboard: ⌨️
bulb: 💡
woman-technologist: 👩‍💻

53
app/data/commons/git.yml Normal file
View file

@ -0,0 +1,53 @@
cuo: https://framagit.org/framasoft/contributopia
contributopia: https://framagit.org/framasoft/contributopia
dio: https://framagit.org/framasoft/degooglisons
degooglisons-internet: https://framagit.org/framasoft/degooglisons
peertube: https://github.com/Chocobozzz/PeerTube
joinpeertube: https://framagit.org/framasoft/peertube/joinpeertube
mobilizon: https://framagit.org/framasoft/mobilizon/
joinmobilizon: https://framagit.org/framasoft/joinmobilizon/joinmobilizon
agenda: https://framagit.org/framasoft/framagenda
bag: https://framagit.org/framasoft/framabag
bin: https://framagit.org/framasoft/framabin
board: https://framagit.org/framasoft/framaboard
bookin: https://framagit.org/framasoft/framabookin
calc: https://framagit.org/framasoft/framacalc
carte: https://framagit.org/framasoft/framacarte
clic: https://framagit.org/framasoft/framaclic
cloud: https://framagit.org/framasoft/framacloud
contact: https://framagit.org/framasoft/contact
date: https://framagit.org/framasoft/framadate
docs: https://framagit.org/framasoft/docs
drive: https://framagit.org/framasoft/framadrive
drop: https://framagit.org/framasoft/framadrop
forms: https://framagit.org/framasoft/framaforms
games: https://framagit.org/framasoft/framagames
libre: https://framagit.org/framasoft/framalibre
link: https://framagit.org/framasoft/framalink
maestro: https://framagit.org/framasoft/framaestro
memo: https://framagit.org/framasoft/framemo
mindmap: https://framagit.org/framasoft/framindmap
minetest: https://framagit.org/framasoft/framinetest
my: https://framagit.org/framasoft/myframa
news: https://framagit.org/framasoft/framanews
notes: https://framagit.org/framasoft/framanotes
pack: https://framagit.org/framasoft/framapack
pad: https://framagit.org/framasoft/framapad
participer: https://framagit.org/framasoft/participer
petitions: https://framagit.org/framasoft/framapetitions
piaf: https://framagit.org/framasoft/framapiaf
pic: https://framagit.org/framasoft/framapic
site: https://framagit.org/framasoft/Framasite-
slides: https://framagit.org/framasoft/framaslides
soft: https://framagit.org/framasoft/accueil
sphere: https://framagit.org/framasoft/framasphere
start: https://framagit.org/framasoft/framastart
story: https://framagit.org/framasoft/pickweaver
talk: https://framagit.org/framasoft/framatalk
vectoriel: https://framagit.org/framasoft/framavectoriel
vox: https://framagit.org/framasoft/framavox
wiki: https://framagit.org/framasoft/Framasite-/framasite-doku
huitre: https://framagit.org/framasoft/framalink

89
app/data/commons/icon.yml Normal file
View file

@ -0,0 +1,89 @@
cuo: fa-shield
dio: fa-shield
aide: fa-map-signs
asso: fa-home
benevalo: fa-trophy
cgu: fa-legal
moderation: fa-handshake-o
charte: fa-heart
contact: fa-envelope
credits: fa-creative-commons
doc: fa-graduation-cap
faq: fa-question-circle
legals: fa-university
partenaires: fa-group
participer: fa-paw
stats: fa-line-chart
status: fa-heartbeat
soutenir: fa-heart
wikifs: fa-puzzle-piece
agenda: fa-calendar
bag: fa-briefcase
bee: fa-search
bin: fa-paste
blog: fa-pencil
board: fa-dashboard
book: fa-book
bookin: fa-coffee
calc: fa-th
carte: fa-map
clic: fa-hand-pointer-o
colibri: fa-comment
date: fa-calendar-check-o
docs: fa-graduation-cap
drive: fa-cloud-upload
drop: fa-send
dvd: fa-play-circle-o
forms: fa-list-ul
games: fa-gamepad
git: fa-git
key: fa-usb
lab: fa-flask
lang: fa-language
libre: fa-linux
link: fa-link
listes: fa-group
maestro: fa-magic
memo: fa-object-group
mindmap: fa-sitemap
minetest: fa-cube
my: fa-star
news: fa-newspaper-o
notes: fa-sticky-note
pack: fa-download
pad: fa-align-left
petitions: fa-balance-scale
piaf: fa-mastodon
pic: fa-photo
site: fa-globe
slides: fa-pie-chart
sphere: fa-diaspora
story: fa-thumb-tack
talk: fa-video-camera
team: fa-comments-o
tube: fa-film
vectoriel: fa-paint-brush
vox: fa-bullhorn
wiki: fa-puzzle-piece
zic: fa-music
huitre: fa-link
tontonroger: fa-search
trouvons: fa-search
clibre: fa-leaf
evl: fa-shopping-cart
planet: fa-globe
ptilouk: fa-picture-o
start: fa-rocket
vvl: fa-legal
diaspora: fa-diaspora
mastodon: fa-mastodon
twitter: fa-twitter
facebook: fa-facebook
newsletter: fa-envelope-o
rss: fa-rss
wikipedia: fa-wikipedia-w

View file

@ -0,0 +1,16 @@
lal: <a href="http://artlibre.org">Art Libre</a>
cc0: <a href="https://creativecommons.org/publicdomain/zero/1.0">Creative Commons 0</a>
ccby3: <a href="https://creativecommons.org/licenses/by/3.0"><span lang="en">Creative Commons By</span> 3.0</a>
ccby4: <a href="https://creativecommons.org/licenses/by/4.0"><span lang="en">Creative Commons By</span> 4.0</a>
ccbysa3: <a href="https://creativecommons.org/licenses/by-sa/3.0"><span lang="en">Creative Commons By</span>-<abbr>SA</abbr> 3.0</a>
ccbysa4: <a href="https://creativecommons.org/licenses/by-sa/4.0"><span lang="en">Creative Commons By</span>-<abbr>SA</abbr> 4.0</a>
ccbysa2fr: <a href="https://creativecommons.org/licenses/by-sa/2.0/fr"><span lang="en">Creative Commons By</span>-<abbr>SA</abbr> 2.0</a>
ccbysa3fr: <a href="https://creativecommons.org/licenses/by-sa/3.0/fr"><span lang="en">Creative Commons By</span>-<abbr>SA</abbr> 3.0</a>
ccbysa4fr: <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr"><span lang="en">Creative Commons By</span>-<abbr>SA</abbr> 4.0</a>
gpl2: <a href="https://www.gnu.org/licenses/gpl-2.0.html">GNU <abbr lang="en" title="General Public License">GPL</abbr> v2</a>
gpl3: <a href="https://www.gnu.org/licenses/gpl-3.0.txt">GNU <abbr lang="en" title="General Public License">GPL</abbr> v3</a>
gnufdl: <a href="https://www.gnu.org/copyleft/fdl.html">GNU <abbr lang="en" title="Free Documentation License">FDL</abbr></a>
agpl3: <a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU <abbr lang="en" title="Affero General Public License">AGPL</abbr> v3</a>
apache2: <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache 2.0</a>
cecillb: <a href="http://www.cecill.info/licences.fr.html">CeCILL-B</a>
mit: <a href="https://opensource.org/licenses/mit-license.php"><abbr lang="en">MIT</abbr></a>

84
app/data/commons/link.yml Normal file
View file

@ -0,0 +1,84 @@
soft: https://framasoft.org
dio: https://degooglisons-internet.org
diolist: https://degooglisons-internet.org/list
cuo: https://contributopia.org
benevalo: https://soutenir.framasoft.org/benevolat
soutenir: https://soutenir.framasoft.org
contact: https://contact.framasoft.org
newsletter: https://contact.framasoft.org/newsletter
participer: https://participer.framasoft.org
wikifs: https://wiki.framasoft.org
press: https://wiki.framasoft.org/speakabout
status: https://status.framasoft.org
joinmobilizon: https://joinmobilizon.org
joinpeertube: https://joinpeertube.org
agenda: https://framagenda.org
bag: https://framabag.org
bee: https://framabee.org
bin: https://framabin.org
blog: https://framablog.org
board: https://framaboard.org
book: https://framabook.org
bookin: https://framabookin.org
calc: https://framacalc.org
carte: https://framacarte.org
clic: https://framaclic.org
cloud: https://framacloud.org
colibri: https://framacolibri.org
date: https://framadate.org
docs: https://docs.framasoft.org
drive: https://framadrive.org
drop: https://framadrop.org
dvd: https://framadvd.org
forms: https://framaforms.org
games: https://framagames.org
git: https://framagit.org
key: https://framakey.org
lab: https://framalab.org
lang: https://participer.framasoft.org/fr/framalang/
libre: https://framalibre.org
link: https://frama.link
listes: https://framalistes.org
maestro: https://framaestro.org
memo: https://framemo.org
mindmap: https://framindmap.org
minetest: https://framinetest.org
my: https://my.framasoft.org
news: https://framanews.org
notes: https://framanotes.org
pack: https://framapack.org
pad: https://framapad.org
petitions: https://framapetitions.org
piaf: https://framapiaf.org
pic: https://framapic.org
site: https://frama.site
slides: https://framaslides.org
sphere: https://framasphere.org
story: https://framastory.org
talk: https://framatalk.org
team: https://framateam.org
tube: https://framatube.org
vectoriel: https://framavectoriel.org
vox: https://framavox.org
wiki: https://frama.wiki
zic: https://framazic.org
huitre: https://huit.re
tontonroger: https://tontonroger.org
trouvons: https://trouvons.org
clibre: http://clibre.eu
evl: https://enventelibre.org/40-framasoft
planet: http://planet-libre.org
ptilouk: http://ptilouk.net
start: http://framastart.org
vvl: http://vvlibri.org
gitPT: https://github.com/Chocobozzz/PeerTube
instancesPT: https://instances.joinpeertube.org
docsPT: https://docs.joinpeertube.org
mastodon: https://joinmastodon.org
activitypub: https://activitypub.rocks
tosdr: https://tosdr.org/#youtube

View file

@ -0,0 +1,21 @@
aka: Alexis Kauffmann
ben: Benjamin Jean
christophe: Christophe Masutti
cyrille: Cyrille Largillier
dorme: Geoffrey Dorme
fat115: fat115
fla: Flaburgan
fred: Fredéric Urbain
gab: Gabriel Dejeante
gee: Simon «Gee» Giraudot
jo: JosephK
kinou: Christelle Thomas
lam: Lamessen
lldemars: L.L. de Mars
luc: Luc Didry
martin: Martin Gubri
sandra: peupleLà (Sandra Guigonis)
simonl: Simon Leblanc
pouhiou: Pouhiou
pyg: Pierre-Yves Gosset
tcit: Thomas Citharel

39
app/data/commons/soft.yml Normal file
View file

@ -0,0 +1,39 @@
agenda: Nextcloud
bag: Wallabag
bee: Searx
bin: PrivateBin
board: Kanboard
bookin: BicBucStriim
calc: Ethercalc
carte: uMap
clic: Dolomon
drive: Nextcloud
drop: Lufi
forms: Webform
games:
git: Gitlab
link: LSTU
listes: Sympa
memo: Scrumblr
mindmap: Wisemapping
minetest: Minetest
my: Shaarli
news: TT-RSS
notes: Turtl
pad: Etherpad
piaf: Mastodon
pic: Lutim
site: Grav / PrettyNoemie
slides: Strut
sphere: Diaspora
story: PickWeaver
talk: Jitsi Meet
team: Mattermost
tube: PeerTube
vectoriel: SVG-Edit
vox: Loomio
wiki: Dokuwiki
huitre: LSTU
tontonroger: Searx
trouvons: Searx

39
app/data/commons/src.yml Normal file
View file

@ -0,0 +1,39 @@
agenda: https://github.com/nextcloud
bag: https://github.com/wallabag
bee: https://github.com/asciimoo/searx
bin: https://github.com/PrivateBin/PrivateBin
board: https://github.com/kanboard/kanboard
bookin: https://github.com/rvolz/BicBucStriim
calc: https://github.com/audreyt/ethercalc
carte: https://github.com/umap-project
clic: https://framagit.org/luc/dolomon
drive: https://github.com/nextcloud
drop: https://framagit.org/luc/lufi
forms: https://www.drupal.org/project/webform
git: https://about.gitlab.com/contributing/
link: https://framagit.org/luc/lstu
listes: https://www.sympa.org
memo: https://github.com/aliasaria/scrumblr
mindmap: https://bitbucket.org/wisemapping/wisemapping-open-source
minetest: https://github.com/minetest
my: https://github.com/shaarli/Shaarli
news: https://tt-rss.org/gitlab/fox/tt-rss/wikis/home
notes: https://github.com/turtl
pad: https://github.com/ether/etherpad-lite
petitions: https://www.drupal.org/project/webform
piaf: https://github.com/tootsuite/mastodon
pic: https://framagit.org/luc/lutim
site: https://github.com/getgrav/grav
slides: https://github.com/tantaman/Strut
sphere: https://github.com/diaspora
story: https://framagit.org/framasoft/pickweaver
talk: https://github.com/jitsi/jitsi-meet
team: https://github.com/mattermost
tube: https://github.com/Chocobozzz/PeerTube
vectoriel: https://github.com/SVG-Edit/svgedit
vox: https://github.com/loomio
wiki: https://github.com/splitbrain/dokuwiki
huitre: https://framagit.org/luc/lstu
tontonroger: https://github.com/asciimoo/searx
trouvons: https://github.com/asciimoo/searx

View file

@ -0,0 +1,41 @@
agenda: 24
bag: 13
bee: 5
bin: 9
blog: 3
board: 17
book: 10
calc: 16
carte: 33
clic: 36
colibri: 30
date: 4
drive: 15
drop: 31
forms: 22
git: 6
key: 18
link: 8
listes: 20
maestro: 28
memo: 25
mindmap: 14
minetest: 26
my: 29
news: 12
notes: 21
pad: 1
piaf: 32
pic: 7
site: 34
slides: 27
sphere: 2
story: 35
talk: 23
team: 6
vox: 19
wiki: 34
huitre: 8
tontonroger: 5
trouvons: 5

6
app/data/locales/ca.yml Normal file
View file

@ -0,0 +1,6 @@
nav:
langChange: Canvia de llengua
lang: Llengua
translate: Tradueix
txt:
search: Cerca

7
app/data/locales/de.yml Normal file
View file

@ -0,0 +1,7 @@
nav:
langChange: Sprache ändern
lang: Sprache
translate: Übersetzen
txt:
search: Durchsuchen
backTop: Zurück zum Anfang

23
app/data/locales/en.yml Normal file
View file

@ -0,0 +1,23 @@
nav:
langChange: Change language
lang: Language
translate: Translate
carousel:
play: Play
pause: Pause
prev: Previous slide
next: Next slide
goto: Goto slide
indicator: Select a slide to display
txt:
dio: De-google-ify Internet
newWindow: new window
close: Close
nevershow: Do not display anymore
source: Source
contactUs: Contact us
site: Site
search: Search
backTop: Back to top
color:
dio: <b class="violet">De-google-ify</b> <b class="orange">Internet</b>

7
app/data/locales/es.yml Normal file
View file

@ -0,0 +1,7 @@
nav:
langChange: Cambia el idioma
lang: Idioma
translate: Traducir
txt:
search: Buscar
backTop: Volver al comienzo de página

23
app/data/locales/fr.yml Normal file
View file

@ -0,0 +1,23 @@
nav:
langChange: Changer la langue
lang: Langue
translate: Traduire
carousel:
play: Lecture
pause: Pause
prev: Diapo précédente
next: Diapo suivante
goto: Aller à la diapo
indicator: Sélectionner une diapo à afficher
txt:
dio: Dégooglisons Internet
newWindow: nouvelle fenêtre
close: Fermer
nevershow: Ne plus afficher
source: Source
contactUs: Contactez-nous
site: Site
search: Rechercher
backTop: Retour en haut
color:
dio: <b class="violet">Dégooglisons</b> <b class="orange">Internet</b>

14
app/data/locales/it.yml Normal file
View file

@ -0,0 +1,14 @@
nav:
langChange: Cambia lingua
lang: Lingua
translate: Tradurre
carousel:
play: Riproduci
pause: Pausa
prev: Slide precedente
next: Slide seguente
txt:
dio: De-googl-izzare internet
search: Cerca
color:
dio: <b class="violet">De-googl-izzare</b> <b class="orange">internet</b>

11
app/data/project.tpl.yml Normal file
View file

@ -0,0 +1,11 @@
meta:
title: Framasoft
author: Framasoft
canonical: https://framasoft.org
# i18n: http://trad.framasoft.org/iteration/view/<project_name>/master
txt:
# soft: text from color.soft (but you can reassign it here)
html:
# soft: <a href="link.soft">color.soft</a>

17
app/data/project.yml Normal file
View file

@ -0,0 +1,17 @@
meta:
title: Join PeerTube
author: Framasoft
canonical: https://joinpeertube.org
i18n: https://trad.framasoft.org/project/view/join-peertube/master
hlink:
contact: <a href="https://contact.framasoft.org">https://contact.framasoft.org</a>
soutenir: <a href="https://soutenir.framasoft.org">https://soutenir.framasoft.org</a>
video:
rss: https://framatube.org/videos/watch/f57da309-6b92-4fe0-9267-ff8188cc050c
torrent: https://framatube.org/videos/watch/dcad56d9-9fe6-45bc-96aa-3d778f6804c1
yt-import: https://framatube.org/videos/watch/59d306c0-fc5b-493a-956a-43785693346b
subtitle: https://framatube.org/videos/watch/edd7a468-08d5-4877-b62b-61c5f3f83ceb
search: https://framatube.org/videos/watch/60c4bea4-6bb2-4fce-8d9f-8a522575419d
subscription: https://framatube.org/videos/watch/8968dbe1-a387-433b-a20f-37fe9f3ca8d5

View file

@ -5,49 +5,104 @@ import VueI18n from 'vue-i18n';
import vueHeadful from 'vue-headful'; import vueHeadful from 'vue-headful';
import App from './App.vue'; import App from './App.vue';
import Home from './components/pages/Home.vue';
import './assets/scss/bootstrap.scss'; import './assets/scss/bootstrap.scss';
import '../node_modules/fork-awesome/css/fork-awesome.css'; import '../node_modules/fork-awesome/css/fork-awesome.css';
import './assets/scss/main.scss'; import './assets/scss/main.scss';
import text from './plugins/text';
import is from './plugins/is';
import cookie from './plugins/cookie';
import merge from './plugins/merge';
Vue.use(VueRouter); Vue.use(VueRouter);
Vue.use(VueI18n); Vue.use(VueI18n);
Vue.component('vue-headful', vueHeadful); Vue.component('vue-headful', vueHeadful);
Vue.use(text);
Vue.use(is);
Vue.use(cookie);
Vue.use(merge);
const defaultLocale = 'fr'; const defaultLocale = 'fr';
const locales = []; const locales = {};
const pages = []; const pages = [];
const commons = [];
// Import locales list // Import locales list
let req = require.context('./locales/', false, /\.yml$/); // in locales/[lg]/[file].yml
let req = require.context('./locales/', true, /\.\/.*\/.*\.yml$/);
req.keys().forEach((key) => { req.keys().forEach((key) => {
locales.push(key.replace(/\.\/(.*)\.yml/, '$1')); const lg = key.split('/')[1];
const file = key.split('/')[2].replace(/\.yml/, '');
if (locales[lg] === undefined) {
locales[lg] = [];
}
if (!locales[lg].includes(file)) {
locales[lg].push(file);
}
});
// Flag if data/locales/[lg].yml is available
req = require.context('./data/locales/', false, /\.yml$/);
req.keys().forEach((key) => {
const lg = key.replace(/\.\/(.*)\.yml/, '$1');
if (Array.isArray(locales[lg])) {
locales[lg].push('data');
}
}); });
// Import pages list // Import pages list
req = require.context('./components/pages', false, /\.vue$/); req = require.context('./components/pages', false, /\.vue$/);
req.keys().forEach((key) => { req.keys().forEach((key) => {
pages.push(key.replace(/\.\/(.*)\.vue/, '$1')); pages.push(key.replace(/\.\/(.*)\.vue/, '$1'));
}); });
// Import commons data list
req = require.context('./data/commons/', false, /\.yml$/);
req.keys().forEach((key) => {
commons.push(key.replace(/\.\/(.*)\.yml/, '$1'));
});
const lang = window.location.href const lang = window.location.href
.split('/')[(process.env.BASE_URL === '' || (window.location.href.match(/\//g)).length === 3) ? 3 : 4] .split('/')[(process.env.BASE_URL === '' || (window.location.href.match(/\//g)).length === 3) ? 3 : 4]
.substr(0, 2) .substr(0, 2)
.toLowerCase() || defaultLocale; .toLowerCase() || '';
document.getElementsByTagName('html')[0].setAttribute('lang', lang); document.getElementsByTagName('html')[0].setAttribute('lang', lang);
const userLang = navigator.languages const userLang = navigator.languages
|| [navigator.language || navigator.userLanguage]; || [navigator.language || navigator.userLanguage];
let defaultRouteLang = ''; let defaultRouteLang = '';
const messages = {}; const messages = {};
messages.locales = require('./lang.yml'); // eslint-disable-line const numberFormats = {};
messages.locales.avalaible = Object.keys(messages.locales).filter(n => locales.indexOf(n) > -1); messages.locales = require('./data/lang.yml'); // eslint-disable-line
messages.locales.available = Object
.keys(messages.locales)
.filter(n => Object.keys(locales).indexOf(n) > -1);
// Data import // Data import
let data = {}; const data = {};
data = require('./data.yml'); // eslint-disable-line let project = {};
data['/'] = `/${process.env.BASE_URL.replace(/(.+)/, '$1/')}`; const scripts = document.getElementsByTagName('script');
data.hash = window.location.hash.replace('#', ''); for (let i = 0; i < commons.length; i += 1) {
data[commons[i]] = require(`./data/commons/${commons[i]}.yml`); // eslint-disable-line
}
project = require('./data/project.yml'); // eslint-disable-line
Object.assign(data, project);
Object.assign(data, {
host: window.location.host,
url: window.location.href,
'/': `/${process.env.BASE_URL.replace(/(.+)/, '$1/')}`,
inframe: window.top.location !== window.self.document.location,
hash: window.location.hash.replace('#', ''),
});
data.self = new URL(scripts[scripts.length - 1].src, data.url).href;
if (process.env.NODE_ENV === 'production'
&& data.meta.canonical !== undefined
&& /^http/.test(data.meta.canonical)) {
data.baseurl = data.meta.canonical;
} else {
data.baseurl = `${data.self.split('/').slice(0, -1).join('/')}/`;
}
data.txt = data.txt || {}; data.txt = data.txt || {};
data.html = data.html || {}; data.html = data.html || {};
Object.keys(data.color).forEach((k) => { Object.keys(data.color).forEach((k) => {
@ -57,7 +112,6 @@ Object.keys(data.color).forEach((k) => {
data.txt[k] = tmp.textContent || tmp.innerText; data.txt[k] = tmp.textContent || tmp.innerText;
} }
}); });
Object.keys(data.link).forEach((k) => { Object.keys(data.link).forEach((k) => {
if (data.html[k] === undefined) { if (data.html[k] === undefined) {
if (data.color[k] !== undefined) { if (data.color[k] !== undefined) {
@ -68,58 +122,85 @@ Object.keys(data.link).forEach((k) => {
} }
}); });
const routes = [ const routes = [];
{ path: '/', component: Home, meta: { id: 'home', lang: defaultLocale } }, Object.keys(locales).forEach((k) => {
]; messages[k] = {};
numberFormats[k] = {};
for (let i = 0; i < locales.length; i += 1) {
messages[locales[i]] = {};
// Locales import // Locales import
/* eslint-disable */ /* eslint-disable */
import(/* webpackChunkName: "lang-[request]" */`./locales/${locales[i]}.yml`).then((locale) => { for (let i = 0; i < commons.length; i += 1) {
messages[locales[i]] = locale; messages[k] = require(`./data/commons/${commons[i]}.yml`); // eslint-disable-line
messages[locales[i]].data = data; }
messages[locales[i]].lang = locales[i]; messages[k] = require(`./locales/${k}/main.yml`); // eslint-disable-line
}).catch((err) => { for (let i = 0; i < locales[k].length; i += 1) {
console.error(err); const file = locales[k][i];
}); if (!/main|data/.test(file)) {
messages[k][file] = require(`./locales/${k}/${file}.yml`); // eslint-disable-line
}
if (/data/.test(file)) {
const dataLocale = require(`./data/locales/${k}.yml`);
Object.keys(dataLocale).forEach((l) => {
if (messages[k][l] === undefined) {
messages[k][l] = dataLocale[l];
} else {
Object.assign(messages[k][l], dataLocale[l]);
}
});
}
}
messages[k].data = data;
messages[k].lang = k;
numberFormats[k].eur = {
style: 'currency',
currency: 'EUR',
maximumFractionDigits: 0,
minimumFractionDigits: 0,
};
/* eslint-enable */ /* eslint-enable */
// Localized routes // Localized routes
for (let j = 0; j < pages.length; j += 1) { for (let j = 0; j < pages.length; j += 1) {
const component = require(`./components/pages/${pages[j]}.vue`); // eslint-disable-line const component = require(`./components/pages/${pages[j]}.vue`); // eslint-disable-line
routes.push({ routes.push({
path: `/${locales[i]}${pages[j].toLowerCase().replace(/^/, '/').replace('/home', '')}`, path: `/${k}${pages[j].toLowerCase().replace(/^/, '/').replace('/home', '')}`,
component: component.default,
meta: { id: pages[j].toLowerCase(), lang: k },
});
}
});
// define defaultRouteLang
for (let j = 0; j < userLang.length; j += 1) { // check if user locales
const lg = userLang[j].substring(0, 2).toLowerCase();
if (defaultRouteLang === '' && Object.keys(locales).includes(lg)) { // matches with app locales
defaultRouteLang = lg;
}
}
// Redirections
for (let i = 0; i < pages.length; i += 1) {
if (!window.vuefsPrerender) {
routes.push({
path: `/${pages[i].toLowerCase().replace('home', '')}`,
redirect: `/${defaultRouteLang}/${pages[i].toLowerCase().replace('home', '')}`,
});
} else {
// Component needed for SEO
const component = require(`./components/pages/${pages[i]}.vue`); // eslint-disable-line
routes.push({
path: `/${pages[i].toLowerCase().replace('home', '')}`,
component: component.default, component: component.default,
meta: { id: pages[j].toLowerCase(), lang: locales[i] },
}); });
} }
} }
// define defaultRouteLang
for (let j = 0; j < userLang.length; j += 1) { // check if user locales
for (let i = 0; i < locales.length; i += 1) { // matches with app locales
if (defaultRouteLang === '' && userLang[j].substring(0, 2).toLowerCase() === locales[i]) {
defaultRouteLang = locales[i];
}
}
}
// Home redirection
const currentURL = window.location.href.replace(/\/+$/, '');
if ((currentURL.split('/')[3] === undefined || currentURL.split('/')[3] === process.env.BASE_URL)
&& (currentURL.split('/')[4] === undefined)) {
if (defaultRouteLang === '') {
defaultRouteLang = defaultLocale;
}
window.location.href = `${currentURL}/${defaultRouteLang}/`;
}
// Create VueI18n instance with options // Create VueI18n instance with options
const i18n = new VueI18n({ const i18n = new VueI18n({
locale: lang, locale: lang === '' ? defaultRouteLang : lang,
fallbackLocale: defaultLocale, fallbackLocale: defaultLocale,
messages, messages,
numberFormats,
silentTranslationWarn: true, silentTranslationWarn: true,
}); });

View file

@ -1,9 +1,6 @@
meta: meta:
title: '@:home.title! #JoinPeerTube' title: '@:home.title! #JoinPeerTube'
nav: description: A decentralized video hosting network, based on free/libre software
langChange: Change the language
lang: Language
translate: Translate
menu: menu:
faq: F.A.Q. faq: F.A.Q.
help: Support help: Support
@ -22,7 +19,7 @@ home:
getting-started: Get started getting-started: Get started
how-it-works: How it works how-it-works: How it works
banner: banner:
subtitle: We're talking about our progress these last months and what's coming subtitle: Were talking about our progress these last months and whats coming
next. next.
button: Support button: Support
install: Install PeerTube install: Install PeerTube
@ -103,7 +100,7 @@ home:
consisting of the local username (@chocobozzz) and the domain name of the consisting of the local username (@chocobozzz) and the domain name of the
server it is on (framatube.org). server it is on (framatube.org).
- The administrators of a PeerTube instance can follow each other. When your - The administrators of a PeerTube instance can follow each other. When your
PeerTube instance follows another PeerTube instance, you receive the videos' PeerTube instance follows another PeerTube instance, you receive the videos
preview information from this instance. This way, you can display the videos preview information from this instance. This way, you can display the videos
available on your instance and on the instances you decided to follow. So available on your instance and on the instances you decided to follow. So
you keep control of the videos displayed on your PeerTube instance! you keep control of the videos displayed on your PeerTube instance!
@ -133,7 +130,7 @@ faq:
title: What is PeerTube? title: What is PeerTube?
text: text:
- PeerTube is software that you install on a web server. It allows you to create - PeerTube is software that you install on a web server. It allows you to create
a video hosting website, so create your "homemade YouTube". a video hosting website, so create your “homemade YouTube”.
- The difference to YouTube is that its not intended to create a huge platform - The difference to YouTube is that its not intended to create a huge platform
centralizing videos from the whole world on a single server farm (which is centralizing videos from the whole world on a single server farm (which is
horribly expensive). horribly expensive).
@ -177,7 +174,7 @@ faq:
- If the hosting provider Knitting-PeerTube becomes friends with Kittens-Tube - If the hosting provider Knitting-PeerTube becomes friends with Kittens-Tube
and Framatube, it will display the videos of others on its site, thus diluting and Framatube, it will display the videos of others on its site, thus diluting
hosting costs while remaining practical and complete for Internet users. hosting costs while remaining practical and complete for Internet users.
- 'PeerTubes federation protocol will be fluid (everyone can choose their "friends" - 'PeerTubes federation protocol will be fluid (everyone can choose their “friends”
hosts), and based on <a href="@:data.link.activitypub">ActivityPub</a>: this hosts), and based on <a href="@:data.link.activitypub">ActivityPub</a>: this
will open the possibility to connect with tools like Mastodon or MediaGoblin.' will open the possibility to connect with tools like Mastodon or MediaGoblin.'
p2p: p2p:
@ -191,14 +188,14 @@ faq:
bits of files, which relieves the server. bits of files, which relieves the server.
- 'There is nothing to do: your web browser does it automatically. If you are - 'There is nothing to do: your web browser does it automatically. If you are
on a mobile phone or if your network does not allow it (router, firewall, on a mobile phone or if your network does not allow it (router, firewall,
etc.), this function is disabled and switches back to an "old-style" video etc.), this function is disabled and switches back to an “old-style” video
broadcast @:data.emoji.wink</>.' broadcast @:data.emoji.wink</>.'
admin: admin:
title: For those who know how to administer a server, PeerTube is… title: For those who know how to administer a server, PeerTube is…
text: text:
- '<strong>Its software you install on your server</strong> to create a website - '<strong>Its software you install on your server</strong> to create a website
where videos are hosted and broadcast… Basically: you create your own "homemade where videos are hosted and broadcast… Basically: you create your own homemade
YouTube"!' YouTube!'
- There already exists free/libre software that enables you to do this. But - There already exists free/libre software that enables you to do this. But
with PeerTube, you can link your instance (your video website) to Zaïds PeerTube with PeerTube, you can link your instance (your video website) to Zaïds PeerTube
instance (where he hosts videos of the lectures for his peoples university), instance (where he hosts videos of the lectures for his peoples university),
@ -222,7 +219,7 @@ faq:
title: For those who wants to upload their videos, PeerTube allows… title: For those who wants to upload their videos, PeerTube allows…
text: text:
- 'It allows you to choose a hoster that fits you. YouTubes excesses are a - 'It allows you to choose a hoster that fits you. YouTubes excesses are a
good exemple: its hoster, Google/Alphabet, can impose its "Robocopyright" good exemple: its hoster, Google/Alphabet, can impose its “Robocopyright”
(the ContentID system) or its tools to index, recommend and spotlight videos; (the ContentID system) or its tools to index, recommend and spotlight videos;
and those tools seem as unfair as they are obscure. Even though, it already and those tools seem as unfair as they are obscure. Even though, it already
forces you <a href="@:data.link.tosdr">to give it extended copyrights on your forces you <a href="@:data.link.tosdr">to give it extended copyrights on your
@ -311,7 +308,7 @@ faq:
- OrderedDict([('There are none, not at the moment', 'PeerTube is a tool that - OrderedDict([('There are none, not at the moment', 'PeerTube is a tool that
we wanted neutral in terms of remuneration.')]) we wanted neutral in terms of remuneration.')])
- 'For now, the solution proposed to people who upload videos is to use the - 'For now, the solution proposed to people who upload videos is to use the
"support" button under the video. This button displays a frame in which people “support” button under the video. This button displays a frame in which people
who upload videos can display text, images, and links freely. For example, who upload videos can display text, images, and links freely. For example,
its possible to put a link to Patreon, Tipeee, Paypal, Liberapay (or any its possible to put a link to Patreon, Tipeee, Paypal, Liberapay (or any
other solution) there. Other examples: put a postal address if youd like other solution) there. Other examples: put a postal address if youd like
@ -333,7 +330,7 @@ faq:
- Theres a complete <a href="@:data.link.instancesPT">list of instances here</a>, - Theres a complete <a href="@:data.link.instancesPT">list of instances here</a>,
and a list of those that are <a href="./#register">open to registration and a list of those that are <a href="./#register">open to registration
here</a>. here</a>.
- Then, we recommend you go to the instances, read their "about" page to discover - Then, we recommend you go to the instances, read their “about” page to discover
their terms of use (disk space limit per user, content policy, etc.). their terms of use (disk space limit per user, content policy, etc.).
- Its best to contact and talk directly with hosting providers, to understand - Its best to contact and talk directly with hosting providers, to understand
their business model, vision, etc. Because only you can determine what makes their business model, vision, etc. Because only you can determine what makes
@ -345,20 +342,20 @@ faq:
and indexing ~16000 videos, only ~200 videos are tagged as NSFW (i. e. the and indexing ~16000 videos, only ~200 videos are tagged as NSFW (i. e. the
content is sensitive, which could be something else than pornography). Therefore, content is sensitive, which could be something else than pornography). Therefore,
they represent only ~1% of all the videos. they represent only ~1% of all the videos.
- "Moreover, each administrator decides with which instances he wants to federate:\ - 'Moreover, each administrator decides with which instances he wants to federate:
\ he has the full control of the content he wants to display on his instance.\ he has the full control of the content he wants to display on his instance.
\ It's up to him to choose the policy regarding this kind of videos. He can\ Its up to him to choose the policy regarding this kind of videos. He can
\ decide to: <ul><li>Display them</li><li>Blur the title and thumbnail</li><li>Hide\ decide to: <ul><li>Display them</li><li>Blur the title and thumbnail</li><li>Hide
\ them</li></ul>" them</li></ul>'
- By default, this configuration is set to "Hide them". If some administrators - By default, this configuration is set to “Hide them”. If some administrators
decide to display them with a blur filter for example, it's <strong>their</strong> decide to display them with a blur filter for example, its <strong>their</strong>
choice. choice.
- Finally, any user can override this configuration, and decides if he want - Finally, any user can override this configuration, and decides if he want
to display, blur or hide these videos for himself. to display, blur or hide these videos for himself.
- "PeerTube is just a software: it's not Framasoft (non-profit that develops\ - 'PeerTube is just a software: its not Framasoft (non-profit that develops
\ PeerTube) that's responsible for the content published on some instances." PeerTube) thats responsible for the content published on some instances.'
- "It's up to everyone to be responsible: parents, visitors, uploaders, PeerTube\ - 'Its up to everyone to be responsible: parents, visitors, uploaders, PeerTube
\ administrators to respect the law and avoid any problematic situations." administrators to respect the law and avoid any problematic situations.'
forum: Discuss on our forum forum: Discuss on our forum
tech: tech:
install: install:
@ -375,19 +372,19 @@ faq:
title: PeerTube v1.0 does not seem to me to contain all the tools necessary title: PeerTube v1.0 does not seem to me to contain all the tools necessary
for a good management of my instance. for a good management of my instance.
text: text:
- '<blockquote>"Its outrageous and unconscious: youre releasing PeerTubes - '<blockquote>“Its outrageous and unconscious: youre releasing PeerTubes
version 1 when it doesnt contain the necessary tools to effectively manage version 1 when it doesnt contain the necessary tools to effectively manage
videos claimed by rights holders, or to effectively manage the issue of online videos claimed by rights holders, or to effectively manage the issue of online
harassment in comments, or to effectively manage monetization through advertising, harassment in comments, or to effectively manage monetization through advertising,
or to (insert here your request to PeerTube). It will never work! What do or to (insert here your request to PeerTube). It will never work! What do
you intend to do about it?"</blockquote>' you intend to do about it?</blockquote>'
- Youre right. PeerTube 1.0 is not the perfect tool, far from it. And we never - Youre right. PeerTube 1.0 is not the perfect tool, far from it. And we never
promised that this version 1.0 would be a tool that would include all the promised that this version 1.0 would be a tool that would include all the
features corresponding to all cases. features corresponding to all cases.
- PeerTube 1.0 is the realization of the commitment we made in October 2017 - PeerTube 1.0 is the realization of the commitment we made in October 2017
to take PeerTube from an alpha version (personal project and proof of concept to take PeerTube from an alpha version (personal project and proof of concept
that a federated video platform could work) to a 1.0 version in October 2018 that a federated video platform could work) to a 1.0 version in October 2018
(which does not mean "final version", but "version considered stable and distributable"). (which does not mean “final version”, but “version considered stable and distributable”).
- Remember that PeerTube has only one (almost) full time developer and a small - Remember that PeerTube has only one (almost) full time developer and a small
handful of very involved volunteers. It is not a product developed by a start-up handful of very involved volunteers. It is not a product developed by a start-up
with a full time team (dev, design, UX, marketing, support, etc.) and significant with a full time team (dev, design, UX, marketing, support, etc.) and significant
@ -395,7 +392,7 @@ faq:
will continue over the months and, we hope, in the years to come. will continue over the months and, we hope, in the years to come.
- 'We are well aware of the shortcomings of PeerTube 1.0, especially in the - 'We are well aware of the shortcomings of PeerTube 1.0, especially in the
moderation tools area (videos, comments, etc.). And we intend to work on these moderation tools area (videos, comments, etc.). And we intend to work on these
weaknesses. ' weaknesses.'
- 'We have chosen to do so as follows: on the one hand we will work primarily - 'We have chosen to do so as follows: on the one hand we will work primarily
in the coming months to improve these tools within PeerTube itself (in the in the coming months to improve these tools within PeerTube itself (in the
<i>core</i> of the software). On the other hand, we will also focus, in parallel, <i>core</i> of the software). On the other hand, we will also focus, in parallel,
@ -441,7 +438,7 @@ faq:
scale streaming of large files. scale streaming of large files.
- After discussing it on our forum, we feel that d.tube is not free or open - After discussing it on our forum, we feel that d.tube is not free or open
source, because publishing only compiled code hinders freedom of modification. source, because publishing only compiled code hinders freedom of modification.
- D.tube is based on Steem for "remuneration", it is a choice, but Steem is - D.tube is based on Steem for “remuneration”, it is a choice, but Steem is
<a href="https://en.wikipedia.org/wiki/Steemit#Criticism">widely criticized</a> <a href="https://en.wikipedia.org/wiki/Steemit#Criticism">widely criticized</a>
as <a href="https://steemit.com/steemit/@docdelux/30-days-of-steemit-here-is-my-criticism">highly as <a href="https://steemit.com/steemit/@docdelux/30-days-of-steemit-here-is-my-criticism">highly
centralized</a>, and suspiciously <a href="https://steemit.com/steemit/@thecryptonews/psa-constructive-criticism-the-ugly-truth-behind-steemit">resembles centralized</a>, and suspiciously <a href="https://steemit.com/steemit/@thecryptonews/psa-constructive-criticism-the-ugly-truth-behind-steemit">resembles
@ -456,228 +453,3 @@ hof:
donators: Financial Contributors donators: Financial Contributors
dev: Contributors dev: Contributors
contrib: Contribute to the code contrib: Contribute to the code
news:
title: What's up on PeerTube
subtitle: Discover the tool's latest improvements
latest-articles: Latest articles
blocs:
newsletter05-06-2019:
title: PeerTube 1.3 is out!
date:
text: June 5, 2019
data: '2019-06-05'
text:
p1: Hello!
p2: We've just released PeerTube 1.3 and it brings a lot of new features.
p3: "The most important of these new features is <strong>the playlist system</strong>.\
\ This feature allows any user to create a playlist in which it's possible\
\ to add videos and reorder them. Videos added to a playlist can be viewed\
\ entirely or partially: the creator of the playlist can decide when the\
\ video playback starts and/or ends (timecode system). This system is really\
\ useful to create all kinds of zappings or educational contents by selecting\
\ extracts from videos which interest you. In addition, a \"Watch Later\"\
\ playlist is created by default for each user. Thus, you can save videos\
\ in this playlist when you don't have time to watch them immediately."
p4: 'Another feature of this 1.3 version has been entirely developed by an
external contributor: <a href="https://github.com/joshmorel">Josh Morel</a>
who add <strong>a quarantine system</strong> for videos on PeerTube. If
the administrator of an instance enables this feature, any new video uploaded
on his instance will automatically be hidden until a moderator approves
it.'
p5: 'PeerTube translation community have done a huge job. <strong>3 new languages</strong>
are now available: Japanese, Dutch and European Portuguese (PeerTube already
support Brazilian Portuguese). Amazing! PeerTube is now available in 19
languages!'
p6: Now, administrators can <strong>manage more finely how other instances
subscribe to their own instance</strong>. The administrator can decide whether
or not to approve the subscription of another instance to its own. It is
also possible to activate automatic rejection for any new subscription to
its instance. Finally, a notification is created as soon as the administrator's
instance receives a new subscription. These features help administrators
control on which instances their content is displayed.
p7: We're also redesigning the <strong>PeerTube video player</strong> to offer
better video playback and to correct a few bugs. With this new player, resolution
changes should be smoother and the bandwidth management is optimized with
a more efficient buffering system. Version 1.3 of PeerTube also adds ability
for administrators to enable this new experimental player so we can get
feedback on it. We hope to use this new player by default in the future.
p8: Finally, we have made some adjustments to the <strong>user interface</strong>
so it easier and nicer to use. For instance, video thumbnails are becoming
bigger so that they're more highlighted. Users now have a quick access to
their library from the menu that includes their playlists, videos, video
watching history and their subscriptions.
p9: Many other improvements have been made in this new version. You can see
the complete list on <a href="https://github.com/Chocobozzz/PeerTube/releases/tag/v1.3.0">https://github.com/Chocobozzz/PeerTube/releases/tag/v1.3.0</a>.
p10: Thanks to all PeerTube contributors!
p11: Framasoft.
newsletter26-02-2019:
title: 'PeerTube: retrospective, new features and more to come!'
date:
text: February 26, 2019
data: '2019-02-26'
text:
p1: Since version 1.0 has been released last November, we went on improving
PeerTube, day after day. These improvements on PeerTube go well beyond the
objectives fixed during the crowdfunding. They have been funded by the <a
href="https://framasoft.org/en/">Framasoft non-profit</a>, which develops
the software (and lives only through <a href="https://soutenir.framasoft.org/en/">your
donations</a>).
p2: 'Here is a small retrospective of the end of 2018/beginning of 2019:'
p3: In December 2018, we released version 1.1 which contained some moderation
tools requested by instance administrators.<br> We also took the opportunity
to add a watched videos history feature and the automatic resuming of video
playback.
p4: "In January, we released version 1.2 that supports 3 new languages: Russian,\
\ Polish and Italian. Thanks to PeerTube's community of translators, PeerTube\
\ is now translated into 16 different languages!"
p5: This version also includes a notification system that allows users to
be informed (on the web interface or through email) when their video is
commented, when someone mention them, when one of their subscriptions has
published a new video, etc.
p6: 'In the meantime, the PeerTube federation has grown: today, more than
300 instances broadcast more than 70,000 videos, with nearly 2 million cumulated
views. We remind you that the only official website we maintain around PeerTube
is <a href="https://joinpeertube.org/en">https://joinpeertube.org/en</a>
and that we bear no responsibility on any other site that may be published.'
p7: As you can see, we have gone far beyond what the crowdfunding has funded.
And we will continue!<br> For 2019, we plan to add a plugin and theme management
system (even though basic at first), playlist management, support for audio
files upload and many other features.
p8: 'If you also to contribute to the growing of PeerTube, you can participate
in its funding here: <a href="https://soutenir.framasoft.org/en">https://soutenir.framasoft.org/en</a>'
p9: 'If you have any questions, feel free to use our forum: <a href="https://framacolibri.org/c/peertube">https://framacolibri.org/c/peertube</a>'
p10: Thank you and with our best regards,
p11: Framasoft
newsletter16-10-2018:
title: 'PeerTube crowdfunding newsletter #4'
date:
text: October 16, 2018
data: '2018-10-16'
text:
p1: Hello everyone!
p2: We are now in mid-October! As promised, we have just released the first
stable version of PeerTube.
p3: 'It implements all stretch goals we planned in our crowdfunding: <ul><li>Localization
support (as we write these lines, PeerTube is already available in 13 different
languages!)</li> <li>Subtitles support</li> <li>Ability to import videos
through an URL (YouTube, Vimeo, Dailymotion and many others!)</li> <li>Ability
to import a video through a torrent file or a magnet URI</li> <li>RSS feeds,
allowing you to track new videos published in all federated PeerTube instances,
in a specific PeerTube instance or in a video channel you like. You can
also subscribe to comment feeds!</li> <li>A more relevant search, with the
ability to set advanced filters (duration, category, tags...)</li> <li>Subscriptions
throughout the federation: you can follow your favorite video channels and
see all the videos on a dedicated page</li> <li>Redundancy system: a PeerTube
instance can help sharing some videos from another instance</li> </ul>'
p4: ' We know that feature descriptions are not very amusing, so we have published
a few demonstration videos: <ul> <li><a href="https://framatube.org/videos/watch/f57da309-6b92-4fe0-9267-ff8188cc050c">RSS
Feeds</a></li> <li><a href="https://framatube.org/videos/watch/dcad56d9-9fe6-45bc-96aa-3d778f6804c1">Torrent
import</a></li> <li><a href="https://framatube.org/videos/watch/59d306c0-fc5b-493a-956a-43785693346b">YouTube
video import</a></li> <li><a href="https://framatube.org/videos/watch/edd7a468-08d5-4877-b62b-61c5f3f83ceb">Adding
subtitles</a></li> <li><a href="https://framatube.org/videos/watch/60c4bea4-6bb2-4fce-8d9f-8a522575419d">Advanced
search</a></li> <li><a href="https://framatube.org/videos/watch/8968dbe1-a387-433b-a20f-37fe9f3ca8d5">Video
channel subscriptions</a></li> </ul>'
p5: "This is the last newsletter regarding the PeerTube crowdfunding. We would\
\ like to thank you one more time, for allowing us to greatly improve PeerTube,\
\ and therefore to promote a more decentralized web. But the journey does\
\ not end here: we will continue to work on the software, and there is still\
\ a lot to do to fully free up video streaming. But before anything, we'll\
\ take a few days off ;)"
p6: We remind you that you can ask questions on <a href="https://framacolibri.org/c/qualite/peertube">the
PeerTube forum</a>. You can also contact us directly on <a href="https://contact.framasoft.org">
https://contact.framasoft.org</a>.
p7: Cheers,<br>Framasoft
newsletter12-09-2018:
title: 'PeerTube crowdfunding newsletter #3'
date:
text: September 12, 2018
data: '2018-09-12'
text:
p1: Hello everyone!
p2: A month before the version 1 of PeerTube, we would like to share some
(good!) news with you.
p3: We just released PeerTube <em>beta 12</em>, that allows to subscribe to
video channels, whether they are on your instance or even on remote instances.
This way, you can browse videos of your subscribed channels in a dedicated
page. Moreover, if your PeerTube administrator allows it, you can search
a channel or a video directly by typing their web address in the PeerTube
search bar.
p4: It was not included in the crowdfunding, but we created an "Overview"
page, that displays videos of some categories/tags/channels picked randomly,
to show the diversity of the videos uploaded on PeerTube. You can see <a
href="https://peertube3.cpy.re/videos/overview">a demonstration here</a>.
p5: You can read the complete <em>beta 12</em> changelog <a href="https://github.com/Chocobozzz/PeerTube/blob/develop/CHANGELOG.md#v100-beta12">here</a>.
p6: "Regarding the crowdfunding, most of the rewards are ready: <a href=\"\
https://github.com/Chocobozzz/PeerTube\">the PeerTube README</a> and <a\
\ href=\"https://joinpeertube.org/fr/hall-of-fame/\">the JoinPeerTube Hall\
\ of Fame</a> show off the names of the persons who have chosen the corresponding\
\ rewards. We will soon be able to send the personalized thank-you digital\
\ arts to people that gave 80€ (~93 USD) and more (and it's so beautiful\
\ that we are looking forward to it!)"
p7: The last feature we have to implement is the videos redundancy between
instances, which will further increase resilience on instance overload.
If all goes well, we should finish it in about two weeks (end of september).
p8: We remind you that you can track the progress of the work directly <a
href="https://github.com/Chocobozzz/PeerTube"> on the git repository</a>,
and be part of the discussions/bug reports/feature requests in the "Issues"
tab.
p9: Moreover, you can ask questions on <a href="https://framacolibri.org/c/qualite/peertube">the
PeerTube forum</a>. You can also contact us directly on <a href="https://contact.framasoft.org">https://contact.framasoft.org.</a>
p10: Cheers,<br>Framasoft
newsletter20-08-2018:
title: 'PeerTube crowdfunding newsletter #2'
date:
text: August 20, 2018
data: '2018-08-20'
text:
p1: Hello everyone!
p2: The development of the crowdfunding features is going well.
p3: As a reminder, in the first newsletter (July 23rd, 2018), we announced
that the localization system and RSS feeds were implemented, and that we
were making progress on the subtitles support and the advanced search.
p4: These four features are all implemented, and can already be used on instances
updated to version <em>v1.0.0-beta.10</em> (for example <a href="https://framatube.org">https://framatube.org</a>).
Regarding the subtitles support, you can test them on the <a href="https://framatube.org/videos/watch/217eefeb-883d-45be-b7fc-a788ad8507d3">
the "What is PeerTube"</a> video.
p5: We are currently finishing the video import system, from a URL (YouTube,
Vimeo etc) or a torrent file. This feature should be available in a few
days, when we will release a new version (<em>v1.0.0-beta.11</em>).<br>
The import system will complete the first crowdfunding goal. The next feature
we will be working on will be the user subscriptions.
p6: We remind you that you can track the progress of the work directly <a
href="https://github.com/Chocobozzz/PeerTube"> on the git repository</a>,
and be part of the discussions/bug reports/feature requests in the "Issues"
tab.
p7: Moreover, you can ask questions on <a href="https://framacolibri.org/c/qualite/peertube">the
PeerTube forum</a>. You can also contact us directly on <a href="https://contact.framasoft.org">https://contact.framasoft.org.</a>
p8: Cheers,<br>Framasoft
newsletter23-07-2018:
title: 'PeerTube crowdfunding newsletter #1'
date:
text: July 23, 2018
data: '2018-07-23'
text:
p1: Hello everyone!
p2: First of all, thank you again for contributing to PeerTube! ❤️
p3: "During the crowdfunding campaign, we continued to work on the localization\
\ system. And we are happy to announce it's finally completed: it will be\
\ available in the next beta (<em>beta 10</em>) of PeerTube. As of this\
\ writing, the web interface is already available in english, french, basque,\
\ catalan, czech and esperanto (huge thank you to <a href=\"https://github.com/Chocobozzz/PeerTube/blob/develop/CREDITS.md#translations\"\
> all of the translators</a>). If you too want to help translating PeerTube,\
\ do not hesitate to check out <a href=\"https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/translation.md\"\
>the documentation</a>!"
p4: Regarding the RSS feeds feature, it was already implemented by <a href="https://github.com/rigelk">Rigelk</a>
and you can already use it in the <em>beta 9</em>. You can, for example,
get <a href="https://framatube.org/feeds/videos.xml?sort=-publishedAt&filter=local">
the feed of the last local videos uploaded in a particular instance</a>.
p5: Subtitles support is well under way, and we should have a first version
available soon. When this work is finished, we will develop the advanced
search.
p6: We remind you that you can track the progress of the work directly <a
href="https://github.com/Chocobozzz/PeerTube"> on the git repository</a>,
and be part of the discussions/bug reports/feature requests in the "Issues"
tab.
p7: Moreover, you can ask questions on <a href="https://framacolibri.org/c/qualite/peertube">the
PeerTube forum</a>. You can also contact us directly on <a href="https://contact.framasoft.org">https://contact.framasoft.org.</a>
p8: Cheers,<br>Framasoft

269
app/locales/en/news.yml Normal file
View file

@ -0,0 +1,269 @@
title: Whats up on PeerTube
subtitle: Discover the tools latest improvements
latest-articles: Latest articles
blocs:
19-09-25:
title: PeerTube 1.4 is out!
date: September 25, 2019
text:
p1:
- Hi everybody,
- Peertube 1.4 just came out! Heres a quick overview of whats new…
h4a: Plug-in system
p2:
- 'Since PeerTubes launch, we have been aware that every administrator and user wishes to see the software fulfill their needs. As Framasoft cannot and will not develop every feature that could be hoped for, we have from the start of the project planned on creating a plug-in system.'
- 'We are pleased to announce that the foundation stones of this system have been laid in this 1.4 release! It might be very basic for now, but we plan on improving it bit by bit in Peertubes future releases.'
- 'Now, this system allows each administrator to <b>create specific plug-ins</b> depending on their needs. They may install extensions created by other people on their instance as well. For example, it is now possible to install community created graphical themes to change the instance visual interface.'
h4b: A better interface
p3:
- 'We strive to improve PeerTubes interface by collecting users opinions so that we know what is causing them trouble (in terms of understanding and usability for example). Even though this is a time-consuming undertaking, this new release already offers you a few modifications.'
- 'First of all, we realized that most people who discover PeerTube have a hard time understanding <b>the difference between a channel and an account</b>. Indeed, on others video broadcasting services (such as YouTube) these two things are pretty much the same.'
- 'However, on PeerTube each account is linked to one or multiple channels that can be named as the users sees fit. You also have to create at least one channel when creating an account. Once the channels have been created, users can upload videos to each channel to organize their contents (for example, you could have a channel about cooking and another one about biking).'
- <figure>
<img src="@:data.baseurl/img/@:lang/channel.png" alt="">
<figcaption>2 channels on Framasofts account on Framatube instance</figcaption>
</figure>
- 'In order to make this channel idea more understandable, we have changed the sign-up form, which from now on consists of two steps:'
ul:
- 'Step 1: account creation (choosing your username, password, email, etc.)'
- 'Step 2: choosing your default channel name via a new form'
p-img-signup:
- <figure>
<img src="@:data.baseurl/img/@:lang/account-creation.png" alt="" />
<figcaption>the new sign-up form in 2 steps</figcaption>
</figure>'
ul2:
- 'We also aimed to differentiate a channel homepage from that of an account. These two pages used to list videos, whereas now the account homepage lists all the channel linked to the account by showing under each channel name the thumbnail from the last videos uploaded on it.'
- 'Another unclear element was the <b>video sharing pop-up</b>. We have improved it, and it is now possible to share or embed a video by making it start and/or finish at a precise moment (time-code feature), to decide which subtitles will appear by default, and to loop the video. These new options will surely be greatly enjoyed.'
p-img-share:
- <figure>
<img src="@:data.baseurl/img/@:lang/share-popup.png" alt="">
<figcaption>customization options when video sharing</figcaption>
</figure>
h4c: More features
p4:
- 'Our wonderful community of translators is once again to thank for their work, after they enriched PeerTube with <b>3 new languages</b>: Finnish, Greek and Scottish Gaelic, making PeerTube now available in 22 languages.'
- 'We also added a new feature allowing you to <b>upload an audio file</b> directly to PeerTube: the software will automatically create a video from the audio file. This much awaited for feature should make life easier for music makers :)'
- 'This new release includes many other improvements. You can see the complete list on <a href="@:data.link.gitPT/releases/tag/v1.4.0">@:data.link.gitPT/releases/tag/v1.4.0</a>.'
- 'Thanks to all PeerTube contributors!<br>Framasoft'
19-06-05:
title: PeerTube 1.3 is out!
date: June 5, 2019
text:
p:
- Hello!
- Weve just released PeerTube 1.3 and it brings a lot of new features.
- 'The most important of these new features is <strong>the playlist system</strong>.
This feature allows any user to create a playlist in which its possible
to add videos and reorder them. Videos added to a playlist can be viewed
entirely or partially: the creator of the playlist can decide when the
video playback starts and/or ends (timecode system). This system is really
useful to create all kinds of zappings or educational contents by selecting
extracts from videos which interest you. In addition, a “Watch Later”
playlist is created by default for each user. Thus, you can save videos
in this playlist when you dont have time to watch them immediately.'
- 'Another feature of this 1.3 version has been entirely developed by an
external contributor: <a href="https://github.com/joshmorel">Josh Morel</a>
who add <strong>a quarantine system</strong> for videos on PeerTube. If
the administrator of an instance enables this feature, any new video uploaded
on his instance will automatically be hidden until a moderator approves
it.'
- 'PeerTube translation community have done a huge job. <strong>3 new languages</strong>
are now available: Japanese, Dutch and European Portuguese (PeerTube already
support Brazilian Portuguese). Amazing! PeerTube is now available in 19
languages!'
- Now, administrators can <strong>manage more finely how other instances
subscribe to their own instance</strong>. The administrator can decide whether
or not to approve the subscription of another instance to its own. It is
also possible to activate automatic rejection for any new subscription to
its instance. Finally, a notification is created as soon as the administrators
instance receives a new subscription. These features help administrators
control on which instances their content is displayed.
- Were also redesigning the <strong>PeerTube video player</strong> to offer
better video playback and to correct a few bugs. With this new player, resolution
changes should be smoother and the bandwidth management is optimized with
a more efficient buffering system. Version 1.3 of PeerTube also adds ability
for administrators to enable this new experimental player so we can get
feedback on it. We hope to use this new player by default in the future.
- Finally, we have made some adjustments to the <strong>user interface</strong>
so it easier and nicer to use. For instance, video thumbnails are becoming
bigger so that theyre more highlighted. Users now have a quick access to
their library from the menu that includes their playlists, videos, video
watching history and their subscriptions.
- Many other improvements have been made in this new version. You can see
the complete list on <a href="@:data.link.gitPT/releases/tag/v1.3.0">@:data.link.gitPT/releases/tag/v1.3.0</a>.
- Thanks to all PeerTube contributors!<br>Framasoft.
19-02-26:
title: 'PeerTube: retrospective, new features and more to come!'
date: February 26, 2019
text:
p:
- Since version 1.0 has been released last November, we went on improving
PeerTube, day after day. These improvements on PeerTube go well beyond the
objectives fixed during the crowdfunding. They have been funded by the <a
href="@:data.link.soft">Framasoft non-profit</a>, which develops
the software (and lives only through <a href="@:data.link.soutenir">your
donations</a>).
- 'Here is a small retrospective of the end of 2018/beginning of 2019:'
- In December 2018, we released version 1.1 which contained some moderation
tools requested by instance administrators.<br> We also took the opportunity
to add a watched videos history feature and the automatic resuming of video
playback.
- 'In January, we released version 1.2 that supports 3 new languages: Russian,
Polish and Italian. Thanks to PeerTubes community of translators, PeerTube
is now translated into 16 different languages!'
- This version also includes a notification system that allows users to
be informed (on the web interface or through email) when their video is
commented, when someone mention them, when one of their subscriptions has
published a new video, etc.
- 'In the meantime, the PeerTube federation has grown: today, more than
300 instances broadcast more than 70,000 videos, with nearly 2 million cumulated
views. We remind you that the only official website we maintain around PeerTube
is <a href="@:data.link.joinpeertube">@:data.link.joinpeertube</a>
and that we bear no responsibility on any other site that may be published.'
- As you can see, we have gone far beyond what the crowdfunding has funded.
And we will continue!<br> For 2019, we plan to add a plugin and theme management
system (even though basic at first), playlist management, support for audio
files upload and many other features.
- 'If you also to contribute to the growing of PeerTube, you can participate
in its funding here: @:data.html.soutenir'
- 'If you have any questions, feel free to use <a href="@:link.forumPT">our forum</a>.'
- Thank you and with our best regards,<br>Framasoft
18-10-16:
title: 'PeerTube crowdfunding newsletter #4'
date: October 16, 2018
text:
p1:
- Hello everyone!
- We are now in mid-October! As promised, we have just released the first
stable version of PeerTube.
- 'It implements all stretch goals we planned in our crowdfunding:'
ul1:
- Localization support (as we write these lines, PeerTube is already available in 13 different
languages!)
- Subtitles support
- Ability to import videos
through an URL (YouTube, Vimeo, Dailymotion and many others!)
- Ability
to import a video through a torrent file or a magnet URI
- RSS feeds,
allowing you to track new videos published in all federated PeerTube instances,
in a specific PeerTube instance or in a video channel you like. You can
also subscribe to comment feeds!
- A more relevant search, with the
ability to set advanced filters (duration, category, tags…)
- 'Subscriptions throughout the federation: you can follow your favorite video channels and
see all the videos on a dedicated page'
- 'Redundancy system: a PeerTube
instance can help sharing some videos from another instance'
p2:
- ' We know that feature descriptions are not very amusing, so we have published
a few demonstration videos:'
ul2:
- <a href="@:data.video.rss">RSS Feeds</a>
- <a href="@:data.video.torrent">Torrent import</a>
- <a href="@:data.video.yt-import">YouTube video import</a>
- <a href="@:data.video.subtitle">Adding subtitles</a>
- <a href="@:data.video.search">Advanced search</a>
- <a href="@:data.video.subscription">Video channel subscriptions</a>
p3:
- 'This is the last newsletter regarding the PeerTube crowdfunding. We would
like to thank you one more time, for allowing us to greatly improve PeerTube,
and therefore to promote a more decentralized web. But the journey does
not end here: we will continue to work on the software, and there is still
a lot to do to fully free up video streaming. But before anything, well
take a few days off ;)'
- We remind you that you can ask questions on <a href="@:link.forumPT">the
PeerTube forum</a>. You can also contact us directly on @:data.hlink.contact</>.
- Cheers,<br>Framasoft
18-09-12:
title: 'PeerTube crowdfunding newsletter #3'
date: September 12, 2018
text:
p:
- Hello everyone!
- A month before the version 1 of PeerTube, we would like to share some
(good!) news with you.
- We just released PeerTube <em>beta 12</em>, that allows to subscribe to
video channels, whether they are on your instance or even on remote instances.
This way, you can browse videos of your subscribed channels in a dedicated
page. Moreover, if your PeerTube administrator allows it, you can search
a channel or a video directly by typing their web address in the PeerTube
search bar.
- It was not included in the crowdfunding, but we created an “Overview”
page, that displays videos of some categories/tags/channels picked randomly,
to show the diversity of the videos uploaded on PeerTube. You can see <a
href="https://peertube3.cpy.re/videos/overview">a demonstration here</a>.
- You can read the complete <em>beta 12</em> changelog <a href="@:data.link.gitPT/blob/develop/CHANGELOG.md#v100-beta12">here</a>.
- 'Regarding the crowdfunding, most of the rewards are ready: <a href="
@:data.link.gitPT">the PeerTube README</a> and <a
href="@:data.baseurl/hall-of-fame">the JoinPeerTube Hall
of Fame</a> show off the names of the persons who have chosen the corresponding
rewards. We will soon be able to send the personalized thank-you digital
arts to people that gave 80€ (~93 USD) and more (and its so beautiful
that we are looking forward to it!)'
- The last feature we have to implement is the videos redundancy between
instances, which will further increase resilience on instance overload.
If all goes well, we should finish it in about two weeks (end of september).
- We remind you that you can track the progress of the work directly <a
href="@:data.link.gitPT"> on the git repository</a>,
and be part of the discussions/bug reports/feature requests in the “Issues”
tab.
- Moreover, you can ask questions on <a href="@:link.forumPT">the
PeerTube forum</a>. You can also contact us directly on @:data.hlink.contact</>.
- Cheers,<br>Framasoft
18-08-20:
title: 'PeerTube crowdfunding newsletter #2'
date: August 20, 2018
text:
p:
- Hello everyone!
- The development of the crowdfunding features is going well.
- As a reminder, in the first newsletter (July 23rd, 2018), we announced
that the localization system and RSS feeds were implemented, and that we
were making progress on the subtitles support and the advanced search.
- These four features are all implemented, and can already be used on instances
updated to version <em>v1.0.0-beta.10</em> (for example @:data.html.tube).
Regarding the subtitles support, you can test them on the <a href="https://framatube.org/videos/watch/217eefeb-883d-45be-b7fc-a788ad8507d3">
the “What is PeerTube”</a> video.
- We are currently finishing the video import system, from a URL (YouTube,
Vimeo etc) or a torrent file. This feature should be available in a few
days, when we will release a new version (<em>v1.0.0-beta.11</em>).<br>
The import system will complete the first crowdfunding goal. The next feature
we will be working on will be the user subscriptions.
- We remind you that you can track the progress of the work directly <a
href="@:data.link.gitPT"> on the git repository</a>,
and be part of the discussions/bug reports/feature requests in the “Issues”
tab.
- Moreover, you can ask questions on <a href="@:link.forumPT">the
PeerTube forum</a>. You can also contact us directly on @:data.hlink.contact</>.
- Cheers,<br>Framasoft
18-07-23:
title: 'PeerTube crowdfunding newsletter #1'
date: July 23, 2018
text:
p:
- Hello everyone!
- First of all, thank you again for contributing to PeerTube! ❤️
- 'During the crowdfunding campaign, we continued to work on the localization
system. And we are happy to announce its finally completed: it will be
available in the next beta (<em>beta 10</em>) of PeerTube. As of this
writing, the web interface is already available in english, french, basque,
catalan, czech and esperanto (huge thank you to <a href="@:data.link.gitPT/blob/develop/CREDITS.md#translations"
> all of the translators</a>). If you too want to help translating PeerTube,
do not hesitate to check out <a href="@:data.link.gitPT/blob/develop/support/doc/translation.md"
>the documentation</a>!'
- Regarding the RSS feeds feature, it was already implemented by <a href="https://github.com/rigelk">Rigelk</a>
and you can already use it in the <em>beta 9</em>. You can, for example,
get <a href="https://framatube.org/feeds/videos.xml?sort=-publishedAt&filter=local">
the feed of the last local videos uploaded in a particular instance</a>.
- Subtitles support is well under way, and we should have a first version
available soon. When this work is finished, we will develop the advanced
search.
- We remind you that you can track the progress of the work directly <a
href="@:data.link.gitPT"> on the git repository</a>,
and be part of the discussions/bug reports/feature requests in the "Issues"
tab.
- Moreover, you can ask questions on <a href="https://framacolibri.org/c/qualite/peertube">the
PeerTube forum</a>. You can also contact us directly on @:data.hlink.contact</>.
- Cheers,<br>Framasoft

View file

@ -1,5 +1,6 @@
meta: meta:
title: '@:home.title! #JoinPeerTube' title: '@:home.title! #JoinPeerTube'
description: Lhébergement de vidéos décentralisé, en réseau, basé sur du logiciel libre
nav: nav:
langChange: Changer la langue langChange: Changer la langue
lang: Langue lang: Langue
@ -492,263 +493,4 @@ hof:
donators: Donateurs donators: Donateurs
dev: Contributeurs dev: Contributeurs
contrib: Contribuer au code contrib: Contribuer au code
news:
title: Quoi de neuf sur PeerTube ?
subtitle: Découvrez les dernières améliorations de l'outil
latest-articles: Derniers articles
blocs:
newsletter05-06-2019:
title: PeerTube 1.3 est là !
date:
text: 5 Juin 2019
data: '2019-06-05'
text:
p1: Bonjour à toutes et à tous,
p2: Nous venons tout juste de sortir la version 1.3 de PeerTube qui apporte
tout un tas de nouveautés.
p3: "La plus importante de ces nouveautés est <strong>le système de listes\
\ de lecture</strong> (ou playlists). Cette fonctionnalité permet à nimporte\
\ quel⋅le utilisateur⋅ice de créer une liste de lecture, puis dy ajouter\
\ des vidéos et de les ordonner. Les vidéos ajoutées au sein d'une liste\
\ de lecture peuvent être visionnées dans leur intégralité ou en partie\
\ : le créateur de la liste de lecture peut décider à quel moment de la\
\ vidéo le visionnage commence et/ou se termine. Ce système est vraiment\
\ pratique pour créer des sortes de zappings ou du contenu pédagogique en\
\ sélectionnant les extraits des vidéos qui vous intéressent. De plus, une\
\ liste de lecture \"À regarder plus tard\" est créée par défaut pour chaque\
\ utilisateur⋅ice leur permettant d'enregistrer dans cette liste de lecture\
\ les vidéos qu'ielles n'ont pas le temps de regarder immédiatement."
p4: "Une autre des fonctionnalités de cette version 1.3 a été entièrement\
\ développée par un contributeur externe : <a href=\"https://github.com/joshmorel\"\
>Josh Morel</a>. Cela permet d'ajouter à PeerTube un <strong>système de\
\ quarantaine pour les vidéos</strong>. Si ladministrateur de l'instance\
\ active cette fonctionnalité, toute nouvelle vidéo téléversée sur son instance\
\ sera automatiquement rendue non-visible en attendant quun modérateur\
\ l'approuve ou non."
p5: 'Les traducteurs de PeerTube ont aussi fait un énorme travail car <strong>3
nouvelles langues</strong> sont désormais disponibles : le japonais, le
néerlandais et le portugais européen (linterface supportait déjà le portugais
brésilien). A ce jour, PeerTube est donc disponible en 19 langues !'
p6: "Les administrateurs peuvent maintenant <strong>gérer plus finement les\
\ autres instances sabonnant à leur instance</strong> : un administrateur\
\ peut décider d'approuver ou non l'abonnement d'une autre instance à la\
\ sienne. Il est aussi possible d'activer le refus automatique tout nouvel\
\ abonnement à son instance. Enfin, une notification est créée dès que son\
\ instance reçoit un nouvel abonnement. Ces fonctionnalités permettent à\
\ chaque administrateur de maîtriser plus facilement la diffusion des contenus\
\ mis en ligne sur leur instance."
p7: Nous sommes aussi en train de retravailler le <strong>lecteur vidéo de
PeerTube</strong> afin que la lecture des vidéos soit plus rapide et comporte
moins de bugs. Ce nouveau lecteur vidéo permet aussi de rendre plus lisses
les changements de définition. Enfin, la gestion de la bande passante est
optimisée via un système de mise en mémoire tampon plus performant. Cette
version 1.3 de PeerTube permet à l'administrateur d'activer ce nouveau lecteur
vidéo expérimental afin pour nous de récolter des retours dessus. Nous espérons
dans lavenir utiliser ce nouveau lecteur vidéo par défaut.
p8: Enfin, nous avons fait quelques ajustements au niveau de <strong>linterface
utilisateur⋅ice</strong>, pour quelle soit plus agréable/efficace à utiliser.
Par exemple, les miniatures ont changé de taille pour être davantage mises
en valeur. Les utilisateur⋅ices peuvent désormais accéder rapidement à partir
du menu à leur bibliothèque qui comprend leur listes de lecture, leurs vidéos,
leur historique de visionnage et leurs abonnements.
p9: Beaucoup d'autres améliorations ont été apportées dans cette nouvelle
version. Vous pouvez voir la liste complète (en anglais) sur <a href="https://github.com/Chocobozzz/PeerTube/releases/tag/v1.3.0">https://github.com/Chocobozzz/PeerTube/releases/tag/v1.3.0</a>.
p10: Merci à tous les contributeurs de PeerTube !
p11: Framasoft
newsletter26-02-2019:
title: "PeerTube : rétrospective et nouvelles fonctionnalités : l'actu de février\
\ 2019"
date:
text: 26 Février 2019
data: '2019-02-26'
text:
p1: Depuis la version 1.0 sortie en novembre dernier, nous avons continué
d'<b>améliorer PeerTube jour après jour</b>. Ces avancées de PeerTube, bien
au delà des objectifs du crowdfunding, ont été financées par <a href="https://framasoft.org">l'association
Framasoft</a>, qui développe le logiciel (et ne vit que par <a href="https://soutenir.framasoft.org">vos
dons</a>).
p2: <b>Voici une petite rétrospective de la fin d'année 2018/début d'année
2019 :</b>
p3: En décembre 2018, nous avons sorti la version 1.1 qui contenait certains
outils de modération demandés par les administrateurs d'instances.<br> Nous
en avons aussi profité pour ajouter une fonctionnalité d'historique de visionnage
et de reprise automatique de la lecture des vidéos.
p4: "En janvier, nous avons sorti la version 1.2 permettant, grâce à la communauté\
\ de traducteurs et traductrices de PeerTube, de proposer 3 nouvelles langues\
\ : le russe, le polonais et l'italien. PeerTube est donc désormais traduit\
\ en 16 langues différentes !"
p5: Cette version comprend aussi un système de notifications permettant aux
utilisatrices et utilisateurs de savoir (via l'interface web ou par email)
lorsque leur vidéo est commentée, lorsque quelqu'un les mentionne, lorsqu'un
de leur abonnement a publié une nouvelle vidéo, etc.
p6: "Par ailleurs, la fédération PeerTube s'est développée : aujourd'hui,\
\ c'est plus de 300 instances qui diffusent plus de 70 000 vidéos, avec\
\ près de 2 millions de vues cumulées. Nous vous rappelons au passage que\
\ le seul site officiel que nous maintenons autour de PeerTube est <a href=\"\
https://joinpeertube.org\">https://joinpeertube.org</a> et que nous n'avons\
\ aucune responsabilité autour de tout autre site qui pourrait voir le jour."
p7: Comme vous pouvez le constater, nous sommes allés bien au delà de ce que
le crowdfunding avait financé. Et nous allons continuer !<br> Car il est
prévu pour l'année 2019 d'ajouter un système de plugins et de thèmes (peu
évolué dans un premier temps), une gestion des playlists, la prise en charge
de fichiers audio à l'upload et bien d'autres fonctionnalités.
p8: "Si vous aussi vous voulez contribuer au développement de PeerTube, n'hésitez\
\ pas à participer à son financement : <a href=\"https://soutenir.framasoft.org\"\
>https://soutenir.framasoft.org</a>"
p9: 'Si vous avez la moindre question, vous pouvez utiliser le forum : <a
href="https://framacolibri.org/c/peertube">https://framacolibri.org/c/peertube</a>'
p10: Merci et bon début d'année,
p11: Framasoft
newsletter16-10-2018:
title: Newsletter du crowdfunding de PeerTube n°4
date:
text: 16 Octobre 2018
data: '2018-10-16'
text:
p1: Bonjour à toutes et à tous,
p2: Nous voici mi-octobre ! Et comme promis, nous venons de sortir la première
version stable de PeerTube.
p3: "Elle contient tous les buts que nous avions fixé dans notre crowdfunding:\
\ <ul><li>Le support de l'internationalisation (à l'heure où nous écrivons\
\ ces lignes, PeerTube est déjà disponible en plus de 13 langues !)</li>\
\ <li>Le support des sous-titres</li> <li>La possibilité d'importer des\
\ vidéos via une URL (YouTube, Dailymotion, Vimeo et bien d'autres !)</li>\
\ <li>La possibilité d'importer une vidéo via un fichier torrent ou un lien\
\ Magnet</li> <li>La mise à disposition de flux RSS, vous permettant de\
\ suivre les nouvelles vidéos mises en ligne sur l'ensemble des instances\
\ PeerTube, sur une instance en particulière ou par une chaîne que appréciez.\
\ Vous pouvez aussi vous abonner au flux des commentaires d'une vidéo spécifique</li>\
\ <li>La recherche, beaucoup plus pertinente qu'avant et acceptant de nombreux\
\ filtres avancés (durée, catégorie, tags...)</li> <li>Les abonnements à\
\ travers la fédération, vous laissant la possibilité de suivre vos chaînes\
\ vidéos préférées afin de retrouver l'ensemble de leurs vidéos dans un\
\ onglet dédié</li> <li>La redondance entre instances PeerTube, où des instances\
\ peuvent aider à partager certaines vidéos d'autres instances</li> </ul>"
p4: "Nous savons que les descriptions de fonctionnalités ne sont pas toujours\
\ très fun, et c'est pour ça que nous vous avons préparé de courtes vidéos\
\ de démonstration: <ul> <li><a href=\"https://framatube.org/videos/watch/f57da309-6b92-4fe0-9267-ff8188cc050c\"\
>Flux RSS</a></li> <li><a href=\"https://framatube.org/videos/watch/dcad56d9-9fe6-45bc-96aa-3d778f6804c1\"\
>Import de torrent</a></li> <li><a href=\"https://framatube.org/videos/watch/59d306c0-fc5b-493a-956a-43785693346b\"\
>Import d'une vidéo YouTube</a></li> <li><a href=\"https://framatube.org/videos/watch/edd7a468-08d5-4877-b62b-61c5f3f83ceb\"\
>Ajout de sous-titres</a></li> <li><a href=\"https://framatube.org/videos/watch/60c4bea4-6bb2-4fce-8d9f-8a522575419d\"\
>Recherche avancée</a></li> <li><a href=\"https://framatube.org/videos/watch/8968dbe1-a387-433b-a20f-37fe9f3ca8d5\"\
>Abonnements à des chaînes</a></li> </ul>"
p5: "Il s'agit donc de la dernière newsletter concernant le crowdfunding de\
\ PeerTube. Nous aimerions donc vous remercier une dernière fois, pour nous\
\ avoir permis de grandement améliorer PeerTube afin de promouvoir un web\
\ plus décentralisé.<br> Mais l'aventure n'est pas terminée: nous continuerons\
\ à améliorer le logiciel, et il reste encore beaucoup à faire pour pleinement\
\ libérer le streaming vidéo. Mais avant, nous allons prendre quelques jours\
\ de congé ;)"
p6: N'oubliez pas que si vous avez des questions <a href="https://framacolibri.org/c/qualite/peertube">le
forum Framacolibri</a> est à votre disposition. Vous pouvez également nous
contacter directement sur <a href="https://contact.framasoft.org">https://contact.framasoft.org</a>.
p7: Librement,<br>Framasoft
newsletter12-09-2018:
title: Newsletter du crowdfunding de PeerTube n°3
date:
text: 12 Septembre 2018
data: '2018-09-12'
text:
p1: Bonjour à toutes et à tous,
p2: Nous sommes maintenant à un mois de la sortie de la version 1 de PeerTube
! Nous souhaitons donc vous partager quelques (bonnes !) nouvelles.
p3: Nous venons de sortir la <em>beta 12</em> de PeerTube, qui ajoute la possibilité
de s'abonner à des chaînes vidéos, qu'elles soient sur votre instance ou
même sur des instances distantes.<br> De cette manière, vous pouvez parcourir
les vidéos de vos abonnements dans une page dédiée. De plus, si l'administrateur
de votre instance PeerTube le permet, vous avez la possibilité de voir une
chaîne ou une vidéo distante en tapant son adresse dans la barre de recherche
de PeerTube.
p4: Ce n'était pas inclus dans le crowdfunding, mais nous avons aussi créé
une nouvelle page "Overview", qui affiche aléatoirement les vidéos de certaines
catégories, tags ou chaînes, dans le but de montrer la diversité des vidéos
hébergées. Vous pouvez voir ici <a href="https://peertube3.cpy.re/videos/overview">une
démonstration de cette fonctionnalité</a>.
p5: Vous pouvez lire le changelog complet de la <em>beta 12</em> (en anglais)
<a href="https://github.com/Chocobozzz/PeerTube/blob/develop/CHANGELOG.md#v100-beta12">ici</a>.
p6: "Concernant le crowdfunding, la plupart des récompenses sont prêtes :\
\ <a href=\"https://github.com/Chocobozzz/PeerTube\">le fichier README de\
\ PeerTube</a> et <a href=\"https://joinpeertube.org/fr/hall-of-fame/\"\
>le Hall of Fame du site JoinPeertube</a> affichent fièrement les noms des\
\ personnes ayant choisi les récompenses correspondantes. Nous allons bientôt\
\ pouvoir envoyer les illustrations numériques personnalisées à celles et\
\ ceux qui ont donné 80 € et plus (et c'est tellement beau qu'il nous tarde\
\ !)."
p7: La dernière fonctionnalité qu'il nous reste à implémenter concerne la
redondance des vidéos entre instances, qui permettra encore d'augmenter
la résilience en cas de surcharge d'une instance. Si tout se passe bien,
nous devrions la terminer dans environ deux semaines (fin septembre).
p8: Nous vous rappelons que vous pouvez suivre l'avancée des travaux directement
en consultant <a href="https://github.com/Chocobozzz/PeerTube">le dépôt
Git</a>, et même participer aux discussions/signalement de bugs/propositions
d'améliorations dans l'onglet "Issues".
p9: Si vous avez des questions <a href="https://framacolibri.org/c/qualite/peertube">un
forum</a> est à votre disposition. Vous pouvez également nous contacter
directement sur <a href="https://contact.framasoft.org">https://contact.framasoft.org.</a>
p10: Librement,<br>Framasoft
newsletter20-08-2018:
title: Newsletter du crowdfunding de PeerTube n°2
date:
text: 20 Août 2018
data: '2018-08-20'
text:
p1: Bonjour à toutes et à tous,
p2: Le développement des fonctionnalités du crowdfunding poursuit son chemin
sans problème particulier.
p3: Pour rappel, dans la première newsletter datée du 23 juillet 2018, nous
vous annoncions que le système d'internationalisation et l'implémentation
des flux RSS étaient terminés, et que nous avancions sur le support des
sous-titres puis la recherche avancée.
p4: Ces quatre fonctionnalités sont toutes implémentées, et peuvent être directement
testées sur les instances mises à jour en <em>v1.0.0-beta.10</em> (par exemple
<a href="https://framatube.org">https://framatube.org</a>). En ce qui concerne
les sous-titres, vous pouvez les activer sur <a href="https://framatube.org/videos/watch/217eefeb-883d-45be-b7fc-a788ad8507d3">la
vidéo de présentation de PeerTube</a>.
p5: Nous sommes actuellement en train de finir le système d'import de vidéos
via une URL (YouTube, Vimeo, Dailymotion etc) ou un fichier torrent. Cette
fonctionnalité devrait être disponible dans quelques jours, lorsque nous
sortirons une nouvelle version de PeerTube (<em>v1.0.0-beta.11</em>). L'import
des vidéos clôturera donc notre premier palier. La prochaine fonctionnalité
sur laquelle nous allons travailler sera le système d'abonnements entre
utilisateurs.
p6: Nous vous rappelons que vous pouvez suivre l'avancée des travaux directement
en consultant <a href="https://github.com/Chocobozzz/PeerTube">le dépôt
Git</a>, et même participer aux discussions/signalement de bugs/propositions
d'améliorations dans l'onglet "Issues".
p7: Si vous avez des questions <a href="https://framacolibri.org/c/qualite/peertube">un
forum</a> est à votre disposition. Vous pouvez également nous contacter
directement sur <a href="https://contact.framasoft.org">https://contact.framasoft.org.</a>
p8: Librement,<br>Framasoft
newsletter23-07-2018:
title: Newsletter du crowdfunding de PeerTube n°1
date:
text: 23 Juillet 2018
data: '2018-07-23'
text:
p1: Bonjour à toutes et à tous,
p2: Tout d'abord, un grand merci pour avoir contribué à notre campagne. ❤️
p3: "Pendant le crowdfunding, nous avons continué d'avancer sur le système\
\ d'internationalisation. Et nous avons le plaisir d'annoncer qu'il est\
\ enfin terminé: il sera disponible lors de la prochaine version beta de\
\ PeerTube (<em>beta 10</em>).<br> À l'heure où nous écrivons ces lignes,\
\ l'interface est disponible en anglais, français, basque, catalan, tchèque\
\ et en esperanto (un énorme merci <a href=\"https://github.com/Chocobozzz/PeerTube/blob/develop/CREDITS.md#translations\"\
> aux traducteurs</a>). Si vous aussi vous voulez aider à la traduction\
\ de PeerTube, n'hésitez pas à jeter <a href=\"https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/translation.md\"\
>un coup d'oeil à la documentation</a> !"
p4: En ce qui concerne les flux RSS, ils ont été implémentés par <a href="https://github.com/rigelk">Rigelk</a>
et sont d'ores et déjà utilisables avec la <em>beta 9</em>. Vous pouvez,
par exemple, avoir <a href="https://framatube.org/feeds/videos.xml?sort=-publishedAt&filter=local">
le flux des dernières vidéos locales ajoutées sur une instance</a>.
p5: Le support des sous-titres avance bien et nous devrions avoir une première
version de prête sous peu. Une fois ce chantier terminé, nous passerons
à l'implémentation de la recherche avancée.
p6: Nous vous rappelons que vous pouvez suivre l'avancée des travaux directement
en consultant <a href="https://github.com/Chocobozzz/PeerTube">le dépôt
Git</a>, et même participer aux discussions/signalement de bugs/propositions
d'améliorations dans l'onglet "Issues".
p7: Si vous avez des questions <a href="https://framacolibri.org/c/qualite/peertube">un
forum</a> est à votre disposition. Vous pouvez également nous contacter
directement sur <a href="https://contact.framasoft.org">https://contact.framasoft.org.</a>
p8: Librement,<br>Framasoft

305
app/locales/fr/news.yml Normal file
View file

@ -0,0 +1,305 @@
title: Quoi de neuf sur PeerTube?
subtitle: Découvrez les dernières améliorations de loutil
latest-articles: Derniers articles
blocs:
19-09-25:
title: La version 1.4 de PeerTube vient tout juste de sortir!
date: 25 Septembre 2019
text:
p1:
- Bonjour à toutes et à tous,
- La dernière version de PeerTube est sortie! Petit tour dhorizon de ce quelle apporte…
h4a: Un système de plugins
p3:
- 'Depuis le lancement de PeerTube, nous sommes conscient⋅es que chaque administrateur⋅ice et utilisateur⋅ice de PeerTube souhaite que le logiciel soit le plus adapté à ses besoins. Parce que Framasoft ne peut et ne souhaite pas développer toutes les fonctionnalités souhaitées par les un⋅es et les autres, nous avons, dès lorigine du projet, prévu la création dun système de plugins.'
- 'Nous avons donc le plaisir de vous annoncer que les premières pierres de ce système ont été posées dans cette version 1.4! Celui-ci est pour linstant très basique mais nous prévoyons de laméliorer petit à petit dans les futures versions de PeerTube.'
- 'Avec ce système, chaque administrateur⋅ice peut dorénavant <b>créer des plugins spécifiques</b> en fonction de ses besoins. Mais iel peut aussi installer des extensions créées par dautres personnes sur son instance. Par exemple, il est possible dinstaller des thèmes graphiques créés par la communauté pour changer linterface visuelle dune instance.'
h4b: Des améliorations de linterface
p4:
- 'Nous essayons continuellement daméliorer linterface de PeerTube en récoltant les avis des utilisateur⋅ices afin de savoir ce qui leur pose des problèmes (de compréhension ou dutilisabilité par exemple). Cest un chantier qui prend du temps, mais cette nouvelle version vous propose déjà quelques modifications.'
- 'Tout dabord, nous avons constaté que la plupart des personnes qui découvrent PeerTube ont du mal à comprendre <b>la différence entre une chaîne et un compte</b>. En effet, sur les autres services de diffusion de vidéos (YouTube par exemple) ces deux éléments sont globalement les mêmes.'
- 'Or sur PeerTube, chaque compte possède une ou plusieurs chaînes que lon peut nommer comme on le souhaite. Il y a dailleurs une obligation de créer au minimum une chaîne lors de la création dun compte. Une fois les chaînes créées, les utilisateur⋅ices peuvent <i>uploader</i> des vidéos sur chacune dentre elles afin dorganiser leurs contenus (on peut donc avoir une chaîne où on diffuse des vidéos de cuisine et une autre où parle de vélo par exemple).'
- <figure>
<img src="@:data.baseurl/img/@:lang/channel.png" alt="">
<figcaption>Sur le compte Framasoft de linstance Framatube, 2 chaînes sont accessibles</figcaption>
</figure>
- 'Pour rendre plus compréhensible ce concept de chaîne, nous avons modifié le formulaire dinscription en y proposant dorénavant 2 étapes:'
ul:
- 'À létape 1, on crée son compte (on spécifie son nom dutilisateur⋅ice, son mot de passe, son email, etc.)'
- 'À létape 2, on spécifie le nom de sa chaîne par défaut via un nouveau formulaire'
p-img-sign:
- <figure>
<img src="@:data.baseurl/img/@:lang/account-creation.png" alt="" />
<figcaption>Les 2 étapes du nouveau formulaire dinscription</figcaption>
</figure>
ul2:
- 'Nous avons aussi essayé de différencier la page daccueil dune chaîne de celle dun compte. Avant, ces deux pages listaient des vidéos alors que maintenant la page daccueil du compte liste toutes les chaînes de celui-ci en présentant sous chaque nom de chaîne les miniatures des dernières vidéos <i>uploadées</i>.'
- 'Un autre élément peu clair était <b>la fenêtre (pop-up) qui souvrait lorsquon souhaitait partager une vidéo</b>. Nous lavons améliorée et il est ainsi possible de partager ou dintégrer une vidéo en la faisant commencer et/ou terminer à un moment précis (système de time-code), de spécifier des sous-titres par défaut ou de jouer la vidéo en boucle. Ces nouvelles options devraient être très appréciées.'
p-img-share:
- <figure>
<img src="@:data.baseurl/img/@:lang/share-popup.png" alt="">
<figcaption>options de personnalisation lors du partage dune vidéo</figcaption>
</figure>
h4c: Et aussi
p5:
- 'Toujours grâce à notre formidable communauté de traducteur⋅ices, cette nouvelle version de PeerTube se voit augmentée de <b>3 nouvelles langues</b>: le finlandais, le grec et le gaélique écossais. PeerTube est donc dorénavant accessible en 22 langues.'
- 'Nous avons ajouté la possibilité d<b><i>uploader</i> un fichier audio</b> directement sur PeerTube: le logiciel soccupe de créer automatiquement une vidéo à partir du fichier audio. Cette fonctionnalité demandée depuis longtemps devrait faciliter la vie des créatrices et créateurs de musique:)'
- Beaucoup dautres améliorations ont été apportées dans cette nouvelle version. Vous pouvez voir la liste complète (en anglais) sur <a href="@:data.link.gitPT/releases/tag/v1.4.0">@:data.link.gitPT/releases/tag/v1.4.0</a>.
- Merci à tou⋅tes les contributeur⋅ices de PeerTube!<br>Framasoft
19-06-05:
title: PeerTube 1.3 est là!
date: 5 Juin 2019
text:
p:
- Bonjour à toutes et à tous,
- Nous venons tout juste de sortir la version 1.3 de PeerTube qui apporte
tout un tas de nouveautés.
- 'La plus importante de ces nouveautés est <strong>le système de listes
de lecture</strong> (ou playlists). Cette fonctionnalité permet à nimporte
quel⋅le utilisateur⋅ice de créer une liste de lecture, puis dy ajouter
des vidéos et de les ordonner. Les vidéos ajoutées au sein dune liste
de lecture peuvent être visionnées dans leur intégralité ou en partie:
le créateur de la liste de lecture peut décider à quel moment de la
vidéo le visionnage commence et/ou se termine. Ce système est vraiment
pratique pour créer des sortes de zappings ou du contenu pédagogique en
sélectionnant les extraits des vidéos qui vous intéressent. De plus, une
liste de lecture "À regarder plus tard" est créée par défaut pour chaque
utilisateur⋅ice leur permettant denregistrer dans cette liste de lecture
les vidéos quielles nont pas le temps de regarder immédiatement.'
- 'Une autre des fonctionnalités de cette version 1.3 a été entièrement
développée par un contributeur externe:
<a href="https://github.com/joshmorel">Josh Morel</a>.
Cela permet dajouter à PeerTube un <strong>système de
quarantaine pour les vidéos</strong>. Si ladministrateur de linstance
active cette fonctionnalité, toute nouvelle vidéo téléversée sur son instance
sera automatiquement rendue non-visible en attendant quun modérateur
lapprouve ou non.'
- 'Les traducteurs de PeerTube ont aussi fait un énorme travail car <strong>3
nouvelles langues</strong> sont désormais disponibles: le japonais, le
néerlandais et le portugais européen (linterface supportait déjà le portugais
brésilien). A ce jour, PeerTube est donc disponible en 19 langues!'
- 'Les administrateurs peuvent maintenant <strong>gérer plus finement les
autres instances sabonnant à leur instance</strong>: un administrateur
peut décider dapprouver ou non labonnement dune autre instance à la
sienne. Il est aussi possible dactiver le refus automatique tout nouvel
abonnement à son instance. Enfin, une notification est créée dès que son
instance reçoit un nouvel abonnement. Ces fonctionnalités permettent à
chaque administrateur de maîtriser plus facilement la diffusion des contenus
mis en ligne sur leur instance.'
- Nous sommes aussi en train de retravailler le <strong>lecteur vidéo de
PeerTube</strong> afin que la lecture des vidéos soit plus rapide et comporte
moins de bugs. Ce nouveau lecteur vidéo permet aussi de rendre plus lisses
les changements de définition. Enfin, la gestion de la bande passante est
optimisée via un système de mise en mémoire tampon plus performant. Cette
version 1.3 de PeerTube permet à ladministrateur dactiver ce nouveau lecteur
vidéo expérimental afin pour nous de récolter des retours dessus. Nous espérons
dans lavenir utiliser ce nouveau lecteur vidéo par défaut.
- Enfin, nous avons fait quelques ajustements au niveau de <strong>linterface
utilisateur⋅ice</strong>, pour quelle soit plus agréable/efficace à utiliser.
Par exemple, les miniatures ont changé de taille pour être davantage mises
en valeur. Les utilisateur⋅ices peuvent désormais accéder rapidement à partir
du menu à leur bibliothèque qui comprend leur listes de lecture, leurs vidéos,
leur historique de visionnage et leurs abonnements.
- Beaucoup dautres améliorations ont été apportées dans cette nouvelle
version. Vous pouvez voir la liste complète (en anglais) sur
<a href="@:data.link.gitPT/releases/tag/v1.3.0">
@:data.link.gitPT/releases/tag/v1.3.0</a>.
- Merci à tous les contributeurs de PeerTube!<br>Framasoft
19-02-26:
title: 'PeerTube: rétrospective et nouvelles fonctionnalités : lactu de février
2019'
date: 26 Février 2019
text:
p:
- Depuis la version 1.0 sortie en novembre dernier, nous avons continué
d<b>améliorer PeerTube jour après jour</b>. Ces avancées de PeerTube, bien
au delà des objectifs du crowdfunding, ont été financées par <a href="@:data.link.soft">lassociation
Framasoft</a>, qui développe le logiciel (et ne vit que par <a href="@:data.link.soutenir">vos
dons</a>).
- <b>Voici une petite rétrospective de la fin dannée 2018/début dannée
2019:</b>
- En décembre 2018, nous avons sorti la version 1.1 qui contenait certains
outils de modération demandés par les administrateurs dinstances.<br> Nous
en avons aussi profité pour ajouter une fonctionnalité dhistorique de visionnage
et de reprise automatique de la lecture des vidéos.
- 'En janvier, nous avons sorti la version 1.2 permettant, grâce à la communauté
de traducteurs et traductrices de PeerTube, de proposer 3 nouvelles langues:
le russe, le polonais et litalien. PeerTube est donc désormais traduit
en 16 langues différentes !'
- Cette version comprend aussi un système de notifications permettant aux
utilisatrices et utilisateurs de savoir (via linterface web ou par email)
lorsque leur vidéo est commentée, lorsque quelquun les mentionne, lorsquun
de leur abonnement a publié une nouvelle vidéo, etc.
- 'Par ailleurs, la fédération PeerTube sest développée: aujourdhui,
cest plus de 300 instances qui diffusent plus de 70 000 vidéos, avec
près de 2 millions de vues cumulées. Nous vous rappelons au passage que
le seul site officiel que nous maintenons autour de PeerTube est <a href="
@:data.link.joinpeertube">@:data.link.joinpeertube</a> et que nous navons
aucune responsabilité autour de tout autre site qui pourrait voir le jour.'
- Comme vous pouvez le constater, nous sommes allés bien au delà de ce que
le crowdfunding avait financé. Et nous allons continuer!<br> Car il est
prévu pour lannée 2019 dajouter un système de plugins et de thèmes (peu
évolué dans un premier temps), une gestion des playlists, la prise en charge
de fichiers audio à lupload et bien dautres fonctionnalités.
- 'Si vous aussi vous voulez contribuer au développement de PeerTube, nhésitez
pas à participer à son financement: @:data.html.soutenir'
- 'Si vous avez la moindre question, vous pouvez utiliser <a
href="@:link.forumPT">le forum</a>.'
- Merci et bon début dannée,<br>Framasoft
18-10-16:
title: Newsletter du crowdfunding de PeerTube n°4
date: 16 Octobre 2018
text:
p1:
- Bonjour à toutes et à tous,
- Nous voici mi-octobre! Et comme promis, nous venons de sortir la première
version stable de PeerTube.
- 'Elle contient tous les buts que nous avions fixé dans notre crowdfunding:'
ul1:
- Le support de linternationalisation (à lheure où nous écrivons
ces lignes, PeerTube est déjà disponible en plus de 13 langues!)
- Le support des sous-titres
- La possibilité dimporter des
vidéos via une URL (YouTube, Dailymotion, Vimeo et bien dautres!)
- La possibilité dimporter une vidéo via un fichier torrent ou un lien
Magnet
- La mise à disposition de flux RSS, vous permettant de
suivre les nouvelles vidéos mises en ligne sur lensemble des instances
PeerTube, sur une instance en particulière ou par une chaîne que appréciez.
Vous pouvez aussi vous abonner au flux des commentaires dune vidéo spécifique
- La recherche, beaucoup plus pertinente quavant et acceptant de nombreux
filtres avancés (durée, catégorie, tags…)
- Les abonnements à
travers la fédération, vous laissant la possibilité de suivre vos chaînes
vidéos préférées afin de retrouver lensemble de leurs vidéos dans un
onglet dédié
- La redondance entre instances PeerTube, où des instances
peuvent aider à partager certaines vidéos dautres instances
p2:
- 'Nous savons que les descriptions de fonctionnalités ne sont pas toujours
très fun, et cest pour ça que nous vous avons préparé de courtes vidéos
de démonstration:'
ul2:
- <a href="@:data.video.rss">Flux RSS</a>
- <a href="@:data.video.torrent">Import de torrent</a>
- <a href="@:data.video.yt-import">Import dune vidéo YouTube</a>
- <a href="@:data.video.subtitle">Ajout de sous-titres</a>
- <a href="@:data.video.search">Recherche avancée</a>
- <a href="@:data.video.subscription">Abonnements à des chaînes</a>
p3:
- 'Il sagit donc de la dernière newsletter concernant le crowdfunding de
PeerTube. Nous aimerions donc vous remercier une dernière fois, pour nous
avoir permis de grandement améliorer PeerTube afin de promouvoir un web
plus décentralisé.<br> Mais laventure nest pas terminée: nous continuerons
à améliorer le logiciel, et il reste encore beaucoup à faire pour pleinement
libérer le streaming vidéo. Mais avant, nous allons prendre quelques jours
de congé ;)'
- Noubliez pas que si vous avez des questions <a href="@:link.forumPT">le
forum Framacolibri</a> est à votre disposition. Vous pouvez également nous
contacter directement sur @:data.hlink.contact</>.
- Librement,<br>Framasoft
18-09-12:
title: Newsletter du crowdfunding de PeerTube n°3
date: 12 Septembre 2018
text:
p:
- Bonjour à toutes et à tous,
- Nous sommes maintenant à un mois de la sortie de la version 1 de PeerTube!
Nous souhaitons donc vous partager quelques (bonnes!) nouvelles.
- Nous venons de sortir la <em>beta 12</em> de PeerTube, qui ajoute la possibilité
de sabonner à des chaînes vidéos, quelles soient sur votre instance ou
même sur des instances distantes.<br> De cette manière, vous pouvez parcourir
les vidéos de vos abonnements dans une page dédiée. De plus, si ladministrateur
de votre instance PeerTube le permet, vous avez la possibilité de voir une
chaîne ou une vidéo distante en tapant son adresse dans la barre de recherche
de PeerTube.
- Ce nétait pas inclus dans le crowdfunding, mais nous avons aussi créé
une nouvelle page "Overview", qui affiche aléatoirement les vidéos de certaines
catégories, tags ou chaînes, dans le but de montrer la diversité des vidéos
hébergées. Vous pouvez voir ici <a href="https://peertube3.cpy.re/videos/overview">une
démonstration de cette fonctionnalité</a>.
- Vous pouvez lire le changelog complet de la <em>beta 12</em> (en anglais)
<a href="@:data.link.gitPT/blob/develop/CHANGELOG.md#v100-beta12">ici</a>.
- 'Concernant le crowdfunding, la plupart des récompenses sont prêtes :
<a href="@:data.link.gitPT">le fichier README de
PeerTube</a> et <a href="@:data.baseurl/hall-of-fame"
>le Hall of Fame du site JoinPeertube</a> affichent fièrement les noms des
personnes ayant choisi les récompenses correspondantes. Nous allons bientôt
pouvoir envoyer les illustrations numériques personnalisées à celles et
ceux qui ont donné 80 € et plus (et cest tellement beau quil nous tarde
!).'
- La dernière fonctionnalité quil nous reste à implémenter concerne la
redondance des vidéos entre instances, qui permettra encore daugmenter
la résilience en cas de surcharge dune instance. Si tout se passe bien,
nous devrions la terminer dans environ deux semaines (fin septembre).
- Nous vous rappelons que vous pouvez suivre lavancée des travaux directement
en consultant <a href="@:data.link.gitPT">le dépôt
Git</a>, et même participer aux discussions/signalement de bugs/propositions
daméliorations dans longlet «Issues».
- Si vous avez des questions <a href="@:link.forumPT">un
forum</a> est à votre disposition. Vous pouvez également nous contacter
directement sur @:data.hlink.contact</>.
- Librement,<br>Framasoft
18-08-20:
title: Newsletter du crowdfunding de PeerTube n°2
date: 20 Août 2018
text:
p:
- Bonjour à toutes et à tous,
- Le développement des fonctionnalités du crowdfunding poursuit son chemin
sans problème particulier.
- Pour rappel, dans la première newsletter datée du 23 juillet 2018, nous
vous annoncions que le système dinternationalisation et limplémentation
des flux RSS étaient terminés, et que nous avancions sur le support des
sous-titres puis la recherche avancée.
- Ces quatre fonctionnalités sont toutes implémentées, et peuvent être directement
testées sur les instances mises à jour en <em>v1.0.0-beta.10</em> (par exemple
@:data.html.tube). En ce qui concerne
les sous-titres, vous pouvez les activer sur <a href="https://framatube.org/videos/watch/217eefeb-883d-45be-b7fc-a788ad8507d3">la
vidéo de présentation de PeerTube</a>.
- Nous sommes actuellement en train de finir le système dimport de vidéos
via une URL (YouTube, Vimeo, Dailymotion etc) ou un fichier torrent. Cette
fonctionnalité devrait être disponible dans quelques jours, lorsque nous
sortirons une nouvelle version de PeerTube (<em>v1.0.0-beta.11</em>). Limport
des vidéos clôturera donc notre premier palier. La prochaine fonctionnalité
sur laquelle nous allons travailler sera le système dabonnements entre
utilisateurs.
- Nous vous rappelons que vous pouvez suivre lavancée des travaux directement
en consultant <a href="@:data.link.gitPT">le dépôt
Git</a>, et même participer aux discussions/signalement de bugs/propositions
daméliorations dans longlet «Issues».
- Si vous avez des questions <a href="@:link.forumPT">un
forum</a> est à votre disposition. Vous pouvez également nous contacter
directement sur @:data.hlink.contact</>.
- Librement,<br>Framasoft
18-07-23:
title: Newsletter du crowdfunding de PeerTube n°1
date: 23 Juillet 2018
text:
p:
- Bonjour à toutes et à tous,
- Tout dabord, un grand merci pour avoir contribué à notre campagne. ❤️
- 'Pendant le crowdfunding, nous avons continué davancer sur le système
dinternationalisation. Et nous avons le plaisir dannoncer quil est
enfin terminé: il sera disponible lors de la prochaine version beta de
PeerTube (<em>beta 10</em>).<br> À lheure où nous écrivons ces lignes,
linterface est disponible en anglais, français, basque, catalan, tchèque
et en esperanto (un énorme merci <a href="@:data.link.gitPT/blob/develop/CREDITS.md#translations"
> aux traducteurs</a>). Si vous aussi vous voulez aider à la traduction
de PeerTube, nhésitez pas à jeter <a href="@:data.link.gitPT/blob/develop/support/doc/translation.md"
>un coup doeil à la documentation</a> !'
- En ce qui concerne les flux RSS, ils ont été implémentés par <a href="https://github.com/rigelk">Rigelk</a>
et sont dores et déjà utilisables avec la <em>beta 9</em>. Vous pouvez,
par exemple, avoir <a href="https://framatube.org/feeds/videos.xml?sort=-publishedAt&filter=local">
le flux des dernières vidéos locales ajoutées sur une instance</a>.
- Le support des sous-titres avance bien et nous devrions avoir une première
version de prête sous peu. Une fois ce chantier terminé, nous passerons
à limplémentation de la recherche avancée.
- Nous vous rappelons que vous pouvez suivre lavancée des travaux directement
en consultant <a href="@:data.link.gitPT">le dépôt
Git</a>, et même participer aux discussions/signalement de bugs/propositions
daméliorations dans longlet «Issues».
- Si vous avez des questions <a href="@:link.forumPT">un
forum</a> est à votre disposition. Vous pouvez également nous contacter
directement sur @:data.hlink.contact</>.
- Librement,<br>Framasoft

View file

@ -1,5 +1,6 @@
meta: meta:
title: '@:home.title! #JoinPeerTube' title: '@:home.title! #JoinPeerTube'
description: Una rete di piattaforme video decentralizzata, basata su software libero
nav: nav:
langChange: Cambia la lingua langChange: Cambia la lingua
lang: Lingua lang: Lingua

View file

@ -1,5 +1,6 @@
meta: meta:
title: '@:home.title! #JoinPeerTube' title: '@:home.title! #JoinPeerTube'
description: 無料/自由なソフトウェアに基づく分散動画ホスティングネットワーク
nav: nav:
langChange: 言語を変更 langChange: 言語を変更
lang: 言語 lang: 言語

View file

@ -1,5 +1,6 @@
meta: meta:
title: '@:home.title! #ПрисоединяйсяPeerTube' title: '@:home.title! #ПрисоединяйсяPeerTube'
description: Децентрализованный видеохостинг, основанный на бесплатном и свободном ПО
nav: nav:
langChange: Изменить язык langChange: Изменить язык
lang: Язык lang: Язык

View file

@ -1,5 +1,6 @@
meta: meta:
title: '@:home.title! #JoinPeerTube' title: '@:home.title! #JoinPeerTube'
description: Një rrjet i decentralizuar strehimi videosh, bazuar në software-in e lirë/libre
nav: nav:
langChange: Ndryshoni gjuhën langChange: Ndryshoni gjuhën
lang: Gjuhë lang: Gjuhë

View file

@ -1,5 +1,6 @@
meta: meta:
title: '@:home.title! #JoinPeerTube' title: '@:home.title! #JoinPeerTube'
description: En decentraliserad videoplattform byggd på fri mjukvara
nav: nav:
langChange: Byt språk langChange: Byt språk
lang: Språk lang: Språk

View file

@ -1,5 +1,6 @@
meta: meta:
title: '@:home.title! #JoinPeerTube' title: '@:home.title! #JoinPeerTube'
description: 去中心化的影片託管網路,奠基於自由開放原始碼軟體
nav: nav:
langChange: 變更語言 langChange: 變更語言
lang: 語言 lang: 語言

21
app/plugins/cookie.js Normal file
View file

@ -0,0 +1,21 @@
export default {
install(Vue) {
Object.defineProperty(Vue.prototype, 'cookie', {
value: (action, name, value, time) => {
if (action === 'w') {
const t = typeof time !== 'undefined' ? time : 31536000000; // 365 * 24 * 60 * 60 * 1000
const today = new Date();
const expires = new Date();
expires.setTime(today.getTime() + t);
document.cookie = [name, '=', encodeURIComponent(value), ';expires=', expires.toGMTString()].join('');
} else {
const oRegex = new RegExp(['(?:; )?', name, '=([^;]*);?'].join(''));
if (oRegex.test(document.cookie)) {
return decodeURIComponent(RegExp.$1);
}
}
return null;
},
});
},
};

18
app/plugins/is.js Normal file
View file

@ -0,0 +1,18 @@
export default {
install(Vue) {
Object.defineProperty(Vue.prototype, 'is', {
value: {
email(emailAddress) { // RegEx from https://emailregex.com/
const pattern = new RegExp(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
return !!pattern.test(emailAddress);
},
before(date) {
return new Date(new Date().toDateString()) < new Date(date);
},
after(date) {
return new Date(new Date().toDateString()) > new Date(date);
},
},
});
},
};

37
app/plugins/merge.js Normal file
View file

@ -0,0 +1,37 @@
export default {
install(Vue) {
Object.defineProperty(Vue.prototype, 'merge', {
value: (a, b) => {
function MergeRecursive(o1, o2) {
const o3 = o1;
Object.keys(o2).forEach((p) => {
try {
if (o2[p].constructor === Object) {
o3[p] = MergeRecursive(o3[p], o2[p]);
} else if (o2[p].constructor === Array) {
for (let i = 0; i < o2[p].length; i += 1) {
o3[p][i] = o2[p][i];
}
} else {
o3[p] = o2[p];
}
} catch (e) {
o3[p] = o2[p];
}
});
return o3;
}
// Merge Arrays
if (a.constructor === Array && b.constructor === Array) {
return [...new Set([].concat(...[a, b]))];
}
// Merge Objects
const o1 = Object.assign({}, a);
const o2 = Object.assign({}, b);
MergeRecursive(o1, o2);
return o1;
},
});
},
};

137
app/plugins/text.js Normal file
View file

@ -0,0 +1,137 @@
export default {
install(Vue) {
Object.defineProperty(Vue.prototype, 'text', {
value: (html, options) => { // eslint-disable-line
let text = '';
const tmp = new DOMParser().parseFromString(html, 'text/html');
text = tmp.body.textContent || '';
if (options) {
if (/latin/.test(options)) {
// <rm diacritics>
// Source http://stackoverflow.com/a/18391901
const defaultDiacriticsRemovalMap = [
{ base: 'A', letters: '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F' },
{ base: 'AA', letters: '\uA732' },
{ base: 'AE', letters: '\u00C6\u01FC\u01E2' },
{ base: 'AO', letters: '\uA734' },
{ base: 'AU', letters: '\uA736' },
{ base: 'AV', letters: '\uA738\uA73A' },
{ base: 'AY', letters: '\uA73C' },
{ base: 'B', letters: '\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181' },
{ base: 'C', letters: '\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E' },
{ base: 'D', letters: '\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779' },
{ base: 'DZ', letters: '\u01F1\u01C4' },
{ base: 'Dz', letters: '\u01F2\u01C5' },
{ base: 'E', letters: '\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E' },
{ base: 'F', letters: '\u0046\u24BB\uFF26\u1E1E\u0191\uA77B' },
{ base: 'G', letters: '\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E' },
{ base: 'H', letters: '\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D' },
{ base: 'I', letters: '\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197' },
{ base: 'J', letters: '\u004A\u24BF\uFF2A\u0134\u0248' },
{ base: 'K', letters: '\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2' },
{ base: 'L', letters: '\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780' },
{ base: 'LJ', letters: '\u01C7' },
{ base: 'Lj', letters: '\u01C8' },
{ base: 'M', letters: '\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C' },
{ base: 'N', letters: '\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4' },
{ base: 'NJ', letters: '\u01CA' },
{ base: 'Nj', letters: '\u01CB' },
{ base: 'O', letters: '\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C' },
{ base: 'OI', letters: '\u01A2' },
{ base: 'OO', letters: '\uA74E' },
{ base: 'OU', letters: '\u0222' },
{ base: 'OE', letters: '\u008C\u0152' },
{ base: 'oe', letters: '\u009C\u0153' },
{ base: 'P', letters: '\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754' },
{ base: 'Q', letters: '\u0051\u24C6\uFF31\uA756\uA758\u024A' },
{ base: 'R', letters: '\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782' },
{ base: 'S', letters: '\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784' },
{ base: 'T', letters: '\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786' },
{ base: 'TZ', letters: '\uA728' },
{ base: 'U', letters: '\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244' },
{ base: 'V', letters: '\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245' },
{ base: 'VY', letters: '\uA760' },
{ base: 'W', letters: '\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72' },
{ base: 'X', letters: '\u0058\u24CD\uFF38\u1E8A\u1E8C' },
{ base: 'Y', letters: '\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE' },
{ base: 'Z', letters: '\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762' },
{ base: 'a', letters: '\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250' },
{ base: 'aa', letters: '\uA733' },
{ base: 'ae', letters: '\u00E6\u01FD\u01E3' },
{ base: 'ao', letters: '\uA735' },
{ base: 'au', letters: '\uA737' },
{ base: 'av', letters: '\uA739\uA73B' },
{ base: 'ay', letters: '\uA73D' },
{ base: 'b', letters: '\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253' },
{ base: 'c', letters: '\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184' },
{ base: 'd', letters: '\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A' },
{ base: 'dz', letters: '\u01F3\u01C6' },
{ base: 'e', letters: '\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD' },
{ base: 'f', letters: '\u0066\u24D5\uFF46\u1E1F\u0192\uA77C' },
{ base: 'g', letters: '\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F' },
{ base: 'h', letters: '\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265' },
{ base: 'hv', letters: '\u0195' },
{ base: 'i', letters: '\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131' },
{ base: 'j', letters: '\u006A\u24D9\uFF4A\u0135\u01F0\u0249' },
{ base: 'k', letters: '\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3' },
{ base: 'l', letters: '\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747' },
{ base: 'lj', letters: '\u01C9' },
{ base: 'm', letters: '\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F' },
{ base: 'n', letters: '\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5' },
{ base: 'nj', letters: '\u01CC' },
{ base: 'o', letters: '\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275' },
{ base: 'oi', letters: '\u01A3' },
{ base: 'ou', letters: '\u0223' },
{ base: 'oo', letters: '\uA74F' },
{ base: 'p', letters: '\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755' },
{ base: 'q', letters: '\u0071\u24E0\uFF51\u024B\uA757\uA759' },
{ base: 'r', letters: '\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783' },
{ base: 's', letters: '\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B' },
{ base: 't', letters: '\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787' },
{ base: 'tz', letters: '\uA729' },
{ base: 'u', letters: '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289' },
{ base: 'v', letters: '\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C' },
{ base: 'vy', letters: '\uA761' },
{ base: 'w', letters: '\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73' },
{ base: 'x', letters: '\u0078\u24E7\uFF58\u1E8B\u1E8D' },
{ base: 'y', letters: '\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF' },
{ base: 'z', letters: '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763' },
];
const diacriticsMap = {};
for (let i = 0; i < defaultDiacriticsRemovalMap.length; i += 1) {
const letters = defaultDiacriticsRemovalMap[i].letters; // eslint-disable-line
for (let j = 0; j < letters.length; j += 1) {
diacriticsMap[letters[j]] = defaultDiacriticsRemovalMap[i].base;
}
}
text = text.replace(/[^\u0000-\u007E]/g, function(a) { return diacriticsMap[a] || a; }); // eslint-disable-line
}
if (/sanitize/.test(options)) {
text = text.toLowerCase()
.replace(/@:[.a-z]+ /g, '') // remove vue-i18n var
.replace(/[ ']/g, '-')
.replace(/[^a-zA-Z0-9-_.]/g, '');
}
if (/noframa/.test(options)) {
text = text.replace('framand', 'and')
.replace('framage', 'age')
.replace('framae', 'mae')
.replace('framin', 'min')
.replace('frame', 'me')
.replace('frama', '')
.replace('.', '')
.replace('my', 'myframa');
}
if (html === 'random') {
const length = Number.isInteger(options) ? options : 10;
text = [...Array(length)].map(() => Math.random().toString(36)[3]).join('')
.replace(/(.|$)/g, c => c[!Math.round(Math.random()) ? 'toString' : 'toUpperCase']());
}
}
return text;
},
});
},
};

View file

@ -4,9 +4,21 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title> <title></title>
<meta name="description"/>
<link rel="shortcut icon" href="/icons/favicon.png"> <link rel="shortcut icon" href="" />
<link rel="apple-touch-icon" href="/icons/apple-touch-icon.png" /> <link rel="apple-touch-icon" href="" />
<meta property="og:type" content="article">
<meta property="og:title" content="">
<meta property="og:image" content="">
<meta property="og:url" content="">
<meta property="og:description" content="">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="">
<meta name="twitter:image" content="">
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

11559
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -12,50 +12,53 @@
}, },
"dependencies": { "dependencies": {
"axios": "^0.18.0", "axios": "^0.18.0",
"bootstrap-sass": "^3.3.7", "bootstrap-sass": "^3.4.1",
"fork-awesome": "^1.1.5", "fork-awesome": "^1.1.7",
"uiv": "^0.28.0", "uiv": "^0.28.0",
"vue": "^2.5.16", "vue": "^2.6.10",
"vue-headful": "^2.0.1", "vue-headful": "^2.0.1",
"vue-i18n": "^8.4.0", "vue-i18n": "^8.14.0",
"vue-matomo": "^0.3.2", "vue-matomo": "^0.3.2",
"vue-router": "^3.0.2" "vue-router": "^3.1.3"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.2.0", "@babel/core": "^7.5.5",
"@babel/plugin-proposal-object-rest-spread": "^7.2.0", "@babel/plugin-proposal-object-rest-spread": "^7.5.5",
"@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@babel/preset-env": "^7.2.0", "@babel/preset-env": "^7.5.5",
"autoprefixer": "^9.4.2", "@prerenderer/renderer-jsdom": "^0.2.0",
"babel-eslint": "^10.0.1", "autoprefixer": "^9.6.1",
"babel-loader": "^8.0.4", "babel-eslint": "^10.0.3",
"copy-webpack-plugin": "^4.6.0", "babel-loader": "^8.0.6",
"cross-env": "^5.2.0", "copy-webpack-plugin": "^5.0.4",
"css-hot-loader": "^1.4.2", "cross-env": "^5.2.1",
"css-loader": "^1.0.1", "css-hot-loader": "^1.4.4",
"eslint": "^5.9.0", "css-loader": "^2.1.1",
"eslint-config-airbnb-base": "^13.1.0", "eslint": "^5.16.0",
"eslint-loader": "^2.1.1", "eslint-config-airbnb-base": "^13.2.0",
"eslint-loader": "^2.2.1",
"eslint-plugin-filenames": "^1.3.2", "eslint-plugin-filenames": "^1.3.2",
"eslint-plugin-html": "^5.0.0", "eslint-plugin-html": "^5.0.5",
"eslint-plugin-import": "^2.14.0", "eslint-plugin-import": "^2.18.2",
"eslint-plugin-promise": "^4.0.1", "eslint-plugin-promise": "^4.2.1",
"eslint-plugin-vue": "^5.0.0", "eslint-plugin-vue": "^5.2.3",
"file-loader": "^2.0.0", "file-loader": "^3.0.1",
"html-webpack-plugin": "^3.2.0", "html-webpack-plugin": "^4.0.0-beta.8",
"mini-css-extract-plugin": "^0.4.5", "mini-css-extract-plugin": "^0.6.0",
"node-sass": "^4.10.0", "node-sass": "^4.12.0",
"optimize-css-assets-webpack-plugin": "^5.0.1", "optimize-css-assets-webpack-plugin": "^5.0.3",
"postcss-loader": "^3.0.0", "postcss-loader": "^3.0.0",
"preload-webpack-plugin": "^3.0.0-beta.4",
"prerender-spa-plugin": "^3.4.0", "prerender-spa-plugin": "^3.4.0",
"sass-loader": "^7.1.0", "sass-loader": "^7.3.1",
"style-loader": "^0.23.1", "style-loader": "^0.23.1",
"terser-webpack-plugin": "^1.1.0", "terser-webpack-plugin": "^1.4.1",
"vue-loader": "^15.4.2", "vue-loader": "^15.7.1",
"vue-template-compiler": "^2.5.16", "vue-template-compiler": "^2.6.10",
"webpack": "^4.27.1", "webpack": "^4.39.3",
"webpack-cli": "^3.1.2", "webpack-cli": "^3.3.7",
"webpack-dev-server": "^3.1.10", "webpack-dev-server": "^3.8.0",
"webpack-subresource-integrity": "^1.3.3",
"yaml-import-loader": "^1.3.6" "yaml-import-loader": "^1.3.6"
} }
} }

View file

@ -1,28 +1,33 @@
/* eslint-disable import/newline-after-import */
/* eslint-disable filenames/match-regex */
/* eslint-disable import/no-commonjs */
const webpack = require('webpack'); const webpack = require('webpack');
const fs = require('fs'); const fs = require('fs');
const path = require('path'); const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin');
const PrerenderSPAPlugin = require('prerender-spa-plugin'); const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer; const Renderer = require('@prerenderer/renderer-jsdom');
const CopyWebpackPlugin = require('copy-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin'); const VueLoaderPlugin = require('vue-loader/lib/plugin');
const PreloadWebpackPlugin = require('preload-webpack-plugin');
let root = (process.env.NODE_ENV === 'preview') ? `/${process.env.INIT_CWD.match(/([^\/]*)\/*$/)[1]}/` : '/'; let root = (process.env.NODE_ENV === 'preview') ? `/${process.env.INIT_CWD.match(/([^/]*)\/*$/)[1]}/` : '/';
for (let i = 0; i < process.argv.length; i += 1) { for (let i = 0; i < process.argv.length; i += 1) {
if (process.argv[i].indexOf('--root=') > -1) { if (process.argv[i].indexOf('--root=') > -1) {
root = `/${process.argv[i].split('=')[1]}/`; root = `/${process.argv[i].split('=')[1]}/`;
} }
} }
let config = { const config = {
entry: './app/index.js', entry: './app/index.js',
output: { output: {
path: path.resolve(__dirname, `public${root}`), path: path.resolve(__dirname, `public${root}`),
publicPath: root, publicPath: root,
filename: 'app.js', filename: '[name].[hash].bundle.js',
// chunkFilename: '[name].bundle.js',
}, },
module: { module: {
rules: [ rules: [
@ -83,14 +88,14 @@ let config = {
}, },
resolve: { resolve: {
alias: { alias: {
'vue$': 'vue/dist/vue.esm.js', vue$: 'vue/dist/vue.esm.js',
}, },
}, },
plugins: [ plugins: [
new VueLoaderPlugin(), new VueLoaderPlugin(),
new MiniCssExtractPlugin({ new MiniCssExtractPlugin({
filename: '[name].css', filename: process.env.NODE_ENV !== 'production' ? '[name].css' : '[name].[hash].css',
chunkFilename: '[id].css', chunkFilename: process.env.NODE_ENV !== 'production' ? '[id].css' : '[id].[hash].css',
}), }),
new webpack.HotModuleReplacementPlugin(), new webpack.HotModuleReplacementPlugin(),
new CopyWebpackPlugin([ new CopyWebpackPlugin([
@ -98,6 +103,18 @@ let config = {
{ from: path.resolve(__dirname, './app/assets/icons'), to: 'icons' }, { from: path.resolve(__dirname, './app/assets/icons'), to: 'icons' },
{ from: path.resolve(__dirname, './app/assets/img'), to: 'img' }, { from: path.resolve(__dirname, './app/assets/img'), to: 'img' },
]), ]),
new PreloadWebpackPlugin({
rel: 'preload',
as(entry) {
if (/\.css$/.test(entry)) return 'style';
if (/\.woff$/.test(entry)) return 'font';
if (/\.png$/.test(entry)) return 'image';
if (/\.jpg$/.test(entry)) return 'image';
return 'script';
},
fileBlacklist: [/\.map/, /\.svg/, /\.woff/, /\.eot/, /\.woff2/, /\.ttf/, /\.png/, /\.gif/, /\.mp4/],
include: 'allAssets',
}),
], ],
devServer: { devServer: {
contentBase: path.resolve(__dirname, './public'), contentBase: path.resolve(__dirname, './public'),
@ -114,37 +131,36 @@ module.exports = config;
const locales = []; const locales = [];
// Import locales list // Import locales list
fs.readdirSync('./app/locales').forEach(file => { fs.readdirSync('./app/locales')
locales.push(file.replace(/(.*)\.yml/, '$1')); .forEach(file => locales.push(file));
});
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
module.exports.plugins = (module.exports.plugins || []).concat([ module.exports.plugins = (module.exports.plugins || [])
new webpack.DefinePlugin({ .concat([
'process.env': { new webpack.DefinePlugin({
NODE_ENV: '"development"', 'process.env': {
BASE_URL: '""', NODE_ENV: '"development"',
}, BASE_URL: '""',
}), },
new HtmlWebpackPlugin({ }),
title: 'DEVELOPMENT prerender-spa-plugin', new HtmlWebpackPlugin({
template: 'index.html', title: 'DEVELOPMENT prerender-spa-plugin',
filename: 'index.html', template: 'index.html',
}), filename: 'index.html',
]); }),
]);
} else { // NODE_ENV === 'production|preview' } else { // NODE_ENV === 'production|preview'
const routes = [root]; const routes = [];
const pages = []; const pages = [];
// Import pages list // Import pages list
fs.readdirSync('./app/components/pages').forEach(file => { fs.readdirSync('./app/components/pages')
pages.push(file.replace(/(.*)\.vue/, '$1')); .forEach(file => pages.push(file.replace(/(.*)\.vue/, '$1')));
});
// Localized routes for (let j = 0; j < pages.length; j += 1) {
for (let i = 0; i < locales.length; i += 1) { routes.push(`${root}${pages[j].toLowerCase().replace('home', '')}`);
for (let j = 0; j < pages.length; j += 1) { // Localized routes
routes.push( for (let i = 0; i < locales.length; i += 1) {
`${root}${locales[i]}${pages[j].toLowerCase().replace(/^/, '/').replace('/home', '')}` routes.push(`${root}${locales[i]}${pages[j].toLowerCase().replace(/^/, '/').replace('/home', '')}`);
);
} }
} }
@ -158,6 +174,9 @@ if (process.env.NODE_ENV === 'development') {
}), }),
new OptimizeCSSAssetsPlugin({}), new OptimizeCSSAssetsPlugin({}),
], ],
splitChunks: {
chunks: 'all',
},
}; };
module.exports.plugins.push( module.exports.plugins.push(
new webpack.DefinePlugin({ new webpack.DefinePlugin({
@ -182,6 +201,14 @@ if (process.env.NODE_ENV === 'development') {
inject: { inject: {
prerender: true, prerender: true,
}, },
postProcess(renderedRoute) {
// eslint-disable-next-line no-param-reassign
renderedRoute.html = renderedRoute.html
.replace(/<script (.*?)>/g, '<script $1 defer>')
.replace('id="app"', 'id="app" data-server-rendered="true"');
return renderedRoute;
},
}), }),
}), }),
); );
@ -189,21 +216,21 @@ if (process.env.NODE_ENV === 'development') {
// Create ./public/img/lg/* symlinks only if images need translation // Create ./public/img/lg/* symlinks only if images need translation
if (fs.existsSync('./app/assets/img/fr')) { if (fs.existsSync('./app/assets/img/fr')) {
if (!fs.existsSync('./public')){ fs.mkdirSync('./public'); } if (!fs.existsSync('./public')) { fs.mkdirSync('./public'); }
if (!fs.existsSync(`./public${root}`)){ fs.mkdirSync(`./public${root}`); } if (!fs.existsSync(`./public${root}`)) { fs.mkdirSync(`./public${root}`); }
if (!fs.existsSync(`./public${root}img`)){ fs.mkdirSync(`./public${root}img`); } if (!fs.existsSync(`./public${root}img`)) { fs.mkdirSync(`./public${root}img`); }
for (let i = 0; i < locales.length; i += 1) { for (let i = 0; i < locales.length; i += 1) {
if (!fs.existsSync(`./public${root}img/${locales[i]}`)){ if (!fs.existsSync(`./public${root}img/${locales[i]}`)) {
fs.mkdirSync(`./public${root}img/${locales[i]}`); fs.mkdirSync(`./public${root}img/${locales[i]}`);
} }
fs.readdirSync('./app/assets/img/fr').forEach(file => { fs.readdirSync('./app/assets/img/fr').forEach((file) => {
if (!fs.existsSync(`./app/assets/img/${locales[i]}/${file}`)) { if (!fs.existsSync(`./app/assets/img/${locales[i]}/${file}`)) {
const symlinkOrigin = (process.env.NODE_ENV === 'development') const symlinkOrigin = (process.env.NODE_ENV === 'development')
? `../../../app/assets/img/fr/${file}` // [dev] relative to assets ? `../../../app/assets/img/fr/${file}` // [dev] relative to assets
: `../fr/${file}` // [prod] relative to public : `../fr/${file}`; // [prod] relative to public
fs.symlink(symlinkOrigin, `./public${root}img/${locales[i]}/${file}`, fs.symlink(symlinkOrigin,
function (err) { console.log(err); } // eslint-disable-line `./public${root}img/${locales[i]}/${file}`,
); (err) => { console.log(err) }); // eslint-disable-line
} }
}); });
} }

7
zanata/scripts/selfpo2yml.sh Executable file
View file

@ -0,0 +1,7 @@
#!/bin/bash
for i in zanata/po/*.po
do
j=$(echo $i | cut -d '.' -f 1 | cut -d '/' -f 3)
po2yaml -i $i --progress none -t zanata/backup/$j.yml -o zanata/yml/$j.yml
done
cp zanata/yml/*.yml app/locales/

16
zanata/scripts/selfyml2po.sh Executable file
View file

@ -0,0 +1,16 @@
#!/bin/bash
cp app/locales/*.yml zanata/yml/
yaml2po -P --progress=none -i zanata/yml/en.yml -o zanata/po/${PWD##*/}.pot
for i in app/locales/*.yml
do
j=$(echo $i | cut -d '.' -f 1 | cut -d '/' -f 3)
yaml2po --progress=none -t zanata/yml/$j.yml -i zanata/yml/$j.yml -o zanata/po/$j.po
# Rename empty (almost) .po
tail -n +2 zanata/po/$j.po > zanata/po/tmp.1
tail -n +2 zanata/po/${PWD##*/}.pot > zanata/po/tmp.2
if((`stat -c%s "zanata/po/tmp.1"` <= `stat -c%s "zanata/po/tmp.2"`));then
mv zanata/po/$j.po zanata/po/$j.err
fi
rm zanata/po/tmp.1 zanata/po/tmp.2
done

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<config xmlns="http://zanata.org/namespace/config/"> <config xmlns="http://zanata.org/namespace/config/">
<url>https://trad.framasoft.org/</url> <url>https://trad.framasoft.org/</url>
<project>join-peertube</project> <project></project>
<project-version>master</project-version> <project-version>master</project-version>
<project-type>gettext</project-type> <project-type>gettext</project-type>
<src-dir>zanata/po</src-dir> <src-dir>zanata/po</src-dir>