This commit is contained in:
Luna D. 2024-05-20 22:30:41 +02:00
parent f659023649
commit 9d04f2b43e
No known key found for this signature in database
GPG key ID: 4B1C63448394F688
42 changed files with 258 additions and 140 deletions

7
assets/.prettierrc.yml Normal file
View file

@ -0,0 +1,7 @@
tabWidth: 2
useTabs: false
printWidth: 120
semi: true
singleQuote: false
bracketSpacing: true
endOfLine: lf

View file

@ -1,5 +1,7 @@
--- ---
extends: stylelint-config-recommended extends: stylelint-config-recommended
plugins:
- stylelint-prettier
rules: rules:
block-no-empty: true block-no-empty: true
at-rule-no-unknown: at-rule-no-unknown:
@ -73,3 +75,4 @@ rules:
declaration-block-no-redundant-longhand-properties: true declaration-block-no-redundant-longhand-properties: true
shorthand-property-no-redundant-values: true shorthand-property-no-redundant-values: true
comment-whitespace-inside: always comment-whitespace-inside: always
prettier/prettier: true

View file

@ -42,7 +42,7 @@
background: var(--secondary-dark-color); background: var(--secondary-dark-color);
} }
.$(classname):nth-child(even) { .$(classname):nth-child(even) {
background: var(--secondary-muted-color);; background: var(--secondary-muted-color);
} }
@mixin even-odd-type $classname, primary; @mixin even-odd-type $classname, primary;
@ -54,7 +54,9 @@
} }
@define-mixin animated-transition { @define-mixin animated-transition {
transition: color var(--transition-animation-duration) ease, background var(--transition-animation-duration) ease; transition:
color var(--transition-animation-duration) ease,
background var(--transition-animation-duration) ease;
} }
@define-mixin subgrid { @define-mixin subgrid {

View file

@ -22,7 +22,9 @@ main {
} }
} }
a, a:active, a:visited { a,
a:active,
a:visited {
color: var(--link-color); color: var(--link-color);
text-decoration: none; text-decoration: none;
} }
@ -39,19 +41,36 @@ hr {
display: none !important; display: none !important;
} }
p, .paragraph { p,
.paragraph {
hyphens: none; hyphens: none;
line-height: var(--readable-line-height); line-height: var(--readable-line-height);
margin: var(--padding-small); margin: var(--padding-small);
margin-right: 0; margin-right: 0;
} }
.fa--padded { .icon--padded {
padding: 0 var(--padding-normal); padding: 0 var(--padding-normal);
} }
.icon--padded--right {
padding-right: var(--padding-normal);
}
.icon--padded.small {
padding: 0 var(--padding-small);
}
.icon--padded--right.small {
padding-right: var(--padding-small);
}
@mixin if-mobile { @mixin if-mobile {
.fa-padded { .icon--padded {
padding: 0 var(--padding-small); padding: 0 var(--padding-small);
} }
.icon--padded--right {
padding-right: var(--padding-normal);
}
} }

View file

