File: /home/bdedition/public_html/core/resources/views/admin/news/form.blade.php
@extends('admin.layouts.app')
@section('panel')
<div class="row justify-content-center">
<div class="col-xxl-8 col-xl-12">
<div class="card">
<div class="card-body">
<form action="{{ route('admin.news.store', @$news->id) }}" method="POST" enctype="multipart/form-data" class="disableSubmission">
@csrf
<div class="row justify-content-center">
<div class="col-xl-6">
<div class="form-group">
<x-image-uploader name="image" :imagePath="getImage(getFilePath('news') . '/' . @$news->image, getFileSize('news'))" :size="getFileSize('news')" class="w-100"
id="thumbImage" :required="false" />
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="form-group position-relative">
<label>@lang('Reporter Name')</label>
<select name="staff_id" class="select2">
<option value="">@lang('Select Reporter')</option>
@foreach ($staffs as $staff)
<option value="{{ $staff->id }}" @selected(old('staff_id', @$news->user_id) == $staff->id)>
{{ $staff->firstname }} {{ $staff->lastname }} [{{ $staff->mobile }} - {{ $staff->district }} - {{ $staff->sub_district }}]</option>
@endforeach
</select>
</div>
</div>
<div class="col-lg-12">
<div class="form-group position-relative">
<label>@lang('Category')</label>
<select name="category_id" class="select2" required>
<option value="">@lang('Select One')</option>
@foreach ($categories as $category)
<option value="{{ $category->id }}" @selected(old('category_id', @$news->category_id) == $category->id)>
{{ $category->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="col-lg-12">
<div class="form-group">
<label>@lang('News Title')</label>
<input type="text" class="form-control" name="title"
value="{{ old('title', @$news->title) }}" required>
</div>
</div>
{{-- <div class="col-lg-12">
<div class="form-group">
<div class="d-flex justify-content-between align-items-center">
<label>@lang('Slug')</label>
<a href="javascript:void(0)" class="buildSlug"><i class="las la-link"></i>
@lang('Make Slug')</a>
</div>
<input type="text" class="form-control" name="slug"
value="{{ old('slug', @$news->slug) }}" required>
</div>
</div> --}}
<div class="col-sm-12">
<div class="form-group">
<label>@lang('Tags')</label>
<select name="tags[]" multiple class="select2-auto-tokenize form-control">
<option value="" disabled>@lang('Enter Keyword')</option>
@if (@$news->tags)
@foreach ($news->tags as $tag)
<option value="{{ $tag }}" selected>{{ __($tag) }}</option>
@endforeach
@endif
</select>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label>@lang('Trending')</label>
<div class="form-group">
<input type="checkbox" data-width="100%" data-size="large" data-onstyle="-success"
data-offstyle="-danger" data-bs-toggle="toggle" data-height="35"
data-on="@lang('Yes')" data-off="@lang('No')" name="trending"
@if (@$news->trending) checked @endif>
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label>@lang('Must Read')</label>
<div class="form-group">
<input type="checkbox" data-width="100%" data-size="large" data-onstyle="-success"
data-offstyle="-danger" data-bs-toggle="toggle" data-height="35"
data-on="@lang('Yes')" data-off="@lang('No')" name="must_read"
@if (@$news->must_read) checked @endif>
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label>@lang('Add Video')</label>
<div class="form-group">
<input type="checkbox" data-width="100%" data-size="large" data-onstyle="-success"
data-offstyle="-danger" data-bs-toggle="toggle" data-height="35"
data-on="@lang('Yes')" data-off="@lang('No')" name="have_video"
@if (@$news->have_video) checked @endif>
</div>
</div>
</div>
<div class="hideInput"></div>
<div class="col-lg-12">
<div class="form-group">
<label>@lang('Short Description')</label>
<textarea name="short_description" rows="5" class="form-control" required>{{ old('short_description', @$news->short_description) }}</textarea>
</div>
</div>
<div class="col-sm-12">
<div class="form-group">
<label>@lang('Description')</label>
<textarea rows="10" class="form-control nicEdit" name="description">{{ old('description', @$news->description) }}</textarea>
</div>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn--primary w-100 h-45">@lang('Submit')</button>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('breadcrumb-plugins')
<x-back route="{{ route('admin.news.index') }}" />
@endpush
@push('script')
<script>
$(function() {
'use strict'
let videoLink = `{{ @$news->video_link ?? '' }}`;
let videoStatus = '{{ @$news->have_video }}';
var video_input = `<div class="col-md-12">
<div class="form-group">
<label for="">@lang('Youtube Link')</label>
<input type="text" name="video_link" value="${videoLink}" class="form-control" placeholder="https://www.youtube.com/embed/g--C2srD_5I">
</div>
</div>`;
$('input[name=have_video]').on('change', function() {
if ($(this).is(':checked')) {
$('.hideInput').html(video_input);
} else {
$('.hideInput').html('');
}
})
if (videoStatus == 1) {
$('.hideInput').html(video_input);
}
$('.buildSlug').on('click', function() {
let closestForm = $(this).closest('form');
let title = closestForm.find('[name=title]').val();
// Generate a proper Unicode slug
let slug = generateSlug(title);
closestForm.find('[name=slug]').val(slug);
closestForm.find('[name=slug]').trigger('input');
});
$('[name=slug]').on('input', function() {
let closestForm = $(this).closest('form');
closestForm.find('[type=submit]').addClass('disabled');
let slug = $(this).val();
// Generate and sanitize the slug
slug = generateSlug(slug);
$(this).val(slug);
let id = `{{ @$news->id }}`;
if (slug) {
$('.slug-verification').removeClass('d-none');
$('.slug-verification').html(`
<small class="text--info"><i class="las la-spinner la-spin"></i> @lang('Checking')</small>
`);
// Perform slug verification
$.get("{{ route('admin.news.slug.check') }}", { slug: slug, id: id }, function(response) {
if (!response.exists) {
$('.slug-verification').html(`
<small class="text--success"><i class="las la-check"></i> @lang('Available')</small>
`);
closestForm.find('[type=submit]').removeClass('disabled');
} else {
$('.slug-verification').html(`
<small class="text--danger"><i class="las la-times"></i> @lang('Slug already exists')</small>
`);
}
});
} else {
$('.slug-verification').addClass('d-none');
}
});
// Function to generate a proper Unicode-friendly slug
function generateSlug(input) {
return input
.toString()
.toLowerCase() // Convert to lowercase
.trim() // Remove leading/trailing spaces
.replace(/[\s]+/g, '-') // Replace spaces with dashes
}
})
</script>
@endpush
@push('style')
<style>
.image-uploader {
border: 2px dashed #c8c8c8;
}
</style>
@endpush