Merge branch 'dev' of codeberg.org:streams/streams into dev

This commit is contained in:
Mike Macgirvin 2023-10-10 15:38:51 +11:00
commit 161d275749
32 changed files with 11809 additions and 11641 deletions

View file

@ -1611,7 +1611,8 @@ class Activity
}
}
$current_url = $currhub ? $currhub['hubloc_id_url'] : $p['xchan_url'];
$fallback = $p['xchan_network'] === 'activitypub' ? $p['xchan_hash'] : $p['xchan_url'];
$current_url = $currhub ? $currhub['hubloc_id_url'] : $fallback;
if (!$extended) {
return $current_url;
@ -1639,6 +1640,7 @@ class Activity
$ret['preferredUsername'] = substr($p['xchan_addr'], 0, strpos($p['xchan_addr'], '@'));
}
$ret['name'] = $p['xchan_name'];
$ret['created'] = datetime_convert('UTC','UTC', $p['xchan_created'], ATOM_TIME);
$ret['updated'] = datetime_convert('UTC', 'UTC', $p['xchan_name_date'], ATOM_TIME);
$ret['icon'] = [
'type' => 'Image',
@ -3000,6 +3002,7 @@ class Activity
if (isset($act->data['published']) && $act->data['published']) {
$item['created'] = datetime_convert('UTC', 'UTC', $act->data['published']);
unset($item['edited']);
}
if (isset($act->data['updated']) && $act->data['updated']) {
@ -3086,7 +3089,7 @@ class Activity
}
if ($act->type === 'Announce') {
$content['content'] = sprintf(t('🔁 Repeated %1$s\'s %2$s'), $mention, $object_type);
$content['content'] = sprintf(t('📢 Repeated %1$s\'s %2$s'), $mention, $object_type);
}
if ($act->type === 'emojiReaction') {
@ -3970,6 +3973,12 @@ class Activity
}
if ($is_system) {
$public_stream_mode = (int) Config::Get('system', 'public_stream_mode', PUBLIC_STREAM_NONE);
if ($public_stream_mode === PUBLIC_STREAM_NONE) {
$allowed = false;
$reason[] = 'public stream disabled';
}
if (!check_pubstream_channelallowed($observer_hash)) {
$allowed = false;
$reason[] = 'pubstream channel blocked';
@ -4015,7 +4024,6 @@ class Activity
$item['aid'] = $channel['channel_account_id'];
$item['uid'] = $channel['channel_id'];
// Some authors may be zot6 authors in which case we want to store their nomadic identity
// instead of their ActivityPub identity

View file

@ -155,7 +155,8 @@ class ActivityPub
}
// But also send to each personal inbox
$r = q(
"select * from xchan left join hubloc on xchan_hash = hubloc_hash where hubloc_url = '%s' and xchan_network = 'activitypub' ",
"select * from xchan left join hubloc on xchan_hash = hubloc_hash where hubloc_hash = '%s' and hubloc_url = '%s' and xchan_network = 'activitypub' ",
dbesc($arr['hub']['hubloc_hash']),
dbesc($arr['hub']['hubloc_url'])
);

View file

@ -123,7 +123,7 @@ class Share
$arr['parent_mid'] = $this->item['mid'];
$mention = '@[zrl=' . $this->item['author']['xchan_url'] . ']' . $this->item['author']['xchan_name'] . '[/zrl]';
$arr['body'] = sprintf(t('🔁 Repeated %1$s\'s %2$s'), $mention, $this->item['obj_type']);
$arr['body'] = sprintf(t('📢 Repeated %1$s\'s %2$s'), $mention, $this->item['obj_type']);
$arr['author_xchan'] = $observer['xchan_hash'];
$arr['owner_xchan'] = $this->item['author_xchan'];

View file

@ -328,8 +328,8 @@ class ThreadItem
$embed = t('Share this');
}
if ($repeatable) {
$share = t('Repeat This');
if ($shareable) {
$share = t('Repeat this');
}
$dreport = '';
@ -340,7 +340,7 @@ class ThreadItem
}
if ((! get_config('system', 'disable_dreport')) && strcmp(datetime_convert('UTC', 'UTC', $item['created']), datetime_convert('UTC', 'UTC', "now - $keep_reports days")) > 0) {
$dreport = t('Delivery Report');
$dreport = t('Delivery report');
$dreport_link = gen_link_id($item['mid']);
}
$is_new = false;
@ -908,7 +908,7 @@ class ThreadItem
$comment_buttons = $arr['comment_buttons'];
$feature_auto_save_draft = ((Features::enabled($conv->get_profile_owner(), 'auto_save_draft')) ? "true" : "false");
$permanent_draft = ((intval($conv->get_profile_owner()) === intval(local_channel()) && Apps::system_app_installed($conv->get_profile_owner(), 'Drafts')) ? ('Save draft') : EMPTY_STR);
$permanent_draft = ((intval($conv->get_profile_owner()) === intval(local_channel()) && Apps::system_app_installed($conv->get_profile_owner(), 'Drafts')) ? t('Save draft') : EMPTY_STR);

View file

@ -321,7 +321,7 @@ class Cal extends Controller
'is_first' => $is_first,
'item' => $rr,
'html' => $html,
'plink' => [zid($rr['plink']), t('Link to Source'), '', ''],
'plink' => [zid($rr['plink']), t('Link to source'), '', ''],
];
}
}