@ -59,7 +59,8 @@
border-bottom-right-radius: var(--border-radius-outer) !important; border-bottom-right-radius: var(--border-radius-outer) !important;
} }
.block__content, .block__tab { .block__content,
.block__tab {
border-radius: var(--border-radius-outer); border-radius: var(--border-radius-outer);
padding: var(--padding-normal); padding: var(--padding-normal);
background: var(--primary-dark-color); background: var(--primary-dark-color);
@ -69,7 +70,8 @@
padding: var(--padding-small); padding: var(--padding-small);
} }
.block__footer, .block__footer--small { .block__footer,
.block__footer--small {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
background: var(--primary-muted-color); background: var(--primary-muted-color);
@ -94,14 +96,16 @@
} }
} }
.block__header, .block__header--single-item { .block__header,
.block__header--single-item {
line-height: var(--block-header-height); line-height: var(--block-header-height);
padding: 0 var(--padding-normal); padding: 0 var(--padding-normal);
font-size: var(--font-header-size); font-size: var(--font-header-size);
margin-bottom: var(--padding-small); margin-bottom: var(--padding-small);
} }
.block__header > .fa, .block__header--single-item > .fa { .block__header > .fa,
.block__header--single-item > .fa {
margin-right: var(--padding-normal); margin-right: var(--padding-normal);
} }
@ -132,11 +136,13 @@
margin-bottom: var(--padding-normal); margin-bottom: var(--padding-normal);
} }
.block__content > *:last-child, .block--fixed > *:last-child { .block__content > *:last-child,
.block--fixed > *:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
.block__content > *:first-child, .block--fixed > *:first-child { .block__content > *:first-child,
.block--fixed > *:first-child {
margin-top: 0; margin-top: 0;
} }

View file

@ -14,7 +14,9 @@
background: var(--$(type)-color); background: var(--$(type)-color);
} }
.button--$(type):hover, .button--$(type):active, .button--$(type).selected { .button--$(type):hover,
.button--$(type):active,
.button--$(type).selected {
background: var(--$(type)-dark-color) !important; background: var(--$(type)-dark-color) !important;
border-radius: var(--border-radius-inner); border-radius: var(--border-radius-inner);
} }
@ -53,7 +55,8 @@
border-width: 0; border-width: 0;
} }
.button:hover, .button:active { .button:hover,
.button:active {
@mixin animated-transition; @mixin animated-transition;
background: var(--primary-dark-color); background: var(--primary-dark-color);
border-radius: var(--border-radius-inner); border-radius: var(--border-radius-inner);
@ -87,7 +90,9 @@
margin-right: 0; margin-right: 0;
} }
.button__group, .button__group--single, .button__group--standalone { .button__group,
.button__group--single,
.button__group--standalone {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
border-radius: var(--border-radius-inner); border-radius: var(--border-radius-inner);
@ -96,16 +101,18 @@
line-height: var(--button-group-height); line-height: var(--button-group-height);
} }
.button__group:last-child, .button__group--single:last-child, .button__group--standalone:last-child { .button__group:last-child,
.button__group--single:last-child,
.button__group--standalone:last-child {
margin: 0; margin: 0;
} }
.button__group--tall { .button__group--tall {
line-height: var(--button-group-tall-height) line-height: var(--button-group-tall-height);
} }
.button__group--small { .button__group--small {
line-height: var(--button-group-small-height) line-height: var(--button-group-small-height);
} }
.block__header__buttons .button { .block__header__buttons .button {

View file

@ -10,12 +10,13 @@ input[type="checkbox"].checkbox {
background: var(--danger-color); background: var(--danger-color);
border: var(--checkbox-border-width) solid var(--danger-border-color); border: var(--checkbox-border-width) solid var(--danger-border-color);
border-radius: var(--border-radius-checkbox); border-radius: var(--border-radius-checkbox);
transition: background var(--transition-long-animation-duration) ease, transition:
background var(--transition-long-animation-duration) ease,
border-color var(--transition-long-animation-duration) ease; border-color var(--transition-long-animation-duration) ease;
} }
.checkbox:after { .checkbox:after {
content: ''; content: "";
font-family: var(--fa-style-family, "Font Awesome 6 Free"); font-family: var(--fa-style-family, "Font Awesome 6 Free");
font-weight: var(--fa-style, 900); font-weight: var(--fa-style, 900);
text-align: center; text-align: center;
@ -33,12 +34,13 @@ input[type="checkbox"].checkbox {
.checkbox:checked { .checkbox:checked {
background: var(--success-color); background: var(--success-color);
border-color: var(--success-border-color); border-color: var(--success-border-color);
transition: background var(--transition-long-animation-duration) ease, transition:
background var(--transition-long-animation-duration) ease,
border-color var(--transition-long-animation-duration) ease; border-color var(--transition-long-animation-duration) ease;
} }
.checkbox:checked:after { .checkbox:checked:after {
content: ''; content: "";
left: calc(var(--checkbox-width) - var(--checkbox-height)); left: calc(var(--checkbox-width) - var(--checkbox-height));
transition: left var(--transition-long-animation-duration) ease; transition: left var(--transition-long-animation-duration) ease;
} }

View file

@ -11,7 +11,8 @@ form .form--two-column {
gap: var(--padding-normal); gap: var(--padding-normal);
} }
form .form--two-column > .field, form .form--two-column > li { form .form--two-column > .field,
form .form--two-column > li {
display: grid; display: grid;
grid-template-columns: auto 1fr; grid-template-columns: auto 1fr;
gap: var(--padding-normal); gap: var(--padding-normal);

View file

@ -8,7 +8,8 @@
font-family: var(--font-family-monospace); font-family: var(--font-family-monospace);
} }
.input:hover, .input:focus { .input:hover,
.input:focus {
background: var(--secondary-muted-color); background: var(--secondary-muted-color);
} }

View file

@ -44,7 +44,8 @@
} }
@mixin if-desktop { @mixin if-desktop {
.centered-layout .layout--medium, .centered-layout .layout--narrow { .centered-layout .layout--medium,
.centered-layout .layout--narrow {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }

View file

@ -1,4 +1,5 @@
ul, ol { ul,
ol {
padding: 0; padding: 0;
list-style-type: none; list-style-type: none;
} }

View file

@ -13,7 +13,7 @@
} }
.media-list:before { .media-list:before {
content: ''; content: "";
width: 0; width: 0;
padding-bottom: calc(100% + var(--media-header-height)); padding-bottom: calc(100% + var(--media-header-height));
grid-row: 1 / 1; grid-row: 1 / 1;
@ -90,17 +90,20 @@
top: var(--media-header-height); top: var(--media-header-height);
} }
.post-image-container, .post-image-container img { .post-image-container,
.post-image-container img {
width: var(--media-tiny-container-width); width: var(--media-tiny-container-width);
height: var(--media-tiny-container-width); height: var(--media-tiny-container-width);
} }
.media-tiny-container, .media-tiny-container img { .media-tiny-container,
.media-tiny-container img {
width: var(--media-tiny-container-width); width: var(--media-tiny-container-width);
height: var(--media-tiny-container-width); height: var(--media-tiny-container-width);
} }
.thumb-tiny, .thumb-tiny img { .thumb-tiny,
.thumb-tiny img {
max-width: var(--media-tiny-container-width); max-width: var(--media-tiny-container-width);
max-height: var(--media-tiny-container-width); max-height: var(--media-tiny-container-width);
} }

View file

@ -15,7 +15,8 @@
border-top-right-radius: 0; border-top-right-radius: 0;
} }
.table td, th { .table td,
th {
padding: var(--padding-small); padding: var(--padding-small);
border: 1px solid var(--secondary-muted-color); border: 1px solid var(--secondary-muted-color);
text-align: left; text-align: left;

View file

@ -8,7 +8,8 @@
--separator-vertical-size: inherit; --separator-vertical-size: inherit;
} }
.block__content, .block__tab { .block__content,
.block__tab {
border: 1px solid var(--primary-border-color); border: 1px solid var(--primary-border-color);
} }
@ -16,7 +17,9 @@
border: 1px solid var(--primary-border-color); border: 1px solid var(--primary-border-color);
} }
.button__group, .button__group--single, .button__group--standalone { .button__group,
.button__group--single,
.button__group--standalone {
border: 1px solid var(--secondary-color); border: 1px solid var(--secondary-color);
} }

View file

@ -1,7 +1,7 @@
.checkbox:after { .checkbox:after {
content: '\f00d'; content: "\f00d";
} }
.checkbox:checked:after { .checkbox:checked:after {
content: '\f00c'; content: "\f00c";
} }

View file

@ -18,7 +18,8 @@
} }
} }
header > *, nav.header__secondary > * { header > *,
nav.header__secondary > * {
margin-left: var(--padding-large); margin-left: var(--padding-large);
} }

View file

@ -114,6 +114,7 @@ header {
color: var(--text-light-color) !important; color: var(--text-light-color) !important;
} }
.input:focus, .header__search > .input:hover { .input:focus,
.header__search > .input:hover {
color: var(--text-color) !important; color: var(--text-color) !important;
} }

