This commit is contained in:
2024-12-31 11:07:09 +01:00
parent df7915205d
commit e089172b15
1916 changed files with 165422 additions and 271 deletions

View File

@ -0,0 +1,52 @@
<?php
/**
* @package Advanced Custom Fields
* @version 2.8.8 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
extract($displayData);
if (!$filters)
{
return;
}
?>
<div class="tf-library-filters">
<?php
foreach ($filters as $key => $filter)
{
?>
<div class="tf-library-filter-item open" data-type="<?php echo $key; ?>">
<div class="tf-library-filter-item-label">
<span><?php echo $filter['label']; ?></span>
<svg class="tf-library-filter-item-toggle" width="10" height="7" viewBox="0 0 10 7" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.5" d="M9 1.5L5.70711 4.79289C5.31658 5.18342 4.68342 5.18342 4.29289 4.79289L1 1.5" stroke="currentColor" stroke-linecap="round"/>
</svg>
</div>
<div class="tf-library-filter-choices">
<?php
foreach ($filter['items'] as $_key => $label)
{
$choice_item_key = 'tf_library_filters' . $key . '_filter_' . $_key;
?>
<div class="tf-library-filter-choice-item">
<input type="checkbox" class="tf-library-filter-choice-item-checkbox" id="<?php echo $choice_item_key; ?>" value="<?php echo $label; ?>" />
<label for="<?php echo $choice_item_key; ?>"><?php echo $label ?></label>
</div>
<?php
}
?>
</div>
</div>
<?php
}
?>
</div>

View File

@ -0,0 +1,34 @@
<?php
/**
* @package Advanced Custom Fields
* @version 2.8.8 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Language\Text;
extract($displayData);
?>
<div class="tf-library-footer">
<a href="<?php echo $create_new_template_link; ?>" target="_blank">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="8" cy="8" r="6" stroke="currentColor" />
<line x1="8" y1="5" x2="8" y2="11" stroke="currentColor" stroke-linecap="round" />
<line x1="11" y1="8" x2="5" y2="8" stroke="currentColor" stroke-linecap="round" />
</svg>
<?php echo Text::_('NR_START_FROM_SCRATCH'); ?>
</a>
<a href="https://www.tassos.gr/contact?topic=Custom Development&extension=<?php echo $project_name; ?>" target="_blank">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.6 11H6.1C6.1 10.7239 5.87614 10.5 5.6 10.5V11ZM5.6 14H5.1C5.1 14.1905 5.20823 14.3644 5.37912 14.4486C5.55002 14.5327 5.75387 14.5125 5.90486 14.3963L5.6 14ZM3 2.5H13V1.5H3V2.5ZM13.5 3V10H14.5V3H13.5ZM2.5 10V3H1.5V10H2.5ZM5.6 10.5H3V11.5H5.6V10.5ZM6.1 14V11H5.1V14H6.1ZM13 10.5H9.84012V11.5H13V10.5ZM8.92556 10.8111L5.29514 13.6037L5.90486 14.3963L9.53527 11.6037L8.92556 10.8111ZM1.5 10C1.5 10.8284 2.17157 11.5 3 11.5V10.5C2.72386 10.5 2.5 10.2761 2.5 10H1.5ZM13.5 10C13.5 10.2761 13.2761 10.5 13 10.5V11.5C13.8284 11.5 14.5 10.8284 14.5 10H13.5ZM9.84012 10.5C9.50931 10.5 9.18777 10.6094 8.92556 10.8111L9.53527 11.6037C9.62267 11.5365 9.72985 11.5 9.84012 11.5V10.5ZM13 2.5C13.2761 2.5 13.5 2.72386 13.5 3H14.5C14.5 2.17157 13.8284 1.5 13 1.5V2.5ZM3 1.5C2.17157 1.5 1.5 2.17157 1.5 3H2.5C2.5 2.72386 2.72386 2.5 3 2.5V1.5Z" fill="currentColor"/>
</svg>
<?php echo Text::_('NR_REQUEST_TEMPLATE'); ?>
</a>
</div>

View File

@ -0,0 +1,54 @@
<?php
/**
* @package Advanced Custom Fields
* @version 2.8.8 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
extract($displayData);
use Joomla\CMS\Language\Text;
?>
<div class="tf-template-library-item-info">
<div class="item-description"></div>
<div class="template-details">
<div class="items tf-library-info-grid cols-3">
<div class="tf-cell category">
<div class="title is-grey"><?php echo $category_label; ?>:</div>
<div class="content"></div>
</div>
<div class="tf-cell solution">
<div class="title is-grey"><?php echo Text::_('NR_SOLUTION'); ?>:</div>
<div class="content"></div>
</div>
<div class="tf-cell goal">
<div class="title is-grey"><?php echo Text::_('NR_GOAL'); ?>:</div>
<div class="content"></div>
</div>
</div>
</div>
<div class="template-details compatibility-details">
<div class="details-header-items">
<div class="tf-library-info-grid cols-3">
<div class="tf-cell"><?php echo Text::_('NR_REQUIREMENTS'); ?></div>
<div class="tf-cell"><?php echo Text::_('NR_DETECTED'); ?></div>
<div class="tf-cell"><?php echo Text::_('NR_CHECK'); ?></div>
</div>
</div>
<div class="dependency-items"></div>
<div class="template dependency-item tf-library-info-grid cols-3">
<div class="tf-cell requirement"></div>
<div class="tf-cell detected"></div>
<div class="tf-cell value">
<svg class="checkmark is-hidden" width="20" height="16" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 8.65556L6.89552 14.5L19 1.5" stroke="#82DE78" stroke-width="2" stroke-linecap="round"/></svg>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,50 @@
<?php
/**
* @package Advanced Custom Fields
* @version 2.8.8 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Language\Text;
extract($displayData);
?>
<div class="tf-library-list">
<div class="tf-library-item blank_popup">
<span class="tf-library-item-wrap">
<a class="parent" href="<?php echo $create_new_template_link; ?>">
<svg width="32" height="32" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" stroke="currentColor"/>
<line x1="12" y1="7.5" x2="12" y2="16.5" stroke="currentColor" stroke-linecap="round"/>
<line x1="16.5" y1="12" x2="7.5" y2="12" stroke="currentColor" stroke-linecap="round"/>
</svg>
<span class="title"><?php echo $blank_template_label; ?></span>
<span class="description"><?php echo Text::_('NR_START_FROM_SCRATCH'); ?></span>
</a>
</span>
</div>
<?php
// Skeleton
for ($i = 0; $i < 15; $i++)
{
?>
<div class="tf-library-item skeleton">
<div class="tf-library-item-wrap">
<div></div>
<div class="actions">
<div></div>
<div></div>
</div>
</div>
</div>
<?php
}
?>
</div>

View File

@ -0,0 +1,485 @@
<?php
/**
* @package Advanced Custom Fields
* @version 2.8.8 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Language\Text;
use Joomla\CMS\Uri\Uri;
extract($displayData);
if (!$templates)
{
return;
}
if (!$main_category_label)
{
$main_category_label = Text::_('NR_CATEGORY');
}
$parsed_project_version = strstr($project_version, '-', true);
$project_version = $parsed_project_version ? $parsed_project_version : $project_version;
$j_version = JVERSION;
$capabilities_solution_label = Text::_('NR_SOLUTION');
$capabilities_content_label = Text::_('NR_GOAL');
$capabilities_joomla_label = Text::_('NR_UPDATE_JOOMLA');
$capabilities_joomla_url = Uri::base() . 'index.php?option=com_joomlaupdate';
$capabilities_project_label = sprintf(Text::_('NR_UPDATE_EXTENSION_X'), $project_name);
$capabilities_project_url = $update_url = Uri::base() . 'index.php?option=com_installer&view=update';
$install_url = Uri::base() . 'index.php?option=com_installer&view=install';
$install_svg_icon = '<svg class="icon" width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 10L2 13L14 13L14 10" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><path d="M8.5 1C8.5 0.723858 8.27614 0.5 8 0.5C7.72386 0.5 7.5 0.723858 7.5 1L8.5 1ZM7.64645 10.3536C7.84171 10.5488 8.15829 10.5488 8.35355 10.3536L11.5355 7.17157C11.7308 6.97631 11.7308 6.65973 11.5355 6.46447C11.3403 6.2692 11.0237 6.2692 10.8284 6.46447L8 9.29289L5.17157 6.46447C4.97631 6.2692 4.65973 6.2692 4.46447 6.46447C4.2692 6.65973 4.2692 6.97631 4.46447 7.17157L7.64645 10.3536ZM7.5 1L7.5 10L8.5 10L8.5 1L7.5 1Z" fill="currentColor"/></svg>';
$activate_svg_icon = '<svg class="icon" width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 10L2 13L14 13L14 10" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><path d="M8.5 1C8.5 0.723858 8.27614 0.5 8 0.5C7.72386 0.5 7.5 0.723858 7.5 1L8.5 1ZM7.64645 10.3536C7.84171 10.5488 8.15829 10.5488 8.35355 10.3536L11.5355 7.17157C11.7308 6.97631 11.7308 6.65973 11.5355 6.46447C11.3403 6.2692 11.0237 6.2692 10.8284 6.46447L8 9.29289L5.17157 6.46447C4.97631 6.2692 4.65973 6.2692 4.46447 6.46447C4.2692 6.65973 4.2692 6.97631 4.46447 7.17157L7.64645 10.3536ZM7.5 1L7.5 10L8.5 10L8.5 1L7.5 1Z" fill="currentColor"/></svg>';
$update_svg_icon = '<svg class="icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.50006 4.6001L7.70013 2.80017L9.50006 1.00024" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><path d="M8.60022 2.80029C11.5824 2.80029 14 5.21786 14 8.20008C14 9.79931 13.3048 11.2362 12.2001 12.2249" stroke="currentColor" stroke-linecap="round"/><path d="M6.5 11.7993L8.29993 13.5992L6.5 15.3992" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><path d="M7.39979 13.5989C4.41757 13.5989 2 11.1814 2 8.19915C2 6.59991 2.69522 5.16305 3.79993 4.17432" stroke="currentColor" stroke-linecap="round"/></svg>';
$pro_svg_icon = '<svg class="icon" width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 10C7.5 10.2761 7.72386 10.5 8 10.5C8.27614 10.5 8.5 10.2761 8.5 10L7.5 10ZM8.35355 3.64645C8.15829 3.45118 7.84171 3.45118 7.64645 3.64645L4.46447 6.82843C4.2692 7.02369 4.2692 7.34027 4.46447 7.53553C4.65973 7.7308 4.97631 7.7308 5.17157 7.53553L8 4.70711L10.8284 7.53553C11.0237 7.7308 11.3403 7.7308 11.5355 7.53553C11.7308 7.34027 11.7308 7.02369 11.5355 6.82843L8.35355 3.64645ZM8.5 10L8.5 4L7.5 4L7.5 10L8.5 10Z" fill="currentColor"/><path d="M14 7C14 10.3137 11.3137 13 8 13C4.68629 13 2 10.3137 2 7C2 3.68629 4.68629 1 8 1C11.3137 1 14 3.68629 14 7Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/></svg>';
$key_svg_icon = '<svg class="icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="4.81803" cy="11.3135" r="3" transform="rotate(-45 4.81803 11.3135)" stroke="currentColor"/><line x1="6.93933" y1="9.19231" x2="13.3033" y2="2.82835" stroke="currentColor" stroke-linecap="round"/><path d="M12.5962 4.24219L14.0104 5.6564" stroke="currentColor" stroke-linecap="round"/><path d="M10.4749 6.36377L11.182 7.07088" stroke="currentColor" stroke-linecap="round"/></svg>';
$insert_svg_icon = '<svg class="icon" width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 4L3 1L14 1L14 13L3 13L3 10" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><path d="M2 6.5C1.72386 6.5 1.5 6.72386 1.5 7C1.5 7.27614 1.72386 7.5 2 7.5V6.5ZM11.3536 7.35355C11.5488 7.15829 11.5488 6.84171 11.3536 6.64645L8.17157 3.46447C7.97631 3.2692 7.65973 3.2692 7.46447 3.46447C7.2692 3.65973 7.2692 3.97631 7.46447 4.17157L10.2929 7L7.46447 9.82843C7.2692 10.0237 7.2692 10.3403 7.46447 10.5355C7.65973 10.7308 7.97631 10.7308 8.17157 10.5355L11.3536 7.35355ZM2 7.5L11 7.5V6.5L2 6.5V7.5Z" fill="currentColor"/></svg>';
$error_svg_icon = '<svg class="icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14.3351 6.19586L14.8335 6.1558C14.8198 5.98487 14.7194 5.8329 14.5676 5.75318C14.4157 5.67346 14.2336 5.67711 14.0851 5.76285L14.3351 6.19586ZM9.26069 9.12581L9.54456 8.7142C9.38565 8.60461 9.17786 8.59628 9.01069 8.6928L9.26069 9.12581ZM7.8715 6.71947L8.1215 7.15248C8.28866 7.05597 8.38534 6.87187 8.3699 6.67947L7.8715 6.71947ZM12.9456 3.78971L13.1956 4.22272C13.3441 4.13697 13.4383 3.98108 13.4452 3.80971C13.4521 3.63834 13.3706 3.47541 13.2294 3.37807L12.9456 3.78971ZM10.8097 5.02286L10.5597 4.58984C10.415 4.67343 10.3215 4.82385 10.3108 4.99068L10.8097 5.02286ZM10.7023 6.68909L10.2033 6.65691C10.1903 6.85835 10.2997 7.04783 10.4807 7.1373L10.7023 6.68909ZM12.199 7.42915L11.9774 7.87735C12.1273 7.95145 12.3042 7.94575 12.449 7.86216L12.199 7.42915ZM12.9741 9.69824C14.2675 8.9515 14.9456 7.54965 14.8335 6.1558L13.8367 6.23593C13.919 7.25948 13.4207 8.2857 12.4741 8.83221L12.9741 9.69824ZM8.97683 9.53742C10.1279 10.3313 11.6808 10.4449 12.9741 9.69824L12.4741 8.83221C11.5276 9.37869 10.3898 9.29714 9.54456 8.7142L8.97683 9.53742ZM4.02698 12.7248L9.51069 9.55882L9.01069 8.6928L3.52698 11.8588L4.02698 12.7248ZM1.44618 12.0333C1.96789 12.937 3.12335 13.2466 4.02698 12.7248L3.52698 11.8588C3.10164 12.1044 2.55777 11.9587 2.3122 11.5333L1.44618 12.0333ZM2.1377 9.45253C1.23407 9.97424 0.924469 11.1297 1.44618 12.0333L2.3122 11.5333C2.06664 11.108 2.21237 10.5641 2.6377 10.3186L2.1377 9.45253ZM7.6215 6.28646L2.1377 9.45253L2.6377 10.3186L8.1215 7.15248L7.6215 6.28646ZM9.23251 3.21753C7.93928 3.96418 7.26126 5.36578 7.3731 6.75946L8.3699 6.67947C8.28777 5.65605 8.78604 4.63 9.73251 4.08356L9.23251 3.21753ZM13.2294 3.37807C12.0784 2.58449 10.5257 2.47093 9.23251 3.21753L9.73251 4.08356C10.6789 3.53714 11.8166 3.61861 12.6618 4.20136L13.2294 3.37807ZM11.0597 5.45587L13.1956 4.22272L12.6956 3.3567L10.5597 4.58984L11.0597 5.45587ZM11.2012 6.72127L11.3087 5.05504L10.3108 4.99068L10.2033 6.65691L11.2012 6.72127ZM12.4206 6.98094L10.9239 6.24089L10.4807 7.1373L11.9774 7.87735L12.4206 6.98094ZM14.0851 5.76285L11.949 6.99614L12.449 7.86216L14.5851 6.62888L14.0851 5.76285Z" fill="currentColor"/></svg>';
$loading_svg_icon = '<svg class="icon loading" width="16" height="16" xmlns="http://www.w3.org/2000/svg" style="shape-rendering: auto;" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"><circle cx="50" cy="50" fill="none" stroke="currentColor" stroke-width="10" r="40" stroke-dasharray="160.22122533307947 55.40707511102649"><animateTransform attributeName="transform" type="rotate" repeatCount="indefinite" dur="1s" values="0 50 50;360 50 50" keyTimes="0;1"></animateTransform></circle></svg>';
$info_item_atts = defined('nrJ4') ? '' : ' data-bs-toggle="modal" data-toggle="modal" data-bs-target="#tf-library-item-info-popup" href="#tf-library-item-info-popup"';
$info_item_class = defined('nrJ4') ? ' tf-library-template-item-info-popup-trigger' : '';
foreach ($templates as $template_key => $template)
{
$is_favorite = array_key_exists($template->id, $favorites);
$image = isset($template->image) ? $template->image : '';
$external_extensions = $template->fields->{'templates-external-extensions'};
$item_class = '';
$valid_j_version = $valid_item_version = $valid_third_party_extension_version = false;
$required_j_version = isset($template->fields->{'templates-minimum-joomla-version'}) && !empty($template->fields->{'templates-minimum-joomla-version'}) ? $template->fields->{'templates-minimum-joomla-version'} : '';
$required_item_version = isset($template->fields->{'templates-minimum-extension-version'}) && !empty($template->fields->{'templates-minimum-extension-version'}) ? $template->fields->{'templates-minimum-extension-version'} : '';
$errors = [];
$capabilities = [
'pro' => [
'requirement' => $template->is_pro ? 'pro' : 'lite',
'detected' => $project_license_type === 'lite' ? 'lite' : 'pro'
],
'category' => [
'value' => $template->category,
'label' => $main_category_label
],
'solution' => [
'value' => $template->filters->solution,
'label' => $capabilities_solution_label
],
'goal' => [
'value' => $template->filters->goal,
'label' => $capabilities_content_label
],
'joomla' => [
'value' => $required_j_version,
'label' => $capabilities_joomla_label,
'icon' => '',
'url' => $capabilities_joomla_url,
'detected' => $j_version
],
'project' => [
'value' => $required_item_version,
'label' => $capabilities_project_label,
'icon' => '',
'url' => $capabilities_project_url,
'detected' => $project_version
],
'third_party_dependencies' => [
'value' => $external_extensions,
'errors' => []
],
'license_error' => [
'value' => ''
]
];
/**
* A template may not be available for the following reasons:
* - User has an older version than the one specified in the template
* - Extension version may be outdated
* - 3rd-party extensions are required and missing (not installed and/or not activated)
*/
// Joomla Version Check
if ($required_j_version)
{
$valid_j_version = !empty(trim($required_j_version)) ? version_compare($j_version, $required_j_version, '>=') : false;
if (!$valid_j_version)
{
$capabilities['joomla']['icon'] = 'update';
$errors['joomla'] = $capabilities['joomla'];
$errors['joomla']['full_label'] = Text::_('NR_UPDATE_JOOMLA_TO_INSERT_TEMPLATE');
}
}
// Item Version Check
if ($required_item_version)
{
$valid_item_version = !empty(trim($required_item_version)) ? version_compare($project_version, $required_item_version, '>=') : false;
if (!$valid_item_version)
{
$capabilities['project']['icon'] = 'update';
$errors['project'] = $capabilities['project'];
$errors['project']['full_label'] = sprintf(Text::_('NR_UPDATE_EXTENSION_X_TO_INSERT_TEMPLATE'), $project_name);
}
}
// 3rd party extensions Check
if (is_array($external_extensions) && count($external_extensions))
{
foreach ($external_extensions as $key => $external_extension)
{
$valid_third_party_extension_version = false;
$icon = $label = $full_label = $detected = 'none';
if (!$external_extension->slug || !$external_extension->name || !$external_extension->version)
{
continue;
}
// 3rd-party extension is not installed
if (!\NRFramework\Extension::isInstalled($external_extension->slug))
{
$icon = 'install';
$label = sprintf(Text::_('NR_INSTALL_EXTENSION_X'), $external_extension->name);
$full_label = sprintf(Text::_('NR_INSTALL_EXTENSION_X_TO_INSERT_TEMPLATE'), $external_extension->name);
}
// 3rd-party extension is installed but not active
else if (!\NRFramework\Extension::isEnabled($external_extension->slug))
{
$icon = 'activate';
$label = sprintf(Text::_('NR_ACTIVATE_EXTENSION_X'), $external_extension->name);
$full_label = sprintf(Text::_('NR_ACTIVATE_EXTENSION_X_TO_INSERT_TEMPLATE'), $external_extension->name);
}
// 3rd-party extension is installed, active but we need to check whether its version is valid
else
{
$third_party_extension_installed_version = \NRFramework\Extension::getVersion($external_extension->slug);
$parsed_third_party_extension_installed_version = strstr($third_party_extension_installed_version, '-', true);
$third_party_extension_installed_version = $parsed_third_party_extension_installed_version ? $parsed_third_party_extension_installed_version : $third_party_extension_installed_version;
$valid_third_party_extension_version = !empty(trim($external_extension->version)) ? version_compare($third_party_extension_installed_version, $external_extension->version, '>=') : false;
$icon = 'update';
$label = sprintf(Text::_('NR_UPDATE_EXTENSION_X'), $external_extension->name);
$full_label = sprintf(Text::_('NR_UPDATE_EXTENSION_X_TO_INSERT_TEMPLATE'), $external_extension->name);
$detected = $third_party_extension_installed_version;
}
// Set third party item information
$capabilities['third_party_dependencies']['value'][$key]->icon = $icon;
$capabilities['third_party_dependencies']['value'][$key]->label = $label;
$capabilities['third_party_dependencies']['value'][$key]->full_label = $full_label;
$capabilities['third_party_dependencies']['value'][$key]->detected = $detected;
$capabilities['third_party_dependencies']['value'][$key]->url = $icon === 'update' ? $update_url : $install_url;
$capabilities['third_party_dependencies']['value'][$key]->valid = $valid_third_party_extension_version;
if (!$valid_third_party_extension_version)
{
// Add the external extensions we are having issues with
$capabilities['third_party_dependencies']['errors'][] = $external_extension->name;
// Set error index used to retrieve this error message action
$capabilities['third_party_dependencies']['error_index'] = $key;
// Add the error
$errors['third_party_dependencies_' . $key] = $capabilities['third_party_dependencies'];
}
}
}
/**
* Check other cases where a template may not be available:
* - Is Pro but we have the Free version
* - Is Pro and template is Pro
* - We have not entered a license key OR We have entered a license key but it's not valid
*/
// Is Pro but we have the Free version
if ($project_license_type === 'lite' && $template->is_pro)
{
$errors = [
'pro' => [
'icon' => 'pro',
'class' => 'red',
'data_attributes' => 'data-pro-only="' . $template->title . '"',
'label' => Text::_('NR_UPGRADE_TO_UC_PRO'),
'full_label' => Text::_('NR_UPGRADE_TO_PRO_TO_UNLOCK_TEMPLATE')
]
] + $errors;
}
// Is Pro and template is Pro
else if ($project_license_type === 'pro' && $template->is_pro && (empty($license_key) || $license_key_status !== 'valid'))
{
// We have not entered a license key
if (empty($license_key))
{
$errors['license'] = [
'icon' => 'key',
'url' => $product_license_settings_url,
'label' => Text::_('NR_SET_LICENSE_KEY'),
'full_label' => Text::_('NR_NO_LICENSE_KEY_DETECTED')
];
$capabilities['license_error']['value'] = 'missing';
}
// We have entered a license key but it's invalid/expired
else if ($license_key_status !== 'valid')
{
$errors['license'] = [
'icon' => 'key',
'url' => 'https://www.tassos.gr/subscriptions',
'label' => Text::_('NR_INVALID_EXPIRED_LICENSE_KEY'),
'full_label' => Text::_('NR_INVALID_LICENSE_KEY_ENTERED')
];
$capabilities['license_error']['value'] = 'invalid_expired';
}
}
if ($errors)
{
$item_class .= ' has-errors';
// If its a PRO template and we are not a PRO user, add a "is-pro" CSS class
if ($template->is_pro && $project_license_type === 'lite')
{
$item_class .= ' is-pro';
}
}
?>
<div
class="tf-library-item<?php echo $item_class; ?>"
data-id="<?php echo $template->id; ?>"
data-note="<?php echo $template->fields->{'templates-note'}; ?>"
<?php
foreach ($template->sort as $sort_key => $sort_value)
{
?>data-sort-<?php echo $sort_key; ?>="<?php echo $sort_value; ?>"<?php
}
?>
data-filter-category="<?php echo $template->category; ?>"
<?php foreach ($template->filters as $filter_key => $filter_value): ?>
data-filter-<?php echo $filter_key; ?>="<?php echo $filter_value; ?>"
<?php endforeach; ?>
<?php if ($project_license_type === 'lite'): ?>
data-filter-compatibility="<?php echo $template->is_pro ? 'Pro' : 'Free'; ?>"
<?php endif; ?>
data-title="<?php echo $template->title; ?>"
data-capabilities="<?php echo htmlspecialchars(json_encode($capabilities), ENT_QUOTES, 'UTF-8'); ?>">
<div class="tf-library-item-wrap">
<div class="tf-template-item-message is-hidden">
<span class="tf-template-item-message-text">This is a message</span>
<svg class="fpf-library-messages-hide-btn" height="14" viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="14" y="12.5933" width="2.47487" height="17.3241" transform="rotate(135 14 12.5933)" fill="currentColor"></rect>
<rect width="2.47487" height="17.3241" transform="matrix(-0.707109 -0.707105 0.707109 -0.707105 1.75 14.3433)" fill="currentColor"></rect>
</svg>
</div>
<div class="tf-library-item-image-wrapper">
<div class="tf-library-item-image-inner">
<img loading="lazy" src="<?php echo $image; ?>" alt="<?php echo $template->title; ?>" />
<div class="tf-library-item-hover">
<a href="#templates-library-previewer" class="tf-button outline tf-library-preview-item" title="<?php echo Text::_('NR_PREVIEW_TEMPLATE'); ?>">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="11.5" cy="11.5" r="6" stroke="currentColor"/>
<line x1="15.7071" y1="16" x2="19" y2="19.2929" stroke="currentColor" stroke-linecap="round"/>
<line x1="11.5" y1="9" x2="11.5" y2="14" stroke="currentColor"/>
<line x1="14" y1="11.5" x2="9" y2="11.5" stroke="currentColor"/>
</svg>
<span><?php echo Text::_('NR_PREVIEW'); ?></span>
</a>
<?php if (isset($errors['joomla']) || isset($errors['project']) || isset($errors['third_party_dependencies_0'])): ?>
<div class="dependencies-wrapper">
<div class="title"><?php echo Text::_('NR_REQUIREMENTS'); ?></div>
<div class="dependencies">
<?php
if (array_key_exists('joomla', $errors))
{
?><span class="error<?php echo $info_item_class; ?>"<?php echo $info_item_atts; ?>><?php echo Text::_('NR_JOOMLA') . ' ' . ($required_j_version ? $required_j_version : $j_version); ?></span><?php
}
if (array_key_exists('project', $errors))
{
?><span class="error<?php echo $info_item_class; ?>"<?php echo $info_item_atts; ?>><?php echo $project_name . ' ' . ($required_item_version ? $required_item_version : $project_version); ?></span><?php
}
if (is_array($external_extensions) && count($external_extensions))
{
foreach ($external_extensions as $external_extension_key => $external_extension)
{
if (!array_key_exists('third_party_dependencies_' . $external_extension_key, $errors) || !array_key_exists('errors', $errors['third_party_dependencies_' . $external_extension_key]) || !in_array($external_extension->name, $errors['third_party_dependencies_' . $external_extension_key]['errors']))
{
continue;
}
?><span class="error<?php echo $info_item_class; ?>"<?php echo $info_item_atts; ?>><?php echo $external_extension->name . ' ' . $external_extension->version; ?></span><?php
}
}
?>
</div>
</div>
<?php endif; ?>
</div>
</div>
<?php
if ($template->is_pro && $project_license_type === 'lite')
{
?>
<span class="ribbon"><?php echo Text::_('NR_PRO'); ?></span>
<?php
}
?>
</div>
<div class="tf-library-item-bottom">
<div class="template-label"><?php echo $template->title; ?></div>
<div class="tf-library-item-bottom-buttons">
<a data-template-id="<?php echo $template->id; ?>" class="info tf-library-template-item-info<?php echo $info_item_class; ?>" title="<?php echo Text::_('NR_TEMPLATE_INFORMATION'); ?>"<?php echo $info_item_atts; ?> href="#tf-library-item-info-popup">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="8" cy="8" r="7" stroke="currentColor"/>
<rect x="7" y="7" width="2" height="5" fill="currentColor"/>
<rect x="7" y="4" width="2" height="2" fill="currentColor"/>
</svg>
</a>
<a href="#" class="tf-library-favorite-icon tf-library-favorite-item<?php echo $is_favorite ? ' active' : ''; ?>" title="<?php echo Text::_('NR_LIBRARY_SAVE_TEMPLATE_FAVORITES'); ?>">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.902 6.62124C14.3943 9.04222 11.0187 11.1197 7.99845 14C4.97819 11.1197 1.60265 9.04223 1.09492 6.62125C0.231957 2.50649 5.47086 -0.0322558 7.99845 4.12617C10.7204 -0.0322523 15.7649 2.50648 14.902 6.62124Z" stroke="currentColor" stroke-linejoin="round"/>
</svg>
</a>
</div>
<div class="tf-library-item-actions">
<?php
// We have errors with this template
if (!empty($errors))
{
// Multiple errors, but do not show this message when we still need to Upgrade to Pro.
if (count($errors) > 1 && !isset($errors['pro']))
{
?>
<a class="<?php echo $info_item_class; ?>"<?php echo $info_item_atts; ?> href="#tf-library-item-info-popup" data-template-id="<?php echo $template->id; ?>">
<?php
echo $error_svg_icon;
echo Text::_('NR_MULTIPLE_ISSUES_DETECTED');
?>
</a>
<?php
}
// One error
else
{
$error_keys = array_keys($errors);
$error_values = array_values($errors);
$error_items = [$error_values[0]];
foreach ($error_items as $error_item)
{
// 3rd-party dependency has an array of extensions
if (isset($error_item['value']) && is_array($error_item['value']) && isset($error_item['error_index']))
{
$error_item = (array) $error_item['value'][$error_item['error_index']];
}
$class = isset($error_item['class']) ? $error_item['class'] : '';
$data_atts = isset($error_item['data_attributes']) ? ' ' . $error_item['data_attributes'] : '';
$url = isset($error_item['url']) ? $error_item['url'] : '#';
if ($url !== '#')
{
$data_atts .= ' target="_blank"';
}
?>
<a href="<?php echo $url; ?>" class="<?php echo $class; ?>"<?php echo $data_atts; ?>>
<?php echo ${$error_item['icon'] . '_svg_icon'}; ?>
<?php if (isset($error_item['full_label'])): ?>
<span class="full-label"><?php echo $error_item['full_label']; ?></span>
<?php endif; ?>
<span class="short-label"><?php echo $error_item['label']; ?></span>
</a>
<?php
}
}
}
// No errors, we can use the template
else
{
?>
<a href="#" class="tf-library-item-insert-btn" data-template-id="<?php echo $template->id; ?>">
<?php
echo $insert_svg_icon;
echo $loading_svg_icon;
?>
<span class="full-label"><?php echo Text::_('NR_INSERT_TEMPLATE'); ?></span>
<span class="short-label"><?php echo Text::_('NR_INSERT'); ?></span>
</a>
<?php
}
?>
</div>
</div>
<div class="info-popup-actions">
<?php
// Show errors
if ($errors)
{
foreach ($errors as $error_key => $error)
{
// 3rd-party dependency has an array of extensions
if (isset($error['value']) && is_array($error['value']) && isset($error['error_index']))
{
$error = (array) $error['value'][$error['error_index']];
}
$url = isset($error['url']) ? $error['url'] : '#';
$class = isset($error['class']) ? $error['class'] : '';
$data_atts = isset($error['data_attributes']) ? ' ' . $error['data_attributes'] : '';
if ($error['icon'] !== 'pro')
{
$class .= ' orange';
}
// Add error key (which capability this error corresponds to, i.e. joomla, pro, etc...)
$class .= ' ' . $error_key;
?>
<a href="<?php echo $url; ?>" target="_blank" class="tf-button outline <?php echo $class; ?>"<?php echo $data_atts; ?>>
<?php echo ${$error['icon'] . '_svg_icon'}; ?>
<span class="short-label"><?php echo $error['label']; ?></span>
</a>
<?php
}
}
// Show insert button
else
{
?>
<a href="#" class="tf-button outline blue tf-library-item-insert-btn" data-template-id="<?php echo $template->id; ?>">
<?php
echo $insert_svg_icon;
echo $loading_svg_icon;
echo Text::_('NR_INSERT_TEMPLATE_NOW');
?>
</a>
<?php
}
?>
</div>
</div>
</div>
<?php
}

