From 964fa69fb49d29edb6b06d827323238f727dd9a1 Mon Sep 17 00:00:00 2001 From: Prospector <6166773+Prospector@users.noreply.github.com> Date: Sat, 3 Dec 2022 10:29:49 -0800 Subject: [PATCH] Add gallery view to search pages (#773) --- assets/images/utils/globe.svg | 6 + assets/images/utils/grid.svg | 7 + assets/images/utils/image.svg | 6 + assets/styles/components.scss | 126 +++-- components/ui/ProjectCard.vue | 681 +++++++++++++++------------- components/ui/search/Categories.vue | 1 + pages/_type/_id.vue | 4 +- pages/_type/_id/versions.vue | 2 +- pages/dashboard/index.vue | 20 +- pages/frog.vue | 29 ++ pages/moderation.vue | 2 +- pages/search.vue | 72 ++- pages/settings/follows.vue | 2 +- pages/settings/index.vue | 80 +++- pages/user/_id.vue | 85 +++- plugins/shorthands.js | 6 + store/cosmetics.js | 54 ++- store/tag.js | 1 + 18 files changed, 766 insertions(+), 418 deletions(-) create mode 100644 assets/images/utils/globe.svg create mode 100644 assets/images/utils/grid.svg create mode 100644 assets/images/utils/image.svg create mode 100644 pages/frog.vue diff --git a/assets/images/utils/globe.svg b/assets/images/utils/globe.svg new file mode 100644 index 000000000..292dca417 --- /dev/null +++ b/assets/images/utils/globe.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/images/utils/grid.svg b/assets/images/utils/grid.svg new file mode 100644 index 000000000..f721c4857 --- /dev/null +++ b/assets/images/utils/grid.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/assets/images/utils/image.svg b/assets/images/utils/image.svg new file mode 100644 index 000000000..a45c6a30e --- /dev/null +++ b/assets/images/utils/image.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/styles/components.scss b/assets/styles/components.scss index 5b66723e4..a9a85c634 100644 --- a/assets/styles/components.scss +++ b/assets/styles/components.scss @@ -433,27 +433,31 @@ tr.button-transparent { } } -.iconified-button { - @extend .button-base; - +.button-color-base { + box-sizing: border-box; --text-color: var(--color-button-text); --background-color: var(--color-button-bg); - box-sizing: border-box; + color: var(--text-color); + background-color: var(--background-color); + box-shadow: var(--shadow-inset-sm), 0 0 0 0 transparent; + border-radius: var(--size-rounded-sm); +} + +.iconified-button { + @extend .button-base; + @extend .button-color-base; + display: flex; padding: var(--spacing-card-sm) var(--spacing-card-bg); margin: 0; font-size: var(--font-size-nm); align-items: center; cursor: pointer; - box-shadow: var(--shadow-inset-sm), 0 0 0 0 transparent; width: fit-content; height: fit-content; - color: var(--text-color); - background-color: var(--background-color); text-decoration: none; - border-radius: var(--size-rounded-sm); svg { width: 1.1rem; @@ -479,6 +483,30 @@ tr.button-transparent { } } +.square-button { + @extend .button-base; + + --text-color: var(--color-button-text); + --background-color: var(--color-button-bg); + + display: flex; + align-items: center; + height: 2.25rem; + width: 2.25rem; + border-radius: var(--size-rounded-sm); + color: var(--text-color); + background-color: var(--background-color); + box-shadow: var(--shadow-inset-sm), 0 0 0 0 transparent; + + svg { + width: 1.25rem; + height: 1.25rem; + margin: auto; + } + + flex-shrink: 0; +} + .header-button { @extend .iconified-button; @@ -691,27 +719,6 @@ tr.button-transparent { } } -.download-button { - @extend .button-base; - - display: flex; - align-items: center; - height: 2.25rem; - width: 2.25rem; - border-radius: var(--size-rounded-sm); - color: var(--color-brand-inverted); - background-color: var(--color-brand); - margin-right: var(--spacing-card-sm); - - svg { - width: 1.25rem; - height: 1.25rem; - margin: auto; - } - - flex-shrink: 0; -} - .textarea-wrapper { display: flex; flex-direction: column; @@ -1002,6 +1009,10 @@ h1 { padding: var(--spacing-card-lg); } +.padding-bg { + padding: var(--spacing-card-bg); +} + .padding-md { padding: var(--spacing-card-md); } @@ -1014,6 +1025,10 @@ h1 { padding-block: var(--spacing-card-lg); } +.padding-block-bg { + padding-block: var(--spacing-card-bg); +} + .padding-block-md { padding-block: var(--spacing-card-md); } @@ -1026,6 +1041,10 @@ h1 { padding-inline: var(--spacing-card-lg); } +.padding-inline-bg { + padding-inline: var(--spacing-card-bg); +} + .padding-inline-md { padding-inline: var(--spacing-card-md); } @@ -1278,3 +1297,52 @@ button { font-weight: bold; } } + +.project-list { + width: 100%; + gap: var(--spacing-card-md); + overflow: hidden; + + &:not(:first-child) { + margin-top: var(--spacing-card-md); + } + + &:not(:empty) { + margin-bottom: var(--spacing-card-md); + } +} + +.project-list.display-mode--list { + display: flex; + flex-direction: column; +} + +.project-list.display-mode--gallery { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + + @media screen and (max-width: 750px) { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } +} + +.project-list.display-mode--grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + + @media screen and (max-width: 80rem) { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + @media screen and (max-width: 1024px) { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + @media screen and (max-width: 860px) { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + @media screen and (max-width: 550px) { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } +} diff --git a/components/ui/ProjectCard.vue b/components/ui/ProjectCard.vue index 593931f41..d8a2e094b 100644 --- a/components/ui/ProjectCard.vue +++ b/components/ui/ProjectCard.vue @@ -1,144 +1,141 @@ @@ -148,6 +145,9 @@ import Categories from '~/components/ui/search/Categories' import Badge from '~/components/ui/Badge' import InfoIcon from '~/assets/images/utils/info.svg?inline' +import ClientIcon from '~/assets/images/utils/client.svg?inline' +import GlobeIcon from '~/assets/images/utils/globe.svg?inline' +import ServerIcon from '~/assets/images/utils/server.svg?inline' import IssuesIcon from '~/assets/images/utils/issues.svg?inline' import CalendarIcon from '~/assets/images/utils/calendar.svg?inline' import EditIcon from '~/assets/images/utils/updated.svg?inline' @@ -162,6 +162,9 @@ export default { Categories, Badge, InfoIcon, + ClientIcon, + ServerIcon, + GlobeIcon, IssuesIcon, CalendarIcon, EditIcon, @@ -246,6 +249,18 @@ export default { required: false, default: false, }, + galleryImages: { + type: Array, + required: false, + default() { + return [] + }, + }, + showUpdatedDate: { + type: Boolean, + required: false, + default: true, + }, }, computed: { projectTypeDisplay() { @@ -256,230 +271,248 @@ export default { diff --git a/components/ui/search/Categories.vue b/components/ui/search/Categories.vue index 4810b2f82..997c13491 100644 --- a/components/ui/search/Categories.vue +++ b/components/ui/search/Categories.vue @@ -1,5 +1,6 @@