View file

@ -18,7 +18,7 @@ header {
} }
.header__logo { .header__logo {
font-size: var(--font-h2-size) font-size: var(--font-h2-size);
} }
.header__search { .header__search {

View file

@ -8,7 +8,8 @@
gap: var(--padding-small); gap: var(--padding-small);
} }
.image-source__icon, .image-source__link { .image-source__icon,
.image-source__link {
overflow: hidden; overflow: hidden;
} }

View file

@ -6,7 +6,8 @@
width: 1rem; width: 1rem;
} }
.interaction--$(type).active, .interaction--$(type):hover { .interaction--$(type).active,
.interaction--$(type):hover {
color: var(--text-color) !important; color: var(--text-color) !important;
background-color: var(--$(type)-color); background-color: var(--$(type)-color);
} }

View file

@ -11,17 +11,20 @@
margin-left: var(--padding-normal); margin-left: var(--padding-normal);
} }
.spoiler, .spoiler a { .spoiler,
.spoiler a {
color: var(--spoiler-color); color: var(--spoiler-color);
background: var(--spoiler-color) background: var(--spoiler-color);
} }
.spoiler-revealed, .spoiler:hover { .spoiler-revealed,
.spoiler:hover {
color: var(--text-color); color: var(--text-color);
background: var(--spoiler-revealed-color); background: var(--spoiler-revealed-color);
} }
.spoiler-revealed a, .spoiler:hover a { .spoiler-revealed a,
.spoiler:hover a {
color: var(--link-color); color: var(--link-color);
} }

View file

