mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-22 22:41:27 +00:00
Add basic CW/NSFW support
This commit is contained in:
parent
0e316aabdc
commit
63343ae503
7 changed files with 185 additions and 3 deletions
|
@ -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
BIN
public/css/app.css
vendored
Binary file not shown.
Binary file not shown.
14
resources/assets/sass/_variables.scss
vendored
14
resources/assets/sass/_variables.scss
vendored
|
@ -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
|
||||||
|
);
|
2
resources/assets/sass/app.scss
vendored
2
resources/assets/sass/app.scss
vendored
|
@ -14,3 +14,5 @@
|
||||||
@import "components/typeahead";
|
@import "components/typeahead";
|
||||||
|
|
||||||
@import "components/notifications";
|
@import "components/notifications";
|
||||||
|
|
||||||
|
@import "components/switch";
|
152
resources/assets/sass/components/switch.scss
vendored
Normal file
152
resources/assets/sass/components/switch.scss
vendored
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue