mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-07-28 17:02:04 +03:00
Converted image-manager to be component/HTML based
Instead of vue based.
This commit is contained in:
60
resources/views/components/image-manager-form.blade.php
Normal file
60
resources/views/components/image-manager-form.blade.php
Normal file
@ -0,0 +1,60 @@
|
||||
<div class="image-manager-details">
|
||||
|
||||
<form component="ajax-form"
|
||||
option:ajax-form:success-message="{{ trans('components.image_update_success') }}"
|
||||
option:ajax-form:method="put"
|
||||
option:ajax-form:response-container=".image-manager-details"
|
||||
option:ajax-form:url="{{ url('images/' . $image->id) }}">
|
||||
|
||||
<div class="image-manager-viewer">
|
||||
<a href="{{ $image->url }}" target="_blank" class="block">
|
||||
<img src="{{ $image->thumbs['display'] }}"
|
||||
alt="{{ $image->name }}"
|
||||
class="anim fadeIn"
|
||||
title="{{ $image->name }}">
|
||||
</a>
|
||||
</div>
|
||||
<div class="form-group stretch-inputs">
|
||||
<label for="name">{{ trans('components.image_image_name') }}</label>
|
||||
<input id="name" class="input-base" type="text" name="name" value="{{ $image->name }}">
|
||||
</div>
|
||||
<div class="grid half">
|
||||
<div>
|
||||
<button type="button"
|
||||
id="image-manager-delete"
|
||||
title="{{ trans('common.delete') }}"
|
||||
class="button icon outline">@icon('delete')</button>
|
||||
</div>
|
||||
<div class="text-right">
|
||||
<button type="submit"
|
||||
class="button icon outline">{{ trans('common.save') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@if(!is_null($dependantPages))
|
||||
@if(count($dependantPages) > 0)
|
||||
<p class="text-neg mb-xs mt-m">{{ trans('components.image_delete_used') }}</p>
|
||||
<ul class="text-neg">
|
||||
@foreach($dependantPages as $page)
|
||||
<li>
|
||||
<a href="{{ $page->url }}"
|
||||
target="_blank"
|
||||
class="text-neg">{{ $page->name }}</a>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
@endif
|
||||
<p class="text-neg mb-xs">{{ trans('components.image_delete_confirm_text') }}</p>
|
||||
<form component="ajax-form"
|
||||
option:ajax-form:success-message="{{ trans('components.image_delete_success') }}"
|
||||
option:ajax-form:method="delete"
|
||||
option:ajax-form:response-container=".image-manager-details"
|
||||
option:ajax-form:url="{{ url('images/' . $image->id) }}">
|
||||
<button type="submit" class="button neg">
|
||||
{{ trans('common.delete_confirm') }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
|
||||
</div>
|
23
resources/views/components/image-manager-list.blade.php
Normal file
23
resources/views/components/image-manager-list.blade.php
Normal file
@ -0,0 +1,23 @@
|
||||
@foreach($images as $index => $image)
|
||||
<div>
|
||||
<div component="event-emit-select"
|
||||
option:event-emit-select:name="image"
|
||||
option:event-emit-select:data="{{ json_encode($image) }}"
|
||||
class="image anim fadeIn text-primary"
|
||||
style="animation-delay: {{ $index > 26 ? '160ms' : ($index * 25) . 'ms' }};">
|
||||
<img src="{{ $image->thumbs['gallery'] }}"
|
||||
alt="{{ $image->name }}"
|
||||
width="150"
|
||||
height="150"
|
||||
loading="lazy"
|
||||
title="{{ $image->name }}">
|
||||
<div class="image-meta">
|
||||
<span class="name">{{ $image->name }}</span>
|
||||
<span class="date">{{ trans('components.image_uploaded', ['uploadedDate' => $image->created_at->format('Y-m-d H:i:s')]) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@if($hasMore)
|
||||
<div class="load-more">{{ trans('components.image_load_more') }}</div>
|
||||
@endif
|
@ -1,101 +1,62 @@
|
||||
<div id="image-manager" image-type="{{ $imageType }}" uploaded-to="{{ $uploaded_to ?? 0 }}">
|
||||
<div component="image-manager"
|
||||
option:image-manager:uploaded-to="{{ $uploaded_to ?? 0 }}"
|
||||
class="image-manager">
|
||||
|
||||
@exposeTranslations([
|
||||
'components.image_delete_success',
|
||||
'components.image_upload_success',
|
||||
'errors.server_upload_limit',
|
||||
'components.image_upload_remove',
|
||||
'components.file_upload_timeout',
|
||||
])
|
||||
|
||||
<div component="popup" class="popup-background" v-cloak @click="hide">
|
||||
<div class="popup-body" tabindex="-1" @click.stop>
|
||||
<div component="popup"
|
||||
refs="image-manager@popup"
|
||||
class="popup-background">
|
||||
<div class="popup-body" tabindex="-1">
|
||||
|
||||
<div class="popup-header primary-background">
|
||||
<div class="popup-title">{{ trans('components.image_select') }}</div>
|
||||
<button class="popup-header-close" @click="hide()">x</button>
|
||||
<button refs="popup@hide" type="button" class="popup-header-close">x</button>
|
||||
</div>
|
||||
|
||||
<div class="flex-fill image-manager-body">
|
||||
|
||||
<div class="image-manager-content">
|
||||
<div v-if="imageType === 'gallery' || imageType === 'drawio'" class="image-manager-header primary-background-light nav-tabs grid third">
|
||||
<div class="tab-item" title="{{ trans('components.image_all_title') }}" :class="{selected: !filter}" @click="setFilterType(null)">@icon('images') {{ trans('components.image_all') }}</div>
|
||||
<div class="tab-item" title="{{ trans('components.image_book_title') }}" :class="{selected: (filter=='book')}" @click="setFilterType('book')">@icon('book', ['class' => 'text-book svg-icon']) {{ trans('entities.book') }}</div>
|
||||
<div class="tab-item" title="{{ trans('components.image_page_title') }}" :class="{selected: (filter=='page')}" @click="setFilterType('page')">@icon('page', ['class' => 'text-page svg-icon']) {{ trans('entities.page') }}</div>
|
||||
<div class="image-manager-header primary-background-light nav-tabs grid third no-gap">
|
||||
<button refs="image-manager@filterTabs"
|
||||
data-filter="all"
|
||||
type="button" class="tab-item selected" title="{{ trans('components.image_all_title') }}">@icon('images') {{ trans('components.image_all') }}</button>
|
||||
<button refs="image-manager@filterTabs"
|
||||
data-filter="book"
|
||||
type="button" class="tab-item" title="{{ trans('components.image_book_title') }}">@icon('book', ['class' => 'text-book svg-icon']) {{ trans('entities.book') }}</button>
|
||||
<button refs="image-manager@filterTabs"
|
||||
data-filter="page"
|
||||
type="button" class="tab-item" title="{{ trans('components.image_page_title') }}">@icon('page', ['class' => 'text-page svg-icon']) {{ trans('entities.page') }}</button>
|
||||
</div>
|
||||
<div>
|
||||
<form @submit.prevent="searchImages" class="contained-search-box">
|
||||
<input placeholder="{{ trans('components.image_search_hint') }}" v-model="searchTerm" type="text">
|
||||
<button :class="{active: searching}" title="{{ trans('common.search_clear') }}" type="button" @click="cancelSearch()" class="text-button cancel">@icon('close')</button>
|
||||
<button title="{{ trans('common.search') }}" class="text-button">@icon('search')</button>
|
||||
<form refs="image-manager@searchForm" class="contained-search-box">
|
||||
<input refs="image-manager@searchInput"
|
||||
placeholder="{{ trans('components.image_search_hint') }}"
|
||||
type="text">
|
||||
<button refs="image-manager@cancelSearch"
|
||||
title="{{ trans('common.search_clear') }}"
|
||||
type="button"
|
||||
class="cancel">@icon('close')</button>
|
||||
<button type="submit" class="primary-background text-white"
|
||||
title="{{ trans('common.search') }}">@icon('search')</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="image-manager-list">
|
||||
<div v-if="images.length > 0" v-for="(image, idx) in images">
|
||||
<div class="image anim fadeIn" :style="{animationDelay: (idx > 26) ? '160ms' : ((idx * 25) + 'ms')}"
|
||||
:class="{selected: (image==selectedImage)}" @click="imageSelect(image)">
|
||||
<img :src="image.thumbs.gallery" :alt="image.title" :title="image.name">
|
||||
<div class="image-meta">
|
||||
<span class="name" v-text="image.name"></span>
|
||||
<span class="date">{{ trans('components.image_uploaded', ['uploadedDate' => "{{ getDate(image.created_at) }" . "}"]) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="load-more" v-show="hasMore" @click="fetchData">{{ trans('components.image_load_more') }}</div>
|
||||
</div>
|
||||
<div refs="image-manager@listContainer" class="image-manager-list"></div>
|
||||
</div>
|
||||
|
||||
<div class="image-manager-sidebar">
|
||||
|
||||
<dropzone v-if="imageType !== 'drawio'" ref="dropzone" placeholder="{{ trans('components.image_dropzone') }}" :upload-url="uploadUrl" :uploaded-to="uploadedTo" @success="uploadSuccess"></dropzone>
|
||||
|
||||
<div class="inner">
|
||||
|
||||
<div class="image-manager-details anim fadeIn" v-if="selectedImage">
|
||||
|
||||
<form @submit.prevent="saveImageDetails">
|
||||
<div class="image-manager-viewer">
|
||||
<a :href="selectedImage.url" target="_blank" style="display: block;">
|
||||
<img :src="selectedImage.thumbs.display" :alt="selectedImage.name"
|
||||
:title="selectedImage.name">
|
||||
</a>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="name">{{ trans('components.image_image_name') }}</label>
|
||||
<input id="name" class="input-base" name="name" v-model="selectedImage.name">
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="clearfix">
|
||||
<div class="float left">
|
||||
<button type="button" class="button icon outline" @click="deleteImage">@icon('delete')</button>
|
||||
|
||||
</div>
|
||||
<button class="button anim fadeIn float right" v-show="selectedImage" @click="callbackAndHide(selectedImage)">
|
||||
{{ trans('components.image_select_image') }}
|
||||
</button>
|
||||
<div class="clearfix"></div>
|
||||
<div v-show="dependantPages">
|
||||
<p class="text-neg text-small">
|
||||
{{ trans('components.image_delete_used') }}
|
||||
</p>
|
||||
<ul class="text-neg">
|
||||
<li v-for="page in dependantPages">
|
||||
<a :href="page.url" target="_blank" class="text-neg" v-text="page.name"></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div v-show="deleteConfirm" class="text-neg text-small">
|
||||
{{ trans('components.image_delete_confirm') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="image-manager-sidebar flex-container-column">
|
||||
|
||||
<div refs="image-manager@dropzoneContainer">
|
||||
@include('components.dropzone', [
|
||||
'placeholder' => trans('components.image_dropzone'),
|
||||
'successMessage' => trans('components.image_upload_success'),
|
||||
'url' => url('/images/gallery?' . http_build_query(['uploaded_to' => $uploaded_to ?? 0]))
|
||||
])
|
||||
</div>
|
||||
|
||||
<div refs="image-manager@formContainer" class="inner flex"></div>
|
||||
|
||||
<button refs="image-manager@selectButton" type="button" class="hidden button corner-button">
|
||||
{{ trans('components.image_select_image') }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user