@ -12,7 +12,8 @@
font-size: 0.8rem !important; font-size: 0.8rem !important;
} }
.pagination a, .pagination span { .pagination a,
.pagination span {
display: grid; display: grid;
grid-template-columns: auto; grid-template-columns: auto;
gap: var(--padding-tiny); gap: var(--padding-tiny);

View file

@ -1,19 +1,19 @@
@define-mixin tag-color $tagtype { @define-mixin tag-color $tagtype {
.tag[data-tag-category=$(tagtype)] { .tag[data-tag-category="$(tagtype)"] {
color: var(--tag-$(tagtype)-text-color); color: var(--tag-$(tagtype)-text-color);
background: var(--tag-$(tagtype)-color); background: var(--tag-$(tagtype)-color);
border-color: var(--tag-$(tagtype)-border-color); border-color: var(--tag-$(tagtype)-border-color);
} }
.tag[data-tag-category=$(tagtype)] .tag__state { .tag[data-tag-category="$(tagtype)"] .tag__state {
color: var(--tag-$(tagtype)-text-color); color: var(--tag-$(tagtype)-text-color);
} }
.tag[data-tag-category=$(tagtype)] .tag__name { .tag[data-tag-category="$(tagtype)"] .tag__name {
color: var(--tag-$(tagtype)-text-color); color: var(--tag-$(tagtype)-text-color);
} }
.tag[data-tag-category=$(tagtype)] .tag__count { .tag[data-tag-category="$(tagtype)"] .tag__count {
background: var(--tag-$(tagtype)-border-color); background: var(--tag-$(tagtype)-border-color);
} }
} }

View file

@ -29,8 +29,10 @@
"chai": "^5", "chai": "^5",
"eslint-plugin-vitest": "^0.5.4", "eslint-plugin-vitest": "^0.5.4",
"jsdom": "^24.0.0", "jsdom": "^24.0.0",
"prettier": "^3.2.5",
"stylelint": "^16.5.0", "stylelint": "^16.5.0",
"stylelint-config-standard": "^36.0.0", "stylelint-config-standard": "^36.0.0",
"stylelint-prettier": "^5.0.0",
"vitest": "^1.5.3", "vitest": "^1.5.3",
"vitest-fetch-mock": "^0.2.2" "vitest-fetch-mock": "^0.2.2"
} }
@ -2843,6 +2845,12 @@
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
}, },
"node_modules/fast-diff": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
"integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
"dev": true
},
"node_modules/fast-glob": { "node_modules/fast-glob": {
"version": "3.3.2", "version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
@ -4427,6 +4435,33 @@
"node": ">= 0.8.0" "node": ">= 0.8.0"
} }
}, },
"node_modules/prettier": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
"integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
"dev": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/prettier-linter-helpers": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
"integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
"dev": true,
"dependencies": {
"fast-diff": "^1.1.2"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/pretty-format": { "node_modules/pretty-format": {
"version": "27.5.1", "version": "27.5.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
@ -4912,6 +4947,22 @@
"stylelint": "^16.1.0" "stylelint": "^16.1.0"
} }
}, },
"node_modules/stylelint-prettier": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-5.0.0.tgz",
"integrity": "sha512-RHfSlRJIsaVg5Br94gZVdWlz/rBTyQzZflNE6dXvSxt/GthWMY3gEHsWZEBaVGg7GM+XrtVSp4RznFlB7i0oyw==",
"dev": true,
"dependencies": {
"prettier-linter-helpers": "^1.0.0"
},
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
"prettier": ">=3.0.0",
"stylelint": ">=16.0.0"
}
},
"node_modules/stylelint/node_modules/ansi-regex": { "node_modules/stylelint/node_modules/ansi-regex": {
"version": "6.0.1", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",

View file

@ -2,7 +2,7 @@
"type": "module", "type": "module",
"scripts": { "scripts": {
"deploy": "cross-env NODE_ENV=production tsc && cross-env NODE_ENV=production vite build", "deploy": "cross-env NODE_ENV=production tsc && cross-env NODE_ENV=production vite build",
"lint": "eslint . --ext .js,.ts", "lint": "eslint . --ext .js,.ts && stylelint ./css/**/*.css",
"test": "vitest run --coverage", "test": "vitest run --coverage",
"test:watch": "vitest watch --coverage", "test:watch": "vitest watch --coverage",
"dev": "vite", "dev": "vite",
@ -34,8 +34,10 @@
"chai": "^5", "chai": "^5",
"eslint-plugin-vitest": "^0.5.4", "eslint-plugin-vitest": "^0.5.4",
"jsdom": "^24.0.0", "jsdom": "^24.0.0",
"prettier": "^3.2.5",
"stylelint": "^16.5.0", "stylelint": "^16.5.0",
"stylelint-config-standard": "^36.0.0", "stylelint-config-standard": "^36.0.0",
"stylelint-prettier": "^5.0.0",
"vitest": "^1.5.3", "vitest": "^1.5.3",
"vitest-fetch-mock": "^0.2.2" "vitest-fetch-mock": "^0.2.2"
} }

View file

@ -75,7 +75,7 @@ defmodule PhilomenaWeb.ContentSecurityPolicyPlug do
defp default_connect_src, defp default_connect_src,
do: vite_hmr?(do: "*", else: "'self'") do: vite_hmr?(do: "*", else: "'self'")
defp default_style_src, do: vite_hmr?(do: "*", else: "'self'") defp default_style_src, do: vite_hmr?(do: "'unsafe-inline' *", else: "'self'")
defp to_uri(host) when host in [nil, ""], do: "" defp to_uri(host) when host in [nil, ""], do: ""
defp to_uri(host), do: URI.to_string(%URI{scheme: "https", host: host}) defp to_uri(host), do: URI.to_string(%URI{scheme: "https", host: host})

View file

@ -72,7 +72,7 @@ h1 Users
td td
= if can?(@conn, :edit, user) do = if can?(@conn, :edit, user) do
=> link to: Routes.admin_user_path(@conn, :edit, user) do => link to: Routes.admin_user_path(@conn, :edit, user) do
i.fa.fa-fw.fa-user-edit i.fa.icon--padded.small.fa-user-edit
' Edit ' Edit
/= if user.deleted_at do /= if user.deleted_at do
@ -83,11 +83,11 @@ h1 Users
= if can?(@conn, :index, Philomena.Bans.User) do = if can?(@conn, :index, Philomena.Bans.User) do
=> link to: Routes.admin_user_ban_path(@conn, :new, username: user.name) do => link to: Routes.admin_user_ban_path(@conn, :new, username: user.name) do
i.fa.fa-fw.fa-ban i.fa.icon--padded.small.fa-ban
' Ban ' Ban
= if can?(@conn, :edit, Philomena.ArtistLinks.ArtistLink) do = if can?(@conn, :edit, Philomena.ArtistLinks.ArtistLink) do
=> link to: Routes.profile_artist_link_path(@conn, :new, user) do => link to: Routes.profile_artist_link_path(@conn, :new, user) do
i.fa.fa-fw.fa-link i.fa.icon--padded.small.fa-link
' Add link ' Add link
.block__header.block__header--light .block__header.block__header--light

View file

@ -23,17 +23,17 @@
= if @channel.associated_artist_tag do = if @channel.associated_artist_tag do
a href=Routes.tag_path(@conn, :show, @channel.associated_artist_tag) class=link_class a href=Routes.tag_path(@conn, :show, @channel.associated_artist_tag) class=link_class
i.fa.fa-fw.fa-tags> i.fa.icon--padded.small.fa-tags>
= @channel.associated_artist_tag.name = @channel.associated_artist_tag.name
- else - else
.media-box__header.media-box__header--channel No artist tag .media-box__header.media-box__header--channel No artist tag
= if can?(@conn, :edit, @channel) do = if can?(@conn, :edit, @channel) do
a href=Routes.channel_path(@conn, :edit, @channel) class=link_class a href=Routes.channel_path(@conn, :edit, @channel) class=link_class
i.fas.fa-fw.fa-edit> i.fas.icon--padded.small.fa-edit>
' Edit ' Edit
a href=Routes.channel_path(@conn, :delete, @channel) class=link_class data-method="delete" data-confirm="Are you really, really sure?" a href=Routes.channel_path(@conn, :delete, @channel) class=link_class data-method="delete" data-confirm="Are you really, really sure?"
i.fas.fa-fw.fa-trash> i.fas.icon--padded.small.fa-trash>
' Delete ' Delete
= render PhilomenaWeb.Channel.SubscriptionView, "_subscription.html", conn: @conn, watching: @subscriptions[@channel.id], channel: @channel = render PhilomenaWeb.Channel.SubscriptionView, "_subscription.html", conn: @conn, watching: @subscriptions[@channel.id], channel: @channel

View file

@ -17,7 +17,7 @@ html lang="en"
body.minimal body.minimal
.minimal__message .minimal__message
h1.minimal__message__header h1.minimal__message__header
i.fa--padded.favicon-home> i.icon--padded--right.favicon-home>
= site_name() = site_name()
h3 = @short_msg h3 = @short_msg

View file

@ -2,7 +2,7 @@ h1 Discussion Forums
.block .block
.block__header .block__header
a href=Routes.post_path(@conn, :index) a href=Routes.post_path(@conn, :index)
i.fa.fa-fw.fa-search> i.fa.icon--padded.small.fa-search>
' Search Posts ' Search Posts
span.block__header__item span.block__header__item
=> @topic_count => @topic_count

View file

@ -7,11 +7,11 @@ h1 = @forum.name
' » ' »
=> link(@forum.name, to: Routes.forum_path(@conn, :show, @forum)) => link(@forum.name, to: Routes.forum_path(@conn, :show, @forum))
a href=Routes.forum_topic_path(@conn, :new, @forum) a href=Routes.forum_topic_path(@conn, :new, @forum)
i.fa.fa-fw.fa-edit> i.fa.icon--padded.small.fa-edit>
' New Topic ' New Topic
a href=Routes.post_path(@conn, :index, pq: "forum:#{@forum.short_name}") a href=Routes.post_path(@conn, :index, pq: "forum:#{@forum.short_name}")
i.fa.fa-fw.fa-search> i.fa.icon--padded.small.fa-search>
' Search Posts ' Search Posts
span.spacing--left span.spacing--left
=> @forum.topic_count => @forum.topic_count

View file

@ -1,34 +1,34 @@
nav#burger nav#burger
a href="/" a href="/"
i.fa--padded.favicon-home<> i.icon--padded--right.favicon-home<>
' Home ' Home
a href="/images/new" a href="/images/new"
i.fa.fa-fw.fa-upload<> i.fa.icon--padded--right.fa-upload<>
' Upload ' Upload
a href="/forums" a href="/forums"
i.fas.fa-fw.fa-pen-square<> i.fas.icon--padded--right.fa-pen-square<>
' Forums ' Forums
a href="/tags" a href="/tags"
i.fa.fa-fw.fa-tag<> i.fa.icon--padded--right.fa-tag<>
' Tags ' Tags
a href="/search?q=first_seen_at.gt:3 days ago&amp;sf=wilson_score&amp;sd=desc" a href="/search?q=first_seen_at.gt:3 days ago&amp;sf=wilson_score&amp;sd=desc"
i.fas.fa-fw.fa-poll<> i.fas.icon--padded--right.fa-poll<>
' Rankings ' Rankings
a href="/filters" a href="/filters"
i.fa.fa-fw.fa-filter<> i.fa.icon--padded--right.fa-filter<>
' Filters ' Filters
a href="/galleries" a href="/galleries"
i.fa.fa-fw.fa-image<> i.fa.icon--padded--right.fa-image<>
' Galleries ' Galleries
a href="/comments" a href="/comments"
i.fa.fa-fw.fa-comments<> i.fa.icon--padded--right.fa-comments<>
' Comments ' Comments
a href="/commissions" a href="/commissions"
i.fa.fa-fw.fa-address-card<> i.fa.icon--padded--right.fa-address-card<>
' Commissions ' Commissions
a href="/channels" a href="/channels"
i.fa.fa-fw.fa-podcast<> i.fa.icon--padded--right.fa-podcast<>
' Channels ' Channels
a href="/pages/donations" a href="/pages/donations"
i.fa.fa-fw.fa-heart<> i.fa.icon--padded--right.fa-heart<>
' Donate ' Donate

View file

@ -3,7 +3,7 @@ header
a.header__link href="#" a.header__link href="#"
i.fa.fa-bars i.fa.fa-bars
a.header__logo.header__link href="/" a.header__logo.header__link href="/"
i.fa--padded.favicon-home> i.icon--padded--right.favicon-home>
span.hidden--mobile = site_name() span.hidden--mobile = site_name()
a.header__link.hidden--mobile href="/images/new" title="Upload" a.header__link.hidden--mobile href="/images/new" title="Upload"
i.fa.fa-upload i.fa.fa-upload
@ -59,71 +59,71 @@ header
a href=Routes.profile_path(@conn, :show, @current_user) a href=Routes.profile_path(@conn, :show, @current_user)
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-user i.fa.icon--padded.small.fa-user
.dropdown__text .dropdown__text
= @current_user.name = @current_user.name
hr.dropdown__separator hr.dropdown__separator
a href="/search?q=my:watched" a href="/search?q=my:watched"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-eye i.fa.icon--padded.small.fa-eye
.dropdown__text Watched .dropdown__text Watched
a href="/search?q=my:faves" a href="/search?q=my:faves"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-star i.fa.icon--padded.small.fa-star
.dropdown__text Faves .dropdown__text Faves
a href="/search?q=my:upvotes" a href="/search?q=my:upvotes"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-arrow-up i.fa.icon--padded.small.fa-arrow-up
.dropdown__text Upvotes .dropdown__text Upvotes
a href=Routes.gallery_path(@conn, :index, gallery: [creator: @current_user.name]) a href=Routes.gallery_path(@conn, :index, gallery: [creator: @current_user.name])
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-image i.fa.icon--padded.small.fa-image
.dropdown__text Galleries .dropdown__text Galleries
a href="/search?q=my:uploads" a href="/search?q=my:uploads"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-upload i.fa.icon--padded.small.fa-upload
.dropdown__text Uploads .dropdown__text Uploads
a href="/comments?cq=my:comments" a href="/comments?cq=my:comments"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-comments i.fa.icon--padded.small.fa-comments
.dropdown__text Comments .dropdown__text Comments
a href="/posts?pq=my:posts" a href="/posts?pq=my:posts"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-pen-square i.fa.icon--padded.small.fa-pen-square
.dropdown__text Posts .dropdown__text Posts
a href=Routes.profile_artist_link_path(@conn, :index, @current_user) a href=Routes.profile_artist_link_path(@conn, :index, @current_user)
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-link i.fa.icon--padded.small.fa-link
.dropdown__text Links .dropdown__text Links
a href="/conversations" a href="/conversations"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-envelope i.fa.icon--padded.small.fa-envelope
.dropdown__text Messages .dropdown__text Messages
hr.dropdown__separator hr.dropdown__separator
a href="/settings/edit" a href="/settings/edit"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-cogs i.fa.icon--padded.small.fa-cogs
.dropdown__text Settings .dropdown__text Settings
a href=Routes.registration_path(@conn, :edit) a href=Routes.registration_path(@conn, :edit)
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-user i.fa.icon--padded.small.fa-user
.dropdown__text Account .dropdown__text Account
hr.dropdown__separator hr.dropdown__separator
a href=Routes.session_path(@conn, :delete) data-method="delete" a href=Routes.session_path(@conn, :delete) data-method="delete"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-sign-out-alt i.fa.icon--padded.small.fa-sign-out-alt
.dropdown__text Logout .dropdown__text Logout
- else - else
a.header__link.hidden--mobile href="/filters" a.header__link.hidden--mobile href="/filters"
@ -132,7 +132,7 @@ header
| ) | )
span.js-burger-links.hidden--mobile span.js-burger-links.hidden--mobile
a.header__link href="/settings/edit" a.header__link href="/settings/edit"
i.fa.fa-fw.fa-cogs.hidden--desktop> i.fa.icon--padded.small.fa-cogs.hidden--desktop>
| Settings | Settings
a.header__link href=Routes.registration_path(@conn, :new) a.header__link href=Routes.registration_path(@conn, :new)
| Register | Register

