From 653672954606a23796e8a7bda3c34fd6b92f84e0 Mon Sep 17 00:00:00 2001 From: Yassine Doghri Date: Fri, 10 Sep 2021 16:02:25 +0000 Subject: [PATCH] feat: integrate stylized form components and update podcast edit page --- app/Libraries/ViewComponents/Component.php | 3 +- .../ViewComponents/ComponentRenderer.php | 2 +- .../Helpers/viewcomponents_helper.php | 33 ++ app/Resources/js/modules/xml-editor.ts | 9 +- app/Resources/styles/breadcrumb.css | 2 +- app/Resources/styles/choices.css | 19 +- app/Resources/styles/radioBtn.css | 17 +- app/Resources/styles/switch.css | 25 +- app/Views/Components/Forms/Field.php | 48 ++ app/Views/Components/Forms/FormComponent.php | 32 ++ app/Views/Components/Forms/Helper.php | 22 + app/Views/Components/Forms/Input.php | 37 ++ app/Views/Components/Forms/Label.php | 15 +- app/Views/Components/Forms/MarkdownEditor.php | 121 ++-- app/Views/Components/Forms/RadioButton.php | 40 ++ app/Views/Components/Forms/Section.php | 25 + app/Views/Components/Forms/Select.php | 20 +- app/Views/Components/Heading.php | 12 +- phpstan.neon | 1 + tailwind.config.js | 6 + themes/cp_admin/_layout.php | 18 +- themes/cp_admin/podcast/edit.php | 535 +++++++----------- themes/cp_admin/podcast/latest_episodes.php | 2 +- 23 files changed, 558 insertions(+), 486 deletions(-) create mode 100644 app/Libraries/ViewComponents/Helpers/viewcomponents_helper.php create mode 100644 app/Views/Components/Forms/Field.php create mode 100644 app/Views/Components/Forms/FormComponent.php create mode 100644 app/Views/Components/Forms/Helper.php create mode 100644 app/Views/Components/Forms/Input.php create mode 100644 app/Views/Components/Forms/RadioButton.php create mode 100644 app/Views/Components/Forms/Section.php diff --git a/app/Libraries/ViewComponents/Component.php b/app/Libraries/ViewComponents/Component.php index 779d12c2..2aa0a913 100644 --- a/app/Libraries/ViewComponents/Component.php +++ b/app/Libraries/ViewComponents/Component.php @@ -22,11 +22,12 @@ class Component implements ComponentInterface */ public function __construct(array $attributes) { + helper('viewcomponents'); + if ($attributes !== []) { $this->hydrate($attributes); } // overwrite default attributes if set - $this->attributes = array_merge($this->attributes, $attributes); } diff --git a/app/Libraries/ViewComponents/ComponentRenderer.php b/app/Libraries/ViewComponents/ComponentRenderer.php index ccac3239..37a16eee 100644 --- a/app/Libraries/ViewComponents/ComponentRenderer.php +++ b/app/Libraries/ViewComponents/ComponentRenderer.php @@ -109,7 +109,7 @@ class ComponentRenderer private function renderPairedTags(string $output): string { $pattern = '/<\s*(?[A-Z][A-Za-z0-9\.]*?)(?[\s\S\=\'\"]*)>(?.*)<\/\s*\1\s*>/uUsm'; - + ini_set('pcre.backtrack_limit', '-1'); /* $matches[0] = full tags matched and all of its content $matches[name] = pascal cased tag name diff --git a/app/Libraries/ViewComponents/Helpers/viewcomponents_helper.php b/app/Libraries/ViewComponents/Helpers/viewcomponents_helper.php new file mode 100644 index 00000000..1555f937 --- /dev/null +++ b/app/Libraries/ViewComponents/Helpers/viewcomponents_helper.php @@ -0,0 +1,33 @@ + $val) { + $atts .= ($js) ? $key . '=' . esc($val, 'js') . ',' : ' ' . $key . '="' . $val . '"'; + } + + return rtrim($atts, ','); + } +} diff --git a/app/Resources/js/modules/xml-editor.ts b/app/Resources/js/modules/xml-editor.ts index 81a8b254..100a701b 100644 --- a/app/Resources/js/modules/xml-editor.ts +++ b/app/Resources/js/modules/xml-editor.ts @@ -57,12 +57,17 @@ export class XMLEditor extends LitElement { static styles = css` .cm-wrap { - border: 1px solid #6b7280; + border-radius: 0.5rem; + overflow: hidden; + border: 3px solid #000000; background-color: #ffffff; } .cm-editor.cm-focused { outline: 2px solid transparent; - box-shadow: 0 0 0 1px #2563eb; + box-shadow: 0 0 0 2px #e7f9e4, 0 0 0 calc(4px) #009486; + } + .cm-gutters { + background-color: #ffffff !important; } `; diff --git a/app/Resources/styles/breadcrumb.css b/app/Resources/styles/breadcrumb.css index 0a89fe55..ac4a3fab 100644 --- a/app/Resources/styles/breadcrumb.css +++ b/app/Resources/styles/breadcrumb.css @@ -1,5 +1,5 @@ .breadcrumb { - @apply inline-flex flex-wrap px-1 py-2 text-sm; + @apply inline-flex flex-wrap px-1 text-sm; } .breadcrumb-item + .breadcrumb-item::before { diff --git a/app/Resources/styles/choices.css b/app/Resources/styles/choices.css index 07334261..d9cffcb3 100644 --- a/app/Resources/styles/choices.css +++ b/app/Resources/styles/choices.css @@ -138,8 +138,9 @@ } .choices__inner { - @apply p-2 bg-white border border-gray-700; + @apply p-2 bg-white border-black rounded-lg border-3; + box-shadow: 2px 2px 0 black; display: inline-block; vertical-align: top; width: 100%; @@ -158,11 +159,11 @@ } .is-open .choices__inner { - border-radius: 0; + @apply rounded-b-none; } .is-flipped.is-open .choices__inner { - border-radius: 0; + @apply rounded-t-none rounded-b-lg border-b-3; } .choices__list { @@ -172,9 +173,7 @@ } .choices__list--single { - @apply pr-4; - display: inline-block; - width: 100%; + @apply inline-block w-full pr-4; } [dir="rtl"] .choices__list--single { @@ -191,7 +190,7 @@ } .choices__list--multiple .choices__item { - @apply inline-block px-2 py-1 mb-1 mr-1 text-sm text-white align-middle bg-pine-600; + @apply inline-block px-2 py-1 mb-1 mr-1 text-sm text-white align-middle rounded bg-pine-500; word-break: break-all; box-sizing: border-box; @@ -216,12 +215,11 @@ } .choices__list--dropdown { + @apply z-50 border-2 border-black shadow-lg; visibility: hidden; - z-index: 1; position: absolute; width: 100%; background-color: #ffffff; - border: 1px solid #dddddd; top: 100%; margin-top: -1px; overflow: hidden; @@ -234,10 +232,11 @@ } .is-open .choices__list--dropdown { - border-color: #b7b7b7; + @apply border-t-0 rounded-b-lg; } .is-flipped .choices__list--dropdown { + @apply border-b-0 rounded-t-lg rounded-b-none border-t-3; top: auto; bottom: 100%; margin-top: 0; diff --git a/app/Resources/styles/radioBtn.css b/app/Resources/styles/radioBtn.css index 0abe1a6e..d882d606 100644 --- a/app/Resources/styles/radioBtn.css +++ b/app/Resources/styles/radioBtn.css @@ -1,26 +1,17 @@ @layer components { .form-radio-btn { - @apply absolute opacity-0; + @apply absolute mt-3 ml-3 border-black border-3 text-pine-500 focus:ring-2 focus:ring-pine-800; } .form-radio-btn:focus + label { - @apply ring; + @apply ring ring-pine-100; } .form-radio-btn + label { - @apply inline-block px-2 py-1 text-sm text-black bg-white border rounded cursor-pointer; - - &:hover { - @apply bg-pine-100; - } + @apply inline-block py-2 pl-8 pr-2 text-sm font-semibold text-gray-500 bg-white border-black rounded-lg cursor-pointer border-3; } .form-radio-btn:checked + label { - @apply text-white bg-pine-600; - - &::before { - @apply mr-2 text-pine-200; - content: "✓"; - } + @apply text-black border-pine-500; } } diff --git a/app/Resources/styles/switch.css b/app/Resources/styles/switch.css index 3d8a7f3d..b124f0f4 100644 --- a/app/Resources/styles/switch.css +++ b/app/Resources/styles/switch.css @@ -3,26 +3,37 @@ @apply absolute w-0 h-0 opacity-0; &:checked + .form-switch-slider { - @apply bg-pine-600; + @apply bg-pine-500; } &:focus + .form-switch-slider { - @apply ring; + @apply ring ring-offset-2 ring-pine-500 ring-offset-pine-100; } &:checked + .form-switch-slider::before { - @apply transform translate-x-5; + @apply transform translate-x-8; + } + + &:checked + .form-switch-slider::after { + @apply transform translate-x-1; + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='%23ffffff'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath d='m10 15.172 9.192-9.193 1.415 1.414L10 18l-6.364-6.364 1.414-1.414z'/%3E%3C/svg%3E%0A"); } } .form-switch-slider { - @apply relative inset-0 flex-shrink-0 w-10 h-5 transition duration-200 bg-gray-400 rounded-full cursor-pointer; + @apply relative inset-0 flex-shrink-0 w-[72px] h-10 transition duration-200 bg-gray-400 border-black rounded-full cursor-pointer border-3; &::before { - @apply absolute w-4 h-4 transition duration-200 bg-white rounded-full ring-1 ring-black ring-opacity-5; + @apply absolute z-10 w-[28px] h-[28px] transition duration-200 bg-white rounded-full ring-1 ring-black ring-opacity-5 shadow; content: ""; - left: 2px; - bottom: 2px; + left: 3px; + bottom: 3px; + } + + &::after { + @apply absolute w-6 h-6 transition duration-150 transform translate-x-8 top-1 left-1; + + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath d='m12 10.586 4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z'/%3E%3C/svg%3E%0A"); } } } diff --git a/app/Views/Components/Forms/Field.php b/app/Views/Components/Forms/Field.php new file mode 100644 index 00000000..10ec65da --- /dev/null +++ b/app/Views/Components/Forms/Field.php @@ -0,0 +1,48 @@ +helperText === null ? '' : '' . $this->helperText . ''; + + $labelAttributes = [ + 'for' => $this->id, + 'isOptional' => $this->required ? 'false' : 'true', + ]; + if ($this->hintText) { + $labelAttributes['hint'] = $this->hintText; + } + $labelAttributes = stringify_attributes($labelAttributes); + + // remove field specific attributes to inject the rest to Form Component + $fieldComponentAttributes = $this->attributes; + unset($fieldComponentAttributes['as']); + unset($fieldComponentAttributes['label']); + unset($fieldComponentAttributes['class']); + unset($fieldComponentAttributes['helperText']); + unset($fieldComponentAttributes['hintText']); + + $fieldComponentAttributes = flatten_attributes($fieldComponentAttributes); + + return << + {$this->label} + as} {$fieldComponentAttributes} class="mb-1"/> + {$helperText} + + HTML; + } +} diff --git a/app/Views/Components/Forms/FormComponent.php b/app/Views/Components/Forms/FormComponent.php new file mode 100644 index 00000000..785c0496 --- /dev/null +++ b/app/Views/Components/Forms/FormComponent.php @@ -0,0 +1,32 @@ +id === null) { + $this->id = $this->name; + } + } + + public function setRequired(string $value): void + { + $this->required = $value === 'true'; + } +} diff --git a/app/Views/Components/Forms/Helper.php b/app/Views/Components/Forms/Helper.php new file mode 100644 index 00000000..05174678 --- /dev/null +++ b/app/Views/Components/Forms/Helper.php @@ -0,0 +1,22 @@ +class}">{$this->slot} + HTML; + } +} diff --git a/app/Views/Components/Forms/Input.php b/app/Views/Components/Forms/Input.php new file mode 100644 index 00000000..7d771099 --- /dev/null +++ b/app/Views/Components/Forms/Input.php @@ -0,0 +1,37 @@ +class; + + if (session()->has('errors')) { + $error = session('errors')[$this->name]; + if ($error) { + $class .= ' border-red'; + } + } else { + $class .= ' border-black focus:border-black'; + } + + $data = [ + 'id' => $this->id, + 'name' => $this->name, + 'class' => $class, + 'type' => $this->type, + ]; + + if ($this->required) { + $data['required'] = 'required'; + } + + return form_input($data, old($this->name, $this->value)); + } +} diff --git a/app/Views/Components/Forms/Label.php b/app/Views/Components/Forms/Label.php index 6ff709d4..609780f6 100644 --- a/app/Views/Components/Forms/Label.php +++ b/app/Views/Components/Forms/Label.php @@ -8,16 +8,9 @@ use ViewComponents\Component; class Label extends Component { - /** - * @var array - */ - protected array $attributes = [ - 'for' => '', - 'name' => '', - 'class' => '', - ]; + protected ?string $for = null; - protected string $hint = ''; + protected ?string $hint = null; protected bool $isOptional = false; @@ -28,14 +21,14 @@ class Label extends Component public function render(): string { - $labelClass = $this->attributes['class']; + $labelClass = 'text-sm ' . $this->attributes['class']; unset($this->attributes['class']); $attributes = stringify_attributes($this->attributes); $optionalText = $this->isOptional ? '(' . lang('Common.optional') . ')' : ''; - $hint = $this->hint !== '' ? hint_tooltip($this->hint, 'ml-1') : ''; + $hint = $this->hint === null ? '' : hint_tooltip($this->hint, 'ml-1'); return <<{$this->slot}{$optionalText}{$hint} diff --git a/app/Views/Components/Forms/MarkdownEditor.php b/app/Views/Components/Forms/MarkdownEditor.php index febf2ebe..4a729729 100644 --- a/app/Views/Components/Forms/MarkdownEditor.php +++ b/app/Views/Components/Forms/MarkdownEditor.php @@ -4,73 +4,68 @@ declare(strict_types=1); namespace App\Views\Components\Forms; -use ViewComponents\Component; - -class MarkdownEditor extends Component +class MarkdownEditor extends FormComponent { public function render(): string { - $editorClass = 'w-full flex flex-col bg-white border border-gray-500 focus-within:ring-1 focus-within:ring-blue-600'; - if ($this->attributes['class'] !== '') { - $editorClass .= ' ' . $this->attributes['class']; - unset($this->attributes['class']); - } + $editorClass = 'w-full flex flex-col bg-white border-3 border-black rounded-lg overflow-hidden focus-within:ring-2 focus-within:ring-offset-2 focus-withing:ring-offset-pine-100 focus-within:ring-pine-500 ' . $this->class; - $this->attributes['class'] = 'border-none outline-none focus:border-none focus:outline-none w-full h-full'; + $this->attributes['class'] = 'border-none outline-none focus:border-none focus:outline-none focus:ring-0 w-full h-full'; + $this->attributes['rows'] = 6; - return '
' . - '
' . - '' . - '' . - '' . - '' . - '' . - '
' . - '' . icon( - 'heading' - ) . '' . - '' . icon( - 'bold' - ) . '' . - '' . icon( - 'italic' - ) . '' . - '
' . - '
' . - '' . icon( - 'list-unordered' - ) . '' . - '' . icon( - 'list-ordered' - ) . '' . - '
' . - '
' . - '' . icon( - 'quote' - ) . '' . - '' . icon( - 'link' - ) . '' . - '' . icon( - 'image-add' - ) . '' . - '
' . - '
' . - '
' . - '
' . - form_textarea($this->attributes, $this->slot) . - '' . - '
' . - '' . - '
'; + $textarea = form_textarea($this->attributes, old($this->name, $this->value, false)); + $icons = [ + 'heading' => icon('heading'), + 'bold' => icon('bold'), + 'italic' => icon('italic'), + 'list-unordered' => icon('list-unordered'), + 'list-ordered' => icon('list-ordered'), + 'quote' => icon('quote'), + 'link' => icon('link'), + 'image-add' => icon('image-add'), + 'markdown' => icon( + 'markdown', + 'mr-1 text-lg text-gray-400' + ), + ]; + $translations = [ + 'write' => lang('Common.forms.editor.write'), + 'preview' => lang('Common.forms.editor.preview'), + 'help' => lang('Common.forms.editor.help'), + ]; + + return << +
+ + + + + +
+ {$icons['heading']} + {$icons['bold']} + {$icons['italic']} +
+
+ {$icons['list-unordered']} + {$icons['list-ordered']} +
+
+ {$icons['quote']} + {$icons['link']} + {$icons['image-add']} +
+
+
+
+ {$textarea} +
+ + + HTML; } } diff --git a/app/Views/Components/Forms/RadioButton.php b/app/Views/Components/Forms/RadioButton.php new file mode 100644 index 00000000..222afa1f --- /dev/null +++ b/app/Views/Components/Forms/RadioButton.php @@ -0,0 +1,40 @@ +isChecked = $value === 'true'; + } + + public function render(): string + { + $radioInput = form_radio( + [ + 'id' => $this->value, + 'name' => $this->name, + 'class' => 'form-radio-btn', + ], + $this->value, + old($this->name) ? old($this->name) === $this->value : $this->isChecked, + ); + + return << + {$radioInput} + + + HTML; + } +} diff --git a/app/Views/Components/Forms/Section.php b/app/Views/Components/Forms/Section.php new file mode 100644 index 00000000..38adec87 --- /dev/null +++ b/app/Views/Components/Forms/Section.php @@ -0,0 +1,25 @@ +subtitle === null ? '' : '