View File

@ -0,0 +1,29 @@
<?php
/**
* @package Advanced Custom Fields
* @version 2.8.8 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Language\Text;
?>
<div class="tf-library-no-results">
<svg width="80" height="80" viewBox="0 0 80 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="41" cy="40" r="36" fill="#D7DBFB"/>
<path opacity="0.2" fill-rule="evenodd" clip-rule="evenodd" d="M26.5432 7.02026C39.6252 7.54949 50.0683 18.3222 50.0683 31.534C50.0683 37.5897 47.8743 43.133 44.2379 47.4123L46.3613 49.5357C47.4768 49.0018 48.854 49.1969 49.7782 50.1211L65.7755 66.1184C63.8226 67.9715 61.6621 69.6079 59.3324 70.989L44.1213 55.7779C43.1983 54.8549 43.0025 53.4799 43.5339 52.3652L41.4092 50.2405C37.1304 53.8753 31.5884 56.0682 25.5342 56.0682C17.2197 56.0682 9.87116 51.9322 5.43383 45.6055C5.14824 43.7788 5 41.9067 5 39.9999C5 38.3624 5.10933 36.7505 5.32108 35.1709C7.03793 44.7769 15.4346 52.0682 25.5342 52.0682C36.8749 52.0682 46.0683 42.8748 46.0683 31.534C46.0683 20.1933 36.8749 10.9999 25.5342 10.9999C22.7676 10.9999 20.1289 11.547 17.7202 12.5389C20.3611 10.2979 23.3294 8.43109 26.5432 7.02026Z" fill="#41495B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M40.4373 43.4401C41.2184 42.659 42.4847 42.659 43.2658 43.4401L57.4079 57.5822C58.189 58.3633 58.189 59.6296 57.4079 60.4106C56.6269 61.1917 55.3605 61.1917 54.5795 60.4106L40.4373 46.2685C39.6563 45.4874 39.6563 44.2211 40.4373 43.4401Z" fill="#41495B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M61.1675 69.8248L44.1209 52.7782C42.9493 51.6066 42.9493 49.7071 44.1209 48.5356L45.5351 47.1214C46.7067 45.9498 48.6061 45.9498 49.7777 47.1214L67.2705 64.6141C65.439 66.5681 63.392 68.3176 61.1675 69.8248Z" fill="#F5CE81"/>
<path d="M48.0683 28.5342C48.0683 40.9794 37.9794 51.0683 25.5342 51.0683C13.0889 51.0683 3 40.9794 3 28.5342C3 16.0889 13.0889 6 25.5342 6C37.9794 6 48.0683 16.0889 48.0683 28.5342Z" fill="#F4F5FE"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.5342 8C14.1935 8 5 17.1935 5 28.5342C5 39.8749 14.1935 49.0683 25.5342 49.0683C36.8749 49.0683 46.0683 39.8749 46.0683 28.5342C46.0683 17.1935 36.8749 8 25.5342 8ZM1 28.5342C1 14.9843 11.9843 4 25.5342 4C39.084 4 50.0683 14.9843 50.0683 28.5342C50.0683 42.084 39.084 53.0683 25.5342 53.0683C11.9843 53.0683 1 42.084 1 28.5342Z" fill="#41495B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.5 14C17.4919 14 11 20.4919 11 28.5C11 29.6046 10.1046 30.5 9 30.5C7.89543 30.5 7 29.6046 7 28.5C7 18.2827 15.2827 10 25.5 10C26.6046 10 27.5 10.8954 27.5 12C27.5 13.1046 26.6046 14 25.5 14Z" fill="white"/>
</svg>
<div class="noresults-title"><?php echo Text::_('NR_OOPS_NO_MATCHES_FOUND'); ?></div>
</div>

View File

@ -0,0 +1,17 @@
<?php
/**
* @package Advanced Custom Fields
* @version 2.8.8 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
?>
<div class="tf-library-preview">
<div class="tf-library-preview-inner"></div>
</div>

View File

@ -0,0 +1,48 @@
<?php
/**
* @package Advanced Custom Fields
* @version 2.8.8 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Language\Text;
?>
<div class="tf-library-sidebar">
<!-- Top -->
<div class="top">
<div class="flex-container align-center align-middle">
<div class="tf-library-sidebar-toggle opener" title="<?php echo Text::_('NR_OPEN_SIDEBAR'); ?>">
<svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<line x1="6.5" y1="2.5" x2="15.5" y2="2.5" stroke="currentColor" stroke-linecap="round"/>
<line x1="0.5" y1="2.5" x2="2.5" y2="2.5" stroke="currentColor" stroke-linecap="round"/>
<line x1="13.5" y1="7.5" x2="15.5" y2="7.5" stroke="currentColor" stroke-linecap="round"/>
<line x1="0.5" y1="7.5" x2="9.5" y2="7.5" stroke="currentColor" stroke-linecap="round"/>
<line x1="7.5" y1="12.5" x2="15.5" y2="12.5" stroke="currentColor" stroke-linecap="round"/>
<line x1="0.5" y1="12.5" x2="3.5" y2="12.5" stroke="currentColor" stroke-linecap="round"/>
<circle cx="4.5" cy="2.5" r="2" stroke="currentColor"/>
<circle cx="11.5" cy="7.5" r="2" stroke="currentColor"/>
<circle cx="5.5" cy="12.5" r="2" stroke="currentColor"/>
</svg>
</div>
<div class="on-sidebar-open flex-container align-center align-middle tf-library-sidebar-toggle" title="<?php echo Text::_('NR_CLOSE_SIDEBAR'); ?>">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.14645 7.64645C1.95118 7.84171 1.95118 8.15829 2.14645 8.35355L5.32843 11.5355C5.52369 11.7308 5.84027 11.7308 6.03553 11.5355C6.2308 11.3403 6.2308 11.0237 6.03553 10.8284L3.20711 8L6.03553 5.17157C6.2308 4.97631 6.2308 4.65973 6.03553 4.46447C5.84027 4.2692 5.52369 4.2692 5.32843 4.46447L2.14645 7.64645ZM14.5 8.5C14.7761 8.5 15 8.27614 15 8C15 7.72386 14.7761 7.5 14.5 7.5V8.5ZM2.5 8.5H14.5V7.5H2.5V8.5Z" fill="currentColor"/>
<line x1="14.5" y1="3.5" x2="14.5" y2="12.5" stroke="currentColor" stroke-linecap="round"/>
</svg>
<span class="top-title"><?php echo Text::_('NR_FILTERS'); ?></span>
</div>
</div>
<a href="#" class="tf-library-filters-clear-all"><?php echo Text::_('NR_CLEAR_ALL'); ?></a>
</div>
<!-- /Top -->
<!-- Filters -->
<div class="tf-library-sidebar-filters"><?php echo Text::_('NR_LOADING_FILTERS'); ?></div>
<!-- /Filters -->
</div>

View File

@ -0,0 +1,43 @@
<?php
/**
* @package Advanced Custom Fields
* @version 2.8.8 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\HTML\HTMLHelper;
extract($displayData);
$items_payload = [
'create_new_template_link' => $create_new_template_link,
'blank_template_label' => $blank_template_label
];
$footer_payload = [
'create_new_template_link' => $create_new_template_link,
'project_name' => $project_name
];
$layouts_path = JPATH_PLUGINS . '/system/nrframework/layouts';
HTMLHelper::_('jquery.framework');
?>
<div class="tf-library-page<?php echo isset($class) && !empty($class) ? ' ' . $class : ''; ?>" data-preview-url="<?php echo $preview_url; ?>" data-options="<?php echo htmlspecialchars(json_encode($displayData)); ?>">
<?php echo LayoutHelper::render('library/sidebar', [], $layouts_path); ?>
<div class="tf-library-body">
<?php
echo LayoutHelper::render('library/toolbar', [], $layouts_path);
echo LayoutHelper::render('library/noresults', [], $layouts_path);
echo LayoutHelper::render('library/items', $items_payload, $layouts_path);
echo LayoutHelper::render('library/footer', $footer_payload, $layouts_path);
?>
</div>
</div>

View File

@ -0,0 +1,80 @@
<?php
/**
* @package Advanced Custom Fields
* @version 2.8.8 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Language\Text;
?>
<!-- Library Toolbar -->
<div class="tf-library-toolbar">
<!-- Left -->
<div class="toolbar-left">
<div class="tf-library-search">
<input type="search" id="tf_search_template" data-search="true" placeholder="<?php echo Text::_('NR_SEARCH'); ?>..." name="tf-library-search">
<svg class="tf-library-search-icon" width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="7.5" cy="7.5" r="6.5" stroke="currentColor" stroke-width="2"/>
<path d="M12.207 12.2075L15.9994 15.9999" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
</svg>
</div>
</div>
<!-- /Left -->
<!-- Right -->
<div class="toolbar-right">
<a href="#" class="item tf-library-favorite-icon tf-library-view-favorites">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.902 6.62124C14.3943 9.04222 11.0187 11.1197 7.99845 14C4.97819 11.1197 1.60265 9.04223 1.09492 6.62125C0.231957 2.50649 5.47086 -0.0322559 7.99845 4.12617C10.7204 -0.0322523 15.7649 2.50648 14.902 6.62124Z" fill="currentColor" stroke="currentColor" stroke-linejoin="round"/>
</svg>
<?php echo Text::_('NR_MY_FAVORITES'); ?>
</a>
<div class="item sorting-selector-item">
<div class="sort-wrapper">
<div class="sorting-selected-label">
<span class="selected-label"><?php echo Text::_('NR_TRENDING'); ?></span>
<svg width="10" height="6" viewBox="0 0 10 6" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 1L5.70711 4.29289C5.31658 4.68342 4.68342 4.68342 4.29289 4.29289L1 0.999999" stroke="currentColor" stroke-linecap="round"/></svg>
</div>
<ul class="sorting-selector-items">
<li data-value="featured"><?php echo Text::_('NR_FEATURED'); ?></li>
<li data-value="popularity"><?php echo Text::_('NR_POPULAR'); ?></li>
<li data-value="trending" class="selected"><?php echo Text::_('NR_TRENDING'); ?></li>
<li data-value="date"><?php echo Text::_('NR_NEWEST'); ?></li>
</ul>
</div>
</div>
</div>
<!-- /Right -->
</div>
<!-- /Library Toolbar -->
<!-- Library Selected Filters -->
<div class="tf-library-selected-filters-pills-wrapper">
<div><?php echo Text::_('NR_SHOWING_RESULTS_FOR'); ?></div>
<div class="tf-library-selected-filters-pills"></div>
<div class="tf-library-filter-template">
<div class="filter" data-filter="">
<span class="filter-label"></span>
<svg class="tf-library-filter-pill-item-remove" width="14" height="14" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="5" cy="5" r="4.5" stroke="currentColor"/>
<rect x="7" y="6.5" width="0.707105" height="4.94973" transform="rotate(135 7 6.5)" fill="currentColor"/>
<rect width="0.707105" height="4.94973" transform="matrix(-0.707109 -0.707105 0.707109 -0.707105 3.5 7)" fill="currentColor"/>
</svg>
</div>
</div>
<a href="#" class="tf-library-filters-clear-all"><?php echo Text::_('NR_CLEAR_ALL'); ?></a>
</div>
<!-- /Library Selected Filters -->
<!-- Library Messages -->
<div class="tf-library-messages alert alert-warning is-hidden">
<span class="tf-library-messages-text"></span>
<button type="button" class="close btn-close tf-library-messages-hide-btn" data-<?php echo defined('nrJ4') ? 'bs-' : ''; ?>>
<?php echo !defined('nrJ4') ? '<span aria-hidden="true">&times;</span>' : ''; ?>
</button>
</div>
<!-- /Library Messages -->