View file

@ -8,7 +8,7 @@
a href="/images/random" a href="/images/random"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-random> i.fa.icon--padded.small.fa-random>
.dropdown__text Random .dropdown__text Random
.dropdown.header__dropdown .dropdown.header__dropdown
a.header__link href="/activity" a.header__link href="/activity"
@ -20,7 +20,7 @@
a href="/comments" a href="/comments"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-comments> i.fa.icon--padded.small.fa-comments>
.dropdown__text Comments .dropdown__text Comments
.dropdown.header__dropdown .dropdown.header__dropdown
a.header__link href="/forums" a.header__link href="/forums"
@ -37,7 +37,7 @@
a href="/posts" a href="/posts"
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-search> i.fa.icon--padded.small.fa-search>
.dropdown__text Post Search .dropdown__text Post Search
a.header__link href="/tags" a.header__link href="/tags"
i.fa.fa-tag> i.fa.fa-tag>

View file

@ -10,56 +10,56 @@
= link to: Routes.admin_site_notice_path(@conn, :index) do = link to: Routes.admin_site_notice_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-info-circle i.fa.icon--padded.small.fa-info-circle
.dropdown__text Site Notices .dropdown__text Site Notices
= if manages_users?(@conn) do = if manages_users?(@conn) do
= link to: Routes.admin_user_path(@conn, :index) do = link to: Routes.admin_user_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-users i.fa.icon--padded.small.fa-users
.dropdown__text Users .dropdown__text Users
= if manages_forums?(@conn) do = if manages_forums?(@conn) do
= link to: Routes.admin_forum_path(@conn, :index) do = link to: Routes.admin_forum_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-paragraph i.fa.icon--padded.small.fa-paragraph
.dropdown__text Forums .dropdown__text Forums
= if manages_ads?(@conn) do = if manages_ads?(@conn) do
= link to: Routes.admin_advert_path(@conn, :index) do = link to: Routes.admin_advert_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-shopping-bag i.fa.icon--padded.small.fa-shopping-bag
.dropdown__text Adverts .dropdown__text Adverts
= if manages_badges?(@conn) do = if manages_badges?(@conn) do
= link to: Routes.admin_badge_path(@conn, :index) do = link to: Routes.admin_badge_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-trophy i.fa.icon--padded.small.fa-trophy
.dropdown__text Badges .dropdown__text Badges
= if manages_static_pages?(@conn) do = if manages_static_pages?(@conn) do
= link to: Routes.page_path(@conn, :index) do = link to: Routes.page_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-sticky-note i.fa.icon--padded.small.fa-sticky-note
.dropdown__text Pages .dropdown__text Pages
= if manages_mod_notes?(@conn) do = if manages_mod_notes?(@conn) do
= link to: Routes.admin_mod_note_path(@conn, :index) do = link to: Routes.admin_mod_note_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-sticky-note i.fa.icon--padded.small.fa-sticky-note
.dropdown__text Mod Notes .dropdown__text Mod Notes
= if can_see_moderation_log?(@conn) do = if can_see_moderation_log?(@conn) do
= link to: Routes.moderation_log_path(@conn, :index) do = link to: Routes.moderation_log_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-list-alt i.fa.icon--padded.small.fa-list-alt
.dropdown__text Mod Logs .dropdown__text Mod Logs
= if @pending_approval_count do = if @pending_approval_count do
@ -102,17 +102,17 @@
= link to: Routes.admin_user_ban_path(@conn, :index) do = link to: Routes.admin_user_ban_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-user i.fa.icon--padded.small.fa-user
.dropdown__text User Bans .dropdown__text User Bans
= link to: Routes.admin_subnet_ban_path(@conn, :index) do = link to: Routes.admin_subnet_ban_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-network-wired i.fa.icon--padded.small.fa-network-wired
.dropdown__text IP Bans .dropdown__text IP Bans
= link to: Routes.admin_fingerprint_ban_path(@conn, :index) do = link to: Routes.admin_fingerprint_ban_path(@conn, :index) do
.dropdown__item .dropdown__item
.dropdown__icon .dropdown__icon
i.fa.fa-fw.fa-desktop i.fa.icon--padded.small.fa-desktop
.dropdown__text FP Bans .dropdown__text FP Bans

