<?php
namespace PHPFUI\Input;
class File extends \PHPFUI\Input\Input
{
use \PHPFUI\Traits\Page;
public function __construct(protected \PHPFUI\Interfaces\Page $page, string $name, string $label = '')
{
parent::__construct('file', $name, $label, null);
$this->page->addTailScript('dropify/js/dropify.min.js');
$this->page->addStyleSheet('dropify/css/dropify.min.css');
$preventDropJs = <<<JS
var dropZones = [];
function disableNonDropZones(e) {
if (! dropZones.includes(e.target.id)) {
e.preventDefault();
e.dataTransfer.effectAllowed = "none";
e.dataTransfer.dropEffect = "none";
}
};
window.addEventListener("dragenter", disableNonDropZones, false);
window.addEventListener("dragover", disableNonDropZones);
window.addEventListener("drop", disableNonDropZones);
JS;
$this->page->addJavaScript($preventDropJs);
$js = '$("#' . $this->getId() . '").dropify();dropZones.push("' . $this->getId() . '")';
$this->page->addJavaScript($js);
$this->addAttribute('data-height', '100');
$this->addAttribute('style', 'z-index:0');
}
public function setAllowedExtensions(array $extensions) : static
{
foreach ($extensions as &$value)
{
$value = \ltrim($value, '.');
}
unset($value);
$this->addAttribute('data-allowed-file-extensions', \implode(' ', $extensions));
foreach ($extensions as &$value)
{
$value = '.' . $value;
}
unset($value);
$this->addAttribute('accept', \implode(',', $extensions));
return $this;
}
}