Merge pull request #2719 from pixelfed/staging

Add Network Timeline
pull/2723/head
daniel 4 years ago committed by GitHub
commit d87eb0bfb8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -4,6 +4,7 @@
### Added ### Added
- Autocomplete Support (hashtags + mentions) ([de514f7d](https://github.com/pixelfed/pixelfed/commit/de514f7d)) - Autocomplete Support (hashtags + mentions) ([de514f7d](https://github.com/pixelfed/pixelfed/commit/de514f7d))
- Creative Commons Licenses ([552e950](https://github.com/pixelfed/pixelfed/commit/552e950)) - Creative Commons Licenses ([552e950](https://github.com/pixelfed/pixelfed/commit/552e950))
- Add Network Timeline ([af7face4](https://github.com/pixelfed/pixelfed/commit/af7face4))
### Updated ### Updated
- Updated AdminController, fix variable name in updateSpam method. ([6edaf940](https://github.com/pixelfed/pixelfed/commit/6edaf940)) - Updated AdminController, fix variable name in updateSpam method. ([6edaf940](https://github.com/pixelfed/pixelfed/commit/6edaf940))

@ -247,7 +247,7 @@ class AccountController extends Controller
switch ($type) { switch ($type) {
case 'user': case 'user':
$profile = Profile::findOrFail($item); $profile = Profile::findOrFail($item);
if ($profile->id == $user->id || $profile->user->is_admin == true) { if ($profile->id == $user->id || ($profile->user && $profile->user->is_admin == true)) {
return abort(403); return abort(403);
} }
$class = get_class($profile); $class = get_class($profile);

@ -351,7 +351,6 @@ class PublicApiController extends Controller
$fractal = new Fractal\Resource\Collection($timeline, new StatusTransformer()); $fractal = new Fractal\Resource\Collection($timeline, new StatusTransformer());
$res = $this->fractal->createData($fractal)->toArray(); $res = $this->fractal->createData($fractal)->toArray();
return response()->json($res); return response()->json($res);
} }
public function homeTimelineApi(Request $request) public function homeTimelineApi(Request $request)
@ -470,12 +469,96 @@ class PublicApiController extends Controller
$fractal = new Fractal\Resource\Collection($timeline, new StatusTransformer()); $fractal = new Fractal\Resource\Collection($timeline, new StatusTransformer());
$res = $this->fractal->createData($fractal)->toArray(); $res = $this->fractal->createData($fractal)->toArray();
return response()->json($res); return response()->json($res);
} }
public function networkTimelineApi(Request $request) public function networkTimelineApi(Request $request)
{ {
return response()->json([]); abort_if(!Auth::check(), 403);
abort_if(config('federation.network_timeline') == false, 404);
$this->validate($request,[
'page' => 'nullable|integer|max:40',
'min_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX,
'max_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX,
'limit' => 'nullable|integer|max:30'
]);
$page = $request->input('page');
$min = $request->input('min_id');
$max = $request->input('max_id');
$limit = $request->input('limit') ?? 3;
$user = $request->user();
$key = 'user:last_active_at:id:'.$user->id;
$ttl = now()->addMinutes(5);
Cache::remember($key, $ttl, function() use($user) {
$user->last_active_at = now();
$user->save();
return;
});
if($min || $max) {
$dir = $min ? '>' : '<';
$id = $min ?? $max;
$timeline = Status::select(
'id',
'uri',
'caption',
'rendered',
'profile_id',
'type',
'in_reply_to_id',
'reblog_of_id',
'is_nsfw',
'scope',
'local',
'reply_count',
'comments_disabled',
'place_id',
'likes_count',
'reblogs_count',
'created_at',
'updated_at'
)->where('id', $dir, $id)
->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
->whereNotNull('uri')
->whereScope('public')
// ->where('created_at', '>', now()->subMonths(3))
->orderBy('created_at', 'desc')
->limit($limit)
->get();
} else {
$timeline = Status::select(
'id',
'uri',
'caption',
'rendered',
'profile_id',
'type',
'in_reply_to_id',
'reblog_of_id',
'is_nsfw',
'scope',
'local',
'reply_count',
'comments_disabled',
'created_at',
'place_id',
'likes_count',
'reblogs_count',
'updated_at'
)->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
->with('profile', 'hashtags', 'mentions')
->whereNotNull('uri')
->whereScope('public')
->where('created_at', '>', now()->subMonths(3))
->orderBy('created_at', 'desc')
->simplePaginate($limit);
}
$fractal = new Fractal\Resource\Collection($timeline, new StatusTransformer());
$res = $this->fractal->createData($fractal)->toArray();
return response()->json($res);
} }
public function relationships(Request $request) public function relationships(Request $request)

@ -2,12 +2,6 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Auth, Cache;
use App\Follower;
use App\Profile;
use App\Status;
use App\User;
use App\UserFilter;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class TimelineController extends Controller class TimelineController extends Controller
@ -29,6 +23,7 @@ class TimelineController extends Controller
public function network(Request $request) public function network(Request $request)
{ {
abort_if(config('federation.network_timeline') == false, 404);
$this->validate($request, [ $this->validate($request, [
'layout' => 'nullable|string|in:grid,feed' 'layout' => 'nullable|string|in:grid,feed'
]); ]);

@ -10,7 +10,6 @@ return [
| ActivityPub configuration | ActivityPub configuration
| |
*/ */
'activitypub' => [ 'activitypub' => [
'enabled' => env('ACTIVITY_PUB', false), 'enabled' => env('ACTIVITY_PUB', false),
'outbox' => env('AP_OUTBOX', true), 'outbox' => env('AP_OUTBOX', true),
@ -41,4 +40,6 @@ return [
'enabled' => env('WEBFINGER', true) 'enabled' => env('WEBFINGER', true)
], ],
'network_timeline' => env('PF_NETWORK_TIMELINE', false)
]; ];

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{19:function(t,e,s){t.exports=s("ETg6")},"7wkd":function(t,e,s){"use strict";s.r(e);var o={data:function(){return{loaded:!1,showLoadMore:!0,profiles:[],page:1}},beforeMount:function(){this.fetchData()},methods:{fetchData:function(){var t=this;axios.get("/api/pixelfed/v2/discover/profiles",{params:{page:this.page}}).then((function(e){if(0==e.data.length)return t.showLoadMore=!1,void(t.loaded=!0);t.profiles=e.data,t.showLoadMore=8==t.profiles.length,t.loaded=!0}))},prettyCount:function(t){return App.util.format.count(t)},loadMore:function(){this.loaded=!1,this.page++,this.fetchData()},thumbUrl:function(t){return t.media_attachments[0].url}}},a=s("KHd+"),n=Object(a.a)(o,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[s("div",{staticClass:"col-12"},[s("p",{staticClass:"font-weight-bold text-lighter text-uppercase"},[t._v("Profiles Directory")]),t._v(" "),t.loaded?s("div",{},[s("div",{staticClass:"row"},[t._l(t.profiles,(function(e,o){return s("div",{staticClass:"col-12 col-md-6 p-1"},[s("div",{staticClass:"card card-body border shadow-none py-2"},[s("div",{staticClass:"media"},[s("a",{attrs:{href:e.url}},[s("img",{staticClass:"rounded-circle border mr-3",attrs:{src:e.avatar,alt:"...",width:"40px",height:"40px"}})]),t._v(" "),s("div",{staticClass:"media-body"},[s("p",{staticClass:"mt-0 mb-0 font-weight-bold"},[s("a",{staticClass:"text-dark",attrs:{href:e.url}},[t._v(t._s(e.username))])]),t._v(" "),s("p",{staticClass:"mb-1 small text-lighter d-flex justify-content-between font-weight-bold"},[s("span",[s("span",[t._v(t._s(t.prettyCount(e.statuses_count)))]),t._v(" POSTS\n\t\t\t\t\t\t\t\t\t")]),t._v(" "),s("span",[s("span",[t._v(t._s(t.prettyCount(e.followers_count)))]),t._v(" FOLLOWERS\n\t\t\t\t\t\t\t\t\t")])]),t._v(" "),s("p",{staticClass:"mb-1"},t._l(e.posts,(function(e,o){return s("span",{key:"profile_posts_"+o,staticClass:"shadow-sm"},[s("a",{staticClass:"text-decoration-none mr-1",attrs:{href:e.url}},[s("img",{staticClass:"border rounded",attrs:{src:t.thumbUrl(e),width:"62.3px",height:"62.3px"}})])])})),0)])])])])})),t._v(" "),t.showLoadMore?s("div",{staticClass:"col-12"},[s("p",{staticClass:"text-center mb-0 pt-3"},[s("button",{staticClass:"btn btn-outline-secondary btn-sm px-4 py-1 font-weight-bold",on:{click:function(e){return t.loadMore()}}},[t._v("Load More")])])]):t._e()],2)]):s("div",[t._m(0)])])])}),[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 d-flex justify-content-center align-items-center"},[e("div",{staticClass:"spinner-border",attrs:{role:"status"}},[e("span",{staticClass:"sr-only"},[this._v("Loading...")])])])])}],!1,null,"7b3eea1c",null);e.default=n.exports},ETg6:function(t,e,s){Vue.component("profile-directory",s("7wkd").default)},"KHd+":function(t,e,s){"use strict";function o(t,e,s,o,a,n,r,i){var c,d="function"==typeof t?t.options:t;if(e&&(d.render=e,d.staticRenderFns=s,d._compiled=!0),o&&(d.functional=!0),n&&(d._scopeId="data-v-"+n),r?(c=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),a&&a.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(r)},d._ssrRegister=c):a&&(c=i?function(){a.call(this,(d.functional?this.parent:this).$root.$options.shadowRoot)}:a),c)if(d.functional){d._injectStyles=c;var l=d.render;d.render=function(t,e){return c.call(e),l(t,e)}}else{var u=d.beforeCreate;d.beforeCreate=u?[].concat(u,c):[c]}return{exports:t,options:d}}s.d(e,"a",(function(){return o}))}},[[19,0]]]); (window.webpackJsonp=window.webpackJsonp||[]).push([[18],{19:function(t,e,s){t.exports=s("ETg6")},"7wkd":function(t,e,s){"use strict";s.r(e);var o={data:function(){return{loaded:!1,showLoadMore:!0,profiles:[],page:1}},beforeMount:function(){this.fetchData()},methods:{fetchData:function(){var t=this;axios.get("/api/pixelfed/v2/discover/profiles",{params:{page:this.page}}).then((function(e){if(0==e.data.length)return t.showLoadMore=!1,void(t.loaded=!0);t.profiles=e.data,t.showLoadMore=8==t.profiles.length,t.loaded=!0}))},prettyCount:function(t){return App.util.format.count(t)},loadMore:function(){this.loaded=!1,this.page++,this.fetchData()},thumbUrl:function(t){return t.media_attachments[0].url}}},a=s("KHd+"),n=Object(a.a)(o,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[s("div",{staticClass:"col-12"},[s("p",{staticClass:"font-weight-bold text-lighter text-uppercase"},[t._v("Profiles Directory")]),t._v(" "),t.loaded?s("div",{},[s("div",{staticClass:"row"},[t._l(t.profiles,(function(e,o){return s("div",{staticClass:"col-12 col-md-6 p-1"},[s("div",{staticClass:"card card-body border shadow-none py-2"},[s("div",{staticClass:"media"},[s("a",{attrs:{href:e.url}},[s("img",{staticClass:"rounded-circle border mr-3",attrs:{src:e.avatar,alt:"...",width:"40px",height:"40px"}})]),t._v(" "),s("div",{staticClass:"media-body"},[s("p",{staticClass:"mt-0 mb-0 font-weight-bold"},[s("a",{staticClass:"text-dark",attrs:{href:e.url}},[t._v(t._s(e.username))])]),t._v(" "),s("p",{staticClass:"mb-1 small text-lighter d-flex justify-content-between font-weight-bold"},[s("span",[s("span",[t._v(t._s(t.prettyCount(e.statuses_count)))]),t._v(" POSTS\n\t\t\t\t\t\t\t\t\t")]),t._v(" "),s("span",[s("span",[t._v(t._s(t.prettyCount(e.followers_count)))]),t._v(" FOLLOWERS\n\t\t\t\t\t\t\t\t\t")])]),t._v(" "),s("p",{staticClass:"mb-1"},t._l(e.posts,(function(e,o){return s("span",{key:"profile_posts_"+o,staticClass:"shadow-sm"},[s("a",{staticClass:"text-decoration-none mr-1",attrs:{href:e.url}},[s("img",{staticClass:"border rounded",attrs:{src:t.thumbUrl(e),width:"62.3px",height:"62.3px"}})])])})),0)])])])])})),t._v(" "),t.showLoadMore?s("div",{staticClass:"col-12"},[s("p",{staticClass:"text-center mb-0 pt-3"},[s("button",{staticClass:"btn btn-outline-secondary btn-sm px-4 py-1 font-weight-bold",on:{click:function(e){return t.loadMore()}}},[t._v("Load More")])])]):t._e()],2)]):s("div",[t._m(0)])])])}),[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 d-flex justify-content-center align-items-center"},[e("div",{staticClass:"spinner-border",attrs:{role:"status"}},[e("span",{staticClass:"sr-only"},[this._v("Loading...")])])])])}],!1,null,"7b3eea1c",null);e.default=n.exports},ETg6:function(t,e,s){Vue.component("profile-directory",s("7wkd").default)},"KHd+":function(t,e,s){"use strict";function o(t,e,s,o,a,n,r,i){var c,d="function"==typeof t?t.options:t;if(e&&(d.render=e,d.staticRenderFns=s,d._compiled=!0),o&&(d.functional=!0),n&&(d._scopeId="data-v-"+n),r?(c=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),a&&a.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(r)},d._ssrRegister=c):a&&(c=i?function(){a.call(this,(d.functional?this.parent:this).$root.$options.shadowRoot)}:a),c)if(d.functional){d._injectStyles=c;var l=d.render;d.render=function(t,e){return c.call(e),l(t,e)}}else{var u=d.beforeCreate;d.beforeCreate=u?[].concat(u,c):[c]}return{exports:t,options:d}}s.d(e,"a",(function(){return o}))}},[[19,0]]]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{15:function(e,a,o){e.exports=o("YMO/")},"YMO/":function(e,a,o){(function(e){function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],(function(e,a,o){a.isDark=!0,a.cssClass="ace-monokai",a.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}",e("../lib/dom").importCssString(a.cssText,a.cssClass)})),ace.require(["ace/theme/monokai"],(function(c){"object"==o(e)&&"object"==o(a)&&e&&(e.exports=c)}))}).call(this,o("YuTi")(e))},YuTi:function(e,a){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}}},[[15,0]]]); (window.webpackJsonp=window.webpackJsonp||[]).push([[25],{15:function(e,a,o){e.exports=o("YMO/")},"YMO/":function(e,a,o){(function(e){function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],(function(e,a,o){a.isDark=!0,a.cssClass="ace-monokai",a.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}",e("../lib/dom").importCssString(a.cssText,a.cssClass)})),ace.require(["ace/theme/monokai"],(function(c){"object"==o(e)&&"object"==o(a)&&e&&(e.exports=c)}))}).call(this,o("YuTi")(e))},YuTi:function(e,a){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}}},[[15,0]]]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,6 +1,6 @@
{ {
"/js/manifest.js": "/js/manifest.js?id=7db827d654313dce4250", "/js/manifest.js": "/js/manifest.js?id=7db827d654313dce4250",
"/js/vendor.js": "/js/vendor.js?id=d93ff5de66e63c8bb611", "/js/vendor.js": "/js/vendor.js?id=1b5b575aa98fd0fc24cf",
"/js/ace.js": "/js/ace.js?id=11e5550a450fece75c33", "/js/ace.js": "/js/ace.js?id=11e5550a450fece75c33",
"/js/activity.js": "/js/activity.js?id=64252d7f9c17e958b8d2", "/js/activity.js": "/js/activity.js?id=64252d7f9c17e958b8d2",
"/js/app.js": "/js/app.js?id=fdbdd51482b98e1324e8", "/js/app.js": "/js/app.js?id=fdbdd51482b98e1324e8",
@ -18,17 +18,16 @@
"/js/discover.js": "/js/discover.js?id=b954935be21c33a6bafa", "/js/discover.js": "/js/discover.js?id=b954935be21c33a6bafa",
"/js/hashtag.js": "/js/hashtag.js?id=2238ded8e17551cea303", "/js/hashtag.js": "/js/hashtag.js?id=2238ded8e17551cea303",
"/js/loops.js": "/js/loops.js?id=4ae79e81965c4fd1ae66", "/js/loops.js": "/js/loops.js?id=4ae79e81965c4fd1ae66",
"/js/memoryprofile.js": "/js/memoryprofile.js?id=1dbacb8b611b63cc22f2", "/js/mode-dot.js": "/js/mode-dot.js?id=d54ad862baf30ee756f8",
"/js/mode-dot.js": "/js/mode-dot.js?id=dd9c87024fbaa8e75ac4", "/js/network-timeline.js": "/js/network-timeline.js?id=82884f73719c6b3abd80",
"/js/my2020.js": "/js/my2020.js?id=4a9d534053da8e6467c0", "/js/profile.js": "/js/profile.js?id=f0e108062a688a576b64",
"/js/profile.js": "/js/profile.js?id=f3469b5168a03a23c26d", "/js/profile-directory.js": "/js/profile-directory.js?id=886f17ad7ab4b2e08019",
"/js/profile-directory.js": "/js/profile-directory.js?id=e63d5f2c6f2d5710a8bd", "/js/quill.js": "/js/quill.js?id=866b31b9b9540305751d",
"/js/quill.js": "/js/quill.js?id=4769f11fc9a6c32dde50", "/js/rempos.js": "/js/rempos.js?id=4f815ad22faac9af33ac",
"/js/rempos.js": "/js/rempos.js?id=52fbe94346b945e11d37", "/js/rempro.js": "/js/rempro.js?id=0497d022decb1f1a4ac6",
"/js/rempro.js": "/js/rempro.js?id=6cca99808897aaf5acf5", "/js/search.js": "/js/search.js?id=f5f6a6ee32db30d29c2d",
"/js/search.js": "/js/search.js?id=f4319adfd5750db3be3f", "/js/status.js": "/js/status.js?id=fe385b6698a7a6638964",
"/js/status.js": "/js/status.js?id=311b2e82ad99e438673c", "/js/story-compose.js": "/js/story-compose.js?id=5e184aae1ae4cde04361",
"/js/story-compose.js": "/js/story-compose.js?id=99dc1cd352d71e41843d", "/js/theme-monokai.js": "/js/theme-monokai.js?id=8842103833ba4861bcfa",
"/js/theme-monokai.js": "/js/theme-monokai.js?id=85f0af57479412548223", "/js/timeline.js": "/js/timeline.js?id=a163af153c2c1cae34b7"
"/js/timeline.js": "/js/timeline.js?id=e9b136c9c89d1be0a80b"
} }

