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,98 @@
<?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\HTML\HTMLHelper;
use Joomla\CMS\Factory;
extract($displayData);
if (!$value || !is_array($value) || !count($value))
{
return;
}
if (!$readonly && !$disabled)
{
foreach (\NRFramework\Widgets\Accordion::getJS() as $path)
{
HTMLHelper::script($path, ['relative' => true, 'version' => 'auto']);
}
}
if ($load_stylesheet)
{
foreach (\NRFramework\Widgets\Accordion::getCSS() as $path)
{
HTMLHelper::stylesheet($path, ['relative' => true, 'version' => 'auto']);
}
}
if ($load_css_vars && !empty($custom_css))
{
Factory::getDocument()->addStyleDeclaration($custom_css);
}
$open_icon = $close_icon = '';
if ($show_icon !== 'none')
{
switch ($icon)
{
case 'arrow':
$open_icon = '<svg width="20" height="20" viewBox="0 0 20 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 11.4421L0 1.44217L1.44217 0L10 8.58507L18.5578 0.0271949L20 1.46936L10 11.4421Z" fill="currentColor" /></svg>';
$open_icon = '<svg width="20" height="20" viewBox="0 0 20 9" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 9L2.5 1.13436L3.58162 0L10 6.75274L16.4184 0.0213906L17.5 1.15575L10 9Z" fill="currentColor"/></svg>';
break;
case 'circle_arrow':
$open_icon = '<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 13.1012L14.2287 8.87247L13.3705 8.04049L10 11.411L6.62954 8.04049L5.77128 8.87247L10 13.1012ZM10.0018 20C8.62946 20 7.3365 19.7375 6.12288 19.2126C4.90927 18.6877 3.84796 17.971 2.93895 17.0624C2.02994 16.1537 1.31285 15.0929 0.787713 13.8798C0.262571 12.6667 0 11.374 0 10.0018C0 8.61867 0.262457 7.31863 0.787371 6.10165C1.31228 4.88464 2.02904 3.82603 2.93764 2.9258C3.84626 2.02555 4.9071 1.31285 6.12017 0.787713C7.33326 0.262571 8.62595 0 9.99824 0C11.3813 0 12.6814 0.262457 13.8984 0.78737C15.1154 1.31228 16.174 2.02465 17.0742 2.92448C17.9744 3.82433 18.6871 4.88248 19.2123 6.09894C19.7374 7.31538 20 8.61514 20 9.99824C20 11.3705 19.7375 12.6635 19.2126 13.8771C18.6877 15.0907 17.9753 16.152 17.0755 17.061C16.1757 17.9701 15.1175 18.6871 13.9011 19.2123C12.6846 19.7374 11.3849 20 10.0018 20ZM10 18.8057C12.4507 18.8057 14.531 17.9481 16.2409 16.2328C17.9508 14.5176 18.8057 12.44 18.8057 10C18.8057 7.54926 17.9508 5.46895 16.2409 3.75909C14.531 2.04924 12.4507 1.19432 10 1.19432C7.56005 1.19432 5.48244 2.04924 3.76719 3.75909C2.05194 5.46895 1.19432 7.54926 1.19432 10C1.19432 12.44 2.05194 14.5176 3.76719 16.2328C5.48244 17.9481 7.56005 18.8057 10 18.8057Z" fill="currentColor" /></svg>';
break;
case 'plus_minus':
$open_icon = '<svg width="20" height="20" viewBox="0 0 20 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.36966 15V8.13034H2.5V6.86966H9.36966V0H10.6303V6.86966H17.5V8.13034H10.6303V15H9.36966Z" fill="currentColor"/></svg>';
$close_icon = '<svg width="20" height="20" viewBox="0 0 20 3" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 2.13033V0.869659H18V2.13033H3Z" fill="currentColor"/></svg>';
break;
case 'circle_plus_minus':
$open_icon = '<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.46155 15H10.6558V10.6721H15V9.47773H10.6558V5.00001H9.46155V9.47773H5.00001V10.6721H9.46155V15ZM10.0088 20C8.62358 20 7.32624 19.7375 6.11673 19.2126C4.90721 18.6877 3.84796 17.971 2.93895 17.0624C2.02994 16.1537 1.31285 15.0943 0.787713 13.884C0.262571 12.6737 0 11.3753 0 9.9886C0 8.60869 0.262457 7.31163 0.787371 6.09744C1.31228 4.88324 2.02904 3.82603 2.93764 2.9258C3.84626 2.02555 4.90571 1.31285 6.11599 0.787713C7.32627 0.262571 8.62474 0 10.0114 0C11.3913 0 12.6884 0.262457 13.9026 0.78737C15.1168 1.31228 16.174 2.02465 17.0742 2.92448C17.9744 3.82433 18.6871 4.88248 19.2123 6.09894C19.7374 7.31538 20 8.61281 20 9.99124C20 11.3764 19.7375 12.6738 19.2126 13.8833C18.6877 15.0928 17.9753 16.1504 17.0755 17.0562C16.1757 17.962 15.1175 18.679 13.9011 19.2074C12.6846 19.7358 11.3872 20 10.0088 20ZM10.0132 18.8057C12.4551 18.8057 14.531 17.9481 16.2409 16.2328C17.9508 14.5176 18.8057 12.4356 18.8057 9.98684C18.8057 7.54487 17.9524 5.46895 16.2458 3.75909C14.5393 2.04924 12.4573 1.19432 10 1.19432C7.56005 1.19432 5.48244 2.0476 3.76719 3.75417C2.05194 5.46073 1.19432 7.54268 1.19432 10C1.19432 12.44 2.05194 14.5176 3.76719 16.2328C5.48244 17.9481 7.56443 18.8057 10.0132 18.8057Z" fill="currentColor" /></svg>';
$close_icon = '<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.00001 10.5384H15V9.34416H5.00001V10.5384ZM10.0018 20C8.62946 20 7.3365 19.7375 6.12288 19.2126C4.90927 18.6877 3.84796 17.971 2.93895 17.0624C2.02994 16.1537 1.31285 15.0929 0.787713 13.8798C0.262571 12.6667 0 11.374 0 10.0018C0 8.61867 0.262457 7.31863 0.787371 6.10165C1.31228 4.88464 2.02904 3.82603 2.93764 2.9258C3.84626 2.02555 4.9071 1.31285 6.12017 0.787713C7.33326 0.262571 8.62595 0 9.99824 0C11.3813 0 12.6814 0.262457 13.8984 0.78737C15.1154 1.31228 16.174 2.02465 17.0742 2.92448C17.9744 3.82433 18.6871 4.88248 19.2123 6.09894C19.7374 7.31538 20 8.61514 20 9.99824C20 11.3705 19.7375 12.6635 19.2126 13.8771C18.6877 15.0907 17.9753 16.152 17.0755 17.061C16.1757 17.9701 15.1175 18.6871 13.9011 19.2123C12.6846 19.7374 11.3849 20 10.0018 20ZM10 18.8057C12.4507 18.8057 14.531 17.9481 16.2409 16.2328C17.9508 14.5176 18.8057 12.44 18.8057 10C18.8057 7.54926 17.9508 5.46895 16.2409 3.75909C14.531 2.04924 12.4507 1.19432 10 1.19432C7.56005 1.19432 5.48244 2.04924 3.76719 3.75909C2.05194 5.46895 1.19432 7.54926 1.19432 10C1.19432 12.44 2.05194 14.5176 3.76719 16.2328C5.48244 17.9481 7.56005 18.8057 10 18.8057Z" fill="currentColor" /></svg>';
break;
}
}
?>
<div class="nrf-widget tf-accordion-widget<?php echo $css_class; ?>">
<?php
foreach ($value as $index => $accordion_item)
{
$item_atts = '';
$content_atts = 'style="height: 0px;"';
if (($initial_state === 'expanded-first' && $index === 0) || $initial_state === 'expanded')
{
$item_atts = 'data-expanded="true"';
$content_atts = '';
}
?>
<div class="tf-accordion-widget--item<?php echo $panel_css_class ? ' ' . $panel_css_class : ''; ?>"<?php echo $item_atts; ?>>
<?php if (isset($accordion_item['title'])): ?>
<div class="tf-accordion-widget--item--title">
<?php echo $show_icon === 'left' ? '<div class="tf-accordion-widget--item--title--actions">' . $open_icon . $close_icon . '</div>' : ''; ?>
<div class="tf-accordion-widget--item--title--content"><?php echo $accordion_item['title']; ?></div>
<?php echo $show_icon === 'right' ? '<div class="tf-accordion-widget--item--title--actions">' . $open_icon . $close_icon . '</div>' : ''; ?>
</div>
<?php endif; ?>
<?php if (isset($accordion_item['content'])): ?>
<div class="tf-accordion-widget--item--content"<?php echo $content_atts; ?>><?php echo $accordion_item['content']; ?></div>
<?php endif; ?>
</div>
<?php
}
?>
</div>

View File

@ -0,0 +1,28 @@
<?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;
use Joomla\CMS\Factory;
extract($displayData);
$options = isset($options) ? $options : $displayData;
if ($options['load_css_vars'] && !empty($options['custom_css']))
{
Factory::getDocument()->addStyleDeclaration($options['custom_css']);
}
?>
<div class="nrf-widget bingmap map-widget<?php echo $options['css_class']; ?>" id="<?php echo $id; ?>" data-options="<?php echo htmlspecialchars(json_encode($options)); ?>">
<div class="map-item"></div>
</div>

View File

