<?php namespace Illuminate\Support; use BackedEnum; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Support\Htmlable; use Illuminate\Contracts\Support\Jsonable; use JsonSerializable; class Js implements Htmlable { /** * The JavaScript string. * * @var string */ protected $js; /** * Flags that should be used when encoding to JSON. * * @var int */ protected const REQUIRED_FLAGS = JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT | JSON_THROW_ON_ERROR; /** * Create a new class instance. * * @param mixed $data * @param int|null $flags * @param int $depth * @return void * * @throws \JsonException */ public function __construct($data, $flags = 0, $depth = 512) { $this->js = $this->convertDataToJavaScriptExpression($data, $flags, $depth); } /** * Create a new JavaScript string from the given data. * * @param mixed $data * @param int $flags * @param int $depth * @return static * * @throws \JsonException */ public static function from($data, $flags = 0, $depth = 512) { return new static($data, $flags, $depth); } /** * Convert the given data to a JavaScript expression. * * @param mixed $data * @param int $flags * @param int $depth * @return string * * @throws \JsonException */ protected function convertDataToJavaScriptExpression($data, $flags = 0, $depth = 512) { if ($data instanceof self) { return $data->toHtml(); } if ($data instanceof BackedEnum) { $data = $data->value; } $json = $this->jsonEncode($data, $flags, $depth); if (is_string($data)) { return "'".substr($json, 1, -1)."'"; } return $this->convertJsonToJavaScriptExpression($json, $flags); } /** * Encode the given data as JSON. * * @param mixed $data * @param int $flags * @param int $depth * @return string * * @throws \JsonException */ protected function jsonEncode($data, $flags = 0, $depth = 512) { if ($data instanceof Jsonable) { return $data->toJson($flags | static::REQUIRED_FLAGS); } if ($data instanceof Arrayable && ! ($data instanceof JsonSerializable)) { $data = $data->toArray(); } return json_encode($data, $flags | static::REQUIRED_FLAGS, $depth); } /** * Convert the given JSON to a JavaScript expression. * * @param string $json * @param int $flags * @return string * * @throws \JsonException */ protected function convertJsonToJavaScriptExpression($json, $flags = 0) { if ($json === '[]' || $json === '{}') { return $json; } if (Str::startsWith($json, ['"', '{', '['])) { return "JSON.parse('".substr(json_encode($json, $flags | static::REQUIRED_FLAGS), 1, -1)."')"; } return $json; } /** * Get the string representation of the data for use in HTML. * * @return string */ public function toHtml() { return $this->js; } /** * Get the string representation of the data for use in HTML. * * @return string */ public function __toString() { return $this->toHtml(); } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Exceptions | Folder | 0755 |
|
|
Facades | Folder | 0755 |
|
|
Testing | Folder | 0755 |
|
|
Traits | Folder | 0755 |
|
|
AggregateServiceProvider.php | File | 995 B | 0644 |
|
Benchmark.php | File | 1.49 KB | 0644 |
|
Carbon.php | File | 425 B | 0644 |
|
Composer.php | File | 2.82 KB | 0644 |
|
ConfigurationUrlParser.php | File | 4.25 KB | 0644 |
|
DateFactory.php | File | 7.76 KB | 0644 |
|
Env.php | File | 2.36 KB | 0644 |
|
Fluent.php | File | 4.14 KB | 0644 |
|
HigherOrderTapProxy.php | File | 665 B | 0644 |
|
HtmlString.php | File | 1.03 KB | 0644 |
|
InteractsWithTime.php | File | 1.55 KB | 0644 |
|
Js.php | File | 3.44 KB | 0644 |
|
LICENSE.md | File | 1.05 KB | 0644 |
|
Lottery.php | File | 5.66 KB | 0644 |
|
Manager.php | File | 4.46 KB | 0644 |
|
MessageBag.php | File | 9.8 KB | 0644 |
|
MultipleInstanceManager.php | File | 4.25 KB | 0644 |
|
NamespacedItemResolver.php | File | 3.35 KB | 0644 |
|
Optional.php | File | 2.64 KB | 0644 |
|
Pluralizer.php | File | 2.84 KB | 0644 |
|
ProcessUtils.php | File | 2 KB | 0644 |
|
Reflector.php | File | 4.5 KB | 0644 |
|
ServiceProvider.php | File | 10.76 KB | 0644 |
|
Str.php | File | 36.84 KB | 0644 |
|
Stringable.php | File | 29.87 KB | 0644 |
|
Timebox.php | File | 1.62 KB | 0644 |
|
ValidatedInput.php | File | 4.61 KB | 0644 |
|
ViewErrorBag.php | File | 2.57 KB | 0644 |
|
composer.json | File | 1.74 KB | 0644 |
|
helpers.php | File | 10.08 KB | 0644 |
|