File diff suppressed because it is too large Load Diff

@ -0,0 +1,49 @@
Vue.component(
'notification-card',
require('./components/NotificationCard.vue').default
);
Vue.component(
'photo-presenter',
require('./components/presenter/PhotoPresenter.vue').default
);
Vue.component(
'video-presenter',
require('./components/presenter/VideoPresenter.vue').default
);
Vue.component(
'photo-album-presenter',
require('./components/presenter/PhotoAlbumPresenter.vue').default
);
Vue.component(
'video-album-presenter',
require('./components/presenter/VideoAlbumPresenter.vue').default
);
Vue.component(
'mixed-album-presenter',
require('./components/presenter/MixedAlbumPresenter.vue').default
);
Vue.component(
'post-menu',
require('./components/PostMenu.vue').default
);
Vue.component(
'network-timeline',
require('./components/NetworkTimeline.vue').default
);
Vue.component(
'announcements-card',
require('./components/AnnouncementsCard.vue').default
);
Vue.component(
'story-component',
require('./components/StoryTimelineComponent.vue').default
);

@ -64,14 +64,30 @@
</a> </a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown"> <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item font-weight-bold" href="{{route('discover')}}"> @if(config('federation.network_timeline'))
<span class="far fa-compass pr-2 text-lighter"></span> <a class="dropdown-item font-weight-bold" href="{{route('timeline.public')}}">
{{__('navmenu.discover')}} <span class="fas fa-stream pr-2 text-lighter"></span>
Public
</a>
<a class="dropdown-item font-weight-bold" href="{{route('timeline.network')}}">
<span class="fas fa-globe pr-2 text-lighter"></span>
Network
</a>
@else
<a class="dropdown-item font-weight-bold" href="/">
<span class="fas fa-home pr-2 text-lighter"></span>
Home
</a> </a>
<a class="dropdown-item font-weight-bold" href="{{route('timeline.public')}}"> <a class="dropdown-item font-weight-bold" href="{{route('timeline.public')}}">
<span class="fas fa-stream pr-2 text-lighter"></span> <span class="fas fa-stream pr-2 text-lighter"></span>
Public Public
</a> </a>
@endif
<div class="dropdown-divider"></div>
<a class="dropdown-item font-weight-bold" href="{{route('discover')}}">
<span class="far fa-compass pr-2 text-lighter"></span>
{{__('navmenu.discover')}}
</a>
<a class="dropdown-item font-weight-bold" href="/i/stories/new"> <a class="dropdown-item font-weight-bold" href="/i/stories/new">
<span class="fas fa-history text-lighter pr-2"></span> <span class="fas fa-history text-lighter pr-2"></span>
Stories Stories

