Add contributors in about peertube page
authorChocobozzz <me@florianbigard.com>
Thu, 5 Sep 2019 13:39:52 +0000 (15:39 +0200)
committerChocobozzz <me@florianbigard.com>
Thu, 5 Sep 2019 13:40:09 +0000 (15:40 +0200)
12 files changed:
CREDITS.md
README.md
client/src/app/+about/about-instance/about-instance.component.html
client/src/app/+about/about-peertube/about-peertube-contributors.component.html [new file with mode: 0644]
client/src/app/+about/about-peertube/about-peertube-contributors.component.scss [new file with mode: 0644]
client/src/app/+about/about-peertube/about-peertube-contributors.component.ts [new file with mode: 0644]
client/src/app/+about/about-peertube/about-peertube.component.html
client/src/app/+about/about-peertube/about-peertube.component.scss
client/src/app/+about/about.module.ts
client/src/app/shared/renderer/markdown.service.ts
client/src/assets/images/framasoft.png [new file with mode: 0644]
scripts/generate-code-contributors.ts

index 1b8ef737052ccb910cd8df3361c52cc2d3d043d5..09719974d86c7a050e83fc389bc86fdd5b34c31b 100644 (file)
@@ -1,4 +1,4 @@
-# Code
+# Code contributors
 
  * [Chocobozzz](https://github.com/Chocobozzz)
  * [rigelk](https://github.com/rigelk)
@@ -8,10 +8,12 @@
  * [Jorropo](https://github.com/Jorropo)
  * [buoyantair](https://github.com/buoyantair)
  * [bnjbvr](https://github.com/bnjbvr)
+ * [frankstrater](https://github.com/frankstrater)
  * [jankeromnes](https://github.com/jankeromnes)
  * [lucas-dclrcq](https://github.com/lucas-dclrcq)
- * [DavidLibeau](https://github.com/DavidLibeau)
  * [JohnXLivingston](https://github.com/JohnXLivingston)
+ * [DavidLibeau](https://github.com/DavidLibeau)
+ * [fflorent](https://github.com/fflorent)
  * [kaiyou](https://github.com/kaiyou)
  * [ldidry](https://github.com/ldidry)
  * [McFlat](https://github.com/McFlat)
  * [NassimBounouas](https://github.com/NassimBounouas)
  * [thomaskuntzz](https://github.com/thomaskuntzz)
  * [rezonant](https://github.com/rezonant)
+ * [Wirebrass](https://github.com/Wirebrass)
  * [clementbrizard](https://github.com/clementbrizard)
  * [LecygneNoir](https://github.com/LecygneNoir)
  * [okhin](https://github.com/okhin)
  * [daftaupe](https://github.com/daftaupe)
  * [tcitworld](https://github.com/tcitworld)
- * [fflorent](https://github.com/fflorent)
  * [dedesite](https://github.com/dedesite)
  * [Nautigsam](https://github.com/Nautigsam)
  * [scanlime](https://github.com/scanlime)
  * [am97](https://github.com/am97)
  * [dadall](https://github.com/dadall)
  * [jonathanraes](https://github.com/jonathanraes)
- * [Wirebrass](https://github.com/Wirebrass)
  * [yohanboniface](https://github.com/yohanboniface)
  * [anoadragon453](https://github.com/anoadragon453)
  * [auberanger](https://github.com/auberanger)
  * [darnuria](https://github.com/darnuria)
  * [rhaamo](https://github.com/rhaamo)
  * [mrflos](https://github.com/mrflos)
+ * [Yetangitu](https://github.com/Yetangitu)
  * [jocelynj](https://github.com/jocelynj)
  * [lucaspontoexe](https://github.com/lucaspontoexe)
  * [flyingrub](https://github.com/flyingrub)
@@ -57,6 +59,7 @@
  * [Anton-Latukha](https://github.com/Anton-Latukha)
  * [noplanman](https://github.com/noplanman)
  * [austinheap](https://github.com/austinheap)
+ * [BO41](https://github.com/BO41)
  * [benabbottnz](https://github.com/benabbottnz)
  * [ewft](https://github.com/ewft)
  * [bradsk88](https://github.com/bradsk88)
@@ -67,7 +70,6 @@
  * [ebrehault](https://github.com/ebrehault)
  * [DatBewar](https://github.com/DatBewar)
  * [ReK2Fernandez](https://github.com/ReK2Fernandez)
- * [Yetangitu](https://github.com/Yetangitu)
  * [grizio](https://github.com/grizio)
  * [Glandos](https://github.com/Glandos)
  * [lanodan](https://github.com/lanodan)
@@ -80,6 +82,7 @@
  * [pichouk](https://github.com/pichouk)
  * [LeoMouyna](https://github.com/LeoMouyna)
  * [LiPeK](https://github.com/LiPeK)
+ * [Findus23](https://github.com/Findus23)
  * [zapashcanon](https://github.com/zapashcanon)
  * [mart-e](https://github.com/mart-e)
  * [0mp](https://github.com/0mp)
@@ -95,6 +98,7 @@
  * [quentinDupont](https://github.com/quentinDupont)
  * [Quenty31](https://github.com/Quenty31)
  * [sundowndev](https://github.com/sundowndev)
+ * [robinkooli](https://github.com/robinkooli)
  * [sesn](https://github.com/sesn)
  * [ALSai](https://github.com/ALSai)
  * [Simounet](https://github.com/Simounet)
  * [FrozenDroid](https://github.com/FrozenDroid)
  * [fallen](https://github.com/fallen)
  * [melongbob](https://github.com/melongbob)
- * [Zig-03](https://github.com/Zig-03)
  * [anmol26s](https://github.com/anmol26s)
  * [imbsky](https://github.com/imbsky)
  * [ctlaltdefeat](https://github.com/ctlaltdefeat)
  * [jomo](https://github.com/jomo)
  * [libertysoft3](https://github.com/libertysoft3)
  * [lsde](https://github.com/lsde)
- * [memoryboxes](https://github.com/memoryboxes)
+ * [brain-zhang](https://github.com/brain-zhang)
  * [norrist](https://github.com/norrist)
  * [osauzet](https://github.com/osauzet)
  * [SansPseudoFix](https://github.com/SansPseudoFix)
  * [ewasion](https://github.com/ewasion)
 
 
-# Translations
+# Translation contributors
 
  * [abdhessuk](https://trad.framasoft.org/zanata/profile/view/abdhessuk)
  * [abidin24](https://trad.framasoft.org/zanata/profile/view/abidin24)
  * [abidin24](https://trad.framasoft.org/zanata/profile/view/abidin24)
  * [aditoo](https://trad.framasoft.org/zanata/profile/view/aditoo)
  * [alidemirtas](https://trad.framasoft.org/zanata/profile/view/alidemirtas)
+ * [anastasia](https://trad.framasoft.org/zanata/profile/view/anastasia)
  * [ariasuni](https://trad.framasoft.org/zanata/profile/view/ariasuni)
  * [autom](https://trad.framasoft.org/zanata/profile/view/autom)
  * [balaji](https://trad.framasoft.org/zanata/profile/view/balaji)
  * [bristow](https://trad.framasoft.org/zanata/profile/view/bristow)
  * [butterflyoffire](https://trad.framasoft.org/zanata/profile/view/butterflyoffire)
  * [c0dr](https://trad.framasoft.org/zanata/profile/view/c0dr)
+ * [canony](https://trad.framasoft.org/zanata/profile/view/canony)
  * [cat](https://trad.framasoft.org/zanata/profile/view/cat)
  * [chocobozzz](https://trad.framasoft.org/zanata/profile/view/chocobozzz)
  * [clerie](https://trad.framasoft.org/zanata/profile/view/clerie)
  * [curupira](https://trad.framasoft.org/zanata/profile/view/curupira)
  * [dhsets](https://trad.framasoft.org/zanata/profile/view/dhsets)
+ * [dibek](https://trad.framasoft.org/zanata/profile/view/dibek)
  * [digitalkiller](https://trad.framasoft.org/zanata/profile/view/digitalkiller)
  * [dwsage](https://trad.framasoft.org/zanata/profile/view/dwsage)
+ * [fkohrt](https://trad.framasoft.org/zanata/profile/view/fkohrt)
  * [flauta](https://trad.framasoft.org/zanata/profile/view/flauta)
  * [frankstrater](https://trad.framasoft.org/zanata/profile/view/frankstrater)
  * [gillux](https://trad.framasoft.org/zanata/profile/view/gillux)
  * [jhertel](https://trad.framasoft.org/zanata/profile/view/jhertel)
  * [joss2lyon](https://trad.framasoft.org/zanata/profile/view/joss2lyon)
  * [kekkotranslates](https://trad.framasoft.org/zanata/profile/view/kekkotranslates)
+ * [kingu](https://trad.framasoft.org/zanata/profile/view/kingu)
  * [kittybecca](https://trad.framasoft.org/zanata/profile/view/kittybecca)
+ * [kousha](https://trad.framasoft.org/zanata/profile/view/kousha)
  * [krkk](https://trad.framasoft.org/zanata/profile/view/krkk)
+ * [lapor](https://trad.framasoft.org/zanata/profile/view/lapor)
  * [laufor](https://trad.framasoft.org/zanata/profile/view/laufor)
  * [leeroyepold48](https://trad.framasoft.org/zanata/profile/view/leeroyepold48)
  * [lstamellos](https://trad.framasoft.org/zanata/profile/view/lstamellos)
  * [mablr](https://trad.framasoft.org/zanata/profile/view/mablr)
  * [marcinmalecki](https://trad.framasoft.org/zanata/profile/view/marcinmalecki)
  * [matograine](https://trad.framasoft.org/zanata/profile/view/matograine)
+ * [mayana](https://trad.framasoft.org/zanata/profile/view/mayana)
  * [mikeorlov](https://trad.framasoft.org/zanata/profile/view/mikeorlov)
  * [nin](https://trad.framasoft.org/zanata/profile/view/nin)
+ * [noncommutativegeo](https://trad.framasoft.org/zanata/profile/view/noncommutativegeo)
  * [norbipeti](https://trad.framasoft.org/zanata/profile/view/norbipeti)
+ * [nvivant](https://trad.framasoft.org/zanata/profile/view/nvivant)
+ * [osoitz](https://trad.framasoft.org/zanata/profile/view/osoitz)
+ * [ppnplus](https://trad.framasoft.org/zanata/profile/view/ppnplus)
  * [predatorix](https://trad.framasoft.org/zanata/profile/view/predatorix)
  * [quentin](https://trad.framasoft.org/zanata/profile/view/quentin)
  * [quentind](https://trad.framasoft.org/zanata/profile/view/quentind)
  * [robin](https://trad.framasoft.org/zanata/profile/view/robin)
  * [rond](https://trad.framasoft.org/zanata/profile/view/rond)
  * [s8321414](https://trad.framasoft.org/zanata/profile/view/s8321414)
+ * [sato_ss](https://trad.framasoft.org/zanata/profile/view/sato_ss)
  * [secreet](https://trad.framasoft.org/zanata/profile/view/secreet)
+ * [sercom_kc](https://trad.framasoft.org/zanata/profile/view/sercom_kc)
  * [severo](https://trad.framasoft.org/zanata/profile/view/severo)
  * [silkevicious](https://trad.framasoft.org/zanata/profile/view/silkevicious)
  * [sporiff](https://trad.framasoft.org/zanata/profile/view/sporiff)
  * [tekuteku](https://trad.framasoft.org/zanata/profile/view/tekuteku)
+ * [thecatjustmeow](https://trad.framasoft.org/zanata/profile/view/thecatjustmeow)
  * [tirifto](https://trad.framasoft.org/zanata/profile/view/tirifto)
  * [tmota](https://trad.framasoft.org/zanata/profile/view/tmota)
  * [tuxayo](https://trad.framasoft.org/zanata/profile/view/tuxayo)
index 4a785478c1a8dc261c41fd09061a6b5d0d9e2f2a..5ed7d5b4c3deff025c1cc00873d854231c2ee50f 100644 (file)
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ Be part of a network of multiple small federated, interoperable video hosting pr
 
 <p align="center">
   <a href="https://framasoft.org">
-    <img width="150px" src="http://lutim.cpy.re/Prd3ci7G.png" alt="Framasoft logo"/>
+    <img width="150px" src="https://lutim.cpy.re/FeRgHH8r.png" alt="Framasoft logo"/>
   </a>
 </p>
 
index 9499bbe4e6703256dcccc018424965e2ff3ecb09..25d41674079cecc99860a0a99015890c7c7bbfd0 100644 (file)
@@ -4,7 +4,7 @@
     <div class="about-instance-title">
       <div i18n class="title">About {{ instanceName }} instance</div>
 
-      <div *ngIf="isContactFormEnabled" (click)="openContactModal()" i18n role="button" class="contact-admin">Contact administrator</div>
+      <div i18n *ngIf="isContactFormEnabled" (click)="openContactModal()" role="button" class="contact-admin">Contact administrator</div>
     </div>
 
     <div class="block instance-badges">
     <div class="short-description">
       <div class="block short-description">{{ shortDescription }}</div>
 
-      <div *ngIf="isNSFW" class="block dedicated-to-nsfw">This instance is dedicated to sensitive/NSFW content.</div>
+      <div i18n *ngIf="isNSFW" class="block dedicated-to-nsfw">This instance is dedicated to sensitive/NSFW content.</div>
     </div>
 
-    <div class="middle-title" *ngIf="html.administrator || maintenanceLifetime || businessModel">
+    <div i18n class="middle-title" *ngIf="html.administrator || maintenanceLifetime || businessModel">
       Administrators & sustainability
     </div>
 
@@ -47,7 +47,7 @@
       <p>{{ businessModel }}</p>
     </div>
 
-    <div class="middle-title" *ngIf="html.description">
+    <div i18n class="middle-title" *ngIf="html.description">
       Information
     </div>
 
@@ -57,7 +57,7 @@
       <div [innerHTML]="html.description"></div>
     </div>
 
-    <div class="middle-title" *ngIf="html.moderationInformation || html.codeOfConduct || html.terms">
+    <div i18n class="middle-title" *ngIf="html.moderationInformation || html.codeOfConduct || html.terms">
       Moderation
     </div>
 
@@ -79,7 +79,7 @@
       <div [innerHTML]="html.terms"></div>
     </div>
 
-    <div class="middle-title" *ngIf="html.hardwareInformation">
+    <div i18n class="middle-title" *ngIf="html.hardwareInformation">
       Other information
     </div>
 
@@ -91,7 +91,7 @@
   </div>
 
   <div class="col-md-12 col-xl-6">
-    <label>Features found on this instance</label>
+    <label i18n>Features found on this instance</label>
     <my-instance-features-table></my-instance-features-table>
   </div>
 </div>
diff --git a/client/src/app/+about/about-peertube/about-peertube-contributors.component.html b/client/src/app/+about/about-peertube/about-peertube-contributors.component.html
new file mode 100644 (file)
index 0000000..997a6a3
--- /dev/null
@@ -0,0 +1,13 @@
+<h3 i18n class="section-title">Who made this software?</h3>
+
+<p align="center">
+  <strong>Developed with &#10084; by <a target="_blank" rel="noopener noreferrer" href="https://framasoft.org">Framasoft</a></strong>
+</p>
+
+<p align="center">
+  <a target="_blank" rel="noopener noreferrer" href="https://framasoft.org">
+    <img width="150px" src="/client/assets/images/framasoft.png" alt="Framasoft logo"/>
+  </a>
+</p>
+
+<div [innerHTML]="creditsHtml"></div>
diff --git a/client/src/app/+about/about-peertube/about-peertube-contributors.component.scss b/client/src/app/+about/about-peertube/about-peertube-contributors.component.scss
new file mode 100644 (file)
index 0000000..9c3b0a4
--- /dev/null
@@ -0,0 +1,15 @@
+@import '_variables';
+@import '_mixins';
+
+/deep/ h1 {
+  font-size: 1rem;
+}
+
+/deep/ ul {
+  padding: 0;
+
+  li {
+    display: inline-block;
+    margin-right: 10px;
+  }
+}
diff --git a/client/src/app/+about/about-peertube/about-peertube-contributors.component.ts b/client/src/app/+about/about-peertube/about-peertube-contributors.component.ts
new file mode 100644 (file)
index 0000000..fa2c0da
--- /dev/null
@@ -0,0 +1,19 @@
+import { Component, OnInit } from '@angular/core'
+import { MarkdownService } from '@app/shared/renderer'
+
+@Component({
+  selector: 'my-about-peertube-contributors',
+  templateUrl: './about-peertube-contributors.component.html',
+  styleUrls: [ './about-peertube-contributors.component.scss' ]
+})
+export class AboutPeertubeContributorsComponent implements OnInit {
+  creditsHtml: string
+
+  private markdown = require('raw-loader!../../../../../CREDITS.md')
+
+  constructor (private markdownService: MarkdownService) { }
+
+  async ngOnInit () {
+    this.creditsHtml = await this.markdownService.completeMarkdownToHTML(this.markdown)
+  }
+}
index d3fc9a8288ce4662e0514a0d27a03ec4940d50df..423f7bce7a52cd88978db4af88f5269d86300b9b 100644 (file)
   </p>
 </div>
 
-<div id="p2p-privacy">
-  <h3 i18n class="section-title">P2P & Privacy</h3>
+<div class="privacy-contributors">
+  <my-about-peertube-contributors></my-about-peertube-contributors>
+
+  <div class="p2p-privacy">
+    <h3 i18n class="section-title">P2P & Privacy</h3>
+
+    <p i18n>
+      PeerTube uses the BitTorrent protocol to share bandwidth between users.
+      This implies that your IP address is stored in the instance's BitTorrent tracker as long as you download or watch the video.
+    </p>
+
+    <h6 i18n class="p2p-privacy-title">What are the consequences?</h6>
+
+    <p i18n>
+      In theory, someone with enough technical skills could create a script that tracks which IP is downloading which video.
+      In practice, this is much more difficult because:
+    </p>
+
+    <ul>
+      <li i18n>
+        An HTTP request has to be sent on each tracker for each video to spy.
+        If we want to spy all PeerTube's videos, we have to send as many requests as there are videos (so potentially a lot)
+      </li>
+
+      <li i18n>
+        For each request sent, the tracker returns random peers at a limited number.
+        For instance, if there are 1000 peers in the swarm and the tracker sends only 20 peers for each request, there must be at least 50 requests sent to know every peers in the swarm
+      </li>
+
+      <li i18n>
+        Those requests have to be sent regularly to know who starts/stops watching a video. It is easy to detect that kind of behaviour
+      </li>
+
+      <li i18n>
+        If an IP address is stored in the tracker, it doesn't mean that the person behind the IP (if this person exists) has watched the video
+      </li>
+
+      <li i18n>
+        The IP address is a vague information : usually, it regularly changes and can represent many persons or entities
+      </li>
+
+      <li i18n>
+        Web peers are not publicly accessible: because we use WebRTC inside the web browser (<a href="https://webtorrent.io/">with the WebTorrent library</a>), the protocol is different from classic BitTorrent.
+        When you are in a web browser, you send a signal containing your IP address to the tracker that will randomly choose other peers to forward the information to.
+        See <a href="https://github.com/yciabaud/webtorrent/blob/beps/bep_webrtc.rst">this document</a> for more information
+      </li>
+    </ul>
+
+    <p i18n>
+      The worst-case scenario of an average person spying on their friends is quite unlikely.
+      There are much more effective ways to get that kind of information.
+    </p>
+
+    <h6 i18n class="p2p-privacy-title">How does PeerTube compare with YouTube?</h6>
+
+    <p i18n>
+      The threats to privacy in YouTube are different from PeerTube's.
+      In YouTube's case, the platform gathers a huge amount of your personal information (not only your IP) to analyze them and track you.
+      Moreover, YouTube is owned by Google/Alphabet, a company that tracks you across many websites (via AdSense or Google Analytics).
+    </p>
+
+    <h6 i18n class="p2p-privacy-title">What can I do to limit the exposure of my IP address?</h6>
+
+    <p i18n>
+      Your IP address is public so every time you consult a website, there is a number of actors (in addition to the final website) seeing your IP in their connection logs: ISP/routers/trackers/CDN and more.
+      PeerTube is transparent about it: we warn you that if you want to keep your IP private, you must use a VPN or Tor Browser.
+      Thinking that removing P2P from PeerTube will give you back anonymity doesn't make sense.
+    </p>
+
+    <h6 i18n class="p2p-privacy-title">What will be done to mitigate this problem?</h6>
+
+    <p i18n>
+      PeerTube is in its early stages, and want to deliver the best countermeasures possible by the time the stable is released.
+      In the meantime, we want to test different ideas related to this issue:
+    </p>
+
+    <ul>
+      <li i18n>Set a limit to the number of peers sent by the tracker</li>
+      <li i18n>Set a limit on the request frequency received by the tracker (being tested)</li>
+      <li i18n>Ring a bell if there are unusual requests (being tested)</li>
+      <li i18n>Disable P2P from the administration interface</li>
+      <li i18n>An automatic video redundancy program: we wouldn't know if the IP downloaded the video on purpose or if it was the automatized program</li>
+    </ul>
+  </div>
 
-  <p i18n>
-    PeerTube uses the BitTorrent protocol to share bandwidth between users.
-    This implies that your IP address is stored in the instance's BitTorrent tracker as long as you download or watch the video.
-  </p>
-
-  <h6 i18n class="p2p-privacy-title">What are the consequences?</h6>
-
-  <p i18n>
-    In theory, someone with enough technical skills could create a script that tracks which IP is downloading which video.
-    In practice, this is much more difficult because:
-  </p>
-
-  <ul>
-    <li i18n>
-      An HTTP request has to be sent on each tracker for each video to spy.
-      If we want to spy all PeerTube's videos, we have to send as many requests as there are videos (so potentially a lot)
-    </li>
-
-    <li i18n>
-      For each request sent, the tracker returns random peers at a limited number.
-      For instance, if there are 1000 peers in the swarm and the tracker sends only 20 peers for each request, there must be at least 50 requests sent to know every peers in the swarm
-    </li>
-
-    <li i18n>
-      Those requests have to be sent regularly to know who starts/stops watching a video. It is easy to detect that kind of behaviour
-    </li>
-
-    <li i18n>
-      If an IP address is stored in the tracker, it doesn't mean that the person behind the IP (if this person exists) has watched the video
-    </li>
-
-    <li i18n>
-      The IP address is a vague information : usually, it regularly changes and can represent many persons or entities
-    </li>
-
-    <li i18n>
-      Web peers are not publicly accessible: because we use WebRTC inside the web browser (<a href="https://webtorrent.io/">with the WebTorrent library</a>), the protocol is different from classic BitTorrent.
-      When you are in a web browser, you send a signal containing your IP address to the tracker that will randomly choose other peers to forward the information to.
-      See <a href="https://github.com/yciabaud/webtorrent/blob/beps/bep_webrtc.rst">this document</a> for more information
-    </li>
-  </ul>
-
-  <p i18n>
-    The worst-case scenario of an average person spying on their friends is quite unlikely.
-    There are much more effective ways to get that kind of information.
-  </p>
-
-  <h6 i18n class="p2p-privacy-title">How does PeerTube compare with YouTube?</h6>
-
-  <p i18n>
-    The threats to privacy in YouTube are different from PeerTube's.
-    In YouTube's case, the platform gathers a huge amount of your personal information (not only your IP) to analyze them and track you.
-    Moreover, YouTube is owned by Google/Alphabet, a company that tracks you across many websites (via AdSense or Google Analytics).
-  </p>
-
-  <h6 i18n class="p2p-privacy-title">What can I do to limit the exposure of my IP address?</h6>
-
-  <p i18n>
-    Your IP address is public so every time you consult a website, there is a number of actors (in addition to the final website) seeing your IP in their connection logs: ISP/routers/trackers/CDN and more.
-    PeerTube is transparent about it: we warn you that if you want to keep your IP private, you must use a VPN or Tor Browser.
-    Thinking that removing P2P from PeerTube will give you back anonymity doesn't make sense.
-  </p>
-
-  <h6 i18n class="p2p-privacy-title">What will be done to mitigate this problem?</h6>
-
-  <p i18n>
-    PeerTube is in its early stages, and want to deliver the best countermeasures possible by the time the stable is released.
-    In the meantime, we want to test different ideas related to this issue:
-  </p>
-
-  <ul>
-    <li i18n>Set a limit to the number of peers sent by the tracker</li>
-    <li i18n>Set a limit on the request frequency received by the tracker (being tested)</li>
-    <li i18n>Ring a bell if there are unusual requests (being tested)</li>
-    <li i18n>Disable P2P from the administration interface</li>
-    <li i18n>An automatic video redundancy program: we wouldn't know if the IP downloaded the video on purpose or if it was the automatized program</li>
-  </ul>
 </div>
index 0d2e2bb68d65342919083a8b72723b7e9f021b3b..8fca53e90037b5756f089792e6b223349c378b4f 100644 (file)
@@ -2,12 +2,12 @@
 @import '_mixins';
 
 .about-peertube-title {
-  font-size: 25px;
-  font-weight: bold;
+  font-size: 20px;
+  font-weight: $font-semibold;
   margin-bottom: 15px;
 }
 
-.section-title {
+/deep/ .section-title {
   font-weight: $font-semibold;
   font-size: 20px;
   margin-bottom: 5px;
   margin-bottom: 30px;
 }
 
+.description,
+.p2p-privacy,
+my-about-peertube-contributors {
+  /deep/ {
+    p, li {
+      font-size: 15px;
+    }
+  }
+}
+
 .p2p-privacy-title {
   margin-top: 15px;
-}
\ No newline at end of file
+}
+
+.privacy-contributors {
+  display: flex;
+  flex-direction: row;
+
+  > div,
+  > my-about-peertube-contributors {
+    flex-basis: 100%;
+    display: block;
+  }
+
+  .p2p-privacy {
+    h6 {
+      font-size: 20px;
+    }
+  }
+
+  my-about-peertube-contributors {
+    margin: 0 40px 40px 0;
+  }
+
+  @media screen and (max-width: $small-view) {
+    flex-direction: column;
+  }
+}
index 49a7a52f848ad2b1813f5cc505c740eea54b339c..14bf76e55ac86da59720784bf06cf43d9377228c 100644 (file)
@@ -1,5 +1,4 @@
 import { NgModule } from '@angular/core'
-
 import { AboutRoutingModule } from './about-routing.module'
 import { AboutComponent } from './about.component'
 import { SharedModule } from '../shared'
@@ -7,6 +6,7 @@ import { AboutInstanceComponent } from '@app/+about/about-instance/about-instanc
 import { AboutPeertubeComponent } from '@app/+about/about-peertube/about-peertube.component'
 import { ContactAdminModalComponent } from '@app/+about/about-instance/contact-admin-modal.component'
 import { AboutFollowsComponent } from '@app/+about/about-follows/about-follows.component'
+import { AboutPeertubeContributorsComponent } from '@app/+about/about-peertube/about-peertube-contributors.component'
 
 @NgModule({
   imports: [
@@ -19,6 +19,7 @@ import { AboutFollowsComponent } from '@app/+about/about-follows/about-follows.c
     AboutInstanceComponent,
     AboutPeertubeComponent,
     AboutFollowsComponent,
+    AboutPeertubeContributorsComponent,
     ContactAdminModalComponent
   ],
 
index 9a90663511c850767e91f2e5755b3f292ae6656a..0e24f3085ef93113fd0f6252ebfe79ccd7811b1d 100644 (file)
@@ -13,9 +13,11 @@ export class MarkdownService {
     'list'
   ]
   static ENHANCED_RULES = MarkdownService.TEXT_RULES.concat([ 'image' ])
+  static COMPLETE_RULES = MarkdownService.ENHANCED_RULES.concat([ 'block', 'inline', 'heading', 'html_inline', 'html_block', 'paragraph' ])
 
   private textMarkdownIt: MarkdownIt
   private enhancedMarkdownIt: MarkdownIt
+  private completeMarkdownIt: MarkdownIt
 
   async textMarkdownToHTML (markdown: string) {
     if (!markdown) return ''
@@ -39,11 +41,22 @@ export class MarkdownService {
     return this.avoidTruncatedTags(html)
   }
 
-  private async createMarkdownIt (rules: string[]) {
-    // FIXME: import('..') returns a struct module, containing a "default" field corresponding to our sanitizeHtml function
+  async completeMarkdownToHTML (markdown: string) {
+    if (!markdown) return ''
+
+    if (!this.completeMarkdownIt) {
+      this.completeMarkdownIt = await this.createMarkdownIt(MarkdownService.COMPLETE_RULES, true)
+    }
+
+    const html = this.completeMarkdownIt.render(markdown)
+    return this.avoidTruncatedTags(html)
+  }
+
+  private async createMarkdownIt (rules: string[], html = false) {
+    // FIXME: import('...') returns a struct module, containing a "default" field corresponding to our sanitizeHtml function
     const MarkdownItClass: typeof import ('markdown-it') = (await import('markdown-it') as any).default
 
-    const markdownIt = new MarkdownItClass('zero', { linkify: true, breaks: true })
+    const markdownIt = new MarkdownItClass('zero', { linkify: true, breaks: true, html })
 
     for (const rule of rules) {
       markdownIt.enable(rule)
diff --git a/client/src/assets/images/framasoft.png b/client/src/assets/images/framasoft.png
new file mode 100644 (file)
index 0000000..57be8c2
Binary files /dev/null and b/client/src/assets/images/framasoft.png differ
index 0d6266056780b6f593f4871a2083fbe372f95d98..c745b1cb243057b2e81edd181f40dc8ead25401b 100755 (executable)
@@ -13,7 +13,7 @@ async function run () {
   {
     const contributors = await fetchGithub('https://api.github.com/repos/chocobozzz/peertube/contributors')
 
-    console.log('# Code\n')
+    console.log('# Code contributors\n')
     for (const contributor of contributors) {
       const contributorUrl = contributor.url.replace('api.github.com/users', 'github.com')
       console.log(` * [${contributor.login}](${contributorUrl})`)
@@ -27,7 +27,7 @@ async function run () {
 
     const translators = await fetchZanata(zanataUsername, zanataToken)
 
-    console.log('\n\n# Translations\n')
+    console.log('\n\n# Translation contributors\n')
     for (const translator of translators) {
       console.log(` * [${translator.username}](https://trad.framasoft.org/zanata/profile/view/${translator.username})`)
     }