View file

@ -11,8 +11,8 @@
= action_text = action_text
a href="#" data-click-tab="preview" a href="#" data-click-tab="preview"
i.fa.fa-cog.fa-fw.fa-spin.js-preview-loading.hidden> title=raw('Loading preview&hellip;') i.fa.fa-cog.icon--padded.small.fa-spin.js-preview-loading.hidden> title=raw('Loading preview&hellip;')
i.fa.fa-eye.fa-fw.js-preview-idle> i.fa.fa-eye.icon--padded.small.js-preview-idle>
| Preview | Preview
.block__tab.communication-edit__tab.selected.js-preview-input-wrapper data-tab="write" .block__tab.communication-edit__tab.selected.js-preview-input-wrapper data-tab="write"

View file

@ -3,12 +3,12 @@
i.fa.fa-tools i.fa.fa-tools
| Admin | Admin
.block__content .block__content
i.fa.fa-fw.fa-calendar> i.fa.icon--padded.small.fa-calendar>
' Account created ' Account created
= @user.created_at = @user.created_at
br br
i.fa.fa-fw.fa-filter> i.fa.icon--padded.small.fa-filter>
' Current Filter: ' Current Filter:
= if @filter do = if @filter do
= link @filter.name, to: Routes.filter_path(@conn, :show, @filter) = link @filter.name, to: Routes.filter_path(@conn, :show, @filter)
@ -17,7 +17,7 @@
' (none) ' (none)
br br
i.far.fa-fw.fa-clock> i.far.icon--padded.small.fa-clock>
' Last seen ' Last seen
= if @last_ip do = if @last_ip do
=> pretty_time(@last_ip.updated_at) => pretty_time(@last_ip.updated_at)
@ -31,74 +31,74 @@
' (never) ' (never)
br br
i.fas.fa-fw.fa-key> i.fas.icon--padded.small.fa-key>
' Two factor auth: ' Two factor auth:
strong = enabled_text(@user.otp_required_for_login) strong = enabled_text(@user.otp_required_for_login)
br br
= if @user.locked_at do = if @user.locked_at do
i.fas.fa-fw.fa-lock> i.fas.icon--padded.small.fa-lock>
strong.comment_deleted> strong.comment_deleted>
' Account locked, ' Account locked,
=> @user.failed_attempts => @user.failed_attempts
' failed login attempts ' failed login attempts
- else - else
i.fas.fa-fw.fa-unlock> i.fas.icon--padded.small.fa-unlock>
' Not currently locked ' Not currently locked
hr.separator.separator--danger hr.separator.separator--danger
a.button.button--danger href="#" data-click-toggle=".js-admin__options__toggle" title="Toggle Controls" a.button.button--danger href="#" data-click-toggle=".js-admin__options__toggle" title="Toggle Controls"
i.fa.fa-fw.fa-bars i.fa.icon--padded.small.fa-bars
span Toggle Controls span Toggle Controls
.profile-top__options.js-admin__options__toggle.hidden .profile-top__options.js-admin__options__toggle.hidden
ul.profile-admin__options__column ul.profile-admin__options__column
li li
= link to: Routes.profile_detail_path(@conn, :index, @user) do = link to: Routes.profile_detail_path(@conn, :index, @user) do
i.fa.fa-fw.fa-eye i.fa.icon--padded.small.fa-eye
span.admin__button View Details span.admin__button View Details
li li
= link to: Routes.search_path(@conn, :index, q: "upvoted_by_id:#{@user.id}") do = link to: Routes.search_path(@conn, :index, q: "upvoted_by_id:#{@user.id}") do
i.fa.fa-fw.fa-arrow-up i.fa.icon--padded.small.fa-arrow-up
span.admin__button Upvotes span.admin__button Upvotes
li li
= link to: Routes.search_path(@conn, :index, q: "downvoted_by_id:#{@user.id}") do = link to: Routes.search_path(@conn, :index, q: "downvoted_by_id:#{@user.id}") do
i.fa.fa-fw.fa-arrow-down i.fa.icon--padded.small.fa-arrow-down
span.admin__button Downvotes span.admin__button Downvotes
li li
= link to: Routes.search_path(@conn, :index, q: "hidden_by_id:#{@user.id}") do = link to: Routes.search_path(@conn, :index, q: "hidden_by_id:#{@user.id}") do
i.fa.fa-fw.fa-eye-slash i.fa.icon--padded.small.fa-eye-slash
span.admin__button Hidden Images span.admin__button Hidden Images
li li
= link to: Routes.admin_report_path(@conn, :index, rq: "user_id:#{@user.id}") do = link to: Routes.admin_report_path(@conn, :index, rq: "user_id:#{@user.id}") do
i.fa.fa-fw.fa-exclamation i.fa.icon--padded.small.fa-exclamation
span.admin__button Reports span.admin__button Reports
li li
= link to: Routes.profile_ip_history_path(@conn, :index, @user) do = link to: Routes.profile_ip_history_path(@conn, :index, @user) do
i.fab.fa-fw.fa-internet-explorer i.fab.icon--padded.small.fa-internet-explorer
span.admin__button IP History span.admin__button IP History
li li
= link to: Routes.profile_fp_history_path(@conn, :index, @user) do = link to: Routes.profile_fp_history_path(@conn, :index, @user) do
i.fa.fa-fw.fa-desktop i.fa.icon--padded.small.fa-desktop
span.admin__button FP History span.admin__button FP History
li li
= link to: Routes.profile_alias_path(@conn, :index, @user) do = link to: Routes.profile_alias_path(@conn, :index, @user) do
i.fa.fa-fw.fa-users i.fa.icon--padded.small.fa-users
span.admin__button Potential Aliases span.admin__button Potential Aliases
= if can?(@conn, :index, %Philomena.Donations.Donation{}) do = if can?(@conn, :index, %Philomena.Donations.Donation{}) do
li li
= link to: Routes.admin_donation_user_path(@conn, :show, @user) do = link to: Routes.admin_donation_user_path(@conn, :show, @user) do
i.fas.fa-fw.fa-dollar-sign i.fas.icon--padded.small.fa-dollar-sign
span.admin__button Donations span.admin__button Donations
ul.profile-admin__options__column ul.profile-admin__options__column
= if can?(@conn, :edit, @user) do = if can?(@conn, :edit, @user) do
li li
= link to: Routes.admin_user_path(@conn, :edit, @user) do = link to: Routes.admin_user_path(@conn, :edit, @user) do
i.fas.fa-fw.fa-edit i.fas.icon--padded.small.fa-edit
span.admin__button Edit User span.admin__button Edit User
li li
@ -109,30 +109,30 @@
= if @forced do = if @forced do
li li
= link to: Routes.profile_detail_path(@conn, :index, @user) do = link to: Routes.profile_detail_path(@conn, :index, @user) do
i.fa.fa-fw.fa-eye i.fa.icon--padded.small.fa-eye
span.admin__button View Details span.admin__button View Details
li li
= link to: Routes.search_path(@conn, :index, q: "upvoted_by_id:#{@user.id}") do = link to: Routes.search_path(@conn, :index, q: "upvoted_by_id:#{@user.id}") do
i.fa.fa-fw.fa-arrow-up i.fa.icon--padded.small.fa-arrow-up
span.admin__button Upvotes span.admin__button Upvotes
li li
= link to: Routes.search_path(@conn, :index, q: "downvoted_by_id:#{@user.id}") do = link to: Routes.search_path(@conn, :index, q: "downvoted_by_id:#{@user.id}") do
i.fa.fa-fw.fa-arrow-down i.fa.icon--padded.small.fa-arrow-down
span.admin__button Downvotes span.admin__button Downvotes
li li
= link to: Routes.admin_user_unlock_path(@conn, :create, @user), data: [method: "post"] do = link to: Routes.admin_user_unlock_path(@conn, :create, @user), data: [method: "post"] do
i.fas.fa-fw.fa-unlock i.fas.icon--padded.small.fa-unlock
span.admin__button Unlock Account span.admin__button Unlock Account
li li
= link to: Routes.admin_user_wipe_path(@conn, :create, @user), data: [confirm: "This is irreversible, destroying all identifying information including email. Are you sure?", method: "post"] do = link to: Routes.admin_user_wipe_path(@conn, :create, @user), data: [confirm: "This is irreversible, destroying all identifying information including email. Are you sure?", method: "post"] do
i.fas.fa-fw.fa-eraser i.fas.icon--padded.small.fa-eraser
span.admin__button Wipe PII span.admin__button Wipe PII
= if can?(@conn, :edit, %Philomena.ArtistLinks.ArtistLink{}) do = if can?(@conn, :edit, %Philomena.ArtistLinks.ArtistLink{}) do
li li
= link to: Routes.profile_artist_link_path(@conn, :new, @user) do = link to: Routes.profile_artist_link_path(@conn, :new, @user) do
i.fa.fa-fw.fa-link i.fa.icon--padded.small.fa-link
span.admin__button Add Artist Link span.admin__button Add Artist Link
li li
@ -144,33 +144,33 @@
= if can?(@conn, :index, Philomena.Users.User) do = if can?(@conn, :index, Philomena.Users.User) do
li li
= link to: Routes.admin_user_api_key_path(@conn, :delete, @user), data: [confirm: "Are you really, really sure?", method: "delete"] do = link to: Routes.admin_user_api_key_path(@conn, :delete, @user), data: [confirm: "Are you really, really sure?", method: "delete"] do
i.fas.fa-fw.fa-key i.fas.icon--padded.small.fa-key
span.admin__button Reset API key span.admin__button Reset API key
li li
= if @user.verified do = if @user.verified do
= link to: Routes.admin_user_verification_path(@conn, :delete, @user), data: [confirm: "Are you really, really sure?", method: "delete"] do = link to: Routes.admin_user_verification_path(@conn, :delete, @user), data: [confirm: "Are you really, really sure?", method: "delete"] do
i.fas.fa-fw.fa-user-times i.fas.icon--padded.small.fa-user-times
span.admin__button Revoke Verification span.admin__button Revoke Verification
- else - else
= link to: Routes.admin_user_verification_path(@conn, :create, @user), data: [confirm: "Are you really, really sure?", method: "create"] do = link to: Routes.admin_user_verification_path(@conn, :create, @user), data: [confirm: "Are you really, really sure?", method: "create"] do
i.fas.fa-fw.fa-user-check i.fas.icon--padded.small.fa-user-check
span.admin__button Grant Verification span.admin__button Grant Verification
ul.profile-admin__options__column ul.profile-admin__options__column
= if can?(@conn, :index, Philomena.Users.User) do = if can?(@conn, :index, Philomena.Users.User) do
li li
= link to: Routes.admin_user_vote_path(@conn, :delete, @user), data: [confirm: "Are you really, really sure?", method: "delete"] do = link to: Routes.admin_user_vote_path(@conn, :delete, @user), data: [confirm: "Are you really, really sure?", method: "delete"] do
i.far.fa-fw.fa-file-excel i.far.icon--padded.small.fa-file-excel
span.admin__button Remove All Votes/Faves span.admin__button Remove All Votes/Faves
li li
= link to: Routes.admin_user_downvote_path(@conn, :delete, @user), data: [confirm: "Are you really, really sure?", method: "delete"] do = link to: Routes.admin_user_downvote_path(@conn, :delete, @user), data: [confirm: "Are you really, really sure?", method: "delete"] do
i.fa.fa-fw.fa-arrow-down i.fa.icon--padded.small.fa-arrow-down
span.admin__button Remove All Downvotes span.admin__button Remove All Downvotes
= if @user.role == "user" and can?(@conn, :revert, Philomena.TagChanges.TagChange) do = if @user.role == "user" and can?(@conn, :revert, Philomena.TagChanges.TagChange) do
li li
= link to: Routes.tag_change_full_revert_path(@conn, :create, [user_id: @user.id]), data: [confirm: "Are you really, really sure?", method: "create"] do = link to: Routes.tag_change_full_revert_path(@conn, :create, [user_id: @user.id]), data: [confirm: "Are you really, really sure?", method: "create"] do
i.fa.fa-fw.fa-tag i.fa.icon--padded.small.fa-tag
span.admin__button Revert All Tag Changes span.admin__button Revert All Tag Changes