@ -7,31 +7,31 @@
</div> </div>
<hr> <hr>
<p class="lead">Timelines are chronological feeds of posts.</p> <p class="lead">Timelines are chronological feeds of posts.</p>
<p class="font-weight-bold h5 py-3">Pixelfed has 2 different timelines:</p> {{-- <p class="font-weight-bold h5 py-3">Pixelfed has 3 different timelines:</p> --}}
<ul> <ul class="list-unstyled">
<li class="lead"> <li class="lead mb-2">
<span class="font-weight-bold"><i class="fas fa-home text-muted mr-2"></i> Personal</span> <span class="font-weight-bold"><i class="fas fa-home mr-2"></i> Home</span>
<span class="px-2">&mdash;</span> <span class="px-2">&mdash;</span>
<span class="font-weight-light">Timeline with posts from accounts you follow</span> <span class="font-weight-light">Timeline with content from accounts you follow</span>
</li> </li>
<li class="lead"> <li class="lead mb-2">
<span class="font-weight-bold"><i class="far fa-map text-muted mr-2"></i> Public</span> <span class="font-weight-bold"><i class="fas fa-stream mr-2"></i> Public</span>
<span class="px-2">&mdash;</span> <span class="px-2">&mdash;</span>
<span class="font-weight-light">Timeline with posts from other users on the same instance</span> <span class="font-weight-light">Timeline with content from other users on this server</span>
</li> </li>
{{-- <li class="lead text-muted"> <li class="lead">
<span class="font-weight-bold"><i class="fas fa-globe text-muted mr-2"></i> Network</span> <span class="font-weight-bold"><i class="fas fa-globe mr-2"></i> Network</span>
<span class="px-2">&mdash;</span> <span class="px-2">&mdash;</span>
<span class="font-weight-light text-muted">Timeline with posts from local and remote accounts - coming soon!</span> <span class="font-weight-light">Timeline with unmoderated content from other servers</span>
</li> --}} </li>
</ul> </ul>
<div class="py-3"></div> <div class="py-3"></div>
<div class="card bg-primary border-primary" style="box-shadow: none !important;border: 3px solid #08d!important;"> <div class="card bg-primary border-primary" style="box-shadow: none !important;border: 3px solid #08d!important;">
<div class="card-header text-light font-weight-bold h4 p-4 bg-primary">Timeline Tips</div> <div class="card-header text-light font-weight-bold h4 p-4 bg-primary">Timeline Tips</div>
<div class="card-body bg-white p-3"> <div class="card-body bg-white p-3">
<ul class="pt-3"> <ul class="pt-3">
<li class="lead mb-4">You can mute or block accounts to prevent them from appearing in timelines.</li> <li class="lead mb-4">You can mute or block accounts to prevent them from appearing in home and public timelines.</li>
<li class="lead mb-4">You can create <span class="font-weight-bold">Unlisted</span> posts that don't appear in public timelines.</li> <li class="lead mb-4">You can create <span class="font-weight-bold">Unlisted</span> posts that don't appear in public timelines.</li>
</ul> </ul>

