<?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>"; } }