diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 1bfe3179..3673b8b7 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -4,6 +4,7 @@ Contributors of this project. - Coco Snuss (cocosnuss@social.heldscal.la): Code - wakarimasen (wakarimasen@shitposter.club): NSFW hiding image - dtluna (dtluna@social.heldscal.la): Code -- sonyam (sonyam@social.heldscal.la): Default background image +- sonyam (sonyam@social.heldscal.la): Background images - hakui (hakui@freezepeach.xyz): CSS and styling -- shpuld (shpuld@shitposter.club): CSS and styling \ No newline at end of file +- shpuld (shpuld@shitposter.club): CSS and styling +- Vincent Guth (https://unsplash.com/photos/XrwVIFy6rTw): Background images. diff --git a/src/App.scss b/src/App.scss index 95a653ce..a8601220 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1,10 +1,13 @@ @import './_variables.scss'; + #app { - background-size: cover; - background-attachment: fixed; - background-repeat: no-repeat; - background-position: 0 50px; - min-height: 100vh; + background-size: cover; + background-attachment: fixed; + background-repeat: no-repeat; + background-position: 0 50px; + min-height: 100vh; + max-width: 100%; + overflow: hidden; } i { @@ -12,7 +15,7 @@ i { } h4 { - margin: 0; + margin: 0; } #content { @@ -26,154 +29,286 @@ h4 { } .text-center { - text-align: center; + text-align: center; } body { - font-family: sans-serif; - font-size: 14px; - margin: 0; + font-family: sans-serif; + font-size: 14px; + margin: 0; + color: $fallback--fg; + color: var(--fg, $fallback--fg); + max-width: 100vw; + overflow-x: hidden; } a { - text-decoration: none; + text-decoration: none; + color: $fallback--link; + color: var(--link, $fallback--link); } button{ - user-select: none; - border: none; - border-radius: 5px; - cursor: pointer; - border-top: 1px solid rgba(255, 255, 255, 0.2); - border-bottom: 1px solid rgba(0, 0, 0, 0.2); - box-shadow: 0px 0px 2px black; - font-size: 14px; - font-family: sans-serif; + user-select: none; + color: $fallback--fg; + color: var(--fg, $fallback--fg); + background-color: $fallback--btn; + background-color: var(--btn, $fallback--btn); + border: none; + border-radius: $fallback--btnRadius; + border-radius: var(--btnRadius, $fallback--btnRadius); + cursor: pointer; + border-top: 1px solid rgba(255, 255, 255, 0.2); + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: 0px 0px 2px black; + font-size: 14px; + font-family: sans-serif; - &:hover { - box-shadow: 0px 0px 4px rgba(255, 255, 255, 0.3); - } + &:hover { + box-shadow: 0px 0px 4px rgba(255, 255, 255, 0.3); + } - &:disabled { - cursor: not-allowed; - opacity: 0.5; - } + &:disabled { + cursor: not-allowed; + opacity: 0.5; + } + + &.pressed { + color: $fallback--faint; + color: var(--faint, $fallback--faint); + background-color: $fallback--bg; + background-color: var(--bg, $fallback--bg) + } } -.container { - display: flex; - flex-wrap: wrap; +label.select { + padding: 0; + +} + +input, textarea, .select { + border: none; + border-radius: $fallback--btnRadius; + border-radius: var(--btnRadius, $fallback--btnRadius); + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + border-top: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: 0px 0px 2px black inset; + background-color: $fallback--lightBg; + background-color: var(--lightBg, $fallback--lightBg); + color: $fallback--lightFg; + color: var(--lightFg, $fallback--lightFg); + font-family: sans-serif; + font-size: 14px; + padding: 8px 7px; + box-sizing: border-box; + display: inline-block; + position: relative; + height: 29px; + line-height: 16px; + + .icon-down-open { + position: absolute; + top: 0; + bottom: 0; + right: 5px; + height: 100%; + color: $fallback--fg; + color: var(--fg, $fallback--fg); + line-height: 29px; + z-index: 0; + pointer-events: none; + } + + select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: transparent; + border: none; margin: 0; - padding: 0 10px 0 10px; + color: $fallback--fg; + color: var(--fg, $fallback--fg); + padding: 4px 2em 3px 3px; + width: 100%; + z-index: 1; + height: 29px; + line-height: 16px; + } + + &[type=radio], + &[type=checkbox] { + display: none; + &:checked + label::before { + color: $fallback--fg; + color: var(--fg, $fallback--fg); + } + + label::before { + display: inline-block; + content: '✔'; + transition: color 200ms; + width: 1.1em; + height: 1.1em; + border-radius: $fallback--checkBoxRadius; + border-radius: var(--checkBoxRadius, $fallback--checkBoxRadius); + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + border-top: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: 0px 0px 2px black inset; + margin-right: .5em; + background-color: $fallback--btn; + background-color: var(--btn, $fallback--btn); + vertical-align: top; + text-align: center; + line-height: 1.1em; + font-size: 1.1em; + box-sizing: border-box; + color: transparent; + overflow: hidden; + box-sizing: border-box; + } + } +} + +i[class*=icon-] { + color: $fallback--icon; + color: var(--icon, $fallback--icon) +} + + +.container { + display: flex; + flex-wrap: wrap; + margin: 0; + padding: 0 10px 0 10px; } .gaps { - margin: -1em 0 0 -1em; + margin: -1em 0 0 -1em; } .item { - flex: 1; - line-height: 21px; - height: 21px; - overflow: hidden; + flex: 1; + line-height: 50px; + height: 50px; + overflow: hidden; - .nav-icon { - font-size: 1.1em; - margin-left: 0.4em; - } + .nav-icon { + font-size: 1.1em; + margin-left: 0.4em; + } } .gaps > .item { - padding: 1em 0 0 1em; + padding: 1em 0 0 1em; } .auto-size { - flex: 1 + flex: 1 } nav { - width: 100%; - align-items: center; - position: fixed; - height: 50px; + width: 100%; + align-items: center; + position: fixed; + height: 50px; - .inner-nav { - padding-left: 20px; - padding-right: 20px; - display: flex; - align-items: center; - flex-basis: 970px; - margin: auto; - height: 50px; - background-repeat: no-repeat; - background-position: center; - background-size: contain; + .inner-nav { + padding-left: 20px; + padding-right: 20px; + display: flex; + align-items: center; + flex-basis: 970px; + margin: auto; + height: 50px; + background-repeat: no-repeat; + background-position: center; + background-size: auto 80%; + + a i { + color: $fallback--link; + color: var(--link, $fallback--link); } + } } main-router { - flex: 1; + flex: 1; } .status.compact { - color: rgba(0, 0, 0, 0.42); - font-weight: 300; + color: rgba(0, 0, 0, 0.42); + font-weight: 300; - p { - margin: 0; - font-size: 0.8em - } + p { + margin: 0; + font-size: 0.8em + } } /* Panel */ .panel { - display: flex; - flex-direction: column; - margin: 0.5em; + display: flex; + flex-direction: column; + margin: 0.5em; - border-radius: 10px; - box-shadow: 1px 1px 4px rgba(0,0,0,.6); - overflow: hidden; + background-color: $fallback--bg; + background-color: var(--bg, $fallback--bg); + + border-radius: $fallback--panelRadius; + border-radius: var(--panelRadius, $fallback--panelRadius); + box-shadow: 1px 1px 4px rgba(0,0,0,.6); } .panel-body:empty::before { - content: "¯\\_(ツ)_/¯"; // Could use words but it'd require translations - display: block; - margin: 1em; - text-align: center; + content: "¯\\_(ツ)_/¯"; // Could use words but it'd require translations + display: block; + margin: 1em; + text-align: center; } .panel-heading { - border-radius: 10px 10px 0 0; - background-size: cover; - padding: 0.6em 1.0em; - text-align: left; - font-size: 1.3em; - line-height: 24px; + border-radius: $fallback--panelRadius $fallback--panelRadius 0 0; + border-radius: var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius) 0 0; + background-size: cover; + padding: 0.6em 1.0em; + text-align: left; + font-size: 1.3em; + line-height: 24px; + background-color: $fallback--btn; + background-color: var(--btn, $fallback--btn); +} + +.panel-heading.stub { + border-radius: $fallback--panelRadius; + border-radius: var(--panelRadius, $fallback--panelRadius); } .panel-footer { - border-radius: 0 0 10px 10px; + border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius; + border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius); } .panel-body > p { - line-height: 18px; - padding: 1em; - margin: 0; + line-height: 18px; + padding: 1em; + margin: 0; } .container > * { - min-width: 0px; + min-width: 0px; } .fa { - color: grey; + color: grey; } nav { - z-index: 1000; - box-shadow: 0px 0px 4px rgba(0,0,0,.6); + z-index: 1000; + background-color: $fallback--btn; + background-color: var(--btn, $fallback--btn); + color: $fallback--faint; + color: var(--faint, $fallback--faint); + box-shadow: 0px 0px 4px rgba(0,0,0,.6); } .fade-enter-active, .fade-leave-active { @@ -184,9 +319,9 @@ nav { } .main { - flex-basis: 60%; - flex-grow: 1; - flex-shrink: 1; + flex-basis: 60%; + flex-grow: 1; + flex-shrink: 1; } .sidebar-bounds { @@ -201,20 +336,20 @@ nav { } .mobile-shown { - display: none; + display: none; } .panel-switcher { - display: none; - width: 100%; - height: 46px; - button { - display: block; - flex: 1; - max-height: 32px; - margin: 0.5em; - padding: 0.5em; - } + display: none; + width: 100%; + height: 46px; + button { + display: block; + flex: 1; + max-height: 32px; + margin: 0.5em; + padding: 0.5em; + } } @media all and (min-width: 960px) { @@ -248,25 +383,46 @@ nav { } } +.alert { + margin: 0.35em; + padding: 0.25em; + border-radius: $fallback--tooltipRadius; + border-radius: var(--tooltipRadius, $fallback--tooltipRadius); + color: $fallback--faint; + color: var(--faint, $fallback--faint); + min-height: 28px; + line-height: 28px; + + &.error { + background-color: $fallback--cAlertRed; + background-color: var(--cAlertRed, $fallback--cAlertRed); + } +} + +.faint { + color: $fallback--faint; + color: var(--faint, $fallback--faint); +} + @media all and (max-width: 959px) { - .mobile-hidden { - display: none; - } + .mobile-hidden { + display: none; + } - .panel-switcher { - display: flex; - } + .panel-switcher { + display: flex; + } - .container { - padding: 0 0 0 0; - } + .container { + padding: 0 0 0 0; + } - .panel { - margin: 0.5em 0 0.5em 0; - } + .panel { + margin: 0.5em 0 0.5em 0; + } } .item.right { - text-align: right; - padding-right: 20px; + text-align: right; + padding-right: 20px; } diff --git a/src/App.vue b/src/App.vue index 1d8dd6c8..923d411b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,6 +1,6 @@ diff --git a/src/_variables.scss b/src/_variables.scss index d2b7065d..d90a1d48 100644 --- a/src/_variables.scss +++ b/src/_variables.scss @@ -1,7 +1,27 @@ $main-color: #f58d2c; $main-background: white; $darkened-background: whitesmoke; -$green: #0fa00f; -$blue: #0095ff; -$red: #ff0000; +$fallback--bg: #121a24; +$fallback--btn: #182230; +$fallback--faint: #999; +$fallback--fg: #b9b9ba; +$fallback--link: #d8a070; +$fallback--icon: #666; +$fallback--lightBg: rgb(21, 30, 42); +$fallback--lightFg: #b9b9ba; +$fallback--border: #222; +$fallback--cRed: #ff0000; +$fallback--cBlue: #0095ff; +$fallback--cGreen: #0fa00f; +$fallback--cOrange: orange; + +$fallback--cAlertRed: rgba(211,16,20,.5); + +$fallback--panelRadius: 10px; +$fallback--checkBoxRadius: 2px; +$fallback--btnRadius: 4px; +$fallback--tooltipRadius: 5px; +$fallback--avatarRadius: 4px; +$fallback--avatarAltRadius: 10px; +$fallback--attachmentRadius: 10px; diff --git a/src/components/attachment/attachment.js b/src/components/attachment/attachment.js index 8a2a3826..d9bc4477 100644 --- a/src/components/attachment/attachment.js +++ b/src/components/attachment/attachment.js @@ -1,3 +1,4 @@ +import StillImage from '../still-image/still-image.vue' import nsfwImage from '../../assets/nsfw.png' import fileTypeService from '../../services/file_type/file_type.service.js' @@ -5,7 +6,8 @@ const Attachment = { props: [ 'attachment', 'nsfw', - 'statusId' + 'statusId', + 'size' ], data () { return { @@ -16,6 +18,9 @@ const Attachment = { img: document.createElement('img') } }, + components: { + StillImage + }, computed: { type () { return fileTypeService.fileType(this.attachment.mimetype) @@ -25,6 +30,12 @@ const Attachment = { }, isEmpty () { return (this.type === 'html' && !this.attachment.oembed) || this.type === 'unknown' + }, + isSmall () { + return this.size === 'small' + }, + fullwidth () { + return fileTypeService.fileType(this.attachment.mimetype) === 'html' } }, methods: { diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue index d6a51ffd..b2f63668 100644 --- a/src/components/attachment/attachment.vue +++ b/src/components/attachment/attachment.vue @@ -1,5 +1,8 @@