@ -0,0 +1,65 @@
<?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\HTML\HTMLHelper;
use Joomla\CMS\Factory;
extract($displayData);
if (!$readonly && !$disabled)
{
HTMLHelper::script('plg_system_nrframework/widgets/colorpicker.js', ['relative' => true, 'version' => 'auto']);
}
if ($load_stylesheet)
{
HTMLHelper::stylesheet('plg_system_nrframework/widgets/colorpicker.css', ['relative' => true, 'version' => 'auto']);
}
if ($load_css_vars)
{
Factory::getDocument()->addStyleDeclaration('
.nrf-colorpicker-wrapper.' . $id . ' {
--input-background-color: ' . $input_bg_color . ';
--input-border-color: ' . $input_border_color . ';
--input-border-color-focus: ' . $input_border_color_focus . ';
--input-text-color: ' . $input_text_color . ';
}
');
}
?>
<div class="nrf-widget nrf-colorpicker-wrapper<?php echo $css_class; ?>">
<input type="color"
value="<?php echo $value; ?>"
<?php if ($readonly || $disabled): ?>
disabled
<?php endif; ?>
<?php if ($aria_label): ?>
aria-label="<?php echo htmlspecialchars($aria_label, ENT_COMPAT, 'UTF-8'); ?>"
<?php endif; ?>
/>
<input type="text"
id="<?php echo $id; ?>"
name="<?php echo $name; ?>"
class="<?php echo $input_class; ?>"
value="<?php echo $value; ?>"
placeholder="<?php echo $placeholder; ?>"
<?php if ($required) { ?>
required
<?php } ?>
<?php if ($readonly): ?>
readonly
<?php endif; ?>
/>
</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\HTML\HTMLHelper;
use Joomla\CMS\Factory;
extract($displayData);
if ($countdown_type === 'static' && (empty($value) || $value === '0000-00-00 00:00:00'))
{
return;
}
if ($load_stylesheet)
{
foreach (\NRFramework\Widgets\Countdown::getCSS($theme) as $path)
{
HTMLHelper::stylesheet($path, ['relative' => true, 'version' => 'auto']);
}
}
if ($load_css_vars && !empty($custom_css))
{
Factory::getDocument()->addStyleDeclaration($custom_css);
}
foreach (\NRFramework\Widgets\Countdown::getJS() as $path)
{
HTMLHelper::script($path, ['relative' => true, 'version' => 'auto']);
}
?>
<div class="nrf-widget nrf-countdown<?php echo $css_class; ?>" id="<?php echo $id; ?>" <?php echo $atts; ?>></div>

View File

@ -0,0 +1,129 @@
<?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\HTML\HTMLHelper;
use Joomla\CMS\Factory;
extract($displayData);
if (!$value || !is_array($value) || !count($value))
{
return;
}
if (!$readonly && !$disabled)
{
foreach (\NRFramework\Widgets\FAQ::getJS() as $path)
{
HTMLHelper::script($path, ['relative' => true, 'version' => 'auto']);
}
}
if ($load_stylesheet)
{
foreach (\NRFramework\Widgets\FAQ::getCSS() as $path)
{
HTMLHelper::stylesheet($path, ['relative' => true, 'version' => 'auto']);
}
}
if ($load_css_vars && !empty($custom_css))
{
Factory::getDocument()->addStyleDeclaration($custom_css);
}
$open_icon = $close_icon = '';
if ($show_toggle_icon)
{
switch ($icon)
{
case 'arrow':
$open_icon = '<svg width="20" height="20" viewBox="0 0 20 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 11.4421L0 1.44217L1.44217 0L10 8.58507L18.5578 0.0271949L20 1.46936L10 11.4421Z" fill="currentColor" /></svg>';
$open_icon = '<svg width="20" height="20" viewBox="0 0 20 9" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 9L2.5 1.13436L3.58162 0L10 6.75274L16.4184 0.0213906L17.5 1.15575L10 9Z" fill="currentColor"/></svg>';
break;
case 'circle_arrow':
$open_icon = '<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 13.1012L14.2287 8.87247L13.3705 8.04049L10 11.411L6.62954 8.04049L5.77128 8.87247L10 13.1012ZM10.0018 20C8.62946 20 7.3365 19.7375 6.12288 19.2126C4.90927 18.6877 3.84796 17.971 2.93895 17.0624C2.02994 16.1537 1.31285 15.0929 0.787713 13.8798C0.262571 12.6667 0 11.374 0 10.0018C0 8.61867 0.262457 7.31863 0.787371 6.10165C1.31228 4.88464 2.02904 3.82603 2.93764 2.9258C3.84626 2.02555 4.9071 1.31285 6.12017 0.787713C7.33326 0.262571 8.62595 0 9.99824 0C11.3813 0 12.6814 0.262457 13.8984 0.78737C15.1154 1.31228 16.174 2.02465 17.0742 2.92448C17.9744 3.82433 18.6871 4.88248 19.2123 6.09894C19.7374 7.31538 20 8.61514 20 9.99824C20 11.3705 19.7375 12.6635 19.2126 13.8771C18.6877 15.0907 17.9753 16.152 17.0755 17.061C16.1757 17.9701 15.1175 18.6871 13.9011 19.2123C12.6846 19.7374 11.3849 20 10.0018 20ZM10 18.8057C12.4507 18.8057 14.531 17.9481 16.2409 16.2328C17.9508 14.5176 18.8057 12.44 18.8057 10C18.8057 7.54926 17.9508 5.46895 16.2409 3.75909C14.531 2.04924 12.4507 1.19432 10 1.19432C7.56005 1.19432 5.48244 2.04924 3.76719 3.75909C2.05194 5.46895 1.19432 7.54926 1.19432 10C1.19432 12.44 2.05194 14.5176 3.76719 16.2328C5.48244 17.9481 7.56005 18.8057 10 18.8057Z" fill="currentColor" /></svg>';
break;
case 'plus_minus':
$open_icon = '<svg width="20" height="20" viewBox="0 0 20 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.36966 15V8.13034H2.5V6.86966H9.36966V0H10.6303V6.86966H17.5V8.13034H10.6303V15H9.36966Z" fill="currentColor"/></svg>';
$close_icon = '<svg width="20" height="20" viewBox="0 0 20 3" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 2.13033V0.869659H18V2.13033H3Z" fill="currentColor"/></svg>';
break;
case 'circle_plus_minus':
$open_icon = '<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.46155 15H10.6558V10.6721H15V9.47773H10.6558V5.00001H9.46155V9.47773H5.00001V10.6721H9.46155V15ZM10.0088 20C8.62358 20 7.32624 19.7375 6.11673 19.2126C4.90721 18.6877 3.84796 17.971 2.93895 17.0624C2.02994 16.1537 1.31285 15.0943 0.787713 13.884C0.262571 12.6737 0 11.3753 0 9.9886C0 8.60869 0.262457 7.31163 0.787371 6.09744C1.31228 4.88324 2.02904 3.82603 2.93764 2.9258C3.84626 2.02555 4.90571 1.31285 6.11599 0.787713C7.32627 0.262571 8.62474 0 10.0114 0C11.3913 0 12.6884 0.262457 13.9026 0.78737C15.1168 1.31228 16.174 2.02465 17.0742 2.92448C17.9744 3.82433 18.6871 4.88248 19.2123 6.09894C19.7374 7.31538 20 8.61281 20 9.99124C20 11.3764 19.7375 12.6738 19.2126 13.8833C18.6877 15.0928 17.9753 16.1504 17.0755 17.0562C16.1757 17.962 15.1175 18.679 13.9011 19.2074C12.6846 19.7358 11.3872 20 10.0088 20ZM10.0132 18.8057C12.4551 18.8057 14.531 17.9481 16.2409 16.2328C17.9508 14.5176 18.8057 12.4356 18.8057 9.98684C18.8057 7.54487 17.9524 5.46895 16.2458 3.75909C14.5393 2.04924 12.4573 1.19432 10 1.19432C7.56005 1.19432 5.48244 2.0476 3.76719 3.75417C2.05194 5.46073 1.19432 7.54268 1.19432 10C1.19432 12.44 2.05194 14.5176 3.76719 16.2328C5.48244 17.9481 7.56443 18.8057 10.0132 18.8057Z" fill="currentColor" /></svg>';
$close_icon = '<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.00001 10.5384H15V9.34416H5.00001V10.5384ZM10.0018 20C8.62946 20 7.3365 19.7375 6.12288 19.2126C4.90927 18.6877 3.84796 17.971 2.93895 17.0624C2.02994 16.1537 1.31285 15.0929 0.787713 13.8798C0.262571 12.6667 0 11.374 0 10.0018C0 8.61867 0.262457 7.31863 0.787371 6.10165C1.31228 4.88464 2.02904 3.82603 2.93764 2.9258C3.84626 2.02555 4.9071 1.31285 6.12017 0.787713C7.33326 0.262571 8.62595 0 9.99824 0C11.3813 0 12.6814 0.262457 13.8984 0.78737C15.1154 1.31228 16.174 2.02465 17.0742 2.92448C17.9744 3.82433 18.6871 4.88248 19.2123 6.09894C19.7374 7.31538 20 8.61514 20 9.99824C20 11.3705 19.7375 12.6635 19.2126 13.8771C18.6877 15.0907 17.9753 16.152 17.0755 17.061C16.1757 17.9701 15.1175 18.6871 13.9011 19.2123C12.6846 19.7374 11.3849 20 10.0018 20ZM10 18.8057C12.4507 18.8057 14.531 17.9481 16.2409 16.2328C17.9508 14.5176 18.8057 12.44 18.8057 10C18.8057 7.54926 17.9508 5.46895 16.2409 3.75909C14.531 2.04924 12.4507 1.19432 10 1.19432C7.56005 1.19432 5.48244 2.04924 3.76719 3.75909C2.05194 5.46895 1.19432 7.54926 1.19432 10C1.19432 12.44 2.05194 14.5176 3.76719 16.2328C5.48244 17.9481 7.56005 18.8057 10 18.8057Z" fill="currentColor" /></svg>';
break;
}
}
$total_items = count($value);
$items_per_column = $columns ? ceil($total_items / $columns) : $total_items;
$item_index = 0;
?>
<div class="nrf-widget tf-faq-widget<?php echo $css_class; ?>">
<?php
for ($i = 0; $i < $columns; $i++)
{
if ($columns > 1)
{
?><div class="tf-faq--row"><?php
}
for ($j = 0; $j < $items_per_column; $j++)
{
if ($item_index >= $total_items)
{
continue;
}
$faq_item = $value[$item_index];
$item_atts = '';
$answer_atts = 'style="height: 0px;"';
if (($initial_state === 'first-open' && $item_index === 0) || $initial_state === 'all-open')
{
$item_atts = 'data-open="true"';
$answer_atts = '';
}
?>
<div class="tf-faq-widget--item<?php echo $item_css_class ? ' ' . $item_css_class : ''; ?>"<?php echo $item_atts; ?>>
<?php if (isset($faq_item['question'])): ?>
<div class="tf-faq-widget--item--question">
<?php echo $show_toggle_icon && $icon_position === 'left' ? '<div class="tf-faq-widget--item--question--actions">' . $open_icon . $close_icon . '</div>' : ''; ?>
<div class="tf-faq-widget--item--question--content"><?php echo $faq_item['question']; ?></div>
<?php echo $show_toggle_icon && $icon_position === 'right' ? '<div class="tf-faq-widget--item--question--actions">' . $open_icon . $close_icon . '</div>' : ''; ?>
</div>
<?php endif; ?>
<?php if (isset($faq_item['answer'])): ?>
<div class="tf-faq-widget--item--answer"<?php echo $answer_atts; ?>><?php echo $faq_item['answer']; ?></div>
<?php endif; ?>
</div>
<?php
$item_index++;
if ($separator && $item_index !== $total_items)
{
?><hr class="tf-faq-separator" /><?php
}
}
if ($columns > 1)
{
?></div><?php
}
}
?>
</div>

View File

@ -0,0 +1,87 @@
<?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\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Factory;
extract($displayData);
if (!$items || !is_array($items) || !count($items))
{
return;
}
if (!$readonly && !$disabled)
{
HTMLHelper::script('plg_system_nrframework/widgets/gallery/gallery.js', ['relative' => true, 'version' => 'auto']);
}
if ($load_stylesheet)
{
HTMLHelper::stylesheet('plg_system_nrframework/widgets/gallery.css', ['relative' => true, 'version' => 'auto']);
}
if ($style === 'justified')
{
HTMLHelper::script('plg_system_nrframework/vendor/justified.layout.min.js', ['relative' => true, 'version' => 'auto']);
HTMLHelper::script('plg_system_nrframework/widgets/gallery/justified.js', ['relative' => true, 'version' => 'auto']);
}
if ($load_css_vars && !empty($custom_css))
{
Factory::getDocument()->addStyleDeclaration($custom_css);
}
// Add global CSS vars
$global_css = '.nrf-widget.tf-gallery-wrapper.' . $id . ' {
--mobile-tags-default-style: ' . ($tags_mobile === 'show' ? 'flex' : 'none') . ';
--mobile-tags-dropdown-style: ' . ($tags_mobile === 'dropdown' ? 'flex' : 'none') . ';
}';
Factory::getDocument()->addStyleDeclaration($global_css);
?>
<div class="nrf-widget tf-gallery-wrapper<?php echo $css_class; ?>" <?php echo $atts; ?>>
<?php if ($tags_position === 'above'): ?>
<?php echo $this->sublayout('tags', $displayData); ?>
<?php endif; ?>
<div class="gallery-items<?php echo $gallery_items_css; ?>">
<?php
foreach ($items as $index => $item)
{
// If its an invalid image path, show a warning and continue
if (isset($item['invalid']) && $show_warnings)
{
echo '<div><strong>Warning:</strong> ' . sprintf(Text::_('NR_INVALID_IMAGE_PATH'), $item['path']) . '</div>';
continue;
}
$item['index'] = $index;
$displayData['item'] = $item;
echo $this->sublayout('item', $displayData);
}
?>
</div>
<?php if ($tags_position === 'below'): ?>
<?php echo $this->sublayout('tags', $displayData); ?>
<?php endif; ?>
<?php
if ($lightbox)
{
echo $this->sublayout('glightbox', $displayData);
}
?>
</div>

View File

@ -0,0 +1,23 @@
<?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\HTML\HTMLHelper;
extract($displayData);
if (!$readonly && !$disabled)
{
HTMLHelper::stylesheet('plg_system_nrframework/vendor/glightbox.min.css', ['relative' => true, 'version' => 'auto']);
HTMLHelper::script('plg_system_nrframework/vendor/glightbox.min.js', ['relative' => true, 'version' => 'auto']);
}

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');
extract($displayData);
use NRFramework\Helpers\Widgets\Gallery as GalleryHelper;
?>
<figure
class="item"
<?php echo $tags_position !== 'disabled' && isset($item['tags']) && is_array($item['tags']) && count($item['tags']) ? ' data-tags="' . htmlentities(json_encode($item['tags']), ENT_COMPAT, 'UTF-8') . '"' : ''; ?>
>
<?php if ($lightbox) { ?>
<a href="<?php echo $item['url']; ?>" class="tf-gallery-lightbox-item <?php echo $id; ?>" data-type="image" data-description=".glightbox-desc.<?php echo $id; ?>.desc-<?php echo $item['index']; ?>">
<?php } ?>
<img<?php echo $style === 'justified' ? '' : ' loading="lazy"'; ?> class="<?php echo $thumb_class ?>" src="<?php echo $item['thumbnail_url']; ?>"<?php echo $item['img_atts']; ?> alt="<?php echo strip_tags($item['alt']); ?>" />
<?php if ($lightbox) { ?>
</a>
<div class="glightbox-desc <?php echo $id . ' desc-' . $item['index']; ?>">
<div class="caption"><?php echo nl2br($item['caption']); ?></div>
<div class="module"><?php echo !empty($module) ? GalleryHelper::loadModule($module) : ''; ?></div>
</div>
<?php } ?>
</figure>

View File

@ -0,0 +1,51 @@
<?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);
if (!$tags)
{
return;
}
?>
<div class="tf-gallery-tags position-<?php echo $tags_position; ?>">
<?php if ($all_tags_item_label): ?>
<a href="#" class="tf-gallery-tags--item active" data-tag="*">
<?php echo $all_tags_item_label; ?>
</a>
<?php endif; ?>
<?php foreach ($tags as $tag): ?>
<a href="#" class="tf-gallery-tags--item" data-tag="<?php echo $tag; ?>">
<?php echo $tag; ?>
</a>
<?php endforeach; ?>
</div>
<?php if ($tags_mobile === 'dropdown'): ?>
<select class="tf-gallery-tags tf-gallery-tags-dropdown position-<?php echo $tags_position; ?>">
<option value="" disabled><?php echo Text::_('NR_FILTER_BY_TAG'); ?></option>
<?php if ($all_tags_item_label): ?>
<option class="tf-gallery-tags--item active" value="*">
<?php echo $all_tags_item_label; ?>
</option>
<?php endif; ?>
<?php foreach ($tags as $tag): ?>
<option class="tf-gallery-tags--item" value="<?php echo $tag; ?>">
<?php echo $tag; ?>
</option>
<?php endforeach; ?>
</select>
<?php endif; ?>

View File

