Laravel version update
Laravel version update
This commit is contained in:
90
vendor/laravelcollective/html/composer.json
vendored
90
vendor/laravelcollective/html/composer.json
vendored
@@ -1,41 +1,57 @@
|
||||
{
|
||||
"name": "laravelcollective/html",
|
||||
"description": "HTML and Form Builders for the Laravel Framework",
|
||||
"license": "MIT",
|
||||
"homepage": "http://laravelcollective.com",
|
||||
"support": {
|
||||
"issues": "https://github.com/LaravelCollective/html/issues",
|
||||
"source": "https://github.com/LaravelCollective/html"
|
||||
},
|
||||
"authors": [
|
||||
{
|
||||
"name": "Adam Engebretson",
|
||||
"email": "adam@laravelcollective.com"
|
||||
"name": "laravelcollective/html",
|
||||
"description": "HTML and Form Builders for the Laravel Framework",
|
||||
"license": "MIT",
|
||||
"homepage": "https://laravelcollective.com",
|
||||
"support": {
|
||||
"issues": "https://github.com/LaravelCollective/html/issues",
|
||||
"source": "https://github.com/LaravelCollective/html"
|
||||
},
|
||||
{
|
||||
"name": "Taylor Otwell",
|
||||
"email": "taylorotwell@gmail.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"illuminate/http": "5.2.*",
|
||||
"illuminate/routing": "5.2.*",
|
||||
"illuminate/session": "5.2.*",
|
||||
"illuminate/support": "5.2.*",
|
||||
"illuminate/view": "5.2.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"illuminate/database": "5.2.*",
|
||||
"mockery/mockery": "~0.9",
|
||||
"phpunit/phpunit": "~4.0"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Collective\\Html\\": "src/"
|
||||
"authors": [
|
||||
{
|
||||
"name": "Adam Engebretson",
|
||||
"email": "adam@laravelcollective.com"
|
||||
},
|
||||
{
|
||||
"name": "Taylor Otwell",
|
||||
"email": "taylorotwell@gmail.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7.0.0",
|
||||
"illuminate/http": "5.5.*",
|
||||
"illuminate/routing": "5.5.*",
|
||||
"illuminate/session": "5.5.*",
|
||||
"illuminate/support": "5.5.*",
|
||||
"illuminate/view": "5.5.*"
|
||||
},
|
||||
"files": [
|
||||
"src/helpers.php"
|
||||
]
|
||||
}
|
||||
"require-dev": {
|
||||
"illuminate/database": "5.5.*",
|
||||
"mockery/mockery": "~0.9.4",
|
||||
"phpunit/phpunit": "~5.4"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Collective\\Html\\": "src/"
|
||||
},
|
||||
"files": [
|
||||
"src/helpers.php"
|
||||
]
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.5-dev"
|
||||
},
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Collective\\Html\\HtmlServiceProvider"
|
||||
],
|
||||
"aliases": {
|
||||
"Form": "Collective\\Html\\FormFacade",
|
||||
"Html": "Collective\\Html\\HtmlFacade"
|
||||
}
|
||||
}
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true
|
||||
}
|
||||
|
@@ -41,7 +41,39 @@ trait FormAccessible
|
||||
return $this->mutateFormAttribute($key, $value);
|
||||
}
|
||||
|
||||
return $value;
|
||||
$keys = explode('.', $key);
|
||||
|
||||
if ($this->isNestedModel($keys[0])) {
|
||||
$relatedModel = $this->getRelation($keys[0]);
|
||||
|
||||
unset($keys[0]);
|
||||
$key = implode('.', $keys);
|
||||
|
||||
if ($this->hasFormMutator($key)) {
|
||||
return $relatedModel->getFormValue($key);
|
||||
}
|
||||
|
||||
return data_get($relatedModel, $key);
|
||||
}
|
||||
|
||||
// No form mutator, let the model resolve this
|
||||
return data_get($this, $key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for a nested model.
|
||||
*
|
||||
* @param string $key
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isNestedModel($key)
|
||||
{
|
||||
if (in_array($key, array_keys($this->getRelations()))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -54,8 +86,8 @@ trait FormAccessible
|
||||
$methods = $this->getReflection()->getMethods(ReflectionMethod::IS_PUBLIC);
|
||||
|
||||
$mutator = collect($methods)
|
||||
->first(function ($index, ReflectionMethod $method) use ($key) {
|
||||
return $method->getName() == 'form' . Str::studly($key) . 'Attribute';
|
||||
->first(function (ReflectionMethod $method) use ($key) {
|
||||
return $method->getName() === 'form' . Str::studly($key) . 'Attribute';
|
||||
});
|
||||
|
||||
return (bool) $mutator;
|
||||
|
257
vendor/laravelcollective/html/src/FormBuilder.php
vendored
257
vendor/laravelcollective/html/src/FormBuilder.php
vendored
@@ -2,18 +2,20 @@
|
||||
|
||||
namespace Collective\Html;
|
||||
|
||||
use DateTime;
|
||||
use BadMethodCallException;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\HtmlString;
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\Session\SessionInterface;
|
||||
use Illuminate\Support\Traits\Macroable;
|
||||
use DateTime;
|
||||
use Illuminate\Contracts\Routing\UrlGenerator;
|
||||
use Illuminate\Contracts\Session\Session;
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\HtmlString;
|
||||
use Illuminate\Support\Traits\Macroable;
|
||||
|
||||
class FormBuilder
|
||||
{
|
||||
|
||||
use Macroable, Componentable {
|
||||
Macroable::__call as macroCall;
|
||||
Componentable::__call as componentCall;
|
||||
@@ -50,7 +52,7 @@ class FormBuilder
|
||||
/**
|
||||
* The session store implementation.
|
||||
*
|
||||
* @var \Illuminate\Session\SessionInterface
|
||||
* @var \Illuminate\Contracts\Session\Session
|
||||
*/
|
||||
protected $session;
|
||||
|
||||
@@ -68,6 +70,8 @@ class FormBuilder
|
||||
*/
|
||||
protected $labels = [];
|
||||
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* The reserved form open attributes.
|
||||
*
|
||||
@@ -89,6 +93,14 @@ class FormBuilder
|
||||
*/
|
||||
protected $skipValueTypes = ['file', 'password', 'checkbox', 'radio'];
|
||||
|
||||
|
||||
/**
|
||||
* Input Type.
|
||||
*
|
||||
* @var null
|
||||
*/
|
||||
protected $type = null;
|
||||
|
||||
/**
|
||||
* Create a new form builder instance.
|
||||
*
|
||||
@@ -97,12 +109,13 @@ class FormBuilder
|
||||
* @param \Illuminate\Contracts\View\Factory $view
|
||||
* @param string $csrfToken
|
||||
*/
|
||||
public function __construct(HtmlBuilder $html, UrlGenerator $url, Factory $view, $csrfToken)
|
||||
public function __construct(HtmlBuilder $html, UrlGenerator $url, Factory $view, $csrfToken, Request $request = null)
|
||||
{
|
||||
$this->url = $url;
|
||||
$this->html = $html;
|
||||
$this->view = $view;
|
||||
$this->csrfToken = $csrfToken;
|
||||
$this->request = $request;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -177,6 +190,16 @@ class FormBuilder
|
||||
{
|
||||
$this->model = $model;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current model instance on the form builder.
|
||||
*
|
||||
* @return mixed $model
|
||||
*/
|
||||
public function getModel()
|
||||
{
|
||||
return $this->model;
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the current form.
|
||||
@@ -199,7 +222,7 @@ class FormBuilder
|
||||
*/
|
||||
public function token()
|
||||
{
|
||||
$token = ! empty($this->csrfToken) ? $this->csrfToken : $this->session->getToken();
|
||||
$token = ! empty($this->csrfToken) ? $this->csrfToken : $this->session->token();
|
||||
|
||||
return $this->hidden('_token', $token);
|
||||
}
|
||||
@@ -210,16 +233,21 @@ class FormBuilder
|
||||
* @param string $name
|
||||
* @param string $value
|
||||
* @param array $options
|
||||
* @param bool $escape_html
|
||||
*
|
||||
* @return \Illuminate\Support\HtmlString
|
||||
*/
|
||||
public function label($name, $value = null, $options = [])
|
||||
public function label($name, $value = null, $options = [], $escape_html = true)
|
||||
{
|
||||
$this->labels[] = $name;
|
||||
|
||||
$options = $this->html->attributes($options);
|
||||
|
||||
$value = e($this->formatLabel($name, $value));
|
||||
$value = $this->formatLabel($name, $value);
|
||||
|
||||
if ($escape_html) {
|
||||
$value = $this->html->entities($value);
|
||||
}
|
||||
|
||||
return $this->toHtmlString('<label for="' . $name . '"' . $options . '>' . $value . '</label>');
|
||||
}
|
||||
@@ -249,6 +277,8 @@ class FormBuilder
|
||||
*/
|
||||
public function input($type, $name, $value = null, $options = [])
|
||||
{
|
||||
$this->type = $type;
|
||||
|
||||
if (! isset($options['name'])) {
|
||||
$options['name'] = $name;
|
||||
}
|
||||
@@ -313,6 +343,20 @@ class FormBuilder
|
||||
return $this->input('hidden', $name, $value, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a search input field.
|
||||
*
|
||||
* @param string $name
|
||||
* @param string $value
|
||||
* @param array $options
|
||||
*
|
||||
* @return \Illuminate\Support\HtmlString
|
||||
*/
|
||||
public function search($name, $value = null, $options = [])
|
||||
{
|
||||
return $this->input('search', $name, $value, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an e-mail input field.
|
||||
*
|
||||
@@ -461,6 +505,8 @@ class FormBuilder
|
||||
*/
|
||||
public function textarea($name, $value = null, $options = [])
|
||||
{
|
||||
$this->type = 'textarea';
|
||||
|
||||
if (! isset($options['name'])) {
|
||||
$options['name'] = $name;
|
||||
}
|
||||
@@ -481,7 +527,7 @@ class FormBuilder
|
||||
// the element. Then we'll create the final textarea elements HTML for us.
|
||||
$options = $this->html->attributes($options);
|
||||
|
||||
return $this->toHtmlString('<textarea' . $options . '>' . e($value) . '</textarea>');
|
||||
return $this->toHtmlString('<textarea' . $options . '>' . e($value). '</textarea>');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -526,22 +572,32 @@ class FormBuilder
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $list
|
||||
* @param string $selected
|
||||
* @param array $options
|
||||
* @param string|bool $selected
|
||||
* @param array $selectAttributes
|
||||
* @param array $optionsAttributes
|
||||
* @param array $optgroupsAttributes
|
||||
*
|
||||
* @return \Illuminate\Support\HtmlString
|
||||
*/
|
||||
public function select($name, $list = [], $selected = null, $options = [])
|
||||
{
|
||||
public function select(
|
||||
$name,
|
||||
$list = [],
|
||||
$selected = null,
|
||||
array $selectAttributes = [],
|
||||
array $optionsAttributes = [],
|
||||
array $optgroupsAttributes = []
|
||||
) {
|
||||
$this->type = 'select';
|
||||
|
||||
// When building a select box the "value" attribute is really the selected one
|
||||
// so we will use that when checking the model or session for a value which
|
||||
// should provide a convenient method of re-populating the forms on post.
|
||||
$selected = $this->getValueAttribute($name, $selected);
|
||||
|
||||
$options['id'] = $this->getIdAttribute($name, $options);
|
||||
$selectAttributes['id'] = $this->getIdAttribute($name, $selectAttributes);
|
||||
|
||||
if (! isset($options['name'])) {
|
||||
$options['name'] = $name;
|
||||
if (! isset($selectAttributes['name'])) {
|
||||
$selectAttributes['name'] = $name;
|
||||
}
|
||||
|
||||
// We will simply loop through the options and build an HTML value for each of
|
||||
@@ -549,23 +605,25 @@ class FormBuilder
|
||||
// all together into one single HTML element that can be put on the form.
|
||||
$html = [];
|
||||
|
||||
if (isset($options['placeholder'])) {
|
||||
$html[] = $this->placeholderOption($options['placeholder'], $selected);
|
||||
unset($options['placeholder']);
|
||||
if (isset($selectAttributes['placeholder'])) {
|
||||
$html[] = $this->placeholderOption($selectAttributes['placeholder'], $selected);
|
||||
unset($selectAttributes['placeholder']);
|
||||
}
|
||||
|
||||
foreach ($list as $value => $display) {
|
||||
$html[] = $this->getSelectOption($display, $value, $selected);
|
||||
$optionAttributes = $optionsAttributes[$value] ?? [];
|
||||
$optgroupAttributes = $optgroupsAttributes[$value] ?? [];
|
||||
$html[] = $this->getSelectOption($display, $value, $selected, $optionAttributes, $optgroupAttributes);
|
||||
}
|
||||
|
||||
// Once we have all of this HTML, we can join this into a single element after
|
||||
// formatting the attributes into an HTML "attributes" string, then we will
|
||||
// build out a final select statement, which will contain all the values.
|
||||
$options = $this->html->attributes($options);
|
||||
$selectAttributes = $this->html->attributes($selectAttributes);
|
||||
|
||||
$list = implode('', $html);
|
||||
|
||||
return $this->toHtmlString("<select{$options}>{$list}</select>");
|
||||
return $this->toHtmlString("<select{$selectAttributes}>{$list}</select>");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -629,16 +687,18 @@ class FormBuilder
|
||||
* @param string $display
|
||||
* @param string $value
|
||||
* @param string $selected
|
||||
* @param array $attributes
|
||||
* @param array $optgroupAttributes
|
||||
*
|
||||
* @return \Illuminate\Support\HtmlString
|
||||
*/
|
||||
public function getSelectOption($display, $value, $selected)
|
||||
public function getSelectOption($display, $value, $selected, array $attributes = [], array $optgroupAttributes = [])
|
||||
{
|
||||
if (is_array($display)) {
|
||||
return $this->optionGroup($display, $value, $selected);
|
||||
return $this->optionGroup($display, $value, $selected, $optgroupAttributes, $attributes);
|
||||
}
|
||||
|
||||
return $this->option($display, $value, $selected);
|
||||
return $this->option($display, $value, $selected, $attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -647,18 +707,22 @@ class FormBuilder
|
||||
* @param array $list
|
||||
* @param string $label
|
||||
* @param string $selected
|
||||
* @param array $attributes
|
||||
* @param array $optionsAttributes
|
||||
*
|
||||
* @return \Illuminate\Support\HtmlString
|
||||
*/
|
||||
protected function optionGroup($list, $label, $selected)
|
||||
protected function optionGroup($list, $label, $selected, array $attributes = [], array $optionsAttributes = [])
|
||||
{
|
||||
$html = [];
|
||||
|
||||
foreach ($list as $value => $display) {
|
||||
$html[] = $this->option($display, $value, $selected);
|
||||
}
|
||||
$optionAttributes = $optionsAttributes[$value] ?? [];
|
||||
|
||||
return $this->toHtmlString('<optgroup label="' . e($label) . '">' . implode('', $html) . '</optgroup>');
|
||||
$html[] = $this->option($display, $value, $selected, $optionAttributes);
|
||||
}
|
||||
|
||||
return $this->toHtmlString('<optgroup label="' . e($label) . '"' . $this->html->attributes($attributes) . '>' . implode('', $html) . '</optgroup>');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -667,16 +731,22 @@ class FormBuilder
|
||||
* @param string $display
|
||||
* @param string $value
|
||||
* @param string $selected
|
||||
* @param array $attributes
|
||||
*
|
||||
* @return \Illuminate\Support\HtmlString
|
||||
*/
|
||||
protected function option($display, $value, $selected)
|
||||
protected function option($display, $value, $selected, array $attributes = [])
|
||||
{
|
||||
$selected = $this->getSelectedValue($value, $selected);
|
||||
|
||||
$options = ['value' => $value, 'selected' => $selected];
|
||||
$options = array_merge(['value' => $value, 'selected' => $selected], $attributes);
|
||||
|
||||
return $this->toHtmlString('<option' . $this->html->attributes($options) . '>' . e($display) . '</option>');
|
||||
$string = '<option' . $this->html->attributes($options) . '>';
|
||||
if ($display !== null) {
|
||||
$string .= e($display) . '</option>';
|
||||
}
|
||||
|
||||
return $this->toHtmlString($string);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -691,8 +761,10 @@ class FormBuilder
|
||||
{
|
||||
$selected = $this->getSelectedValue(null, $selected);
|
||||
|
||||
$options = compact('selected');
|
||||
$options['value'] = '';
|
||||
$options = [
|
||||
'selected' => $selected,
|
||||
'value' => '',
|
||||
];
|
||||
|
||||
return $this->toHtmlString('<option' . $this->html->attributes($options) . '>' . e($display) . '</option>');
|
||||
}
|
||||
@@ -708,10 +780,14 @@ class FormBuilder
|
||||
protected function getSelectedValue($value, $selected)
|
||||
{
|
||||
if (is_array($selected)) {
|
||||
return in_array($value, $selected) ? 'selected' : null;
|
||||
return in_array($value, $selected, true) || in_array((string) $value, $selected, true) ? 'selected' : null;
|
||||
} elseif ($selected instanceof Collection) {
|
||||
return $selected->contains($value) ? 'selected' : null;
|
||||
}
|
||||
|
||||
return ((string) $value == (string) $selected) ? 'selected' : null;
|
||||
if (is_int($value) && is_bool($selected)) {
|
||||
return (bool)$value === $selected;
|
||||
}
|
||||
return ((string) $value === (string) $selected) ? 'selected' : null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -761,6 +837,8 @@ class FormBuilder
|
||||
*/
|
||||
protected function checkable($type, $name, $value, $checked, $options)
|
||||
{
|
||||
$this->type = $type;
|
||||
|
||||
$checked = $this->getCheckedState($type, $name, $value, $checked);
|
||||
|
||||
if ($checked) {
|
||||
@@ -790,7 +868,7 @@ class FormBuilder
|
||||
return $this->getRadioCheckedState($name, $value, $checked);
|
||||
|
||||
default:
|
||||
return $this->getValueAttribute($name) == $value;
|
||||
return $this->getValueAttribute($name) === $value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -805,11 +883,13 @@ class FormBuilder
|
||||
*/
|
||||
protected function getCheckboxCheckedState($name, $value, $checked)
|
||||
{
|
||||
if (isset($this->session) && ! $this->oldInputIsEmpty() && is_null($this->old($name))) {
|
||||
$request = $this->request($name);
|
||||
|
||||
if (isset($this->session) && ! $this->oldInputIsEmpty() && is_null($this->old($name)) && !$request) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($this->missingOldAndModel($name)) {
|
||||
if ($this->missingOldAndModel($name) && is_null($request)) {
|
||||
return $checked;
|
||||
}
|
||||
|
||||
@@ -835,11 +915,13 @@ class FormBuilder
|
||||
*/
|
||||
protected function getRadioCheckedState($name, $value, $checked)
|
||||
{
|
||||
if ($this->missingOldAndModel($name)) {
|
||||
$request = $this->request($name);
|
||||
|
||||
if ($this->missingOldAndModel($name) && !$request) {
|
||||
return $checked;
|
||||
}
|
||||
|
||||
return $this->getValueAttribute($name) == $value;
|
||||
return $this->getValueAttribute($name) === $value;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -938,7 +1020,7 @@ class FormBuilder
|
||||
{
|
||||
$method = strtoupper($method);
|
||||
|
||||
return $method != 'GET' ? 'POST' : $method;
|
||||
return $method !== 'GET' ? 'POST' : $method;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1040,7 +1122,7 @@ class FormBuilder
|
||||
// If the method is something other than GET we will go ahead and attach the
|
||||
// CSRF token to the form, as this can't hurt and is convenient to simply
|
||||
// always have available on every form the developers creates for them.
|
||||
if ($method != 'GET') {
|
||||
if ($method !== 'GET') {
|
||||
$appendage .= $this->token();
|
||||
}
|
||||
|
||||
@@ -1080,8 +1162,29 @@ class FormBuilder
|
||||
return $value;
|
||||
}
|
||||
|
||||
if (! is_null($this->old($name))) {
|
||||
return $this->old($name);
|
||||
$old = $this->old($name);
|
||||
|
||||
if (! is_null($old) && $name !== '_method') {
|
||||
return $old;
|
||||
}
|
||||
|
||||
if (function_exists('app')) {
|
||||
$hasNullMiddleware = app("Illuminate\Contracts\Http\Kernel")
|
||||
->hasMiddleware(ConvertEmptyStringsToNull::class);
|
||||
|
||||
if ($hasNullMiddleware
|
||||
&& is_null($old)
|
||||
&& is_null($value)
|
||||
&& ! is_null($this->view->shared('errors'))
|
||||
&& count($this->view->shared('errors')) > 0
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
$request = $this->request($name);
|
||||
if (! is_null($request) && $name !== '_method') {
|
||||
return $request;
|
||||
}
|
||||
|
||||
if (! is_null($value)) {
|
||||
@@ -1093,6 +1196,20 @@ class FormBuilder
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get value from current Request
|
||||
* @param $name
|
||||
* @return array|null|string
|
||||
*/
|
||||
protected function request($name)
|
||||
{
|
||||
if (! isset($this->request)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $this->request->input($this->transformKey($name));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the model value that should be assigned to the field.
|
||||
*
|
||||
@@ -1102,8 +1219,10 @@ class FormBuilder
|
||||
*/
|
||||
protected function getModelValueAttribute($name)
|
||||
{
|
||||
$key = $this->transformKey($name);
|
||||
|
||||
if (method_exists($this->model, 'getFormValue')) {
|
||||
return $this->model->getFormValue($name);
|
||||
return $this->model->getFormValue($key);
|
||||
}
|
||||
|
||||
return data_get($this->model, $this->transformKey($name));
|
||||
@@ -1119,7 +1238,25 @@ class FormBuilder
|
||||
public function old($name)
|
||||
{
|
||||
if (isset($this->session)) {
|
||||
return $this->session->getOldInput($this->transformKey($name));
|
||||
$key = $this->transformKey($name);
|
||||
$payload = $this->session->getOldInput($key);
|
||||
|
||||
if (! is_array($payload)) {
|
||||
return $payload;
|
||||
}
|
||||
|
||||
if (! in_array($this->type, ['select', 'checkbox'])) {
|
||||
if (! isset($this->payload[$key])) {
|
||||
$this->payload[$key] = collect($payload);
|
||||
}
|
||||
|
||||
if (! empty($this->payload[$key])) {
|
||||
$value = $this->payload[$key]->shift();
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $payload;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1130,7 +1267,7 @@ class FormBuilder
|
||||
*/
|
||||
public function oldInputIsEmpty()
|
||||
{
|
||||
return (isset($this->session) && count($this->session->getOldInput()) == 0);
|
||||
return (isset($this->session) && count($this->session->getOldInput()) === 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1160,7 +1297,7 @@ class FormBuilder
|
||||
/**
|
||||
* Get the session store implementation.
|
||||
*
|
||||
* @return \Illuminate\Session\SessionInterface $session
|
||||
* @return \Illuminate\Contracts\Session\Session $session
|
||||
*/
|
||||
public function getSessionStore()
|
||||
{
|
||||
@@ -1170,11 +1307,11 @@ class FormBuilder
|
||||
/**
|
||||
* Set the session store implementation.
|
||||
*
|
||||
* @param \Illuminate\Session\SessionInterface $session
|
||||
* @param \Illuminate\Contracts\Session\Session $session
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setSessionStore(SessionInterface $session)
|
||||
public function setSessionStore(Session $session)
|
||||
{
|
||||
$this->session = $session;
|
||||
|
||||
@@ -1193,16 +1330,12 @@ class FormBuilder
|
||||
*/
|
||||
public function __call($method, $parameters)
|
||||
{
|
||||
try {
|
||||
if (static::hasComponent($method)) {
|
||||
return $this->componentCall($method, $parameters);
|
||||
} catch (BadMethodCallException $e) {
|
||||
//
|
||||
}
|
||||
|
||||
try {
|
||||
if (static::hasMacro($method)) {
|
||||
return $this->macroCall($method, $parameters);
|
||||
} catch (BadMethodCallException $e) {
|
||||
//
|
||||
}
|
||||
|
||||
throw new BadMethodCallException("Method {$method} does not exist.");
|
||||
|
@@ -10,7 +10,6 @@ use Illuminate\Contracts\Routing\UrlGenerator;
|
||||
|
||||
class HtmlBuilder
|
||||
{
|
||||
|
||||
use Macroable, Componentable {
|
||||
Macroable::__call as macroCall;
|
||||
Componentable::__call as componentCall;
|
||||
@@ -79,7 +78,7 @@ class HtmlBuilder
|
||||
{
|
||||
$attributes['src'] = $this->url->asset($url, $secure);
|
||||
|
||||
return $this->toHtmlString('<script' . $this->attributes($attributes) . '></script>' . PHP_EOL);
|
||||
return $this->toHtmlString('<script' . $this->attributes($attributes) . '></script>');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -95,11 +94,11 @@ class HtmlBuilder
|
||||
{
|
||||
$defaults = ['media' => 'all', 'type' => 'text/css', 'rel' => 'stylesheet'];
|
||||
|
||||
$attributes = $attributes + $defaults;
|
||||
$attributes = array_merge($attributes, $defaults);
|
||||
|
||||
$attributes['href'] = $this->url->asset($url, $secure);
|
||||
|
||||
return $this->toHtmlString('<link' . $this->attributes($attributes) . '>' . PHP_EOL);
|
||||
return $this->toHtmlString('<link' . $this->attributes($attributes) . '>');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -133,11 +132,11 @@ class HtmlBuilder
|
||||
{
|
||||
$defaults = ['rel' => 'shortcut icon', 'type' => 'image/x-icon'];
|
||||
|
||||
$attributes = $attributes + $defaults;
|
||||
$attributes = array_merge($attributes, $defaults);
|
||||
|
||||
$attributes['href'] = $this->url->asset($url, $secure);
|
||||
|
||||
return $this->toHtmlString('<link' . $this->attributes($attributes) . '>' . PHP_EOL);
|
||||
return $this->toHtmlString('<link' . $this->attributes($attributes) . '>');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -147,10 +146,11 @@ class HtmlBuilder
|
||||
* @param string $title
|
||||
* @param array $attributes
|
||||
* @param bool $secure
|
||||
* @param bool $escape
|
||||
*
|
||||
* @return \Illuminate\Support\HtmlString
|
||||
*/
|
||||
public function link($url, $title = null, $attributes = [], $secure = null)
|
||||
public function link($url, $title = null, $attributes = [], $secure = null, $escape = true)
|
||||
{
|
||||
$url = $this->url->to($url, [], $secure);
|
||||
|
||||
@@ -158,7 +158,11 @@ class HtmlBuilder
|
||||
$title = $url;
|
||||
}
|
||||
|
||||
return $this->toHtmlString('<a href="' . $url . '"' . $this->attributes($attributes) . '>' . $this->entities($title) . '</a>');
|
||||
if ($escape) {
|
||||
$title = $this->entities($title);
|
||||
}
|
||||
|
||||
return $this->toHtmlString('<a href="' . $this->entities($url) . '"' . $this->attributes($attributes) . '>' . $title . '</a>');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -242,18 +246,23 @@ class HtmlBuilder
|
||||
* @param string $email
|
||||
* @param string $title
|
||||
* @param array $attributes
|
||||
* @param bool $escape
|
||||
*
|
||||
* @return \Illuminate\Support\HtmlString
|
||||
*/
|
||||
public function mailto($email, $title = null, $attributes = [])
|
||||
public function mailto($email, $title = null, $attributes = [], $escape = true)
|
||||
{
|
||||
$email = $this->email($email);
|
||||
|
||||
$title = $title ?: $email;
|
||||
|
||||
if ($escape) {
|
||||
$title = $this->entities($title);
|
||||
}
|
||||
|
||||
$email = $this->obfuscate('mailto:') . $email;
|
||||
|
||||
return $this->toHtmlString('<a href="' . $email . '"' . $this->attributes($attributes) . '>' . $this->entities($title) . '</a>');
|
||||
return $this->toHtmlString('<a href="' . $email . '"' . $this->attributes($attributes) . '>' . $title . '</a>');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -268,6 +277,18 @@ class HtmlBuilder
|
||||
return str_replace('@', '@', $this->obfuscate($email));
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates non-breaking space entities based on number supplied.
|
||||
*
|
||||
* @param int $num
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function nbsp($num = 1)
|
||||
{
|
||||
return str_repeat(' ', $num);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate an ordered list of items.
|
||||
*
|
||||
@@ -336,7 +357,7 @@ class HtmlBuilder
|
||||
{
|
||||
$html = '';
|
||||
|
||||
if (count($list) == 0) {
|
||||
if (count($list) === 0) {
|
||||
return $html;
|
||||
}
|
||||
|
||||
@@ -420,11 +441,18 @@ class HtmlBuilder
|
||||
*/
|
||||
protected function attributeElement($key, $value)
|
||||
{
|
||||
// For numeric keys we will assume that the key and the value are the same
|
||||
// as this will convert HTML attributes such as "required" to a correct
|
||||
// form like required="required" instead of using incorrect numerics.
|
||||
// For numeric keys we will assume that the value is a boolean attribute
|
||||
// where the presence of the attribute represents a true value and the
|
||||
// absence represents a false value.
|
||||
// This will convert HTML attributes such as "required" to a correct
|
||||
// form instead of using incorrect numerics.
|
||||
if (is_numeric($key)) {
|
||||
$key = $value;
|
||||
return $value;
|
||||
}
|
||||
|
||||
// Treat boolean attributes as HTML properties
|
||||
if (is_bool($value) && $key !== 'value') {
|
||||
return $value ? $key : '';
|
||||
}
|
||||
|
||||
if (! is_null($value)) {
|
||||
@@ -483,7 +511,7 @@ class HtmlBuilder
|
||||
|
||||
$attributes = array_merge($defaults, $attributes);
|
||||
|
||||
return $this->toHtmlString('<meta' . $this->attributes($attributes) . '>' . PHP_EOL);
|
||||
return $this->toHtmlString('<meta' . $this->attributes($attributes) . '>');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -497,8 +525,8 @@ class HtmlBuilder
|
||||
*/
|
||||
public function tag($tag, $content, array $attributes = [])
|
||||
{
|
||||
$content = is_array($content) ? implode(PHP_EOL, $content) : $content;
|
||||
return $this->toHtmlString('<' . $tag . $this->attributes($attributes) . '>' . PHP_EOL . $this->toHtmlString($content) . PHP_EOL . '</' . $tag . '>' . PHP_EOL);
|
||||
$content = is_array($content) ? implode('', $content) : $content;
|
||||
return $this->toHtmlString('<' . $tag . $this->attributes($attributes) . '>' . $this->toHtmlString($content) . '</' . $tag . '>');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -525,16 +553,12 @@ class HtmlBuilder
|
||||
*/
|
||||
public function __call($method, $parameters)
|
||||
{
|
||||
try {
|
||||
if (static::hasComponent($method)) {
|
||||
return $this->componentCall($method, $parameters);
|
||||
} catch (BadMethodCallException $e) {
|
||||
//
|
||||
}
|
||||
|
||||
try {
|
||||
if (static::hasMacro($method)) {
|
||||
return $this->macroCall($method, $parameters);
|
||||
} catch (BadMethodCallException $e) {
|
||||
//
|
||||
}
|
||||
|
||||
throw new BadMethodCallException("Method {$method} does not exist.");
|
||||
|
@@ -2,10 +2,20 @@
|
||||
|
||||
namespace Collective\Html;
|
||||
|
||||
use Illuminate\Support\Facades\Blade;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\View\Compilers\BladeCompiler;
|
||||
|
||||
class HtmlServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Supported Blade Directives
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $directives = ['entities','decode','script','style','image','favicon','link','secureLink','linkAsset','linkSecureAsset','linkRoute','linkAction','mailto','email','ol','ul','dl','meta','tag','open','model','close','token','label','input','text','password','hidden','email','tel','number','date','datetime','datetimeLocal','time','url','file','textarea','select','selectRange','selectYear','selectMonth','getSelectOption','checkbox','radio','reset','image','color','submit','button','old'
|
||||
];
|
||||
|
||||
/**
|
||||
* Indicates if loading of the provider is deferred.
|
||||
@@ -25,8 +35,10 @@ class HtmlServiceProvider extends ServiceProvider
|
||||
|
||||
$this->registerFormBuilder();
|
||||
|
||||
$this->app->alias('html', 'Collective\Html\HtmlBuilder');
|
||||
$this->app->alias('form', 'Collective\Html\FormBuilder');
|
||||
$this->app->alias('html', HtmlBuilder::class);
|
||||
$this->app->alias('form', FormBuilder::class);
|
||||
|
||||
$this->registerBladeDirectives();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -49,12 +61,40 @@ class HtmlServiceProvider extends ServiceProvider
|
||||
protected function registerFormBuilder()
|
||||
{
|
||||
$this->app->singleton('form', function ($app) {
|
||||
$form = new FormBuilder($app['html'], $app['url'], $app['view'], $app['session.store']->getToken());
|
||||
$form = new FormBuilder($app['html'], $app['url'], $app['view'], $app['session.store']->token(), $app['request']);
|
||||
|
||||
return $form->setSessionStore($app['session.store']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register Blade directives.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function registerBladeDirectives()
|
||||
{
|
||||
$this->app->afterResolving('blade.compiler', function (BladeCompiler $bladeCompiler) {
|
||||
$namespaces = [
|
||||
'Html' => get_class_methods(HtmlBuilder::class),
|
||||
'Form' => get_class_methods(FormBuilder::class),
|
||||
];
|
||||
|
||||
foreach ($namespaces as $namespace => $methods) {
|
||||
foreach ($methods as $method) {
|
||||
if (in_array($method, $this->directives)) {
|
||||
$snakeMethod = Str::snake($method);
|
||||
$directive = strtolower($namespace).'_'.$snakeMethod;
|
||||
|
||||
$bladeCompiler->directive($directive, function ($expression) use ($namespace, $method) {
|
||||
return "<?php echo $namespace::$method($expression); ?>";
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the services provided by the provider.
|
||||
*
|
||||
@@ -62,6 +102,6 @@ class HtmlServiceProvider extends ServiceProvider
|
||||
*/
|
||||
public function provides()
|
||||
{
|
||||
return ['html', 'form', 'Collective\Html\HtmlBuilder', 'Collective\Html\FormBuilder'];
|
||||
return ['html', 'form', HtmlBuilder::class, FormBuilder::class];
|
||||
}
|
||||
}
|
||||
|
@@ -8,12 +8,13 @@ if (! function_exists('link_to')) {
|
||||
* @param string $title
|
||||
* @param array $attributes
|
||||
* @param bool $secure
|
||||
* @param bool $escape
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function link_to($url, $title = null, $attributes = [], $secure = null)
|
||||
function link_to($url, $title = null, $attributes = [], $secure = null, $escape = true)
|
||||
{
|
||||
return app('html')->link($url, $title, $attributes, $secure);
|
||||
return app('html')->link($url, $title, $attributes, $secure, $escape);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user