mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-23 20:18:00 +01:00
prettier
This commit is contained in:
parent
f659023649
commit
9d04f2b43e
42 changed files with 258 additions and 140 deletions
7
assets/.prettierrc.yml
Normal file
7
assets/.prettierrc.yml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
tabWidth: 2
|
||||||
|
useTabs: false
|
||||||
|
printWidth: 120
|
||||||
|
semi: true
|
||||||
|
singleQuote: false
|
||||||
|
bracketSpacing: true
|
||||||
|
endOfLine: lf
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
ul, ol {
|
ul,
|
||||||
|
ol {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.checkbox:after {
|
.checkbox:after {
|
||||||
content: '\f00d';
|
content: "\f00d";
|
||||||
}
|
}
|
||||||
|
|
||||||
.checkbox:checked:after {
|
.checkbox:checked:after {
|
||||||
content: '\f00c';
|
content: "\f00c";
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
header > *, nav.header__secondary > * {
|
header > *,
|
||||||
|
nav.header__secondary > * {
|
||||||
margin-left: var(--padding-large);
|
margin-left: var(--padding-large);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
51
assets/package-lock.json
generated
51
assets/package-lock.json
generated
|
@ -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",
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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})
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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&sf=wilson_score&sd=desc"
|
a href="/search?q=first_seen_at.gt:3 days ago&sf=wilson_score&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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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…')
|
i.fa.fa-cog.icon--padded.small.fa-spin.js-preview-loading.hidden> title=raw('Loading preview…')
|
||||||
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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue