Merge pull request #115 from joecohens/feature/dashboard-redesign
Feature/dashboard redesign
This commit is contained in:
@@ -4,4 +4,6 @@ $(function() {
|
||||
$('.wrapper').toggleClass('active');
|
||||
});
|
||||
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
|
||||
});
|
||||
|
||||
3
app/assets/sass/_helpers.scss
Normal file
3
app/assets/sass/_helpers.scss
Normal file
@@ -0,0 +1,3 @@
|
||||
.uppercase {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
@@ -6,13 +6,21 @@ html, body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
@import "modules/tabs";
|
||||
@import "helpers";
|
||||
|
||||
// Module overrides
|
||||
@import "modules/tabs";
|
||||
@import "modules/forms";
|
||||
|
||||
// Styles for partials
|
||||
@import "partials/base";
|
||||
@import "partials/wrapper";
|
||||
@import "partials/navbar";
|
||||
@import "partials/sidebar";
|
||||
@import "partials/content";
|
||||
|
||||
// Styles for specific page
|
||||
@import "pages/login";
|
||||
|
||||
// Status Page will need to override certain styles.
|
||||
@import "status-page";
|
||||
|
||||
@@ -1,49 +1,52 @@
|
||||
// Bootstrap variable overrides and custom variables
|
||||
@import "variables";
|
||||
|
||||
// Core variables and mixins
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/variables";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/variables";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins";
|
||||
|
||||
// Reset and dependencies
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/normalize";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/print";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/normalize";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/print";
|
||||
|
||||
// Core CSS
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/scaffolding";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/type";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/code";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/grid";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/tables";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/forms";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/buttons";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/scaffolding";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/type";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/code";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/grid";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/tables";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/forms";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/buttons";
|
||||
|
||||
// Components
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/component-animations";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/dropdowns";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/button-groups";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/input-groups";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/navs";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/navbar";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/breadcrumbs";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/pagination";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/pager";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/labels";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/badges";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/jumbotron";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/thumbnails";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/alerts";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/progress-bars";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/media";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/list-group";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/panels";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/responsive-embed";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/wells";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/close";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/component-animations";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/dropdowns";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/button-groups";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/input-groups";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/navs";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/navbar";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/breadcrumbs";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/pagination";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/pager";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/labels";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/badges";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/jumbotron";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/thumbnails";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/alerts";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/progress-bars";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/media";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/list-group";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/panels";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/responsive-embed";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/wells";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/close";
|
||||
|
||||
// Components w/ JavaScript
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/modals";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/tooltip";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/popovers";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/carousel";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/modals";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/tooltip";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/popovers";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/carousel";
|
||||
|
||||
// Utility classes
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/utilities";
|
||||
@import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/responsive-utilities";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/utilities";
|
||||
@import "../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/responsive-utilities";
|
||||
|
||||
19
app/assets/sass/modules/_forms.scss
Normal file
19
app/assets/sass/modules/_forms.scss
Normal file
@@ -0,0 +1,19 @@
|
||||
label {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
@include box-shadow(none);
|
||||
}
|
||||
|
||||
input.form-control {
|
||||
padding: 2px 8px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.form-control:focus {
|
||||
padding: 2px 8px;
|
||||
border: 1px solid #999;
|
||||
outline: 0;
|
||||
@include box-shadow(none);
|
||||
}
|
||||
5
app/assets/sass/modules/_variables.scss
Normal file
5
app/assets/sass/modules/_variables.scss
Normal file
@@ -0,0 +1,5 @@
|
||||
$brand-success: #7ed321 !default;
|
||||
|
||||
//** Tooltip background color
|
||||
$tooltip-bg: #333 !default;
|
||||
$tooltip-opacity: .9 !default;
|
||||
18
app/assets/sass/pages/_login.scss
Normal file
18
app/assets/sass/pages/_login.scss
Normal file
@@ -0,0 +1,18 @@
|
||||
.login {
|
||||
padding-top: 90px;
|
||||
}
|
||||
|
||||
.login .logo {
|
||||
display: block;
|
||||
margin: 0 auto 30px;
|
||||
}
|
||||
|
||||
.login legend {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
margin: 0 0 30px 0;
|
||||
}
|
||||
@@ -3,7 +3,6 @@ body.dashboard {
|
||||
font-weight: $base-font-weight;
|
||||
font-size: $base-font-size;
|
||||
letter-spacing: $base-letter-spacing;
|
||||
background: $base-background-color;
|
||||
display: table;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
body.dashboard {
|
||||
.content {
|
||||
padding-top: 69px;
|
||||
position: relative;
|
||||
display: table-cell;
|
||||
vertical-align: top;
|
||||
@@ -9,11 +8,21 @@ body.dashboard {
|
||||
margin: 10px 0;
|
||||
}
|
||||
.header {
|
||||
background: #fff;
|
||||
padding: 14px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
color: #333;
|
||||
background-color: #fff;
|
||||
padding: 22px 14px;
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
height: 70px;
|
||||
font-size: 1.2em;
|
||||
border-bottom: 1px solid #eee;
|
||||
z-index: 99;
|
||||
&.fixed {
|
||||
position: fixed;
|
||||
padding-left: 250px;
|
||||
}
|
||||
i {
|
||||
// padding-right: 10px;
|
||||
}
|
||||
@@ -28,10 +37,28 @@ body.dashboard {
|
||||
+ .row {
|
||||
margin-top: 23px;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin-top: 0;
|
||||
h3 {
|
||||
color: #444;
|
||||
margin-top: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
}
|
||||
.content-wrapper {
|
||||
margin-top: 80px;
|
||||
}
|
||||
|
||||
.sub-header {
|
||||
font-weight: 300;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.striped-list {
|
||||
|
||||
.striped-list-item {
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
padding: 8px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,14 +4,13 @@ body.dashboard {
|
||||
vertical-align: top;
|
||||
width: $sidebar-normal-width;
|
||||
background: $sidebar-background-color;
|
||||
@include box-shadow($sidebar-border-shadow);
|
||||
position: relative;
|
||||
z-index: 100;
|
||||
z-index: 999;
|
||||
|
||||
.sidebar-inner {
|
||||
position: relative;
|
||||
|
||||
margin-top: 69px;
|
||||
|
||||
.profile {
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
@@ -26,6 +25,10 @@ body.dashboard {
|
||||
color: $sidebar-text-color;
|
||||
}
|
||||
}
|
||||
.quick-add-incident {
|
||||
@extend text-center;
|
||||
padding: 10px;
|
||||
}
|
||||
ul {
|
||||
clear: both;
|
||||
margin: 0;
|
||||
@@ -33,7 +36,7 @@ body.dashboard {
|
||||
list-style: none;
|
||||
|
||||
li {
|
||||
font-size: 0.8em;
|
||||
font-size: $sidebar-text-size;
|
||||
&:last-child {
|
||||
border-bottom: $sidebar-border-color;
|
||||
}
|
||||
@@ -49,7 +52,11 @@ body.dashboard {
|
||||
border-top: $sidebar-border-color;
|
||||
color: $sidebar-text-color;
|
||||
i {
|
||||
padding-right: 10px;
|
||||
font-size: 18px;
|
||||
min-width: 17px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
@@ -64,5 +71,25 @@ body.dashboard {
|
||||
}
|
||||
}
|
||||
}
|
||||
.bottom-menu-sidebar {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 230px;
|
||||
z-index: 999;
|
||||
ul > li {
|
||||
float: left;
|
||||
display: block;
|
||||
width: 33.333%;
|
||||
border-right: 1px solid #ddd;
|
||||
border-top: 1px solid #ddd;
|
||||
a {
|
||||
display: block;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
padding: 6px 0;
|
||||
background: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,13 @@ $header-background-color: lighten(#00695C, 10%);
|
||||
$header-border-color: 1px solid darken($header-background-color, 10%);
|
||||
|
||||
$sidebar-transition-speed: .2s;
|
||||
$sidebar-background-color: #2c3e50;
|
||||
$sidebar-background-color: #F0F3F4;
|
||||
$sidebar-border-color: 1px solid rgba(255, 255, 255, .1);
|
||||
$sidebar-text-color: #d7dadc;
|
||||
$sidebar-text-active-color: #ffffff;
|
||||
$sidebar-normal-width: 250px;
|
||||
$sidebar-border-shadow: inset 0px -2px 3px rgba(0,0,0,0.25);
|
||||
$sidebar-text-size: 0.9em;
|
||||
$sidebar-text-color: #333;
|
||||
$sidebar-text-active-color: #333;
|
||||
$sidebar-normal-width: 230px;
|
||||
$sidebar-phone-width: 75%;
|
||||
$sidebar-active-color: #00695C;
|
||||
|
||||
|
||||
@@ -26,13 +26,14 @@ return [
|
||||
'bad' => 'Some systems are experiencing issues.',
|
||||
],
|
||||
// Other
|
||||
'powered_by' => ':app Status Page is powered by <a href="https://cachethq.github.io">Cachet</a>.',
|
||||
'login' => 'Login',
|
||||
'logout' => 'Logout',
|
||||
'logged_in' => 'You\'re logged in.',
|
||||
'setup' => 'Setup Cachet',
|
||||
'no_incidents' => 'No incidents reported.',
|
||||
'dashboard' => [
|
||||
'powered_by' => ':app Status Page is powered by <a href="https://cachethq.github.io">Cachet</a>.',
|
||||
'login_message' => 'Welcome Back!',
|
||||
'login' => 'Login',
|
||||
'logout' => 'Logout',
|
||||
'logged_in' => 'You\'re logged in.',
|
||||
'setup' => 'Setup Cachet',
|
||||
'no_incidents' => 'No incidents reported.',
|
||||
'dashboard' => [
|
||||
'dashboard' => 'Dashboard',
|
||||
'components' => 'Components',
|
||||
'component-add' => 'Add Component',
|
||||
@@ -47,6 +48,7 @@ return [
|
||||
'toggle_navigation' => 'Toggle Navigation',
|
||||
'search' => 'Search...',
|
||||
'user' => 'User',
|
||||
'help' => 'Help',
|
||||
],
|
||||
// Forms
|
||||
'forms' => [
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
@extends('layout.dashboard')
|
||||
@extends('layout.clean')
|
||||
|
||||
@section('content')
|
||||
@include('partials.dashboard.nav')
|
||||
<div class='row'>
|
||||
<div class='col-md-6 col-md-offset-3'>
|
||||
<div class='login row'>
|
||||
<div class='col-xs-12 col-xs-offset-0 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4 text-center'>
|
||||
<div class="welcome-logo">
|
||||
<img class="logo" height="50" src="{{ url('img/cachet-logo.svg') }}" alt="Cachet"/>
|
||||
</div>
|
||||
{{ Form::open() }}
|
||||
<fieldset>
|
||||
<legend>{{ Lang::get('cachet.login') }}</legend>
|
||||
<legend>{{ Lang::get('cachet.login_message') }}</legend>
|
||||
|
||||
@if(Session::has('error'))
|
||||
<span class='text-danger'>{{ Session::get('error') }}</span>
|
||||
@@ -26,7 +28,7 @@
|
||||
</div>
|
||||
<hr />
|
||||
<div class='form-group'>
|
||||
<button type='submit' class='btn btn-default'>{{ Lang::get('cachet.login') }}</button>
|
||||
<button type='submit' class='btn btn-lg btn-block btn-success'>{{ Lang::get('cachet.login') }}</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
{{ Form::close() }}
|
||||
|
||||
@@ -1,45 +1,49 @@
|
||||
@extends('layout.dashboard')
|
||||
|
||||
@section('content')
|
||||
<div class="header">
|
||||
<i class="fa fa-list-ul"></i> {{ Lang::get('cachet.dashboard.components') }}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<h3>Create a component</h3>
|
||||
@if($component = Session::get('component'))
|
||||
<div class='alert alert-{{ $component->isValid() ? "success" : "danger" }}'>
|
||||
@if($component->isValid())
|
||||
<strong>Awesome.</strong> Component added.
|
||||
@else
|
||||
<strong>Whoops.</strong> Something went wrong with the component. {{ $component->getErrors() }}
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
<div class="header">
|
||||
<span class="uppercase">
|
||||
<i class="icons ion-ios-keypad"></i> {{ Lang::get('cachet.dashboard.components') }}
|
||||
</span>
|
||||
> <small>Create a component</small>
|
||||
</div>
|
||||
<div class="content-wrapper">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
@if($component = Session::get('component'))
|
||||
<div class='alert alert-{{ $component->isValid() ? "success" : "danger" }}'>
|
||||
@if($component->isValid())
|
||||
<strong>Awesome.</strong> Component added.
|
||||
@else
|
||||
<strong>Whoops.</strong> Something went wrong with the component. {{ $component->getErrors() }}
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<form name='CreateComponentForm' class='form-vertical' role='form' action='/dashboard/components/add' method='POST'>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label for='incident-name'>Name</label>
|
||||
<input type='text' class='form-control' name='component[name]' id='component-name' required />
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label for='component-status'>Status</label>
|
||||
<select name='component[status]' class='form-control'>
|
||||
@foreach(Lang::get('cachet.component.status') as $statusID => $status)
|
||||
<option value='{{ $statusID }}'>{{ $status }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Description</label>
|
||||
<textarea name='component[description]' class='form-control' rows='5'></textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
<form name='CreateComponentForm' class='form-vertical' role='form' action='/dashboard/components/add' method='POST'>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label for='incident-name'>Name</label>
|
||||
<input type='text' class='form-control' name='component[name]' id='component-name' required />
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label for='component-status'>Status</label>
|
||||
<select name='component[status]' class='form-control'>
|
||||
@foreach(Lang::get('cachet.component.status') as $statusID => $status)
|
||||
<option value='{{ $statusID }}'>{{ $status }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Description</label>
|
||||
<textarea name='component[description]' class='form-control' rows='5'></textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<input type='hidden' name='component[user_id]' value='{{ Auth::user()->id }}' />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<input type='hidden' name='component[user_id]' value='{{ Auth::user()->id }}' />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
|
||||
@@ -1,45 +1,50 @@
|
||||
@extends('layout.dashboard')
|
||||
|
||||
@section('content')
|
||||
<div class="header">
|
||||
<i class="fa fa-list-ul"></i> {{ Lang::get('cachet.dashboard.components') }}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<h3>Edit component</h3>
|
||||
@if($savedComponent = Session::get('savedComponent'))
|
||||
<div class='alert alert-{{ $savedComponent->isValid() ? "success" : "danger" }}'>
|
||||
@if($savedComponent->isValid())
|
||||
<strong>Awesome.</strong> Component updated.
|
||||
@else
|
||||
<strong>Whoops.</strong> Something went wrong with the component. {{ $savedComponent->getErrors() }}
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
<div class="header">
|
||||
<span class="uppercase">
|
||||
<i class="icons ion-ios-keypad"></i> {{ Lang::get('cachet.dashboard.components') }}
|
||||
</span>
|
||||
> <small>Edit component</small>
|
||||
</div>
|
||||
<div class="content-wrapper">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
@if($savedComponent = Session::get('savedComponent'))
|
||||
<div class="alert alert-{{ $savedComponent->isValid() ? "success" : "danger" }}">
|
||||
@if($savedComponent->isValid())
|
||||
<strong>Awesome.</strong> Component updated.
|
||||
@else
|
||||
<strong>Whoops.</strong> Something went wrong with the component. {{ $savedComponent->getErrors() }}
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<form name='EditComponentForm' class='form-vertical' role='form' action='/dashboard/components/{{ $component->id }}/edit' method='POST'>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label for='incident-name'>Name</label>
|
||||
<input type='text' class='form-control' name='component[name]' id='component-name' required value='{{ $component->name }}' />
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label for='component-status'>Status</label>
|
||||
<select name='component[status]' class='form-control'>
|
||||
@foreach(Lang::get('cachet.component.status') as $statusID => $status)
|
||||
<option value='{{ $statusID }}' {{ $statusID === $component->status ? "selected" : "" }}>{{ $status }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Description</label>
|
||||
<textarea name='component[description]' class='form-control' rows='5'>{{ $component->description }}</textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
<form name='EditComponentForm' class='form-vertical' role='form' action='/dashboard/components/{{ $component->id }}/edit' method='POST'>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label for='incident-name'>Name</label>
|
||||
<input type='text' class='form-control' name='component[name]' id='component-name' required value='{{ $component->name }}' />
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label for='component-status'>Status</label>
|
||||
<select name='component[status]' class='form-control'>
|
||||
@foreach(Lang::get('cachet.component.status') as $statusID => $status)
|
||||
<option value='{{ $statusID }}' {{ $statusID === $component->status ? "selected" : "" }}>{{ $status }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Description</label>
|
||||
<textarea name='component[description]' class='form-control' rows='5'>{{ $component->description }}</textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Save Component</button>
|
||||
<input type='hidden' name='component[user_id]' value='{{ $component->agent_id || Auth::user()->id }}' />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
<button type="submit" class="btn btn-success">Save Component</button>
|
||||
<a class="btn btn-default" href="{{ URL::route('dashboard.components') }}">Cancel</a>
|
||||
<input type='hidden' name='component[user_id]' value='{{ $component->agent_id || Auth::user()->id }}' />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
|
||||
@@ -1,34 +1,35 @@
|
||||
@extends('layout.dashboard')
|
||||
|
||||
@section('content')
|
||||
<div class="header">
|
||||
<i class="fa fa-list-ul"></i> {{ Lang::get('cachet.dashboard.components') }}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<h3>Components</h3>
|
||||
<ul class='list-group'>
|
||||
@forelse($components as $component)
|
||||
<li class='list-group-item'>
|
||||
<div class='row'>
|
||||
<div class='col-md-6'>
|
||||
<strong>{{ $component->name }}</strong>
|
||||
@if($component->description)
|
||||
<p><small>{{ $component->description }}</small></p>
|
||||
@endif
|
||||
</div>
|
||||
<div class='col-md-6'>
|
||||
<ul class='nav nav-pills pull-right'>
|
||||
<li role='presentation'><a href='/dashboard/components/{{ $component->id }}/edit' class='btn btn-info'>Edit</a></li>
|
||||
<li role='presentation'><a href='/dashboard/components/{{ $component->id }}/delete' class='btn btn-danger'>Delete</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
@empty
|
||||
<li class='list-group-item text-danger'>You should add a component.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</div>
|
||||
<div class="header fixed">
|
||||
<span class="uppercase">
|
||||
<i class="icons ion-ios-keypad"></i> {{ Lang::get('cachet.dashboard.components') }}
|
||||
</span>
|
||||
<a class="btn btn-sm btn-success pull-right" href="{{ URL::route('dashboard.components.add') }}">
|
||||
{{ Lang::get('cachet.dashboard.component-add') }}
|
||||
</a>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<div class="content-wrapper">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 striped-list">
|
||||
@forelse($components as $component)
|
||||
<div class='row striped-list-item'>
|
||||
<div class='col-md-8'>
|
||||
<strong>{{ $component->name }}</strong>
|
||||
@if($component->description)
|
||||
<p><small>{{ $component->description }}</small></p>
|
||||
@endif
|
||||
</div>
|
||||
<div class='col-md-4 text-right'>
|
||||
<a href='/dashboard/components/{{ $component->id }}/edit' class='btn btn-default'>Edit</a>
|
||||
<a href='/dashboard/components/{{ $component->id }}/delete' class='btn btn-danger'>Delete</a>
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
<div class='list-group-item text-danger'>You should add a component.</div>
|
||||
@endforelse
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
|
||||
@@ -2,52 +2,64 @@
|
||||
|
||||
@section('content')
|
||||
<div class="header">
|
||||
<i class="fa fa-dashboard"></i> {{ Lang::get('cachet.dashboard.incident-add') }}
|
||||
<span class="uppercase">
|
||||
<i class="icon icon ion-android-alert"></i> {{ Lang::get('cachet.dashboard.incident-add') }}
|
||||
</span>
|
||||
> <small>Create an Incident</small>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h3>Create an Incident</h3>
|
||||
<div class="content-wrapper">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
@if($incident = Session::get('incident'))
|
||||
<div class="alert alert-{{ $incident->isValid() ? "success" : "danger" }}">
|
||||
@if($incident->isValid())
|
||||
<strong>Awesome.</strong> Incident added.
|
||||
@else
|
||||
<strong>Whoops.</strong> Something went wrong with the incident.
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if($incident = Session::get('incident'))
|
||||
<div class='alert alert-{{ $incident->isValid() ? "success" : "danger" }}'>
|
||||
@if($incident->isValid())
|
||||
<strong>Awesome.</strong> Incident added.
|
||||
@else
|
||||
<strong>Whoops.</strong> Something went wrong with the incident.
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
{{ Form::open(['name' => 'IncidentForm', 'class' => 'form-vertical', 'role' => 'form']) }}
|
||||
<fieldset>
|
||||
<div class="form-group">
|
||||
<label for="incident-name">Incident Name</label>
|
||||
<input type="text" class='form-control' name='incident[name]' id='incident-name' required />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="incident-name">Incident Status</label><br />
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="incident[status]" value="1" />
|
||||
<i class="icon ion-flag"></i>
|
||||
{{ Lang::get('cachet.incident.status')[1] }}
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="incident[status]" value="2" />
|
||||
<i class="icon ion-alert-circled"></i>
|
||||
{{ Lang::get('cachet.incident.status')[2] }}
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="incident[status]" value="3" />
|
||||
<i class="icon ion-eye"></i>
|
||||
{{ Lang::get('cachet.incident.status')[3] }}
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="incident[status]" value="4" />
|
||||
<i class="icon ion-checkmark"></i>
|
||||
{{ Lang::get('cachet.incident.status')[4] }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Message</label>
|
||||
<textarea name="incident[message]" class="form-control" rows="5"></textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
{{ Form::open(['name' => 'IncidentForm', 'class' => 'form-vertical', 'role' => 'form']) }}
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label for='incident-name'>Incident Name</label>
|
||||
<input type='text' class='form-control' name='incident[name]' id='incident-name' required />
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label for='incident-name'>Incident Status</label><br />
|
||||
<label class='radio-inline'>
|
||||
<input type='radio' name='incident[status]' value='1' /> {{ Lang::get('cachet.incident.status')[1] }}
|
||||
</label>
|
||||
<label class='radio-inline'>
|
||||
<input type='radio' name='incident[status]' value='2' /> {{ Lang::get('cachet.incident.status')[2] }}
|
||||
</label>
|
||||
<label class='radio-inline'>
|
||||
<input type='radio' name='incident[status]' value='3' /> {{ Lang::get('cachet.incident.status')[3] }}
|
||||
</label>
|
||||
<label class='radio-inline'>
|
||||
<input type='radio' name='incident[status]' value='4' /> {{ Lang::get('cachet.incident.status')[4] }}
|
||||
</label>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Message</label>
|
||||
<textarea name='incident[message]' class='form-control' rows='5'></textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<input type='hidden' name='incident[user_id]' value='{{ Auth::user()->id }}' />
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
{{ Form::close() }}
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="incident[user_id]" value="{{ Auth::user()->id }}" />
|
||||
<button type="submit" class="btn btn-success">Create</button>
|
||||
<a class="btn btn-default" href="{{ URL::route('dashboard.incidents') }}">Cancel</a>
|
||||
{{ Form::close() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
|
||||
@@ -2,36 +2,39 @@
|
||||
|
||||
@section('content')
|
||||
<div class="header">
|
||||
<i class="fa fa-dashboard"></i> {{ Lang::get('cachet.dashboard.incident-add') }}
|
||||
<span class="uppercase">
|
||||
<i class="fa fa-dashboard"></i> {{ Lang::get('cachet.dashboard.incident-add') }}
|
||||
</span>
|
||||
> <small>Create an Incident Template</small>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h3>Create an Incident Template</h3>
|
||||
<div class="content-wrapper">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
@if($template = Session::get('template'))
|
||||
<div class='alert alert-{{ $template->isValid() ? "success" : "danger" }}'>
|
||||
@if($template->isValid())
|
||||
<strong>Awesome.</strong> Template added.
|
||||
@else
|
||||
<strong>Whoops.</strong> Something went wrong with the template.
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if($template = Session::get('template'))
|
||||
<div class='alert alert-{{ $template->isValid() ? "success" : "danger" }}'>
|
||||
@if($template->isValid())
|
||||
<strong>Awesome.</strong> Template added.
|
||||
@else
|
||||
<strong>Whoops.</strong> Something went wrong with the template.
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
{{ Form::open(['name' => 'IncidentTemplateForm', 'class' => 'form-vertical', 'role' => 'form']) }}
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label for='template-name'>Template Name</label>
|
||||
<input type='text' class='form-control' name='template[name]' id='template-name' required />
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Template</label>
|
||||
<textarea name='template[template]' class='form-control' rows='5' required></textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
{{ Form::open(['name' => 'IncidentTemplateForm', 'class' => 'form-vertical', 'role' => 'form']) }}
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label for='template-name'>Template Name</label>
|
||||
<input type='text' class='form-control' name='template[name]' id='template-name' required />
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Template</label>
|
||||
<textarea name='template[template]' class='form-control' rows='5' required></textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Create</button>
|
||||
{{ Form::close() }}
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-success">Create</button>
|
||||
{{ Form::close() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
|
||||
@@ -1,38 +1,40 @@
|
||||
@extends('layout.dashboard')
|
||||
|
||||
@section('content')
|
||||
<div class="header">
|
||||
<i class="fa fa-exclamation-triangle"></i> {{ Lang::get('cachet.dashboard.incidents') }}
|
||||
<div class="header fixed">
|
||||
<span class="uppercase">
|
||||
<i class="icon icon ion-android-alert"></i> {{ Lang::get('cachet.dashboard.incidents') }}
|
||||
</span>
|
||||
<a class="btn btn-sm btn-success pull-right" href="{{ URL::route('dashboard.incidents.add') }}">
|
||||
{{ Lang::get('cachet.dashboard.incident-add') }}
|
||||
</a>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<h3>Incidents</h3>
|
||||
<div class="content-wrapper">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
@if ($incidents->count() === 0)
|
||||
<div class="list-group-item">Woah! No incidents, your doing well!</div>
|
||||
@else
|
||||
<p>You have <strong>{{ $incidents->count() }}</strong> incidents.</p>
|
||||
@endif
|
||||
|
||||
@if ($incidents->count() === 0)
|
||||
<p class='lead'>Woah! No incidents, your doing well!</p>
|
||||
@else
|
||||
<p class='lead'>You have <strong>{{ $incidents->count() }}</strong> incidents.</p>
|
||||
@endif
|
||||
|
||||
<ul class='list-group'>
|
||||
@foreach($incidents as $incident)
|
||||
<li class='list-group-item'>
|
||||
<div class='row'>
|
||||
<div class='col-md-6'>
|
||||
<strong>{{ $incident->name }}</strong>
|
||||
@if($incident->message)
|
||||
<p><small>{{ Str::words($incident->message, 5) }}</small></p>
|
||||
@endif
|
||||
</div>
|
||||
<div class='col-md-6'>
|
||||
<ul class='nav nav-pills pull-right'>
|
||||
<li role='presentation'><a href='/dashboard/incidents/{{ $incident->id }}/delete' class='btn btn-danger'>Delete</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="striped-list">
|
||||
@foreach($incidents as $incident)
|
||||
<div class="row striped-list-item">
|
||||
<div class="col-md-6">
|
||||
<strong>{{ $incident->name }}</strong>
|
||||
@if($incident->message)
|
||||
<p><small>{{ Str::words($incident->message, 5) }}</small></p>
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-md-6 text-right">
|
||||
<a href="/dashboard/incidents/{{ $incident->id }}/delete" class="btn btn-danger">Delete</a>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
|
||||
@@ -2,13 +2,15 @@
|
||||
|
||||
@section('content')
|
||||
<div class="header">
|
||||
<i class="fa fa-dashboard"></i> {{ Lang::get('cachet.dashboard.dashboard') }}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h3>Dashboard</h3>
|
||||
|
||||
<p class='lead'>Let's put cool things here.</p>
|
||||
</div>
|
||||
<span class="uppercase">
|
||||
<i class="icon ion-speedometer"></i> {{ Lang::get('cachet.dashboard.dashboard') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="content-wrapper">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<p class='lead'>Let's put cool things here.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
|
||||
@@ -2,93 +2,97 @@
|
||||
|
||||
@section('content')
|
||||
<div class="header">
|
||||
<i class="fa fa-cogs"></i> {{ Lang::get('cachet.dashboard.settings') }}
|
||||
<span class="uppercase">
|
||||
<i class="icon ion-gear-a"></i> {{ Lang::get('cachet.dashboard.settings') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<form name='SettingsForm' class='form-vertical' role='form' action='/dashboard/settings' method='POST'>
|
||||
<h3>Cachet Settings</h3>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label>Site Name</label>
|
||||
<input type='text' class='form-control' name='app_name' value='{{ Setting::get("app_name") }}' required />
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Site URL</label>
|
||||
<input type='text' class='form-control' name='app_domain' value='{{ Setting::get("app_domain") }}' required />
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="content-wrapper">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<form name='SettingsForm' class='form-vertical' role='form' action='/dashboard/settings' method='POST'>
|
||||
<h4 class="sub-header">Cachet Settings</h4>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label>Site Name</label>
|
||||
<input type='text' class='form-control' name='app_name' value='{{ Setting::get("app_name") }}' required />
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Site URL</label>
|
||||
<input type='text' class='form-control' name='app_domain' value='{{ Setting::get("app_domain") }}' required />
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<h3>Server</h3>
|
||||
<fieldset>
|
||||
<h4 class="sub-header">Server</h4>
|
||||
<fieldset>
|
||||
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
|
||||
<h3>Security</h3>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label>Allowed Domains <em>Comma Seperated</em></label>
|
||||
<textarea class='form-control' name='allowed_domains' rows='5' placeholder='http://cachet.io, http://cachet.herokuapp.com'>{{ Setting::get('allowed_domains') }}</textarea>
|
||||
<div class='help-block'>
|
||||
The domain set above is automatically allowed by default.
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<h4 class="sub-header">Security</h4>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label>Allowed Domains <em>Comma Seperated</em></label>
|
||||
<textarea class='form-control' name='allowed_domains' rows='5' placeholder='http://cachet.io, http://cachet.herokuapp.com'>{{ Setting::get('allowed_domains') }}</textarea>
|
||||
<div class='help-block'>
|
||||
The domain set above is automatically allowed by default.
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<h3>Mail</h3>
|
||||
<fieldset>
|
||||
<h4>Mail</h4>
|
||||
<fieldset>
|
||||
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
|
||||
<h3>Theme</h3>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label>Background Color</label>
|
||||
<div class='input-group'>
|
||||
<div class='input-group-addon'>#</div>
|
||||
<input type='text' pattern="^+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$" class='form-control' maxlength="6" name='style.background_color' value='{{ Setting::get("style_background_color") }}' />
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Text Color</label>
|
||||
<div class='input-group'>
|
||||
<div class='input-group-addon'>#</div>
|
||||
<input type='text' pattern="^+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$" class='form-control' maxlength="6" name='style.text_color' value='{{ Setting::get("style_text_color") }}' />
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Success Warning Color</label>
|
||||
<div class='input-group'>
|
||||
<div class='input-group-addon'>#</div>
|
||||
<input type='text' pattern="^+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$" class='form-control' maxlength="6" name='style.success_warning_color' value='{{ Setting::get("style_success_warning_color") }}' />
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Error Warning Color</label>
|
||||
<div class='input-group'>
|
||||
<div class='input-group-addon'>#</div>
|
||||
<input type='text' pattern="^+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$" class='form-control' maxlength="6" name='style.error_warning_color' value='{{ Setting::get("style_error_warning_color") }}' />
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Info Warning Color</label>
|
||||
<div class='input-group'>
|
||||
<div class='input-group-addon'>#</div>
|
||||
<input type='text' class='form-control' name='style.info_warning_color' value='{{ Setting::get("style_info_warning_color") }}' />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<h4 class="sub-header">Theme</h4>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label>Background Color</label>
|
||||
<div class='input-group'>
|
||||
<div class='input-group-addon'>#</div>
|
||||
<input type='text' pattern="^+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$" class='form-control' maxlength="6" name='style.background_color' value='{{ Setting::get("style_background_color") }}' />
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Text Color</label>
|
||||
<div class='input-group'>
|
||||
<div class='input-group-addon'>#</div>
|
||||
<input type='text' pattern="^+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$" class='form-control' maxlength="6" name='style.text_color' value='{{ Setting::get("style_text_color") }}' />
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Success Warning Color</label>
|
||||
<div class='input-group'>
|
||||
<div class='input-group-addon'>#</div>
|
||||
<input type='text' pattern="^+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$" class='form-control' maxlength="6" name='style.success_warning_color' value='{{ Setting::get("style_success_warning_color") }}' />
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Error Warning Color</label>
|
||||
<div class='input-group'>
|
||||
<div class='input-group-addon'>#</div>
|
||||
<input type='text' pattern="^+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$" class='form-control' maxlength="6" name='style.error_warning_color' value='{{ Setting::get("style_error_warning_color") }}' />
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>Info Warning Color</label>
|
||||
<div class='input-group'>
|
||||
<div class='input-group-addon'>#</div>
|
||||
<input type='text' class='form-control' name='style.info_warning_color' value='{{ Setting::get("style_info_warning_color") }}' />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<h3>Stylesheet</h3>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label>Custom Stylesheet</label>
|
||||
<textarea class='form-control' name='stylesheet' rows='10'>{{ Setting::get('stylesheet') }}</textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
<h4 class="sub-header">Stylesheet</h4>
|
||||
<fieldset>
|
||||
<div class='form-group'>
|
||||
<label>Custom Stylesheet</label>
|
||||
<textarea class='form-control' name='stylesheet' rows='10'>{{ Setting::get('stylesheet') }}</textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-success">Save settings</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
|
||||
12
app/views/layout/clean.blade.php
Normal file
12
app/views/layout/clean.blade.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
@include('partials.dashboard.head')
|
||||
|
||||
<body class="dashboard">
|
||||
<div class="wrapper">
|
||||
<div class="content">
|
||||
@yield('content')
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="author" content="http://james-brooks.uk">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
|
||||
<title>{{ isset($pageTitle) ? $pageTitle : Setting::get('app_name') }} | Cachet</title>
|
||||
|
||||
<link rel="stylesheet" href="{{ elixir('css/all.css') }}">
|
||||
<script src="{{ elixir('js/all.js') }}"></script>
|
||||
</head>
|
||||
@include('partials.dashboard.head')
|
||||
|
||||
<body class="dashboard">
|
||||
@include('partials.dashboard.nav')
|
||||
<div class="wrapper">
|
||||
@include('partials.dashboard.sidebar')
|
||||
<div class="content">
|
||||
|
||||
13
app/views/partials/dashboard/head.blade.php
Normal file
13
app/views/partials/dashboard/head.blade.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="author" content="http://james-brooks.uk">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
|
||||
<title>{{ isset($pageTitle) ? $pageTitle : Setting::get('app_name') }} | Cachet</title>
|
||||
|
||||
<link href='//fonts.googleapis.com/css?family=Lato:300,400,700' rel='stylesheet' type='text/css'>
|
||||
<link rel="stylesheet" href="{{ elixir('css/all.css') }}">
|
||||
<script src="{{ elixir('js/all.js') }}"></script>
|
||||
</head>
|
||||
@@ -11,35 +11,31 @@
|
||||
<div class="username">{{ Auth::user()->username }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<div class="quick-add-incident">
|
||||
<a class="btn btn-block btn-default uppercase" href="{{ URL::route('dashboard.incidents.add') }}">
|
||||
{{ Lang::get('cachet.dashboard.incident-add') }}
|
||||
</a>
|
||||
</div>
|
||||
<ul>
|
||||
<li class="{{ Request::is('dashboard') ? 'active' : '' }}">
|
||||
<a href="{{ URL::route('dashboard') }}">
|
||||
<i class="fa fa-dashboard"></i> {{ Lang::get('cachet.dashboard.dashboard') }}
|
||||
<i class="icon ion-speedometer"></i> {{ Lang::get('cachet.dashboard.dashboard') }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="{{ Request::is('dashboard/incidents') ? 'active' : '' }}">
|
||||
<a href="{{ URL::route('dashboard.incidents') }}">
|
||||
<i class="fa fa-exclamation-triangle"></i> {{ Lang::get('cachet.dashboard.incidents') }}
|
||||
<i class="icon ion-android-alert"></i> {{ Lang::get('cachet.dashboard.incidents') }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="{{ Request::is('dashboard/incidents/add') ? 'active' : '' }} sub-nav-item">
|
||||
<a href="{{ URL::route('dashboard.incidents.add') }}">
|
||||
<i class="fa fa-plus"></i> {{ Lang::get('cachet.dashboard.incident-add') }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="{{ Request::is('dashboard/incidents/template') ? 'active' : '' }} sub-nav-item">
|
||||
{{-- <li class="{{ Request::is('dashboard/incidents/template') ? 'active' : '' }} sub-nav-item">
|
||||
<a href="{{ URL::route('dashboard.incidents.template') }}">
|
||||
<i class="fa fa-plus"></i> {{ Lang::get('cachet.dashboard.incident-create-template') }}
|
||||
</a>
|
||||
</li>
|
||||
</li> --}}
|
||||
<li class="{{ Request::is('dashboard/components') ? 'active' : '' }}">
|
||||
<a href="{{ URL::route('dashboard.components') }}">
|
||||
<i class="fa fa-list-ul"></i> {{ Lang::get('cachet.dashboard.components') }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="{{ Request::is('dashboard/components/add') ? 'active' : '' }} sub-nav-item">
|
||||
<a href="{{ URL::route('dashboard.components.add') }}">
|
||||
<i class="fa fa-plus"></i> {{ Lang::get('cachet.dashboard.component-add') }}
|
||||
<i class="icons ion-ios-keypad"></i> {{ Lang::get('cachet.dashboard.components') }}
|
||||
</a>
|
||||
</li>
|
||||
{{-- <li class="{{ Request::is('dashboard/metrics') ? 'active' : '' }}">
|
||||
@@ -59,10 +55,27 @@
|
||||
</li> --}}
|
||||
<li class="{{ Request::is('dashboard/settings') ? 'active' : '' }}">
|
||||
<a href="{{ URL::route('dashboard.settings') }}">
|
||||
<i class="fa fa-cogs"></i> {{ Lang::get('cachet.dashboard.settings') }}
|
||||
<i class="icon ion-gear-a"></i> {{ Lang::get('cachet.dashboard.settings') }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="bottom-menu-sidebar">
|
||||
<div class="text-center">
|
||||
<img width="165" src="{{ url('img/cachet-logo.svg') }}" alt="Cachet"/>
|
||||
</div>
|
||||
<br/>
|
||||
<ul>
|
||||
<li data-toggle="tooltip" data-placement="top" title="{{ Lang::get('cachet.dashboard.help') }}">
|
||||
<a href="https://cachethq.github.io" target="_blank"><i class="icon ion-help"></i></a>
|
||||
</li>
|
||||
<li data-toggle="tooltip" data-placement="top" title="{{ Lang::get('cachet.dashboard.status_page') }}">
|
||||
<a href="{{ URL::route('status-page') }}"><i class="icon ion-monitor"></i></a>
|
||||
</li>
|
||||
<li data-toggle="tooltip" data-placement="top" title="{{ Lang::get('cachet.logout') }}">
|
||||
<a href="{{ URL::route('logout') }}"><i class="icon ion-log-out"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@@ -1,72 +1,75 @@
|
||||
@extends('layout.dashboard')
|
||||
|
||||
@section('content')
|
||||
<div class='header'>
|
||||
<i class='fa fa-cog'></i> {{ Lang::get('cachet.setup') }}
|
||||
<div class="header">
|
||||
<span class="uppercase">
|
||||
<i class='fa fa-cog'></i> {{ Lang::get('cachet.setup') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class='row'>
|
||||
<div class='col-sm-12'>
|
||||
<div class='panel panel-default'>
|
||||
<div class='panel-heading'>{{ Lang::get('cachet.forms.setup.service_details') }}</div>
|
||||
<div class='panel-body'>
|
||||
{{ Form::open(['name' => 'SetupForm', 'class' => 'form-vertical', 'role' => 'form']) }}
|
||||
<fieldset>
|
||||
<legend>{{ Lang::get('cachet.forms.setup.status_page_setup') }}</legend>
|
||||
<div class='form-group'>
|
||||
<label class='sr-only'>{{ Lang::get('cachet.forms.setup.site_name') }}</label>
|
||||
<input type='text' name='settings[app_name]' class='form-control' placeholder='{{ Lang::get("cachet.forms.setup.site_name") }}' value='{{ Input::old("settings.app_name", "") }}' required />
|
||||
@if($errors->has('settings.app_name'))
|
||||
<span class='text-danger'>{{ $errors->first('settings.app_name') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label class='sr-only'>{{ Lang::get('cachet.forms.setup.site_domain') }}</label>
|
||||
<input type='text' name='settings[app_domain]' class='form-control' placeholder='{{ Lang::get("cachet.forms.setup.site_domain") }}' value='{{ Input::old("settings.app_domain", "") }}' required />
|
||||
@if($errors->has('settings.app_domain'))
|
||||
<span class='text-danger'>{{ $errors->first('settings.app_domain') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>
|
||||
<input type='checkbox' name='settings[show_support]' value='1' checked />
|
||||
{{ Lang::get("cachet.forms.setup.show_support") }}
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="content-wrapper">
|
||||
<div class='row'>
|
||||
<div class='col-sm-12'>
|
||||
<div class='panel panel-default'>
|
||||
<div class='panel-heading'>{{ Lang::get('cachet.forms.setup.service_details') }}</div>
|
||||
<div class='panel-body'>
|
||||
{{ Form::open(['name' => 'SetupForm', 'class' => 'form-vertical', 'role' => 'form']) }}
|
||||
<fieldset>
|
||||
<legend>{{ Lang::get('cachet.forms.setup.status_page_setup') }}</legend>
|
||||
<div class='form-group'>
|
||||
<label class='sr-only'>{{ Lang::get('cachet.forms.setup.site_name') }}</label>
|
||||
<input type='text' name='settings[app_name]' class='form-control' placeholder='{{ Lang::get("cachet.forms.setup.site_name") }}' value='{{ Input::old("settings.app_name", "") }}' required />
|
||||
@if($errors->has('settings.app_name'))
|
||||
<span class='text-danger'>{{ $errors->first('settings.app_name') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label class='sr-only'>{{ Lang::get('cachet.forms.setup.site_domain') }}</label>
|
||||
<input type='text' name='settings[app_domain]' class='form-control' placeholder='{{ Lang::get("cachet.forms.setup.site_domain") }}' value='{{ Input::old("settings.app_domain", "") }}' required />
|
||||
@if($errors->has('settings.app_domain'))
|
||||
<span class='text-danger'>{{ $errors->first('settings.app_domain') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label>
|
||||
<input type='checkbox' name='settings[show_support]' value='1' checked />
|
||||
{{ Lang::get("cachet.forms.setup.show_support") }}
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>Administrator Account</legend>
|
||||
<div class='form-group'>
|
||||
<label class='sr-only'>{{ Lang::get("cachet.forms.setup.admin_username") }}</label>
|
||||
<input type='text' name='user[username]' class='form-control' placeholder='{{ Lang::get("cachet.forms.setup.admin_username") }}' value='{{ Input::old("user.username", "") }}' required />
|
||||
@if($errors->has('user.username'))
|
||||
<span class='text-danger'>{{ $errors->first('user.username') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label class='sr-only'>{{ Lang::get("cachet.forms.email") }}</label>
|
||||
<input type='email' name='user[email]' class='form-control' placeholder='{{ Lang::get("cachet.forms.email") }}' value='{{ Input::old("user.email", "") }}' required />
|
||||
@if($errors->has('user.email'))
|
||||
<span class='text-danger'>{{ $errors->first('user.email') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label class='sr-only'>{{ Lang::get("cachet.forms.password") }}</label>
|
||||
<input type='password' name='user[password]' class='form-control' placeholder='{{ Lang::get("cachet.forms.password") }}' value='{{ Input::old("user.password", "") }}' required />
|
||||
@if($errors->has('user.password'))
|
||||
<span class='text-danger'>{{ $errors->first('user.password') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>Administrator Account</legend>
|
||||
<div class='form-group'>
|
||||
<label class='sr-only'>{{ Lang::get("cachet.forms.setup.admin_username") }}</label>
|
||||
<input type='text' name='user[username]' class='form-control' placeholder='{{ Lang::get("cachet.forms.setup.admin_username") }}' value='{{ Input::old("user.username", "") }}' required />
|
||||
@if($errors->has('user.username'))
|
||||
<span class='text-danger'>{{ $errors->first('user.username') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label class='sr-only'>{{ Lang::get("cachet.forms.email") }}</label>
|
||||
<input type='email' name='user[email]' class='form-control' placeholder='{{ Lang::get("cachet.forms.email") }}' value='{{ Input::old("user.email", "") }}' required />
|
||||
@if($errors->has('user.email'))
|
||||
<span class='text-danger'>{{ $errors->first('user.email') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class='form-group'>
|
||||
<label class='sr-only'>{{ Lang::get("cachet.forms.password") }}</label>
|
||||
<input type='password' name='user[password]' class='form-control' placeholder='{{ Lang::get("cachet.forms.password") }}' value='{{ Input::old("user.password", "") }}' required />
|
||||
@if($errors->has('user.password'))
|
||||
<span class='text-danger'>{{ $errors->first('user.password') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<hr />
|
||||
<div class='form-group'>
|
||||
<button type='submit' class='btn btn-success'>{{ Lang::get("cachet.forms.setup.finish_setup") }}</button>
|
||||
</div>
|
||||
{{ Form::close() }}
|
||||
<hr />
|
||||
<div class='form-group'>
|
||||
<button type='submit' class='btn btn-success'>{{ Lang::get("cachet.forms.setup.finish_setup") }}</button>
|
||||
</div>
|
||||
{{ Form::close() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"fontawesome": "4.2.*",
|
||||
"jquery": "~2.1.1",
|
||||
"chartjs": "0.2.*",
|
||||
"rivets": "0.7.*"
|
||||
"rivets": "0.7.*",
|
||||
"ionicons": "~2.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
33
gulpfile.js
33
gulpfile.js
@@ -1,19 +1,20 @@
|
||||
var elixir = require('laravel-elixir');
|
||||
|
||||
elixir(function(mix) {
|
||||
mix.sass('app/assets/sass/main.scss')
|
||||
.styles([
|
||||
'app/assets/Bower_components/fontawesome/css/font-awesome.min.css',
|
||||
'public/css/main.css',
|
||||
], './')
|
||||
.scripts([
|
||||
'bower_components/jquery/dist/jquery.min.js',
|
||||
'bower_components/bootstrap-sass-official/assets/javascripts/bootstrap.js',
|
||||
'bower_components/chartjs/Chart.min.js',
|
||||
'bower_components/rivets/dist/rivets.min.js',
|
||||
'js/app.js',
|
||||
'js/**/*.js',
|
||||
], './app/assets/')
|
||||
.version(['public/css/all.css', 'public/js/all.js'])
|
||||
.copy('app/assets/bower_components/fontawesome/fonts/', 'public/build/fonts');
|
||||
elixir(function (mix) {
|
||||
mix.sass('app/assets/sass/main.scss')
|
||||
.styles([
|
||||
'app/assets/bower_components/fontawesome/css/font-awesome.min.css',
|
||||
'app/assets/bower_components/ionicons/css/ionicons.min.css',
|
||||
'public/css/main.css',
|
||||
], './')
|
||||
.scripts([
|
||||
'bower_components/jquery/dist/jquery.min.js',
|
||||
'bower_components/bootstrap-sass-official/assets/javascripts/bootstrap.js',
|
||||
'bower_components/chartjs/Chart.min.js',
|
||||
'js/app.js',
|
||||
'js/**/*.js',
|
||||
], './app/assets/')
|
||||
.version(['public/css/all.css', 'public/js/all.js'])
|
||||
.copy('app/assets/bower_components/fontawesome/fonts/', 'public/build/fonts')
|
||||
.copy('app/assets/bower_components/ionicons/fonts/', 'public/build/fonts');
|
||||
});
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
public/build/fonts/ionicons.eot
Normal file
BIN
public/build/fonts/ionicons.eot
Normal file
Binary file not shown.
2232
public/build/fonts/ionicons.svg
Normal file
2232
public/build/fonts/ionicons.svg
Normal file
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 326 KiB |
BIN
public/build/fonts/ionicons.ttf
Normal file
BIN
public/build/fonts/ionicons.ttf
Normal file
Binary file not shown.
BIN
public/build/fonts/ionicons.woff
Normal file
BIN
public/build/fonts/ionicons.woff
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"css/all.css": "css/all-50d597de.css",
|
||||
"js/all.js": "js/all-d8f5640f.js"
|
||||
"css/all.css": "css/all-d4306fe3.css",
|
||||
"js/all.js": "js/all-c9a5e8b0.js"
|
||||
}
|
||||
BIN
public/img/cachet-icon.png
Normal file
BIN
public/img/cachet-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
public/img/cachet-logo.png
Normal file
BIN
public/img/cachet-logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
16
public/img/cachet-logo.svg
Normal file
16
public/img/cachet-logo.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 12 KiB |
Reference in New Issue
Block a user