mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2024-12-22 19:10:15 +00:00
Merge pull request 'Updated URL Replace addon' (#1483) from toddy/friendica-addons:2024.03-rc into 2024.03-rc
Reviewed-on: https://git.friendi.ca/friendica/friendica-addons/pulls/1483 Reviewed-by: Hypolite Petovan <hypolite@mrpetovan.com>
This commit is contained in:
commit
11cc359434
6 changed files with 137 additions and 54 deletions
|
@ -5,7 +5,8 @@
|
|||
* Version: 0.3
|
||||
* Author: Matthias Ebers <https://loma.ml/profile/feb>
|
||||
* Author: Michael Vogel <https://pirati.ca/profile/heluecht>
|
||||
*
|
||||
* Status: Unsupported
|
||||
* Note: Please use the URL Replace addon instead
|
||||
*/
|
||||
|
||||
use Friendica\Core\Hook;
|
||||
|
@ -91,7 +92,7 @@ function invidious_render(array &$b)
|
|||
|
||||
$original = $b['html'];
|
||||
$server = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'invidious', 'server', DI::config()->get('invidious', 'server', INVIDIOUS_DEFAULT));
|
||||
|
||||
|
||||
$b['html'] = preg_replace("/https?:\/\/www.youtube.com\/watch\?v\=(.*?)/ism", $server . '/watch?v=$1', $b['html']);
|
||||
$b['html'] = preg_replace("/https?:\/\/www.youtube.com\/embed\/(.*?)/ism", $server . '/embed/$1', $b['html']);
|
||||
$b['html'] = preg_replace("/https?:\/\/www.youtube.com\/shorts\/(.*?)/ism", $server . '/shorts/$1', $b['html']);
|
||||
|
|
|
@ -4,18 +4,20 @@
|
|||
* Description: Replaces links to twitter.com to a nitter server in all displays of postings on a node.
|
||||
* Version: 2.0
|
||||
* Author: Tobias Diekershoff <tobias@social.diekershoff.de>
|
||||
* Status: Unsupported
|
||||
* Note: Please use the URL Replace addon instead
|
||||
*
|
||||
* Copyright (c) 2020 Tobias Diekershoff
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial
|
||||
* portions of the Software.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
|
||||
* NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
|
@ -49,7 +51,7 @@ function nitter_addon_admin(string &$o)
|
|||
$t = Renderer::getMarkupTemplate('admin.tpl', 'addon/nitter/');
|
||||
$o = Renderer::replaceMacros($t, [
|
||||
'$settingdescription' => DI::l10n()->t('Which nitter server shall be used for the replacements in the post bodies? Use the URL with servername and protocol. See %s for a list of available public Nitter servers.', 'https://github.com/zedeus/nitter/wiki/Instances'),
|
||||
'$nitterserver' => ['nitterserver', DI::l10n()->t('Nitter server'), $nitterserver, 'https://example.com'],
|
||||
'$nitterserver' => ['nitterserver', DI::l10n()->t('Nitter server'), $nitterserver, 'https://example.com'],
|
||||
'$submit' => DI::l10n()->t('Save Settings'),
|
||||
]);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,8 @@ This addon will replace all occurrences of specified URLs with the address of
|
|||
alternative servers in all displayed postings on a Friendica node.
|
||||
|
||||
You can use this to switch from Twitter (or X) to a nitter instance, from
|
||||
YouTube to an invidious instance, or from some news sites to 12ft.io.
|
||||
YouTube to an invidious instance, from Instagram to a proxigram instance,
|
||||
or from some news sites to 12ft.io.
|
||||
|
||||
Note: If you are using the twitter connector on your server, the links to the
|
||||
contacts profile pages will not be replaced by this addon. Only links in the
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-01-05 00:06+0100\n"
|
||||
"POT-Creation-Date: 2024-03-14 09:05+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -17,34 +17,48 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: url_replace.php:54
|
||||
#: url_replace.php:68
|
||||
msgid "Replace links to X."
|
||||
msgstr ""
|
||||
|
||||
#: url_replace.php:73
|
||||
msgid "Nitter server"
|
||||
msgstr ""
|
||||
|
||||
#: url_replace.php:56
|
||||
msgid "Specify the URL with protocol. The default is https://nitter.net."
|
||||
#: url_replace.php:75 url_replace.php:88 url_replace.php:101
|
||||
#, php-format
|
||||
msgid "Specify the URL with protocol. The default is %s."
|
||||
msgstr ""
|
||||
|
||||
#: url_replace.php:62
|
||||
#: url_replace.php:81
|
||||
msgid "Replace links to YouTube."
|
||||
msgstr ""
|
||||
|
||||
#: url_replace.php:86
|
||||
msgid "Invidious server"
|
||||
msgstr ""
|
||||
|
||||
#: url_replace.php:64
|
||||
msgid "Specify the URL with protocol. The default is https://yewtu.be."
|
||||
#: url_replace.php:94
|
||||
msgid "Replace links to Instagram."
|
||||
msgstr ""
|
||||
|
||||
#: url_replace.php:70
|
||||
#: url_replace.php:99
|
||||
msgid "Proxigram server"
|
||||
msgstr ""
|
||||
|
||||
#: url_replace.php:107
|
||||
msgid "Sites which are accessed through 12ft.io"
|
||||
msgstr ""
|
||||
|
||||
#: url_replace.php:72
|
||||
#: url_replace.php:109
|
||||
msgid "Specify the URLs with protocol, one per line."
|
||||
msgstr ""
|
||||
|
||||
#: url_replace.php:76
|
||||
#: url_replace.php:113
|
||||
msgid "Save settings"
|
||||
msgstr ""
|
||||
|
||||
#: url_replace.php:125
|
||||
msgid "(URL replace addon enabled for X, YouTube and some news sites.)"
|
||||
#: url_replace.php:179
|
||||
msgid ""
|
||||
"(URL replace addon enabled for X, YouTube, Instagram and some news sites.)"
|
||||
msgstr ""
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
{{include file="field_checkbox.tpl" field=$nitter_server_enabled}}
|
||||
{{include file="field_input.tpl" field=$nitter_server}}
|
||||
{{include file="field_checkbox.tpl" field=$invidious_server_enabled}}
|
||||
{{include file="field_input.tpl" field=$invidious_server}}
|
||||
{{include file="field_checkbox.tpl" field=$proxigram_server_enabled}}
|
||||
{{include file="field_input.tpl" field=$proxigram_server}}
|
||||
{{include file="field_textarea.tpl" field=$twelvefeet_sites}}
|
||||
|
||||
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
/**
|
||||
* Name: URL Replace
|
||||
* Description: Replaces occurrences of specified URLs with the address of alternative servers in all displays of postings on a node.
|
||||
* Version: 1.0
|
||||
* Version: 1.1
|
||||
* Author: Dr. Tobias Quathamer <https://social.anoxinon.de/@toddy>
|
||||
* Maintainer: Dr. Tobias Quathamer <https://social.anoxinon.de/@toddy>
|
||||
*/
|
||||
|
@ -11,6 +11,10 @@ use Friendica\Core\Hook;
|
|||
use Friendica\Core\Renderer;
|
||||
use Friendica\DI;
|
||||
|
||||
const URL_REPLACE_NITTER_DEFAULT = 'https://nitter.net';
|
||||
const URL_REPLACE_INVIDIOUS_DEFAULT = 'https://invidio.us';
|
||||
const URL_REPLACE_PROXIGRAM_DEFAULT = 'https://proxigram.lunar.icu';
|
||||
|
||||
function url_replace_install()
|
||||
{
|
||||
Hook::register('prepare_body_final', 'addon/url_replace/url_replace.php', 'url_replace_render');
|
||||
|
@ -21,18 +25,37 @@ function url_replace_install()
|
|||
*/
|
||||
function url_replace_addon_admin_post()
|
||||
{
|
||||
DI::config()->set('url_replace', 'nitter_server', rtrim(trim($_POST['nitter_server']), '/'));
|
||||
DI::config()->set('url_replace', 'invidious_server', rtrim(trim($_POST['invidious_server']), '/'));
|
||||
DI::config()->set('url_replace', 'nitter_server_enabled', !empty($_POST['nitter_server_enabled']));
|
||||
$nitter_server = rtrim(trim($_POST['nitter_server']), '/');
|
||||
if ($nitter_server) {
|
||||
DI::config()->set('url_replace', 'nitter_server', $nitter_server);
|
||||
} else {
|
||||
DI::config()->delete('url_replace', 'nitter_server');
|
||||
}
|
||||
DI::config()->set('url_replace', 'invidious_server_enabled', !empty($_POST['invidious_server_enabled']));
|
||||
$invidious_server = rtrim(trim($_POST['invidious_server']), '/');
|
||||
if ($invidious_server) {
|
||||
DI::config()->set('url_replace', 'invidious_server', $invidious_server);
|
||||
} else {
|
||||
DI::config()->delete('url_replace', 'invidious_server');
|
||||
}
|
||||
DI::config()->set('url_replace', 'proxigram_server_enabled', !empty($_POST['proxigram_server_enabled']));
|
||||
$proxigram_server = rtrim(trim($_POST['proxigram_server']), '/');
|
||||
if ($proxigram_server) {
|
||||
DI::config()->set('url_replace', 'proxigram_server', $proxigram_server);
|
||||
} else {
|
||||
DI::config()->delete('url_replace', 'proxigram_server');
|
||||
}
|
||||
// Convert twelvefeet_sites into an array before setting the new value
|
||||
$twelvefeet_sites = explode(PHP_EOL, $_POST['twelvefeet_sites']);
|
||||
// Normalize URLs by using lower case, removing a trailing slash and whitespace
|
||||
$twelvefeet_sites = array_map(fn($value): string => rtrim(trim(strtolower($value)), '/'), $twelvefeet_sites);
|
||||
$twelvefeet_sites = array_map(fn ($value): string => rtrim(trim(strtolower($value)), '/'), $twelvefeet_sites);
|
||||
// Do not store empty lines or duplicates
|
||||
$twelvefeet_sites = array_filter($twelvefeet_sites, fn($value): bool => !empty($value));
|
||||
$twelvefeet_sites = array_filter($twelvefeet_sites, fn ($value): bool => !empty($value));
|
||||
$twelvefeet_sites = array_unique($twelvefeet_sites);
|
||||
// Ensure a protocol and default to HTTPS
|
||||
$twelvefeet_sites = array_map(
|
||||
fn($value): string => substr($value, 0, 4) !== 'http' ? 'https://' . $value : $value,
|
||||
fn ($value): string => substr($value, 0, 4) !== 'http' ? 'https://' . $value : $value,
|
||||
$twelvefeet_sites
|
||||
);
|
||||
asort($twelvefeet_sites);
|
||||
|
@ -41,31 +64,58 @@ function url_replace_addon_admin_post()
|
|||
|
||||
/**
|
||||
* Hook into admin settings to enable choosing a different server
|
||||
* for twitter, youtube, and news sites.
|
||||
* for Twitter, YouTube, Instagram, and news sites.
|
||||
*/
|
||||
function url_replace_addon_admin(string &$o)
|
||||
{
|
||||
$nitter_server = DI::config()->get('url_replace', 'nitter_server');
|
||||
$invidious_server = DI::config()->get('url_replace', 'invidious_server');
|
||||
$twelvefeet_sites = implode(PHP_EOL, DI::config()->get('url_replace', 'twelvefeet_sites') ?? [] ?: []);
|
||||
$nitter_server_enabled = DI::config()->get('url_replace', 'nitter_server_enabled') ?? true;
|
||||
$nitter_server = DI::config()->get('url_replace', 'nitter_server') ?? '';
|
||||
$invidious_server_enabled = DI::config()->get('url_replace', 'invidious_server_enabled') ?? true;
|
||||
$invidious_server = DI::config()->get('url_replace', 'invidious_server') ?? '';
|
||||
$proxigram_server_enabled = DI::config()->get('url_replace', 'proxigram_server_enabled') ?? true;
|
||||
$proxigram_server = DI::config()->get('url_replace', 'proxigram_server') ?? '';
|
||||
$twelvefeet_sites = implode(PHP_EOL, DI::config()->get('url_replace', 'twelvefeet_sites') ?? []);
|
||||
|
||||
$t = Renderer::getMarkupTemplate('admin.tpl', 'addon/url_replace/');
|
||||
$o = Renderer::replaceMacros($t, [
|
||||
'$nitter_server_enabled' => [
|
||||
'nitter_server_enabled',
|
||||
DI::l10n()->t('Replace links to X.'),
|
||||
$nitter_server_enabled,
|
||||
],
|
||||
'$nitter_server' => [
|
||||
'nitter_server',
|
||||
DI::l10n()->t('Nitter server'),
|
||||
$nitter_server,
|
||||
DI::l10n()->t('Specify the URL with protocol. The default is https://nitter.net.'),
|
||||
DI::l10n()->t('Specify the URL with protocol. The default is %s.', URL_REPLACE_NITTER_DEFAULT),
|
||||
null,
|
||||
'placeholder="https://nitter.net"',
|
||||
'placeholder="' . URL_REPLACE_NITTER_DEFAULT . '"',
|
||||
],
|
||||
'$invidious_server_enabled' => [
|
||||
'invidious_server_enabled',
|
||||
DI::l10n()->t('Replace links to YouTube.'),
|
||||
$invidious_server_enabled,
|
||||
],
|
||||
'$invidious_server' => [
|
||||
'invidious_server',
|
||||
DI::l10n()->t('Invidious server'),
|
||||
$invidious_server,
|
||||
DI::l10n()->t('Specify the URL with protocol. The default is https://yewtu.be.'),
|
||||
DI::l10n()->t('Specify the URL with protocol. The default is %s.', URL_REPLACE_INVIDIOUS_DEFAULT),
|
||||
null,
|
||||
'placeholder="https://yewtu.be"',
|
||||
'placeholder="' . URL_REPLACE_INVIDIOUS_DEFAULT . '"',
|
||||
],
|
||||
'$proxigram_server_enabled' => [
|
||||
'proxigram_server_enabled',
|
||||
DI::l10n()->t('Replace links to Instagram.'),
|
||||
$proxigram_server_enabled,
|
||||
],
|
||||
'$proxigram_server' => [
|
||||
'proxigram_server',
|
||||
DI::l10n()->t('Proxigram server'),
|
||||
$proxigram_server,
|
||||
DI::l10n()->t('Specify the URL with protocol. The default is %s.', URL_REPLACE_PROXIGRAM_DEFAULT),
|
||||
null,
|
||||
'placeholder="' . URL_REPLACE_PROXIGRAM_DEFAULT . '"',
|
||||
],
|
||||
'$twelvefeet_sites' => [
|
||||
'twelvefeet_sites',
|
||||
|
@ -84,29 +134,41 @@ function url_replace_addon_admin(string &$o)
|
|||
*/
|
||||
function url_replace_render(array &$b)
|
||||
{
|
||||
$replaced = false;
|
||||
$replaced = false;
|
||||
$replacements = [];
|
||||
|
||||
$nitter_server = DI::config()->get('url_replace', 'nitter_server');
|
||||
if (empty($nitter_server)) {
|
||||
$nitter_server = 'https://nitter.net';
|
||||
$nitter_server = DI::config()->get('url_replace', 'nitter_server') ?? URL_REPLACE_NITTER_DEFAULT;
|
||||
$nitter_server_enabled = DI::config()->get('url_replace', 'nitter_server_enabled') ?? true;
|
||||
if ($nitter_server_enabled) {
|
||||
$replacements = array_merge($replacements, [
|
||||
'https://mobile.twitter.com' => $nitter_server,
|
||||
'https://twitter.com' => $nitter_server,
|
||||
'https://mobile.x.com' => $nitter_server,
|
||||
'https://x.com' => $nitter_server,
|
||||
]);
|
||||
}
|
||||
|
||||
$invidious_server = DI::config()->get('url_replace', 'invidious_server');
|
||||
if (empty($invidious_server)) {
|
||||
$invidious_server = 'https://yewtu.be';
|
||||
$invidious_server = DI::config()->get('url_replace', 'invidious_server') ?? URL_REPLACE_INVIDIOUS_DEFAULT;
|
||||
$invidious_server_enabled = DI::config()->get('url_replace', 'invidious_server_enabled') ?? true;
|
||||
if ($invidious_server_enabled) {
|
||||
$replacements = array_merge($replacements, [
|
||||
'https://www.youtube.com' => $invidious_server,
|
||||
'https://youtube.com' => $invidious_server,
|
||||
'https://m.youtube.com' => $invidious_server,
|
||||
'https://youtu.be' => $invidious_server,
|
||||
]);
|
||||
}
|
||||
|
||||
$proxigram_server = DI::config()->get('url_replace', 'proxigram_server') ?? URL_REPLACE_PROXIGRAM_DEFAULT;
|
||||
$proxigram_server_enabled = DI::config()->get('url_replace', 'proxigram_server_enabled') ?? true;
|
||||
if ($proxigram_server_enabled) {
|
||||
$replacements = array_merge($replacements, [
|
||||
'https://www.instagram.com' => $proxigram_server,
|
||||
'https://instagram.com' => $proxigram_server,
|
||||
'https://ig.me' => $proxigram_server,
|
||||
]);
|
||||
}
|
||||
|
||||
// Handle some of twitter and youtube
|
||||
$replacements = [
|
||||
'https://mobile.twitter.com' => $nitter_server,
|
||||
'https://twitter.com' => $nitter_server,
|
||||
'https://mobile.x.com' => $nitter_server,
|
||||
'https://x.com' => $nitter_server,
|
||||
'https://www.youtube.com' => $invidious_server,
|
||||
'https://youtube.com' => $invidious_server,
|
||||
'https://m.youtube.com' => $invidious_server,
|
||||
'https://youtu.be' => $invidious_server,
|
||||
];
|
||||
foreach ($replacements as $server => $replacement) {
|
||||
if (strpos($b['html'], $server) !== false) {
|
||||
$b['html'] = str_replace($server, $replacement, $b['html']);
|
||||
|
@ -114,7 +176,7 @@ function url_replace_render(array &$b)
|
|||
}
|
||||
}
|
||||
|
||||
$twelvefeet_sites = DI::config()->get('url_replace', 'twelvefeet_sites') ?? [] ?: [];
|
||||
$twelvefeet_sites = DI::config()->get('url_replace', 'twelvefeet_sites') ?? [];
|
||||
foreach ($twelvefeet_sites as $twelvefeet_site) {
|
||||
if (strpos($b['html'], $twelvefeet_site) !== false) {
|
||||
$b['html'] = str_replace($twelvefeet_site, 'https://12ft.io/' . $twelvefeet_site, $b['html']);
|
||||
|
@ -122,8 +184,7 @@ function url_replace_render(array &$b)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
if ($replaced) {
|
||||
$b['html'] .= '<hr><p><small>' . DI::l10n()->t('(URL replace addon enabled for X, YouTube and some news sites.)') . '</small></p>';
|
||||
$b['html'] .= '<hr><p><small>' . DI::l10n()->t('(URL replace addon enabled for X, YouTube, Instagram and some news sites.)') . '</small></p>';
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue