mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-30 14:57:59 +01:00
gallery show page
This commit is contained in:
parent
dfe1e3b57e
commit
c918e4f7ab
6 changed files with 90 additions and 3 deletions
|
@ -29,7 +29,7 @@ defmodule Philomena.Galleries.Gallery do
|
||||||
def changeset(gallery, attrs) do
|
def changeset(gallery, attrs) do
|
||||||
gallery
|
gallery
|
||||||
|> cast(attrs, [:thumbnail_id, :title, :spoiler_warning, :description, :order_position_asc])
|
|> cast(attrs, [:thumbnail_id, :title, :spoiler_warning, :description, :order_position_asc])
|
||||||
|> validate_required([:title])
|
|> validate_required([:title, :thumbnail_id])
|
||||||
|> validate_length(:title, max: 100, count: :bytes)
|
|> validate_length(:title, max: 100, count: :bytes)
|
||||||
|> validate_length(:spoiler_warning, max: 20, count: :bytes)
|
|> validate_length(:spoiler_warning, max: 20, count: :bytes)
|
||||||
|> validate_length(:description, max: 10_000, count: :bytes)
|
|> validate_length(:description, max: 10_000, count: :bytes)
|
||||||
|
|
|
@ -9,7 +9,7 @@ defmodule PhilomenaWeb.GalleryController do
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
plug PhilomenaWeb.FilterBannedUsersPlug when action in [:new, :create, :edit, :update, :delete]
|
plug PhilomenaWeb.FilterBannedUsersPlug when action in [:new, :create, :edit, :update, :delete]
|
||||||
plug :load_and_authorize_resource, model: Gallery, except: [:index]
|
plug :load_and_authorize_resource, model: Gallery, except: [:index], preload: [:creator, thumbnail: :tags]
|
||||||
|
|
||||||
def index(conn, params) do
|
def index(conn, params) do
|
||||||
galleries =
|
galleries =
|
||||||
|
@ -40,7 +40,7 @@ defmodule PhilomenaWeb.GalleryController do
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> Map.put(:params, params)
|
|> Map.put(:params, params)
|
||||||
|> render("show.html", gallery: gallery, images: images, interactions: interactions)
|
|> render("show.html", layout_class: "layout--wide", gallery: gallery, images: images, interactions: interactions)
|
||||||
end
|
end
|
||||||
|
|
||||||
def new(conn, _params) do
|
def new(conn, _params) do
|
||||||
|
|
3
lib/philomena_web/templates/gallery/edit.html.slime
Normal file
3
lib/philomena_web/templates/gallery/edit.html.slime
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
h1 Editing Gallery
|
||||||
|
|
||||||
|
= render PhilomenaWeb.GalleryView, "_form.html", conn: @conn, changeset: @changeset, action: Routes.gallery_path(@conn, :update, @gallery)
|
|
@ -1,2 +1,3 @@
|
||||||
h1 Create a Gallery
|
h1 Create a Gallery
|
||||||
|
|
||||||
= render PhilomenaWeb.GalleryView, "_form.html", conn: @conn, changeset: @changeset, action: Routes.gallery_path(@conn, :create)
|
= render PhilomenaWeb.GalleryView, "_form.html", conn: @conn, changeset: @changeset, action: Routes.gallery_path(@conn, :create)
|
76
lib/philomena_web/templates/gallery/show.html.slime
Normal file
76
lib/philomena_web/templates/gallery/show.html.slime
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
elixir:
|
||||||
|
scope = scope(@conn)
|
||||||
|
image_url = fn image -> Routes.image_path(@conn, :show, image, scope) end
|
||||||
|
route = fn p -> Routes.gallery_path(@conn, :show, @gallery, p) end
|
||||||
|
pagination = render PhilomenaWeb.PaginationView, "_pagination.html", page: @images, route: route, params: scope
|
||||||
|
info = render PhilomenaWeb.PaginationView, "_pagination_info.html", page: @images
|
||||||
|
|
||||||
|
#sortable
|
||||||
|
.block#imagelist-container
|
||||||
|
section.block__header.flex
|
||||||
|
h1.block__header__title.hide-mobile
|
||||||
|
' Viewing gallery
|
||||||
|
strong>
|
||||||
|
= @gallery.title
|
||||||
|
|
||||||
|
= pagination
|
||||||
|
|
||||||
|
.flex__right
|
||||||
|
a href="#"
|
||||||
|
i.fa.fa-exclamation-triangle>
|
||||||
|
span.hide-mobile Report
|
||||||
|
|
||||||
|
= if can?(@conn, :edit, @gallery) do
|
||||||
|
a href=Routes.gallery_path(@conn, :edit, @gallery)
|
||||||
|
i.fa.fa-pencil>
|
||||||
|
span.hide-mobile Edit
|
||||||
|
|
||||||
|
= if can?(@conn, :edit, @gallery) do
|
||||||
|
a.rearrange-button.js-rearrange href='#' data-click-hide='.js-rearrange' data-click-show='.js-save,#gallery-rearrange-info'
|
||||||
|
i.fa.fa-sort>
|
||||||
|
' Rearrange
|
||||||
|
/data-reorder-path=gallery_order_path(@gallery)
|
||||||
|
a.rearrange-button.js-save.hidden href='#' data-click-hide='.js-save,#gallery-rearrange-info' data-click-show='.js-rearrange'
|
||||||
|
i.fa.fa-check>
|
||||||
|
' Save
|
||||||
|
|
||||||
|
= if show_subscription_link?(@gallery.creator, @conn.assigns.current_user) do
|
||||||
|
/= subscription_link(@gallery, current_user)
|
||||||
|
|
||||||
|
.block__header.block__header--light.block__header--sub
|
||||||
|
span.block__header__title A gallery by
|
||||||
|
|
||||||
|
=> link @gallery.creator.name, to: Routes.profile_path(@conn, :show, @gallery.creator)
|
||||||
|
' with
|
||||||
|
=> @gallery.image_count
|
||||||
|
= pluralize("image", "images", @gallery.image_count)
|
||||||
|
' , last updated
|
||||||
|
= pretty_time(@gallery.updated_at)
|
||||||
|
|
||||||
|
.block__content.flex.js-imagelist-info
|
||||||
|
.flex__fixed.thumb-tiny-container.spacing-right
|
||||||
|
= render PhilomenaWeb.ImageView, "_image_container.html", image: @gallery.thumbnail, size: :thumb_tiny, conn: @conn
|
||||||
|
|
||||||
|
.flex__grow
|
||||||
|
= if @gallery.spoiler_warning not in [nil, ""] do
|
||||||
|
strong> Warning:
|
||||||
|
= @gallery.spoiler_warning
|
||||||
|
|
||||||
|
= if @gallery.description not in [nil, ""] do
|
||||||
|
p = @gallery.description
|
||||||
|
|
||||||
|
.block__content.hidden#gallery-rearrange-info
|
||||||
|
.block.block--fixed.block--primary
|
||||||
|
| Click the image and drag.
|
||||||
|
br
|
||||||
|
strong Note that you may have to wait a couple of seconds before the order is applied.
|
||||||
|
|
||||||
|
.block__content.js-resizable-media-container
|
||||||
|
= for image <- @images do
|
||||||
|
= render PhilomenaWeb.ImageView, "_image_box.html", image: image, link: image_url.(image), size: :thumb, conn: @conn
|
||||||
|
|
||||||
|
.block__header.block__header--light.flex
|
||||||
|
= pagination
|
||||||
|
|
||||||
|
span.block__header__title
|
||||||
|
= info
|
|
@ -1,3 +1,10 @@
|
||||||
defmodule PhilomenaWeb.GalleryView do
|
defmodule PhilomenaWeb.GalleryView do
|
||||||
use PhilomenaWeb, :view
|
use PhilomenaWeb, :view
|
||||||
|
|
||||||
|
alias Philomena.ImageScope
|
||||||
|
|
||||||
|
def scope(conn), do: ImageScope.scope(conn)
|
||||||
|
|
||||||
|
def show_subscription_link?(%{id: id}, %{id: id}), do: false
|
||||||
|
def show_subscription_link?(_user1, _user2), do: true
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue