AddOn Fancybox

This addon loads all media attachments of a post into a "fancybox" instead of linking directly to the media.
Each post gets its own attachment library, when there are more than one media attached you can scroll through them.
This commit is contained in:
Grischa Brockhaus 2022-11-24 23:48:08 +01:00
parent 30329df0dd
commit ae28f6ef01
15 changed files with 6761 additions and 0 deletions

61
fancybox/fancybox.php Normal file
View file

@ -0,0 +1,61 @@
<?php
/**
* Name: Fancybox
* Description: Open media attachments of posts into a fancybox overlay.
* Version: 1.01
* Author: Grischa Brockhaus <grischa@brockha.us>
*/
use Friendica\App;
use Friendica\Core\Hook;
use Friendica\DI;
function fancybox_install()
{
Hook::register('head', __FILE__, 'fancybox_head');
Hook::register('footer', __FILE__, 'fancybox_footer');
Hook::register('prepare_body_final', __FILE__, 'fancybox_render');
}
function fancybox_head(App $a, string &$b)
{
DI::page()->registerStylesheet(__DIR__ . '/asset/fancybox/jquery.fancybox.min.css');
}
function fancybox_footer(App $a, string &$str)
{
DI::page()->registerFooterScript(__DIR__ . '/asset/fancybox/jquery.fancybox.min.js');
DI::page()->registerFooterScript(__DIR__ . '/asset/fancybox/fancybox.config.js');
}
/*
prepare_body_final
Called at the end of prepare_body(). Hook data:
item: item array (input)
html: converted item body (input/output)
*/
function fancybox_render(App $a, array &$b) {
$matches = [];
$pattern='#<div class="body-attach">.*?</div>#s';
$gallery = 'gallery';
if (array_key_exists('item', $b)) {
$item = $b['item'];
if (array_key_exists('uri-id', $item)) {
$gallery = $gallery . '-' . $item['uri-id'];
}
}
$html = $b['html'];
while (preg_match($pattern, $html, $matches, PREG_OFFSET_CAPTURE)) {
if (is_array($matches)) $matches=$matches[0];
$part = $matches[0];
$replaced = str_replace('<a href', '<a data-fancybox="' . $gallery . '" href', $part);
$replaced = str_replace('<div class="body-attach"', '<div class="body-attach done"', $replaced);
$html =str_replace($part, $replaced, $html);
}
$html = str_replace('class="body-attach done"', 'class="body-attach"', $html);
$b['html'] = $html;
}