<?php
namespace PHPFUI\Input;
class Time extends \PHPFUI\Input\Input
{
private array $options = ['callback' => 'function(selected){let timeString=selected instanceof Date?selected.toTimeString().substring(0,8):"";input.attr("value",timeString)}'];
private static ?\PHPFUI\Interfaces\Page $page = null;
public function __construct(\PHPFUI\Page $page, string $name, string $label = '', ?string $value = '', int $interval = 15)
{
$value = self::toMilitary($value);
if ($page->isAndroid() || $page->isIOS())
{
parent::__construct('time', $name, $label, $value);
$this->addAttribute('pattern', 'military');
$page->addPluginDefault('Abide', 'patterns["military"]', '/^(((([0-1][0-9])|(2[0-3])):?[0-5][0-9])|(24:?00))/');
}
elseif (! $page->hasTimePicker())
{
parent::__construct('time', $name, $label, $value);
$js = "var tp=TimePicker('blue');";
$page->addJavaScript($js);
$page->addStyleSheet('css/timepicker.css');
$page->addTailScript('timepicker.js');
if (! self::$page)
{
$page->add($this->getTemplate());
}
self::$page = $page;
}
else
{
parent::__construct('time', $name, $label, $value);
}
$this->setAttribute('step', (string)($interval * 60));
}
public function setParentReveal(\PHPFUI\Reveal $reveal) : static
{
$this->options['reveal'] = $reveal->getId();
return $this;
}
public static function toMilitary(?string $timeString) : string
{
if (empty($timeString))
{
return '';
}
return \date('H:i:s', \strtotime($timeString));
}
protected function getStart() : string
{
$js = \PHPFUI\TextHelper::arrayToJS($this->options);
$onclickJs = 'let input=$(this);tp.show(input,' . $js . ')';
$this->addAttribute('onfocus', $onclickJs);
return parent::getStart();
}
private function getTemplate() : string
{
$menu = new \PHPFUI\Menu();
$menu->addClass('align-center');
$menu->setId('timepicker-buttons');
$now = new \PHPFUI\MenuItem('NOW', '#');
$now->setId('timepicker-now-button');
$menu->addMenuItem($now);
$clear = new \PHPFUI\MenuItem('CLEAR', '#');
$clear->setId('timepicker-clear-button');
$menu->addMenuItem($clear);
$cancel = new \PHPFUI\MenuItem('CANCEL', '#');
$cancel->setId('timepicker-cancel-button');
$menu->addMenuItem($cancel);
$set = new \PHPFUI\MenuItem('SET', '#');
$set->setId('timepicker-set-button');
$menu->addMenuItem($set);
return "<div id='timepicker' class='reveal small' data-reveal>
<div id='timepicker-header' class='timepicker-bg'>
<div>
<span id='timepicker-hour'></span>
<span id='timepicker-mins'></span>
<span id='timepicker-ampm'></span>
</div>
</div>
<div id='timepicker-am-button' class='timepicker-ampm-button float-left'>AM</div>
<div id='timepicker-pm-button' class='timepicker-ampm-button float-right'>PM</div>
<div id='timepicker-flex'>
<div id='timepicker-clock'>
<span id='timepicker-hour-hand'></span>
<span id='timepicker-hour-center'></span>
<div id='timepicker-hour-1' class='timepicker-hour' data-value='1'></div>
<div id='timepicker-hour-2' class='timepicker-hour' data-value='2'></div>
<div id='timepicker-hour-3' class='timepicker-hour' data-value='3'></div>
<div id='timepicker-hour-4' class='timepicker-hour' data-value='4'></div>
<div id='timepicker-hour-5' class='timepicker-hour' data-value='5'></div>
<div id='timepicker-hour-6' class='timepicker-hour' data-value='6'></div>
<div id='timepicker-hour-7' class='timepicker-hour' data-value='7'></div>
<div id='timepicker-hour-8' class='timepicker-hour' data-value='8'></div>
<div id='timepicker-hour-9' class='timepicker-hour' data-value='9'></div>
<div id='timepicker-hour-10' class='timepicker-hour' data-value='10'></div>
<div id='timepicker-hour-11' class='timepicker-hour' data-value='11'></div>
<div id='timepicker-hour-12' class='timepicker-hour' data-value='12'></div>
</div>
</div>
{$menu}
</div>";
}
}