first commit
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
@if($authenticated)@component('scribe::components.badges.base', ['colour' => "darkred", 'text' => 'requires authentication'])
|
||||
@endcomponent
|
||||
@endif
|
||||
@@ -0,0 +1 @@
|
||||
<small class="badge badge-{{ $colour }}">{{ $text }}</small>
|
||||
@@ -0,0 +1,5 @@
|
||||
@component('scribe::components.badges.base', [
|
||||
'colour' => \Knuckles\Scribe\Tools\WritingUtils::$httpMethodToCssColour[$method],
|
||||
'text' => $method,
|
||||
])
|
||||
@endcomponent
|
||||
@@ -0,0 +1,75 @@
|
||||
@php
|
||||
$html ??= []; $class = $html['class'] ?? null;
|
||||
@endphp
|
||||
<b style="line-height: 2;"><code>{{ $name }}</code></b>
|
||||
@if($type)<small>{{ $type }}</small>@endif
|
||||
@if($isInput && !$required)<i>optional</i>@endif
|
||||
@if($isInput && empty($hasChildren))
|
||||
@php
|
||||
$isList = Str::endsWith($type, '[]');
|
||||
$fullName = str_replace('[]', '.0', $fullName ?? $name);
|
||||
$baseType = $isList ? substr($type, 0, -2) : $type;
|
||||
// Ignore the first '[]': the frontend will take care of it
|
||||
while (\Str::endsWith($baseType, '[]')) {
|
||||
$fullName .= '.0';
|
||||
$baseType = substr($baseType, 0, -2);
|
||||
}
|
||||
// When the body is an array, the item names will be ".0.thing"
|
||||
$fullName = ltrim($fullName, '.');
|
||||
$inputType = match($baseType) {
|
||||
'number', 'integer' => 'number',
|
||||
'file' => 'file',
|
||||
default => 'text',
|
||||
};
|
||||
@endphp
|
||||
@if($type === 'boolean')
|
||||
<label data-endpoint="{{ $endpointId }}" style="display: none">
|
||||
<input type="radio" name="{{ $fullName }}"
|
||||
value="{{$component === 'body' ? 'true' : 1}}"
|
||||
data-endpoint="{{ $endpointId }}"
|
||||
data-component="{{ $component }}" @if($class)class="{{ $class }}"@endif
|
||||
>
|
||||
<code>true</code>
|
||||
</label>
|
||||
<label data-endpoint="{{ $endpointId }}" style="display: none">
|
||||
<input type="radio" name="{{ $fullName }}"
|
||||
value="{{$component === 'body' ? 'false' : 0}}"
|
||||
data-endpoint="{{ $endpointId }}"
|
||||
data-component="{{ $component }}" @if($class)class="{{ $class }}"@endif
|
||||
>
|
||||
<code>false</code>
|
||||
</label>
|
||||
@elseif($isList)
|
||||
<input type="{{ $inputType }}" style="display: none"
|
||||
@if($inputType === 'number')step="any"@endif
|
||||
name="{{ $fullName."[0]" }}" @if($class)class="{{ $class }}"@endif
|
||||
data-endpoint="{{ $endpointId }}"
|
||||
data-component="{{ $component }}">
|
||||
<input type="{{ $inputType }}" style="display: none"
|
||||
name="{{ $fullName."[1]" }}" @if($class)class="{{ $class }}"@endif
|
||||
data-endpoint="{{ $endpointId }}"
|
||||
data-component="{{ $component }}">
|
||||
@else
|
||||
<input type="{{ $inputType }}" style="display: none"
|
||||
@if($inputType === 'number')step="any"@endif
|
||||
name="{{ $fullName }}" @if($class)class="{{ $class }}"@endif
|
||||
data-endpoint="{{ $endpointId }}"
|
||||
value="{!! (isset($example) && (is_string($example) || is_numeric($example))) ? $example : '' !!}"
|
||||
data-component="{{ $component }}">
|
||||
@endif
|
||||
@endif
|
||||
<br>
|
||||
@php
|
||||
if($example !== null && $example !== '' && !is_array($example)) {
|
||||
$exampleAsString = $example;
|
||||
if (is_bool($example)) {
|
||||
$exampleAsString = $example ? "true" : "false";
|
||||
}
|
||||
$description .= " Example: `$exampleAsString`";
|
||||
}
|
||||
@endphp
|
||||
{!! Parsedown::instance()->text(trim($description)) !!}
|
||||
@if(!empty($enumValues))
|
||||
Must be one of:
|
||||
<ul style="list-style-type: square;">{!! implode(" ", array_map(fn($val) => "<li><code>$val</code></li>", $enumValues)) !!}</ul>
|
||||
@endif
|
||||
@@ -0,0 +1,101 @@
|
||||
@php
|
||||
$isInput ??= true;
|
||||
$level ??= 0;
|
||||
@endphp
|
||||
@foreach($fields as $name => $field)
|
||||
@if($name === '[]')
|
||||
@php
|
||||
$description = "The request body is an array (<code>{$field['type']}</code>`)";
|
||||
$description .= !empty($field['description']) ? ", representing ".lcfirst($field['description'])."." : '.';
|
||||
if(count($field['__fields'])) $description .= " Each item has the following properties:";
|
||||
@endphp
|
||||
{!! Parsedown::instance()->text($description) !!}
|
||||
|
||||
@foreach($field['__fields'] as $subfieldName => $subfield)
|
||||
@if(!empty($subfield['__fields']))
|
||||
<x-scribe::nested-fields
|
||||
:fields="[$subfieldName => $subfield]" :endpointId="$endpointId" :isInput="$isInput" :level="$level + 2"
|
||||
/>
|
||||
@else
|
||||
<div style="margin-left: {{ ($level + 2) * 14 }}px; clear: unset;">
|
||||
@component('scribe::components.field-details', [
|
||||
'name' => $subfieldName,
|
||||
'fullName' => $subfield['name'],
|
||||
'type' => $subfield['type'] ?? 'string',
|
||||
'required' => $subfield['required'] ?? false,
|
||||
'description' => $subfield['description'] ?? '',
|
||||
'example' => $subfield['example'] ?? '',
|
||||
'enumValues' => $subfield['enumValues'] ?? null,
|
||||
'endpointId' => $endpointId,
|
||||
'hasChildren' => false,
|
||||
'component' => 'body',
|
||||
'isInput' => $isInput,
|
||||
])
|
||||
@endcomponent
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
@elseif(!empty($field['__fields']))
|
||||
<div style="@if($level) margin-left: {{ $level * 14 }}px;@else padding-left: 28px; @endif clear: unset;">
|
||||
<details>
|
||||
<summary style="padding-bottom: 10px;">
|
||||
@component('scribe::components.field-details', [
|
||||
'name' => $name,
|
||||
'fullName' => $field['name'],
|
||||
'type' => $field['type'] ?? 'string',
|
||||
'required' => $field['required'] ?? false,
|
||||
'description' => $field['description'] ?? '',
|
||||
'example' => $field['example'] ?? '',
|
||||
'enumValues' => $field['enumValues'] ?? null,
|
||||
'endpointId' => $endpointId,
|
||||
'hasChildren' => true,
|
||||
'component' => 'body',
|
||||
'isInput' => $isInput,
|
||||
])
|
||||
@endcomponent
|
||||
</summary>
|
||||
@foreach($field['__fields'] as $subfieldName => $subfield)
|
||||
@if(!empty($subfield['__fields']))
|
||||
<x-scribe::nested-fields
|
||||
:fields="[$subfieldName => $subfield]" :endpointId="$endpointId" :isInput="$isInput" :level="$level + 1"
|
||||
/>
|
||||
@else
|
||||
<div style="margin-left: {{ ($level + 1) * 14 }}px; clear: unset;">
|
||||
@component('scribe::components.field-details', [
|
||||
'name' => $subfieldName,
|
||||
'fullName' => $subfield['name'],
|
||||
'type' => $subfield['type'] ?? 'string',
|
||||
'required' => $subfield['required'] ?? false,
|
||||
'description' => $subfield['description'] ?? '',
|
||||
'example' => $subfield['example'] ?? '',
|
||||
'enumValues' => $subfield['enumValues'] ?? null,
|
||||
'endpointId' => $endpointId,
|
||||
'hasChildren' => false,
|
||||
'component' => 'body',
|
||||
'isInput' => $isInput,
|
||||
])
|
||||
@endcomponent
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
</details>
|
||||
</div>
|
||||
@else
|
||||
<div style="@if($level) margin-left: {{ ($level + 1) * 14 }}px;@else padding-left: 28px; @endif clear: unset;">
|
||||
@component('scribe::components.field-details', [
|
||||
'name' => $name,
|
||||
'fullName' => $field['name'],
|
||||
'type' => $field['type'] ?? 'string',
|
||||
'required' => $field['required'] ?? false,
|
||||
'description' => $field['description'] ?? '',
|
||||
'example' => $field['example'] ?? '',
|
||||
'enumValues' => $field['enumValues'] ?? null,
|
||||
'endpointId' => $endpointId,
|
||||
'hasChildren' => false,
|
||||
'component' => 'body',
|
||||
'isInput' => $isInput,
|
||||
])
|
||||
@endcomponent
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
Reference in New Issue
Block a user