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