@ -0,0 +1,326 @@
<?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\Component\ComponentHelper;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Factory;
use Joomla\CMS\Uri\Uri;
if (!$item_id && $context === 'module')
{
echo Text::_('NR_GALLERY_MANAGER_PLEASE_SAVE_ITEM_FIRST');
return;
}
if (!$disabled)
{
HTMLHelper::_('bootstrap.modal');
if (strpos($css_class, 'ordering-default') !== false)
{
HTMLHelper::script('plg_system_nrframework/vendor/sortable.min.js', ['relative' => true, 'version' => 'auto']);
}
// Required in the front-end for the media manager to work
if (!defined('nrJ4'))
{
HTMLHelper::_('behavior.modal');
// Front-end editing: The below script is required for front-end media library selection to work as its missing from parent window when called
if (Factory::getApplication()->isClient('site'))
{
?>
<script>
function jInsertFieldValue(value, id) {
var old_id = document.id(id).value;
if (old_id != id) {
var elem = document.id(id)
elem.value = value;
elem.fireEvent("change");
}
}
</script>
<?php
}
}
else
{
HTMLHelper::_('bootstrap.dropdown', '.dropdown-toggle');
$doc = Factory::getApplication()->getDocument();
$doc->addScriptOptions('media-picker', [
'images' => array_map(
'trim',
explode(
',',
ComponentHelper::getParams('com_media')->get(
'image_extensions',
'bmp,gif,jpg,jpeg,png'
)
)
)
]);
$wam = $doc->getWebAssetManager();
$wam->useScript('webcomponent.media-select');
Text::script('JFIELD_MEDIA_LAZY_LABEL');
Text::script('JFIELD_MEDIA_ALT_LABEL');
Text::script('JFIELD_MEDIA_ALT_CHECK_LABEL');
Text::script('JFIELD_MEDIA_ALT_CHECK_DESC_LABEL');
Text::script('JFIELD_MEDIA_CLASS_LABEL');
Text::script('JFIELD_MEDIA_FIGURE_CLASS_LABEL');
Text::script('JFIELD_MEDIA_FIGURE_CAPTION_LABEL');
Text::script('JFIELD_MEDIA_LAZY_LABEL');
Text::script('JFIELD_MEDIA_SUMMARY_LABEL');
}
}
// Use admin gallery manager path if browsing via backend
$gallery_manager_path = Factory::getApplication()->isClient('administrator') ? 'administrator/' : '';
// Javascript files should always load as they are used to populate the Gallery Manager via Dropzone
HTMLHelper::script('plg_system_nrframework/dropzone.min.js', ['relative' => true, 'version' => 'auto']);
HTMLHelper::script('plg_system_nrframework/widgets/gallery/manager_init.js', ['relative' => true, 'version' => 'auto']);
HTMLHelper::script('plg_system_nrframework/widgets/gallery/manager.js', ['relative' => true, 'version' => 'auto']);
if ($load_stylesheet)
{
HTMLHelper::stylesheet('plg_system_nrframework/widgets/gallerymanager.css', ['relative' => true, 'version' => 'auto']);
}
$tags = isset($tags) ? $tags : [];
$ai_icon = '<svg width="24" height="22" viewBox="0 0 24 22" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M23.7471 8.7502C20.687 8.11795 18.3098 5.71543 17.6775 2.65536C17.6523 2.50362 17.5258 2.40247 17.3488 2.40247C17.197 2.40247 17.0706 2.50362 17.02 2.65536C16.3878 5.71543 13.9852 8.11795 10.9505 8.7502C10.7987 8.77549 10.6976 8.90194 10.6976 9.07897C10.6976 9.2307 10.7987 9.35715 10.9505 9.40773C14.0105 10.04 16.3878 12.4425 17.02 15.4773C17.0453 15.629 17.1718 15.7302 17.3488 15.7302C17.5005 15.7302 17.627 15.629 17.6775 15.4773C18.3098 12.4172 20.7123 10.04 23.7471 9.40773C23.8988 9.38244 24 9.25599 24 9.07897C24 8.90194 23.8988 8.77549 23.7471 8.7502Z" fill="currentColor"/><path d="M13.5554 15.882C11.1022 15.3762 9.18022 13.4542 8.67443 10.9758C8.64914 10.8493 8.54798 10.7734 8.42153 10.7734C8.29508 10.7734 8.19392 10.8493 8.16863 10.9758C7.66284 13.4542 5.74081 15.3762 3.28771 15.882C3.16126 15.9073 3.08539 16.0084 3.08539 16.1349C3.08539 16.2613 3.16126 16.3625 3.28771 16.3878C5.74081 16.8936 7.66284 18.8156 8.16863 21.2687C8.19392 21.3951 8.29508 21.471 8.42153 21.471C8.54798 21.471 8.64914 21.3951 8.67443 21.2687C9.18022 18.8156 11.1022 16.8936 13.5554 16.3878C13.6818 16.3625 13.7577 16.2613 13.7577 16.1349C13.7577 16.0084 13.6818 15.9073 13.5554 15.882Z" fill="currentColor"/><path d="M4.83035 10.0906C4.88093 10.2424 5.00737 10.3435 5.15911 10.3435C5.31085 10.3435 5.46259 10.2424 5.48788 10.0906C6.01897 7.83983 7.83983 6.04426 10.0653 5.51317C10.2171 5.46259 10.3182 5.33614 10.3182 5.1844C10.3182 5.03266 10.2171 4.88093 10.0653 4.85564C7.78925 4.29926 6.01897 2.52898 5.48788 0.252898C5.46259 0.101159 5.31085 0 5.15911 0C5.00737 0 4.85564 0.101159 4.83035 0.252898C4.27397 2.52898 2.52898 4.29926 0.252898 4.85564C0.101159 4.90622 0 5.03266 0 5.1844C0 5.33614 0.101159 5.48788 0.252898 5.51317C2.4784 6.04426 4.27397 7.83983 4.83035 10.0906Z" fill="currentColor"/></svg>';
?>
<!-- Gallery Manager -->
<div
class="nrf-widget tf-gallery-manager<?php echo $css_class; ?>"
data-context="<?php echo $context; ?>"
data-field-id="<?php echo $field_id; ?>"
data-item-id="<?php echo $item_id; ?>"
data-widget="<?php echo $widget; ?>"
>
<?php if ($required) { ?>
<!-- Make Joomla client-side form validator happy by adding a fake hidden input field when the Gallery is required. -->
<input type="hidden" required class="required" id="<?php echo $id; ?>"/>
<?php } ?>
<!-- Actions -->
<div class="tf-gallery-actions">
<div class="btn-group tf-gallery-actions-dropdown<?php echo !defined('nrJ4') ? ' dropdown' : ''; ?> " title="<?php echo Text::_('NR_GALLERY_MANAGER_SELECT_UNSELECT_IMAGES'); ?>">
<button class="btn btn-secondary add tf-gallery-actions-dropdown-current tf-gallery-actions-dropdown-action select" onclick="return false;"><i class="me-2 icon-checkbox-unchecked"></i></button>
<button class="btn btn-secondary add dropdown-toggle dropdown-toggle-split" data-<?php echo defined('nrJ4') ? 'bs-' : ''; ?>toggle="dropdown" title="<?php echo Text::_('NR_GALLERY_MANAGER_ADD_DROPDOWN'); ?>">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-item tf-gallery-actions-dropdown-action select"><?php echo Text::_('NR_GALLERY_MANAGER_SELECT_ALL_ITEMS'); ?></a></li>
<li><a href="#" class="dropdown-item tf-gallery-actions-dropdown-action unselect is-hidden"><?php echo Text::_('NR_GALLERY_MANAGER_UNSELECT_ALL_ITEMS'); ?></a></li>
</ul>
</div>
<a class="tf-gallery-regenerate-images-button icon-button" title="<?php echo Text::_('NR_GALLERY_MANAGER_REGENERATE_IMAGES_TITLE'); ?>">
<i class="icon-refresh"></i>
<div class="message"></div>
</a>
<a class="tf-gallery-remove-selected-items-button icon-button" title="<?php echo Text::_('NR_GALLERY_MANAGER_REMOVE_SELECTED_IMAGES'); ?>">
<i class="icon-trash"></i>
</a>
<?php if (!$openai_api_key): ?>
<a title="<?php echo Text::_('NR_GENERATE_IMAGE_DESCRIPTION_USING_AI') ?>" class="btn-visible-on-editing button-icon" data-toggle="modal" data-target="#tf-GalleryMissingValue-<?php echo $id; ?>" data-bs-toggle="modal" data-bs-target="#tf-GalleryMissingValue-<?php echo $id; ?>">
<?php echo $ai_icon; ?>
</a>
<?php else: ?>
<a href="#" class="btn-visible-on-editing button-icon tf-gallery-ai-apply-all-button" title="<?php echo Text::_('NR_GENERATE_IMAGE_DESC_TO_ALL_IMAGES'); ?>">
<?php echo $ai_icon; ?>
</a>
<?php endif; ?>
<div class="btn-group add-button<?php echo !defined('nrJ4') ? ' dropdown' : ''; ?>">
<button class="btn btn-success add tf-gallery-add-item-button" onclick="return false;" title="<?php echo Text::_('NR_GALLERY_MANAGER_ADD_IMAGES'); ?>"><i class="me-2 icon-pictures"></i><?php echo Text::_('NR_GALLERY_MANAGER_ADD_IMAGES'); ?></button>
<button class="btn btn-success add dropdown-toggle dropdown-toggle-split" data-<?php echo defined('nrJ4') ? 'bs-' : ''; ?>toggle="dropdown" title="<?php echo Text::_('NR_GALLERY_MANAGER_ADD_DROPDOWN'); ?>">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li>
<a <?php echo !defined('nrJ4') ? 'rel="{handler: \'iframe\', size: {x: 1000, y: 750}}" href="' . Uri::root() . $gallery_manager_path . '?option=com_media&view=images&tmpl=component&fieldid=' . $id . '_uploaded_file"' : 'href="#" data-bs-toggle="modal" data-bs-target="#tf-GalleryMediaManager-' . $id . '"'; ?> class="dropdown-item tf-gallery-browse-item-button<?php echo !defined('nrJ4') ? ' modal' : ''; ?> popup" title="<?php echo Text::_('NR_GALLERY_MANAGER_BROWSE_MEDIA_LIBRARY'); ?>"><i class="me-2 icon-folder-open"></i><?php echo Text::_('NR_GALLERY_MANAGER_BROWSE_MEDIA_LIBRARY'); ?></a>
</li>
</ul>
</div>
<span class="tf-gallery-ai-status"><?php echo Text::_('NR_GENERATED_IMAGE_DESCRIPTIONS'); ?></span>
<input type="hidden" class="media_uploader_file" id="<?php echo $id; ?>_uploaded_file" />
</div>
<!-- /Actions -->
<!-- Dropzone -->
<div
data-inputname="<?php echo $name; ?>"
data-maxfilesize="<?php echo $max_file_size; ?>"
data-maxfiles="<?php echo $limit_files; ?>"
data-acceptedfiles="<?php echo $allowed_file_types; ?>"
data-value='<?php echo $gallery_items ? json_encode($gallery_items, JSON_HEX_APOS) : ''; ?>'
data-baseurl="<?php echo Uri::base(); ?>"
data-rooturl="<?php echo Uri::root(); ?>"
class="tf-gallery-dz">
<!-- DZ Message Wrapper -->
<div class="dz-message">
<!-- Message -->
<div class="dz-message-center">
<span class="text"><?php echo Text::_('NR_GALLERY_MANAGER_DRAG_AND_DROP_TEXT'); ?></span>
<span class="browse"><?php echo Text::_('NR_GALLERY_MANAGER_BROWSE'); ?></span>
</div>
<!-- /Message -->
</div>
<!-- /DZ Message Wrapper -->
</div>
<!-- /Dropzone -->
<!-- Dropzone Preview Template -->
<template class="previewTemplate">
<div class="tf-gallery-preview-item template" data-item-id="">
<div class="checkmark-edited-icon"><?php echo Text::_('NR_UPDATED'); ?></div>
<div class="select-item-checkbox" title="<?php echo Text::_('NR_GALLERY_MANAGER_CHECK_TO_DELETE_ITEMS'); ?>">
<input type="checkbox" id="<?php echo $name; ?>[select-item]" />
<label for="<?php echo $name; ?>[select-item]">
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="mask0_279_439" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20"><rect width="20" height="20" fill="#D9D9D9"/></mask><g mask="url(#mask0_279_439)"><path d="M8.83342 13.8333L14.7084 7.95829L13.5417 6.79163L8.83342 11.5L6.45841 9.12496L5.29175 10.2916L8.83342 13.8333ZM10.0001 18.3333C8.8473 18.3333 7.76397 18.1145 6.75008 17.677C5.73619 17.2395 4.85425 16.6458 4.10425 15.8958C3.35425 15.1458 2.7605 14.2638 2.323 13.25C1.8855 12.2361 1.66675 11.1527 1.66675 9.99996C1.66675 8.84718 1.8855 7.76385 2.323 6.74996C2.7605 5.73607 3.35425 4.85413 4.10425 4.10413C4.85425 3.35413 5.73619 2.76038 6.75008 2.32288C7.76397 1.88538 8.8473 1.66663 10.0001 1.66663C11.1529 1.66663 12.2362 1.88538 13.2501 2.32288C14.264 2.76038 15.1459 3.35413 15.8959 4.10413C16.6459 4.85413 17.2397 5.73607 17.6772 6.74996C18.1147 7.76385 18.3334 8.84718 18.3334 9.99996C18.3334 11.1527 18.1147 12.2361 17.6772 13.25C17.2397 14.2638 16.6459 15.1458 15.8959 15.8958C15.1459 16.6458 14.264 17.2395 13.2501 17.677C12.2362 18.1145 11.1529 18.3333 10.0001 18.3333ZM10.0001 16.6666C11.8612 16.6666 13.4376 16.0208 14.7292 14.7291C16.0209 13.4375 16.6667 11.8611 16.6667 9.99996C16.6667 8.13885 16.0209 6.56246 14.7292 5.27079C13.4376 3.97913 11.8612 3.33329 10.0001 3.33329C8.13897 3.33329 6.56258 3.97913 5.27091 5.27079C3.97925 6.56246 3.33341 8.13885 3.33341 9.99996C3.33341 11.8611 3.97925 13.4375 5.27091 14.7291C6.56258 16.0208 8.13897 16.6666 10.0001 16.6666Z" fill="currentColor"/></g></svg>
</label>
</div>
<div class="tf-gallery-preview-item--actions">
<a href="#" class="tf-gallery-preview-edit-item" title="<?php echo Text::_('NR_GALLERY_MANAGER_CLICK_TO_EDIT_ITEM'); ?>" data-toggle="modal" data-target="#tf-GalleryEditItem-<?php echo $id; ?>" data-bs-toggle="modal" data-bs-target="#tf-GalleryEditItem-<?php echo $id; ?>"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="mask0_279_182" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20"><rect width="20" height="20" fill="#D9D9D9"/></mask><g mask="url(#mask0_279_182)"><path d="M4.16667 15.8333H5.35417L13.5 7.6875L12.3125 6.5L4.16667 14.6458V15.8333ZM2.5 17.5V13.9583L13.5 2.97917C13.6667 2.82639 13.8507 2.70833 14.0521 2.625C14.2535 2.54167 14.4653 2.5 14.6875 2.5C14.9097 2.5 15.125 2.54167 15.3333 2.625C15.5417 2.70833 15.7222 2.83333 15.875 3L17.0208 4.16667C17.1875 4.31944 17.309 4.5 17.3854 4.70833C17.4618 4.91667 17.5 5.125 17.5 5.33333C17.5 5.55556 17.4618 5.76736 17.3854 5.96875C17.309 6.17014 17.1875 6.35417 17.0208 6.52083L6.04167 17.5H2.5ZM12.8958 7.10417L12.3125 6.5L13.5 7.6875L12.8958 7.10417Z" fill="currentColor"/></g></svg></a>
<a href="#" class="tf-gallery-preview-remove-item" title="<?php echo Text::_('NR_GALLERY_MANAGER_CLICK_TO_DELETE_ITEM'); ?>" data-dz-remove><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="mask0_279_185" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20"><rect width="20" height="20" fill="#D9D9D9"/></mask><g mask="url(#mask0_279_185)"><path d="M5.83301 17.5C5.37467 17.5 4.98231 17.3368 4.65592 17.0104C4.32954 16.684 4.16634 16.2917 4.16634 15.8333V5H3.33301V3.33333H7.49967V2.5H12.4997V3.33333H16.6663V5H15.833V15.8333C15.833 16.2917 15.6698 16.684 15.3434 17.0104C15.017 17.3368 14.6247 17.5 14.1663 17.5H5.83301ZM14.1663 5H5.83301V15.8333H14.1663V5ZM7.49967 14.1667H9.16634V6.66667H7.49967V14.1667ZM10.833 14.1667H12.4997V6.66667H10.833V14.1667Z" fill="currentColor"/></g></svg></a>
</div>
<div class="dz-status"></div>
<div class="dz-thumb">
<div class="tf-gallery-preview-item--temp-label" title="<?php echo Text::_('NR_GALLERY_TEMPORARY_IMAGE_TITLE'); ?>"><?php echo Text::_('NR_TEMPORARY'); ?></div>
<div class="dz-progress"><span class="text"><?php echo Text::_('NR_GALLERY_MANAGER_UPLOADING'); ?></span><span class="dz-upload" data-dz-uploadprogress></span></div>
<div class="tf-gallery-preview-in-queue"><?php echo Text::_('NR_GALLERY_MANAGER_IN_QUEUE'); ?></div>
<img data-dz-thumbnail />
</div>
<div class="tf-gallery-preview-item--alt">
<?php if ($pro): ?>
<div class="tf-gallery-preview-item--alt--existing"></div>
<?php endif; ?>
<div class="tf-gallery-preview-item--alt--fields">
<textarea name="<?php echo $name; ?>[alt]" class="item-alt" placeholder="<?php echo Text::_('NR_GALLERY_MANAGER_IMAGE_DESCRIPTION_HINT'); ?>" title="<?php echo Text::_('NR_GALLERY_MANAGER_ALT_HINT'); ?>" rows="2"></textarea>
<?php if (!$pro): ?>
<div class="tf-gallery-ai-button" title="<?php echo Text::_('NR_GENERATE_IMAGE_DESCRIPTION_USING_AI') ?>">
<span data-pro-only="<?php echo Text::_('NR_AI_IMAGE_DESCRIPTION_GENERATION') ?>"><?php echo $ai_icon; ?></span>
</div>
<?php elseif (!$openai_api_key): ?>
<div class="tf-gallery-ai-button" title="<?php echo Text::_('NR_GENERATE_IMAGE_DESCRIPTION_USING_AI') ?>" data-toggle="modal" data-target="#tf-GalleryMissingValue-<?php echo $id; ?>" data-bs-toggle="modal" data-bs-target="#tf-GalleryMissingValue-<?php echo $id; ?>">
<?php echo $ai_icon; ?>
</div>
<?php else: ?>
<div class="tf-gallery-ai-button tf-gallery-preview-generate-caption-item" title="<?php echo Text::_('NR_GENERATE_IMAGE_DESCRIPTION_USING_AI') ?>">
<svg class="loading-state" xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="#e8eaed"><path d="M480-96q-78.72 0-148.8-30.24-70.08-30.24-122.4-82.56-52.32-52.32-82.56-122.4Q96-401.28 96-480q0-79.68 30.22-149.28 30.21-69.6 82.49-121.92 52.28-52.32 122.3-82.56Q401.04-864 479.69-864 496-864 506-854t10 25.51q0 15.51-10 26T480-792q-129.67 0-220.84 90.5Q168-611 168-480.5T259.16-259q91.17 91 220.84 91 131 0 221.5-91.16Q792-350.33 792-480q0-16 10.49-26t26-10Q844-516 854-506q10 10 10 26.31 0 78.65-30.24 148.68-30.24 70.02-82.56 122.3-52.32 52.28-121.92 82.49Q559.68-96 480-96Z" fill="currentColor" /></svg>
<?php echo $ai_icon; ?>
</div>
<div class="tf-gallery-preview-item--alt--choices">
<div class="tf-gallery-preview-item--alt--choices--item tf-gallery-preview-generate-caption-item-accept">
<svg width="14" height="11" viewBox="0 0 14 11" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.95837 11L0.208374 6.24996L1.39587 5.06246L4.95837 8.62496L12.6042 0.979126L13.7917 2.16663L4.95837 11Z" fill="currentColor"/></svg>
Accept
</div>
<div class="tf-gallery-preview-item--alt--choices--item tf-gallery-preview-generate-caption-item-discard">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.33335 11.8333L0.166687 10.6666L4.83335 5.99996L0.166687 1.33329L1.33335 0.166626L6.00002 4.83329L10.6667 0.166626L11.8334 1.33329L7.16669 5.99996L11.8334 10.6666L10.6667 11.8333L6.00002 7.16663L1.33335 11.8333Z" fill="currentColor"/></svg>
Discard
</div>
<div class="tf-gallery-preview-item--alt--choices--item tf-gallery-preview-generate-caption-item">
<svg width="16" height="12" viewBox="0 0 16 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.8333 11.8333V8.49996C13.8333 7.80552 13.5903 7.21524 13.1042 6.72913C12.6181 6.24302 12.0278 5.99996 11.3333 5.99996H3.6875L6.6875 8.99996L5.5 10.1666L0.5 5.16663L5.5 0.166626L6.6875 1.33329L3.6875 4.33329H11.3333C12.4861 4.33329 13.4688 4.73954 14.2812 5.55204C15.0938 6.36454 15.5 7.34718 15.5 8.49996V11.8333H13.8333Z" fill="currentColor"/></svg>
Try again
</div>
</div>
<?php endif; ?>
</div>
</div>
<div class="tf-gallery-preview-error"><div data-dz-errormessage></div></div>
<input type="hidden" value="" class="item-source" name="<?php echo $name; ?>[source]" />
<input type="hidden" value="" class="item-original" name="<?php echo $name; ?>[image]" />
<input type="hidden" value="" class="item-thumbnail" name="<?php echo $name; ?>[thumbnail]" />
<input type="hidden" value="" class="item-caption" name="<?php echo $name; ?>[caption]" />
<input type="hidden" value="" class="item-tags" name="<?php echo $name; ?>[tags]" />
</div>
</template>
<!-- /Dropzone Preview Template -->
<?php
if (!$disabled)
{
// Add the modal that appears when the user hasn't added an OpenAI API key
if (!$openai_api_key)
{
$opts = [
'title' => 'Missing OpenAI API Key',
'height' => '100%',
'width' => '100%',
'backdrop' => 'static'
];
$content = LayoutHelper::render('missing_value', [
'description' => Text::_('NR_AI_MISSING_KEY_MODAL_DESC'),
'link' => 'https://www.tassos.gr/kb/general/ai-features-joomla',
'link_text' => Text::_('NR_WHERE_CAN_I_FIND_MY_OPENAI_API_KEY')
], implode(DIRECTORY_SEPARATOR, [JPATH_PLUGINS, 'system', 'nrframework', 'layouts', 'modals']));
echo HTMLHelper::_('bootstrap.renderModal', 'tf-GalleryMissingValue-' . $id, $opts, $content);
}
// Print Joomla 4 Media Manager modal only if Gallery is not disabled
if (defined('nrJ4'))
{
$opts = [
'title' => Text::_('NR_GALLERY_MANAGER_SELECT_ITEM'),
'url' => Route::_(Uri::root() . $gallery_manager_path . '?option=com_media&view=media&tmpl=component'),
'height' => '400px',
'width' => '800px',
'bodyHeight' => 80,
'modalWidth' => 80,
'backdrop' => 'static',
'footer' => '<button type="button" class="btn btn-primary tf-gallery-button-save-selected" data-bs-dismiss="modal">' . Text::_('JSELECT') . '</button>' . '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">' . Text::_('JCANCEL') . '</button>',
'isJoomla' => true
];
HTMLHelper::_('bootstrap.modal', '#tf-GalleryMediaManager-' . $id, $opts);
$layoutData = [
'selector' => 'tf-GalleryMediaManager-' . $id,
'params' => $opts,
'body' => ''
];
echo LayoutHelper::render('libraries.html.bootstrap.modal.main', $layoutData);
}
if (!$readonly)
{
// Print Edit Modal
$opts = [
'title' => Text::_('NR_GALLERY_MANAGER_EDIT_ITEM'),
'height' => '100%',
'width' => '100%',
'backdrop' => 'static',
'footer' => '<button type="button" class="btn btn-primary tf-gallery-button-save-edited-item" data-bs-dismiss="modal" data-dismiss="modal">' . Text::_('NR_SAVE') . '</button>' .
'<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" data-dismiss="modal">' . Text::_('JCANCEL') . '</button>'
];
$content = LayoutHelper::render('edit', [
'tags' => $tags
], __DIR__);
echo HTMLHelper::_('bootstrap.renderModal', 'tf-GalleryEditItem-' . $id, $opts, $content);
}
}
?>
</div>
<!-- /Gallery Manager -->

