108 lines
2.8 KiB
PHP
108 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* @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
|
|
*/
|
|
|
|
// No direct access to this file
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\HTML\HTMLHelper;
|
|
|
|
require_once dirname(__DIR__) . '/helpers/field.php';
|
|
|
|
class JFormFieldNR_Rate extends NRFormField
|
|
{
|
|
/**
|
|
* The form field type.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $type = 'nr_rate';
|
|
|
|
/**
|
|
* Method to get the field input markup.
|
|
*
|
|
* @return string The field input markup.
|
|
*/
|
|
public function getInput()
|
|
{
|
|
// Setup properties
|
|
$starwidth = $this->get('starwidth', '25px');
|
|
$numstarts = $this->get('numstars', 5);
|
|
$maxvalue = $this->get('maxvalue', 5);
|
|
$halfstar = $this->get('halfstar', 0) ? "true" : "false";
|
|
$spacing = $this->get('spacing', "3px");
|
|
$ratedfill = $this->get('ratedfill', "#e7711b");
|
|
$this->value = empty($this->value) ? 0 : $this->value;
|
|
|
|
static $run;
|
|
if (!$run)
|
|
{
|
|
// Add styles and scripts to DOM
|
|
HTMLHelper::_('jquery.framework');
|
|
HTMLHelper::script('plg_system_nrframework/vendor/jquery.rateyo.min.js', ['relative' => true, 'version' => true]);
|
|
HTMLHelper::stylesheet('plg_system_nrframework/vendor/jquery.rateyo.min.css', ['relative' => true, 'version' => true]);
|
|
|
|
$this->doc->addStyleDeclaration('
|
|
.nr_rate {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.nr_rate_preview {
|
|
background-color: #393939;
|
|
color: #fff;
|
|
padding: 7px;
|
|
font-size: 12px;
|
|
line-height: 1;
|
|
min-width: 20px;
|
|
text-align: center;
|
|
border-radius: 2px;
|
|
position:relative;
|
|
top:2px;
|
|
}
|
|
.nr_rate .jq-ry-container {
|
|
padding: 0 10px 0 0;
|
|
}
|
|
.nr_rate svg {
|
|
max-width: unset;
|
|
}
|
|
');
|
|
|
|
$run = true;
|
|
}
|
|
|
|
$this->doc->addScriptDeclaration('
|
|
jQuery(function($) {
|
|
$("#nr_rate_'.$this->id.'").rateYo({
|
|
rating: ' . $this->value . ',
|
|
starWidth: "'. $starwidth .'",
|
|
numStars: ' . $numstarts . ',
|
|
maxValue: ' . $maxvalue . ',
|
|
halfStar: ' . $halfstar . ',
|
|
spacing: "' . $spacing . '",
|
|
ratedFill: "' . $ratedfill . '",
|
|
onInit: function (rating) {
|
|
$(this).parent().find(".nr_rate_preview").html(rating);
|
|
},
|
|
onSet: function(rating) {
|
|
$(this).next("input").val(rating);
|
|
},
|
|
onChange: function(rating) {
|
|
$(this).parent().find(".nr_rate_preview").html(rating);
|
|
}
|
|
});
|
|
});
|
|
');
|
|
|
|
$html[] = '<div class="nr_rate">';
|
|
$html[] = '<div id="nr_rate_'.$this->id.'"></div>';
|
|
$html[] = '<input value="' . $this->value . '" name="' . $this->name . '" type="hidden"/>';
|
|
$html[] = '<span class="nr_rate_preview"></span>';
|
|
$html[] = '</div>';
|
|
|
|
return implode(" ", $html);
|
|
}
|
|
} |