Jad Meouchy 9 lat temu
rodzic
commit
21d5401c9f

+ 0 - 587
css/bootstrap-theme.css

@@ -1,587 +0,0 @@
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-}
-.btn-default:active,
-.btn-primary:active,
-.btn-success:active,
-.btn-info:active,
-.btn-warning:active,
-.btn-danger:active,
-.btn-default.active,
-.btn-primary.active,
-.btn-success.active,
-.btn-info.active,
-.btn-warning.active,
-.btn-danger.active {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-default.disabled,
-.btn-primary.disabled,
-.btn-success.disabled,
-.btn-info.disabled,
-.btn-warning.disabled,
-.btn-danger.disabled,
-.btn-default[disabled],
-.btn-primary[disabled],
-.btn-success[disabled],
-.btn-info[disabled],
-.btn-warning[disabled],
-.btn-danger[disabled],
-fieldset[disabled] .btn-default,
-fieldset[disabled] .btn-primary,
-fieldset[disabled] .btn-success,
-fieldset[disabled] .btn-info,
-fieldset[disabled] .btn-warning,
-fieldset[disabled] .btn-danger {
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-.btn-default .badge,
-.btn-primary .badge,
-.btn-success .badge,
-.btn-info .badge,
-.btn-warning .badge,
-.btn-danger .badge {
-  text-shadow: none;
-}
-.btn:active,
-.btn.active {
-  background-image: none;
-}
-.btn-default {
-  text-shadow: 0 1px 0 #fff;
-  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
-  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
-  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #dbdbdb;
-  border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus {
-  background-color: #e0e0e0;
-  background-position: 0 -15px;
-}
-.btn-default:active,
-.btn-default.active {
-  background-color: #e0e0e0;
-  border-color: #dbdbdb;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled.focus,
-.btn-default[disabled].focus,
-fieldset[disabled] .btn-default.focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
-  background-color: #e0e0e0;
-  background-image: none;
-}
-.btn-primary {
-  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
-  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
-  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #245580;
-}
-.btn-primary:hover,
-.btn-primary:focus {
-  background-color: #265a88;
-  background-position: 0 -15px;
-}
-.btn-primary:active,
-.btn-primary.active {
-  background-color: #265a88;
-  border-color: #245580;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled.focus,
-.btn-primary[disabled].focus,
-fieldset[disabled] .btn-primary.focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
-  background-color: #265a88;
-  background-image: none;
-}
-.btn-success {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
-  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #3e8f3e;
-}
-.btn-success:hover,
-.btn-success:focus {
-  background-color: #419641;
-  background-position: 0 -15px;
-}
-.btn-success:active,
-.btn-success.active {
-  background-color: #419641;
-  border-color: #3e8f3e;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled.focus,
-.btn-success[disabled].focus,
-fieldset[disabled] .btn-success.focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
-  background-color: #419641;
-  background-image: none;
-}
-.btn-info {
-  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
-  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
-  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #28a4c9;
-}
-.btn-info:hover,
-.btn-info:focus {
-  background-color: #2aabd2;
-  background-position: 0 -15px;
-}
-.btn-info:active,
-.btn-info.active {
-  background-color: #2aabd2;
-  border-color: #28a4c9;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled.focus,
-.btn-info[disabled].focus,
-fieldset[disabled] .btn-info.focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
-  background-color: #2aabd2;
-  background-image: none;
-}
-.btn-warning {
-  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
-  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
-  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #e38d13;
-}
-.btn-warning:hover,
-.btn-warning:focus {
-  background-color: #eb9316;
-  background-position: 0 -15px;
-}
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #eb9316;
-  border-color: #e38d13;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled.focus,
-.btn-warning[disabled].focus,
-fieldset[disabled] .btn-warning.focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
-  background-color: #eb9316;
-  background-image: none;
-}
-.btn-danger {
-  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
-  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
-  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #b92c28;
-}
-.btn-danger:hover,
-.btn-danger:focus {
-  background-color: #c12e2a;
-  background-position: 0 -15px;
-}
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #c12e2a;
-  border-color: #b92c28;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled.focus,
-.btn-danger[disabled].focus,
-fieldset[disabled] .btn-danger.focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
-  background-color: #c12e2a;
-  background-image: none;
-}
-.thumbnail,
-.img-thumbnail {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  background-color: #e8e8e8;
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
-  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-  background-repeat: repeat-x;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  background-color: #2e6da4;
-  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
-  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
-  background-repeat: repeat-x;
-}
-.navbar-default {
-  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
-  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
-  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .active > a {
-  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
-  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
-  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
-  background-repeat: repeat-x;
-  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-}
-.navbar-brand,
-.navbar-nav > li > a {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
-}
-.navbar-inverse {
-  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
-  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
-  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-radius: 4px;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .active > a {
-  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
-  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
-  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
-  background-repeat: repeat-x;
-  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-}
-.navbar-inverse .navbar-brand,
-.navbar-inverse .navbar-nav > li > a {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
-}
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  border-radius: 0;
-}
-@media (max-width: 767px) {
-  .navbar .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #fff;
-    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
-    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
-    background-repeat: repeat-x;
-  }
-}
-.alert {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-}
-.alert-success {
-  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
-  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
-  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #b2dba1;
-}
-.alert-info {
-  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
-  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
-  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #9acfea;
-}
-.alert-warning {
-  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
-  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
-  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #f5e79e;
-}
-.alert-danger {
-  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
-  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
-  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #dca7a7;
-}
-.progress {
-  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
-  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
-  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar {
-  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
-  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
-  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-success {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
-  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-info {
-  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
-  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
-  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-warning {
-  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
-  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
-  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-danger {
-  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
-  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
-  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-striped {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.list-group {
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
-  text-shadow: 0 -1px 0 #286090;
-  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
-  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
-  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #2b669a;
-}
-.list-group-item.active .badge,
-.list-group-item.active:hover .badge,
-.list-group-item.active:focus .badge {
-  text-shadow: none;
-}
-.panel {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-}
-.panel-default > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
-  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-primary > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
-  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-success > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
-  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
-  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-info > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
-  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
-  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-warning > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
-  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
-  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-danger > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
-  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
-  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
-  background-repeat: repeat-x;
-}
-.well {
-  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
-  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
-  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #dcdcdc;
-  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-}
-/*# sourceMappingURL=bootstrap-theme.css.map */

Plik diff jest za duży
+ 0 - 4
css/bootstrap-theme.min.css


+ 127 - 0
css/general.css

@@ -0,0 +1,127 @@
+/*
+
+REMINE.CSS
+
+*/
+
+html, body
+{
+	font-family: 'Open Sans', sans-serif;
+}
+
+*
+{
+	box-sizing: border-box;
+}
+
+ul
+{
+	margin: 0;
+	padding: 0;
+	list-style: none;
+}
+
+a
+{
+	font: inherit;
+	text-decoration: none;
+	color: inherit;
+}
+
+button
+{
+	display: flex;
+	align-items: center;
+	color: inherit;
+	outline: none;
+	border: none;
+	background: none;
+}
+
+input
+{
+	color: inherit;
+}
+
+h1, h2, h3, h4, h5
+{
+	font-weight: normal;
+	margin: 0;
+}
+
+address
+{
+	font-style: normal;
+}
+
+table
+{
+	width: 100%;
+	/* border-collapse: collapse; */
+}
+
+th
+{
+	text-align: left;
+}
+
+
+table.dataTable
+{
+	font-size: 85%;
+}
+
+
+.navbar-default
+{
+	border-bottom: 1px solid rgba(0,0,0,0.15);
+	height: 50px;
+	box-sizing: border-box;
+}
+
+body > .screen
+{
+	display: none;
+	position: absolute;
+	top: 3.25rem;
+	left: 0;
+	width: 100%;
+	overflow-x: hidden;
+	overflow-y: auto;
+	z-index: 1;
+	animation: pageOut 0.2s;
+	/* background: #f4f4f4; */
+}
+
+body > .screen.active
+{
+	animation: pageIn 0.2s;
+}
+
+
+@keyframes pageIn
+{
+	from	{ opacity: 0; }
+	to		{ opacity: 1; }
+}
+
+@keyframes pageOut
+{
+	from	{ opacity: 1; }
+	to		{ opacity: 0; }
+}
+
+
+
+
+#screen-loading
+{
+	display: block;
+    width: 100%;
+    height: 100%;
+    top: 0;
+	
+	background: #eee;
+	
+	z-index: 9999 !important;
+}

+ 82 - 0
css/loading.css

@@ -0,0 +1,82 @@
+.cssload-loader
+{
+	position: absolute;
+	left: calc(50% - 40px);
+	top: calc(50% - 40px);
+	width: 80px;
+	height: 80px;
+	border-radius: 50%;
+	perspective: 1000px;
+}
+
+.cssload-inner
+{
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	box-sizing: border-box;
+	border-radius: 50%;
+}
+
+.cssload-inner.cssload-one
+{
+	left: 0%;
+	top: 0%;
+	animation: cssload-rotate-one 1.3s linear infinite;
+	border-bottom: 4px solid rgb(0,0,0);
+}
+
+.cssload-inner.cssload-two
+{
+	right: 0%;
+	top: 0%;
+	animation: cssload-rotate-two 1.3s linear infinite;
+	border-right: 4px solid rgb(0,0,0);
+}
+
+.cssload-inner.cssload-three
+{
+	right: 0%;
+	bottom: 0%;
+	animation: cssload-rotate-three 1.3s linear infinite;
+	border-top: 4px solid rgb(0,0,0);
+}
+
+
+@keyframes cssload-rotate-one
+{
+	0%
+	{
+		transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+	}
+	100%
+	{
+		transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+	}
+}
+
+
+@keyframes cssload-rotate-two
+{
+	0%
+	{
+		transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+	}
+	100%
+	{
+		transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+	}
+}
+
+
+@keyframes cssload-rotate-three
+{
+	0%
+	{
+		transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+	}
+	100%
+	{
+		transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+	}
+}

+ 34 - 0
css/login.css

@@ -0,0 +1,34 @@
+.form-signin {
+  max-width: 330px;
+  padding: 15px;
+  margin: 0 auto;
+}
+.form-signin .form-signin-heading,
+.form-signin .checkbox {
+  margin-bottom: 10px;
+}
+.form-signin .checkbox {
+  font-weight: normal;
+}
+.form-signin .form-control {
+  position: relative;
+  height: auto;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+  padding: 10px;
+  font-size: 16px;
+}
+.form-signin .form-control:focus {
+  z-index: 2;
+}
+.form-signin input[type="email"] {
+  margin-bottom: -1px;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.form-signin input[type="password"] {
+  margin-bottom: 10px;
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}

+ 0 - 1
css/prettify.css

@@ -1 +0,0 @@
-.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}

+ 50 - 0
css/sd.css

@@ -0,0 +1,50 @@
+/* 
+ * this CSS is not part of the widget, it is here just as an example of the demo page styling.... 
+ * 
+ * Don't copy this one, roll your own. One of the key things about the widget is that 
+ * it allows you to do your own styling!
+ *
+ */
+td:focus {
+	-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+	-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;	
+	outline: rgb(91, 157, 217) auto 5px;
+}
+input.error {
+	-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px red;
+	-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px red;
+	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px red;	
+	outline: thin auto red;
+}
+input {
+	-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+	-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;	
+	outline: rgb(91, 157, 217) auto 5px;
+	outline-offset: 0px;
+	border: none;
+}
+#mainTable thead th, #mainTable tbody td { 
+  width: 25%;
+}
+#mainTable td + td, #mainTable th + th {
+	text-align: right;
+}
+table.scrollable thead tr, table.scrollable tfoot tr  {
+	position: relative;
+	display: block
+}
+
+html>body table.scrollable tbody {
+	display: block;
+	height: 330px;
+	overflow: auto;
+	width: 100%
+}
+
+html>body table.scrollable td, html>body table.scrollable th {
+	width: 200px
+}
+
+

+ 0 - 0
css/bootstrap-theme.css.map → css/vendor/bootstrap-theme.css.map


+ 0 - 0
css/bootstrap-theme.min.css.map → css/vendor/bootstrap-theme.min.css.map


+ 0 - 0
css/bootstrap.css → css/vendor/bootstrap.css


+ 0 - 0
css/bootstrap.css.map → css/vendor/bootstrap.css.map


+ 0 - 0
css/bootstrap.min.css → css/vendor/bootstrap.min.css


+ 0 - 0
css/bootstrap.min.css.map → css/vendor/bootstrap.min.css.map


+ 424 - 0
css/vendor/normalize.css

@@ -0,0 +1,424 @@
+/*! normalize.css v4.0.0 | MIT License | github.com/necolas/normalize.css */
+
+/**
+ * 1. Change the default font family in all browsers (opinionated).
+ * 2. Prevent adjustments of font size after orientation changes in IE and iOS.
+ */
+
+html {
+  font-family: sans-serif; /* 1 */
+  -ms-text-size-adjust: 100%; /* 2 */
+  -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove the margin in all browsers (opinionated).
+ */
+
+body {
+  margin: 0;
+}
+
+/* HTML5 display definitions
+   ========================================================================== */
+
+/**
+ * Add the correct display in IE 9-.
+ * 1. Add the correct display in Edge, IE, and Firefox.
+ * 2. Add the correct display in IE.
+ */
+
+article,
+aside,
+details, /* 1 */
+figcaption,
+figure,
+footer,
+header,
+main, /* 2 */
+menu,
+nav,
+section,
+summary { /* 1 */
+  display: block;
+}
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+audio,
+canvas,
+progress,
+video {
+  display: inline-block;
+}
+
+/**
+ * Add the correct display in iOS 4-7.
+ */
+
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+/**
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+  vertical-align: baseline;
+}
+
+/**
+ * Add the correct display in IE 10-.
+ * 1. Add the correct display in IE.
+ */
+
+template, /* 1 */
+[hidden] {
+  display: none;
+}
+
+/* Links
+   ========================================================================== */
+
+/**
+ * Remove the gray background on active links in IE 10.
+ */
+
+a {
+  background-color: transparent;
+}
+
+/**
+ * Remove the outline on focused links when they are also active or hovered
+ * in all browsers (opinionated).
+ */
+
+a:active,
+a:hover {
+  outline-width: 0;
+}
+
+/* Text-level semantics
+   ========================================================================== */
+
+/**
+ * 1. Remove the bottom border in Firefox 39-.
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+  border-bottom: none; /* 1 */
+  text-decoration: underline; /* 2 */
+  text-decoration: underline dotted; /* 2 */
+}
+
+/**
+ * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
+ */
+
+b,
+strong {
+  font-weight: inherit;
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+/**
+ * Add the correct font style in Android 4.3-.
+ */
+
+dfn {
+  font-style: italic;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+/**
+ * Add the correct background and color in IE 9-.
+ */
+
+mark {
+  background-color: #ff0;
+  color: #000;
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+  font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+/* Embedded content
+   ========================================================================== */
+
+/**
+ * Remove the border on images inside links in IE 10-.
+ */
+
+img {
+  border-style: none;
+}
+
+/**
+ * Hide the overflow in IE.
+ */
+
+svg:not(:root) {
+  overflow: hidden;
+}
+
+/* Grouping content
+   ========================================================================== */
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
+}
+
+/**
+ * Add the correct margin in IE 8.
+ */
+
+figure {
+  margin: 1em 40px;
+}
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+  box-sizing: content-box; /* 1 */
+  height: 0; /* 1 */
+  overflow: visible; /* 2 */
+}
+
+/* Forms
+   ========================================================================== */
+
+/**
+ * Change font properties to `inherit` in all browsers (opinionated).
+ */
+
+button,
+input,
+select,
+textarea {
+  font: inherit;
+}
+
+/**
+ * Restore the font weight unset by the previous rule.
+ */
+
+optgroup {
+  font-weight: bold;
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ * 2. Show the overflow in Edge, Firefox, and IE.
+ */
+
+button,
+input, /* 1 */
+select { /* 2 */
+  overflow: visible;
+}
+
+/**
+ * Remove the margin in Safari.
+ * 1. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+select,
+textarea { /* 1 */
+  margin: 0;
+}
+
+/**
+ * Remove the inheritence of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritence of text transform in Firefox.
+ */
+
+button,
+select { /* 1 */
+  text-transform: none;
+}
+
+/**
+ * Change the cursor in all browsers (opinionated).
+ */
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+  cursor: pointer;
+}
+
+/**
+ * Restore the default cursor to disabled elements unset by the previous rule.
+ */
+
+[disabled] {
+  cursor: default;
+}
+
+/**
+ * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
+ *    controls in Android 4.
+ * 2. Correct the inability to style clickable types in iOS.
+ */
+
+button,
+html [type="button"], /* 1 */
+[type="reset"],
+[type="submit"] {
+  -webkit-appearance: button; /* 2 */
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+input:-moz-focusring {
+  outline: 1px dotted ButtonText;
+}
+
+/**
+ * Change the border, margin, and padding in all browsers (opinionated).
+ */
+
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ *    `fieldset` elements in all browsers.
+ */
+
+legend {
+  box-sizing: border-box; /* 1 */
+  color: inherit; /* 2 */
+  display: table; /* 1 */
+  max-width: 100%; /* 1 */
+  padding: 0; /* 3 */
+  white-space: normal; /* 1 */
+}
+
+/**
+ * Remove the default vertical scrollbar in IE.
+ */
+
+textarea {
+  overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10-.
+ * 2. Remove the padding in IE 10-.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * Correct the odd appearance of search inputs in Chrome and Safari.
+ */
+
+[type="search"] {
+  -webkit-appearance: textfield;
+}
+
+/**
+ * Remove the inner padding and cancel buttons in Chrome on OS X and
+ * Safari on OS X.
+ */
+
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}

+ 3 - 0
html/admin.html

@@ -0,0 +1,3 @@
+<div id="screen-admin" class="screen">
+TODO: admin screen for managing users
+</div>

+ 19 - 0
html/login.html

@@ -0,0 +1,19 @@
+<div id="screen-login" class="screen">
+	<div class="container">
+
+	<form class="form-signin">
+	<h2 class="form-signin-heading">Special Dispatch</h2>
+	<label for="inputEmail" class="sr-only">Email address</label>
+	<input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
+	<label for="inputPassword" class="sr-only">Password</label>
+	<input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
+	<div class="checkbox">
+	  <label>
+		<input type="checkbox" value="remember-me"> Remember me
+	  </label>
+	</div>
+	<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
+	</form>
+
+	</div>
+</div>

+ 56 - 0
html/sd.html

@@ -0,0 +1,56 @@
+<div id="screen-sd" class="screen">
+	<div class="container">
+		<br/>
+		<ul class="nav nav-tabs">
+			<li class="active"><a data-toggle="tab" href="#home">Company 1</a></li>
+			<li><a data-toggle="tab" href="#menu1">Dynamics</a></li>
+			<li><a data-toggle="tab" href="#menu2">Tilly's</a></li>
+			<li><a data-toggle="tab" href="#menu2">Sephoria</a></li>
+		</ul>
+
+		<div class="tab-content">
+			<div id="home" class="tab-pane fade in active">
+				<div class="hero-unit">
+					<h1>Worksheet</h1>
+					<h4>live edit</h4>
+					
+					<hr>
+					
+					<div class="alert alert-error hide">
+						That would cost too much
+					</div>
+				
+					<table id="mainTable" class="table table-striped" style="cursor: pointer;">
+						<thead><tr><th>Name</th><th>Cost</th><th>Profit</th><th>Fun</th></tr></thead>
+					
+						<tbody>
+							<tr><td tabindex="1">Car</td><td tabindex="1">100</td><td tabindex="1">200</td><td tabindex="1">0</td></tr>
+							<tr><td tabindex="1">Bike</td><td tabindex="1">330</td><td tabindex="1">240</td><td tabindex="1">1</td></tr>
+							<tr><td tabindex="1">Plane</td><td tabindex="1">430</td><td tabindex="1">540</td><td tabindex="1">3</td></tr>
+							<tr><td tabindex="1">Yacht</td><td tabindex="1">100</td><td tabindex="1">200</td><td tabindex="1">0</td></tr>
+							<tr><td tabindex="1">Segway</td><td tabindex="1">330</td><td tabindex="1">240</td><td tabindex="1">1</td></tr>
+						</tbody>
+					
+						<tfoot><tr><th><strong>TOTAL</strong></th><th>1290</th><th>1420</th><th>5</th></tr></tfoot>
+					</table>
+
+					<input style="position: absolute; display: none;">
+					
+					<div style="text-align: right">
+						<button type="submit" class="btn btn-primary">Save</button>
+					</div>
+				</div>
+			</div>
+			
+			<div id="menu1" class="tab-pane fade">
+				<h3>Menu 1</h3>
+				<p>Some content in menu 1.</p>
+			</div>
+			
+			<div id="menu2" class="tab-pane fade">
+				<h3>Menu 2</h3>
+				<p>Some content in menu 2.</p>
+			</div>
+		</div>
+	</div>
+</div>

+ 56 - 0
index.html

@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<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, maximum-scale=1.0, user-scalable=no" />
+	<meta name="keywords" content="remine"/>
+
+	<title>Special Dispatch | Pickups</title>
+
+	<link rel="stylesheet" type="text/css" href="css/vendor/normalize.css"/>
+	<link rel="stylesheet" type="text/css" href="css/vendor/bootstrap.css"/>
+	
+	<link rel="stylesheet" type="text/css" href="css/loading.css"/>
+	<link rel="stylesheet" type="text/css" href="css/login.css"/>
+	<link rel="stylesheet" type="text/css" href="css/general.css"/>
+	<link rel="stylesheet" type="text/css" href="css/sd.css"/>
+
+	<link href='//fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'/>
+</head>
+
+
+<body>
+
+<div id="screen-loading" class="screen active">
+	<div class="cssload-loader">
+		<div class="cssload-inner cssload-one"></div>
+		<div class="cssload-inner cssload-two"></div>
+		<div class="cssload-inner cssload-three"></div>
+	</div>
+</div>
+
+
+
+<script src="js/vendor/jquery-2.2.4.js"></script>
+<script src="js/vendor/bootstrap.js"></script>
+<script src="js/vendor/routie.custom.js"></script>
+
+<script src="js/authorization.js"></script>
+<script src="js/helper.js"></script>
+<script src="js/routes.js"></script>
+<script src="js/loader.js"></script>
+
+<script src="js/init.js"></script>
+
+<script>
+$(function()
+{
+	loadHTML('html/', [
+			'login', 'sd'])
+			.done(window.loadApp);
+});
+</script>
+</body>
+</html>

+ 103 - 0
js/authorization.js

@@ -0,0 +1,103 @@
+/* exported beginAuthorization, authorizeGoogleSilently, popupGoogleAuthorization, authorizeBilling, handleAuthResult, handleReAuthResult, billingAuthorizationFailed */
+/* exported logout */
+
+var token_google;
+var token_api;
+
+
+
+function toLogin()
+{
+	showPage('login');
+	
+	var email = $('#email').val();
+	
+	if(email || email.length > 0)
+		$('#password').focus();
+	else
+		$('#email').focus();
+}
+
+function login(e)
+{
+	e.preventDefault();
+	
+	var email = $('#email').val();
+	var password = $('#password').val();
+	
+	//clear the error message
+	$('#login-error-message').html('&nbsp;');
+	
+	//set processing
+	$('#form-login')
+		.removeClass('error')
+		.addClass('processing');
+	
+	//attempt to validate
+	api['auth'].create('local', { 'email': email, 'password': password }).done(function(creds)
+	{
+		if(!creds)
+		{
+			console.log('no credentials');
+			return;
+		}
+		
+		credentials = creds;
+		token = credentials['token'];
+
+		//store credentials locally
+		localStorage['credentials']		= JSON.stringify(credentials);
+
+		$('.user_name_first').html(creds['user']['name_first']);
+
+		//store inside API
+		api['opts']['token'] = credentials['token'];
+		
+		//make sure app page is visible
+		$('#app').show();
+		
+		//reload router
+		router.reload();
+		
+		//fade away the login screen
+		$('#form-login').fadeOut();
+	})
+	.fail(function(xhr)
+	{
+		var msg = xhr.responseText;
+
+		$('#login-error-message').html(msg);
+		$('#form-login').addClass('error');
+		$('#password').val('').focus();
+	})
+	.always(function()
+	{
+		$('#form-login').removeClass('processing');
+	});
+	
+	return false;
+}
+
+function logout(e)
+{
+	console.log('logout');
+	
+	//clear the local session
+	localStorage['credentials'] = null;
+	
+	//fade in the login screen
+	showPage('login');
+	
+	$('.user_name_first').html('[User]');
+	
+	if(table_properties)
+		table_properties.clear().draw();
+	
+	if(table_dashboard_properties)
+		table_dashboard_properties.clear().draw();
+	
+	//TODO: clear data lists
+
+	e.preventDefault();
+	return false;
+}

+ 407 - 0
js/helper.js

@@ -0,0 +1,407 @@
+/* exported getParameterByName, updateQueryString, throttle, debounce, getHashParams, setStatus, addAtPosition, getValue, getValueJSON, setValueJSON, bindString, ellipsize, sizeOfObject, base64Encode */
+
+//the following is absolutely necessary for IE compatibility, because IE <= 9 have no console object
+window.console = window.console || (function()
+{
+    var c = {}; c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile = c.clear = c.exception = c.trace = c.assert = function(){};
+    return c;
+})();
+
+
+function getParameterByName(name)
+{
+	name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
+	var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
+		results = regex.exec(window['location']['search']);
+		
+	return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
+}
+
+function updateQueryString(key, value, url)
+{
+    if (!url) url = window.location.href;
+    var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"),
+        hash;
+
+    if (re.test(url)) {
+        if (typeof value !== 'undefined' && value !== null)
+            return url.replace(re, '$1' + key + "=" + value + '$2$3');
+        else {
+            hash = url.split('#');
+            url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
+            if (typeof hash[1] !== 'undefined' && hash[1] !== null) 
+                url += '#' + hash[1];
+            return url;
+        }
+    }
+    else {
+        if (typeof value !== 'undefined' && value !== null) {
+            var separator = url.indexOf('?') !== -1 ? '&' : '?';
+            hash = url.split('#');
+            url = hash[0] + separator + key + '=' + value;
+            if (typeof hash[1] !== 'undefined' && hash[1] !== null) 
+                url += '#' + hash[1];
+            return url;
+        }
+        else
+            return url;
+    }
+}
+
+function throttle(func, wait, options)
+{
+	var context, args, result;
+	var timeout = null;
+	var previous = 0;
+	
+	if(!options)
+		options = {};
+	
+	var later = function()
+	{
+		previous = options['leading'] === false ? 0 : (new Date().getTime());
+		timeout = null;
+		result = func.apply(context, args);
+		context = args = null;
+	};
+
+	return function()
+	{
+		var now = new Date().getTime();
+		if (!previous && options['leading'] === false) previous = now;
+		
+		var remaining = wait - (now - previous);
+		context = this;
+		args = arguments;
+		
+		if (remaining <= 0)
+		{
+			clearTimeout(timeout);
+			timeout = null;
+			previous = now;
+			result = func.apply(context, args);
+			context = args = null;
+		}
+		else if (!timeout && options['trailing'] !== false)
+		{
+			timeout = setTimeout(later, remaining);
+		}
+		
+		return result;
+	};
+}
+
+/**
+* Returns a function, that, as long as it continues to be invoked, will not
+* be triggered. The function will be called after it stops being called for
+* N milliseconds. If `immediate` is passed, trigger the function on the
+* leading edge, instead of the trailing.
+*
+* @param {function} func
+* @param {number} wait
+* @param {boolean} immediate
+*/
+function debounce(func, wait, immediate)
+{
+	var timeout;
+	return function() {
+		var context = this, args = arguments;
+		clearTimeout(timeout);
+		timeout = setTimeout(function() {
+			timeout = null;
+			if (!immediate) func.apply(context, args);
+		}, wait);
+		if (immediate && !timeout) func.apply(context, args);
+	};
+}
+
+
+
+/**
+ * Parses the hash parameters to this page and returns them as an object.
+ * @function
+ */
+function getHashParams()
+{
+	var params = {};
+	var hashFragment = window.location.hash;
+	
+	if(hashFragment)
+	{
+		// split up the query string and store in an object
+		var paramStrs = hashFragment.slice(1).split('&');
+		
+		for (var i = 0; i < paramStrs.length; i++)
+		{
+			var paramStr = paramStrs[i].split('=');
+			params[paramStr[0]] = unescape(paramStr[1]);
+		}
+	}
+  
+	// Opening from Drive will encode the state in a query search parameter
+	var searchFragment = window.location.search;
+	if (searchFragment)
+	{
+		// split up the query string and store in an object
+		var paramStrs2 = searchFragment.slice(1).split('&');
+		
+		for(var j = 0; j < paramStrs2.length; j++)
+		{
+			var paramStr2 = paramStrs2[j].split('=');
+			params[paramStr2[0]] = unescape(paramStr2[1]);
+		}
+	}
+
+	return params;
+}
+
+function addAtPosition($item, $list, index)
+{
+	//append to end
+	if(index === null
+		|| typeof(index) == 'undefined'
+		|| index > $('li', $list).length)
+	{
+		$item.appendTo($list);
+	}
+	else if(index === 0)
+	{
+		$item.prependTo($list);
+	}
+	else
+	{
+		$item.insertAfter($list.children().eq(index-1));
+	}
+}
+
+
+function ellipsize(text, maxLength)
+{
+    var ret = text;
+	
+    if(ret.length > maxLength)
+        ret = ret.substr(0, maxLength - 1) + "&hellip;";
+
+    return ret;
+}
+
+function sizeOfObject(object)
+{
+    var objectList = [];
+    var stack = [ object ];
+    var bytes = 0;
+
+    while ( stack.length ) {
+        var value = stack.pop();
+
+        if ( typeof value === 'boolean' ) {
+            bytes += 4;
+        }
+        else if ( typeof value === 'string' ) {
+            bytes += value.length * 2;
+        }
+        else if ( typeof value === 'number' ) {
+            bytes += 8;
+        }
+        else if
+        (
+            typeof value === 'object'
+            && objectList.indexOf( value ) === -1
+        )
+        {
+            objectList.push( value );
+
+            for( var i in value ) {
+                stack.push( value[ i ] );
+            }
+        }
+    }
+    return bytes;
+}
+
+function setStatus(status)
+{
+	window['status'] = status;
+	console.log(window['status'] = status);
+}
+
+function base64Encode(str)
+{
+	var CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+	var out = "", i = 0, len = str.length, c1, c2, c3;
+	
+	while (i < len)
+	{
+		c1 = str.charCodeAt(i++) & 0xff;
+		
+		if (i == len)
+		{
+			out += CHARS.charAt(c1 >> 2);
+			out += CHARS.charAt((c1 & 0x3) << 4);
+			out += "==";
+			break;
+		}
+		c2 = str.charCodeAt(i++);
+		
+		if (i == len)
+		{
+			out += CHARS.charAt(c1 >> 2);
+			out += CHARS.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
+			out += CHARS.charAt((c2 & 0xF) << 2);
+			out += "=";
+			break;
+		}
+		
+		c3 = str.charCodeAt(i++);
+		out += CHARS.charAt(c1 >> 2);
+		out += CHARS.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
+		out += CHARS.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
+		out += CHARS.charAt(c3 & 0x3F);
+	}
+	
+	return out;
+}
+
+
+function formatMoney(c)
+{
+	if(!c) return '';
+	
+	return Number(c).toLocaleString('en-us', { style: 'currency', currency: 'USD' }).split('.')[0];
+}
+
+
+function formatDate(dt)
+{
+	if(!dt)
+		return '';
+	
+	var date = new Date(dt);
+	
+	var year = date.getFullYear();
+	var month = (1 + date.getMonth()).toString();
+	
+	month = month.length > 1 ? month : '0' + month;
+	
+	var day = date.getDate().toString();
+	day = day.length > 1 ? day : '0' + day;
+	
+	return year + '-' + month + '-' + day;
+}
+
+
+function array_intersection(old, nu, property, inclusion)
+{
+	//items to add starts empty
+	var added = [];
+	
+	//start with all the old items, which we'll remove as we find them in the new list
+	var removed = old.slice(0);
+	
+	var unchanged = [];
+	
+	
+	//go through all new items
+    for(var i = 0; i < nu.length; i++)
+	{
+		if(!nu[i]) continue;
+			
+		var found = false;
+		
+		//go through all old items
+        for(var j = 0; j < removed.length; j++)
+		{
+			if(!removed[j]) continue;
+			
+			//if the new item is found in the old list
+			//also check if the item is to be included no matter what
+            if(removed[j][property] == nu[i][property]
+				|| (inclusion && removed[j][property] == inclusion[property]))
+			{
+				//this new item is in the old list, so remove it from the old list
+				found = true;
+				
+				//remove this item from the remove list
+				var unchanged_item = removed.splice(j, 1)[0];
+				
+				//add it to the unchanged list
+				unchanged.push(unchanged_item);
+				
+                break;
+            }
+		}
+			
+		if(!found)
+			added.push(nu[i]);
+	}
+	
+	
+	var obj =
+	{
+		'added':		added,
+		'removed':		removed,
+		'unchanged':	unchanged
+	};
+	
+    return obj;
+}
+
+
+var second = 1e3,
+	minute = 6e4,
+	hour = 36e5,
+	day = 864e5,
+	week = 6048e5;
+
+function timeFromNow(tm)
+{
+    var system_date = new Date(Date.parse(tm));
+    var user_date = new Date();
+	
+    var diff = Math.floor((user_date - system_date) / 1000);
+    if (diff <= 1) {return "just now";}
+    if (diff < 20) {return diff + " seconds ago";}
+    if (diff < 40) {return "half a minute ago";}
+    if (diff < 60) {return "less than a minute ago";}
+    if (diff <= 90) {return "one minute ago";}
+    if (diff <= 3540) {return Math.round(diff / 60) + " minutes ago";}
+    if (diff <= 5400) {return "1 hour ago";}
+    if (diff <= 86400) {return Math.round(diff / 3600) + " hours ago";}
+    if (diff <= 129600) {return "1 day ago";}
+    if (diff < 604800) {return Math.round(diff / 86400) + " days ago";}
+    if (diff <= 777600) {return "1 week ago";}
+	/*
+	if (diff < 1209600) {return Math.round(diff / 1209600) + " weeks ago";}
+    if (diff <= 4838400) {return "1 month ago";}
+	*/
+	
+	var dateString =
+		system_date.getFullYear() +"/"+
+		("0" + (system_date.getMonth()+1)).slice(-2) +"/"+
+		("0" + system_date.getDate()).slice(-2) + " " +
+		("0" + system_date.getHours()).slice(-2) + ":" +
+		("0" + system_date.getMinutes()).slice(-2) + ":" +
+		("0" + system_date.getSeconds()).slice(-2);
+	
+    return "on " + dateString;
+}
+
+function timeDifference(a, b)
+{
+	var date_a = new Date(a);
+	var date_b = new Date(b);
+	
+	var sec = parseInt((date_b - date_a) / 1000);
+	
+	var ret = '';
+	
+	if(sec > 60)
+	{
+		ret += parseInt(sec / 60) + ' min ';
+		sec = sec % 60;
+	}
+	
+	ret += sec + ' sec';
+	
+	return ret;
+}

+ 15 - 0
js/init.js

@@ -0,0 +1,15 @@
+//for closure compiler to ensure it gets exported
+window['loadApp'] = loadApp;
+
+var router = window['router'];
+
+
+
+function loadApp()
+{
+	//login and logout
+	//$('form.login').submit(login);
+	//$('#logout').click(logout);
+	
+	showPage('login');
+}

+ 95 - 0
js/loader.js

@@ -0,0 +1,95 @@
+//for closure compiler to ensure these both get exported
+window['loadIcons'] = loadIcons;
+window['loadHTML'] = loadHTML;
+
+
+function loadIcons(dir, assets)
+{
+	dir = dir || './';
+	
+	//delete existing icons
+	$('#svg-icons').remove();
+	
+	//add new icon holder
+	$svg = $('<svg id="svg-icons" xmlns="http://www.w3.org/2000/svg" style="display: none"></svg>');
+	
+	$svg.appendTo('body');
+	
+	
+	//add returned icon to svg icons container
+	
+	if(typeof assets === 'string')
+	{
+		return $.ajax(dir + assets).done(function(data, status, xhr)
+		{
+			$(data).each(function(item, index)
+			{
+				var id = $(this).attr('id');
+				
+				if(!id)
+					return;
+
+				$(this)
+					.attr('id', 'icon-' + id)
+					.appendTo($svg);
+			});
+		});
+	}
+
+	
+	var addIcon = function(icon)
+	{
+		return function(data, status, xhr)
+		{
+			$(data)
+				.find('svg')
+				.attr('id', 'icon-' + icon)
+				.appendTo($svg);
+		}
+	};
+
+	
+	var promises = [];
+
+	for(var i = 0, len = assets.length; i < len; i++)
+		promises.push($.ajax(dir + assets[i] + '.svg').done(addIcon(assets[i])));
+	
+	return $.when(promises);
+}
+
+
+function loadHTML(dir, assets, destination)
+{
+	dir = dir || './';
+	
+	//add returned icon to svg icons container
+	var addHTML = function(full_id)
+	{
+		return function(data, status, xhr)
+		{
+			$(data).appendTo(destination || 'body');
+		}
+	};
+
+	
+	if(typeof assets === 'string')
+		assets = [assets];
+	
+	var promises = [];
+
+	for(var i = 0, len = assets.length; i < len; i++)
+	{
+		var id = assets[i];
+		var index = id.indexOf('-');
+		
+		if(index !== -1)
+			url = dir + id.substr(0, index) + '/' + id.substr(index+1) + '.html';
+		else
+			url = dir + id + '.html';
+		
+		promises.push($.ajax(url).then(addHTML(assets[i])));
+	}
+	
+	//return a promise for all the assets
+	return $.when.apply($, promises);
+}

+ 0 - 13
js/npm.js

@@ -1,13 +0,0 @@
-// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
-require('../../js/transition.js')
-require('../../js/alert.js')
-require('../../js/button.js')
-require('../../js/carousel.js')
-require('../../js/collapse.js')
-require('../../js/dropdown.js')
-require('../../js/modal.js')
-require('../../js/tooltip.js')
-require('../../js/popover.js')
-require('../../js/scrollspy.js')
-require('../../js/tab.js')
-require('../../js/affix.js')

+ 60 - 0
js/routes.js

@@ -0,0 +1,60 @@
+/* exported initializeRoutes */
+
+
+function initializeRoutes()
+{
+	router('/home',			routes.home);
+	router('/sd',	routes.sd);
+	
+	router('*',				routes.home);
+}
+
+
+//add a 'firstLoad' setup function into the route's middleware chain
+
+
+var routes =
+{
+	home: function()
+	{
+		showPage('home');
+	},
+	
+	sd: function()
+	{
+		showPage('sd');
+	}
+};
+
+function showPage(page)
+{
+	console.log('show page', page);
+	
+	var $page_old = $('.screen.active');
+	var $page_new = $('#screen-' + page);
+	
+	//do nothing if we are already on the page
+	if($page_old.is($page_new))
+		return;
+	
+	$('body').attr('class', 'screen-' + page);
+	
+	
+	//put new page on top of old
+	$page_new.insertAfter('.screen.active');
+
+	//slide it to the right while crossfading
+	$page_old
+		.one('animationend', function(event) //jshint ignore:line, unused
+		{
+			$(this).hide();
+		}) //TODO: add detect webkitanimationend or animationend
+		.removeClass('active');
+
+	//slide from left while crossfading
+	$page_new
+		.show()
+		.off('animationend')
+		.addClass('active')
+		.focus();  //this needs to be used in conjunction with a "tabindex" field on the html object to maintain keyboard focus
+}

+ 0 - 0
js/bootstrap.js → js/vendor/bootstrap.js


+ 0 - 0
js/bootstrap.min.js → js/vendor/bootstrap.min.js


+ 0 - 0
js/jquery-2.2.4.js → js/vendor/jquery-2.2.4.js


+ 398 - 0
js/vendor/jquery.rest.custom.js

@@ -0,0 +1,398 @@
+// jQuery REST Client - v1.0.2 - https://github.com/jpillora/jquery.rest
+// Jaime Pillora <dev@jpillora.com> - MIT Copyright 2014
+(function(window,$,undefined) {'use strict';
+var Cache, Resource, Verb, defaultOpts, deleteWarning, encode64, error, inheritExtend, s, stringify, validateOpts, validateStr;
+
+error = function(msg) {
+  throw new Error("ERROR: jquery.rest: " + msg);
+};
+
+s = function(n) {
+  var t;
+  t = "";
+  while (n-- > 0) {
+    t += "  ";
+  }
+  return t;
+};
+
+encode64 = function(s) {
+  if (!window.btoa) {
+    error("You need a polyfill for 'btoa' to use basic auth.");
+  }
+  return window.btoa(s);
+};
+
+stringify = function(obj) {
+  if (!window.JSON) {
+    error("You need a polyfill for 'JSON' to use stringify.");
+  }
+  return window.JSON.stringify(obj);
+};
+
+inheritExtend = function(a, b) {
+  var F;
+  F = function() {};
+  F.prototype = a;
+  return $.extend(true, new F(), b);
+};
+
+validateOpts = function(options) {
+  if (!(options && $.isPlainObject(options))) {
+    return false;
+  }
+  $.each(options, function(name) {
+    if (defaultOpts[name] === undefined) {
+      return error("Unknown option: '" + name + "'");
+    }
+  });
+  return null;
+};
+
+validateStr = function(name, str) {
+  if ('string' !== $.type(str)) {
+    return error("'" + name + "' must be a string");
+  }
+};
+
+deleteWarning = function() {
+  return alert('"delete()" has been deprecated. Please use "destroy()" or "del()" instead.');
+};
+
+defaultOpts = {
+  url: '',
+  cache: 0,
+  request: function(resource, options) {
+    return $.ajax(options);
+  },
+  isSingle: false,
+  autoClearCache: true,
+  cachableMethods: ['GET'],
+  methodOverride: false,
+  stringifyData: false,
+  stripTrailingSlash: true,
+  password: null,
+  username: null,
+  token: null,
+  verbs: {
+    'create': 'POST',
+    'read': 'GET',
+    'update': 'PUT',
+    'destroy': 'DELETE'
+  },
+  ajax: {
+    dataType: 'json'
+  }
+};
+
+Cache = (function() {
+  function Cache(parent) {
+    this.parent = parent;
+    this.c = {};
+  }
+
+  Cache.prototype.valid = function(date) {
+    var diff;
+    diff = new Date().getTime() - date.getTime();
+    return diff <= this.parent.opts.cache * 1000;
+  };
+
+  Cache.prototype.key = function(obj) {
+    var key,
+      _this = this;
+    key = "";
+    $.each(obj, function(k, v) {
+      return key += k + "=" + ($.isPlainObject(v) ? "{" + _this.key(v) + "}" : v) + "|";
+    });
+    return key;
+  };
+
+  Cache.prototype.get = function(key) {
+    var result;
+    result = this.c[key];
+    if (!result) {
+      return;
+    }
+    if (this.valid(result.created)) {
+      return result.data;
+    }
+  };
+
+  Cache.prototype.put = function(key, data) {
+    return this.c[key] = {
+      created: new Date(),
+      data: data
+    };
+  };
+
+  Cache.prototype.clear = function(regexp) {
+    var _this = this;
+    if (regexp) {
+      return $.each(this.c, function(k) {
+        if (k.match(regexp)) {
+          return delete _this.c[k];
+        }
+      });
+    } else {
+      return this.c = {};
+    }
+  };
+
+  return Cache;
+
+})();
+
+Verb = (function() {
+  function Verb(name, method, options, parent) {
+    this.name = name;
+    this.method = method;
+    if (options == null) {
+      options = {};
+    }
+    this.parent = parent;
+    validateStr('name', this.name);
+    validateStr('method', this.method);
+    validateOpts(options);
+    if (this.parent[this.name]) {
+      error("Cannot add Verb: '" + name + "' already exists");
+    }
+    this.method = method.toUpperCase();
+    if (!options.url) {
+      options.url = '';
+    }
+    this.opts = inheritExtend(this.parent.opts, options);
+    this.root = this.parent.root;
+    this.custom = !defaultOpts.verbs[this.name];
+    this.call = $.proxy(this.call, this);
+    this.call.instance = this;
+  }
+
+  Verb.prototype.call = function() {
+    var data, url, _ref;
+    _ref = this.parent.extractUrlData(this.method, arguments), url = _ref.url, data = _ref.data;
+    if (this.custom) {
+      url += this.opts.url || this.name;
+    }
+    return this.parent.ajax.call(this, this.method, url, data);
+  };
+
+  Verb.prototype.show = function(d) {
+    return console.log(s(d) + this.name + ": " + this.method);
+  };
+
+  return Verb;
+
+})();
+
+Resource = (function() {
+  function Resource(nameOrUrl, options, parent) {
+    if (options == null) {
+      options = {};
+    }
+    validateOpts(options);
+    if (parent && parent instanceof Resource) {
+      this.name = nameOrUrl;
+      validateStr('name', this.name);
+      this.constructChild(parent, options);
+    } else {
+      this.url = nameOrUrl || '';
+      validateStr('url', this.url);
+      this.constructRoot(options);
+    }
+  }
+
+  Resource.prototype.constructRoot = function(options) {
+    this.opts = inheritExtend(defaultOpts, options);
+    this.root = this;
+    this.expectedIds = 0;
+    this.urlNoId = this.url;
+    this.cache = new Cache(this);
+    this.parent = null;
+    return this.name = this.opts.name || 'ROOT';
+  };
+
+  Resource.prototype.constructChild = function(parent, options) {
+    this.parent = parent;
+    validateStr('name', this.name);
+    if (!(this.parent instanceof Resource)) {
+      this.error("Invalid parent");
+    }
+    if (this.parent[this.name]) {
+      this.error("'" + name + "' already exists");
+    }
+    if (!options.url) {
+      options.url = '';
+    }
+    this.opts = inheritExtend(this.parent.opts, options);
+    this.opts.isSingle = 'isSingle' in options && options.isSingle;
+    this.root = this.parent.root;
+    this.urlNoId = this.parent.url + ("" + (this.opts.url || this.name) + "/");
+    this.url = this.urlNoId;
+    this.expectedIds = this.parent.expectedIds;
+    if (!this.opts.isSingle) {
+      this.expectedIds += 1;
+      this.url += ":ID_" + this.expectedIds + "/";
+    }
+    $.each(this.opts.verbs, $.proxy(this.addVerb, this));
+    if (this.destroy) {
+      this.del = this.destroy;
+      return this["delete"] = deleteWarning;
+    }
+  };
+
+  Resource.prototype.error = function(msg) {
+    return error("Cannot add Resource: " + msg);
+  };
+
+  Resource.prototype.add = function(name, options) {
+    return this[name] = new Resource(name, options, this);
+  };
+
+  Resource.prototype.addVerb = function(name, method, options) {
+    return this[name] = new Verb(name, method, options, this).call;
+  };
+
+  Resource.prototype.show = function(d) {
+    if (d == null) {
+      d = 0;
+    }
+    if (d > 25) {
+      error("Plugin Bug! Recursion Fail");
+    }
+    if (this.name) {
+      console.log(s(d) + this.name + ": " + this.url);
+    }
+    $.each(this, function(name, fn) {
+      if ($.type(fn) === 'function' && fn.instance instanceof Verb && name !== 'del') {
+        return fn.instance.show(d + 1);
+      }
+    });
+    $.each(this, function(name, res) {
+      if (name !== "parent" && name !== "root" && res instanceof Resource) {
+        return res.show(d + 1);
+      }
+    });
+    return null;
+  };
+
+  Resource.prototype.toString = function() {
+    return this.name;
+  };
+
+  Resource.prototype.extractUrlData = function(name, args) {
+    var arg, canUrl, canUrlNoId, data, i, id, ids, msg, params, providedIds, t, url, _i, _j, _len, _len1;
+    ids = [];
+    data = null;
+    params = null;
+    for (_i = 0, _len = args.length; _i < _len; _i++) {
+      arg = args[_i];
+      t = $.type(arg);
+      if (t === 'string' || t === 'number') {
+        ids.push(arg);
+      } else if (t === 'object' && data === null) {
+        data = arg;
+      } else if (t === 'object' && params === null) {
+        params = arg;
+      } else {
+        error(("Invalid argument: " + arg + " (" + t + ").") + " Must be strings or ints (IDs) followed by one optional object and one optional query params object.");
+      }
+    }
+    providedIds = ids.length;
+    canUrl = name !== 'create';
+    canUrlNoId = name !== 'update' && name !== 'delete';
+    url = null;
+    if (canUrl && providedIds === this.expectedIds) {
+      url = this.url;
+    }
+    if (canUrlNoId && providedIds === this.expectedIds - 1) {
+      url = this.urlNoId;
+    }
+    if (url === null) {
+      if (canUrlNoId) {
+        msg = this.expectedIds - 1;
+      }
+      if (canUrl) {
+        msg = (msg ? msg + ' or ' : '') + this.expectedIds;
+      }
+      error("Invalid number of ID arguments, required " + msg + ", provided " + providedIds);
+    }
+    for (i = _j = 0, _len1 = ids.length; _j < _len1; i = ++_j) {
+      id = ids[i];
+      url = url.replace(new RegExp("\/:ID_" + (i + 1) + "\/"), "/" + id + "/");
+    }
+    if (params) {
+      url += "?" + ($.param(params));
+    }
+    return {
+      url: url,
+      data: data
+    };
+  };
+
+  Resource.prototype.ajax = function(method, url, data) {
+    var ajaxOpts, encoded, escapedUrl, headers, key, req, useCache,
+      _this = this;
+    if (!method) {
+      error("method missing");
+    }
+    if (!url) {
+      error("url missing");
+    }
+    headers = {};
+    if (this.opts.username && this.opts.password) {
+      encoded = encode64(this.opts.username + ":" + this.opts.password);
+      headers['Authorization'] = "Basic " + encoded;
+    }
+
+	if (this.opts.token) {
+      headers['Authorization'] = "Bearer " + this.opts.token;
+    }
+    if (data && this.opts.stringifyData && (method !== 'GET' && method !== 'HEAD')) {
+      data = stringify(data);
+      headers['Content-Type'] = "application/json";
+    }
+    if (this.opts.methodOverride && (method !== 'GET' && method !== 'HEAD' && method !== 'POST')) {
+      headers['X-HTTP-Method-Override'] = method;
+      method = 'POST';
+    }
+    if (this.opts.stripTrailingSlash) {
+      url = url.replace(/\/$/, "");
+    }
+    ajaxOpts = {
+      url: url,
+      type: method,
+      headers: headers
+    };
+    if (data) {
+      ajaxOpts.data = data;
+    }
+    ajaxOpts = $.extend(true, {}, this.opts.ajax, ajaxOpts);
+    useCache = this.opts.cache && $.inArray(method, this.opts.cachableMethods) >= 0;
+    if (useCache) {
+      key = this.root.cache.key(ajaxOpts);
+      req = this.root.cache.get(key);
+      if (req) {
+        return req;
+      }
+    }
+    if (this.opts.cache && this.opts.autoClearCache && $.inArray(method, this.opts.cachableMethods) === -1) {
+      escapedUrl = url.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
+      this.root.cache.clear(new RegExp(escapedUrl));
+    }
+    req = this.opts.request(this.parent, ajaxOpts);
+    if (useCache) {
+      req.done(function() {
+        return _this.root.cache.put(key, req);
+      });
+    }
+    return req;
+  };
+
+  return Resource;
+
+})();
+
+Resource.defaults = defaultOpts;
+
+$.RestClient = Resource;
+}.call(this,window,jQuery));

Plik diff jest za duży
+ 0 - 0
js/vendor/jquery.rest.custom.min.js


+ 0 - 0
js/mindmup-editabletable.js → js/vendor/mindmup-editabletable.js


+ 206 - 0
js/vendor/routie.custom.js

@@ -0,0 +1,206 @@
+/*!
+ * routie - a tiny hash router
+ * v0.3.2
+ * http://projects.jga.me/routie
+ * copyright Greg Allen 2013
+ * MIT License
+*/
+(function(w) {
+
+  var routes = [];
+  var map = {};
+  var reference = "router";
+  var oldReference = w[reference];
+
+  var Route = function(path, name) {
+    this.name = name;
+    this.path = path;
+    this.keys = [];
+    this.fns = [];
+    this.params = {};
+    this.regex = pathToRegexp(this.path, this.keys, false, false);
+
+  };
+
+  Route.prototype.addHandler = function(fn) {
+    this.fns.push(fn);
+  };
+
+  Route.prototype.removeHandler = function(fn) {
+    for (var i = 0, c = this.fns.length; i < c; i++) {
+      var f = this.fns[i];
+      if (fn == f) {
+        this.fns.splice(i, 1);
+        return;
+      }
+    }
+  };
+
+  Route.prototype.run = function(params) {
+    for (var i = 0, c = this.fns.length; i < c; i++) {
+      this.fns[i].apply(this, params);
+    }
+  };
+
+  Route.prototype.match = function(path, params){
+    var m = this.regex.exec(path);
+
+    if (!m) return false;
+
+
+    for (var i = 1, len = m.length; i < len; ++i) {
+      var key = this.keys[i - 1];
+
+      var val = ('string' == typeof m[i]) ? decodeURIComponent(m[i]) : m[i];
+
+      if (key) {
+        this.params[key.name] = val;
+      }
+      params.push(val);
+    }
+
+    return true;
+  };
+
+  Route.prototype.toURL = function(params) {
+    var path = this.path;
+    for (var param in params) {
+      path = path.replace('/:'+param, '/'+params[param]);
+    }
+    path = path.replace(/\/:.*\?/g, '/').replace(/\?/g, '');
+    if (path.indexOf(':') != -1) {
+      throw new Error('missing parameters for url: '+path);
+    }
+    return path;
+  };
+
+  var pathToRegexp = function(path, keys, sensitive, strict) {
+    if (path instanceof RegExp) return path;
+    if (path instanceof Array) path = '(' + path.join('|') + ')';
+    path = path
+      .concat(strict ? '' : '/?')
+      .replace(/\/\(/g, '(?:/')
+      .replace(/\+/g, '__plus__')
+      .replace(/(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?/g, function(_, slash, format, key, capture, optional){
+        keys.push({ name: key, optional: !! optional });
+        slash = slash || '';
+        return '' + (optional ? '' : slash) + '(?:' + (optional ? slash : '') + (format || '') + (capture || (format && '([^/.]+?)' || '([^/]+?)')) + ')' + (optional || '');
+      })
+      .replace(/([\/.])/g, '\\$1')
+      .replace(/__plus__/g, '(.+)')
+      .replace(/\*/g, '(.*)');
+    return new RegExp('^' + path + '$', sensitive ? '' : 'i');
+  };
+
+  var addHandler = function(path, fn) {
+    var s = path.split(' ');
+    var name = (s.length == 2) ? s[0] : null;
+    path = (s.length == 2) ? s[1] : s[0];
+
+    if (!map[path]) {
+      map[path] = new Route(path, name);
+      routes.push(map[path]);
+    }
+    map[path].addHandler(fn);
+  };
+
+  var routie = function(path, fn) {
+    if (typeof fn == 'function') {
+      addHandler(path, fn);
+    } else if (typeof path == 'object') {
+      for (var p in path) {
+        addHandler(p, path[p]);
+      }
+    } else if (typeof fn === 'undefined') {
+      routie.navigate(path);
+    }
+  };
+
+  routie.lookup = function(name, obj) {
+    for (var i = 0, c = routes.length; i < c; i++) {
+      var route = routes[i];
+      if (route.name == name) {
+        return route.toURL(obj);
+      }
+    }
+  };
+
+  routie.remove = function(path, fn) {
+    var route = map[path];
+    if (!route)
+      return;
+    route.removeHandler(fn);
+  };
+
+  routie.removeAll = function() {
+    map = {};
+    routes = [];
+  };
+
+  routie.navigate = function(path, options) {
+    options = options || {};
+    var silent = options.silent || false;
+
+    if (silent) {
+      removeListener();
+    }
+    setTimeout(function() {
+      window.location.hash = path;
+
+      if (silent) {
+        setTimeout(function() { 
+          addListener();
+        }, 1);
+      }
+
+    }, 1);
+  };
+
+  routie.noConflict = function() {
+    w[reference] = oldReference;
+    return routie;
+  };
+
+  var getHash = function() {
+    return window.location.hash.substring(1);
+  };
+
+  var checkRoute = function(hash, route) {
+    var params = [];
+    if (route.match(hash, params)) {
+      route.run(params);
+      return true;
+    }
+    return false;
+  };
+
+  var hashChanged = routie.reload = function() {
+    var hash = getHash();
+    for (var i = 0, c = routes.length; i < c; i++) {
+      var route = routes[i];
+      if (checkRoute(hash, route)) {
+        return;
+      }
+    }
+  };
+
+  var addListener = function() {
+    if (w.addEventListener) {
+      w.addEventListener('hashchange', hashChanged, false);
+    } else {
+      w.attachEvent('onhashchange', hashChanged);
+    }
+  };
+
+  var removeListener = function() {
+    if (w.removeEventListener) {
+      w.removeEventListener('hashchange', hashChanged);
+    } else {
+      w.detachEvent('onhashchange', hashChanged);
+    }
+  };
+  addListener();
+
+  w[reference] = routie;
+   
+})(window);

Plik diff jest za duży
+ 0 - 0
js/vendor/routie.custom.min.js


+ 0 - 86
login.html

@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
-    <meta name="description" content="">
-    <meta name="author" content="">
-    <link rel="icon" href="../../favicon.ico">
-
-    <title>Special Dispatch</title>
-
-    <!-- Bootstrap core CSS -->
-    <link href="css/bootstrap.min.css" rel="stylesheet">
-
-    <!-- Custom styles for this template -->
-    <style>
-	body {
-  padding-top: 40px;
-  padding-bottom: 40px;
-  background-color: #eee;
-}
-
-.form-signin {
-  max-width: 330px;
-  padding: 15px;
-  margin: 0 auto;
-}
-.form-signin .form-signin-heading,
-.form-signin .checkbox {
-  margin-bottom: 10px;
-}
-.form-signin .checkbox {
-  font-weight: normal;
-}
-.form-signin .form-control {
-  position: relative;
-  height: auto;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  padding: 10px;
-  font-size: 16px;
-}
-.form-signin .form-control:focus {
-  z-index: 2;
-}
-.form-signin input[type="email"] {
-  margin-bottom: -1px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.form-signin input[type="password"] {
-  margin-bottom: 10px;
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-</style>
-  </head>
-
-  <body>
-
-    <div class="container">
-
-      <form class="form-signin">
-        <h2 class="form-signin-heading">Special Dispatch</h2>
-        <label for="inputEmail" class="sr-only">Email address</label>
-        <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
-        <label for="inputPassword" class="sr-only">Password</label>
-        <input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
-        <div class="checkbox">
-          <label>
-            <input type="checkbox" value="remember-me"> Remember me
-          </label>
-        </div>
-        <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
-      </form>
-
-    </div> <!-- /container -->
-
-
-    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
-    <script src="../../assets/js/ie10-viewport-bug-workaround.js"></script>
-  </body>
-</html>

+ 0 - 87
worksheet.html

@@ -1,87 +0,0 @@
-<html>
-<head>
-<link href="css/prettify.css" rel="stylesheet"/>
-<link href="css/bootstrap.css" rel="stylesheet"/>
-<link href="css/index.css" rel="stylesheet"/>
-
-<script type="text/javascript" src="js/jquery-2.2.4.js"></script>
-<script type="text/javascript" src="js/bootstrap.js"></script>
-<script type="text/javascript" src="js/mindmup-editabletable.js"></script>
-<script type="text/javascript" src="js/prettify.js"></script>
-</head>
-
-<body>
-<div class="container">
-	<br/>
-	<ul class="nav nav-tabs">
-		<li class="active"><a data-toggle="tab" href="#home">Company 1</a></li>
-		<li><a data-toggle="tab" href="#menu1">Company 2</a></li>
-		<li><a data-toggle="tab" href="#menu2">Company 3</a></li>
-		<li><a data-toggle="tab" href="#menu2">User</a></li>
-	</ul>
-
-	<div class="tab-content">
-		<div id="home" class="tab-pane fade in active">
-			<div class="hero-unit">
-				<h1>Worksheet</h1>
-				<h4>live edit</h4>
-				
-				<hr>
-				
-				<div class="alert alert-error hide">
-					That would cost too much
-				</div>
-			
-				<table id="mainTable" class="table table-striped" style="cursor: pointer;">
-					<thead><tr><th>Name</th><th>Cost</th><th>Profit</th><th>Fun</th></tr></thead>
-				
-					<tbody>
-						<tr><td tabindex="1">Car</td><td tabindex="1">100</td><td tabindex="1">200</td><td tabindex="1">0</td></tr>
-						<tr><td tabindex="1">Bike</td><td tabindex="1">330</td><td tabindex="1">240</td><td tabindex="1">1</td></tr>
-						<tr><td tabindex="1">Plane</td><td tabindex="1">430</td><td tabindex="1">540</td><td tabindex="1">3</td></tr>
-						<tr><td tabindex="1">Yacht</td><td tabindex="1">100</td><td tabindex="1">200</td><td tabindex="1">0</td></tr>
-						<tr><td tabindex="1">Segway</td><td tabindex="1">330</td><td tabindex="1">240</td><td tabindex="1">1</td></tr>
-					</tbody>
-				
-					<tfoot><tr><th><strong>TOTAL</strong></th><th>1290</th><th>1420</th><th>5</th></tr></tfoot>
-				</table>
-
-				<input style="position: absolute; display: none;">
-				
-				<div style="text-align: right">
-					<button type="submit" class="btn btn-primary">Save</button>
-				</div>
-			</div>
-		</div>
-		
-		<div id="menu1" class="tab-pane fade">
-			<h3>Menu 1</h3>
-			<p>Some content in menu 1.</p>
-		</div>
-		
-		<div id="menu2" class="tab-pane fade">
-			<h3>Menu 2</h3>
-			<p>Some content in menu 2.</p>
-		</div>
-	</div>
-</div>
-
-<script>
-$(function()
-{
-	$('table').editableTableWidget();
-	
-	$('table td').on('change', function(evt, newValue)
-	{
-		// do something with the new cell value 
-/*		if (....) { 
-			return false; // reject change
-		}
-*/
-	});
-});
-</script>
-</body>
-
-
-</html>

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików