From 57f51e4e43b18b3bbfa38cba7737988b6de5f9eb Mon Sep 17 00:00:00 2001 From: Wisp X Date: Fri, 11 Feb 2022 15:50:48 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E7=94=BB=E5=BB=8A=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Common/GalleryController.php | 22 +++++++ app/Http/Controllers/User/UserController.php | 10 ---- public/css/app.css | 52 +++++++++++++++++ public/css/gallery.css | 51 +++++++++++++++++ .../js/imagesloaded/imagesloaded.pkgd.min.js | 7 +++ public/js/masonry/masonry.pkgd.min.js | 9 +++ resources/css/gallery.less | 57 +++++++++++++++++-- resources/views/common/gallery.blade.php | 53 +++++++++++++++++ resources/views/user/gallery.blade.php | 47 --------------- routes/web.php | 3 +- 10 files changed, 247 insertions(+), 64 deletions(-) create mode 100644 app/Http/Controllers/Common/GalleryController.php create mode 100644 public/css/gallery.css create mode 100644 public/js/imagesloaded/imagesloaded.pkgd.min.js create mode 100644 public/js/masonry/masonry.pkgd.min.js create mode 100644 resources/views/common/gallery.blade.php delete mode 100644 resources/views/user/gallery.blade.php diff --git a/app/Http/Controllers/Common/GalleryController.php b/app/Http/Controllers/Common/GalleryController.php new file mode 100644 index 00000000..bea68947 --- /dev/null +++ b/app/Http/Controllers/Common/GalleryController.php @@ -0,0 +1,22 @@ +with('user') + ->where('is_unhealthy', false) + ->where('permission', ImagePermission::Public) + ->latest() + ->simplePaginate(40); + return view('common.gallery', compact('images')); + } +} diff --git a/app/Http/Controllers/User/UserController.php b/app/Http/Controllers/User/UserController.php index 40d33739..fb1a0398 100644 --- a/app/Http/Controllers/User/UserController.php +++ b/app/Http/Controllers/User/UserController.php @@ -36,16 +36,6 @@ class UserController extends Controller return view('user.settings'); } - public function gallery(): View - { - return view('user.gallery'); - } - - public function works(): Response - { - return $this->success(); - } - public function update(UserSettingRequest $request): Response { /** @var User $user */ diff --git a/public/css/app.css b/public/css/app.css index 89c1deab..7cda1cd4 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -709,6 +709,12 @@ select { .z-\[1\] { z-index: 1; } +.z-\[11\] { + z-index: 11; +} +.z-\[10\] { + z-index: 10; +} .col-span-6 { grid-column: span 6 / span 6; } @@ -931,6 +937,12 @@ select { .w-4 { width: 1rem; } +.w-1\/6 { + width: 16.666667%; +} +.w-\[33\.333\%\] { + width: 33.333%; +} .min-w-full { min-width: 100%; } @@ -1037,6 +1049,12 @@ select { .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } +.grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); +} +.grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} .flex-row { flex-direction: row; } @@ -1073,6 +1091,9 @@ select { .gap-6 { gap: 1.5rem; } +.gap-4 { + gap: 1rem; +} .space-y-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); @@ -1182,6 +1203,9 @@ select { .rounded { border-radius: 0.25rem; } +.rounded-sm { + border-radius: 0.125rem; +} .rounded-l-md { border-top-left-radius: 0.375rem; border-bottom-left-radius: 0.375rem; @@ -1423,6 +1447,18 @@ select { padding-top: 3.5rem; padding-bottom: 3.5rem; } +.px-0 { + padding-left: 0px; + padding-right: 0px; +} +.py-0 { + padding-top: 0px; + padding-bottom: 0px; +} +.px-1 { + padding-left: 0.25rem; + padding-right: 0.25rem; +} .pb-6 { padding-bottom: 1.5rem; } @@ -2049,6 +2085,10 @@ select { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .md\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + .md\:flex-row { flex-direction: row; } @@ -2102,6 +2142,10 @@ select { display: none; } + .lg\:grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); + } + .lg\:px-10 { padding-left: 2.5rem; padding-right: 2.5rem; @@ -2122,6 +2166,10 @@ select { grid-template-columns: repeat(4, minmax(0, 1fr)); } + .xl\:grid-cols-8 { + grid-template-columns: repeat(8, minmax(0, 1fr)); + } + .xl\:gap-x-8 { -moz-column-gap: 2rem; column-gap: 2rem; @@ -2138,6 +2186,10 @@ select { } @media (min-width: 1536px) { + .\32xl\:grid-cols-10 { + grid-template-columns: repeat(10, minmax(0, 1fr)); + } + .\32xl\:px-60 { padding-left: 15rem; padding-right: 15rem; diff --git a/public/css/gallery.css b/public/css/gallery.css new file mode 100644 index 00000000..7237b001 --- /dev/null +++ b/public/css/gallery.css @@ -0,0 +1,51 @@ +.images-grid { + margin: 0 auto; +} +.images-grid:after { + content: ''; + display: block; + clear: both; +} +.grid-sizer, +.grid-item { + width: calc(50% - 10px); +} +.grid-item { + float: left; + transition: all 0.3s; +} +.grid-item:hover { + margin-top: -5px; + box-shadow: 15.8px 21.3px 83.8px rgba(0, 0, 0, 0.07), 102px 137px 196px rgba(0, 0, 0, 0.035); +} +@media screen and (min-width: 640px) { + .grid-sizer, + .grid-item { + width: calc(33.333% - 11px); + } +} +@media screen and (min-width: 768px) { + .grid-sizer, + .grid-item { + width: calc(25% - 11px); + } +} +@media screen and (min-width: 1024px) { + .grid-sizer, + .grid-item { + width: calc(20% - 11px); + } +} +@media screen and (min-width: 1280px) { + .grid-sizer, + .grid-item { + width: calc(12.5% - 11px); + } +} +@media screen and (min-width: 1536px) { + .grid-sizer, + .grid-item { + width: calc(10% - 11px); + } +} + diff --git a/public/js/imagesloaded/imagesloaded.pkgd.min.js b/public/js/imagesloaded/imagesloaded.pkgd.min.js new file mode 100644 index 00000000..e443a77d --- /dev/null +++ b/public/js/imagesloaded/imagesloaded.pkgd.min.js @@ -0,0 +1,7 @@ +/*! + * imagesLoaded PACKAGED v4.1.4 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0,this}},t.off=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){var n=i.indexOf(t);return n!=-1&&i.splice(n,1),this}},t.emitEvent=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){i=i.slice(0),t=t||[];for(var n=this._onceEvents&&this._onceEvents[e],o=0;oe;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s=200==Math.round(t(o.width)),r.isBoxSizeOuter=s,i.removeChild(e)}}function r(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var r=n(e);if("none"==r.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==r.boxSizing,l=0;u>l;l++){var c=h[l],f=r[c],m=parseFloat(f);a[c]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,g=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,z=a.borderTopWidth+a.borderBottomWidth,E=d&&s,b=t(r.width);b!==!1&&(a.width=b+(E?0:p+_));var x=t(r.height);return x!==!1&&(a.height=x+(E?0:g+z)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(g+z),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var s,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,d=!1;return r}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=window.Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;is?"round":"floor";r=Math[a](r),this.cols=Math.max(r,1)},n.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},n._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this.options.horizontalOrder?"_getHorizontalColPosition":"_getTopColPosition",r=this[o](n,t),s={x:this.columnWidth*r.col,y:r.y},a=r.y+t.size.outerHeight,h=n+r.col,u=r.col;h>u;u++)this.colYs[u]=a;return s},n._getTopColPosition=function(t){var e=this._getTopColGroup(t),i=Math.min.apply(Math,e);return{col:e.indexOf(i),y:i}},n._getTopColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++)e[n]=this._getColGroupY(n,t);return e},n._getColGroupY=function(t,e){if(2>e)return this.colYs[t];var i=this.colYs.slice(t,t+e);return Math.max.apply(Math,i)},n._getHorizontalColPosition=function(t,e){var i=this.horizontalColIndex%this.cols,n=t>1&&i+t>this.cols;i=n?0:i;var o=e.size.outerWidth&&e.size.outerHeight;return this.horizontalColIndex=o?i+t:this.horizontalColIndex,{col:i,y:this._getColGroupY(i,t)}},n._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),r=o?n.left:n.right,s=r+i.outerWidth,a=Math.floor(r/this.columnWidth);a=Math.max(0,a);var h=Math.floor(s/this.columnWidth);h-=s%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var u=this._getOption("originTop"),d=(u?n.top:n.bottom)+i.outerHeight,l=a;h>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},n._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},n._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},n.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i}); \ No newline at end of file diff --git a/resources/css/gallery.less b/resources/css/gallery.less index fa5930f3..57912042 100644 --- a/resources/css/gallery.less +++ b/resources/css/gallery.less @@ -1,9 +1,54 @@ .images-grid { - .grid-item { - transition: all .3s; - &:hover { - margin-top: -5px; - box-shadow: 15.8px 21.3px 83.8px rgba(0, 0, 0, 0.07), 102px 137px 196px rgba(0, 0, 0, 0.035); - } + margin: 0 auto; +} + +.images-grid:after { + content: ''; + display: block; + clear: both; +} + +.grid-sizer, .grid-item { + width: calc(50% - 10px); +} + +.grid-item { + float: left; + transition: all .3s; + + &:hover { + margin-top: -5px; + box-shadow: 15.8px 21.3px 83.8px rgba(0, 0, 0, 0.07), 102px 137px 196px rgba(0, 0, 0, 0.035); } } + +@media screen and (min-width: 640px) { + .grid-sizer, .grid-item { + width: calc(33.333% - 11px); + } +} + +@media screen and (min-width: 768px) { + .grid-sizer, .grid-item { + width: calc(25% - 11px); + } +} + +@media screen and (min-width: 1024px) { + .grid-sizer, .grid-item { + width: calc(20% - 11px); + } +} + +@media screen and (min-width: 1280px) { + .grid-sizer, .grid-item { + width: calc(12.5% - 11px); + } +} + +@media screen and (min-width: 1536px) { + .grid-sizer, .grid-item { + width: calc(10% - 11px); + } +} + diff --git a/resources/views/common/gallery.blade.php b/resources/views/common/gallery.blade.php new file mode 100644 index 00000000..1f2e90b1 --- /dev/null +++ b/resources/views/common/gallery.blade.php @@ -0,0 +1,53 @@ +@section('title', '画廊') + +@push('styles') + +@endpush + + +
+ @if($images->isNotEmpty()) +
+
+ @foreach($images as $image) +
+ @if($image->extension === 'gif') + Gif + @endif + +
+ +
+
+ + +

{{ $image->user->name }}

+
+
+ @endforeach +
+ {{ $images->links() }} + @else + + @endif +
+@push('scripts') + + + + @endpush +
diff --git a/resources/views/user/gallery.blade.php b/resources/views/user/gallery.blade.php deleted file mode 100644 index 2c1f2c2c..00000000 --- a/resources/views/user/gallery.blade.php +++ /dev/null @@ -1,47 +0,0 @@ -@section('title', '画廊') - -@push('styles') - -@endpush - - -
-
-

2022 年 1 月

-
- @foreach(\App\Models\Image::all() as $image) - - @endforeach -
-
-
- - @push('scripts') - - - - @endpush -
diff --git a/routes/web.php b/routes/web.php index 62a39c1f..885974be 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,6 +16,7 @@ use App\Http\Controllers\Controller; use App\Http\Controllers\User\UserController; use App\Http\Controllers\User\ImageController; use App\Http\Controllers\User\AlbumController; +use App\Http\Controllers\Common\GalleryController; use App\Http\Controllers\Admin\GroupController as AdminGroupController; use App\Http\Controllers\Admin\StrategyController as AdminStrategyController; @@ -25,7 +26,7 @@ Route::get('/', fn () => view('welcome'))->name('/'); Route::post('upload', [Controller::class, 'upload']); Route::group(['middleware' => ['auth']], function () { Route::get('dashboard', [UserController::class, 'dashboard'])->name('dashboard'); - Route::get('gallery', [UserController::class, 'gallery'])->name('gallery'); + Route::get('gallery', [GalleryController::class, 'index'])->name('gallery'); Route::get('settings', [UserController::class, 'settings'])->name('settings'); Route::put('settings', [UserController::class, 'update'])->name('settings.update');