View file

@ -503,11 +503,13 @@ class Channel extends Controller
// because browser prefetching might change it on us. We have to deliver it with the page.
$maxheight = get_pconfig(App::$profile['profile_uid'], 'system', 'channel_divmore_height',400);
$item_scroll = get_pconfig(local_channel(), 'system', 'item_scroll');
$o .= '<div id="live-channel"></div>' . "\r\n";
$o .= "<script> var profile_uid = " . App::$profile['profile_uid']
. "; var netargs = '?f='; var profile_page = " . App::$pager['page']
. "; divmore_height = " . intval($maxheight) . "; </script>\r\n";
. "; divmore_height = " . intval($maxheight)
. "; itemScroll = '" . (($item_scroll) ? 'auto' : 'hidden' ) . "' ;</script>\r\n";
App::$page['htmlhead'] .= replace_macros(Theme::get_template("build_query.tpl"), [
'$baseurl' => z_root(),

View file

@ -119,8 +119,10 @@ class Communities extends Controller
if ($rr['site_sellpage']) {
$register_link = $rr['site_sellpage'];
} else {
} elseif (intval($rr['site_type'] === 0)) {
$register_link = $rr['site_url'] . '/register';
} else {
$register_link = $rr['site_url'];
}
$j[] = [
@ -158,7 +160,12 @@ class Communities extends Controller
killme();
}
else {
$output = "<script> var page_query = '" . escape_tags(urlencode($_GET['req'])) . "'; var extra_args = '" . extra_query_args() . "' ; </script>";
$maxheight = 94;
$item_scroll = get_pconfig(local_channel(), 'system', 'item_scroll');
$output = "<script> var page_query = '" . escape_tags(urlencode($_GET['req'])) . "'; var extra_args = '" . extra_query_args() . "' ; divmore_height = " . intval($maxheight)
. "; itemScroll = '" . (($item_scroll) ? 'auto' : 'hidden' ) . "' ;</script>\r\n";
$output .= replace_macros(Theme::get_template('sitentry_header.tpl'), [
'$dirlbl' => t('Communities'),

View file

@ -515,8 +515,12 @@ class Directory extends Controller
$maxheight = 94;
$dirtitle = (($globaldir) ? t('Directory') : t('Local Directory'));
$item_scroll = get_pconfig(local_channel(), 'system', 'item_scroll');
$o .= "<script> let page_query = '" . escape_tags(urlencode($_GET['req'])) . "'; let extra_args = '" . extra_query_args() . "' ; divmore_height = " . intval($maxheight)
. "; itemScroll = '" . (($item_scroll) ? 'auto' : 'hidden' ) . "' ;</script>\r\n";
$o .= "<script> var page_query = '" . escape_tags(urlencode($_GET['req'])) . "'; var extra_args = '" . extra_query_args() . "' ; divmore_height = " . intval($maxheight) . "; </script>";
$o .= replace_macros($tpl, [
'$search' => $search,
'$desc' => t('Find'),

View file

@ -221,9 +221,12 @@ class Display extends Controller
$mid = gen_link_id($mid);
$max_height = local_channel() ? get_pconfig(local_channel(), 'system', 'stream_divmore_height', 400) : 400;
$item_scroll = get_pconfig(local_channel(), 'system', 'item_scroll');
$o .= '<div id="live-display"></div>' . "\r\n";
$o .= "<script> let profile_uid = " . ((intval(local_channel())) ? local_channel() : (-1))
. "; let netargs = '?f='; let profile_page = " . App::$pager['page'] . "; divmore_height = " . intval($max_height) . "; </script>\r\n";
. "; let netargs = '?f='; let profile_page = " . App::$pager['page'] . "; divmore_height = " . intval($max_height)
. "; itemScroll = '" . (($item_scroll) ? 'auto' : 'hidden' ) . "' ;</script>\r\n";
App::$page['htmlhead'] .= replace_macros(Theme::get_template("build_query.tpl"), [
'$baseurl' => z_root(),

View file

@ -724,7 +724,7 @@ class Events extends Controller
'is_first' => $is_first,
'item' => $rr,
'html' => $html,
'plink' => [zid($rr['plink']), t('Link to Source'), '', ''],
'plink' => [zid($rr['plink']), t('Link to source'), '', ''],
];
}
}

View file

@ -106,11 +106,13 @@ class Pubstream extends Controller
$static = ((local_channel()) ? Channel::manual_conv_update(local_channel()) : 1);
$maxheight = get_config('system', 'home_divmore_height', 400);
$item_scroll = get_pconfig(local_channel(), 'system', 'item_scroll');
$o .= '<div id="live-pubstream"></div>' . "\r\n";
$o .= "<script> var profile_uid = " . ((intval(local_channel())) ? local_channel() : (-1))
. "; var profile_page = " . App::$pager['page']
. "; divmore_height = " . intval($maxheight) . "; </script>\r\n";
. "; divmore_height = " . intval($maxheight)
. "; itemScroll = '" . (($item_scroll) ? 'auto' : 'hidden' ) . "' ;</script>\r\n";
// if we got a decoded hash we must encode it again before handing to javascript
$mid = gen_link_id($mid);

View file

@ -211,13 +211,15 @@ class Search extends Controller
if ((!$this->updating) && (!$this->loading)) {
$static = ((local_channel()) ? Channel::manual_conv_update(local_channel()) : 0);
$item_scroll = get_pconfig(local_channel(), 'system', 'item_scroll');
// This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
// because browser prefetching might change it on us. We have to deliver it with the page.
$output .= '<div id="live-search"></div>' . "\r\n";
$output .= "<script> let profile_uid = " . intval($this->search_channel['channel_id'])
. "; let netargs = '?f='; let profile_page = " . App::$pager['page'] . "; divmore_height = 400; </script>\r\n";
. "; let netargs = '?f='; let profile_page = " . App::$pager['page'] . "; divmore_height = 400;"
. " itemScroll = '" . (($item_scroll) ? 'auto' : 'hidden' ) . "' ;</script>\r\n";
App::$page['htmlhead'] .= replace_macros(Theme::get_template("build_query.tpl"), [
'$baseurl' => z_root(),

View file

@ -43,6 +43,8 @@ class Display
$channel_divmore_height = ((x($_POST, 'channel_divmore_height')) ? intval($_POST['channel_divmore_height']) : 400);
$stream_divmore_height = ((x($_POST, 'stream_divmore_height')) ? intval($_POST['stream_divmore_height']) : 400);
$item_scroll = ((x($_POST, 'item_scroll')) ? intval($_POST['item_scroll']) : 0);
$browser_update = ((x($_POST, 'browser_update')) ? intval($_POST['browser_update']) : 0);
$browser_update = $browser_update * 1000;
@ -69,6 +71,7 @@ class Display
set_pconfig(local_channel(), 'system', 'no_smilies', 1 - intval($nosmile));
set_pconfig(local_channel(), 'system', 'channel_divmore_height', $channel_divmore_height);
set_pconfig(local_channel(), 'system', 'stream_divmore_height', $stream_divmore_height);
set_pconfig(local_channel(), 'system', 'item_scroll', $item_scroll);
set_pconfig(local_channel(), 'system', 'channel_menu', $channel_menu);
set_pconfig(local_channel(), 'system', 'thread_indent_px', $indentpx);
set_pconfig(local_channel(), 'system', 'filter_menu_open', $filter_menu_open);
@ -222,6 +225,7 @@ class Display
'$expert' => Features::enabled(local_channel(), 'advanced_theming'),
'$channel_divmore_height' => ['channel_divmore_height', t('Channel page max height of content (in pixels)'), get_pconfig(local_channel(), 'system', 'channel_divmore_height', 400), t('click to expand content exceeding this height, or 0 to display full height')],
'$stream_divmore_height' => ['stream_divmore_height', t('Stream page max height of content (in pixels)'), get_pconfig(local_channel(), 'system', 'stream_divmore_height', 400), t('click to expand content exceeding this height, or 0 to display full height')],
'$item_scroll' => ['item_scroll', t('Add scrollbars for long content'), get_pconfig(local_channel(), 'system', 'item_scroll'), '', $yes_no ],
'$indentpx' => ['indentpx', t('Indent threaded comments this many pixels from the parent'), intval(get_pconfig(local_channel(), 'system', 'thread_indent_px', get_config('system', 'thread_indent_px', 0))), t('0-20')],
]);

View file

@ -113,10 +113,10 @@ class Share extends Controller
$arr['uuid'] = new_uuid();
$arr['mid'] = z_root() . '/item/' . $arr['uuid'];
$arr['mid'] = str_replace('/item/', '/activity/', $arr['mid']);
$arr['parent_mid'] = $arr['mid'];
$arr['parent_mid'] = $item['mid'];
$mention = '@[zrl=' . $item['author']['xchan_url'] . ']' . $item['author']['xchan_name'] . '[/zrl]';
$arr['body'] = sprintf(t('&#x1f501; Repeated %1$s\'s %2$s'), $mention, $item['obj_type']);
$arr['body'] = sprintf(t('&#x1F4E2; Repeated %1$s\'s %2$s'), $mention, $item['obj_type']);
$arr['author_xchan'] = $channel['channel_hash'];
$arr['owner_xchan'] = $item['author_xchan'];

View file

@ -377,6 +377,7 @@ class Stream extends Controller
if (!$this->updating) {
$maxheight = get_pconfig(local_channel(), 'system', 'stream_divmore_height', 400);
$item_scroll = get_pconfig(local_channel(), 'system', 'item_scroll');
// The special div is needed for liveUpdate to kick in for this page.
// We only launch liveUpdate if you aren't filtering in some incompatible
@ -385,7 +386,8 @@ class Stream extends Controller
$o .= '<div id="live-stream"></div>' . "\r\n";
$o .= "<script> let profile_uid = " . local_channel()
. "; let profile_page = " . App::$pager['page']
. "; divmore_height = " . intval($maxheight) . "; </script>\r\n";
. "; divmore_height = " . intval($maxheight)
. "; itemScroll = '" . (($item_scroll) ? 'auto' : 'hidden' ) . "' ;</script>\r\n";
App::$page['htmlhead'] .= replace_macros(Theme::get_template('build_query.tpl'), [
'$baseurl' => z_root(),

View file

@ -198,7 +198,7 @@ This links to the following opensearch document:
</OpenSearchDescription>
```
The second Url in the example is a pointer to the ActivityPub enabled endpoint. A similar document is provided for the site search. Since an HTML Url is provided, these searches will be available as a browser search engine from many browsers and are also available to any opensearch enabled service. These services will only search public content (if public searches are permitted) as there is currently no mechanism for opensearch to determine the identity of the viewer. There are plans to integrate this with [OpenWebAuth](https://codeberg.org/streams/streams/src/branch/dev/spec/OpenWebAuth/Home.md), so this restriction is temporary.
The second Url in the example is a pointer to the ActivityPub enabled endpoint. A similar document is provided for the site search. Since an HTML Url is provided, these searches will be available as a browser search engine from many browsers and are also available to any opensearch enabled service. These services will only search public content (if public searches are permitted) as there is currently no mechanism for opensearch to determine the identity of the viewer. There are plans to integrate this with [OpenWebAuth](https://codeberg.org/streams/streams/src/branch/dev/spec/OpenWebAuth/Home.md), so this restriction is temporary. [Edit: this was done.]
The opensearch links are also provided as links in the actor's channel page. Both the channel search and the site search are listed.

View file

@ -709,7 +709,7 @@ function thread_action_menu($item, $mode = '')
if ((local_channel()) && local_channel() == $item['uid']) {
$menu[] = [
'menu' => 'view_source',
'title' => t('View Source'),
'title' => t('View source'),
'icon' => 'code',
'action' => 'viewsrc(' . $item['id'] . '); return false;',
'href' => '#'
@ -719,7 +719,7 @@ function thread_action_menu($item, $mode = '')
if ($item['parent'] == $item['id'] && (get_observer_hash() != $item['author_xchan'])) {
$menu[] = [
'menu' => 'follow_thread',
'title' => t('Follow Thread'),
'title' => t('Follow thread'),
'icon' => 'plus',
'action' => 'dosubthread(' . $item['id'] . '); return false;',
'href' => '#'
@ -728,7 +728,7 @@ function thread_action_menu($item, $mode = '')
$menu[] = [
'menu' => 'unfollow_thread',
'title' => t('Unfollow Thread'),
'title' => t('Unfollow thread'),
'icon' => 'minus',
'action' => 'dounsubthread(' . $item['id'] . '); return false;',
'href' => '#'
@ -1265,7 +1265,7 @@ function z_status_editor($x, $popup = false)
Hook::call('jot_networks', $jotnets);
}
$permanent_draft = ((intval($x['profile_uid']) && intval($x['profile_uid']) === local_channel() && Apps::system_app_installed($x['profile_uid'], 'Drafts')) ? ('Save draft') : EMPTY_STR);
$permanent_draft = ((intval($x['profile_uid']) && intval($x['profile_uid']) === local_channel() && Apps::system_app_installed($x['profile_uid'], 'Drafts')) ? t('Save draft') : EMPTY_STR);
$sharebutton = (x($x, 'button') ? $x['button'] : t('Share'));
$placeholdtext = (x($x, 'content_label') ? $x['content_label'] : $sharebutton);

View file

@ -3167,7 +3167,7 @@ function start_delivery_chain($channel, $item, $item_id, bool|array $parent, $gr
if (is_array($arr['obj'])) {
$obj_actor = ((isset($arr['obj']['actor'])) ? $arr['obj']['actor'] : $arr['obj']['attributedTo']);
$mention = Activity::get_actor_bbmention($obj_actor);
$arr['body'] = sprintf( t('&#x1f501; Repeated %1$s\'s %2$s'), $mention, $arr['obj']['type']);
$arr['body'] = sprintf( t('&#x1F4E2; Repeated %1$s\'s %2$s'), $mention, $arr['obj']['type']);
}
$arr['author_xchan'] = $channel['channel_hash'];

View file

@ -2152,7 +2152,7 @@ function get_plink($item, $conversation_mode = true)
if (x($item, $key)) {
return [
'href' => (($zidify) ? zid($item[$key]) : $item[$key]),
'title' => t('Link to Source'),
'title' => t('Link to source'),
];
} else {
return false;
@ -4170,6 +4170,7 @@ function unicode_trim($s) {
// resources; so we'll accomplish this with generic string processing instead.
function strip_share_content($str)
{
$output = $str;
$begin = strpos($str, '[share');
$end = strrpos($str, '[/share]');
if ($begin && $end) {

File diff suppressed because it is too large Load diff

View file

@ -1,2 +1,2 @@
<?php
define ('STD_VERSION', '23.10.04');
define ('STD_VERSION', '23.10.10');

View file

@ -43,3 +43,9 @@
margin-left: 53px;
font-size: 20px;
}
.directory-collapse {
overflow-y: auto;
max-height: 400px;
}

View file

@ -30,5 +30,6 @@
}
.directory-collapse {
overflow: hidden;
overflow-y: auto;
max-height: 400px;
}

View file

@ -30,5 +30,6 @@
}
.directory-collapse {
overflow: hidden;
overflow-y: auto;
max-height: 400px;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -2,8 +2,9 @@
if(! function_exists("string_plural_select_he")) {
function string_plural_select_he($n){
return ($n != 1);
return ($n != 1);;
}}
App::$rtl = 1;
App::$strings["parent"] = "הורה";
App::$strings["Collection"] = "אוסף";
App::$strings["Principal"] = "";
@ -165,10 +166,10 @@ App::$strings["Some permissions may be inherited from your channel's <a href=\"s
App::$strings["Some permissions may be inherited from your channel's <a href=\"settings\"><strong>privacy settings</strong></a>, which have higher priority than individual settings. You can change those settings here but they wont have any impact unless the inherited setting changes."] = "";
App::$strings["Last update:"] = "עדכון אחרון:";
App::$strings["Public access denied."] = "גישה ציבורית נדחתה.";
App::$strings["%d rating"] = array(
App::$strings["%d rating"] = [
0 => "דירוג %d",
1 => "%d דירוגים",
);
];
App::$strings["Gender: "] = "מין: ";
App::$strings["Status: "] = "מצב: ";
App::$strings["Homepage: "] = "עמוד בית: ";
@ -443,10 +444,10 @@ App::$strings["%s : Not a valid email address."] = "%s : כתובת דוא״ל
App::$strings["Please join us on \$Projectname"] = "נשמח אם תצטרף אלינו ברשת \$Projectname";
App::$strings["Invitation limit exceeded. Please contact your site administrator."] = "מגבלת הזמנות נגמרה. אנא צור קשר עם מנהל האתר שלך.";
App::$strings["%s : Message delivery failed."] = "%s : מסירת הודעה נכשלה.";
App::$strings["%d message sent."] = array(
App::$strings["%d message sent."] = [
0 => "הודעה %d נשלחה.",
1 => "%d הודעות נשלחו.",
);
];
App::$strings["You have no more invitations available"] = "לא נותרו לך עוד הזמנות זמינות";
App::$strings["Send invitations"] = "שלח הזמנות";
App::$strings["Enter email addresses, one per line:"] = "הזן כתובות דוא״ל, אחת בכל שורה:";
@ -656,14 +657,14 @@ App::$strings["__ctx:title__ Attending"] = "נוכח";
App::$strings["__ctx:title__ Not attending"] = "לא נוכח";
App::$strings["__ctx:title__ Might attend"] = "עשוי להיווכח";
App::$strings["View all"] = "צפה בכולם";
App::$strings["__ctx:noun__ Like"] = array(
App::$strings["__ctx:noun__ Like"] = [
0 => "אוהב",
1 => "אוהבים",
);
App::$strings["__ctx:noun__ Dislike"] = array(
];
App::$strings["__ctx:noun__ Dislike"] = [
0 => "לא אוהב",
1 => "לא אוהבים",
);
];
App::$strings["Photo Tools"] = "כלי תצלום";
App::$strings["In This Photo:"] = "בתצלום זה:";
App::$strings["Map"] = "מפה";
@ -888,7 +889,7 @@ App::$strings["on server"] = "בשרת";
App::$strings["Server"] = "שרת";
App::$strings["By default, unfiltered HTML is allowed in embedded media. This is inherently insecure."] = "";
App::$strings["The recommended setting is to only allow unfiltered HTML from the following sites:"] = "";
App::$strings["https://youtube.com/<br>https://www.youtube.com/<br>https://youtu.be/<br>https://vimeo.com/<br>https://soundcloud.com/<br>"] = "";
App::$strings["https://youtube.com/<br>https://www.youtube.com/<br>https://youtu.be/<br />https://vimeo.com/<br>https://soundcloud.com/<br>"] = "";
App::$strings["All other embedded content will be filtered, <strong>unless</strong> embedded content from that site is explicitly blocked."] = "";
App::$strings["Security"] = "אבטחה";
App::$strings["Block public"] = "";
@ -921,14 +922,14 @@ App::$strings["Destination URL"] = "";
App::$strings["Mark hub permanently offline"] = "סמן מוקד בלתי מקוון לצמיתות";
App::$strings["Empty queue for this hub"] = "רוקן תור עבור מוקד זה";
App::$strings["Last known contact"] = "איש קשר מוכר אחרון";
App::$strings["%s account blocked/unblocked"] = array(
App::$strings["%s account blocked/unblocked"] = [
0 => "",
1 => "",
);
App::$strings["%s account deleted"] = array(
];
App::$strings["%s account deleted"] = [
0 => "חשבון %s נמחק",
1 => "%s חשבונות נמחקו",
);
];
App::$strings["Account not found"] = "חשבון לא נמצא";
App::$strings["Account '%s' deleted"] = "חשבון '%s' נמחק";
App::$strings["Account '%s' blocked"] = "חשבון '%s' נחסם";
@ -946,18 +947,18 @@ App::$strings["Expires"] = "פג";
App::$strings["Service Class"] = "מחלקת שירות";
App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "";
App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "";
App::$strings["%s channel censored/uncensored"] = array(
App::$strings["%s channel censored/uncensored"] = [
0 => "",
1 => "",
);
App::$strings["%s channel code allowed/disallowed"] = array(
];
App::$strings["%s channel code allowed/disallowed"] = [
0 => "",
1 => "",
);
App::$strings["%s channel deleted"] = array(
];
App::$strings["%s channel deleted"] = [
0 => "ערוץ %s נמחק",
1 => "%s ערוצים נמחקו",
);
];
App::$strings["Channel not found"] = "ערוץ לא נמצא";
App::$strings["Channel '%s' deleted"] = "ערוץ '%s' נמחק";
App::$strings["Channel '%s' censored"] = "ערוץ '%s' צונזר";
@ -1476,10 +1477,10 @@ App::$strings["dislike"] = "";
App::$strings["Share This"] = "שתף זאת";
App::$strings["share"] = "שתף";
App::$strings["Delivery Report"] = "";
App::$strings["%d comment"] = array(
App::$strings["%d comment"] = [
0 => "תגובה %d",
1 => "%d תגובות",
);
];
App::$strings["View %s's profile - %s"] = "";
App::$strings["to"] = "אל";
App::$strings["via"] = "מתוך";
@ -1642,19 +1643,19 @@ App::$strings["Edit Connection"] = "ערוך חיבור";
App::$strings["Message"] = "הודעה";
App::$strings["%s likes this."] = "%s אהב זאת.";
App::$strings["%s doesn't like this."] = "%s לא אוהב זאת.";
App::$strings["<span %1\$s>%2\$d people</span> like this."] = array(
App::$strings["<span %1\$s>%2\$d people</span> like this."] = [
0 => "<span %1\$s>איש %2\$d</span> אוהב זאת.",
1 => "<span %1\$s>%2\$d אנשים</span> אוהבים זאת.",
);
App::$strings["<span %1\$s>%2\$d people</span> don't like this."] = array(
];
App::$strings["<span %1\$s>%2\$d people</span> don't like this."] = [
0 => "<span %1\$s>איש %2\$d</span> לא אוהב זאת.",
1 => "<span %1\$s>%2\$d אנשים</span> לא אוהבים זאת.",
);
];
App::$strings["and"] = "ועוד";
App::$strings[", and %d other people"] = array(
App::$strings[", and %d other people"] = [
0 => ", ועוד איש %d אחר",
1 => ", ועוד %d אנשים אחרים",
);
];
App::$strings["%s like this."] = "%s אוהבים זאת.";
App::$strings["%s don't like this."] = "%s לא אוהבים זאת.";
App::$strings["Set your location"] = "קבע את המיקום שלך";
@ -1695,30 +1696,30 @@ App::$strings["Chatrooms"] = "חדרי שיחה";
App::$strings["Bookmarks"] = "סימניות";
App::$strings["Saved Bookmarks"] = "סימניות שמורות";
App::$strings["Manage Webpages"] = "נהל עמודי רשת";
App::$strings["__ctx:noun__ Attending"] = array(
App::$strings["__ctx:noun__ Attending"] = [
0 => "",
1 => "",
);
App::$strings["__ctx:noun__ Not Attending"] = array(
];
App::$strings["__ctx:noun__ Not Attending"] = [
0 => "",
1 => "",
);
App::$strings["__ctx:noun__ Undecided"] = array(
];
App::$strings["__ctx:noun__ Undecided"] = [
0 => "",
1 => "",
);
App::$strings["__ctx:noun__ Agree"] = array(
];
App::$strings["__ctx:noun__ Agree"] = [
0 => "מסכים",
1 => "מסכימים",
);
App::$strings["__ctx:noun__ Disagree"] = array(
];
App::$strings["__ctx:noun__ Disagree"] = [
0 => "לא מסכים",
1 => "לא מסכימים",
);
App::$strings["__ctx:noun__ Abstain"] = array(
];
App::$strings["__ctx:noun__ Abstain"] = [
0 => "",
1 => "",
);
];
App::$strings["Channel is blocked on this site."] = "ערוץ חסום באתר זה.";
App::$strings["Channel location missing."] = "מיקום ערוץ חסר.";
App::$strings["Response from remote channel was incomplete."] = "";
@ -1790,10 +1791,10 @@ App::$strings["Admin"] = "מנהל";
App::$strings["Site Setup and Configuration"] = "הבניית והגדרת אתר";
App::$strings["@name, #tag, ?doc, content"] = "@name, #tag, ?doc, content";
App::$strings["Please wait..."] = "אנא המתן...";
App::$strings["%d invitation available"] = array(
App::$strings["%d invitation available"] = [
0 => "הזמנה %d זמינה",
1 => "%d הזמנות זמינות",
);
];
App::$strings["Find Channels"] = "מצא ערוצים";
App::$strings["Enter name or interest"] = "הזן שם או עניין";
App::$strings["Connect/Follow"] = "התחבר/עקוב";
@ -1803,10 +1804,10 @@ App::$strings["Invite Friends"] = "הזמן חברים";
App::$strings["Advanced example: name=fred and country=iceland"] = "דוגמא מתקדמת: name=פרד וגם country=איסלנד";
App::$strings["Saved Folders"] = "תיקיות שמורות";
App::$strings["Everything"] = "כל דבר";
App::$strings["%d connection in common"] = array(
App::$strings["%d connection in common"] = [
0 => "",
1 => "",
);
];
App::$strings["show more"] = "הצג עוד";
App::$strings["Frequently"] = "באופן תדיר";
App::$strings["Hourly"] = "כל שעה";
@ -2045,34 +2046,34 @@ App::$strings["YYYY-MM-DD or MM-DD"] = "YYYY-MM-DD או MM-DD";
App::$strings["never"] = "";
App::$strings["less than a second ago"] = "לפניי פחות משניה";
App::$strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "לפני %1\$d %2\$s";
App::$strings["__ctx:relative_date__ year"] = array(
App::$strings["__ctx:relative_date__ year"] = [
0 => "שנה",
1 => "שנים",
);
App::$strings["__ctx:relative_date__ month"] = array(
];
App::$strings["__ctx:relative_date__ month"] = [
0 => "חודש",
1 => "חודשים",
);
App::$strings["__ctx:relative_date__ week"] = array(
];
App::$strings["__ctx:relative_date__ week"] = [
0 => "שבוע",
1 => "שבועות",
);
App::$strings["__ctx:relative_date__ day"] = array(
];
App::$strings["__ctx:relative_date__ day"] = [
0 => "יום",
1 => "ימים",
);
App::$strings["__ctx:relative_date__ hour"] = array(
];
App::$strings["__ctx:relative_date__ hour"] = [
0 => "שעה",
1 => "שעות",
);
App::$strings["__ctx:relative_date__ minute"] = array(
];
App::$strings["__ctx:relative_date__ minute"] = [
0 => "דקה",
1 => "דקות",
);
App::$strings["__ctx:relative_date__ second"] = array(
];
App::$strings["__ctx:relative_date__ second"] = [
0 => "שניה",
1 => "שניות",
);
];
App::$strings["%1\$s's birthday"] = "";
App::$strings["Happy Birthday %1\$s"] = "יום הולדת שמח %1\$s";
App::$strings["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "";

View file

@ -20,6 +20,7 @@ let page_load = true;
let loadingPage = false;
let pageHasMoreContent = true;
let divmore_height = 400;
let itemScroll = 'hidden';
let last_filestorage_id = null;
let mediaPlaying = false;
let contentHeightDiff = 0;
@ -740,6 +741,8 @@ function updateConvItems(mode,data) {
let ident = $(this).attr('id');
let convId = ident.replace('thread-wrapper-','');
let commentWrap = $('#'+ident+' .collapsed-comments').attr('id');
let existingItem = $('#wall-item-content-' + ident);
let itmId = 0;
@ -766,12 +769,13 @@ function updateConvItems(mode,data) {
}
else {
$('#' + ident).replaceWith($(this));
}
}
// set the comment state to the state we discovered earlier
if(isVisible)
if(isVisible) {
showHideComments(itmId);
}
let commentBody = localStorage.getItem("comment_body-" + convId);
@ -894,6 +898,26 @@ function extendHeight(id)
}
}
function dirExtendHeight(id)
{
let itemWrapper = $("#directory-collapse-" + id);
let scrollIndicator = $("#directory-scroll-" + id + ' i');
if (! divmore_height) {
return;
}
if ($(itemWrapper).hasClass('scrollable') && !$(itemWrapper).hasClass('scrollDisabled')) {
$(itemWrapper).addClass('scrollDisabled');
$(itemWrapper).css('max-height', 'none');
$(scrollIndicator).removeClass('fa-chevron-down').addClass('fa-chevron-up');
}
else {
$(itemWrapper).removeClass('scrollDisabled');
$(itemWrapper).css('max-height', divmore_height + 'px');
$(scrollIndicator).removeClass('fa-chevron-up').addClass('fa-chevron-down');
}
}
function collapseHeight() {
console.log('collapseHeight: ' + divmore_height);
@ -907,15 +931,19 @@ function collapseHeight() {
collapsed++;
let scrollid = $(this).attr('id');
scrollid = scrollid.replace('wall-item-content-', '');
scrollid = scrollid.replace('directory-collapse-', '');
if (scrollable) {
$(this).addClass('scrollable');
$(this).css('max-height', divmore_height + 'px');
$(this).css('overflow-y', itemScroll);
$("#wall-item-scroll-" + scrollid).show();
$("#directory-scroll-" + scrollid).show();
}
else {
$(this).removeClass('scrollable');
$("#wall-item-scroll-" + scrollid).hide();
$("#directory-scroll-" + scrollid).hide();
}
});
console.log('entries processed: ' + collapsed);

View file

@ -38,7 +38,6 @@
{{if $item.pinned}}
<span class="float-end wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="fa fa-thumb-tack">&nbsp;</i></span>
{{/if}}
<span class="float-end" id="wall-item-scroll-{{$item.id}}" onclick="extendHeight({{$item.id}});"><i class="fa fa-chevron-down">&nbsp;</i></span>
{{if $item.isdraft}}
<span class="float-end wall-item-draft" title="{{$item.draft_txt}}" id="wall-item-draft-{{$item.id}}"><a href="editpost/{{$item.id}}"><i class="fa fa-floppy-o">&nbsp;</i></a></span>
{{/if}}
@ -86,6 +85,8 @@
{{* $item.comment_order *}}
</div>
</div>
<div style="text-align: center"><span class="fakelink" id="wall-item-scroll-{{$item.id}}" onclick="extendHeight({{$item.id}});"><i class="fa fa-chevron-down">&nbsp;</i></span>
</div>
{{/if}}
{{if $item.has_tags}}
<div class="p-2 wall-item-tools clearfix">
@ -156,7 +157,7 @@
<a class="dropdown-item" href="#" onclick="jotEmbed({{$item.id}},{{$item.item_type}}); return false"><i class="generic-icons-nav fa fa-fw fa-share" title="{{$item.embed}}"></i>{{$item.embed}}</a>
{{/if}}
{{if $item.share}}
<a class="dropdown-item" href="#" onclick="jotShare({{$item.id}},{{$item.item_type}}); return false"><i class="generic-icons-nav fa fa-fw fa-share" title="{{$item.share}}"></i>{{$item.share}}</a>
<a class="dropdown-item" href="#" onclick="jotShare({{$item.id}},{{$item.item_type}}); return false"><i class="generic-icons-nav fa fa-fw fa-bullhorn" title="{{$item.share}}"></i>{{$item.share}}</a>
{{/if}}
{{if $item.plink}}
<a class="dropdown-item" href="{{$item.plink.href}}" title="{{$item.plink.title}}" class="u-url"><i class="generic-icons-nav fa fa-fw fa-external-link"></i>{{$item.plink.title}}</a>

View file

@ -14,7 +14,7 @@
</div>
<h3>{{if $entry.type == 2}}<i class="fa fa-tags" title="{{$entry.collections_label}}"></i>&nbsp;{{elseif $entry.type == 1}}<i class="fa fa-comments-o" title="{{$entry.forum_label}}"></i>&nbsp;{{/if}}<a href='{{$entry.profile_link}}' >{{$entry.name}}</a>{{if $entry.online}}&nbsp;<i class="fa fa-asterisk online-now" title="{{$entry.online}}"></i>{{/if}}</h3>
</div>
<div class="section-content-tools-wrapper directory-collapse">
<div id="directory-collapse-{{$entry.hash}}" class="section-content-tools-wrapper directory-collapse">
<div class="contact-photo-wrapper" id="directory-photo-wrapper-{{$entry.hash}}" >
<div class="contact-photo" id="directory-photo-{{$entry.hash}}" >
<a href="{{$entry.profile_link}}" class="directory-profile-link" id="directory-profile-link-{{$entry.hash}}" >
@ -81,5 +81,9 @@
{{if $entry.cover}}
<img class="directory-photo-cover" src="{{$entry.cover}}" alt="{{$entry.altcover}}" style="margin-top: 1rem; width: 100%; maxwidth: 100%;" title={{$entry.altcover}}" />
{{/if}}
</div>
<div class="section-content-tools-wrapper" style="text-align: center">
<span class="fakelink" id="directory-scroll-{{$entry.hash}}" onclick="dirExtendHeight('{{$entry.hash}}');"><i class="fa fa-chevron-down">&nbsp;</i></span>
</div>
</div>

View file

@ -63,6 +63,7 @@
{{include file="field_input.tpl" field=$indentpx}}
{{include file="field_input.tpl" field=$channel_divmore_height}}
{{include file="field_input.tpl" field=$stream_divmore_height}}
{{include file="field_checkbox.tpl" field=$item_scroll}}
{{include file="field_checkbox.tpl" field=$nosmile}}
{{include file="field_checkbox.tpl" field=$channel_menu}}
{{include file="field_checkbox.tpl" field=$filter_menu_open}}

View file

@ -15,7 +15,7 @@
</div>
<h3><a href='{{$entry.profile_link}}' >{{$entry.name}}</a></h3>
</div>
<div class="section-content-tools-wrapper directory-collapse">
<div id="directory-collapse-{{$entry.hash}}" class="section-content-tools-wrapper directory-collapse">
<div class="contact-photo-wrapper" id="directory-photo-wrapper-{{$entry.hash}}" >
<!--div class="contact-photo" id="directory-photo-{{$entry.hash}}" -->
<a href="{{$entry.profile_link}}" class="directory-profile-link" id="directory-profile-link-{{$entry.hash}}" >
@ -80,5 +80,8 @@
{{/if}}
</div>
</div>
<div class="section-content-tools-wrapper" style="text-align: center">
<span class="fakelink" id="directory-scroll-{{$entry.hash}}" onclick="dirExtendHeight('{{$entry.hash}}');"><i class="fa fa-chevron-down">&nbsp;</i></span>
</div>
<hr>
</div>