View File

@ -0,0 +1,63 @@
<?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-gallery-manager-edit-modal-content">
<div class="tf-gallery-manager-edit-modal-content--preview"></div>
<div class="tf-gallery-manager-edit-modal-content--form">
<div class="tf-gallery-manager-edit-modal-content--form--item">
<label class="tf-gallery-manager-edit-modal-content--form--item--label"><?php echo Text::_('NR_GALLERY_MANAGER_EDIT_ALT_FIELD_LABEL'); ?></label>
<div class="tf-gallery-manager-edit-modal-content--form--item--content">
<input type="text" name="alt" class="tf-gallery-manager-edit-modal-content--form--item--content--input form-control" value="" />
</div>
<div class="tf-gallery-manager-edit-modal-content--form--item--help"><?php echo Text::_('NR_GALLERY_MANAGER_EDIT_ALT_FIELD_DESC'); ?></div>
</div>
<div class="tf-gallery-manager-edit-modal-content--form--item">
<label class="tf-gallery-manager-edit-modal-content--form--item--label"><?php echo Text::_('NR_GALLERY_MANAGER_EDIT_POPUP_DESC_FIELD_LABEL'); ?></label>
<div class="tf-gallery-manager-edit-modal-content--form--item--content">
<textarea name="caption" class="tf-gallery-manager-edit-modal-content--form--item--content--input form-control" rows="3"></textarea>
</div>
<div class="tf-gallery-manager-edit-modal-content--form--item--help"><?php echo Text::_('NR_GALLERY_MANAGER_EDIT_POPUP_DESC_FIELD_DESC'); ?></div>
</div>
<div class="tf-gallery-manager-edit-modal-content--form--item--help divider"><?php echo Text::_('NR_GALLERY_MANAGER_EDIT_SMART_TAGS_DESC'); ?></div>
<div class="tf-gallery-manager-edit-modal-content--form--item">
<label class="tf-gallery-manager-edit-modal-content--form--item--label"><?php echo Text::_('NR_TAGS'); ?></label>
<div class="tf-gallery-manager-edit-modal-content--form--item--content">
<?php
include_once JPATH_PLUGINS . '/system/nrframework/fields/tftagscontrol.php';
$_field = new \JFormFieldTFTagsControl;
$element = new \SimpleXMLElement('
<field
name="tags"
type="TFTagsControl"
allowCustom="false"
multiple="true"
/>
');
$_field->setup($element, $tags);
echo $_field->__get('input');
?>
</div>
<div class="tf-gallery-manager-edit-modal-content--form--item--help"><?php echo Text::_('NR_GALLERY_MANAGER_EDIT_TAGS_FIELD_DESC'); ?></div>
</div>
<input type="hidden" class="item_id" />
</div>
</div>

View File

@ -0,0 +1,320 @@
<?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\Component\ComponentHelper;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Factory;
use Joomla\CMS\Uri\Uri;
if (!$disabled)
{
HTMLHelper::_('bootstrap.modal');
if (strpos($css_class, 'ordering-default') !== false)
{
HTMLHelper::script('plg_system_nrframework/vendor/sortable.min.js', ['relative' => true, 'version' => 'auto']);
}
// Required in the front-end for the media manager to work
if (!defined('nrJ4'))
{
HTMLHelper::_('behavior.modal');
// Front-end editing: The below script is required for front-end media library selection to work as its missing from parent window when called
if (Factory::getApplication()->isClient('site'))
{
?>
<script>
function jInsertFieldValue(value, id) {
var old_id = document.id(id).value;
if (old_id != id) {
var elem = document.id(id)
elem.value = value;
elem.fireEvent("change");
}
}
</script>
<?php
}
}
else
{
HTMLHelper::_('bootstrap.dropdown', '.dropdown-toggle');
$doc = Factory::getApplication()->getDocument();
$doc->addScriptOptions('media-picker', [
'images' => array_map(
'trim',
explode(
',',
ComponentHelper::getParams('com_media')->get(
'image_extensions',
'bmp,gif,jpg,jpeg,png'
)
)
)
]);
$wam = $doc->getWebAssetManager();
$wam->useScript('webcomponent.media-select');
Text::script('JFIELD_MEDIA_LAZY_LABEL');
Text::script('JFIELD_MEDIA_ALT_LABEL');
Text::script('JFIELD_MEDIA_ALT_CHECK_LABEL');
Text::script('JFIELD_MEDIA_ALT_CHECK_DESC_LABEL');
Text::script('JFIELD_MEDIA_CLASS_LABEL');
Text::script('JFIELD_MEDIA_FIGURE_CLASS_LABEL');
Text::script('JFIELD_MEDIA_FIGURE_CAPTION_LABEL');
Text::script('JFIELD_MEDIA_LAZY_LABEL');
Text::script('JFIELD_MEDIA_SUMMARY_LABEL');
}
}
// Use admin gallery manager path if browsing via backend
$gallery_manager_path = Factory::getApplication()->isClient('administrator') ? 'administrator/' : '';
// Javascript files should always load as they are used to populate the Gallery Manager via Dropzone
HTMLHelper::script('plg_system_nrframework/dropzone.min.js', ['relative' => true, 'version' => 'auto']);
HTMLHelper::script('plg_system_nrframework/widgets/gallery/manager_init.js', ['relative' => true, 'version' => 'auto']);
HTMLHelper::script('plg_system_nrframework/widgets/gallery/manager.js', ['relative' => true, 'version' => 'auto']);
if ($load_stylesheet)
{
HTMLHelper::stylesheet('plg_system_nrframework/widgets/gallerymanager.css', ['relative' => true, 'version' => 'auto']);
}
$tags = isset($tags) ? $tags : [];
$ai_icon = '<svg width="24" height="22" viewBox="0 0 24 22" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M23.7471 8.7502C20.687 8.11795 18.3098 5.71543 17.6775 2.65536C17.6523 2.50362 17.5258 2.40247 17.3488 2.40247C17.197 2.40247 17.0706 2.50362 17.02 2.65536C16.3878 5.71543 13.9852 8.11795 10.9505 8.7502C10.7987 8.77549 10.6976 8.90194 10.6976 9.07897C10.6976 9.2307 10.7987 9.35715 10.9505 9.40773C14.0105 10.04 16.3878 12.4425 17.02 15.4773C17.0453 15.629 17.1718 15.7302 17.3488 15.7302C17.5005 15.7302 17.627 15.629 17.6775 15.4773C18.3098 12.4172 20.7123 10.04 23.7471 9.40773C23.8988 9.38244 24 9.25599 24 9.07897C24 8.90194 23.8988 8.77549 23.7471 8.7502Z" fill="currentColor"/><path d="M13.5554 15.882C11.1022 15.3762 9.18022 13.4542 8.67443 10.9758C8.64914 10.8493 8.54798 10.7734 8.42153 10.7734C8.29508 10.7734 8.19392 10.8493 8.16863 10.9758C7.66284 13.4542 5.74081 15.3762 3.28771 15.882C3.16126 15.9073 3.08539 16.0084 3.08539 16.1349C3.08539 16.2613 3.16126 16.3625 3.28771 16.3878C5.74081 16.8936 7.66284 18.8156 8.16863 21.2687C8.19392 21.3951 8.29508 21.471 8.42153 21.471C8.54798 21.471 8.64914 21.3951 8.67443 21.2687C9.18022 18.8156 11.1022 16.8936 13.5554 16.3878C13.6818 16.3625 13.7577 16.2613 13.7577 16.1349C13.7577 16.0084 13.6818 15.9073 13.5554 15.882Z" fill="currentColor"/><path d="M4.83035 10.0906C4.88093 10.2424 5.00737 10.3435 5.15911 10.3435C5.31085 10.3435 5.46259 10.2424 5.48788 10.0906C6.01897 7.83983 7.83983 6.04426 10.0653 5.51317C10.2171 5.46259 10.3182 5.33614 10.3182 5.1844C10.3182 5.03266 10.2171 4.88093 10.0653 4.85564C7.78925 4.29926 6.01897 2.52898 5.48788 0.252898C5.46259 0.101159 5.31085 0 5.15911 0C5.00737 0 4.85564 0.101159 4.83035 0.252898C4.27397 2.52898 2.52898 4.29926 0.252898 4.85564C0.101159 4.90622 0 5.03266 0 5.1844C0 5.33614 0.101159 5.48788 0.252898 5.51317C2.4784 6.04426 4.27397 7.83983 4.83035 10.0906Z" fill="currentColor"/></svg>';
?>
<!-- Gallery Manager -->
<div
class="nrf-widget tf-gallery-manager<?php echo $css_class; ?>"
data-context="<?php echo $context; ?>"
data-field-id="<?php echo $field_id; ?>"
data-item-id="<?php echo $item_id; ?>"
data-widget="<?php echo $widget; ?>"
>
<?php if ($required) { ?>
<!-- Make Joomla client-side form validator happy by adding a fake hidden input field when the Gallery is required. -->
<input type="hidden" required class="required" id="<?php echo $id; ?>"/>
<?php } ?>
<!-- Actions -->
<div class="tf-gallery-actions">
<div class="btn-group tf-gallery-actions-dropdown<?php echo !defined('nrJ4') ? ' dropdown' : ''; ?> " title="<?php echo Text::_('NR_GALLERY_MANAGER_SELECT_UNSELECT_IMAGES'); ?>">
<button class="btn btn-secondary add tf-gallery-actions-dropdown-current tf-gallery-actions-dropdown-action select" onclick="return false;"><i class="me-2 icon-checkbox-unchecked"></i></button>
<button class="btn btn-secondary add dropdown-toggle dropdown-toggle-split" data-<?php echo defined('nrJ4') ? 'bs-' : ''; ?>toggle="dropdown" title="<?php echo Text::_('NR_GALLERY_MANAGER_ADD_DROPDOWN'); ?>">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-item tf-gallery-actions-dropdown-action select"><?php echo Text::_('NR_GALLERY_MANAGER_SELECT_ALL_ITEMS'); ?></a></li>
<li><a href="#" class="dropdown-item tf-gallery-actions-dropdown-action unselect is-hidden"><?php echo Text::_('NR_GALLERY_MANAGER_UNSELECT_ALL_ITEMS'); ?></a></li>
</ul>
</div>
<a class="tf-gallery-remove-selected-items-button icon-button" title="<?php echo Text::_('NR_GALLERY_MANAGER_REMOVE_SELECTED_IMAGES'); ?>">
<i class="icon-trash"></i>
</a>
<?php if (!$pro): ?>
<a href="#" class="btn-visible-on-editing button-icon" data-pro-only="<?php echo Text::_('NR_AI_IMAGE_DESCRIPTION_GENERATION') ?>" title="<?php echo Text::_('NR_GENERATE_IMAGE_DESC_TO_ALL_IMAGES'); ?>">
<?php echo $ai_icon; ?>
</a>
<?php elseif (!$openai_api_key): ?>
<a title="<?php echo Text::_('NR_GENERATE_IMAGE_DESCRIPTION_USING_AI') ?>" class="btn-visible-on-editing button-icon" data-toggle="modal" data-target="#tf-GalleryMissingValue-<?php echo $id; ?>" data-bs-toggle="modal" data-bs-target="#tf-GalleryMissingValue-<?php echo $id; ?>">
<?php echo $ai_icon; ?>
</a>
<?php else: ?>
<a href="#" class="btn-visible-on-editing button-icon tf-gallery-ai-apply-all-button" title="<?php echo Text::_('NR_GENERATE_IMAGE_DESC_TO_ALL_IMAGES'); ?>">
<?php echo $ai_icon; ?>
</a>
<?php endif; ?>
<div class="btn-group add-button<?php echo !defined('nrJ4') ? ' dropdown' : ''; ?>">
<button class="btn btn-success add tf-gallery-add-item-button" onclick="return false;" title="<?php echo Text::_('NR_GALLERY_MANAGER_ADD_IMAGES'); ?>"><i class="me-2 icon-pictures"></i><?php echo Text::_('NR_GALLERY_MANAGER_ADD_IMAGES'); ?></button>
<button class="btn btn-success add dropdown-toggle dropdown-toggle-split" data-<?php echo defined('nrJ4') ? 'bs-' : ''; ?>toggle="dropdown" title="<?php echo Text::_('NR_GALLERY_MANAGER_ADD_DROPDOWN'); ?>">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li>
<a <?php echo !defined('nrJ4') ? 'rel="{handler: \'iframe\', size: {x: 1000, y: 750}}" href="' . Uri::root() . $gallery_manager_path . '?option=com_media&view=images&tmpl=component&fieldid=' . $id . '_uploaded_file"' : 'href="#" data-bs-toggle="modal" data-bs-target="#tf-GalleryMediaManager-' . $id . '"'; ?> class="dropdown-item tf-gallery-browse-item-button<?php echo !defined('nrJ4') ? ' modal' : ''; ?> popup" title="<?php echo Text::_('NR_GALLERY_MANAGER_BROWSE_MEDIA_LIBRARY'); ?>"><i class="me-2 icon-folder-open"></i><?php echo Text::_('NR_GALLERY_MANAGER_BROWSE_MEDIA_LIBRARY'); ?></a>
</li>
</ul>
</div>
<span class="tf-gallery-ai-status"><?php echo Text::_('NR_GENERATED_IMAGE_DESCRIPTIONS'); ?></span>
<input type="hidden" class="media_uploader_file" id="<?php echo $id; ?>_uploaded_file" />
</div>
<!-- /Actions -->
<!-- Dropzone -->
<div
data-inputname="<?php echo $name; ?>"
data-maxfilesize="<?php echo $max_file_size; ?>"
data-maxfiles="<?php echo $limit_files; ?>"
data-acceptedfiles="<?php echo $allowed_file_types; ?>"
data-value='<?php echo $value ? json_encode($value, JSON_HEX_APOS) : ''; ?>'
data-baseurl="<?php echo Uri::base(); ?>"
data-rooturl="<?php echo Uri::root(); ?>"
class="tf-gallery-dz">
<!-- DZ Message Wrapper -->
<div class="dz-message">
<!-- Message -->
<div class="dz-message-center">
<span class="text"><?php echo Text::_('NR_GALLERY_MANAGER_DRAG_AND_DROP_TEXT'); ?></span>
<span class="browse"><?php echo Text::_('NR_GALLERY_MANAGER_BROWSE'); ?></span>
</div>
<!-- /Message -->
</div>
<!-- /DZ Message Wrapper -->
</div>
<!-- /Dropzone -->
<!-- Dropzone Preview Template -->
<template class="previewTemplate">
<div class="tf-gallery-preview-item template" data-item-id="">
<div class="checkmark-edited-icon"><?php echo Text::_('NR_UPDATED'); ?></div>
<div class="select-item-checkbox" title="<?php echo Text::_('NR_GALLERY_MANAGER_CHECK_TO_DELETE_ITEMS'); ?>">
<input type="checkbox" id="<?php echo $name; ?>[select-item]" />
<label for="<?php echo $name; ?>[select-item]">
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="mask0_279_439" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20"><rect width="20" height="20" fill="#D9D9D9"/></mask><g mask="url(#mask0_279_439)"><path d="M8.83342 13.8333L14.7084 7.95829L13.5417 6.79163L8.83342 11.5L6.45841 9.12496L5.29175 10.2916L8.83342 13.8333ZM10.0001 18.3333C8.8473 18.3333 7.76397 18.1145 6.75008 17.677C5.73619 17.2395 4.85425 16.6458 4.10425 15.8958C3.35425 15.1458 2.7605 14.2638 2.323 13.25C1.8855 12.2361 1.66675 11.1527 1.66675 9.99996C1.66675 8.84718 1.8855 7.76385 2.323 6.74996C2.7605 5.73607 3.35425 4.85413 4.10425 4.10413C4.85425 3.35413 5.73619 2.76038 6.75008 2.32288C7.76397 1.88538 8.8473 1.66663 10.0001 1.66663C11.1529 1.66663 12.2362 1.88538 13.2501 2.32288C14.264 2.76038 15.1459 3.35413 15.8959 4.10413C16.6459 4.85413 17.2397 5.73607 17.6772 6.74996C18.1147 7.76385 18.3334 8.84718 18.3334 9.99996C18.3334 11.1527 18.1147 12.2361 17.6772 13.25C17.2397 14.2638 16.6459 15.1458 15.8959 15.8958C15.1459 16.6458 14.264 17.2395 13.2501 17.677C12.2362 18.1145 11.1529 18.3333 10.0001 18.3333ZM10.0001 16.6666C11.8612 16.6666 13.4376 16.0208 14.7292 14.7291C16.0209 13.4375 16.6667 11.8611 16.6667 9.99996C16.6667 8.13885 16.0209 6.56246 14.7292 5.27079C13.4376 3.97913 11.8612 3.33329 10.0001 3.33329C8.13897 3.33329 6.56258 3.97913 5.27091 5.27079C3.97925 6.56246 3.33341 8.13885 3.33341 9.99996C3.33341 11.8611 3.97925 13.4375 5.27091 14.7291C6.56258 16.0208 8.13897 16.6666 10.0001 16.6666Z" fill="currentColor"/></g></svg>
</label>
</div>
<div class="tf-gallery-preview-item--actions">
<a href="#" class="tf-gallery-preview-edit-item" title="<?php echo Text::_('NR_GALLERY_MANAGER_CLICK_TO_EDIT_ITEM'); ?>" data-toggle="modal" data-target="#tf-GalleryEditItem-<?php echo $id; ?>" data-bs-toggle="modal" data-bs-target="#tf-GalleryEditItem-<?php echo $id; ?>"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="mask0_279_182" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20"><rect width="20" height="20" fill="#D9D9D9"/></mask><g mask="url(#mask0_279_182)"><path d="M4.16667 15.8333H5.35417L13.5 7.6875L12.3125 6.5L4.16667 14.6458V15.8333ZM2.5 17.5V13.9583L13.5 2.97917C13.6667 2.82639 13.8507 2.70833 14.0521 2.625C14.2535 2.54167 14.4653 2.5 14.6875 2.5C14.9097 2.5 15.125 2.54167 15.3333 2.625C15.5417 2.70833 15.7222 2.83333 15.875 3L17.0208 4.16667C17.1875 4.31944 17.309 4.5 17.3854 4.70833C17.4618 4.91667 17.5 5.125 17.5 5.33333C17.5 5.55556 17.4618 5.76736 17.3854 5.96875C17.309 6.17014 17.1875 6.35417 17.0208 6.52083L6.04167 17.5H2.5ZM12.8958 7.10417L12.3125 6.5L13.5 7.6875L12.8958 7.10417Z" fill="currentColor"/></g></svg></a>
<a href="#" class="tf-gallery-preview-remove-item" title="<?php echo Text::_('NR_GALLERY_MANAGER_CLICK_TO_DELETE_ITEM'); ?>" data-dz-remove><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="mask0_279_185" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20"><rect width="20" height="20" fill="#D9D9D9"/></mask><g mask="url(#mask0_279_185)"><path d="M5.83301 17.5C5.37467 17.5 4.98231 17.3368 4.65592 17.0104C4.32954 16.684 4.16634 16.2917 4.16634 15.8333V5H3.33301V3.33333H7.49967V2.5H12.4997V3.33333H16.6663V5H15.833V15.8333C15.833 16.2917 15.6698 16.684 15.3434 17.0104C15.017 17.3368 14.6247 17.5 14.1663 17.5H5.83301ZM14.1663 5H5.83301V15.8333H14.1663V5ZM7.49967 14.1667H9.16634V6.66667H7.49967V14.1667ZM10.833 14.1667H12.4997V6.66667H10.833V14.1667Z" fill="currentColor"/></g></svg></a>
</div>
<div class="dz-status"></div>
<div class="dz-thumb">
<div class="tf-gallery-preview-item--temp-label" title="<?php echo Text::_('NR_GALLERY_TEMPORARY_IMAGE_TITLE'); ?>"><?php echo Text::_('NR_TEMPORARY'); ?></div>
<div class="dz-progress"><span class="text"><?php echo Text::_('NR_GALLERY_MANAGER_UPLOADING'); ?></span><span class="dz-upload" data-dz-uploadprogress></span></div>
<div class="tf-gallery-preview-in-queue"><?php echo Text::_('NR_GALLERY_MANAGER_IN_QUEUE'); ?></div>
<img data-dz-thumbnail />
</div>
<div class="tf-gallery-preview-item--alt">
<div class="tf-gallery-preview-item--alt--existing"></div>
<div class="tf-gallery-preview-item--alt--fields">
<textarea name="<?php echo $name; ?>[alt]" class="item-alt" placeholder="<?php echo Text::_('NR_GALLERY_MANAGER_IMAGE_DESCRIPTION_HINT'); ?>" title="<?php echo Text::_('NR_GALLERY_MANAGER_ALT_HINT'); ?>" rows="2"></textarea>
<?php if (!$pro): ?>
<div class="tf-gallery-ai-button" title="<?php echo Text::_('NR_GENERATE_IMAGE_DESCRIPTION_USING_AI') ?>">
<span data-pro-only="<?php echo Text::_('NR_AI_IMAGE_DESCRIPTION_GENERATION') ?>"><?php echo $ai_icon; ?></span>
</div>
<?php elseif (!$openai_api_key): ?>
<div class="tf-gallery-ai-button" title="<?php echo Text::_('NR_GENERATE_IMAGE_DESCRIPTION_USING_AI') ?>" data-toggle="modal" data-target="#tf-GalleryMissingValue-<?php echo $id; ?>" data-bs-toggle="modal" data-bs-target="#tf-GalleryMissingValue-<?php echo $id; ?>">
<?php echo $ai_icon; ?>
</div>
<?php else: ?>
<div class="tf-gallery-ai-button tf-gallery-preview-generate-caption-item" title="<?php echo Text::_('NR_GENERATE_IMAGE_DESCRIPTION_USING_AI') ?>">
<?php if ($pro): ?>
<svg class="loading-state" xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="#e8eaed"><path d="M480-96q-78.72 0-148.8-30.24-70.08-30.24-122.4-82.56-52.32-52.32-82.56-122.4Q96-401.28 96-480q0-79.68 30.22-149.28 30.21-69.6 82.49-121.92 52.28-52.32 122.3-82.56Q401.04-864 479.69-864 496-864 506-854t10 25.51q0 15.51-10 26T480-792q-129.67 0-220.84 90.5Q168-611 168-480.5T259.16-259q91.17 91 220.84 91 131 0 221.5-91.16Q792-350.33 792-480q0-16 10.49-26t26-10Q844-516 854-506q10 10 10 26.31 0 78.65-30.24 148.68-30.24 70.02-82.56 122.3-52.32 52.28-121.92 82.49Q559.68-96 480-96Z" fill="currentColor" /></svg>
<?php endif; ?>
<?php echo $ai_icon; ?>
</div>
<div class="tf-gallery-preview-item--alt--choices">
<div class="tf-gallery-preview-item--alt--choices--item tf-gallery-preview-generate-caption-item-accept">
<svg width="14" height="11" viewBox="0 0 14 11" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.95837 11L0.208374 6.24996L1.39587 5.06246L4.95837 8.62496L12.6042 0.979126L13.7917 2.16663L4.95837 11Z" fill="currentColor"/></svg>
Accept
</div>
<div class="tf-gallery-preview-item--alt--choices--item tf-gallery-preview-generate-caption-item-discard">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.33335 11.8333L0.166687 10.6666L4.83335 5.99996L0.166687 1.33329L1.33335 0.166626L6.00002 4.83329L10.6667 0.166626L11.8334 1.33329L7.16669 5.99996L11.8334 10.6666L10.6667 11.8333L6.00002 7.16663L1.33335 11.8333Z" fill="currentColor"/></svg>
Discard
</div>
<div class="tf-gallery-preview-item--alt--choices--item tf-gallery-preview-generate-caption-item">
<svg width="16" height="12" viewBox="0 0 16 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.8333 11.8333V8.49996C13.8333 7.80552 13.5903 7.21524 13.1042 6.72913C12.6181 6.24302 12.0278 5.99996 11.3333 5.99996H3.6875L6.6875 8.99996L5.5 10.1666L0.5 5.16663L5.5 0.166626L6.6875 1.33329L3.6875 4.33329H11.3333C12.4861 4.33329 13.4688 4.73954 14.2812 5.55204C15.0938 6.36454 15.5 7.34718 15.5 8.49996V11.8333H13.8333Z" fill="currentColor"/></svg>
Try again
</div>
</div>
<?php endif; ?>
</div>
</div>
<div class="tf-gallery-preview-error"><div data-dz-errormessage></div></div>
<input type="hidden" value="" class="item-source" name="<?php echo $name; ?>[source]" />
<input type="hidden" value="" class="item-slideshow" name="<?php echo $name; ?>[slideshow]" />
<input type="hidden" value="" class="item-original" name="<?php echo $name; ?>[image]" />
<input type="hidden" value="" class="item-thumbnail" name="<?php echo $name; ?>[thumbnail]" />
<input type="hidden" value="" class="item-caption" name="<?php echo $name; ?>[caption]" />
<input type="hidden" value="" class="item-tags" name="<?php echo $name; ?>[tags]" />
</div>
</template>
<!-- /Dropzone Preview Template -->
<?php
if (!$disabled)
{
// Add the modal that appears when the user hasn't added an OpenAI API key
if (!$openai_api_key)
{
$opts = [
'title' => 'Missing OpenAI API Key',
'height' => '100%',
'width' => '100%',
'backdrop' => 'static'
];
$content = LayoutHelper::render('missing_value', [
'description' => Text::_('NR_AI_MISSING_KEY_MODAL_DESC'),
'link' => 'https://www.tassos.gr/kb/general/ai-features-joomla',
'link_text' => Text::_('NR_WHERE_CAN_I_FIND_MY_OPENAI_API_KEY')
], implode(DIRECTORY_SEPARATOR, [JPATH_PLUGINS, 'system', 'nrframework', 'layouts', 'modals']));
echo HTMLHelper::_('bootstrap.renderModal', 'tf-GalleryMissingValue-' . $id, $opts, $content);
}
// Print Joomla 4 Media Manager modal only if Gallery is not disabled
if (defined('nrJ4'))
{
$opts = [
'title' => Text::_('NR_GALLERY_MANAGER_SELECT_ITEM'),
'height' => '400px',
'width' => '800px',
'bodyHeight' => 80,
'modalWidth' => 80,
'backdrop' => 'static',
'footer' => '<button type="button" class="btn btn-primary tf-gallery-button-save-selected" data-bs-dismiss="modal">' . Text::_('JSELECT') . '</button>' . '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">' . Text::_('JCANCEL') . '</button>',
'isJoomla' => true
];
HTMLHelper::_('bootstrap.modal', '#tf-GalleryMediaManager-' . $id, $opts);
$layoutData = [
'selector' => 'tf-GalleryMediaManager-' . $id,
'params' => $opts,
'body' => LayoutHelper::render('media_library', ['gallery_manager_path' => $gallery_manager_path], __DIR__)
];
echo LayoutHelper::render('libraries.html.bootstrap.modal.main', $layoutData);
}
if (!$readonly)
{
// Print Edit Modal
$opts = [
'title' => Text::_('NR_GALLERY_MANAGER_EDIT_ITEM'),
'height' => '100%',
'width' => '100%',
'backdrop' => 'static',
'footer' => '<button type="button" class="btn btn-primary tf-gallery-button-save-edited-item" data-bs-dismiss="modal" data-dismiss="modal">' . Text::_('NR_SAVE') . '</button>' .
'<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" data-dismiss="modal">' . Text::_('JCANCEL') . '</button>'
];
$content = LayoutHelper::render('edit', [
'tags' => $tags
], __DIR__);
echo HTMLHelper::_('bootstrap.renderModal', 'tf-GalleryEditItem-' . $id, $opts, $content);
}
}
?>
</div>
<!-- /Gallery Manager -->

View File

@ -0,0 +1,63 @@
<?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-gallery-manager-edit-modal-content">
<div class="tf-gallery-manager-edit-modal-content--preview"></div>
<div class="tf-gallery-manager-edit-modal-content--form">
<div class="tf-gallery-manager-edit-modal-content--form--item">
<label class="tf-gallery-manager-edit-modal-content--form--item--label"><?php echo Text::_('NR_IMAGE_DESCRIPTION'); ?></label>
<div class="tf-gallery-manager-edit-modal-content--form--item--content">
<input type="text" name="alt" class="tf-gallery-manager-edit-modal-content--form--item--content--input form-control" value="" />
</div>
<div class="tf-gallery-manager-edit-modal-content--form--item--help"><?php echo Text::_('NR_GALLERY_MANAGER_EDIT_ALT_FIELD_DESC'); ?></div>
</div>
<div class="tf-gallery-manager-edit-modal-content--form--item">
<label class="tf-gallery-manager-edit-modal-content--form--item--label"><?php echo Text::_('NR_LIGHTBOX_DESCRIPTION'); ?></label>
<div class="tf-gallery-manager-edit-modal-content--form--item--content">
<textarea name="caption" class="tf-gallery-manager-edit-modal-content--form--item--content--input form-control" rows="3"></textarea>
</div>
<div class="tf-gallery-manager-edit-modal-content--form--item--help"><?php echo Text::_('NR_GALLERY_MANAGER_EDIT_POPUP_DESC_FIELD_DESC'); ?></div>
</div>
<div class="tf-gallery-manager-edit-modal-content--form--item--help divider"><?php echo Text::_('NR_GALLERY_MANAGER_EDIT_SMART_TAGS_DESC'); ?></div>
<div class="tf-gallery-manager-edit-modal-content--form--item">
<label class="tf-gallery-manager-edit-modal-content--form--item--label"><?php echo Text::_('NR_TAGS'); ?></label>
<div class="tf-gallery-manager-edit-modal-content--form--item--content">
<?php
include_once JPATH_PLUGINS . '/system/nrframework/fields/tftagscontrol.php';
$_field = new \JFormFieldTFTagsControl;
$element = new \SimpleXMLElement('
<field
name="tags"
type="TFTagsControl"
allowCustom="false"
multiple="true"
/>
');
$_field->setup($element, $tags);
echo $_field->__get('input');
?>
</div>
<div class="tf-gallery-manager-edit-modal-content--form--item--help"><?php echo Text::_('NR_GALLERY_MANAGER_EDIT_TAGS_FIELD_DESC'); ?></div>
</div>
<input type="hidden" class="item_id" />
</div>
</div>

View File

@ -0,0 +1,24 @@
<?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);
?>
<div class="tf-gallery-media-library-top-note">
<svg xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 -960 960 960" fill="currentColor"><path d="M454-298h52v-230h-52v230Zm25.79-290.46q11.94 0 20.23-8.08 8.29-8.08 8.29-20.02t-8.08-20.23q-8.08-8.28-20.02-8.28T459.98-637q-8.29 8.08-8.29 20.02t8.08 20.23q8.08 8.29 20.02 8.29Zm.55 472.46q-75.11 0-141.48-28.42-66.37-28.42-116.18-78.21-49.81-49.79-78.25-116.09Q116-405.01 116-480.39q0-75.38 28.42-141.25t78.21-115.68q49.79-49.81 116.09-78.25Q405.01-844 480.39-844q75.38 0 141.25 28.42t115.68 78.21q49.81 49.79 78.25 115.85Q844-555.45 844-480.34q0 75.11-28.42 141.48-28.42 66.37-78.21 116.18-49.79 49.81-115.85 78.25Q555.45-116 480.34-116Zm-.34-52q130 0 221-91t91-221q0-130-91-221t-221-91q-130 0-221 91t-91 221q0 130 91 221t221 91Zm0-312Z"/></svg>
<?php echo Text::_('NR_GALLERY_MANAGER_MEDIA_TOP_NOTE'); ?>
</div>
<iframe class="iframe" src="<?php echo Uri::root() . $gallery_manager_path; ?>?option=com_media&view=media&tmpl=component" name="Select Gallery Item"></iframe>

View File

@ -0,0 +1,28 @@
<?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;
use Joomla\CMS\Factory;
extract($displayData);
$options = isset($options) ? $options : $displayData;
if ($options['load_css_vars'] && !empty($options['custom_css']))
{
Factory::getDocument()->addStyleDeclaration($options['custom_css']);
}
?>
<div class="nrf-widget googlemap map-widget<?php echo $options['css_class']; ?>" id="<?php echo $id; ?>" data-options="<?php echo htmlspecialchars(json_encode($options)); ?>">
<div class="map-item"></div>
</div>

View File

@ -0,0 +1,63 @@
<?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;
use Joomla\CMS\Language\Text;
extract($displayData);
// Skip if all address details are empty
if (empty(array_filter($address)))
{
return;
}
$address_details_html = null;
switch ($layout_type)
{
// Default Layout
case 'default':
$address_details_html = \NRFramework\Helpers\Widgets\MapAddress::getDefaultAddressDetailsLayout($address, $showAddressDetails);
break;
// Custom Layout
case 'custom':
if (!empty(trim($custom_layout)))
{
$st = new \NRFramework\SmartTags();
$st->add($address, 'address.');
// Add labels
foreach ($address as $key => $value)
{
$st->add([$key . '.label' => Text::_('NR_' . strtoupper($key))], 'address.');
}
// Add map
if ($map)
{
$st->add(['address.map' => $map]);
}
$address_details_html = nl2br(\Joomla\CMS\HTML\HTMLHelper::_('content.prepare', $st->replace($custom_layout)));
}
break;
}
if (!$address_details_html)
{
return;
}
echo $map_location === 'above' ? $map_html . $address_details_html : $address_details_html . $map_html;

View File

@ -0,0 +1,72 @@
<?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;
use Joomla\CMS\Language\Text;
extract($displayData);
$mapWrapperClass = '';
if (!$map)
{
$mapWrapperClass .= ' no-map';
}
?>
<div class="nrf-widget tf-mapaddress-editor<?php echo $css_class; ?>">
<?php if ($required) { ?>
<!-- Make Joomla client-side form validator happy by adding a fake hidden input field when the Gallery is required. -->
<input type="hidden" required class="required" id="<?php echo $id; ?>"/>
<?php } ?>
<div class="tf-mapaddress-map-wrapper<?php echo $mapWrapperClass; ?>">
<?php echo $map; ?>
</div>
<div class="tf-mapaddress-field-location-details">
<?php
foreach ($showAddressDetails as $key => $show)
{
if ($key === 'address')
{
continue;
}
$lang_key = 'NR_' . strtoupper($key);
$placeholder = $lang_key;
if ($key === 'address')
{
$placeholder .= '_ADDRESS_HINT';
}
$input_type = $show ? 'text' : 'hidden';
$visibility_class = $show ? 'visible' : 'hidden';
?>
<div class="control-group stack <?php echo $key; ?> is-<?php echo $visibility_class; ?>">
<div class="control-label"><label for="<?php echo $id ?>-field-address-field-<?php echo $key ?>"><?php echo Text::_($lang_key); ?></label></div>
<div class="controls">
<input
type="<?php echo $input_type; ?>"
id="<?php echo $id; ?>-field-address-field-<?php echo $key ?>"
class="form-control w-100 tf-mapaddress-field-<?php echo $key ?>"
name="<?php echo $name; ?>[address][<?php echo $key; ?>]"
placeholder="<?php echo Text::_($placeholder); ?>"
value="<?php echo isset($address[$key]) ? $address[$key] : ''; ?>"
autocomplete="off"
/>
</div>
</div>
<?php
}
?>
</div>
</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;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Form\Form;
$form_source = new SimpleXMLElement('
<form>
<fieldset name="add_marker_modal">
<field name="address" type="TFAddressLookup"
label="NR_LOCATION_ADDRESS"
group_class="mb-0"
class="tf-marker-repeater-address span12 full-width w-100"
/>
<field name="latitude" type="hidden"
class="tf-marker-repeater-latitude"
/>
<field name="longitude" type="hidden"
class="tf-marker-repeater-longitude"
/>
</fieldset>
</form>
');
$form = Form::getInstance($options['name'] . '[add_marker]', $form_source->asXML(), ['control' => $options['name'] . '[add_marker]']);
echo HTMLHelper::_('bootstrap.renderModal', 'tfMapEditorMarkerAddModal', [
'title' => Text::_('NR_ADD_MARKER'),
'modalWidth' => '40',
'footer' => '<button type="button" class="btn btn-primary tf-mapeditor-save-new-marker tf-modal-btn-primary" data-bs-dismiss="modal" data-dismiss="modal" aria-hidden="true">' . Text::_('NR_ADD_MARKER') . '</button>'
], $form->renderFieldset('add_marker_modal'));

View File

@ -0,0 +1,138 @@
<?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;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
extract($displayData);
$options = isset($options) ? $options : $displayData;
if ($options['load_css_vars'] && !empty($options['custom_css']))
{
Factory::getDocument()->addStyleDeclaration($options['custom_css']);
}
?>
<div class="nrf-widget openstreetmap map-widget map-address-editor-view nr-address-component<?php echo $options['css_class']; ?>" id="<?php echo $options['id']; ?>" data-options="<?php echo htmlspecialchars(json_encode($options)); ?>">
<?php if ($options['required']) { ?>
<!-- Make Joomla client-side form validator happy by adding a fake hidden input field when the field is required. -->
<input type="hidden" required class="required" id="<?php echo $options['id']; ?>" />
<?php } ?>
<?php if (!$options['required']): ?>
<div class="tf-map-editor-clear-wrapper"><a href="#" class="tf-map-editor-clear"><?php echo Text::_('NR_CLEAR'); ?></a></div>
<?php endif; ?>
<?php
if ($options['show_address'] === 'before_map')
{
require 'settings.php';
}
?>
<?php if ($options['show_map']): ?><div class="map-item"></div><?php endif; ?>
<input type="hidden" class="map-markers" name="<?php echo $options['name']; ?>[markers]" value="<?php echo $options['markers'] ? htmlspecialchars(json_encode($options['markers'])) : ''; ?>" />
<?php
if ($options['show_address'] || $options['show_address'] === 'after_map')
{
echo '<div class="tf-mapeditor-settings">';
require 'settings.php';
echo '</div>';
}
if ($options['show_markers_list'])
{
?>
<div class="tf-map-markers" data-no-markers="<?php echo Text::_('NR_CREATE_YOUR_FIRST_MARKER'); ?>">
<strong class="tf-map-markers--title"><?php echo Text::_('NR_MARKERS'); ?></strong>
<div class="tf-map-markers--list">
<?php
if (count($options['markers']))
{
foreach ($options['markers'] as $index => $marker)
{
?>
<div class="tf-map-markers--list--item" data-id="<?php echo $marker['id']; ?>">
<div class="tf-map-markers--list--item--label--wrapper">
<span class="tf-map-markers--list--item--label--wrapper--counter"><?php echo $index + 1; ?>.</span>
<div class="tf-map-markers--list--item--label--wrapper--label"><?php echo !empty($marker['label']) ? $marker['label'] : $marker['address']; ?></div>
</div>
<div class="tf-map-markers--list--item--actions">
<a href="#" class="tf-map-markers--list--item--actions--edit" data-bs-toggle="modal" data-bs-target="#tfMapEditorMarkerEditModal" data-toggle="modal" data-target="#tfMapEditorMarkerEditModal" title="<?php echo Text::_('NR_MAP_EDITOR_MARKER_EDIT'); ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="20"><path d="M9 39h2.2l22.15-22.15-2.2-2.2L9 36.8Zm30.7-24.3-6.4-6.4 2.1-2.1q.85-.85 2.1-.85t2.1.85l2.2 2.2q.85.85.85 2.1t-.85 2.1Zm-2.1 2.1L12.4 42H6v-6.4l25.2-25.2Zm-5.35-1.05-1.1-1.1 2.2 2.2Z"/></svg>
</a>
<a href="#" class="tf-map-markers--list--item--actions--delete" title="<?php echo Text::_('NR_MAP_EDITOR_MARKER_DELETE'); ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="20"><path d="M13.05 42q-1.2 0-2.1-.9-.9-.9-.9-2.1V10.5H8v-3h9.4V6h13.2v1.5H40v3h-2.05V39q0 1.2-.9 2.1-.9.9-2.1.9Zm21.9-31.5h-21.9V39h21.9Zm-16.6 24.2h3V14.75h-3Zm8.3 0h3V14.75h-3Zm-13.6-24.2V39Z"/></svg>
</a>
</div>
</div>
<?php
}
}
else
{
echo Text::_('NR_CREATE_YOUR_FIRST_MARKER');
}
?>
</div>
<div class="tf-map-markers--list--item is-template is-hidden">
<div class="tf-map-markers--list--item--label--wrapper">
<span class="tf-map-markers--list--item--label--wrapper--counter"></span>
<div class="tf-map-markers--list--item--label--wrapper--label">
<svg height="12" viewBox="0 0 120 30" xmlns="http://www.w3.org/2000/svg" fill="#dedede">
<circle cx="15" cy="15" r="15">
<animate attributeName="r" from="15" to="15" begin="0s" dur="0.8s" values="12;9;12" calcMode="linear" repeatCount="indefinite"></animate>
<animate attributeName="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcMode="linear" repeatCount="indefinite"></animate>
</circle>
<circle cx="60" cy="15" r="9" fill-opacity="0.3">
<animate attributeName="r" from="9" to="9" begin="0s" dur="0.8s" values="9;12;9" calcMode="linear" repeatCount="indefinite"></animate>
<animate attributeName="fill-opacity" from="0.5" to="0.5" begin="0s" dur="0.8s" values=".5;1;.5" calcMode="linear" repeatCount="indefinite"></animate>
</circle>
<circle cx="105" cy="15" r="15">
<animate attributeName="r" from="15" to="15" begin="0s" dur="0.8s" values="12;9;12" calcMode="linear" repeatCount="indefinite"></animate>
<animate attributeName="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcMode="linear" repeatCount="indefinite"></animate>
</circle>
</svg>
</div>
</div>
<div class="tf-map-markers--list--item--actions">
<a href="#" class="tf-map-markers--list--item--actions--edit" data-bs-toggle="modal" data-bs-target="#tfMapEditorMarkerEditModal" data-toggle="modal" data-target="#tfMapEditorMarkerEditModal" title="<?php echo Text::_('NR_MAP_EDITOR_MARKER_EDIT'); ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="20"><path d="M9 39h2.2l22.15-22.15-2.2-2.2L9 36.8Zm30.7-24.3-6.4-6.4 2.1-2.1q.85-.85 2.1-.85t2.1.85l2.2 2.2q.85.85.85 2.1t-.85 2.1Zm-2.1 2.1L12.4 42H6v-6.4l25.2-25.2Zm-5.35-1.05-1.1-1.1 2.2 2.2Z"/></svg>
</a>
<a href="#" class="tf-map-markers--list--item--actions--delete" title="<?php echo Text::_('NR_MAP_EDITOR_MARKER_DELETE'); ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="20"><path d="M13.05 42q-1.2 0-2.1-.9-.9-.9-.9-2.1V10.5H8v-3h9.4V6h13.2v1.5H40v3h-2.05V39q0 1.2-.9 2.1-.9.9-2.1.9Zm21.9-31.5h-21.9V39h21.9Zm-16.6 24.2h3V14.75h-3Zm8.3 0h3V14.75h-3Zm-13.6-24.2V39Z"/></svg>
</a>
</div>
</div>
<a href="#" class="btn btn-primary tf-mapeditor-add-new-marker" data-bs-toggle="modal" data-toggle="modal" data-bs-target="#tfMapEditorMarkerAddModal" data-target="#tfMapEditorMarkerAddModal"><?php echo Text::_('NR_ADD_MARKER'); ?></a>
<?php
if (!$options['pro'])
{
\NRFramework\HTML::renderProOnlyModal($options['extension']);
?>
<div class="tf-mapeditor-add-unlimited-markers is-hidden">
<a href="#" class="btn btn-danger" data-pro-only="<?php echo Text::_('NR_UNLIMITED_MARKERS'); ?>">
<?php echo Text::_('NR_ADD_MARKER'); ?>
<svg xmlns="http://www.w3.org/2000/svg" width="20" class="lock-icon" viewBox="0 96 960 960" fill="#fff"><path d="M222.152 981.5q-28.104 0-48.117-20.013-20.013-20.014-20.013-48.117V483.674q0-28.203 20.013-48.286 20.013-20.084 48.117-20.084h65.218v-90.739q0-80.366 56.265-136.857 56.266-56.491 136.414-56.491 80.147 0 136.364 56.491t56.217 136.857v90.739h65.218q28.202 0 48.286 20.084 20.084 20.083 20.084 48.286V913.37q0 28.103-20.084 48.117Q766.05 981.5 737.848 981.5H222.152Zm0-68.13h515.696V483.674H222.152V913.37Zm258.016-137.848q31.832 0 54.332-22.032 22.5-22.031 22.5-52.968 0-30-22.668-54.5t-54.5-24.5q-31.832 0-54.332 24.5t-22.5 55q0 30.5 22.668 52.5t54.5 22ZM355.5 415.304h249V324.62q0-52.388-36.152-88.711-36.152-36.322-88.174-36.322-52.022 0-88.348 36.322Q355.5 272.232 355.5 324.62v90.684ZM222.152 913.37V483.674 913.37Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="20" class="unlock-icon" viewBox="0 96 960 960" fill="#fff"><path d="M222.152 415.304H604.5V324.62q0-52.388-36.152-88.711-36.152-36.322-88.174-36.322-52.022 0-88.348 36.322-36.326 36.323-36.326 88.656h-68.13q0-80.516 56.265-136.932 56.266-56.416 136.414-56.416 80.147 0 136.364 56.491t56.217 136.857v90.739h65.218q28.202 0 48.286 20.084 20.084 20.083 20.084 48.286V913.37q0 28.103-20.084 48.117Q766.05 981.5 737.848 981.5H222.152q-28.104 0-48.117-20.013-20.013-20.014-20.013-48.117V483.674q0-28.203 20.013-48.286 20.013-20.084 48.117-20.084Zm0 498.066h515.696V483.674H222.152V913.37Zm258.016-137.848q31.832 0 54.332-22.032 22.5-22.031 22.5-52.968 0-30-22.668-54.5t-54.5-24.5q-31.832 0-54.332 24.5t-22.5 55q0 30.5 22.668 52.5t54.5 22ZM222.152 913.37V483.674 913.37Z"/></svg>
</a>
</div>
<?php
}
?>
</div>
<?php
// Load edit marker modal
require 'edit_marker_modal.php';
// Load add marker modal
require 'add_marker_modal.php';
}
?>
</div>

View File

@ -0,0 +1,60 @@
<?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;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Form\Form;
$form_source = new SimpleXMLElement('
<form>
<fieldset name="edit_marker_modal">
<field name="" type="hidden" class="tf-marker-repeater-id" />
<field name="" type="TFAddressLookup"
label="NR_LOCATION_ADDRESS"
group_class="mb-0"
class="tf-marker-repeater-address span12 full-width w-100"
/>
<field name="" type="text"
label="NR_COORDINATES"
hint="NR_LATITUDE"
class="tf-marker-repeater-latitude span12 full-width w-100"
/>
<field name="" type="text"
hiddenLabel="true"
hint="NR_LONGITUDE"
class="tf-marker-repeater-longitude span12 full-width w-100"
/>
<field name="" type="spacer" label="NR_INFO_WINDOW" class="tf-bold" />
<field name="" type="text"
label="NR_LABEL"
class="tf-marker-repeater-label span12 full-width w-100"
filter="safehtml"
/>
<field name="" type="textarea"
label="NR_DESCRIPTION"
class="tf-marker-repeater-description span12 full-width w-100"
rows="4"
filter="safehtml"
/>
</fieldset>
</form>
');
$form = Form::getInstance($options['name'], $form_source->asXML(), ['control' => $options['name']]);
echo HTMLHelper::_('bootstrap.renderModal', 'tfMapEditorMarkerEditModal', [
'title' => Text::_('NR_EDIT_MARKER'),
'modalWidth' => '50',
'footer' => '<button type="button" class="btn btn-primary tf-mapeditor-save-marker tf-modal-btn-primary" data-bs-dismiss="modal" data-dismiss="modal" aria-hidden="true">' . Text::_('JAPPLY') . '</button>'
], $form->renderFieldset('edit_marker_modal'));

View File

@ -0,0 +1,40 @@
<?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;
use Joomla\CMS\Form\Form;
require_once JPATH_SITE . '/plugins/system/nrframework/fields/tfaddresslookup.php';
$form_source = new SimpleXMLElement('
<form>
<fieldset name="mapeditor_field_settings">
<field name="address" type="TFAddressLookup"
label="NR_LOCATION_ADDRESS"
visible="' . $options['show_address'] . '"
id="' . $options['id'] . '"
autocomplete="' . ($options['autocomplete'] ? 'true' : 'false') . '"
/>
</fieldset>
</form>
');
$form = Form::getInstance($options['name'], $form_source->asXML(), ['control' => $options['name']]);
$form->bind([
'address' => [
'coordinates' => $options['value'],
'address' => !empty($options['address']) ? $options['address'] : $options['value']
]
]);
echo $form->renderFieldset('mapeditor_field_settings');

View File

@ -0,0 +1,32 @@
<?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;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
extract($displayData);
$options = isset($options) ? $options : $displayData;
if ($options['load_css_vars'] && !empty($options['custom_css']))
{
Factory::getDocument()->addStyleDeclaration($options['custom_css']);
}
?>
<div class="nrf-widget tf-map-editor<?php echo $options['css_class']; ?>" id="<?php echo $options['id']; ?>" data-options="<?php echo htmlspecialchars(json_encode($options)); ?>">
<div class="tf-map-editor--app"><?php echo Text::_('NR_LOADING_MAP'); ?></div>
<?php if (!$hide_input): ?>
<input type="hidden" name="<?php echo $options['name']; ?>" id="<?php echo $options['id']; ?>" value="<?php echo htmlspecialchars(json_encode($options['value'])); ?>" class="tf-map-editor--value<?php echo $options['required'] ? ' required' : ''; ?>"<?php echo $options['required'] ? ' required' : ''; ?> />
<?php endif; ?>
</div>

View File

@ -0,0 +1,28 @@
<?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;
use Joomla\CMS\Factory;
extract($displayData);
$options = isset($options) ? $options : $displayData;
if ($options['load_css_vars'] && !empty($options['custom_css']))
{
Factory::getDocument()->addStyleDeclaration($options['custom_css']);
}
?>
<div class="nrf-widget openstreetmap map-widget nr-address-component<?php echo $options['css_class'] ? ' ' . $options['css_class'] : ''; ?>" id="<?php echo $id; ?>" data-options="<?php echo htmlspecialchars(json_encode($options)); ?>">
<div class="map-item"></div>
</div>

View File

@ -0,0 +1,76 @@
<?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\HTML\HTMLHelper;
use Joomla\CMS\Factory;
extract($displayData);
if (!$readonly && !$disabled)
{
HTMLHelper::script('plg_system_nrframework/widgets/slider.js', ['relative' => true, 'version' => 'auto']);
}
if ($load_stylesheet)
{
HTMLHelper::stylesheet('plg_system_nrframework/widgets/slider.css', ['relative' => true, 'version' => 'auto']);
}
if ($load_css_vars)
{
Factory::getDocument()->addStyleDeclaration('
.nrf-slider-wrapper.' . $id . ' {
--base-color: ' . $base_color . ';
--progress-color: ' . $color . ';
--input-bg-color: ' . $input_bg_color . ';
--input-border-color: ' . $input_border_color . ';
--thumb-shadow-color: ' . $color . '26' . ';
}
');
}
?>
<div class="nrf-widget nrf-slider-wrapper <?php echo $css_class; ?>">
<input
type="range"
class="nrf-slider-range PrivateSwitchBase-input"
min="<?php echo $min; ?>"
max="<?php echo $max; ?>"
step="<?php echo $step; ?>"
value="<?php echo $value; ?>"
<?php if ($load_css_vars): ?>
data-base-color="<?php echo $base_color; ?>"
data-progress-color="<?php echo $color; ?>"
style="background: linear-gradient(to right, <?php echo $color; ?> 0%, <?php echo $color . ' ' . $bar_percentage; ?>%, <?php echo $base_color . ' ' . $bar_percentage; ?>%, <?php echo $base_color; ?> 100%)"
<?php endif; ?>
<?php if ($readonly || $disabled): ?>
disabled
<?php endif; ?>
<?php if ($aria_label): ?>
aria-label="<?php echo htmlspecialchars($aria_label, ENT_COMPAT, 'UTF-8'); ?>"
<?php endif; ?>
/>
<input
type="number"
value="<?php echo $value; ?>"
id="<?php echo $id; ?>"
name="<?php echo $name; ?>"
min="<?php echo $min; ?>"
max="<?php echo $max; ?>"
step="<?php echo $step; ?>"
class="nrf-slider-value form-control<?php echo !empty($input_class) ? ' ' . $input_class : ''; ?>"
<?php if ($readonly || $disabled): ?>
readonly
<?php endif; ?>
/>
</div>

View File

@ -0,0 +1,41 @@
<?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\HTML\HTMLHelper;
use Joomla\CMS\Factory;
extract($displayData);
if (!$readonly && !$disabled)
{
HTMLHelper::script('plg_system_nrframework/widgets/rating.js', ['relative' => true, 'version' => 'auto']);
}
if ($load_stylesheet)
{
HTMLHelper::stylesheet('plg_system_nrframework/widgets/rating.css', ['relative' => true, 'version' => 'auto']);
}
if ($load_css_vars)
{
Factory::getDocument()->addStyleDeclaration('
.nrf-rating-wrapper.' . $id . ' {
--rating-selected-color: ' . $selected_color . ';
--rating-unselected-color: ' . $unselected_color . ';
--rating-size: ' . $size . 'px;
}
');
}
echo $this->sublayout($half_ratings ? 'half' : 'full', $displayData);

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="nrf-widget nrf-rating-wrapper <?php echo $css_class; ?>">
<?php
for ($i = 1; $i <= $max_rating; $i++)
{
$label_class = '';
$rating_id = $id . '_' . $i;
$label_title = $i . ' ' . sprintf(Text::_('NR_STAR'), ($i > 1 ? 's' : ''));
if ($value && $i <= $value)
{
$label_class = 'iconFilled';
}
?>
<input type="radio" aria-hidden="true" class="<?php echo $input_class; ?>" id="<?php echo $rating_id; ?>" name="<?php echo $name; ?>"
value="<?php echo $i; ?>"
<?php if ($value && $i == $value): ?>
checked
<?php endif; ?>
<?php if ($readonly || $disabled): ?>
disabled
<?php endif; ?>
/>
<label aria-label="<?php echo $label_title; ?>" for="<?php echo $rating_id; ?>" class="<?php echo $label_class; ?>" title="<?php echo $label_title; ?>">
<svg class="svg-item">
<use xlink:href="<?php echo $icon_url; ?>#nrf-ratings-<?php echo $icon; ?>" />
</svg>
</label>
<?php
}
?>
</div>

View File

@ -0,0 +1,81 @@
<?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);
$css_class .= ' ' . $size;
?>
<div class="nrf-widget nrf-rating-wrapper half <?php echo $css_class; ?>">
<?php
$counter = 0;
$prev_counter = 0;
// initial value value
$rating_value = 0.5;
for ($i = 0; $i < $max_rating; $i++)
{
$label_class = '';
// wrapper start - for half rating item (half and full star)
if ($counter % 2 == 0)
{
$prev_counter = $counter;
?><span class="rating_item_group"><?php
}
$rating_item_type = fmod($rating_value, 1) == 0.5 ? 'half' : 'full';
$rating_id = $id . '_' . $i . '_' . $rating_item_type;
if ($value && $rating_value <= $value)
{
$label_class = ' iconFilled';
}
$label_title = $rating_value . ' ' . sprintf(Text::_('NR_STAR'), ($rating_value > 1 ? 's' : ''));
?>
<input type="radio"
aria-hidden="true"
class="<?php echo $input_class; ?>"
id="<?php echo $rating_id; ?>"
name="<?php echo $name; ?>"
value="<?php echo $rating_value; ?>"
<?php if ($value && $rating_value == $value): ?>
checked
<?php endif; ?>
<?php if ($readonly || $disabled): ?>
disabled
<?php endif; ?>
/>
<label aria-label="<?php echo $label_title; ?>" class="<?php echo $rating_item_type . $label_class; ?>" for="<?php echo $rating_id; ?>" title="<?php echo $label_title; ?>">
<svg class="svg-item">
<use xlink:href="<?php echo $icon_url; ?>#nrf-ratings-<?php echo $icon; ?>" />
</svg>
</label>
<?php
// wrapper end - for half rating item
if ($counter == $prev_counter + 1)
{
?></span><?php
}
$counter++;
// increase value
$rating_value += 0.5;
}
?>
</div>

View File

@ -0,0 +1,46 @@
<?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);
$options = isset($options) ? $options : $displayData;
if (!$options['video'] || !is_array($options['video']))
{
return;
}
$attributes = array_filter(array(
isset($options['controls']) && $options['controls'] ? 'controls' : '',
isset($options['loop']) && $options['loop'] ? 'loop' : '',
isset($options['mute']) && $options['mute'] ? 'muted' : '',
isset($options['autoplay']) && $options['autoplay'] ? 'autoplay playsinline' : ''
));
$type_ext = $options['video']['ext'] === 'mov' ? 'mp4' : $options['video']['ext'];
?>
<div class="nrf-widget tf-video selfhostedvideo<?php echo $css_class ? ' ' . $css_class : ''; ?>" id="<?php echo $options['id']; ?>">
<div class="tf-video-embed" <?php echo $options['atts']; ?>>
<video
preload="<?php echo $options['preload']; ?>"
controlsList="nodownload"
<?php echo implode(' ', $attributes); ?>
style="max-width:100%;">
<source data-src="<?php echo $options['video']['file']; ?>" type="video/<?php echo $type_ext; ?>" />
<?php echo Text::sprintf('NR_UNSUPPORTED_TAG', 'video'); ?>
</video>
</div>
</div>

View File

@ -0,0 +1,53 @@
<?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\HTML\HTMLHelper;
use Joomla\CMS\Factory;
extract($displayData);
HTMLHelper::script('plg_system_nrframework/vendor/signature.min.js', ['relative' => true, 'version' => 'auto']);
HTMLHelper::script('plg_system_nrframework/widgets/signature.js', ['relative' => true, 'version' => 'auto']);
if ($load_stylesheet)
{
HTMLHelper::stylesheet('plg_system_nrframework/widgets/signature.css', ['relative' => true, 'version' => 'auto']);
}
if ($load_css_vars)
{
Factory::getDocument()->addStyleDeclaration('
.nrf-widget.signature.' . $id . ' {
--width: ' . $width . ';
--height: ' . $height . ';
--input-border-width: ' . $border_width . ';
--input-border-color: ' . $border_color . ';
--input-border-radius: ' . $border_radius . ';
--input-background-color: ' . $background_color . ';
--line-color: ' . (is_null($line_color) ? $border_color : $line_color) . ';
}
');
}
?>
<div class="nrf-widget signature<?php echo $css_class; ?>">
<div class="nrf-signature-body">
<div class="actions">
<svg class="nrf-signature-clear" width="22" height="22" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z"></path></svg>
<svg class="nrf-signature-reset" width="22" height="22" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z"></path></svg>
</div>
<canvas data-pen-color="<?php echo $pen_color; ?>"></canvas>
<input type="hidden" value="<?php echo htmlspecialchars((string) $value); ?>" name="<?php echo $name; ?>" />
<input type="hidden" value="<?php echo htmlspecialchars((string) $value); ?>" class="initial-value" />
</div>
</div>

View File

@ -0,0 +1,112 @@
<?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\FileLayout;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Factory;
extract($displayData);
if (!$items || !is_array($items) || !count($items))
{
return;
}
if ($load_stylesheet)
{
HTMLHelper::script('plg_system_nrframework/vendor/swiper.min.js', ['relative' => true, 'version' => 'auto']);
HTMLHelper::script('plg_system_nrframework/widgets/slideshow.js', ['relative' => true, 'version' => 'auto']);
HTMLHelper::stylesheet('plg_system_nrframework/vendor/swiper.min.css', ['relative' => true, 'version' => 'auto']);
HTMLHelper::stylesheet('plg_system_nrframework/widgets/slideshow.css', ['relative' => true, 'version' => 'auto']);
}
if ($load_css_vars)
{
Factory::getDocument()->addStyleDeclaration('
.nrf-widget.tf-slideshow-wrapper.' . $id . ',
.nrf-widget.tf-slideshow-thumbs-wrapper.' . $id . ' {
--swiper-theme-color: ' . $theme_color . ';
}
');
}
?>
<div class="nrf-widget tf-gallery-wrapper tf-slideshow-wrapper swiper<?php echo $css_class; ?>" role="region" aria-roledescription="carousel" aria-label="<?php echo Text::_('NR_HIGHLIGHTED_CAROUSEL'); ?>" data-options="<?php echo htmlspecialchars(json_encode($options), ENT_COMPAT, 'UTF-8'); ?>" id="tf-slideshow-<?php echo $id; ?>">
<div class="swiper-wrapper" aria-live="off">
<?php
foreach ($items as $index => $item)
{
?>
<div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="<?php Text::sprintf('NR_X_OF_X', ($index + 1), count($items)); ?>">
<?php if ($lightbox): ?>
<a href="<?php echo $item['url']; ?>" class="tf-gallery-lightbox-item tf-slideshow-<?php echo $id; ?>" data-type="image" data-description=".glightbox-desc.<?php echo $id; ?>.desc-<?php echo $index; ?>">
<?php endif; ?>
<img loading="lazy" src="<?php echo isset($item['slideshow']) && !empty($item['slideshow']) ? $item['slideshow'] : $item['url']; ?>"<?php echo $item['img_atts']; ?> alt="<?php echo strip_tags($item['alt']); ?>" />
<?php if ($lightbox): ?>
</a>
<div class="glightbox-desc <?php echo $id . ' desc-' . $index; ?>">
<div class="caption"><?php echo nl2br($item['caption']); ?></div>
<div class="module"><?php echo !empty($module) ? \NRFramework\Helpers\Widgets\Gallery::loadModule($module) : ''; ?></div>
</div>
<?php endif; ?>
</div>
<?php
}
?>
</div>
<?php if ($options['autoplay_progress']): ?>
<div class="autoplay-progress-circle">
<svg viewBox="0 0 48 48">
<circle cx="24" cy="24" r="20"></circle>
</svg>
<span></span>
</div>
<?php endif; ?>
<?php if (in_array($nav_controls, ['arrows', 'arrows_dots'])): ?>
<div class="swiper-button-prev" aria-label="<?php echo Text::_('NR_PREVIOUS_SLIDE'); ?>"></div>
<div class="swiper-button-next" aria-label="<?php echo Text::_('NR_NEXT_SLIDE'); ?>"></div>
<?php endif; ?>
<?php if (in_array($nav_controls, ['dots', 'arrows_dots'])): ?>
<div class="swiper-pagination"></div>
<?php endif; ?>
</div>
<?php if ($show_thumbnails): ?>
<div thumbsSlider="" class="nrf-widget tf-slideshow-thumbs-wrapper swiper<?php echo $css_class; ?>" id="thumbs_tf-slideshow-<?php echo $id; ?>">
<div class="swiper-wrapper">
<?php
foreach ($items as $index => $item)
{
?><div class="swiper-slide"><img loading="lazy" src="<?php echo $item['thumbnail_url']; ?>" alt="<?php echo strip_tags($item['alt']); ?>" /></div><?php
}
?>
</div>
<?php if ($show_thumbnails_arrows): ?>
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
<?php endif; ?>
</div>
<?php endif; ?>
<?php
if ($lightbox)
{
$layout = new FileLayout('glightbox', JPATH_PLUGINS . '/system/nrframework/layouts/widgets/gallery/default');
echo $layout->render($displayData);
}
?>

View File

@ -0,0 +1,51 @@
<?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;
use Joomla\CMS\Factory;
extract($displayData);
$options = isset($options) ? $options : $displayData;
if (!$options['value'])
{
return;
}
if ($options['load_css_vars'])
{
$atts = [];
// Add cover image
if (isset($options['coverImageType']) && isset($options['coverImage']) && in_array($options['coverImageType'], ['auto', 'custom']) && !empty($options['coverImage']))
{
$atts['video-cover-image'] = $options['coverImage'];
}
$css = \NRFramework\Helpers\CSS::cssVarsToString($atts, '.nrf-widget.tf-video.' . $options['id']);
Factory::getDocument()->addStyleDeclaration($css);
}
?>
<div class="nrf-widget tf-video<?php echo $css_class ? ' ' . $css_class : ''; ?>" id="<?php echo $options['id']; ?>" data-readonly="<?php echo var_export($options['readonly']); ?>" data-disabled="<?php echo var_export($options['disabled']); ?>">
<div class="tf-video-embed-wrapper">
<div class="tf-video-embed" <?php echo $options['atts']; ?>>
<div id="tf_video_embed_<?php echo $options['id']; ?>"></div>
</div>
<?php if (isset($options['coverImageType']) && isset($options['coverImage']) && $options['coverImageType'] !== 'none' && !empty($options['coverImage'])): ?>
<div class="tf-video-embed-overlay"><div class="play-button"></div></div>
<?php endif; ?>
</div>
</div>