--- /dev/null
+
+<template>
+ <div class="toggle-switch" v-on="click: switch" v-class="active: isActive">
+ <input type="hidden" v-attr="name: name, value: value"/>
+ <div class="switch-handle"></div>
+ </div>
+</template>
+
+
+<script>
+ module.exports = {
+ props: ['name', 'value'],
+ data: function() {
+ return {
+ isActive: this.value == true && this.value != 'false'
+ }
+ },
+ ready: function() {
+ this.value = (this.value == true && this.value != 'false') ? 'true' : 'false';
+ },
+ methods: {
+ switch: function() {
+ this.isActive = !this.isActive;
+ this.value = this.isActive ? 'true' : 'false';
+ }
+ }
+ }
+</script>
\ No newline at end of file
// Vue Components
Vue.component('image-manager', require('./components/image-manager.vue'));
Vue.component('image-picker', require('./components/image-picker.vue'));
+Vue.component('toggle-switch', require('./components/toggle-switch.vue'));
// Vue Controllers
if(elemExists('#book-dashboard')) {
@extend .input-base;
}
+.toggle-switch {
+ display: inline-block;
+ background-color: #BBB;
+ width: 36px;
+ height: 14px;
+ border-radius: 7px;
+ position: relative;
+ transition: all ease-in-out 120ms;
+ cursor: pointer;
+ user-select: none;
+ .switch-handle {
+ display: block;
+ position: relative;
+ left: 0;
+ margin-top: -3px;
+ width: 20px;
+ height: 20px;
+ border-radius: 50%;
+ background-color: #fafafa;
+ border: 1px solid #CCC;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);
+ transition: all ease-in-out 120ms;
+ }
+ &.active {
+ background-color: rgba($positive, 0.4);
+ .switch-handle {
+ left: 16px;
+ background-color: $positive;
+ border: darken($positive, 20%);
+ }
+ }
+}
+
.form-group {
margin-bottom: $-s;
}
.col-xs-offset-0 {
margin-left: 0%;
}
-@media (min-width: 768px) {
+@media (min-width: $screen-sm) {
.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
float: left;
}
margin-left: 0%;
}
}
-@media (min-width: 992px) {
+@media (min-width: $screen-md) {
.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
float: left;
}
margin-left: 0%;
}
}
-@media (min-width: 1200px) {
+@media (min-width: $screen-lg) {
.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
float: left;
}
display: inline-block;
vertical-align: top;
margin-right: $-xl;
+ @include smaller-than($screen-md) {
+ margin-right: $-m;
+ }
}
.links a {
display: inline-block;
&:last-child {
padding-right: 0;
}
+ @include smaller-than($screen-md) {
+ padding: $-l $-s;
+ }
}
.avatar, .user-name {
display: inline-block;
}
.avatar {
- margin-top: (45px/2);
+ //margin-top: (45px/2);
width: 30px;
height: 30px;
}
.user-name {
vertical-align: top;
- padding-top: 25.5px;
- padding-left: $-m;
+ padding-top: $-l;
display: inline-block;
cursor: pointer;
- i {
+ > * {
+ vertical-align: top;
+ }
+ > span, > i {
+ padding-left: $-xs;
+ display: inline-block;
+ }
+ > span {
+ padding-top: $-xxs;
+ }
+ > i {
+ padding-top: $-xs*1.2;
+ }
+ @include smaller-than($screen-md) {
padding-left: $-xs;
+ .name {
+ display: none;
+ }
+ i {
+ font-size: 2em;
+ padding-left: 0;
+ padding-top: 0;
+ }
+ }
+ }
+ @include smaller-than($screen-md) {
+ text-align: center;
+ .float.right {
+ float: none;
+ }
+ }
+ @include smaller-than($screen-sm) {
+ .links a {
+ padding: $-s;
+ }
+ form.search-box {
+ margin-top: 0;
+ }
+ .user-name {
+ padding-top: $-s;
}
}
}
min-width: 180px;
padding: $-xs 0;
color: #555;
+ text-align: left !important;
a {
display: block;
padding: $-xs $-m;
$s: 600px;
$xs: 400px;
$xxs: 360px;
-$screen-md: 992px;
$screen-lg: 1200px;
+$screen-md: 992px;
$screen-sm: 768px;
// Spacing (Margins+Padding)
<header id="header">
<div class="container">
<div class="row">
- <div class="col-md-4 col-sm-3">
+ <div class="col-lg-4 col-sm-4">
<a href="/" class="logo">
@if(Setting::get('app-logo', '') !== 'none')
<img class="logo-image" src="{{ Setting::get('app-logo', '') === '' ? '/logo.png' : Setting::get('app-logo', '') }}" alt="Logo">
<span class="logo-text">{{ Setting::get('app-name', 'BookStack') }}</span>
</a>
</div>
- <div class="col-md-4 col-sm-3 text-center">
+ <div class="col-lg-4 col-sm-3 text-center">
<form action="/search/all" method="GET" class="search-box">
<input type="text" name="term" tabindex="2" value="{{ isset($searchTerm) ? $searchTerm : '' }}">
<button class="text-button"><i class="zmdi zmdi-search"></i></button>
</form>
</div>
- <div class="col-md-4 col-sm-6">
+ <div class="col-lg-4 col-sm-5">
<div class="float right">
<div class="links text-center">
<a href="/books"><i class="zmdi zmdi-book"></i>Books</a>
@endif
</div>
@if($signedIn)
- <img class="avatar" src="{{$currentUser->getAvatar(30)}}" alt="{{ $currentUser->name }}">
<div class="dropdown-container" data-dropdown>
<span class="user-name" data-dropdown-toggle>
- {{ $currentUser->name }} <i class="zmdi zmdi-caret-down"></i>
+ <img class="avatar" src="{{$currentUser->getAvatar(30)}}" alt="{{ $currentUser->name }}">
+ <span class="name">{{ $currentUser->name }}</span> <i class="zmdi zmdi-caret-down"></i>
</span>
<ul>
<li>
<input type="text" value="{{ Setting::get('app-name', 'BookStack') }}" name="setting-app-name" id="setting-app-name">
</div>
<div class="form-group">
- <label for="setting-app-public">Allow public viewing?</label>
- <label><input type="radio" name="setting-app-public" @if(Setting::get('app-public')) checked @endif value="true"> Yes</label>
- <label><input type="radio" name="setting-app-public" @if(!Setting::get('app-public')) checked @endif value="false"> No</label>
+ <label>Allow public viewing?</label>
+ <toggle-switch name="setting-app-public" value="{{ Setting::get('app-public') }}"></toggle-switch>
</div>
</div>
<div class="col-md-6">
<div class="col-md-6">
<div class="form-group">
<label for="setting-registration-enabled">Allow registration?</label>
- <label><input type="radio" name="setting-registration-enabled" @if(Setting::get('registration-enabled')) checked @endif value="true"> Yes</label>
- <label><input type="radio" name="setting-registration-enabled" @if(!Setting::get('registration-enabled')) checked @endif value="false"> No</label>
+ <toggle-switch name="setting-registration-enabled" value="{{ Setting::get('registration-enabled') }}"></toggle-switch>
</div>
<div class="form-group">
<label for="setting-registration-role">Default user role after registration</label>
<div class="form-group">
<label for="setting-registration-confirmation">Require Email Confirmation?</label>
<p class="small">If domain restriction is used then email confirmation will be required and the below value will be ignored.</p>
- <label><input type="radio" name="setting-registration-confirmation" @if(Setting::get('registration-confirmation')) checked @endif value="true"> Yes</label>
- <label><input type="radio" name="setting-registration-confirmation" @if(!Setting::get('registration-confirmation')) checked @endif value="false"> No</label>
+ <toggle-switch name="setting-registration-confirmation" value="{{ Setting::get('registration-confirmation') }}"></toggle-switch>
</div>
</div>
<div class="col-md-6">