mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-11 06:46:47 +00:00
proximity search for book cases
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
<div class="flex flex-col space-y-1">
|
||||
@auth
|
||||
@if($row->orange_pilled)
|
||||
@if($row->orange_pills_count > 0)
|
||||
<img class="aspect-auto max-h-12" src="{{ asset('img/social_credit_plus.webp') }}" alt="">
|
||||
@endif
|
||||
@if(!$row->orange_pilled)
|
||||
@if($row->orange_pills_count < 1)
|
||||
<img class="aspect-auto max-h-12" src="{{ asset('img/social_credit_minus.webp') }}" alt="">
|
||||
@endif
|
||||
<div class="flex items-center space-x-1">
|
||||
<x-button wire:click="viewHistoryModal({{ $row->id }})">💊 Orange Pill Now</x-button>
|
||||
<x-button :href="route('comment.bookcase', ['bookCase' => $row->id])">Kommentare</x-button>
|
||||
<x-button primary class="text-21gray" wire:click="viewHistoryModal({{ $row->id }})">💊 Orange Pill Now</x-button>
|
||||
<x-button :href="route('comment.bookcase', ['bookCase' => $row->id])">Details</x-button>
|
||||
</div>
|
||||
@else
|
||||
<div>
|
||||
|
||||
@@ -1 +1,14 @@
|
||||
<x-button amber wire:click="proximitySearch({{ $row->id }})">Umkreis-Suche {{ $row->name }} (100km)</x-button>
|
||||
<div class="flex flex-col space-y-1">
|
||||
<div>
|
||||
<x-button amber wire:click="proximitySearch({{ $row->id }})" class="text-21gray">
|
||||
<i class="fa fa-thin fa-person-chalkboard mr-2"></i>
|
||||
Umkreis-Suche Kurs-Termin {{ $row->name }}(100km)
|
||||
</x-button>
|
||||
</div>
|
||||
<div>
|
||||
<x-button amber wire:click="proximitySearchForBookCases({{ $row->id }})" class="text-21gray">
|
||||
<i class="fa fa-thin fa-book mr-2"></i>
|
||||
Umkreis-Suche Bücher-Schrank {{ $row->name }} (5km)
|
||||
</x-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
@googlefonts
|
||||
<!-- Scripts -->
|
||||
<script src="https://kit.fontawesome.com/03bc14bd1e.js" crossorigin="anonymous"></script>
|
||||
<script src="https://unpkg.com/smoothscroll-polyfill@0.4.4/dist/smoothscroll.js"></script>
|
||||
@mapscripts
|
||||
<wireui:scripts/>
|
||||
<x-comments::scripts />
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
@googlefonts
|
||||
<!-- Scripts -->
|
||||
<script src="https://kit.fontawesome.com/03bc14bd1e.js" crossorigin="anonymous"></script>
|
||||
<script src="https://unpkg.com/smoothscroll-polyfill@0.4.4/dist/smoothscroll.js"></script>
|
||||
<wireui:scripts/>
|
||||
<x-comments::scripts />
|
||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||
|
||||
@@ -74,12 +74,12 @@
|
||||
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
||||
|
||||
<div
|
||||
class="relative flex items-center space-x-3 rounded-lg border border-gray-300 bg-white px-6 py-5 shadow-sm focus-within:ring-2 focus-within:ring-indigo-500 focus-within:ring-offset-2 hover:border-gray-400">
|
||||
class="relative flex items-center space-x-3 rounded-lg border border-gray-300 bg-white px-6 py-5 shadow-sm">
|
||||
{{--<div class="flex-shrink-0">
|
||||
<img class="h-10 w-10 rounded-full" src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80" alt="">
|
||||
</div>--}}
|
||||
<div class="min-w-0 flex-1">
|
||||
<div class="focus:outline-none">
|
||||
<div class="focus:outline-none space-y-2">
|
||||
<p class="text-sm font-medium text-gray-900">Name</p>
|
||||
<p class="truncate text-sm text-gray-500">{{ $bookCase->title }}</p>
|
||||
<p class="text-sm font-medium text-gray-900">Link</p>
|
||||
@@ -89,20 +89,165 @@
|
||||
</p>
|
||||
<p class="text-sm font-medium text-gray-900">Adresse</p>
|
||||
<p class="truncate text-sm text-gray-500">{{ $bookCase->address }}</p>
|
||||
<p class="text-sm font-medium text-gray-900">Art</p>
|
||||
<p class="truncate text-sm text-gray-500">{{ $bookCase->type }}</p>
|
||||
<p class="text-sm font-medium text-gray-900">Geöffnet</p>
|
||||
<p class="truncate text-sm text-gray-500">{{ $bookCase->open }}</p>
|
||||
<p class="text-sm font-medium text-gray-900">Kontakt</p>
|
||||
<p class="truncate text-sm text-gray-500">{{ $bookCase->contact }}</p>
|
||||
<p class="text-sm font-medium text-gray-900">Information</p>
|
||||
<p class="truncate text-sm text-gray-500">{{ $bookCase->comment }}</p>
|
||||
|
||||
<p class="text-sm font-medium text-gray-900">Neues Foto hochladen</p>
|
||||
|
||||
<form wire:submit.prevent="save">
|
||||
<div class="text-sm text-gray-500">
|
||||
<input type="file" wire:model="photo">
|
||||
@error('photo') <span class="error">{{ $message }}</span> @enderror
|
||||
<x-button xs secondary type="submit">Hochladen</x-button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@if($bookCase->getMedia('images')->count() > 0)
|
||||
<div
|
||||
x-data="{
|
||||
skip: 3,
|
||||
atBeginning: false,
|
||||
atEnd: false,
|
||||
next() {
|
||||
this.to((current, offset) => current + (offset * this.skip))
|
||||
},
|
||||
prev() {
|
||||
this.to((current, offset) => current - (offset * this.skip))
|
||||
},
|
||||
to(strategy) {
|
||||
let slider = this.$refs.slider
|
||||
let current = slider.scrollLeft
|
||||
let offset = slider.firstElementChild.getBoundingClientRect().width
|
||||
slider.scrollTo({ left: strategy(current, offset), behavior: 'smooth' })
|
||||
},
|
||||
focusableWhenVisible: {
|
||||
'x-intersect:enter'() {
|
||||
this.$el.removeAttribute('tabindex')
|
||||
},
|
||||
'x-intersect:leave'() {
|
||||
this.$el.setAttribute('tabindex', '-1')
|
||||
},
|
||||
},
|
||||
disableNextAndPreviousButtons: {
|
||||
'x-intersect:enter.threshold.05'() {
|
||||
let slideEls = this.$el.parentElement.children
|
||||
|
||||
// If this is the first slide.
|
||||
if (slideEls[0] === this.$el) {
|
||||
this.atBeginning = true
|
||||
// If this is the last slide.
|
||||
} else if (slideEls[slideEls.length-1] === this.$el) {
|
||||
this.atEnd = true
|
||||
}
|
||||
},
|
||||
'x-intersect:leave.threshold.05'() {
|
||||
let slideEls = this.$el.parentElement.children
|
||||
|
||||
// If this is the first slide.
|
||||
if (slideEls[0] === this.$el) {
|
||||
this.atBeginning = false
|
||||
// If this is the last slide.
|
||||
} else if (slideEls[slideEls.length-1] === this.$el) {
|
||||
this.atEnd = false
|
||||
}
|
||||
},
|
||||
},
|
||||
}"
|
||||
class="flex w-full flex-col"
|
||||
>
|
||||
<div
|
||||
x-on:keydown.right="next"
|
||||
x-on:keydown.left="prev"
|
||||
tabindex="0"
|
||||
role="region"
|
||||
aria-labelledby="carousel-label"
|
||||
class="flex space-x-6"
|
||||
>
|
||||
<h2 id="carousel-label" class="sr-only" hidden>Carousel</h2>
|
||||
|
||||
<!-- Prev Button -->
|
||||
<button
|
||||
x-on:click="prev"
|
||||
class="text-6xl"
|
||||
:aria-disabled="atBeginning"
|
||||
:tabindex="atEnd ? -1 : 0"
|
||||
:class="{ 'opacity-50 cursor-not-allowed': atBeginning }"
|
||||
>
|
||||
<span aria-hidden="true">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-gray-600"
|
||||
fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="3"><path
|
||||
stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/></svg>
|
||||
</span>
|
||||
<span class="sr-only">Skip to previous slide page</span>
|
||||
</button>
|
||||
|
||||
<span id="carousel-content-label" class="sr-only" hidden>Carousel</span>
|
||||
|
||||
<ul
|
||||
x-ref="slider"
|
||||
tabindex="0"
|
||||
role="listbox"
|
||||
aria-labelledby="carousel-content-label"
|
||||
class="flex w-full snap-x snap-mandatory overflow-x-scroll"
|
||||
>
|
||||
|
||||
@foreach($bookCase->getMedia('images') as $image)
|
||||
<li x-bind="disableNextAndPreviousButtons"
|
||||
class="flex w-1/3 shrink-0 snap-start flex-col items-center justify-center p-2"
|
||||
role="option">
|
||||
<a href="{{ $image->getUrl() }}" target="_blank">
|
||||
<img class="mt-2 w-full" src="{{ $image->getUrl() }}"
|
||||
alt="placeholder image">
|
||||
</a>
|
||||
|
||||
<button x-bind="focusableWhenVisible" class="px-4 py-2 text-sm">
|
||||
#{{ $loop->iteration }} Bild
|
||||
</button>
|
||||
</li>
|
||||
@endforeach
|
||||
|
||||
</ul>
|
||||
|
||||
<!-- Next Button -->
|
||||
<button
|
||||
x-on:click="next"
|
||||
class="text-6xl"
|
||||
:aria-disabled="atEnd"
|
||||
:tabindex="atEnd ? -1 : 0"
|
||||
:class="{ 'opacity-50 cursor-not-allowed': atEnd }"
|
||||
>
|
||||
<span aria-hidden="true">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-gray-600"
|
||||
fill="none" viewBox="0 0 24 24" stroke="currentColor"
|
||||
stroke-width="3"><path stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M9 5l7 7-7 7"/></svg>
|
||||
</span>
|
||||
<span class="sr-only">Skip to next slide page</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rounded">
|
||||
<div class="rounded" wire:ignore>
|
||||
@map([
|
||||
'lat' => $bookCase->lat,
|
||||
'lng' => $bookCase->lon,
|
||||
'lat' => $bookCase->latitude,
|
||||
'lng' => $bookCase->longitude,
|
||||
'zoom' => 24,
|
||||
'markers' => [
|
||||
[
|
||||
'title' => $bookCase->title,
|
||||
'lat' => $bookCase->lat,
|
||||
'lng' => $bookCase->lon,
|
||||
'lat' => $bookCase->latitude,
|
||||
'lng' => $bookCase->longitude,
|
||||
'url' => 'https://gonoware.com',
|
||||
'icon' => asset('img/btc-logo-6219386_1280.png'),
|
||||
'icon_size' => [42, 42],
|
||||
|
||||
@@ -1,15 +1,4 @@
|
||||
<div class="bg-21gray flex flex-col h-screen justify-between">
|
||||
<script src="{{ asset('earth/miniature.earth.js') }}"></script>
|
||||
<style>
|
||||
.earth-container::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: 22%;
|
||||
bottom: 4%;
|
||||
left: 13%;
|
||||
right: 13%;
|
||||
}
|
||||
</style>
|
||||
{{-- HEADER --}}
|
||||
<div>
|
||||
<section class="w-full">
|
||||
@@ -58,7 +47,7 @@
|
||||
</div>
|
||||
@endauth
|
||||
</div>
|
||||
<div class="flex lg:flex-row flex-col pt-4 md:pt-4 lg:pt-4">
|
||||
<div class="flex lg:flex-row flex-col pt-4 md:pt-4 lg:pt-4 mt-12">
|
||||
<div
|
||||
class="w-full lg:w-1/2 flex lg:px-0 px-5 flex-col md:items-center lg:items-start justify-center -mt-12">
|
||||
|
||||
@@ -75,41 +64,6 @@
|
||||
</a>
|
||||
<p class="text-gray-400 font-normal mt-4">{{-- TEXT --}}</p>
|
||||
</div>
|
||||
<div
|
||||
x-data="{
|
||||
earth: null,
|
||||
init() {
|
||||
this.earth = new Earth(this.$refs.myearth, {
|
||||
location : {lat: {{ $bookCases->first()->lat }}, lng: {{ $bookCases->first()->lon }}},
|
||||
zoom: 1,
|
||||
light: 'sun',
|
||||
polarLimit: 0.6,
|
||||
|
||||
transparent : true,
|
||||
mapSeaColor : 'RGBA(34, 34, 34,0.76)',
|
||||
mapLandColor : '#F7931A',
|
||||
mapBorderColor : '#5D5D5D',
|
||||
mapBorderWidth : 0.25,
|
||||
mapHitTest : true,
|
||||
|
||||
autoRotate: true,
|
||||
autoRotateSpeed: 0.7,
|
||||
autoRotateDelay: 500,
|
||||
});
|
||||
this.earth.addEventListener('ready', function() {
|
||||
@foreach($bookCases as $city)
|
||||
this.addMarker( {
|
||||
mesh : ['Needle'],
|
||||
location : { lat: {{ $city->lat }}, lng: {{ $city->lon }} },
|
||||
});
|
||||
@endforeach
|
||||
});
|
||||
}
|
||||
}" class="hidden sm:inline-block w-1/2">
|
||||
{{--<img src="https://cdn.devdojo.com/images/march2022/mesh-gradient1.png"
|
||||
class="absolute lg:max-w-none max-w-3xl mx-auto mt-32 w-full h-full inset-0">--}}
|
||||
<div x-ref="myearth" class="earth-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -6,7 +6,27 @@
|
||||
</x-slot>
|
||||
|
||||
<x-slot name="content">
|
||||
<div class="space-y-4 mt-16 flex flex-col justify-center">
|
||||
<div class="space-y-4 mt-16 flex flex-col justify-center min-h-[600px]">
|
||||
|
||||
<div class="my-4">
|
||||
<div class="border-b border-gray-200 pb-5">
|
||||
<h3 class="text-lg font-medium leading-6 text-gray-200">Bisher waren hier</h3>
|
||||
</div>
|
||||
<ul role="list" class="divide-y divide-gray-200">
|
||||
@foreach($currentModal?->orangePills ?? [] as $orangePill)
|
||||
<li class="flex py-4">
|
||||
<img class="h-10 w-10 rounded-full" src="{{ $orangePill->user->profile_photo_url }}" alt="">
|
||||
<div class="ml-3">
|
||||
<p class="text-sm text-gray-200">
|
||||
{{ $orangePill->user->name }} hat am {{ $orangePill->date->asDateTime() }} {{ $orangePill->amount }} Bitcoin-Bücher hinzugefügt
|
||||
</p>
|
||||
</div>
|
||||
</li>
|
||||
@endforeach
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-span-6 sm:col-span-4">
|
||||
<x-input
|
||||
min="1"
|
||||
@@ -36,6 +56,9 @@
|
||||
|
||||
<x-slot name="footer">
|
||||
<x-jet-secondary-button wire:click="resetModal" wire:loading.attr="disabled">
|
||||
@lang('Close')
|
||||
</x-jet-secondary-button>
|
||||
<x-jet-secondary-button wire:click="submit" wire:loading.attr="disabled">
|
||||
💊 @lang('Orange Pill Now')
|
||||
</x-jet-secondary-button>
|
||||
</x-slot>
|
||||
|
||||
Reference in New Issue
Block a user