Browse Source

Merge pull request #2201 from pixelfed/staging

MomentUI updates
daniel 5 years ago
parent
commit
76a6e9c186

+ 2 - 0
CHANGELOG.md

@@ -36,6 +36,8 @@
 - Updated api routes, fixes ([#2114](https://github.com/pixelfed/pixelfed/issues/2114)) ([50bbeddd](https://github.com/pixelfed/pixelfed/commit/50bbeddd))
 - Updated SiteController, add legacy profile/webfinger redirect ([cfaa248c](https://github.com/pixelfed/pixelfed/commit/cfaa248c))
 - Updated checkpoint view, fix recovery code bug ([3385583f](https://github.com/pixelfed/pixelfed/commit/3385583f))
+- Updated Inbox, move expensive HTTP Signature validation to job queue ([f2ae45e5a](https://github.com/pixelfed/pixelfed/commit/f2ae45e5a))
+- Updated MomentUI, fix bugs and improve UI ([90b89cb8](https://github.com/pixelfed/pixelfed/commit/90b89cb8))
 
 
 ## [v0.10.9 (2020-04-17)](https://github.com/pixelfed/pixelfed/compare/v0.10.8...v0.10.9)

+ 5 - 2
app/Http/Controllers/CommentController.php

@@ -34,9 +34,11 @@ class CommentController extends Controller
         $this->validate($request, [
             'item'    => 'required|integer|min:1',
             'comment' => 'required|string|max:'.(int) config('pixelfed.max_caption_length'),
+            'sensitive' => 'nullable|boolean'
         ]);
         $comment = $request->input('comment');
-        $statusId = $request->item;
+        $statusId = $request->input('item');
+        $nsfw = $request->input('sensitive', false);
 
         $user = Auth::user();
         $profile = $user->profile;
@@ -56,11 +58,12 @@ class CommentController extends Controller
             return;
         }
 
-        $reply = DB::transaction(function() use($comment, $status, $profile) {
+        $reply = DB::transaction(function() use($comment, $status, $profile, $nsfw) {
             $scope = $profile->is_private == true ? 'private' : 'public';
             $autolink = Autolink::create()->autolink($comment);
             $reply = new Status();
             $reply->profile_id = $profile->id;
+            $reply->is_nsfw = $nsfw;
             $reply->caption = e($comment);
             $reply->rendered = $autolink;
             $reply->in_reply_to_id = $status->id;

BIN
public/js/profile.js


BIN
public/js/rempos.js


BIN
public/js/status.js


BIN
public/js/timeline.js


BIN
public/mix-manifest.json


+ 78 - 62
resources/assets/js/components/PostComponent.vue

@@ -3,10 +3,10 @@
   <div v-if="!loaded" style="height: 80vh;" class="d-flex justify-content-center align-items-center">
       <img src="/img/pixelfed-icon-grey.svg" class="">
   </div>
-  <div v-if="loaded && warning" class="bg-white pt-3 border-bottom">
+  <div v-if="loaded && warning" class="bg-white mt-n4 pt-3 border-bottom">
     <div class="container">
       <p class="text-center font-weight-bold">You are blocking this account</p>
-      <p class="text-center font-weight-bold">Click <a href="#" class="cursor-pointer" @click.prevent="warning = false; fetchData()">here</a> to view this status</p>
+      <p class="text-center font-weight-bold"><a href="#" class="btn btn-primary font-weight-bold px-5" @click.prevent="warning = false; fetchData()">View Status</a></p>
     </div>
   </div>
   <div v-if="loaded && warning == false" class="postComponent">
@@ -257,7 +257,7 @@
 
     <div v-if="layout == 'moment'" class="momentui">
       <div class="bg-dark mt-md-n4">
-        <div class="container" v-on:dblclick="likeStatus">
+        <div class="container" style="max-width: 700px;">
               <div class="postPresenterContainer d-none d-flex justify-content-center align-items-center bg-dark">
                 <div v-if="status.pf_type === 'photo'" class="w-100">
                   <photo-presenter :status="status" v-on:lightbox="lightbox"></photo-presenter>
@@ -301,16 +301,24 @@
                   <div class="share-count font-weight-bold mt-2 rounded border" v-if="status.visibility == 'public'" style="cursor:pointer;" v-on:click="sharesModal">{{status.reblogs_count || 0}}</div>
                 </div>
               </div>
-              <!-- <div class="reaction-counts font-weight-bold mb-0">
-                  <span class="like-count">{{status.favourites_count || 0}}</span> likes
-                <span v-if="status.visibility == 'public'" class="float-right" style="cursor:pointer;" v-on:click="sharesModal">
-                  <span class="share-count pl-4">{{status.reblogs_count || 0}}</span> shares
-                </span>
-              </div> -->
-              <div class="media align-items-center mt-3">
+              <div v-if="status.length && status.content_text.includes('#') || status.content_text.includes('https://') || status.content_text.includes('@') || status.content_text.length > 45" class="media align-items-center mt-3">
                 <div class="media-body">
-                  <h2 class="font-weight-bold">
-                    {{status.content.length > 100 ? status.content.slice(0,100) : 'Untitled Post'}}
+                  <p class="lead mr-2" v-html="status.content">
+                  </p>
+                  <p class="lead mb-0">
+                    by <a :href="statusProfileUrl">{{statusUsername}}</a>
+                    <span v-if="relationship && profile && user && !relationship.following && profile.id != user.id">
+                      <span class="px-1 text-lighter">•</span> 
+                      <a class="font-weight-bold small" href="#">Follow</a>
+                    </span>
+                  </p>
+                </div>
+                <a :href="statusProfileUrl" :title="statusUsername"><img :src="statusAvatar" class="rounded-circle border mr-3" alt="avatar" width="72px" height="72px"></a>
+              </div>
+              <div v-else class="media align-items-center mt-3">
+                <div class="media-body">
+                  <h2 class="font-weight-bold mr-2">
+                    {{status.content_text.length ? status.content_text : 'Untitled Post'}}
                   </h2>
                   <p class="lead mb-0">
                     by <a :href="statusProfileUrl">{{statusUsername}}</a>
@@ -318,7 +326,7 @@
                     <a class="font-weight-bold small" href="#">Follow</a> -->
                   </p>
                 </div>
-                <img :src="statusAvatar" class="rounded-circle border mr-3" alt="avatar" width="72px" height="72px">
+                <a :href="statusProfileUrl" :title="statusUsername"><img :src="statusAvatar" class="rounded-circle border mr-3" alt="avatar" width="72px" height="72px"></a>
               </div>
               <hr>
               <div>
@@ -330,8 +338,7 @@
                     <i class="far fa-clock text-lighter mr-3"></i> {{timeAgo(status.created_at)}} ago
                   </span>
                 </p>
-                <!-- <div v-if="status.content.length > 100" class="lead" v-html="status.content"></div> -->
-                <!-- <div class="pt-4">
+                <!-- <div class="">
                   <p class="lead">
                     <span class="mr-3"><i class="fas fa-camera text-lighter"></i></span>
                     <span>Nikon D850</span>
@@ -353,57 +360,64 @@
               </div>
             </div>
             <div class="col-12 col-md-4 pt-4 pl-md-3">
-                <p class="lead font-weight-bold">Comments</p>
-                <div v-if="user && user.length" class="moment-comments">
-                  <div class="form-group">
-                    <textarea class="form-control" rows="3" placeholder="Add a comment ..." v-model="replyText"></textarea>
-                    <p style="padding-top:4px;">
-                      <span class="small text-lighter font-weight-bold">
-                        {{replyText.length}}/{{config.uploader.max_caption_length}}
-                      </span>
-                      <button 
-                      :class="[replyText.length > 1 ? 'btn btn-sm font-weight-bold float-right btn-outline-dark ':'btn btn-sm font-weight-bold float-right btn-outline-lighter']" 
-                      :disabled="replyText.length == 0 ? 'disabled':''" 
-                      @click="postReply"
-                      >Post</button>
-                    </p>
-                  </div>
-                  <hr>
+              <p class="lead font-weight-bold">Comments</p>
+              <div v-if="user != false" class="moment-comments">
+                <div class="form-group">
+                  <textarea class="form-control" rows="3" placeholder="Add a comment ..." v-model="replyText"></textarea>
+                  <p class="d-flex justify-content-between align-items-center mt-3">
+                    <span class="small text-lighter font-weight-bold">
+                      {{replyText.length}}/{{config.uploader.max_caption_length}}
+                    </span>
+                    <span v-if="replyText.length > 2">
+                      <div class="custom-control custom-switch">
+                        <input type="checkbox" class="custom-control-input" @click="!!replySensitive" v-model="replySensitive" id="sensitiveReply">
+                        <label class="custom-control-label small font-weight-bold text-muted" style="padding-top: 3px" for="sensitiveReply">Add Content Warning</label>
+                      </div>
+                    </span>
+                    <button class="btn btn-sm font-weight-bold btn-outline-primary py-1" 
+                    v-if="replyText.length > 2" @click="postReply">Post</button>
+                  </p>
                 </div>
-                <div class="comment mt-3" style="max-height: 500px; overflow-y: auto;">
-                  <div v-for="(reply, index) in results" :key="'tl' + reply.id + '_' + index" class="media mb-3">
-                    <img :src="reply.account.avatar" class="rounded-circle border mr-3" alt="avatar" width="32px" height="32px">
-                    <div class="media-body">
-                      <div class="d-flex justify-content-between">
-                        <span class="font-weight-bold">{{reply.account.username}}</span>
-                        <span class="small">
-                          <a class="text-lighter text-decoration-none" :href="reply.url">{{timeAgo(reply.created_at)}}</a>
+              </div>
+              <div class="comment mt-4" style="max-height: 500px; overflow-y: auto;">
+                <div v-for="(reply, index) in results" :key="'tl' + reply.id + '_' + index" class="media mb-3 mt-2">
+                  <a :href="reply.account.url" :title="reply.account.username"><img :src="reply.account.avatar" class="rounded-circle border mr-3" alt="avatar" width="32px" height="32px"></a>
+                  <div class="media-body">
+                    <div class="d-flex justify-content-between">
+                      <span>
+                        <a class="font-weight-bold text-dark" :href="reply.account.url">{{reply.account.username}}</a>
+                      </span>
+                      <span class="text-lighter">
+                        <span v-if="reply.favourited" class="cursor-pointer mr-2" @click="likeReply(reply)">
+                          <i class="fas fa-heart text-danger"></i>
                         </span>
-                      </div>
-                      <p v-html="reply.content"></p>
+                        <span v-else class="cursor-pointer mr-2" @click="likeReply(reply)">
+                          <i class="far fa-heart"></i>
+                        </span>
+                        <span class="">
+                          <post-menu :status="reply" :profile="user" :size="'sm'" :modal="'true'" class="d-inline-block px-2" v-on:deletePost="deleteComment(reply.id, index)"></post-menu>
+                        </span>
+                      </span>
                     </div>
-                  </div> 
-                  <!-- <div class="media mb-3">
-                    <img :src="statusAvatar" class="rounded-circle border mr-3" alt="avatar" width="32px" height="32px">
-                    <div class="media-body">
-                      <div class="d-flex justify-content-between">
-                        <span class="font-weight-bold">mona</span>
-                        <span class="text-lighter small">2h ago</span>
-                      </div>
-                      <p>Stunning my friend!</p>
+                    <div v-if="reply.sensitive == true">
+                      <span class="py-3">
+                        <span class="text-break">
+                          <span class="font-italic text-muted">This comment may contain sensitive material</span>
+                          <span class="badge badge-primary cursor-pointer ml-2 py-1" @click="reply.sensitive = false;">Show</span>
+                        </span>
+                      </span>
                     </div>
-                  </div>  
-                  <div class="media mb-3">
-                    <img :src="statusAvatar" class="rounded-circle border mr-3" alt="avatar" width="32px" height="32px">
-                    <div class="media-body">
-                      <div class="d-flex justify-content-between">
-                        <span class="font-weight-bold">Andre</span>
-                        <span class="text-lighter small">3h ago</span>
-                      </div>
-                      <p>Wow</p>
+                    <div v-else class="read-more" style="overflow-y: hidden;">
+                      <p v-html="reply.content" class="mb-0">loading ...</p>
                     </div>
-                  </div>   -->
-                </div>
+                    <p>
+                      <span class="small">
+                        <a class="text-lighter text-decoration-none" :href="reply.url">{{timeAgo(reply.created_at)}}</a>
+                      </span>
+                    </p>
+                  </div>
+                </div> 
+              </div>
             </div>
           </div>
         </div>
@@ -617,6 +631,7 @@ export default {
             sharesPage: 1,
             lightboxMedia: false,
             replyText: '',
+            replySensitive: false,
             relationship: {},
             results: [],
             pagination: {},
@@ -916,7 +931,8 @@ export default {
         }
         let data = {
           item: this.replyingToId,
-          comment: this.replyText
+          comment: this.replyText,
+          sensitive: this.replySensitive
         }
         
         this.replyText = '';

+ 4 - 4
resources/assets/js/components/PostMenu.vue

@@ -56,12 +56,12 @@
 								<a class="list-group-item text-dark text-decoration-none" :href="status.url">Go to post</a>
 								<!-- a class="list-group-item font-weight-bold text-decoration-none" :href="status.url">Share</a>
 								<a class="list-group-item font-weight-bold text-decoration-none" :href="status.url">Embed</a> -->
-								<a class="list-group-item text-dark text-decoration-none" href="#" @click="hidePost(status)">Hide</a>
+								<a class="list-group-item text-dark text-decoration-none" href="#" @click.prevent="hidePost(status)">Hide</a>
 								<a v-if="activeSession == true && !statusOwner(status)" class="list-group-item text-dark text-decoration-none" :href="reportUrl(status)">Report</a>
-								<a v-if="activeSession == true && !statusOwner(status)" class="list-group-item text-dark text-decoration-none" v-on:click="muteProfile(status)" href="#">Mute Profile</a>
-								<a v-if="activeSession == true && !statusOwner(status)" class="list-group-item text-dark text-decoration-none" v-on:click="blockProfile(status)" href="#">Block Profile</a>
+								<a v-if="activeSession == true && !statusOwner(status)" class="list-group-item text-dark text-decoration-none" @click.prevent="muteProfile(status)" href="#">Mute Profile</a>
+								<a v-if="activeSession == true && !statusOwner(status)" class="list-group-item text-dark text-decoration-none" @click.prevent="blockProfile(status)" href="#">Block Profile</a>
 								<span v-if="activeSession == true && statusOwner(status) == true || profile.is_admin == true">
-									<a class="list-group-item text-danger text-decoration-none" v-on:click="deletePost">Delete</a>
+									<a class="list-group-item text-danger text-decoration-none" @click.prevent="deletePost">Delete</a>
 								</span>
 								<span v-if="activeSession == true && profile.is_admin == true">
 									<a class="list-group-item text-dark text-decoration-none" v-on:click="moderatePost(status, 'autocw')" href="#">

+ 19 - 0
resources/lang/eo/auth.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'Tiuj ĉi akreditaĵojn ne kongruas kun niajn registraĵojn.',
+    'throttle' => 'Tro saluton provojn. Bonvolu provu refoje post :seconds sekundoj.',
+
+];

+ 11 - 0
resources/lang/eo/exception.php

@@ -0,0 +1,11 @@
+<?php
+
+return [
+
+	'compose' => [
+		'invalid' => [
+			'album' => 'Metu unu foton aŭ videon, aŭ multajn fotojn.',
+		],
+	],
+
+];

+ 26 - 0
resources/lang/eo/helpcenter.php

@@ -0,0 +1,26 @@
+<?php
+
+return [
+
+	'helpcenter' => 'Helpejo',
+	'whatsnew' => 'Kio Novas',
+
+	'gettingStarted' => 'Komenci',
+	'sharingMedia' => 'Kunhavigi Mediojn',
+	'profile' => 'Profilo',
+	'stories' => 'Historioj',
+	'hashtags' => 'Kradvortoj',
+	'discover' => 'Trovi',
+	'directMessages' => 'Rektaj Mesaĝoj',
+	'timelines' => 'Kronologioj',
+	'embed'	=> 'Enkorpigi',
+
+	'communityGuidelines' => 'Konumumaj Gvidiloj',
+	'whatIsTheFediverse' => 'Kio Estas la Fediverso?',
+	'controllingVisibility' => 'Kontroli Videbleco',
+	'blockingAccounts' => 'Bloki Kontoj',
+	'safetyTips' => 'Sekurecaj Konsiletoj',
+	'reportSomething' => 'Informi',
+	'dataPolicy' => 'Datuma Politiko'
+
+];

+ 19 - 0
resources/lang/eo/navmenu.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+	'search'			=> 'Serĉi',
+	'home'				=> 'Hejmo',
+	'local'				=> 'Loka',
+	'network'			=> 'Reta',
+	'discover'			=> 'Trovi',
+	'viewMyProfile'		=> 'Rigardi mia profilo',
+	'myProfile'			=> 'Mia Profilo',
+	'myTimeline'		=> 'Mia Kronologio',
+	'publicTimeline'	=> 'Publica Kronologio',
+	'remoteFollow'		=> 'Sekvi Reta',
+	'settings'			=> 'Agordoj',
+	'admin'				=> 'Administri',
+	'logout'			=> 'Adiaŭi',
+	'directMessages'	=> 'Rektaj Mesaĝoj',
+	'composePost'		=> 'Afiŝi',
+];

+ 12 - 0
resources/lang/eo/notification.php

@@ -0,0 +1,12 @@
+<?php
+
+return [
+
+  'likedPhoto'          => 'ŝatis vian afiŝon.',
+  'likedComment'        => 'ŝatis vian komenton.',
+  'startedFollowingYou' => 'eksetvis vin.',
+  'commented'           => 'komentis vian afiŝon.',
+  'mentionedYou'        => 'menciis vin.',
+  'shared'				=> 'kunhavigis vian afiŝon.',
+
+];

+ 19 - 0
resources/lang/eo/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'previous' => '« Antaŭa',
+    'next' => 'Sekva »',
+
+];

+ 22 - 0
resources/lang/eo/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'password' => 'Pasvortoj devas havi minimume ses signojn kaj kongrui kun la konfirmo.',
+    'reset'    => 'Via pasvorto restarigis!',
+    'sent'     => 'Se via retadreso ekzistas en nia datumbazo, tiam vi ricevos pasvort-reakiran ligilon en via retadreso post nelonge. Bonvolu, kontrolu vian spamujon se vi ne ricevis.',
+    'token'    => 'Ĉi tiu pasvort-reakiran ligilon ne validas.',
+    'user'     => 'Se via retadreso ekzistas en nia datumbazo, tiam vi ricevos pasvort-reakiran ligilon en via retadreso post nelonge. Bonvolu, kontrolu vian spamujon se vi ne ricevis.',
+
+];

+ 15 - 0
resources/lang/eo/profile.php

@@ -0,0 +1,15 @@
+<?php
+
+return [
+  'emptyTimeline'         => 'Ĉi tiu uzanto ankoraŭ ne havas afiŝojn!',
+  'emptyFollowers'        => 'Ĉi tiu uzanto ankoraŭ ne havas sekvantojn!',
+  'emptyFollowing'        => 'Ĉi tiu uzanto ankoraŭ ne sekvas iu!',
+  'emptySaved'            => 'Vi ankoraŭ ne konservis neniujn afiŝojn!',
+  'savedWarning'          => 'Sola vi permisas vidi kion vi konservis',
+  'privateProfileWarning' => 'Ĉi tiu konto estas privata',
+  'alreadyFollow'         => 'Vi jam sekvas :username?',
+  'loginToSeeProfile'     => 'vidi lian fotojn kaj videojn.',
+
+  'status.disabled.header' 	  => 'Profilo Maldisponebla',
+  'status.disabled.body'	  => 'Mi bedaŭras, ĉi tiu profilo momente estas maldisponebla. Bonvolu, momente provu denove.',
+];

+ 20 - 0
resources/lang/eo/site.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    'about'             => 'Pri',
+    'help'              => 'Helpejo',
+    'language'          => 'Lingvo',
+    'fediverse'         => 'Fediverso',
+    'opensource'        => 'Libera Programaro',
+    'terms'             => 'Kondiĉoj',
+    'privacy'           => 'Privateco',
+    'l10nWip'           => 'Ni daŭre laboras pri lokaliza subteno',
+    'currentLocale'     => 'Kuranta lokoĵaro',
+    'selectLocale'      => 'Elektu unu de la subtenataj lingvoj',
+    'contact'           => 'Kontakti',
+    'contact-us'        => 'Kontactu nin',
+    'places'            => 'Lokoj',
+    'profiles'          => 'Profiloj',
+
+];

+ 7 - 0
resources/lang/eo/timeline.php

@@ -0,0 +1,7 @@
+<?php
+
+return [
+
+  'emptyPersonalTimeline' => 'Via kronologio estas malplena.',
+
+];

+ 122 - 0
resources/lang/eo/validation.php

@@ -0,0 +1,122 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted'             => 'La :attribute devas esti akceptita.',
+    'active_url'           => 'La :attribute ne estas valida URL.',
+    'after'                => 'La :attribute devas esti dato post :date.',
+    'after_or_equal'       => 'La :attribute devas esti dato post aŭ la sama kiel :date.',
+    'alpha'                => 'La :attribute devas enhavi nur literoj.',
+    'alpha_dash'           => 'La :attribute devas enhavi nur literoj, ciferoj, kaj streketoj.',
+    'alpha_num'            => 'La :attribute devas enhavi nur literoj kaj ciferoj.',
+    'array'                => 'La :attribute devas esti tabelo.',
+    'before'               => 'La :attribute devas esti dato antaŭ :date.',
+    'before_or_equal'      => 'La :attribute devas esti dato antaŭ aŭ la sama kiel :date.',
+    'between'              => [
+        'numeric' => 'La :attribute devas esti inter :min kaj :max.',
+        'file'    => 'La :attribute devas esti inter :min kaj :max kilobajtoj.',
+        'string'  => 'La :attribute devas esti inter :min kaj :max signoj.',
+        'array'   => 'La :attribute devas havi inter :min kaj :max eroj.',
+    ],
+    'boolean'              => 'La :attribute kampo devas esti vera aŭ malvera.',
+    'confirmed'            => 'La :attribute konfirmo ne kongruas.',
+    'date'                 => 'La :attribute ne estas validan daton.',
+    'date_format'          => 'La :attribute ne kongruas la strukturon :format.',
+    'different'            => 'La :attribute kaj :other devas esti malsama.',
+    'digits'               => 'La :attribute devas esti :digits ciferoj.',
+    'digits_between'       => 'La :attribute devas esti inter :min kaj :max ciferoj.',
+    'dimensions'           => 'La :attribute havas malvalidan bildan dimensiojn.',
+    'distinct'             => 'La :attribute kampo havas duoblan valoron.',
+    'email'                => 'La :attribute devas esti valida retadreso.',
+    'exists'               => 'La elektita :attribute estas malvalida.',
+    'file'                 => 'La :attribute devas esti dosiejro.',
+    'filled'               => 'La :attribute kampo devas havi valoro.',
+    'image'                => 'La :attribute devas esti bildo.',
+    'in'                   => 'La elektita :attribute estas malvalida.',
+    'in_array'             => 'La :attribute kampo ne ekzistas en :other.',
+    'integer'              => 'La :attribute devas esti entjero.',
+    'ip'                   => 'La :attribute devas esti valida IP-adreso.',
+    'ipv4'                 => 'La :attribute devas esti valida IPv4-adreso.',
+    'ipv6'                 => 'La :attribute devas esti valida IPv6-adreso.',
+    'json'                 => 'La :attribute devas esti valida JSON-signoĉeno.',
+    'max'                  => [
+        'numeric' => 'La :attribute ne devas esti pri granda ol :max.',
+        'file'    => 'La :attribute ne devas esti pri granda ol :max kilobajtoj.',
+        'string'  => 'La :attribute ne devas esti pri granda ol :max signoj.',
+        'array'   => 'La :attribute ne devas havi pli ol :max eroj.',
+    ],
+    'mimes'                => 'La :attribute devas esti dosiejro de tipo: :values.',
+    'mimetypes'            => 'La :attribute devas esti dosierjo de tipo: :values.',
+    'min'                  => [
+        'numeric' => 'La :attribute devas esti minimume :min.',
+        'file'    => 'La :attribute devas esti minimume :min kilobajtoj.',
+        'string'  => 'La :attribute devas esti minimume :min signoj.',
+        'array'   => 'La :attribute devas havi minimume :min eroj.',
+    ],
+    'not_in'               => 'La elektita :attribute estas malvalida.',
+    'not_regex'            => 'La :attribute strukturo estas malvalida.',
+    'numeric'              => 'La :attribute devas esti ciferoj.',
+    'present'              => 'La :attribute kampo devas ĉeesti.',
+    'regex'                => 'La :attribute strukturo estas malvalida.',
+    'required'             => 'La :attribute kampo estas bezonata.',
+    'required_if'          => 'La :attribute kampo estas bezonata kiam :other estas :value.',
+    'required_unless'      => 'La :attribute kampo estas bezonata krom se :other estas en :values.',
+    'required_with'        => 'La :attribute kampo estas bezonata kiam :values ĉeestas.',
+    'required_with_all'    => 'La :attribute kampo estas bezonata kiam :values ĉeestas.',
+    'required_without'     => 'La :attribute kampo estas bezonata kiam :values ne ĉeestas.',
+    'required_without_all' => 'La :attribute kampo estas bezonata kiam neniu el :values ĉeestas.',
+    'same'                 => 'La :attribute kaj :other devas kongrui.',
+    'size'                 => [
+        'numeric' => 'La :attribute devas esti :size.',
+        'file'    => 'La :attribute devas esti :size kilobajtoj.',
+        'string'  => 'La :attribute devas esti :size signoj.',
+        'array'   => 'La :attribute devas havi :size eroj.',
+    ],
+    'string'               => 'La :attribute devas esti signoĉeno.',
+    'timezone'             => 'La :attribute devas esti valida zono.',
+    'unique'               => 'La :attribute jam estis prenita.',
+    'uploaded'             => 'La :attribute ne povis alŝuti.',
+    'url'                  => 'La :attribute strukturo estas malvalida.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'custom-message',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap attribute place-holders
+    | with something more reader friendly such as E-Mail Address instead
+    | of "email". This simply helps us make messages a little cleaner.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 5 - 5
resources/lang/fr/exception.php

@@ -1,10 +1,10 @@
 <?php
 
 return [
-	'compose' => [
-		'invalid' => [
-			'album' => 'Doit contenir une seule photo ou vidéo ou plusieurs photos.',
-		],
-	],
+    'compose' => [
+        'invalid' => [
+            'album' => 'Doit contenir une seule photo ou vidéo ou plusieurs photos.',
+        ],
+    ],
 
 ];

+ 18 - 18
resources/lang/fr/helpcenter.php

@@ -1,24 +1,24 @@
 <?php
 
 return [
-	'helpcenter'               =>    'Centre d\'aide',
-	'whatsnew'                 =>    'Ce qui est nouveau',
+    'helpcenter'               =>    'Centre d\'aide',
+    'whatsnew'                 =>    'Ce qui est nouveau',
 
-	'gettingStarted'           =>    'Débuter',
-	'sharingMedia'             =>    'Partager du contenu',
-	'profile'                  =>    'Profil',
-	'stories'                  =>    'Stories',
-	'hashtags'                 =>    'Hashtags',
-	'discover'                 =>    'Découvrir',
-	'directMessages'           =>    'Messages Directs',
-	'timelines'                =>    'Chronologies',
-	'embed'	                   =>    'Intégrer',
+    'gettingStarted'           =>    'Débuter',
+    'sharingMedia'             =>    'Partager du contenu',
+    'profile'                  =>    'Profil',
+    'stories'                  =>    'Stories',
+    'hashtags'                 =>    'Hashtags',
+    'discover'                 =>    'Découvrir',
+    'directMessages'           =>    'Messages Directs',
+    'timelines'                =>    'Chronologies',
+    'embed'                    =>    'Intégrer',
 
-	'communityGuidelines'      =>    'Règlement de la communauté',
-	'whatIsTheFediverse'       =>    'Qu\'est-ce que le fediverse ?',
-	'controllingVisibility'    =>    'Contrôler la visibilité',
-	'blockingAccounts'         =>    'Blocage des comptes',
-	'safetyTips'               =>    'Conseils de sécurité',
-	'reportSomething'          =>    'Signaler quelque chose',
-	'dataPolicy'               =>    'Politique en matière de données'
+    'communityGuidelines'      =>    'Règlement de la communauté',
+    'whatIsTheFediverse'       =>    'Qu\'est-ce que le fediverse ?',
+    'controllingVisibility'    =>    'Contrôler la visibilité',
+    'blockingAccounts'         =>    'Blocage des comptes',
+    'safetyTips'               =>    'Conseils de sécurité',
+    'reportSomething'          =>    'Signaler quelque chose',
+    'dataPolicy'               =>    'Politique en matière de données'
 ];

+ 6 - 6
resources/lang/fr/navmenu.php

@@ -1,11 +1,11 @@
 <?php
 
 return [
-	'search'			=>    'Rechercher',
-	'home'				=>    'Accueil',
-	'local'				=>    'Local',
-	'network'			=>    'Réseau',
-	'discover'			=>    'Découvrir',
+    'search'            =>    'Rechercher',
+    'home'              =>    'Accueil',
+    'local'             =>    'Local',
+    'network'           =>    'Réseau',
+    'discover'          =>    'Découvrir',
     'viewMyProfile'     =>    'Voir mon profil',
     'myTimeline'        =>    'Ma Chronologie',
     'publicTimeline'    =>    'Chronologie Publique',
@@ -13,6 +13,6 @@ return [
     'settings'          =>    'Paramètres',
     'admin'             =>    'Admin',
     'logout'            =>    'Se déconnecter',
-	'directMessages'    =>    'Messages Directs',
+    'directMessages'    =>    'Messages Directs',
     'composePost'       =>    'Composer une publication',
 ];

+ 1 - 1
resources/lang/fr/notification.php

@@ -6,5 +6,5 @@ return [
     'startedFollowingYou'    =>    'a commencé à vous suivre.',
     'commented'              =>    'a commenté votre publication.',
     'mentionedYou'           =>    'vous a mentionné.',
-    'shared'			     =>    'a partagé votre publication.',
+    'shared'                 =>    'a partagé votre publication.',
 ];

+ 1 - 1
resources/lang/fr/profile.php

@@ -11,5 +11,5 @@ return [
     'loginToSeeProfile'         =>    'pour pouvoir consulter leurs photos et vidéos.',
 
     'status.disabled.header'    =>    'Profil indisponible',
-    'status.disabled.body'	    =>    'Désolé, ce profil n’est pas disponible pour le moment. Veuillez réessayer plus tard.',
+    'status.disabled.body'      =>    'Désolé, ce profil n’est pas disponible pour le moment. Veuillez réessayer plus tard.',
 ];

+ 12 - 12
resources/lang/fr/site.php

@@ -1,16 +1,16 @@
 <?php
 
 return [
-	'about'			   =>    'À propos',
-	'help'			   =>    'Aide',
-	'language'		   =>    'Langue',
-	'fediverse'		   =>    'Fediverse',
-	'opensource'	   =>    'Open Source',
-	'terms'            =>    'Conditions',
-	'privacy'		   =>    'Vie privée',
-	'l10nWip'		   =>    'Nous travaillons toujours sur la prise en charge des langues',
-	'currentLocale'    =>    'Langue actuelle',
-	'selectLocale'     =>    'Sélectionnez l\'une des langues prises en charge',
-	'contact'		   =>    'Contact',
-	'contact-us'	   =>    'Nous contacter',
+    'about'            =>    'À propos',
+    'help'             =>    'Aide',
+    'language'         =>    'Langue',
+    'fediverse'        =>    'Fediverse',
+    'opensource'       =>    'Open Source',
+    'terms'            =>    'Conditions',
+    'privacy'          =>    'Vie privée',
+    'l10nWip'          =>    'Nous travaillons toujours sur la prise en charge des langues',
+    'currentLocale'    =>    'Langue actuelle',
+    'selectLocale'     =>    'Sélectionnez l\'une des langues prises en charge',
+    'contact'          =>    'Contact',
+    'contact-us'       =>    'Nous contacter',
 ];

+ 0 - 1
resources/lang/fr/validation.php

@@ -114,4 +114,3 @@ return [
     */
     'attributes' => [],
 ];
-