' . $this->subtitle . '

'; + + return << + {$this->title} + {$subtitle} +
{$this->slot}
+ + HTML; + } +} diff --git a/app/Views/Components/Forms/Select.php b/app/Views/Components/Forms/Select.php index 050c3cf3..983a6be0 100644 --- a/app/Views/Components/Forms/Select.php +++ b/app/Views/Components/Forms/Select.php @@ -4,28 +4,28 @@ declare(strict_types=1); namespace App\Views\Components\Forms; -use ViewComponents\Component; - -class MultiSelect extends Component +class Select extends FormComponent { /** * @var array */ protected array $options = []; - /** - * @var string[] - */ - protected array $selected = []; + protected string $selected; + + public function setOptions(string $value): void + { + // dd(json_decode(html_entity_decode(html_entity_decode($value)), true)); + $this->options = json_decode(html_entity_decode($value), true); + } public function render(): string { $defaultAttributes = [ - 'data-class' => $this->attributes['class'], - 'multiple' => 'multiple', + 'data-class' => 'border-3 rounded-lg ' . $this->class, ]; $extra = array_merge($defaultAttributes, $this->attributes); - return form_dropdown($this->attributes['name'], $this->options, $this->selected, $extra); + return form_dropdown($this->name, $this->options, $this->selected !== '' ? [$this->selected] : [], $extra); } } diff --git a/app/Views/Components/Heading.php b/app/Views/Components/Heading.php index 8333be2c..8cfa3792 100644 --- a/app/Views/Components/Heading.php +++ b/app/Views/Components/Heading.php @@ -4,12 +4,11 @@ declare(strict_types=1); namespace App\Views\Components; -use Exception; use ViewComponents\Component; class Heading extends Component { - protected string $level = ''; + protected string $tagName = 'div'; /** * @var "small"|"base"|"large" @@ -18,21 +17,16 @@ class Heading extends Component public function render(): string { - if ($this->level === '') { - throw new Exception('level property must be set for Heading component.'); - } - $sizeClasses = [ 'small' => 'tracking-wide text-base', 'base' => 'text-xl', 'large' => 'text-3xl', ]; - $class = 'relative z-10 font-bold text-pine-800 font-display before:w-full before:absolute before:h-1/2 before:left-0 before:bottom-0 before:rounded-full before:bg-pine-100 before:-z-10 ' . $sizeClasses[$this->size]; - $level = $this->level; + $class = $this->class . ' relative z-10 font-bold text-pine-800 font-display before:w-full before:absolute before:h-1/2 before:left-0 before:bottom-0 before:rounded-full before:bg-pine-100 before:-z-10 ' . $sizeClasses[$this->size]; return <<{$this->slot} + <{$this->tagName} class="{$class}">{$this->slot}tagName}> HTML; } } diff --git a/phpstan.neon b/phpstan.neon index 8db6aaed..88e1055a 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -33,3 +33,4 @@ parameters: paths: - app/Helpers - app/Common.php + - app/Libraries/ViewComponents/Helpers diff --git a/tailwind.config.js b/tailwind.config.js index b7cad2d8..cb142c44 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -51,6 +51,12 @@ module.exports = { zIndex: { "-10": "-10", }, + borderWidth: { + 3: "3px", + }, + ringWidth: { + 3: "3px", + }, }, }, variants: {}, diff --git a/themes/cp_admin/_layout.php b/themes/cp_admin/_layout.php index 29f81156..8da77487 100644 --- a/themes/cp_admin/_layout.php +++ b/themes/cp_admin/_layout.php @@ -79,21 +79,17 @@ ]) ?> -
-
-
-
- +
+
+
+ +
- renderSection( - 'pageTitle', - ) ?> + renderSection('pageTitle') ?> renderSection('headerLeft') ?>
+
renderSection('headerRight') ?>
-
renderSection( - 'headerRight', - ) ?>
diff --git a/themes/cp_admin/podcast/edit.php b/themes/cp_admin/podcast/edit.php index 9fc00099..717409bd 100644 --- a/themes/cp_admin/podcast/edit.php +++ b/themes/cp_admin/podcast/edit.php @@ -12,373 +12,216 @@ endSection() ?> +section('headerRight') ?> + +endSection() ?> section('content') ?> id), [ + 'id' => 'podcast-edit-form', 'method' => 'post', 'class' => 'flex flex-col', ]) ?> - + - -<?= $podcast->title ?> - 'image', - 'name' => 'image', - 'class' => 'form-input', - 'type' => 'file', - 'accept' => '.jpg,.jpeg,.png', -]) ?> + + - + - - - 'title', - 'name' => 'title', - 'class' => 'form-input mb-1', - 'value' => old('title', $podcast->title), - 'required' => 'required', -]) ?> - -link ?> - - 'mb-4', -]) ?> - - - - 'episodic', - 'name' => 'type', - 'class' => 'form-radio-btn', - ], - 'episodic', - old('type') ? old('type') === 'episodic' : $podcast->type === 'episodic', - ) ?> - - 'serial', - 'name' => 'type', - 'class' => 'form-radio-btn', - ], - 'serial', - old('type') ? old('type') === 'serial' : $podcast->type === 'serial', - ) ?> - - - -
- - description_markdown, false) ?> -
- - - - - - - -language_code)], - [ - 'id' => 'language', - 'class' => 'form-select mb-4', - 'required' => 'required', - ], - ) ?> - - -category_id)], - [ - 'id' => 'category', - 'class' => 'form-select mb-4', - 'required' => 'required', - ], - ) ?> - - - - - - 'mb-4', -]) ?> - - 'undefined', - 'name' => 'parental_advisory', - 'class' => 'form-radio-btn', - ], - 'undefined', - old('parental_advisory') - ? old('parental_advisory') === 'undefined' - : $podcast->parental_advisory === null, - ) ?> - - - 'clean', - 'name' => 'parental_advisory', - 'class' => 'form-radio-btn', - ], - 'clean', - old('parental_advisory') - ? old('parental_advisory') === 'clean' - : $podcast->parental_advisory === 'clean', - ) ?> - - - 'explicit', - 'name' => 'parental_advisory', - 'class' => 'form-radio-btn', - ], - 'explicit', - old('parental_advisory') - ? old('parental_advisory') === 'explicit' - : $podcast->parental_advisory === 'explicit', - ) ?> - - - - - - - - - - 'owner_name', - 'name' => 'owner_name', - 'class' => 'form-input mb-4', - 'value' => old('owner_name', $podcast->owner_name), - 'required' => 'required', -]) ?> - - - - 'owner_email', - 'name' => 'owner_email', - 'class' => 'form-input mb-4', - 'value' => old('owner_email', $podcast->owner_email), - 'type' => 'email', - 'required' => 'required', -]) ?> - - - - 'publisher', - 'name' => 'publisher', - 'class' => 'form-input mb-4', - 'value' => old('publisher', $podcast->publisher), -]) ?> - - - - 'copyright', - 'name' => 'copyright', - 'class' => 'form-input mb-4', - 'value' => old('copyright', $podcast->copyright), -]) ?> - - - - - - - - 'location_name', - 'name' => 'location_name', - 'class' => 'form-input mb-4', - 'value' => old('location_name', $podcast->location_name), -]) ?> - - - - - - - - 'payment_pointer', - 'name' => 'payment_pointer', - 'class' => 'form-input mb-4', - 'value' => old('payment_pointer', $podcast->payment_pointer), -]) ?> - - -
-
- - 'partner_id', - 'name' => 'partner_id', - 'class' => 'form-input w-full', - 'value' => old('partner_id', $podcast->partner_id), - ]) ?> +
+ +
+ +
-
- - 'partner_link_url', - 'name' => 'partner_link_url', - 'class' => 'form-input w-full', - 'value' => old('partner_link_url', $podcast->partner_link_url), - ]) ?> +
+ + + + + + + + + + + +
+ +
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+ + +
-
- - 'partner_image_url', - 'name' => 'partner_image_url', - 'class' => 'form-input w-full', - 'value' => old('partner_image_url', $podcast->partner_image_url), - ]) ?> +
+ +
-
- +
+
- + - -custom_rss_string, false) ?> + - + - - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/themes/cp_admin/podcast/latest_episodes.php b/themes/cp_admin/podcast/latest_episodes.php index bd4c78c5..540f9937 100644 --- a/themes/cp_admin/podcast/latest_episodes.php +++ b/themes/cp_admin/podcast/latest_episodes.php @@ -1,6 +1,6 @@
- +