Version 5.0.6

This commit is contained in:
Neo committed 2025-12-19 18:55:49 -08:00
1 parent a3a4a9ccbd
commit b89858b2ff
1214 files changed
+92828 -14859

No files matched your search

+126 -97
View File
@@ -58,7 +58,7 @@
{{endif}}
<div class='ipsPageHeader__row ipsPageHeader__row--footer'>
<div class='ipsPageHeader__primary'>
<ul class='ipsList ipsList--inline ipsList--icons i-link-color_inherit'>
<ul class='ipsList ipsList--inline ipsList--icons i-link-color_inherit' data-ips-hook="iconsList">
<li><i class="fa-solid fa-photo-film"></i> {lang="num_images" pluralize="$album->count_imgs"}</li>
{{if $album->use_comments && $album->comments > 0}}
<li><i class="fa-regular fa-images"></i> {lang="gallery_album_num_comments_lc" pluralize="$album->comments"}</li>
@@ -67,7 +67,7 @@
<li><i class="fa-regular fa-images"></i> {lang="gallery_image_comments_s" pluralize="$album->count_comments"}</li>
{{endif}}
{{if $album->use_reviews && $album->reviews > 0}}
<li><i class="fa-regular fa-pen-to-square"></i> {lang="gallery_album_num_reviews_lc" pluralize="$album->reviews"}</li>
<li><i class="fa-solid fa-pen-to-square"></i> {lang="gallery_album_num_reviews_lc" pluralize="$album->reviews"}</li>
{{endif}}
{{if $album->views >= 0}}
<li id='elAlbumViews'>
@@ -135,7 +135,7 @@
{{endif}}
]]></template>
<template template_group="browse" template_name="albumComments" template_data="$album" template_location="front" template_app="gallery"><![CDATA[<div>
<div data-controller='core.front.core.commentFeed, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-baseURL='{$album->url()}' {{if $album->isLastPage()}}data-lastPage{{endif}} data-feedID='{$album->feedId}' id='comments'>
<div data-controller='core.front.core.commentFeed, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-baseURL='{$album->url()}' {{if $album->isLastPage()}}data-lastPage{{endif}} data-feedID='{$album->feedId}' id='comments' data-follow-area-id="album-{$album->id}">
<div>
<h2 class='ipsBox__header' hidden data-role="comment_count" data-commentCountString="js_gallery_album_num_comments_uc">{lang="gallery_album_num_comments_uc" pluralize="$album->comments"}</h2>
{{if $album->commentPageCount() > 1}}
@@ -197,7 +197,7 @@
</div>
]]></template>
<template template_group="browse" template_name="albumReviews" template_data="$album" template_location="front" template_app="gallery"><![CDATA[
<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='reviews' data-baseURL='{$album->url()}' {{if $album->isLastPage('reviews')}}data-lastPage{{endif}} data-feedID='{$album->reviewFeedId}' id='reviews'>
<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='reviews' data-baseURL='{$album->url()}' {{if $album->isLastPage('reviews')}}data-lastPage{{endif}} data-feedID='{$album->reviewFeedId}' id='reviews' data-follow-area-id="album-{$album->id}">
{{if $album->reviewForm()}}
<div id='elImageReviewForm'>
{$album->reviewForm()|raw}
@@ -533,37 +533,63 @@
</li>]]></template>
<template template_group="browse" template_name="categoryCarousel" template_data="$categories" template_location="front" template_app="gallery"><![CDATA[{{if \count( $categories )}}
{{foreach $categories as $category}}
<li class="{$category->ui( 'css' )}" {$category->ui( 'dataAttributes' )}>
<figure class='ipsFigure i-margin-bottom_2'>
<a href='{$category->url()}' class='ipsFigure__main i-aspect-ratio_7'>
{{if $category->can('view')}}
<li class="ipsData__item {$category->ui( 'css' )}" {$category->ui( 'dataAttributes' )}>
<a href='{$category->url()}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{{if settings.club_nodes_in_apps and $club = $category->club()}}{lang="club_node" sprintf="$club->name, $category->_title"}{{else}}{$category->_title}{{endif}}</span></a>
<figure class='ipsData__image'>
{{if $category->lastImage() && $category->lastImage()->media && !$category->cover_img_id}}
<video preload="metadata" loading="lazy"{{if $category->lastImage()->masked_file_name }} poster="{file="$category->lastImage()->masked_file_name" extension="gallery_Images"}"{{endif}}>
<source src="{file="$category->lastImage()->original_file_name" extension="gallery_Images"}{{if !$category->lastImage()->masked_file_name }}#t=1{{endif}}" type='{$category->lastImage()->file_type}' />
</video>
<i class="ipsFigure__play"></i>
{{elseif $category->coverPhoto('small') !== NULL}}
<img src="{$category->coverPhoto('small')}" alt="" loading="lazy">
{{else}}
<i class="ipsFigure__icon"></i>
<i></i>
{{endif}}
<span class='ipsInvisible'>{{if settings.club_nodes_in_apps and $club = $category->club()}}{lang="club_node" sprintf="$club->name, $category->_title"}{{else}}{$category->_title}{{endif}}</span>
</a>
{{if $category->lastImage() && $category->lastImage()->media && !$category->cover_img_id}}
{template="nsfwOverlay" app="gallery" location="front" group="global" params="$category->lastImage()"}
{{elseif $category->coverPhoto('small') !== NULL}}
{template="nsfwOverlay" app="gallery" location="front" group="global" params="$category->coverPhotoObject()"}
{{endif}}
</figure>
<h3 class='ipsTitle ipsTitle--h5'>
<a href='{$category->url()}'>
{{if settings.club_nodes_in_apps and $club = $category->club()}}
{lang="club_node" sprintf="$club->name, $category->_title"}
{{else}}
{$category->_title}
{{if $category->lastImage() && $category->lastImage()->media && !$category->cover_img_id}}
{template="nsfwOverlay" app="gallery" location="front" group="global" params="$category->lastImage()"}
{{elseif $category->coverPhoto('small') !== NULL}}
{template="nsfwOverlay" app="gallery" location="front" group="global" params="$category->coverPhotoObject()"}
{{endif}}
</a>
</h3>
</li>
</figure>
<div class="ipsData__content">
<div class="ipsData__main">
{{if settings.club_nodes_in_apps and $club = $category->club()}}
<div class="ipsData__club"><a href="{$club->url()}">{$club->name}</a></div>
{{endif}}
<h2 class='ipsData__title'><a href='{$category->url()}'>{$category->_title}</a></h2>
</div>
<div class="ipsData__extra">
{{if $category->lastImage() !== NULL}}
<div class="ipsData__last">
{datetime="$category->lastImage()->date"}
</div>
{{endif}}
<ul class='ipsData__stats'>
{{if $category->allow_comments and $category->_commentsForDisplay}}
<li data-statType='comments'>
<span class='ipsData__stats-icon' data-stat-value="{$category->_commentsForDisplay}" aria-hidden="true" data-ipstooltip title='{lang="cat_comment_count" pluralize="$category->_commentsForDisplay"}'></span>
<span class='ipsData__stats-label'>{lang="cat_comment_count" pluralize="$category->_commentsForDisplay"}</span>
</li>
{{endif}}
{{if $category->allow_albums and $category->public_albums}}
<li data-statType='albums'>
<span class='ipsData__stats-icon' data-stat-value="{$category->public_albums}" aria-hidden="true" data-ipstooltip title='{lang="cat_album_count" pluralize="$category->public_albums"}'></span>
<span class='ipsData__stats-label'>{lang="cat_album_count" pluralize="$category->public_albums"}</span>
</li>
{{endif}}
{{$count = \IPS\gallery\Image::contentCount( $category );}}
{{if $count}}
<li data-statType='images'>
<span class='ipsData__stats-icon' data-stat-value="{number="$count"}" aria-hidden="true" data-ipstooltip title='{lang="cat_img_count" pluralize="$count"}'></span>
<span class='ipsData__stats-label'>{lang="cat_img_count" pluralize="$count"}</span>
</li>
{{endif}}
</ul>
</div>
</div>
</li>
{{endif}}
{{endforeach}}
{{endif}}]]></template>
<template template_group="browse" template_name="categoryGrid" template_data="$categories" template_location="front" template_app="gallery"><![CDATA[
@@ -593,14 +619,11 @@
</figure>
<h2 class='ipsTitle ipsTitle--h5 ipsTitle--margin'>
<a href='{$category->url()}'>
{{if settings.club_nodes_in_apps and $club = $category->club()}}
{lang="club_node" sprintf="$club->name, $category->_title"}
{{else}}
{$category->_title}
{{endif}}
</a>
<a href='{$category->url()}'>{$category->_title}</a>
</h2>
{{if settings.club_nodes_in_apps and $club = $category->club()}}
<div class='i-color_soft'><a href='{$club->url()}'>{$club->name}</a></div>
{{endif}}
<ul class='ipsList ipsList--inline i-color_soft i-justify-content_center i-font-size_-1'>
{{if $category->lastImage() !== NULL}}<li><i class='fa-regular fa-clock'></i> {datetime="$category->lastImage()->date"}</li>{{endif}}
{{if $category->allow_comments && $category->_commentsForDisplay > 0}}
@@ -630,7 +653,7 @@
{{elseif $category->coverPhoto('small') !== NULL}}
<img src="{$category->coverPhoto('small')}" alt="" loading="lazy">
{{else}}
<i></i>
<span class='ipsIcon ipsIcon--fa' aria-hidden="true"><i class="fa-ips"></i></span>
{{endif}}
{{if $category->lastImage() && $category->lastImage()->media && !$category->cover_img_id}}
{template="nsfwOverlay" app="gallery" location="front" group="global" params="$category->lastImage()"}
@@ -640,15 +663,10 @@
</figure>
<div class="ipsData__content">
<div class="ipsData__main">
<h2 class='ipsData__title'>
<a href='{$category->url()}'>
{{if settings.club_nodes_in_apps and $club = $category->club()}}
{lang="club_node" sprintf="$club->name, $category->_title"}
{{else}}
{$category->_title}
{{endif}}
</a>
</h2>
{{if settings.club_nodes_in_apps and $club = $category->club()}}
<div class="ipsData__club"><a href="{$club->url()}">{$club->name}</a></div>
{{endif}}
<h2 class='ipsData__title'><a href='{$category->url()}'>{$category->_title}</a></h2>
</div>
<div class="ipsData__extra">
{{if $category->lastImage() !== NULL}}
@@ -658,7 +676,7 @@
{{endif}}
<ul class='ipsData__stats'>
{{if $category->allow_comments and $category->_commentsForDisplay}}
<li data-statType='album_comments'>
<li data-statType='comments'>
<span class='ipsData__stats-icon' data-stat-value="{$category->_commentsForDisplay}" aria-hidden="true" data-ipstooltip title='{lang="cat_comment_count" pluralize="$category->_commentsForDisplay"}'></span>
<span class='ipsData__stats-label'>{lang="cat_comment_count" pluralize="$category->_commentsForDisplay"}</span>
</li>
@@ -671,7 +689,7 @@
{{endif}}
{{$count = \IPS\gallery\Image::contentCount( $category );}}
{{if $count}}
<li data-statType='albums'>
<li data-statType='images'>
<span class='ipsData__stats-icon' data-stat-value="{number="$count"}" aria-hidden="true" data-ipstooltip title='{lang="cat_img_count" pluralize="$count"}'></span>
<span class='ipsData__stats-label'>{lang="cat_img_count" pluralize="$count"}</span>
</li>
@@ -867,7 +885,7 @@
</div>
{{endif}}
</div>]]></template>
<template template_group="browse" template_name="index" template_data="$featured, $new, $recentlyUpdatedAlbums, $recentComments" template_location="front" template_app="gallery"><![CDATA[<header class="ipsPageHeader">
<template template_group="browse" template_name="index" template_data="$featured, $new, $recentlyUpdatedAlbums, $recentComments" template_location="front" template_app="gallery"><![CDATA[<header class="ipsPageHeader ipsPageHeader--galleryIndex">
<div class="ipsPageHeader__row">
<div data-ips-hook="header" class="ipsPageHeader__primary">
<h1 data-ips-hook="title" class="ipsPageHeader__title">{lang="gallery_title"}</h1>
@@ -882,30 +900,29 @@
{{if settings.gallery_overview_show_categories}}
{{$clubNodes = settings.club_nodes_in_apps ? \IPS\gallery\Category::clubNodes() : array();}}
<section class="ipsBox ipsPull">
<section class="ipsBox ipsBox--galleryCategories ipsPull">
<header class='ipsBox__header'>
<h2>{lang="gallery_categories"}</h2>
<span class='ipsBox__header-secondary'>
<a href='{url="app=gallery&module=gallery&controller=browse&do=categories" seoTemplate="gallery_categories"}'>{lang="gallery_view_all_categories"}</a>
</span>
<h2>{lang="gallery_categories"} &middot; <a href='{url="app=gallery&module=gallery&controller=browse&do=categories" seoTemplate="gallery_categories"}' class="i-color_soft">{lang="gallery_view_all_categories"}</a></h2>
{template="carouselNavigation" group="global" app="core" params="'gallery-categories'"}
</header>
<div class="ipsBox__content">
<ul class='ipsCarousel ipsCarousel--padding i-basis_240 i-text-align_center' {{if settings.gallery_nsfw}}data-controller="gallery.front.global.nsfw"{{endif}} id='gallery-categories' tabindex="0">
{{if $rootCategories = \IPS\gallery\Category::roots()}}
{template="categoryCarousel" group="browse" app="gallery" params="$rootCategories"}
{{endif}}
<i-data>
<ul class='ipsData ipsData--wallpaper ipsData--carousel ipsData--galleryCategories' {{if settings.gallery_nsfw}}data-controller="gallery.front.global.nsfw"{{endif}} id='gallery-categories' tabindex="0">
{{if $rootCategories = \IPS\gallery\Category::roots()}}
{template="categoryCarousel" group="browse" app="gallery" params="$rootCategories"}
{{endif}}
{{if settings.club_nodes_in_apps and $clubNodes = \IPS\gallery\Category::clubNodes()}}
{template="categoryCarousel" group="browse" app="gallery" params="$clubNodes"}
{{endif}}
</ul>
{template="carouselNavigation" group="global" app="core" params="'gallery-categories'"}
{{if settings.club_nodes_in_apps and $clubNodes = \IPS\gallery\Category::clubNodes()}}
{template="categoryCarousel" group="browse" app="gallery" params="$clubNodes"}
{{endif}}
</ul>
</i-data>
</div>
</section>
{{endif}}
{{if !empty( $featured )}}
<section class='ipsBox ipsPull' {{if settings.gallery_nsfw}}data-controller="gallery.front.global.nsfw"{{endif}}>
<section class='ipsBox ipsBox--galleryFeatured ipsPull' {{if settings.gallery_nsfw}}data-controller="gallery.front.global.nsfw"{{endif}}>
<header class='ipsBox__header'>
<h2>{lang="featured_images"}</h2>
{template="carouselNavigation" group="global" app="core" params="'gallery-featured'"}
@@ -953,7 +970,7 @@
{{endif}}
{{if !empty( $new )}}
<section class='ipsBox ipsPull'{{if settings.gallery_nsfw}} data-controller="gallery.front.global.nsfw"{{endif}}>
<section class='ipsBox ipsBox--newImages ipsPull'{{if settings.gallery_nsfw}} data-controller="gallery.front.global.nsfw"{{endif}}>
<h2 class='ipsBox__header'>{lang="new_images"}</h2>
<div class='i-padding_1'>
<ul class='ipsMasonry'>
@@ -997,12 +1014,12 @@
{{endif}}
{{if \count( $recentlyUpdatedAlbums )}}
<section class='ipsBox ipsPull' {{if settings.gallery_nsfw}}data-controller="gallery.front.global.nsfw"{{endif}}>
<section class='ipsBox ipsBox--updatedAlbums ipsPull' {{if settings.gallery_nsfw}}data-controller="gallery.front.global.nsfw"{{endif}}>
<h2 class='ipsBox__header'>{lang="gallery_recently_updated_albums"}</h2>
<div class='i-padding_3'>
<ul class='ipsGrid i-basis_220 i-gap_3 i-text-align_center'>
{{foreach $recentlyUpdatedAlbums as $album}}
<li class='i-_margin-block_2'>
<li>
<figure class='ipsFigure'>
<a href='{$album->url()}' class='ipsFigure__main i-aspect-ratio_7' aria-hidden="true" tabindex="-1">
{{if $album->asNode()->coverPhoto('masked')}}
@@ -1014,10 +1031,10 @@
<span class="ipsInvisible">{$album->name}</span>
{template="nsfwOverlay" app="gallery" location="front" group="global" params="$album->asNode()->coverPhotoObject()"}
</figure>
<h2 class='ipsTitle ipsTitle--h5'>
<h2 class='ipsTitle ipsTitle--h5 i-margin-top_2'>
<a href='{$album->url()}'>{$album->name}</a>
</h2>
<ul class='ipsList ipsList--inline i-justify-content_center i-font-size_-1 i-color_soft'>
<ul class='ipsList ipsList--inline i-justify-content_center i-font-size_-1 i-color_soft i-margin-top_2'>
<li data-ipsTooltip title='{lang="num_images" pluralize="$album->count_imgs"}'><i class='fa-solid fa-camera-retro i-opacity_5'></i> {$album->count_imgs}</li>
{{if $album->use_comments && $album->comments > 0}}
<li data-ipsTooltip title='{lang="gallery_album_num_comments_lc" pluralize="$album->comments"}'><i class='fa-solid fa-comment i-opacity_5'></i> {$album->comments}</li>
@@ -1517,7 +1534,7 @@
{{if !isset( \IPS\Request::i()->_review ) and \IPS\Member::loggedIn()->member_id}}
<div data-role='reviewIntro' class="i-padding_3">
<h3 class="i-margin-bottom_2"><strong class="i-color_hard i-font-weight_600">{lang="review_intro_1" sprintf="\IPS\Member::loggedIn()->name"}</strong> <span class='i-color_soft i-font-weight_500'>{lang="review_intro_2"}</span></h3>
<button type="button" class='ipsButton ipsButton--primary ipsButton--small' data-action='writeReview'><i class="fa-regular fa-pen-to-square"></i><span>{lang="write_a_review"}</span></button>
<button type="button" class='ipsButton ipsButton--primary ipsButton--small' data-action='writeReview'><i class="fa-solid fa-pen-to-square"></i><span>{lang="write_a_review"}</span></button>
</div>
{{endif}}
<ul class='ipsForm ipsForm--vertical ipsForm--gallery-review' data-role='reviewForm' {{if !isset( \IPS\Request::i()->_review ) and \IPS\Member::loggedIn()->member_id}}hidden{{endif}}>
@@ -1528,7 +1545,7 @@
{{endforeach}}
<li class='ipsFieldRow'>
<div class='ipsFieldRow__content'>
<button type='submit' class='ipsButton ipsButton--primary'><i class="fa-regular fa-pen-to-square"></i><span>{lang="add_review"}</span></button>
<button type='submit' class='ipsButton ipsButton--primary'><i class="fa-solid fa-pen-to-square"></i><span>{lang="add_review"}</span></button>
</div>
</li>
</ul>
@@ -1627,7 +1644,15 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<div data-ips-hook="galleryCommentUsername" class='ipsEntry__username'>
<h3>{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef(), NULL, \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Anonymous' ) ? $comment->isAnonymous() : FALSE"}</h3>
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Anonymous' ) AND !$comment->isAnonymous()}}
<span class='ipsEntry__group'>{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->formattedName" raw="true"}</span>
<span class='ipsEntry__group'>
{{if $comment->author()->modShowBadge()}}
<a href='{url="app=core&module=staffdirectory&controller=directory" seoTemplate="staffdirectory"}' class="ipsEntry__moderatorBadge" data-ipsTooltip title='{lang="member_is_moderator" sprintf="$comment->author()->name"}'>
{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->formattedName" raw="true"}
</a>
{{else}}
{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->formattedName" raw="true"}
{{endif}}
</span>
{{endif}}
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Anonymous' ) and $comment->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{$comment->url( 'reveal' )->csrf()}"><span class="ipsAnonymousIcon" data-ipsTooltip title='{lang="post_anonymously_reveal"}'></span></a>
@@ -2358,7 +2383,15 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<div data-ips-hook="galleryReviewUsername" class='ipsEntry__username'>
<h3>{template="userLink" app="core" group="global" params="$review->author(), $review->warningRef(), NULL, $review->isAnonymous()"}</h3>
{{if !$review->isAnonymous()}}
<span class='ipsEntry__group'>{expression="\IPS\Member\Group::load( $review->author()->member_group_id )->formattedName" raw="true"}</span>
<span class='ipsEntry__group'>
{{if $review->author()->modShowBadge()}}
<a href='{url="app=core&module=staffdirectory&controller=directory" seoTemplate="staffdirectory"}' class="ipsEntry__moderatorBadge" data-ipsTooltip title='{lang="member_is_moderator" sprintf="$review->author()->name"}'>
{expression="\IPS\Member\Group::load( $review->author()->member_group_id )->formattedName" raw="true"}
</a>
{{else}}
{expression="\IPS\Member\Group::load( $review->author()->member_group_id )->formattedName" raw="true"}
{{endif}}
</span>
{{endif}}
</div>
<p class='ipsPhotoPanel__secondary'>
@@ -2725,6 +2758,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<table class="ipsTable ipsTable_zebra">
<thead>
<tr>
<th width="60"></th>
<th>{lang="member"}</th>
<th>{lang="gallery_images"}</th>
</tr>
@@ -2737,7 +2771,8 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
{{$member = new \IPS\Member;}}
{{endif}}
<tr>
<td>{template="userPhoto" app="core" group="global" params="$member"} {$member->name}</td>
<td>{template="userPhoto" app="core" group="global" params="$member"}</td>
<td>{$member->name}</td>
<td><a href='{$member->url()->setQueryString( array( 'do' => 'content', 'type' => 'gallery_image' ) )}' target='_blank' rel='noopener'>{$row['images']}</a></td>
</tr>
{{endforeach}}
@@ -2840,7 +2875,8 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
{lang="gallery_submit_prefix_cat" sprintf="$container['category']->_title"}
{{endif}}
</div>]]></template>
<template template_group="submit" template_name="createAlbum" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="gallery"><![CDATA[<form accept-charset='utf-8' class="ipsFormWrap ipsFormWrap--create-album" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
<template template_group="submit" template_name="createAlbum" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="gallery"><![CDATA[{{$dropdownFields = [ 'set_album_owner', 'album_type', 'album_sort_options', 'album_sort_options', 'album_allow_comments', 'album_allow_reviews', 'album_use_comments', 'album_use_reviews', 'album_type', 'album_allowed_access', 'album_submit_type', 'album_submit_access_members', 'album_submit_access_groups', 'set_album_owner', 'album_owner' ];}}
<form accept-charset='utf-8' class="ipsFormWrap ipsFormWrap--create-album" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
<input type="hidden" name="{$id}_submitted" value="1">
{{foreach $hiddenValues as $k => $v}}
{{if \is_array($v)}}
@@ -2858,7 +2894,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<ul class='cGalleryDialog_formPanel'>
{{foreach $elements as $collection}}
{{foreach $collection as $inputName => $input}}
{{if \in_array( $inputName, array( 'album_name', 'album_description' ) )}}
{{if !\in_array( $inputName, $dropdownFields )}}
{{if \is_object( $input ) }}
{$input->rowHtml($form)|raw}
{{else}}
@@ -3277,7 +3313,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
</div>
<div data-role="editedImageDetailsForm" class='ipsHide'></div>
</div>]]></template>
<template template_group="view" template_name="comments" template_data="$image" template_location="front" template_app="gallery"><![CDATA[<div data-controller='core.front.core.commentFeed, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-baseURL='{$image->url()}' {{if $image->isLastPage()}}data-lastPage{{endif}} data-feedID='{$image->feedId}' id='comments' class="ipsEntries ipsEntries--comments ipsEntries--gallery-comments">
<template template_group="view" template_name="comments" template_data="$image" template_location="front" template_app="gallery"><![CDATA[<div data-controller='core.front.core.commentFeed, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-baseURL='{$image->url()}' {{if $image->isLastPage()}}data-lastPage{{endif}} data-feedID='{$image->feedId}' id='comments' class="ipsEntries ipsEntries--comments ipsEntries--gallery-comments" data-follow-area-id="image-{$image->id}">
{template="featuredComments" group="global" app="gallery" params="$image->featuredComments(), $image->url()->setQueryString('tab', 'comments')->setQueryString('recommended', 'comments')"}
@@ -3456,14 +3492,14 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<template template_group="view" template_name="imageFrame" template_data="$image" template_location="front" template_app="gallery"><![CDATA[
<div id='elGalleryImage' class='elGalleryImage' data-role="imageFrame" {{if $image->data}}data-imageSizes='{$image->data}'{{endif}}>
{{if $image->media }}
<div class='cGallery_videoContainer'>
<div class='cGallery_videoContainer' data-ips-hook="videoContainer">
<video data-controller="core.global.core.embeddedvideo" id="elGalleryVideo" data-role="video" controls preload="auto" width="100%" height="100%"{{if $image->masked_file_name }} poster="{file="$image->masked_file_name" extension="gallery_Images"}"{{endif}}>
<source src="{file="$image->original_file_name" extension="gallery_Images"}" type='{$image->file_type}' />
<embed wmode="opaque" autoplay="true" showcontrols="true" showstatusbar="true" showtracker="true" src="{file="$image->original_file_name" extension="gallery_Images"}" width="480" height="360" type='{$image->file_type}' />
</video>
</div>
{{else}}
<div class='cGalleryViewImage' data-role='notesWrapper' data-controller='gallery.front.view.notes' data-imageID='{$image->id}' {{if $image->canEdit()}}data-editable{{endif}} data-notesData='{$image->_notes_json}'>
<div class='cGalleryViewImage' data-role='notesWrapper' data-controller='gallery.front.view.notes' data-imageID='{$image->id}' {{if $image->canEdit()}}data-editable{{endif}} data-notesData='{$image->_notes_json}' data-ips-hook="imageContainer">
<a href='{file="$image->masked_file_name" extension="gallery_Images"}' title='{lang="view_in_lightbox"}' data-ipsLightbox>
{{$imageWidth=isset( $image->_dimensions['small'][0] ) ? $image->_dimensions['small'][0] : 0;}}
{{$imageHeight=isset( $image->_dimensions['small'][1] ) ? $image->_dimensions['small'][1] : 0;}}
@@ -3488,7 +3524,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<ul class='ipsMenu ipsMenu_auto ipsHide' id='elImageTools_menu'>
{{if $image->canEdit()}}
<li class='ipsMenu_item ipsResponsive_hidePhone'><a href='#' title='{lang="add_image_note"}' data-action='addNote'>
<i class='fa-regular fa-pen-to-square'></i> {lang="add_image_note"}</a>
<i class='fa-solid fa-pen-to-square'></i> {lang="add_image_note"}</a>
</li>
{{if !$image->media}}
<li class='ipsMenu_item ipsMenu_subItems'>
@@ -3583,7 +3619,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<div data-role='imageDescription'>
<header class='ipsPageHeader'>
<div class="ipsPageHeader__row">
<div class="ipsPageHeader__primary">
<div class="ipsPageHeader__primary" data-ips-hook="header">
<div class='ipsPageHeader__title'>
<h1>
{{if $image->canEdit()}}
@@ -3594,7 +3630,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<span>{$image->caption}</span>
{{endif}}
</h1>
<div class='ipsBadges'>
<div class='ipsBadges' data-ips-hook="badges">
{{foreach $image->badges() as $badge}}{$badge|raw}{{endforeach}}
</div>
</div>
@@ -3613,10 +3649,10 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
</div>
</div>
<div class="ipsPageHeader__row ipsPageHeader__row--footer">
<div class='ipsPageHeader__primary'>
<div class='ipsPageHeader__primary' data-ips-hook="footer">
<div class='ipsPhotoPanel ipsPhotoPanel--inline'>
{template="userPhoto" app="core" group="global" params="$image->author(), 'mini', $image->warningRef()"}
<div class='ipsPhotoPanel__text'>
<div class='ipsPhotoPanel__text' data-ips-hook="author">
<p class="ipsPhotoPanel__primary">{lang="byline_nodate_itemprop" htmlsprintf="$image->author()->link( $image->warningRef() )"}</p>
<ul class='ipsPhotoPanel__secondary ipsList ipsList--sep'>
<li>{datetime="$image->date"}</li>
@@ -3630,7 +3666,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
</div>
</div>
</header>
<div class='ipsEntry__post i-padding_3'>
<div class='ipsEntry__post i-padding_3' data-ips-hook="info">
{{if $image->description}}
<div class='ipsRichText ipsRichText--user' data-controller="core.front.core.lightboxedImages">
{$image->content()|raw}
@@ -3669,7 +3705,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
</div>
</article>
<div class='ipsColumns__secondary i-basis_380 i-background_2 i-padding_3' id='elGalleryImageStats'>
<div class='' data-role="imageStats">
<div class='' data-role="imageStats" data-ips-hook="imageStats">
{{if \IPS\GeoLocation::enabled() AND $image->gps_show}}
{$image->map( 308, 200 )|raw}
<div class='i-margin-top_2'>
@@ -3712,7 +3748,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<hr class='ipsHr'>
{{endif}}
<div>
<div data-ips-hook="container">
<h2 class='ipsTitle ipsTitle--h6 i-color_soft'>{{if $image->directContainer() instanceof \IPS\gallery\Album}}{lang="from_the_album"}{{else}}{lang="from_the_category"}{{endif}}</h2>
<h3 class='ipsTitle ipsTitle--h4 i-display_inline-block'><a href='{$image->directContainer()->url()}'>{$image->directContainer()->_title}</a></h3>
<span class='i-color_soft'>&middot; {lang="num_images" pluralize="$image->directContainer()->count_imgs"}</span>
@@ -3720,7 +3756,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<hr class='ipsHr'>
{{if \is_countable($image->metadata) AND \count($image->metadata)}}
<div class='cGalleryExif'>
<div class='cGalleryExif' data-ips-hook="exif">
{{if isset( $image->metadata['EXIF.FocalLength'] ) || ( isset( $image->metadata['IFD0.Make'] ) AND isset( $image->metadata['IFD0.Model'] ) ) || isset( $image->metadata['EXIF.ShutterSpeedValue'] ) || isset( $image->metadata['COMPUTED.ApertureFNumber'] ) || isset( $image->metadata['Exif.Photo.ISOSpeed'] )}}
<h3 class='ipsTitle ipsTitle--h4 ipsTitle--margin'>{lang="gallery_metadata" sprintf="$image->caption"}</h3>
<ul class='ipsList ipsList--border ipsList--label-value'>
@@ -3787,7 +3823,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<div class='ipsBox ipsBox--padding ipsPull ipsResponsive_showPhone'>
<div class='ipsPageActions'>
{{if \count( $image->shareLinks() )}}
{template="shareButton" app="core" group="sharelinks" params="$image, 'verySmall', 'light'"}
{template="shareButton" app="core" group="sharelinks" params="$image"}
{{endif}}
{template="follow" app="core" group="global" params="'gallery', 'image', $image->id, $image->followersCount()"}
</div>
@@ -3809,14 +3845,14 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<template template_group="view" template_name="imageLightboxFrame" template_data="$image" template_location="front" template_app="gallery"><![CDATA[
<div id='elGalleryImageLightbox' class='elGalleryImage' data-role="imageFrame" data-setHeight {{if $image->data}}data-imageSizes='{$image->data}'{{endif}}>
{{if $image->media }}
<div class='cGallery_videoContainer'>
<div class='cGallery_videoContainer' data-ips-hook="videoContainer">
<video data-controller="core.global.core.embeddedvideo" id="elGalleryVideo" data-role="video" data-imageID='{$image->id}' {{if $image->canEdit()}}data-editable{{endif}} controls preload="auto" width="100%" height="100%"{{if $image->masked_file_name }} poster="{file="$image->masked_file_name" extension="gallery_Images"}"{{endif}}>
<source src="{file="$image->original_file_name" extension="gallery_Images"}" type='{$image->file_type}' />
<embed wmode="opaque" autoplay="true" showcontrols="true" showstatusbar="true" showtracker="true" src="{file="$image->original_file_name" extension="gallery_Images"}" width="480" height="360" type='{$image->file_type}' />
</video>
</div>
{{else}}
<div class='cGalleryViewImage' data-role='notesWrapper' data-controller='gallery.front.view.notes' data-imageID='{$image->id}' {{if $image->canEdit()}}data-editable{{endif}} data-notesData='{$image->_notes_json}'>
<div class='cGalleryViewImage' data-role='notesWrapper' data-controller='gallery.front.view.notes' data-imageID='{$image->id}' {{if $image->canEdit()}}data-editable{{endif}} data-notesData='{$image->_notes_json}' data-ips-hook="imageContainer">
<div>
<img src='{file="$image->masked_file_name" extension="gallery_Images"}' alt="{$image->caption}" title='{$image->caption}' data-role='theImage' class='ipsHide'>
</div>
@@ -3897,7 +3933,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<ul class='ipsMenu ipsMenu_auto ipsHide' id='elImageToolsLightbox_menu'>
{{if $image->canEdit()}}
<li class='ipsMenu_item ipsResponsive_hidePhone'><a href='#' title='{lang="add_image_note"}' data-action='addNote'>
<i class='fa-regular fa-pen-to-square'></i> {lang="add_image_note"}</a>
<i class='fa-solid fa-pen-to-square'></i> {lang="add_image_note"}</a>
</li>
{{if !$image->media}}
<li class='ipsMenu_item ipsMenu_subItems'>
@@ -4192,7 +4228,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<p class='ipsEmptyMessage'>{lang="gallery_no_metadata"}</p>
{{endif}}
</div>]]></template>
<template template_group="view" template_name="reviews" template_data="$image" template_location="front" template_app="gallery"><![CDATA[<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='reviews' data-baseURL='{$image->url()}' {{if $image->isLastPage('reviews')}}data-lastPage{{endif}} data-feedID='{$image->reviewFeedId}' id='reviews' class="ipsEntries ipsEntries--reviews ipsEntries--gallery-reviews">
<template template_group="view" template_name="reviews" template_data="$image" template_location="front" template_app="gallery"><![CDATA[<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='reviews' data-baseURL='{$image->url()}' {{if $image->isLastPage('reviews')}}data-lastPage{{endif}} data-feedID='{$image->reviewFeedId}' id='reviews' class="ipsEntries ipsEntries--reviews ipsEntries--gallery-reviews" data-follow-area-id="image-{$image->id}">
{{if \count( $image->reviews( NULL, NULL, NULL, 'desc', NULL, NULL, NULL, NULL, isset( \IPS\Request::i()->showDeleted ) ) )}}
<div class='ipsButtonBar ipsButtonBar--top'>
@@ -4895,11 +4931,6 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
.ipsCarousel--gallery-featured{
height: clamp(480px, 80vh, 610px);
}
@media (min-width: 600px){
.ipsColumns--gallery-featured > *{
height: clamp(480px, 80vh, 610px);
}
}
/* Larger icons for album list view */
.ipsData--gallery-row-list{
@@ -5115,7 +5146,6 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
.cGalleryChooseAlbum_listItem:not([data-disabled])::after {
font-family: var(--i-font-awesome);
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: auto;
font-weight: 900;
@@ -5322,7 +5352,6 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
line-height: 28px;
color: #fff;
font-family: var(--i-font-awesome);
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: auto;
font-weight: 900;