[Favourite] Make twig event operate on array rather than string

This commit is contained in:
Hugo Sales 2021-04-23 12:55:42 +00:00
parent 7a90e844b7
commit 8dff0b1d0c
Signed by: someonewithpc
GPG Key ID: 7D0C7EAFC9D835A0
5 changed files with 15 additions and 10 deletions

View File

@ -1,6 +1,7 @@
<?php <?php
// {{{ License // {{{ License
// This file is part of GNU social - https://www.gnu.org/software/social // This file is part of GNU social - https://www.gnu.org/software/social
// //
// GNU social is free software: you can redistribute it and/or modify // GNU social is free software: you can redistribute it and/or modify
@ -15,6 +16,7 @@
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>. // along with GNU social. If not, see <http://www.gnu.org/licenses/>.
// }}} // }}}
namespace Plugin\Favourite; namespace Plugin\Favourite;
@ -75,7 +77,7 @@ class Favourite extends Plugin
public function onInsertLeftPanelLink(string $user_nickname, &$res) public function onInsertLeftPanelLink(string $user_nickname, &$res)
{ {
$res .= Formatting::twigRender(<<<END $res[] = Formatting::twigRender(<<<END
<a href="{{ path("favourites", {'nickname' : user_nickname}) }}" class='hover-effect {{ active("favourites") }}'>Favourites</a> <a href="{{ path("favourites", {'nickname' : user_nickname}) }}" class='hover-effect {{ active("favourites") }}'>Favourites</a>
<a href="{{ path("reverse_favourites", {'nickname' : user_nickname}) }}" class='hover-effect {{ active("reverse_favourites") }}'>Reverse Favs</a> <a href="{{ path("reverse_favourites", {'nickname' : user_nickname}) }}" class='hover-effect {{ active("reverse_favourites") }}'>Reverse Favs</a>
END, ['user_nickname' => $user_nickname]); END, ['user_nickname' => $user_nickname]);

View File

@ -55,7 +55,7 @@ class Extension extends AbstractExtension
new TwigFunction('is_route', [Runtime::class, 'isCurrentRoute']), new TwigFunction('is_route', [Runtime::class, 'isCurrentRoute']),
new TwigFunction('get_note_actions', [Runtime::class, 'getNoteActions']), new TwigFunction('get_note_actions', [Runtime::class, 'getNoteActions']),
new TwigFunction('get_note_other_content', [Runtime::class, 'getNoteOtherContent']), new TwigFunction('get_note_other_content', [Runtime::class, 'getNoteOtherContent']),
new TwigFunction('get_show_styles', [Runtime::class, 'getShowStyles']), new TwigFunction('show_stylesheets', [Runtime::class, 'getShowStylesheets']),
new TwigFunction('handle_event', [Runtime::class, 'handleEvent']), new TwigFunction('handle_event', [Runtime::class, 'handleEvent']),
new TwigFunction('config', [Runtime::class, 'getConfig']), new TwigFunction('config', [Runtime::class, 'getConfig']),
new TwigFunction('icon', [Runtime::class, 'embedSvgIcon'], ['needs_environment' => true]), new TwigFunction('icon', [Runtime::class, 'embedSvgIcon'], ['needs_environment' => true]),

View File

@ -1,7 +1,6 @@
<?php <?php
// {{{ License // {{{ License
// This file is part of GNU social - https://www.gnu.org/software/social // This file is part of GNU social - https://www.gnu.org/software/social
// //
// GNU social is free software: you can redistribute it and/or modify // GNU social is free software: you can redistribute it and/or modify
@ -16,7 +15,6 @@
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>. // along with GNU social. If not, see <http://www.gnu.org/licenses/>.
// }}} // }}}
/** /**
@ -95,16 +93,16 @@ class Runtime implements RuntimeExtensionInterface, EventSubscriberInterface
* *
* @return array|mixed * @return array|mixed
*/ */
public function getShowStyles() public function getShowStylesheets()
{ {
$styles = []; $styles = [];
Event::handle('start_show_styles',[&$styles]); Event::handle('ShowStyles', [&$styles]);
return $styles; return implode("\n", $styles);
} }
public function handleEvent(string $event, ...$args) public function handleEvent(string $event, ...$args)
{ {
$res = ''; $res = [];
$args[] = &$res; $args[] = &$res;
Event::handle($event, $args); Event::handle($event, $args);
return $res; return $res;

View File

@ -14,10 +14,13 @@
<link rel='stylesheet' type='text/css' href="{{ asset('assets/css/base_mid.css') }}" media="screen and (max-width: 1300px)"> <link rel='stylesheet' type='text/css' href="{{ asset('assets/css/base_mid.css') }}" media="screen and (max-width: 1300px)">
<link rel='stylesheet' type='text/css' href="{{ asset('assets/css/base_small.css') }}" media="screen and (max-width: 750px)"> <link rel='stylesheet' type='text/css' href="{{ asset('assets/css/base_small.css') }}" media="screen and (max-width: 750px)">
<link rel='stylesheet' type='text/css' href="{{ asset('assets/css/reset.css') }}"> <link rel='stylesheet' type='text/css' href="{{ asset('assets/css/reset.css') }}">
{% for stylesheet in get_show_styles() %} {% for stylesheet in show_stylesheets() %}
<link rel='stylesheet' type='text/css' href="{{ asset('assets/css/' ~ stylesheet) }}"> <link rel='stylesheet' type='text/css' href="{{ asset('assets/css/' ~ stylesheet) }}">
{% endfor %} {% endfor %}
{% endblock %} {% endblock %}
{% for type, element in handle_event('ShowHeadElements', app.request) %}
<{{type}} rel="{{element['rel']}}" type="{{element['type']}}" href="{{element['href']}}" title="{{element['title']}}">
{% endfor %}
</head> </head>
<body> <body>

View File

@ -44,7 +44,9 @@
</div> </div>
<a href='#'>Messages</a> <a href='#'>Messages</a>
<a href="{{ path("replies", {'nickname' : user_nickname}) }}" class='hover-effect {{ active("replies") }}'>Replies</a> <a href="{{ path("replies", {'nickname' : user_nickname}) }}" class='hover-effect {{ active("replies") }}'>Replies</a>
{{ handle_event('InsertLeftPanelLink', user_nickname) | raw }} {% for link in handle_event('InsertLeftPanelLink', user_nickname) %}
{{ link | raw }}
{% endfor %}
<a href="{{ path('settings_personal_info') }}" class='hover-effect {{ active('settings_') }}'>Settings</a> <a href="{{ path('settings_personal_info') }}" class='hover-effect {{ active('settings_') }}'>Settings</a>
<a href='{{ path('logout') }}'>Logout</a> <a href='{{ path('logout') }}'>Logout</a>
</div> </div>