View file

@ -45,7 +45,7 @@
= if @forced && (current?(@user, @conn.assigns.current_user) or can_index_user?(@conn)) do = if @forced && (current?(@user, @conn.assigns.current_user) or can_index_user?(@conn)) do
.block .block
i.fa.fa-fw.fa-filter> i.fa.icon--padded.small.fa-filter>
strong.comment_deleted> Forced Filter: strong.comment_deleted> Forced Filter:
= link @forced.name, to: Routes.filter_path(@conn, :show, @forced) = link @forced.name, to: Routes.filter_path(@conn, :show, @forced)

View file

@ -30,7 +30,7 @@ h1 Staff
i class="fa #{category_icon(header)}" i class="fa #{category_icon(header)}"
= header = header
p.staff-block__description p.staff-block__description
i.fa.fa-fw.fa-info-circle> i.fa.icon--padded.small.fa-info-circle>
= category_description(header) = category_description(header)
.staff-block__grid .staff-block__grid

View file

@ -32,7 +32,7 @@ h1 = @topic.title
= if not @topic.hidden_from_users or can?(@conn, :hide, @topic) do = if not @topic.hidden_from_users or can?(@conn, :hide, @topic) do
a href=Routes.post_path(@conn, :index, pq: "topic_id:#{@topic.id}") a href=Routes.post_path(@conn, :index, pq: "topic_id:#{@topic.id}")
i.fa.fa-fw.fa-search> i.fa.icon--padded.small.fa-search>
' Search Posts ' Search Posts
.flex.flex--wrap.block__header.block__header--light.page__header .flex.flex--wrap.block__header.block__header--light.page__header
.flex--fixed.page__pagination .flex--fixed.page__pagination