@ -2,16 +2,12 @@
@section('content') @section('content')
<timeline scope="network"></timeline> <network-timeline></network-timeline>
@endsection @endsection
@push('scripts') @push('scripts')
<script type="text/javascript" src="{{ mix('js/timeline.js') }}"></script> <script type="text/javascript" src="{{ mix('js/network-timeline.js') }}"></script>
<script type="text/javascript" src="{{ mix('js/compose.js') }}"></script> <script type="text/javascript" src="{{ mix('js/compose.js') }}"></script>
<script type="text/javascript"> <script type="text/javascript">window.App.boot();</script>
new Vue({
el: '#content'
});
</script>
@endpush @endpush

@ -167,6 +167,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
Route::get('notifications', 'ApiController@notifications'); Route::get('notifications', 'ApiController@notifications');
Route::get('timelines/public', 'PublicApiController@publicTimelineApi'); Route::get('timelines/public', 'PublicApiController@publicTimelineApi');
Route::get('timelines/home', 'PublicApiController@homeTimelineApi'); Route::get('timelines/home', 'PublicApiController@homeTimelineApi');
Route::get('timelines/network', 'PublicApiController@networkTimelineApi');
Route::get('newsroom/timeline', 'NewsroomController@timelineApi'); Route::get('newsroom/timeline', 'NewsroomController@timelineApi');
Route::post('newsroom/markasread', 'NewsroomController@markAsRead'); Route::post('newsroom/markasread', 'NewsroomController@markAsRead');
Route::get('favourites', 'Api\BaseApiController@accountLikes'); Route::get('favourites', 'Api\BaseApiController@accountLikes');
@ -468,6 +469,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
Route::group(['prefix' => 'timeline'], function () { Route::group(['prefix' => 'timeline'], function () {
Route::redirect('/', '/'); Route::redirect('/', '/');
Route::get('public', 'TimelineController@local')->name('timeline.public'); Route::get('public', 'TimelineController@local')->name('timeline.public');
Route::get('network', 'TimelineController@network')->name('timeline.network');
}); });
Route::group(['prefix' => 'users'], function () { Route::group(['prefix' => 'users'], function () {

21
webpack.mix.js vendored

@ -1,17 +1,9 @@
let mix = require('laravel-mix'); let mix = require('laravel-mix');
mix.sass('resources/assets/sass/app.scss', 'public/css', { mix.sass('resources/assets/sass/app.scss', 'public/css')
implementation: require('node-sass') .sass('resources/assets/sass/appdark.scss', 'public/css')
}) .sass('resources/assets/sass/landing.scss', 'public/css')
.sass('resources/assets/sass/appdark.scss', 'public/css', { .sass('resources/assets/sass/quill.scss', 'public/css').version();
implementation: require('node-sass')
})
.sass('resources/assets/sass/landing.scss', 'public/css', {
implementation: require('node-sass')
})
.sass('resources/assets/sass/quill.scss', 'public/css', {
implementation: require('node-sass')
}).version();
mix.js('resources/assets/js/app.js', 'public/js') mix.js('resources/assets/js/app.js', 'public/js')
.js('resources/assets/js/activity.js', 'public/js') .js('resources/assets/js/activity.js', 'public/js')
@ -41,6 +33,11 @@ mix.js('resources/assets/js/app.js', 'public/js')
.js('resources/assets/js/rempro.js', 'public/js') .js('resources/assets/js/rempro.js', 'public/js')
.js('resources/assets/js/rempos.js', 'public/js') .js('resources/assets/js/rempos.js', 'public/js')
//.js('resources/assets/js/timeline_next.js', 'public/js') //.js('resources/assets/js/timeline_next.js', 'public/js')
// .js('resources/assets/js/memoryprofile.js', 'public/js')
// .js('resources/assets/js/my2020.js', 'public/js')
.js('resources/assets/js/network-timeline.js', 'public/js')
// .js('resources/assets/js/drive.js', 'public/js')
// .js('resources/assets/js/register.js', 'public/js')
.extract([ .extract([
'lodash', 'lodash',

Loading…
Cancel
Save