Add basic CW/NSFW support

This commit is contained in:
Daniel Supernault 2018-06-09 16:29:36 -06:00
parent 0e316aabdc
commit 63343ae503
7 changed files with 185 additions and 3 deletions

View file

@ -33,9 +33,11 @@ class StatusController extends Controller
$this->validate($request, [ $this->validate($request, [
'photo' => 'required|mimes:jpeg,png,bmp,gif|max:' . config('pixelfed.max_photo_size'), 'photo' => 'required|mimes:jpeg,png,bmp,gif|max:' . config('pixelfed.max_photo_size'),
'caption' => 'string|max:' . config('pixelfed.max_caption_length') 'caption' => 'string|max:' . config('pixelfed.max_caption_length'),
'cw' => 'nullable|string'
]); ]);
$cw = $request->filled('cw') && $request->cw == 'on' ? true : false;
$monthHash = hash('sha1', date('Y') . date('m')); $monthHash = hash('sha1', date('Y') . date('m'));
$userHash = hash('sha1', $user->id . (string) $user->created_at); $userHash = hash('sha1', $user->id . (string) $user->created_at);
$storagePath = "public/m/{$monthHash}/{$userHash}"; $storagePath = "public/m/{$monthHash}/{$userHash}";
@ -45,6 +47,8 @@ class StatusController extends Controller
$status = new Status; $status = new Status;
$status->profile_id = $profile->id; $status->profile_id = $profile->id;
$status->caption = $request->caption; $status->caption = $request->caption;
$status->is_nsfw = $cw;
$status->save(); $status->save();
$media = new Media; $media = new Media;

BIN
public/css/app.css vendored

Binary file not shown.

Binary file not shown.

View file

@ -6,3 +6,17 @@ $body-bg: #f5f8fa;
$font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif; $font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
$font-size-base: 0.9rem; $font-size-base: 0.9rem;
$line-height-base: 1.6; $line-height-base: 1.6;
$font-size-lg: ($font-size-base * 1.25);
$font-size-sm: ($font-size-base * .875);
$input-height: 2.375rem;
$input-height-sm: 1.9375rem;
$input-height-lg: 3rem;
$input-btn-focus-width: .2rem;
$custom-control-indicator-bg: #dee2e6;
$custom-control-indicator-disabled-bg: #e9ecef;
$custom-control-description-disabled-color: #868e96;
$white: white;
$theme-colors: (
'primary': #08d
);

View file

@ -13,4 +13,6 @@
@import "components/typeahead"; @import "components/typeahead";
@import "components/notifications"; @import "components/notifications";
@import "components/switch";

View file

@ -0,0 +1,152 @@
$switch-height: calc(#{$input-height} * .8) !default;
$switch-height-sm: calc(#{$input-height-sm} * .8) !default;
$switch-height-lg: calc(#{$input-height-lg} * .8) !default;
$switch-border-radius: $switch-height !default;
$switch-bg: $custom-control-indicator-bg !default;
$switch-checked-bg: map-get($theme-colors, 'danger') !default;
$switch-disabled-bg: $custom-control-indicator-disabled-bg !default;
$switch-disabled-color: $custom-control-description-disabled-color !default;
$switch-thumb-bg: $white !default;
$switch-thumb-border-radius: 50% !default;
$switch-thumb-padding: 2px !default;
$switch-focus-box-shadow: 0 0 0 $input-btn-focus-width rgba(map-get($theme-colors, 'primary'), .25);
$switch-transition: .2s all !default;
.switch {
font-size: $font-size-base;
position: relative;
input {
position: absolute;
height: 1px;
width: 1px;
background: none;
border: 0;
clip: rect(0 0 0 0);
clip-path: inset(50%);
overflow: hidden;
padding: 0;
+ label {
position: relative;
min-width: calc(#{$switch-height} * 2);
border-radius: $switch-border-radius;
height: $switch-height;
line-height: $switch-height;
display: inline-block;
cursor: pointer;
outline: none;
user-select: none;
vertical-align: middle;
text-indent: calc(calc(#{$switch-height} * 2) + .5rem);
}
+ label::before,
+ label::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: calc(#{$switch-height} * 2);
bottom: 0;
display: block;
}
+ label::before {
right: 0;
background-color: $switch-bg;
border-radius: $switch-border-radius;
transition: $switch-transition;
}
+ label::after {
top: $switch-thumb-padding;
left: $switch-thumb-padding;
width: calc(#{$switch-height} - calc(#{$switch-thumb-padding} * 2));
height: calc(#{$switch-height} - calc(#{$switch-thumb-padding} * 2));
border-radius: $switch-thumb-border-radius;
background-color: $switch-thumb-bg;
transition: $switch-transition;
}
&:checked + label::before {
background-color: $switch-checked-bg;
}
&:checked + label::after {
margin-left: $switch-height;
}
&:focus + label::before {
outline: none;
box-shadow: $switch-focus-box-shadow;
}
&:disabled + label {
color: $switch-disabled-color;
cursor: not-allowed;
}
&:disabled + label::before {
background-color: $switch-disabled-bg;
}
}
// Small variation
&.switch-sm {
font-size: $font-size-sm;
input {
+ label {
min-width: calc(#{$switch-height-sm} * 2);
height: $switch-height-sm;
line-height: $switch-height-sm;
text-indent: calc(calc(#{$switch-height-sm} * 2) + .5rem);
}
+ label::before {
width: calc(#{$switch-height-sm} * 2);
}
+ label::after {
width: calc(#{$switch-height-sm} - calc(#{$switch-thumb-padding} * 2));
height: calc(#{$switch-height-sm} - calc(#{$switch-thumb-padding} * 2));
}
&:checked + label::after {
margin-left: $switch-height-sm;
}
}
}
// Large variation
&.switch-lg {
font-size: $font-size-lg;
input {
+ label {
min-width: calc(#{$switch-height-lg} * 2);
height: $switch-height-lg;
line-height: $switch-height-lg;
text-indent: calc(calc(#{$switch-height-lg} * 2) + .5rem);
}
+ label::before {
width: calc(#{$switch-height-lg} * 2);
}
+ label::after {
width: calc(#{$switch-height-lg} - calc(#{$switch-thumb-padding} * 2));
height: calc(#{$switch-height-lg} - calc(#{$switch-thumb-padding} * 2));
}
&:checked + label::after {
margin-left: $switch-height-lg;
}
}
}
+ .switch {
margin-left: 1rem;
}
}

View file

@ -12,11 +12,21 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="font-weight-bold text-muted small">Caption</label> <label class="font-weight-bold text-muted small">Caption</label>
<input type="text" class="form-control" name="caption" placeholder="Add a caption here"> <input type="text" class="form-control" name="caption" placeholder="Add a caption here" autocomplete="off">
<small class="form-text text-muted"> <small class="form-text text-muted">
Max length: {{config('pixelfed.max_caption_length')}} characters. Max length: {{config('pixelfed.max_caption_length')}} characters.
</small> </small>
</div> </div>
<div class="form-group">
<label class="font-weight-bold text-muted small">CW/NSFW</label>
<div class="switch switch-sm">
<input type="checkbox" class="switch" id="cw-switch" name="cw">
<label for="cw-switch" class="small font-weight-bold">(Default off)</label>
</div>
<small class="form-text text-muted">
Please mark all NSFW and controversial content, as per our content policy.
</small>
</div>
<button type="submit" class="btn btn-outline-primary btn-block">Post</button> <button type="submit" class="btn btn-outline-primary btn-block">Post</button>
</form> </form>
</div> </div>