datatable.directory codebase
				https://datatable.directory/
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							116 lines
						
					
					
						
							3.1 KiB
						
					
					
				
			
		
		
	
	
							116 lines
						
					
					
						
							3.1 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
 | 
						|
namespace App\View;
 | 
						|
 | 
						|
class WidgetFactory
 | 
						|
{
 | 
						|
    private $labelCols = 3, $fieldCols = 8;
 | 
						|
 | 
						|
    /** Configure layout used for future elements */
 | 
						|
    public function setLayout($labelCols, $fieldCols)
 | 
						|
    {
 | 
						|
        $this->labelCols = $labelCols;
 | 
						|
        $this->fieldCols = $fieldCols;
 | 
						|
    }
 | 
						|
 | 
						|
    public function help($text)
 | 
						|
    {
 | 
						|
        return view('form._help-inner', ['help' => $text]);
 | 
						|
    }
 | 
						|
 | 
						|
    public function header($hx, $text)
 | 
						|
    {
 | 
						|
        return  "<div class=\"row\">".
 | 
						|
                    "<h$hx class=\"col-md-$this->fieldCols offset-md-$this->labelCols\">".e($text)."</h$hx>".
 | 
						|
                "</div>";
 | 
						|
    }
 | 
						|
 | 
						|
    public function par($text, $extraClasses='', $escape=true)
 | 
						|
    {
 | 
						|
        if (false === strpos($extraClasses, 'mb-')) $extraClasses .= ' mb-2';
 | 
						|
 | 
						|
        return
 | 
						|
            "<div class=\"row\">".
 | 
						|
                "<p class=\"col-md-$this->fieldCols offset-md-$this->labelCols ".e($extraClasses)."\">".
 | 
						|
                    ($escape ? e($text) : $text) .
 | 
						|
                "</p>".
 | 
						|
            "</div>";
 | 
						|
    }
 | 
						|
 | 
						|
    public function labeledPar($label, $text, $extraClasses='', $escape=true)
 | 
						|
    {
 | 
						|
        if (false === strpos($extraClasses, 'mb-')) $extraClasses .= ' mb-2';
 | 
						|
 | 
						|
        return
 | 
						|
            "<div class=\"row\">".
 | 
						|
            "<label class=\"text-md-right col-form-label col-md-$this->labelCols\">".e($label)."</label>".
 | 
						|
            "<p class=\"form-control-plaintext col-md-$this->fieldCols".e($extraClasses)."\">".
 | 
						|
            ($escape ? e($text) : $text) .
 | 
						|
            "</p>".
 | 
						|
            "</div>";
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Convert the given string to a-href if it is a link.
 | 
						|
     *
 | 
						|
     * @param $href
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function tryLink($href)
 | 
						|
    {
 | 
						|
        $href = trim($href);
 | 
						|
        if (starts_with($href, ['http://', 'https://', 'mailto:', 'ftp://'])) {
 | 
						|
            $href_e = e($href);
 | 
						|
            return "<a href=\"".$href_e."\">".$href_e."</a>";
 | 
						|
        } else {
 | 
						|
            return $href;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function collapsible($text, $thrSize, $maxHeight)
 | 
						|
    {
 | 
						|
        return new CollapsibleTextBoxWidget($text, $thrSize, $maxHeight);
 | 
						|
    }
 | 
						|
 | 
						|
    private function baseWidget($view, $name, $label)
 | 
						|
    {
 | 
						|
        return (new Widget($view, $name, $label))->layout($this->labelCols, $this->fieldCols);
 | 
						|
    }
 | 
						|
 | 
						|
    public function text($name, $label)
 | 
						|
    {
 | 
						|
        return $this->baseWidget('input', $name, $label);
 | 
						|
    }
 | 
						|
 | 
						|
    public function password($name, $label)
 | 
						|
    {
 | 
						|
        return $this->baseWidget('input', $name, $label)->type('password');
 | 
						|
    }
 | 
						|
 | 
						|
    public function number($name, $label)
 | 
						|
    {
 | 
						|
        return $this->baseWidget('input', $name, $label)->type('number');
 | 
						|
    }
 | 
						|
 | 
						|
    public function email($name, $label)
 | 
						|
    {
 | 
						|
        return $this->baseWidget('input', $name, $label)->type('email');
 | 
						|
    }
 | 
						|
 | 
						|
    public function file($name, $label)
 | 
						|
    {
 | 
						|
        return $this->baseWidget('input', $name, $label)->type('file');
 | 
						|
    }
 | 
						|
 | 
						|
    public function checkbox($name, $label)
 | 
						|
    {
 | 
						|
        return (new CheckboxWidget('checkbox', $name, $label))
 | 
						|
            ->layout($this->labelCols, $this->fieldCols);
 | 
						|
    }
 | 
						|
 | 
						|
    public function textarea($name, $label)
 | 
						|
    {
 | 
						|
        return $this->baseWidget('textarea', $name, $label)->minHeight('4em');
 | 
						|
    }
 | 
						|
}
 | 
						|
 |