COPYING
css/custom.css
css/hl.css
+css/modal.css
css/themes/cyborg.css
css/themes/readable.css
css/themes/slate.css
-js/00-zepto.js
-js/10-bootstrap-modal.js
-js/20-sprintf.js
+js/00-strict.js
+js/05-makedom.js
+js/05-ki.js
+js/10-modal.js
js/80-sidebar.js
js/90-divine-format.js
js/90-form.js
LICENSE => 'AGPL_3',
SIGN => 1,
clean => {
- FILES => 'static/css/ static/js.js static/js.js.gz css/logos.css static/logos.png static/js.map static/js/'
+ FILES => 'static/css/ static/js/ css/logos.css static/logos.png'
},
BUILD_REQUIRES => {
qw/CSS::Minifier::XS 0
CSS::SpriteMaker 0
File::Slurp 0
- JavaScript::Minifier::XS 0
Test::MockTime 0
Test::More 0
Test::WWW::Mechanize::PSGI 0/,
word-break: break-all;
}
-ul.list-inline {
- display: inline-block;
+#themes {
+ margin-left: 0;
+}
+
+#themes:before {
+ content: " Themes: ";
}
--- /dev/null
+.backdrop {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: #000;
+ z-index: 1;
+}
+
+.modal {
+ position: absolute;
+ width: 60%;
+ top: 10%;
+ left: 20%;
+ background-color: #272B30;
+ color: #C8C8C8;
+ padding: 0.7em;
+
+ transform: scale(1.5);
+ -webkit-transform: scale(1.5);
+ z-index: 2;
+}
+
+.modal:after {
+ position: absolute;
+ content: "";
+ bottom: -10%;
+ height: 10%;
+ width: 1px;
+}
+
+.modal,.backdrop {
+ transition: transform 0.6s, opacity 0.6s;
+ -webkit-transition: transform 0.6s, opacity 0.6s;
+ pointer-events: none;
+ opacity: 0;
+}
+
+.modal-open .modal {
+ transform: scale(1);
+ -webkit-transform: scale(1);
+ opacity: 1;
+ pointer-events: auto;
+}
+
+.modal-open .backdrop {
+ opacity: 0.7;
+ pointer-events: auto;
+}
/*!
- * bootswatch v3.3.4
+ * bootswatch v3.3.4+1
* Homepage: http://bootswatch.com
* Copyright 2012-2015 Thomas Park
* Licensed under MIT
.table-hover > tbody > tr.warning:hover > th {
background-color: #e67a00;
}
-fieldset {
- padding: 0;
- margin: 0;
- border: 0;
- min-width: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 20px;
- font-size: 21px;
- line-height: inherit;
- color: #888888;
- border: 0;
- border-bottom: 1px solid #282828;
-}
label {
display: inline-block;
max-width: 100%;
margin-bottom: 5px;
font-weight: bold;
}
-input[type="search"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
input[type="radio"],
input[type="checkbox"] {
margin: 4px 0 0;
input[type="file"] {
display: block;
}
-input[type="range"] {
- display: block;
- width: 100%;
-}
-select[multiple],
-select[size] {
- height: auto;
-}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
-output {
- display: block;
- padding-top: 9px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #888888;
-}
.form-control {
display: block;
width: 100%;
.form-control::-webkit-input-placeholder {
color: #888888;
}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
- background-color: #adafae;
- opacity: 1;
-}
-.form-control[disabled],
-fieldset[disabled] .form-control {
- cursor: not-allowed;
-}
textarea.form-control {
height: auto;
}
-input[type="search"] {
- -webkit-appearance: none;
-}
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
- input[type="date"],
- input[type="time"],
- input[type="datetime-local"],
- input[type="month"] {
- line-height: 38px;
- }
- input[type="date"].input-sm,
- input[type="time"].input-sm,
- input[type="datetime-local"].input-sm,
- input[type="month"].input-sm,
- .input-group-sm input[type="date"],
- .input-group-sm input[type="time"],
- .input-group-sm input[type="datetime-local"],
- .input-group-sm input[type="month"] {
- line-height: 30px;
- }
- input[type="date"].input-lg,
- input[type="time"].input-lg,
- input[type="datetime-local"].input-lg,
- input[type="month"].input-lg,
- .input-group-lg input[type="date"],
- .input-group-lg input[type="time"],
- .input-group-lg input[type="datetime-local"],
- .input-group-lg input[type="month"] {
- line-height: 54px;
- }
-}
.form-group {
margin-bottom: 15px;
}
-.radio,
-.checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
- min-height: 20px;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-left: -20px;
- margin-top: 4px \9;
-}
-.radio + .radio,
-.checkbox + .checkbox {
- margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
- position: relative;
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- vertical-align: middle;
- font-weight: normal;
- cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
- cursor: not-allowed;
-}
-.form-control-static {
- padding-top: 9px;
- padding-bottom: 9px;
- margin-bottom: 0;
- min-height: 34px;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
- padding-left: 0;
- padding-right: 0;
-}
.btn {
display: inline-block;
margin-bottom: 0;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
- cursor: not-allowed;
- pointer-events: none;
- opacity: 0.65;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
-}
.btn-default {
color: #ffffff;
background-color: #424242;
color: #2a9fd6;
background-color: #ffffff;
}
-.btn-link {
- color: #2a9fd6;
- font-weight: normal;
- border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link.active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
- border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #2a9fd6;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
- color: #888888;
- text-decoration: none;
-}
-.btn-lg {
- padding: 14px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-.btn-sm {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-xs {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.fade {
- opacity: 0;
- -webkit-transition: opacity 0.15s linear;
- -o-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- display: none;
-}
-.collapse.in {
- display: block;
-}
-tr.collapse.in {
- display: table-row;
-}
-tbody.collapse.in {
- display: table-row-group;
-}
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition-property: height, visibility;
- -o-transition-property: height, visibility;
- transition-property: height, visibility;
- -webkit-transition-duration: 0.35s;
- -o-transition-duration: 0.35s;
- transition-duration: 0.35s;
- -webkit-transition-timing-function: ease;
- -o-transition-timing-function: ease;
- transition-timing-function: ease;
-}
.nav {
margin-bottom: 0;
padding-left: 0;
padding: 9px;
border-radius: 3px;
}
-.close {
- float: right;
- font-size: 21px;
- font-weight: bold;
- line-height: 1;
- color: #000000;
- text-shadow: 0 1px 0 #ffffff;
- opacity: 0.2;
- filter: alpha(opacity=20);
-}
-.close:hover,
-.close:focus {
- color: #000000;
- text-decoration: none;
- cursor: pointer;
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-button.close {
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
- -webkit-appearance: none;
-}
-.modal-open {
- overflow: hidden;
-}
-.modal {
- display: none;
- overflow: hidden;
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- -webkit-overflow-scrolling: touch;
- outline: 0;
-}
-.modal.fade .modal-dialog {
- -webkit-transform: translate(0, -25%);
- -ms-transform: translate(0, -25%);
- -o-transform: translate(0, -25%);
- transform: translate(0, -25%);
- -webkit-transition: -webkit-transform 0.3s ease-out;
- -o-transition: -o-transform 0.3s ease-out;
- transition: transform 0.3s ease-out;
-}
-.modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
-}
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
-}
-.modal-content {
- position: relative;
- background-color: #202020;
- border: 1px solid #999999;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 6px;
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- outline: 0;
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000000;
-}
-.modal-backdrop.fade {
- opacity: 0;
- filter: alpha(opacity=0);
-}
-.modal-backdrop.in {
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-.modal-header {
- padding: 15px;
- border-bottom: 1px solid #282828;
- min-height: 16.42857143px;
-}
-.modal-header .close {
- margin-top: -2px;
-}
-.modal-title {
- margin: 0;
- line-height: 1.42857143;
-}
-.modal-body {
- position: relative;
- padding: 20px;
-}
-.modal-footer {
- padding: 20px;
- text-align: right;
- border-top: 1px solid #282828;
-}
-.modal-footer .btn + .btn {
- margin-left: 5px;
- margin-bottom: 0;
-}
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
- margin-left: 0;
-}
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-@media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- }
- .modal-sm {
- width: 300px;
- }
-}
-@media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
-}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.nav:before,
.nav:after,
.pager:before,
-.pager:after,
-.modal-footer:before,
-.modal-footer:after {
+.pager:after {
content: " ";
display: table;
}
.container-fluid:after,
.row:after,
.nav:after,
-.pager:after,
-.modal-footer:after {
+.pager:after {
clear: both;
}
.center-block {
/*!
- * bootswatch v3.3.4
+ * bootswatch v3.3.4+1
* Homepage: http://bootswatch.com
* Copyright 2012-2015 Thomas Park
* Licensed under MIT
.table-hover > tbody > tr.warning:hover > th {
background-color: #faf2cc;
}
-fieldset {
- padding: 0;
- margin: 0;
- border: 0;
- min-width: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 22px;
- font-size: 24px;
- line-height: inherit;
- color: #333333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-}
label {
display: inline-block;
max-width: 100%;
margin-bottom: 5px;
font-weight: bold;
}
-input[type="search"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
input[type="radio"],
input[type="checkbox"] {
margin: 4px 0 0;
input[type="file"] {
display: block;
}
-input[type="range"] {
- display: block;
- width: 100%;
-}
-select[multiple],
-select[size] {
- height: auto;
-}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
-output {
- display: block;
- padding-top: 9px;
- font-size: 16px;
- line-height: 1.42857143;
- color: #333333;
-}
.form-control {
display: block;
width: 100%;
.form-control::-webkit-input-placeholder {
color: #b3b3b3;
}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
- background-color: #eeeeee;
- opacity: 1;
-}
-.form-control[disabled],
-fieldset[disabled] .form-control {
- cursor: not-allowed;
-}
textarea.form-control {
height: auto;
}
-input[type="search"] {
- -webkit-appearance: none;
-}
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
- input[type="date"],
- input[type="time"],
- input[type="datetime-local"],
- input[type="month"] {
- line-height: 40px;
- }
- input[type="date"].input-sm,
- input[type="time"].input-sm,
- input[type="datetime-local"].input-sm,
- input[type="month"].input-sm,
- .input-group-sm input[type="date"],
- .input-group-sm input[type="time"],
- .input-group-sm input[type="datetime-local"],
- .input-group-sm input[type="month"] {
- line-height: 33px;
- }
- input[type="date"].input-lg,
- input[type="time"].input-lg,
- input[type="datetime-local"].input-lg,
- input[type="month"].input-lg,
- .input-group-lg input[type="date"],
- .input-group-lg input[type="time"],
- .input-group-lg input[type="datetime-local"],
- .input-group-lg input[type="month"] {
- line-height: 57px;
- }
-}
.form-group {
margin-bottom: 15px;
}
-.radio,
-.checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
- min-height: 22px;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-left: -20px;
- margin-top: 4px \9;
-}
-.radio + .radio,
-.checkbox + .checkbox {
- margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
- position: relative;
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- vertical-align: middle;
- font-weight: normal;
- cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
- cursor: not-allowed;
-}
-.form-control-static {
- padding-top: 9px;
- padding-bottom: 9px;
- margin-bottom: 0;
- min-height: 38px;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
- padding-left: 0;
- padding-right: 0;
-}
.btn {
display: inline-block;
margin-bottom: 0;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
- cursor: not-allowed;
- pointer-events: none;
- opacity: 0.65;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
-}
.btn-default {
color: #333333;
background-color: #ffffff;
color: #4582ec;
background-color: #ffffff;
}
-.btn-link {
- color: #4582ec;
- font-weight: normal;
- border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link.active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
- border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #134fb8;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
- color: #b3b3b3;
- text-decoration: none;
-}
-.btn-lg {
- padding: 14px 16px;
- font-size: 20px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-.btn-sm {
- padding: 5px 10px;
- font-size: 14px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-xs {
- padding: 1px 5px;
- font-size: 14px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.fade {
- opacity: 0;
- -webkit-transition: opacity 0.15s linear;
- -o-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- display: none;
-}
-.collapse.in {
- display: block;
-}
-tr.collapse.in {
- display: table-row;
-}
-tbody.collapse.in {
- display: table-row-group;
-}
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition-property: height, visibility;
- -o-transition-property: height, visibility;
- transition-property: height, visibility;
- -webkit-transition-duration: 0.35s;
- -o-transition-duration: 0.35s;
- transition-duration: 0.35s;
- -webkit-transition-timing-function: ease;
- -o-transition-timing-function: ease;
- transition-timing-function: ease;
-}
.nav {
margin-bottom: 0;
padding-left: 0;
padding: 9px;
border-radius: 3px;
}
-.close {
- float: right;
- font-size: 24px;
- font-weight: bold;
- line-height: 1;
- color: #ffffff;
- text-shadow: 0 1px 0 #ffffff;
- opacity: 0.2;
- filter: alpha(opacity=20);
-}
-.close:hover,
-.close:focus {
- color: #ffffff;
- text-decoration: none;
- cursor: pointer;
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-button.close {
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
- -webkit-appearance: none;
-}
-.modal-open {
- overflow: hidden;
-}
-.modal {
- display: none;
- overflow: hidden;
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- -webkit-overflow-scrolling: touch;
- outline: 0;
-}
-.modal.fade .modal-dialog {
- -webkit-transform: translate(0, -25%);
- -ms-transform: translate(0, -25%);
- -o-transform: translate(0, -25%);
- transform: translate(0, -25%);
- -webkit-transition: -webkit-transform 0.3s ease-out;
- -o-transition: -o-transform 0.3s ease-out;
- transition: transform 0.3s ease-out;
-}
-.modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
-}
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
-}
-.modal-content {
- position: relative;
- background-color: #ffffff;
- border: 1px solid #999999;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 6px;
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- outline: 0;
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000000;
-}
-.modal-backdrop.fade {
- opacity: 0;
- filter: alpha(opacity=0);
-}
-.modal-backdrop.in {
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-.modal-header {
- padding: 15px;
- border-bottom: 1px solid #e5e5e5;
- min-height: 16.42857143px;
-}
-.modal-header .close {
- margin-top: -2px;
-}
-.modal-title {
- margin: 0;
- line-height: 1.42857143;
-}
-.modal-body {
- position: relative;
- padding: 20px;
-}
-.modal-footer {
- padding: 20px;
- text-align: right;
- border-top: 1px solid #e5e5e5;
-}
-.modal-footer .btn + .btn {
- margin-left: 5px;
- margin-bottom: 0;
-}
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
- margin-left: 0;
-}
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-@media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- }
- .modal-sm {
- width: 300px;
- }
-}
-@media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
-}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.nav:before,
.nav:after,
.pager:before,
-.pager:after,
-.modal-footer:before,
-.modal-footer:after {
+.pager:after {
content: " ";
display: table;
}
.container-fluid:after,
.row:after,
.nav:after,
-.pager:after,
-.modal-footer:after {
+.pager:after {
clear: both;
}
.center-block {
margin-right: 0;
}
.navbar-nav > li > a {
- padding: 8px 12px;
margin: 12.5px 6px;
+ padding: 8px 12px;
border: 1px solid transparent;
border-radius: 4px;
}
padding-bottom: 12.5px;
line-height: 1.9;
}
-@media (max-width: 768px) {
+@media (min-width: 768px) {
+ .navbar .navbar-nav > li > a {
+ padding: 8px 12px;
+ }
+}
+@media (max-width: 768px - 1) {
.navbar .navbar-nav > li > a {
margin: 0;
}
/*!
- * bootswatch v3.3.4
+ * bootswatch v3.3.4+1
* Homepage: http://bootswatch.com
* Copyright 2012-2015 Thomas Park
* Licensed under MIT
.table-hover > tbody > tr.warning:hover > th {
background-color: #df8505;
}
-fieldset {
- padding: 0;
- margin: 0;
- border: 0;
- min-width: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 20px;
- font-size: 21px;
- line-height: inherit;
- color: #c8c8c8;
- border: 0;
- border-bottom: 1px solid #1c1e22;
-}
label {
display: inline-block;
max-width: 100%;
margin-bottom: 5px;
font-weight: bold;
}
-input[type="search"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
input[type="radio"],
input[type="checkbox"] {
margin: 4px 0 0;
input[type="file"] {
display: block;
}
-input[type="range"] {
- display: block;
- width: 100%;
-}
-select[multiple],
-select[size] {
- height: auto;
-}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
-output {
- display: block;
- padding-top: 9px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #272b30;
-}
.form-control {
display: block;
width: 100%;
.form-control::-webkit-input-placeholder {
color: #7a8288;
}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
- background-color: #999999;
- opacity: 1;
-}
-.form-control[disabled],
-fieldset[disabled] .form-control {
- cursor: not-allowed;
-}
textarea.form-control {
height: auto;
}
-input[type="search"] {
- -webkit-appearance: none;
-}
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
- input[type="date"],
- input[type="time"],
- input[type="datetime-local"],
- input[type="month"] {
- line-height: 38px;
- }
- input[type="date"].input-sm,
- input[type="time"].input-sm,
- input[type="datetime-local"].input-sm,
- input[type="month"].input-sm,
- .input-group-sm input[type="date"],
- .input-group-sm input[type="time"],
- .input-group-sm input[type="datetime-local"],
- .input-group-sm input[type="month"] {
- line-height: 30px;
- }
- input[type="date"].input-lg,
- input[type="time"].input-lg,
- input[type="datetime-local"].input-lg,
- input[type="month"].input-lg,
- .input-group-lg input[type="date"],
- .input-group-lg input[type="time"],
- .input-group-lg input[type="datetime-local"],
- .input-group-lg input[type="month"] {
- line-height: 54px;
- }
-}
.form-group {
margin-bottom: 15px;
}
-.radio,
-.checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
- min-height: 20px;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-left: -20px;
- margin-top: 4px \9;
-}
-.radio + .radio,
-.checkbox + .checkbox {
- margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
- position: relative;
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- vertical-align: middle;
- font-weight: normal;
- cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
- cursor: not-allowed;
-}
-.form-control-static {
- padding-top: 9px;
- padding-bottom: 9px;
- margin-bottom: 0;
- min-height: 34px;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
- padding-left: 0;
- padding-right: 0;
-}
.btn {
display: inline-block;
margin-bottom: 0;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
- cursor: not-allowed;
- pointer-events: none;
- opacity: 0.65;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
-}
.btn-default {
color: #ffffff;
background-color: #3a3f44;
color: #7a8288;
background-color: #ffffff;
}
-.btn-link {
- color: #ffffff;
- font-weight: normal;
- border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link.active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
- border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #ffffff;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
- color: #7a8288;
- text-decoration: none;
-}
-.btn-lg {
- padding: 14px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-.btn-sm {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-xs {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.fade {
- opacity: 0;
- -webkit-transition: opacity 0.15s linear;
- -o-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- display: none;
-}
-.collapse.in {
- display: block;
-}
-tr.collapse.in {
- display: table-row;
-}
-tbody.collapse.in {
- display: table-row-group;
-}
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition-property: height, visibility;
- -o-transition-property: height, visibility;
- transition-property: height, visibility;
- -webkit-transition-duration: 0.35s;
- -o-transition-duration: 0.35s;
- transition-duration: 0.35s;
- -webkit-transition-timing-function: ease;
- -o-transition-timing-function: ease;
- transition-timing-function: ease;
-}
.nav {
margin-bottom: 0;
padding-left: 0;
padding: 9px;
border-radius: 3px;
}
-.close {
- float: right;
- font-size: 21px;
- font-weight: bold;
- line-height: 1;
- color: #000000;
- text-shadow: 0 1px 0 #ffffff;
- opacity: 0.2;
- filter: alpha(opacity=20);
-}
-.close:hover,
-.close:focus {
- color: #000000;
- text-decoration: none;
- cursor: pointer;
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-button.close {
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
- -webkit-appearance: none;
-}
-.modal-open {
- overflow: hidden;
-}
-.modal {
- display: none;
- overflow: hidden;
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- -webkit-overflow-scrolling: touch;
- outline: 0;
-}
-.modal.fade .modal-dialog {
- -webkit-transform: translate(0, -25%);
- -ms-transform: translate(0, -25%);
- -o-transform: translate(0, -25%);
- transform: translate(0, -25%);
- -webkit-transition: -webkit-transform 0.3s ease-out;
- -o-transition: -o-transform 0.3s ease-out;
- transition: transform 0.3s ease-out;
-}
-.modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
-}
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
-}
-.modal-content {
- position: relative;
- background-color: #2e3338;
- border: 1px solid #999999;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 6px;
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- outline: 0;
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000000;
-}
-.modal-backdrop.fade {
- opacity: 0;
- filter: alpha(opacity=0);
-}
-.modal-backdrop.in {
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-.modal-header {
- padding: 15px;
- border-bottom: 1px solid #1c1e22;
- min-height: 16.42857143px;
-}
-.modal-header .close {
- margin-top: -2px;
-}
-.modal-title {
- margin: 0;
- line-height: 1.42857143;
-}
-.modal-body {
- position: relative;
- padding: 20px;
-}
-.modal-footer {
- padding: 20px;
- text-align: right;
- border-top: 1px solid #1c1e22;
-}
-.modal-footer .btn + .btn {
- margin-left: 5px;
- margin-bottom: 0;
-}
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
- margin-left: 0;
-}
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-@media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- }
- .modal-sm {
- width: 300px;
- }
-}
-@media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
-}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.nav:before,
.nav:after,
.pager:before,
-.pager:after,
-.modal-footer:before,
-.modal-footer:after {
+.pager:after {
content: " ";
display: table;
}
.container-fluid:after,
.row:after,
.nav:after,
-.pager:after,
-.modal-footer:after {
+.pager:after {
clear: both;
}
.center-block {
.affix {
position: fixed;
}
-.navbar {
- background-image: -webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-image: -o-linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));
- background-image: linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);
- -webkit-filter: none;
- filter: none;
- border: 1px solid rgba(0, 0, 0, 0.6);
- text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
-}
-.navbar-inverse {
- background-image: -webkit-linear-gradient(#8a9196, #7a8288 60%, #70787d);
- background-image: -o-linear-gradient(#8a9196, #7a8288 60%, #70787d);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#8a9196), color-stop(60%, #7a8288), to(#70787d));
- background-image: linear-gradient(#8a9196, #7a8288 60%, #70787d);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8a9196', endColorstr='#ff70787d', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.navbar-inverse .badge {
- background-color: #5d6368;
-}
-.navbar-nav > li > a {
- border-right: 1px solid rgba(0, 0, 0, 0.2);
- border-left: 1px solid rgba(255, 255, 255, 0.1);
-}
-.navbar-nav > li > a:hover {
- background-image: -webkit-linear-gradient(#020202, #101112 40%, #191b1d);
- background-image: -o-linear-gradient(#020202, #101112 40%, #191b1d);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#191b1d));
- background-image: linear-gradient(#020202, #101112 40%, #191b1d);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff191b1d', GradientType=0);
- -webkit-filter: none;
- filter: none;
- border-left-color: transparent;
-}
-.navbar .nav .open > a {
- border-color: transparent;
-}
-.navbar-nav > li.active > a {
- border-left-color: transparent;
-}
-.navbar-form {
- margin-left: 5px;
- margin-right: 5px;
-}
.btn,
.btn:hover {
border-color: rgba(0, 0, 0, 0.6);
-webkit-filter: none;
filter: none;
}
-.btn-success {
- background-image: -webkit-linear-gradient(#78cc78, #62c462 60%, #53be53);
- background-image: -o-linear-gradient(#78cc78, #62c462 60%, #53be53);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#78cc78), color-stop(60%, #62c462), to(#53be53));
- background-image: linear-gradient(#78cc78, #62c462 60%, #53be53);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff78cc78', endColorstr='#ff53be53', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.btn-success:hover {
- background-image: -webkit-linear-gradient(#2f7d2f, #379337 40%, #3da23d);
- background-image: -o-linear-gradient(#2f7d2f, #379337 40%, #3da23d);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#2f7d2f), color-stop(40%, #379337), to(#3da23d));
- background-image: linear-gradient(#2f7d2f, #379337 40%, #3da23d);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2f7d2f', endColorstr='#ff3da23d', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.btn-info {
- background-image: -webkit-linear-gradient(#74cae3, #5bc0de 60%, #4ab9db);
- background-image: -o-linear-gradient(#74cae3, #5bc0de 60%, #4ab9db);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#74cae3), color-stop(60%, #5bc0de), to(#4ab9db));
- background-image: linear-gradient(#74cae3, #5bc0de 60%, #4ab9db);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff74cae3', endColorstr='#ff4ab9db', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.btn-info:hover {
- background-image: -webkit-linear-gradient(#20829f, #2596b8 40%, #28a4c9);
- background-image: -o-linear-gradient(#20829f, #2596b8 40%, #28a4c9);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#20829f), color-stop(40%, #2596b8), to(#28a4c9));
- background-image: linear-gradient(#20829f, #2596b8 40%, #28a4c9);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff20829f', endColorstr='#ff28a4c9', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.btn-warning {
- background-image: -webkit-linear-gradient(#faa123, #f89406 60%, #e48806);
- background-image: -o-linear-gradient(#faa123, #f89406 60%, #e48806);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#faa123), color-stop(60%, #f89406), to(#e48806));
- background-image: linear-gradient(#faa123, #f89406 60%, #e48806);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffaa123', endColorstr='#ffe48806', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.btn-warning:hover {
- background-image: -webkit-linear-gradient(#804d03, #9e5f04 40%, #b26a04);
- background-image: -o-linear-gradient(#804d03, #9e5f04 40%, #b26a04);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#804d03), color-stop(40%, #9e5f04), to(#b26a04));
- background-image: linear-gradient(#804d03, #9e5f04 40%, #b26a04);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff804d03', endColorstr='#ffb26a04', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.btn-danger {
- background-image: -webkit-linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49);
- background-image: -o-linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f17a77), color-stop(60%, #ee5f5b), to(#ec4d49));
- background-image: linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff17a77', endColorstr='#ffec4d49', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.btn-danger:hover {
- background-image: -webkit-linear-gradient(#bb1813, #d71c16 40%, #e7201a);
- background-image: -o-linear-gradient(#bb1813, #d71c16 40%, #e7201a);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#bb1813), color-stop(40%, #d71c16), to(#e7201a));
- background-image: linear-gradient(#bb1813, #d71c16 40%, #e7201a);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbb1813', endColorstr='#ffe7201a', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.btn-link,
-.btn-link:hover {
- border-color: transparent;
-}
h1,
h2,
h3,
textarea {
color: #272b30;
}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .form-control-feedback {
- color: #f89406;
-}
-.has-warning .form-control,
-.has-warning .form-control:focus {
- border-color: #f89406;
-}
-.has-warning .input-group-addon {
- background-color: #272b30;
- border: none;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .form-control-feedback {
- color: #ee5f5b;
-}
-.has-error .form-control,
-.has-error .form-control:focus {
- border-color: #ee5f5b;
-}
-.has-error .input-group-addon {
- background-color: #272b30;
- border: none;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .form-control-feedback {
- color: #62c462;
-}
-.has-success .form-control,
-.has-success .form-control:focus {
- border-color: #62c462;
-}
-.has-success .input-group-addon {
- background-color: #272b30;
- border: none;
-}
-legend {
- color: #fff;
-}
-.input-group-addon {
- border-color: rgba(0, 0, 0, 0.6);
- text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
- background-image: -webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-image: -o-linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));
- background-image: linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);
- -webkit-filter: none;
- filter: none;
- color: #ffffff;
-}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
-webkit-filter: none;
filter: none;
}
-.pagination > li > a,
-.pagination > li > span {
- text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
- background-image: -webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-image: -o-linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));
- background-image: linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover {
- background-image: -webkit-linear-gradient(#020202, #101112 40%, #191b1d);
- background-image: -o-linear-gradient(#020202, #101112 40%, #191b1d);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#191b1d));
- background-image: linear-gradient(#020202, #101112 40%, #191b1d);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff191b1d', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.pagination > li.active > a,
-.pagination > li.active > span {
- background-image: -webkit-linear-gradient(#020202, #101112 40%, #191b1d);
- background-image: -o-linear-gradient(#020202, #101112 40%, #191b1d);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#191b1d));
- background-image: linear-gradient(#020202, #101112 40%, #191b1d);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff191b1d', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
-.pagination > li.disabled > a,
-.pagination > li.disabled > a:hover,
-.pagination > li.disabled > span,
-.pagination > li.disabled > span:hover {
- background-color: transparent;
- background-image: -webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-image: -o-linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));
- background-image: linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
.pager > li > a {
background-image: -webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);
background-image: -o-linear-gradient(#484e55, #3a3f44 60%, #313539);
-webkit-filter: none;
filter: none;
}
-.breadcrumb {
- border: 1px solid rgba(0, 0, 0, 0.6);
- text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
- background-image: -webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-image: -o-linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));
- background-image: linear-gradient(#484e55, #3a3f44 60%, #313539);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);
- -webkit-filter: none;
- filter: none;
-}
.alert .alert-link,
.alert a {
color: #fff;
color: #000000;
text-decoration: none;
}
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
- border-color: #0c0d0e;
-}
-a.list-group-item.active,
-a.list-group-item.active:hover,
-a.list-group-item.active:focus {
- border-color: rgba(0, 0, 0, 0.6);
-}
-a.list-group-item-success.active {
- background-color: #62c462;
-}
-a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus {
- background-color: #4fbd4f;
-}
-a.list-group-item-warning.active {
- background-color: #f89406;
-}
-a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus {
- background-color: #df8505;
-}
-a.list-group-item-danger.active {
- background-color: #ee5f5b;
-}
-a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus {
- background-color: #ec4844;
-}
-.jumbotron {
- border: 1px solid rgba(0, 0, 0, 0.6);
-}
-.panel-primary .panel-heading,
-.panel-success .panel-heading,
-.panel-danger .panel-heading,
-.panel-warning .panel-heading,
-.panel-info .panel-heading {
- border-color: #000;
-}
--- /dev/null
+'use strict';
+var $;
+++ /dev/null
-/* Zepto v1.1.4-80-ga9184b2 - zepto event data ie - zeptojs.com/license */
-
-var Zepto = (function() {
- var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice,
- document = window.document,
- elementDisplay = {}, classCache = {},
- cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },
- fragmentRE = /^\s*<(\w+|!)[^>]*>/,
- singleTagRE = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
- tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
- rootNodeRE = /^(?:body|html)$/i,
- capitalRE = /([A-Z])/g,
-
- // special attributes that should be get/set via method calls
- methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],
-
- adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],
- table = document.createElement('table'),
- tableRow = document.createElement('tr'),
- containers = {
- 'tr': document.createElement('tbody'),
- 'tbody': table, 'thead': table, 'tfoot': table,
- 'td': tableRow, 'th': tableRow,
- '*': document.createElement('div')
- },
- readyRE = /complete|loaded|interactive/,
- simpleSelectorRE = /^[\w-]*$/,
- class2type = {},
- toString = class2type.toString,
- zepto = {},
- camelize, uniq,
- tempParent = document.createElement('div'),
- propMap = {
- 'tabindex': 'tabIndex',
- 'readonly': 'readOnly',
- 'for': 'htmlFor',
- 'class': 'className',
- 'maxlength': 'maxLength',
- 'cellspacing': 'cellSpacing',
- 'cellpadding': 'cellPadding',
- 'rowspan': 'rowSpan',
- 'colspan': 'colSpan',
- 'usemap': 'useMap',
- 'frameborder': 'frameBorder',
- 'contenteditable': 'contentEditable'
- },
- isArray = Array.isArray ||
- function(object){ return object instanceof Array }
-
- zepto.matches = function(element, selector) {
- if (!selector || !element || element.nodeType !== 1) return false
- var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
- element.oMatchesSelector || element.matchesSelector
- if (matchesSelector) return matchesSelector.call(element, selector)
- // fall back to performing a selector:
- var match, parent = element.parentNode, temp = !parent
- if (temp) (parent = tempParent).appendChild(element)
- match = ~zepto.qsa(parent, selector).indexOf(element)
- temp && tempParent.removeChild(element)
- return match
- }
-
- function type(obj) {
- return obj == null ? String(obj) :
- class2type[toString.call(obj)] || "object"
- }
-
- function isFunction(value) { return type(value) == "function" }
- function isWindow(obj) { return obj != null && obj == obj.window }
- function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }
- function isObject(obj) { return type(obj) == "object" }
- function isPlainObject(obj) {
- return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype
- }
- function likeArray(obj) { return typeof obj.length == 'number' }
-
- function compact(array) { return filter.call(array, function(item){ return item != null }) }
- function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }
- camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }
- function dasherize(str) {
- return str.replace(/::/g, '/')
- .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
- .replace(/([a-z\d])([A-Z])/g, '$1_$2')
- .replace(/_/g, '-')
- .toLowerCase()
- }
- uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }
-
- function classRE(name) {
- return name in classCache ?
- classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)'))
- }
-
- function maybeAddPx(name, value) {
- return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value
- }
-
- function defaultDisplay(nodeName) {
- var element, display
- if (!elementDisplay[nodeName]) {
- element = document.createElement(nodeName)
- document.body.appendChild(element)
- display = getComputedStyle(element, '').getPropertyValue("display")
- element.parentNode.removeChild(element)
- display == "none" && (display = "block")
- elementDisplay[nodeName] = display
- }
- return elementDisplay[nodeName]
- }
-
- function children(element) {
- return 'children' in element ?
- slice.call(element.children) :
- $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })
- }
-
- function Z(dom, selector) {
- var i, len = dom ? dom.length : 0
- for (i = 0; i < len; i++) this[i] = dom[i]
- this.length = len
- this.selector = selector || ''
- }
-
- // `$.zepto.fragment` takes a html string and an optional tag name
- // to generate DOM nodes nodes from the given html string.
- // The generated DOM nodes are returned as an array.
- // This function can be overriden in plugins for example to make
- // it compatible with browsers that don't support the DOM fully.
- zepto.fragment = function(html, name, properties) {
- var dom, nodes, container
-
- // A special case optimization for a single tag
- if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))
-
- if (!dom) {
- if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>")
- if (name === undefined) name = fragmentRE.test(html) && RegExp.$1
- if (!(name in containers)) name = '*'
-
- container = containers[name]
- container.innerHTML = '' + html
- dom = $.each(slice.call(container.childNodes), function(){
- container.removeChild(this)
- })
- }
-
- if (isPlainObject(properties)) {
- nodes = $(dom)
- $.each(properties, function(key, value) {
- if (methodAttributes.indexOf(key) > -1) nodes[key](value)
- else nodes.attr(key, value)
- })
- }
-
- return dom
- }
-
- // `$.zepto.Z` swaps out the prototype of the given `dom` array
- // of nodes with `$.fn` and thus supplying all the Zepto functions
- // to the array. This method can be overriden in plugins.
- zepto.Z = function(dom, selector) {
- return new Z(dom, selector)
- }
-
- // `$.zepto.isZ` should return `true` if the given object is a Zepto
- // collection. This method can be overriden in plugins.
- zepto.isZ = function(object) {
- return object instanceof zepto.Z
- }
-
- // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and
- // takes a CSS selector and an optional context (and handles various
- // special cases).
- // This method can be overriden in plugins.
- zepto.init = function(selector, context) {
- var dom
- // If nothing given, return an empty Zepto collection
- if (!selector) return zepto.Z()
- // Optimize for string selectors
- else if (typeof selector == 'string') {
- selector = selector.trim()
- // If it's a html fragment, create nodes from it
- // Note: In both Chrome 21 and Firefox 15, DOM error 12
- // is thrown if the fragment doesn't begin with <
- if (selector[0] == '<' && fragmentRE.test(selector))
- dom = zepto.fragment(selector, RegExp.$1, context), selector = null
- // If there's a context, create a collection on that context first, and select
- // nodes from there
- else if (context !== undefined) return $(context).find(selector)
- // If it's a CSS selector, use it to select nodes.
- else dom = zepto.qsa(document, selector)
- }
- // If a function is given, call it when the DOM is ready
- else if (isFunction(selector)) return $(document).ready(selector)
- // If a Zepto collection is given, just return it
- else if (zepto.isZ(selector)) return selector
- else {
- // normalize array if an array of nodes is given
- if (isArray(selector)) dom = compact(selector)
- // Wrap DOM nodes.
- else if (isObject(selector))
- dom = [selector], selector = null
- // If it's a html fragment, create nodes from it
- else if (fragmentRE.test(selector))
- dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null
- // If there's a context, create a collection on that context first, and select
- // nodes from there
- else if (context !== undefined) return $(context).find(selector)
- // And last but no least, if it's a CSS selector, use it to select nodes.
- else dom = zepto.qsa(document, selector)
- }
- // create a new Zepto collection from the nodes found
- return zepto.Z(dom, selector)
- }
-
- // `$` will be the base `Zepto` object. When calling this
- // function just call `$.zepto.init, which makes the implementation
- // details of selecting nodes and creating Zepto collections
- // patchable in plugins.
- $ = function(selector, context){
- return zepto.init(selector, context)
- }
-
- function extend(target, source, deep) {
- for (key in source)
- if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
- if (isPlainObject(source[key]) && !isPlainObject(target[key]))
- target[key] = {}
- if (isArray(source[key]) && !isArray(target[key]))
- target[key] = []
- extend(target[key], source[key], deep)
- }
- else if (source[key] !== undefined) target[key] = source[key]
- }
-
- // Copy all but undefined properties from one or more
- // objects to the `target` object.
- $.extend = function(target){
- var deep, args = slice.call(arguments, 1)
- if (typeof target == 'boolean') {
- deep = target
- target = args.shift()
- }
- args.forEach(function(arg){ extend(target, arg, deep) })
- return target
- }
-
- // `$.zepto.qsa` is Zepto's CSS selector implementation which
- // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.
- // This method can be overriden in plugins.
- zepto.qsa = function(element, selector){
- var found,
- maybeID = selector[0] == '#',
- maybeClass = !maybeID && selector[0] == '.',
- nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked
- isSimple = simpleSelectorRE.test(nameOnly)
- return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn't have getElementById
- ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :
- (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :
- slice.call(
- isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName
- maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class
- element.getElementsByTagName(selector) : // Or a tag
- element.querySelectorAll(selector) // Or it's not simple, and we need to query all
- )
- }
-
- function filtered(nodes, selector) {
- return selector == null ? $(nodes) : $(nodes).filter(selector)
- }
-
- $.contains = document.documentElement.contains ?
- function(parent, node) {
- return parent !== node && parent.contains(node)
- } :
- function(parent, node) {
- while (node && (node = node.parentNode))
- if (node === parent) return true
- return false
- }
-
- function funcArg(context, arg, idx, payload) {
- return isFunction(arg) ? arg.call(context, idx, payload) : arg
- }
-
- function setAttribute(node, name, value) {
- value == null ? node.removeAttribute(name) : node.setAttribute(name, value)
- }
-
- // access className property while respecting SVGAnimatedString
- function className(node, value){
- var klass = node.className || '',
- svg = klass && klass.baseVal !== undefined
-
- if (value === undefined) return svg ? klass.baseVal : klass
- svg ? (klass.baseVal = value) : (node.className = value)
- }
-
- // "true" => true
- // "false" => false
- // "null" => null
- // "42" => 42
- // "42.5" => 42.5
- // "08" => "08"
- // JSON => parse if valid
- // String => self
- function deserializeValue(value) {
- try {
- return value ?
- value == "true" ||
- ( value == "false" ? false :
- value == "null" ? null :
- +value + "" == value ? +value :
- /^[\[\{]/.test(value) ? $.parseJSON(value) :
- value )
- : value
- } catch(e) {
- return value
- }
- }
-
- $.type = type
- $.isFunction = isFunction
- $.isWindow = isWindow
- $.isArray = isArray
- $.isPlainObject = isPlainObject
-
- $.isEmptyObject = function(obj) {
- var name
- for (name in obj) return false
- return true
- }
-
- $.inArray = function(elem, array, i){
- return emptyArray.indexOf.call(array, elem, i)
- }
-
- $.camelCase = camelize
- $.trim = function(str) {
- return str == null ? "" : String.prototype.trim.call(str)
- }
-
- // plugin compatibility
- $.uuid = 0
- $.support = { }
- $.expr = { }
- $.noop = function() {}
-
- $.map = function(elements, callback){
- var value, values = [], i, key
- if (likeArray(elements))
- for (i = 0; i < elements.length; i++) {
- value = callback(elements[i], i)
- if (value != null) values.push(value)
- }
- else
- for (key in elements) {
- value = callback(elements[key], key)
- if (value != null) values.push(value)
- }
- return flatten(values)
- }
-
- $.each = function(elements, callback){
- var i, key
- if (likeArray(elements)) {
- for (i = 0; i < elements.length; i++)
- if (callback.call(elements[i], i, elements[i]) === false) return elements
- } else {
- for (key in elements)
- if (callback.call(elements[key], key, elements[key]) === false) return elements
- }
-
- return elements
- }
-
- $.grep = function(elements, callback){
- return filter.call(elements, callback)
- }
-
- if (window.JSON) $.parseJSON = JSON.parse
-
- // Populate the class2type map
- $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase()
- })
-
- // Define methods that will be available on all
- // Zepto collections
- $.fn = {
- constructor: zepto.Z,
- length: 0,
-
- // Because a collection acts like an array
- // copy over these useful array functions.
- forEach: emptyArray.forEach,
- reduce: emptyArray.reduce,
- push: emptyArray.push,
- sort: emptyArray.sort,
- splice: emptyArray.splice,
- indexOf: emptyArray.indexOf,
- concat: function(){
- var i, value, args = []
- for (i = 0; i < arguments.length; i++) {
- value = arguments[i]
- args[i] = zepto.isZ(value) ? value.toArray() : value
- }
- return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)
- },
-
- // `map` and `slice` in the jQuery API work differently
- // from their array counterparts
- map: function(fn){
- return $($.map(this, function(el, i){ return fn.call(el, i, el) }))
- },
- slice: function(){
- return $(slice.apply(this, arguments))
- },
-
- ready: function(callback){
- // need to check if document.body exists for IE as that browser reports
- // document ready when it hasn't yet created the body element
- if (readyRE.test(document.readyState) && document.body) callback($)
- else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
- return this
- },
- get: function(idx){
- return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]
- },
- toArray: function(){ return this.get() },
- size: function(){
- return this.length
- },
- remove: function(){
- return this.each(function(){
- if (this.parentNode != null)
- this.parentNode.removeChild(this)
- })
- },
- each: function(callback){
- emptyArray.every.call(this, function(el, idx){
- return callback.call(el, idx, el) !== false
- })
- return this
- },
- filter: function(selector){
- if (isFunction(selector)) return this.not(this.not(selector))
- return $(filter.call(this, function(element){
- return zepto.matches(element, selector)
- }))
- },
- add: function(selector,context){
- return $(uniq(this.concat($(selector,context))))
- },
- is: function(selector){
- return this.length > 0 && zepto.matches(this[0], selector)
- },
- not: function(selector){
- var nodes=[]
- if (isFunction(selector) && selector.call !== undefined)
- this.each(function(idx){
- if (!selector.call(this,idx)) nodes.push(this)
- })
- else {
- var excludes = typeof selector == 'string' ? this.filter(selector) :
- (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)
- this.forEach(function(el){
- if (excludes.indexOf(el) < 0) nodes.push(el)
- })
- }
- return $(nodes)
- },
- has: function(selector){
- return this.filter(function(){
- return isObject(selector) ?
- $.contains(this, selector) :
- $(this).find(selector).size()
- })
- },
- eq: function(idx){
- return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)
- },
- first: function(){
- var el = this[0]
- return el && !isObject(el) ? el : $(el)
- },
- last: function(){
- var el = this[this.length - 1]
- return el && !isObject(el) ? el : $(el)
- },
- find: function(selector){
- var result, $this = this
- if (!selector) result = $()
- else if (typeof selector == 'object')
- result = $(selector).filter(function(){
- var node = this
- return emptyArray.some.call($this, function(parent){
- return $.contains(parent, node)
- })
- })
- else if (this.length == 1) result = $(zepto.qsa(this[0], selector))
- else result = this.map(function(){ return zepto.qsa(this, selector) })
- return result
- },
- closest: function(selector, context){
- var node = this[0], collection = false
- if (typeof selector == 'object') collection = $(selector)
- while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))
- node = node !== context && !isDocument(node) && node.parentNode
- return $(node)
- },
- parents: function(selector){
- var ancestors = [], nodes = this
- while (nodes.length > 0)
- nodes = $.map(nodes, function(node){
- if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {
- ancestors.push(node)
- return node
- }
- })
- return filtered(ancestors, selector)
- },
- parent: function(selector){
- return filtered(uniq(this.pluck('parentNode')), selector)
- },
- children: function(selector){
- return filtered(this.map(function(){ return children(this) }), selector)
- },
- contents: function() {
- return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })
- },
- siblings: function(selector){
- return filtered(this.map(function(i, el){
- return filter.call(children(el.parentNode), function(child){ return child!==el })
- }), selector)
- },
- empty: function(){
- return this.each(function(){ this.innerHTML = '' })
- },
- // `pluck` is borrowed from Prototype.js
- pluck: function(property){
- return $.map(this, function(el){ return el[property] })
- },
- show: function(){
- return this.each(function(){
- this.style.display == "none" && (this.style.display = '')
- if (getComputedStyle(this, '').getPropertyValue("display") == "none")
- this.style.display = defaultDisplay(this.nodeName)
- })
- },
- replaceWith: function(newContent){
- return this.before(newContent).remove()
- },
- wrap: function(structure){
- var func = isFunction(structure)
- if (this[0] && !func)
- var dom = $(structure).get(0),
- clone = dom.parentNode || this.length > 1
-
- return this.each(function(index){
- $(this).wrapAll(
- func ? structure.call(this, index) :
- clone ? dom.cloneNode(true) : dom
- )
- })
- },
- wrapAll: function(structure){
- if (this[0]) {
- $(this[0]).before(structure = $(structure))
- var children
- // drill down to the inmost element
- while ((children = structure.children()).length) structure = children.first()
- $(structure).append(this)
- }
- return this
- },
- wrapInner: function(structure){
- var func = isFunction(structure)
- return this.each(function(index){
- var self = $(this), contents = self.contents(),
- dom = func ? structure.call(this, index) : structure
- contents.length ? contents.wrapAll(dom) : self.append(dom)
- })
- },
- unwrap: function(){
- this.parent().each(function(){
- $(this).replaceWith($(this).children())
- })
- return this
- },
- clone: function(){
- return this.map(function(){ return this.cloneNode(true) })
- },
- hide: function(){
- return this.css("display", "none")
- },
- toggle: function(setting){
- return this.each(function(){
- var el = $(this)
- ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide()
- })
- },
- prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },
- next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },
- html: function(html){
- return 0 in arguments ?
- this.each(function(idx){
- var originHtml = this.innerHTML
- $(this).empty().append( funcArg(this, html, idx, originHtml) )
- }) :
- (0 in this ? this[0].innerHTML : null)
- },
- text: function(text){
- return 0 in arguments ?
- this.each(function(idx){
- var newText = funcArg(this, text, idx, this.textContent)
- this.textContent = newText == null ? '' : ''+newText
- }) :
- (0 in this ? this[0].textContent : null)
- },
- attr: function(name, value){
- var result
- return (typeof name == 'string' && !(1 in arguments)) ?
- (!this.length || this[0].nodeType !== 1 ? undefined :
- (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result
- ) :
- this.each(function(idx){
- if (this.nodeType !== 1) return
- if (isObject(name)) for (key in name) setAttribute(this, key, name[key])
- else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))
- })
- },
- removeAttr: function(name){
- return this.each(function(){ this.nodeType === 1 && name.split(' ').forEach(function(attribute){
- setAttribute(this, attribute)
- }, this)})
- },
- prop: function(name, value){
- name = propMap[name] || name
- return (1 in arguments) ?
- this.each(function(idx){
- this[name] = funcArg(this, value, idx, this[name])
- }) :
- (this[0] && this[0][name])
- },
- data: function(name, value){
- var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase()
-
- var data = (1 in arguments) ?
- this.attr(attrName, value) :
- this.attr(attrName)
-
- return data !== null ? deserializeValue(data) : undefined
- },
- val: function(value){
- return 0 in arguments ?
- this.each(function(idx){
- this.value = funcArg(this, value, idx, this.value)
- }) :
- (this[0] && (this[0].multiple ?
- $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :
- this[0].value)
- )
- },
- offset: function(coordinates){
- if (coordinates) return this.each(function(index){
- var $this = $(this),
- coords = funcArg(this, coordinates, index, $this.offset()),
- parentOffset = $this.offsetParent().offset(),
- props = {
- top: coords.top - parentOffset.top,
- left: coords.left - parentOffset.left
- }
-
- if ($this.css('position') == 'static') props['position'] = 'relative'
- $this.css(props)
- })
- if (!this.length) return null
- if (!$.contains(document.documentElement, this[0]))
- return {top: 0, left: 0}
- var obj = this[0].getBoundingClientRect()
- return {
- left: obj.left + window.pageXOffset,
- top: obj.top + window.pageYOffset,
- width: Math.round(obj.width),
- height: Math.round(obj.height)
- }
- },
- css: function(property, value){
- if (arguments.length < 2) {
- var computedStyle, element = this[0]
- if(!element) return
- computedStyle = getComputedStyle(element, '')
- if (typeof property == 'string')
- return element.style[camelize(property)] || computedStyle.getPropertyValue(property)
- else if (isArray(property)) {
- var props = {}
- $.each(property, function(_, prop){
- props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))
- })
- return props
- }
- }
-
- var css = ''
- if (type(property) == 'string') {
- if (!value && value !== 0)
- this.each(function(){ this.style.removeProperty(dasherize(property)) })
- else
- css = dasherize(property) + ":" + maybeAddPx(property, value)
- } else {
- for (key in property)
- if (!property[key] && property[key] !== 0)
- this.each(function(){ this.style.removeProperty(dasherize(key)) })
- else
- css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'
- }
-
- return this.each(function(){ this.style.cssText += ';' + css })
- },
- index: function(element){
- return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])
- },
- hasClass: function(name){
- if (!name) return false
- return emptyArray.some.call(this, function(el){
- return this.test(className(el))
- }, classRE(name))
- },
- addClass: function(name){
- if (!name) return this
- return this.each(function(idx){
- if (!('className' in this)) return
- classList = []
- var cls = className(this), newName = funcArg(this, name, idx, cls)
- newName.split(/\s+/g).forEach(function(klass){
- if (!$(this).hasClass(klass)) classList.push(klass)
- }, this)
- classList.length && className(this, cls + (cls ? " " : "") + classList.join(" "))
- })
- },
- removeClass: function(name){
- return this.each(function(idx){
- if (!('className' in this)) return
- if (name === undefined) return className(this, '')
- classList = className(this)
- funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){
- classList = classList.replace(classRE(klass), " ")
- })
- className(this, classList.trim())
- })
- },
- toggleClass: function(name, when){
- if (!name) return this
- return this.each(function(idx){
- var $this = $(this), names = funcArg(this, name, idx, className(this))
- names.split(/\s+/g).forEach(function(klass){
- (when === undefined ? !$this.hasClass(klass) : when) ?
- $this.addClass(klass) : $this.removeClass(klass)
- })
- })
- },
- scrollTop: function(value){
- if (!this.length) return
- var hasScrollTop = 'scrollTop' in this[0]
- if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset
- return this.each(hasScrollTop ?
- function(){ this.scrollTop = value } :
- function(){ this.scrollTo(this.scrollX, value) })
- },
- scrollLeft: function(value){
- if (!this.length) return
- var hasScrollLeft = 'scrollLeft' in this[0]
- if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset
- return this.each(hasScrollLeft ?
- function(){ this.scrollLeft = value } :
- function(){ this.scrollTo(value, this.scrollY) })
- },
- position: function() {
- if (!this.length) return
-
- var elem = this[0],
- // Get *real* offsetParent
- offsetParent = this.offsetParent(),
- // Get correct offsets
- offset = this.offset(),
- parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()
-
- // Subtract element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- offset.top -= parseFloat( $(elem).css('margin-top') ) || 0
- offset.left -= parseFloat( $(elem).css('margin-left') ) || 0
-
- // Add offsetParent borders
- parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0
- parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0
-
- // Subtract the two offsets
- return {
- top: offset.top - parentOffset.top,
- left: offset.left - parentOffset.left
- }
- },
- offsetParent: function() {
- return this.map(function(){
- var parent = this.offsetParent || document.body
- while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static")
- parent = parent.offsetParent
- return parent
- })
- }
- }
-
- // for now
- $.fn.detach = $.fn.remove
-
- // Generate the `width` and `height` functions
- ;['width', 'height'].forEach(function(dimension){
- var dimensionProperty =
- dimension.replace(/./, function(m){ return m[0].toUpperCase() })
-
- $.fn[dimension] = function(value){
- var offset, el = this[0]
- if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] :
- isDocument(el) ? el.documentElement['scroll' + dimensionProperty] :
- (offset = this.offset()) && offset[dimension]
- else return this.each(function(idx){
- el = $(this)
- el.css(dimension, funcArg(this, value, idx, el[dimension]()))
- })
- }
- })
-
- function traverseNode(node, fun) {
- fun(node)
- for (var i = 0, len = node.childNodes.length; i < len; i++)
- traverseNode(node.childNodes[i], fun)
- }
-
- // Generate the `after`, `prepend`, `before`, `append`,
- // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.
- adjacencyOperators.forEach(function(operator, operatorIndex) {
- var inside = operatorIndex % 2 //=> prepend, append
-
- $.fn[operator] = function(){
- // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings
- var argType, nodes = $.map(arguments, function(arg) {
- argType = type(arg)
- return argType == "object" || argType == "array" || arg == null ?
- arg : zepto.fragment(arg)
- }),
- parent, copyByClone = this.length > 1
- if (nodes.length < 1) return this
-
- return this.each(function(_, target){
- parent = inside ? target : target.parentNode
-
- // convert all methods to a "before" operation
- target = operatorIndex == 0 ? target.nextSibling :
- operatorIndex == 1 ? target.firstChild :
- operatorIndex == 2 ? target :
- null
-
- var parentInDocument = $.contains(document.documentElement, parent)
-
- nodes.forEach(function(node){
- if (copyByClone) node = node.cloneNode(true)
- else if (!parent) return $(node).remove()
-
- parent.insertBefore(node, target)
- if (parentInDocument) traverseNode(node, function(el){
- if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&
- (!el.type || el.type === 'text/javascript') && !el.src)
- window['eval'].call(window, el.innerHTML)
- })
- })
- })
- }
-
- // after => insertAfter
- // prepend => prependTo
- // before => insertBefore
- // append => appendTo
- $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){
- $(html)[operator](this)
- return this
- }
- })
-
- zepto.Z.prototype = Z.prototype = $.fn
-
- // Export internal API functions in the `$.zepto` namespace
- zepto.uniq = uniq
- zepto.deserializeValue = deserializeValue
- $.zepto = zepto
-
- return $
-})()
-
-window.Zepto = Zepto
-window.$ === undefined && (window.$ = Zepto)
-
-;(function($){
- var _zid = 1, undefined,
- slice = Array.prototype.slice,
- isFunction = $.isFunction,
- isString = function(obj){ return typeof obj == 'string' },
- handlers = {},
- specialEvents={},
- focusinSupported = 'onfocusin' in window,
- focus = { focus: 'focusin', blur: 'focusout' },
- hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }
-
- specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'
-
- function zid(element) {
- return element._zid || (element._zid = _zid++)
- }
- function findHandlers(element, event, fn, selector) {
- event = parse(event)
- if (event.ns) var matcher = matcherFor(event.ns)
- return (handlers[zid(element)] || []).filter(function(handler) {
- return handler
- && (!event.e || handler.e == event.e)
- && (!event.ns || matcher.test(handler.ns))
- && (!fn || zid(handler.fn) === zid(fn))
- && (!selector || handler.sel == selector)
- })
- }
- function parse(event) {
- var parts = ('' + event).split('.')
- return {e: parts[0], ns: parts.slice(1).sort().join(' ')}
- }
- function matcherFor(ns) {
- return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')
- }
-
- function eventCapture(handler, captureSetting) {
- return handler.del &&
- (!focusinSupported && (handler.e in focus)) ||
- !!captureSetting
- }
-
- function realEvent(type) {
- return hover[type] || (focusinSupported && focus[type]) || type
- }
-
- function add(element, events, fn, data, selector, delegator, capture){
- var id = zid(element), set = (handlers[id] || (handlers[id] = []))
- events.split(/\s/).forEach(function(event){
- if (event == 'ready') return $(document).ready(fn)
- var handler = parse(event)
- handler.fn = fn
- handler.sel = selector
- // emulate mouseenter, mouseleave
- if (handler.e in hover) fn = function(e){
- var related = e.relatedTarget
- if (!related || (related !== this && !$.contains(this, related)))
- return handler.fn.apply(this, arguments)
- }
- handler.del = delegator
- var callback = delegator || fn
- handler.proxy = function(e){
- e = compatible(e)
- if (e.isImmediatePropagationStopped()) return
- e.data = data
- var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))
- if (result === false) e.preventDefault(), e.stopPropagation()
- return result
- }
- handler.i = set.length
- set.push(handler)
- if ('addEventListener' in element)
- element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
- })
- }
- function remove(element, events, fn, selector, capture){
- var id = zid(element)
- ;(events || '').split(/\s/).forEach(function(event){
- findHandlers(element, event, fn, selector).forEach(function(handler){
- delete handlers[id][handler.i]
- if ('removeEventListener' in element)
- element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
- })
- })
- }
-
- $.event = { add: add, remove: remove }
-
- $.proxy = function(fn, context) {
- var args = (2 in arguments) && slice.call(arguments, 2)
- if (isFunction(fn)) {
- var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) }
- proxyFn._zid = zid(fn)
- return proxyFn
- } else if (isString(context)) {
- if (args) {
- args.unshift(fn[context], fn)
- return $.proxy.apply(null, args)
- } else {
- return $.proxy(fn[context], fn)
- }
- } else {
- throw new TypeError("expected function")
- }
- }
-
- $.fn.bind = function(event, data, callback){
- return this.on(event, data, callback)
- }
- $.fn.unbind = function(event, callback){
- return this.off(event, callback)
- }
- $.fn.one = function(event, selector, data, callback){
- return this.on(event, selector, data, callback, 1)
- }
-
- var returnTrue = function(){return true},
- returnFalse = function(){return false},
- ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$)/,
- eventMethods = {
- preventDefault: 'isDefaultPrevented',
- stopImmediatePropagation: 'isImmediatePropagationStopped',
- stopPropagation: 'isPropagationStopped'
- }
-
- function compatible(event, source) {
- if (source || !event.isDefaultPrevented) {
- source || (source = event)
-
- $.each(eventMethods, function(name, predicate) {
- var sourceMethod = source[name]
- event[name] = function(){
- this[predicate] = returnTrue
- return sourceMethod && sourceMethod.apply(source, arguments)
- }
- event[predicate] = returnFalse
- })
-
- if (source.defaultPrevented !== undefined ? source.defaultPrevented :
- 'returnValue' in source ? source.returnValue === false :
- source.getPreventDefault && source.getPreventDefault())
- event.isDefaultPrevented = returnTrue
- }
- return event
- }
-
- function createProxy(event) {
- var key, proxy = { originalEvent: event }
- for (key in event)
- if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]
-
- return compatible(proxy, event)
- }
-
- $.fn.delegate = function(selector, event, callback){
- return this.on(event, selector, callback)
- }
- $.fn.undelegate = function(selector, event, callback){
- return this.off(event, selector, callback)
- }
-
- $.fn.live = function(event, callback){
- $(document.body).delegate(this.selector, event, callback)
- return this
- }
- $.fn.die = function(event, callback){
- $(document.body).undelegate(this.selector, event, callback)
- return this
- }
-
- $.fn.on = function(event, selector, data, callback, one){
- var autoRemove, delegator, $this = this
- if (event && !isString(event)) {
- $.each(event, function(type, fn){
- $this.on(type, selector, data, fn, one)
- })
- return $this
- }
-
- if (!isString(selector) && !isFunction(callback) && callback !== false)
- callback = data, data = selector, selector = undefined
- if (callback === undefined || data === false)
- callback = data, data = undefined
-
- if (callback === false) callback = returnFalse
-
- return $this.each(function(_, element){
- if (one) autoRemove = function(e){
- remove(element, e.type, callback)
- return callback.apply(this, arguments)
- }
-
- if (selector) delegator = function(e){
- var evt, match = $(e.target).closest(selector, element).get(0)
- if (match && match !== element) {
- evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})
- return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))
- }
- }
-
- add(element, event, callback, data, selector, delegator || autoRemove)
- })
- }
- $.fn.off = function(event, selector, callback){
- var $this = this
- if (event && !isString(event)) {
- $.each(event, function(type, fn){
- $this.off(type, selector, fn)
- })
- return $this
- }
-
- if (!isString(selector) && !isFunction(callback) && callback !== false)
- callback = selector, selector = undefined
-
- if (callback === false) callback = returnFalse
-
- return $this.each(function(){
- remove(this, event, callback, selector)
- })
- }
-
- $.fn.trigger = function(event, args){
- event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)
- event._args = args
- return this.each(function(){
- // handle focus(), blur() by calling them directly
- if (event.type in focus && typeof this[event.type] == "function") this[event.type]()
- // items in the collection might not be DOM elements
- else if ('dispatchEvent' in this) this.dispatchEvent(event)
- else $(this).triggerHandler(event, args)
- })
- }
-
- // triggers event handlers on current element just as if an event occurred,
- // doesn't trigger an actual event, doesn't bubble
- $.fn.triggerHandler = function(event, args){
- var e, result
- this.each(function(i, element){
- e = createProxy(isString(event) ? $.Event(event) : event)
- e._args = args
- e.target = element
- $.each(findHandlers(element, event.type || event), function(i, handler){
- result = handler.proxy(e)
- if (e.isImmediatePropagationStopped()) return false
- })
- })
- return result
- }
-
- // shortcut methods for `.bind(event, fn)` for each event type
- ;('focusin focusout focus blur load resize scroll unload click dblclick '+
- 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+
- 'change select keydown keypress keyup error').split(' ').forEach(function(event) {
- $.fn[event] = function(callback) {
- return (0 in arguments) ?
- this.bind(event, callback) :
- this.trigger(event)
- }
- })
-
- $.Event = function(type, props) {
- if (!isString(type)) props = type, type = props.type
- var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true
- if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])
- event.initEvent(type, bubbles, true)
- return compatible(event)
- }
-
-})(Zepto)
-
-;(function($){
- var data = {}, dataAttr = $.fn.data, camelize = $.camelCase,
- exp = $.expando = 'Zepto' + (+new Date()), emptyArray = []
-
- // Get value from node:
- // 1. first try key as given,
- // 2. then try camelized key,
- // 3. fall back to reading "data-*" attribute.
- function getData(node, name) {
- var id = node[exp], store = id && data[id]
- if (name === undefined) return store || setData(node)
- else {
- if (store) {
- if (name in store) return store[name]
- var camelName = camelize(name)
- if (camelName in store) return store[camelName]
- }
- return dataAttr.call($(node), name)
- }
- }
-
- // Store value under camelized key on node
- function setData(node, name, value) {
- var id = node[exp] || (node[exp] = ++$.uuid),
- store = data[id] || (data[id] = attributeData(node))
- if (name !== undefined) store[camelize(name)] = value
- return store
- }
-
- // Read all "data-*" attributes from a node
- function attributeData(node) {
- var store = {}
- $.each(node.attributes || emptyArray, function(i, attr){
- if (attr.name.indexOf('data-') == 0)
- store[camelize(attr.name.replace('data-', ''))] =
- $.zepto.deserializeValue(attr.value)
- })
- return store
- }
-
- $.fn.data = function(name, value) {
- return value === undefined ?
- // set multiple values via object
- $.isPlainObject(name) ?
- this.each(function(i, node){
- $.each(name, function(key, value){ setData(node, key, value) })
- }) :
- // get value from first element
- (0 in this ? getData(this[0], name) : undefined) :
- // set value on all elements
- this.each(function(){ setData(this, name, value) })
- }
-
- $.fn.removeData = function(names) {
- if (typeof names == 'string') names = names.split(/\s+/)
- return this.each(function(){
- var id = this[exp], store = id && data[id]
- if (store) $.each(names || store, function(key){
- delete store[names ? camelize(this) : key]
- })
- })
- }
-
- // Generate extended `remove` and `empty` functions
- ;['remove', 'empty'].forEach(function(methodName){
- var origFn = $.fn[methodName]
- $.fn[methodName] = function() {
- var elements = this.find('*')
- if (methodName === 'remove') elements = elements.add(this)
- elements.removeData()
- return origFn.call(this)
- }
- })
-})(Zepto)
-
-;(function(){
- // getComputedStyle shouldn't freak out when called
- // without a valid element as argument
- try {
- getComputedStyle(undefined)
- } catch(e) {
- var nativeGetComputedStyle = getComputedStyle;
- window.getComputedStyle = function(element){
- try {
- return nativeGetComputedStyle(element)
- } catch(e) {
- return null
- }
- }
- }
-})()
--- /dev/null
+/*!
+ * ki.js - jQuery-like API super-tiny JavaScript library
+ * Copyright (c) 2014 Denis Ciccale (@tdecs)
+ * Released under MIT license
+ */
+!function (b, c, d, e) {
+
+ /*
+ * init function (internal use)
+ * a = selector, dom element or function
+ */
+ function i(a) {
+ c.push.apply(this, a && a.nodeType ? [a] : '' + a === a ? b.querySelectorAll(a) : e)
+ }
+
+ /*
+ * $ main function
+ * a = css selector, dom object, or function
+ * http://www.dustindiaz.com/smallest-domready-ever
+ * returns instance or executes function on ready
+ */
+ $ = function (a) {
+ return /^f/.test(typeof a) ? /c/.test(b.readyState) ? a() : $(b).on('DOMContentLoaded', a) : new i(a)
+ }
+
+ // set ki prototype
+ $[d] = i[d] = {
+
+ // default length
+ length: 0,
+
+ /*
+ * on method
+ * a = string event type i.e 'click'
+ * b = function
+ * return this
+ */
+ on: function (a, b) {
+ return this.each(function (c) {
+ c.addEventListener(a, b)
+ })
+ },
+
+ /*
+ * off method
+ * a = string event type i.e 'click'
+ * b = function
+ * return this
+ */
+ off: function (a, b) {
+ return this.each(function (c) {
+ c.removeEventListener(a, b)
+ })
+ },
+
+ /*
+ * each method
+ * use native forEach to iterate collection
+ * a = the function to call on each iteration
+ * b = the this value for that function
+ */
+ each: function (a, b) {
+ c.forEach.call(this, a, b)
+ return this
+ },
+
+ // for some reason is needed to get an array-like
+ // representation instead of an object
+ splice: c.splice
+ }
+}(document, [], 'prototype');
--- /dev/null
+function m(html) {
+ var div = document.createElement("div");
+ div.innerHTML = html;
+ return div.firstChild;
+}
+++ /dev/null
-/* ========================================================================
- * Bootstrap: modal.js v3.3.4
- * http://getbootstrap.com/javascript/#modals
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // MODAL CLASS DEFINITION
- // ======================
-
- var Modal = function (element, options) {
- this.options = options
- this.$body = $(document.body)
- this.$element = $(element)
- this.$dialog = this.$element.find('.modal-dialog')
- this.$backdrop = null
- this.isShown = null
- this.originalBodyPad = null
- this.scrollbarWidth = 0
- this.ignoreBackdropClick = false
-
- if (this.options.remote) {
- this.$element
- .find('.modal-content')
- .load(this.options.remote, $.proxy(function () {
- this.$element.trigger('loaded.bs.modal')
- }, this))
- }
- }
-
- Modal.VERSION = '3.3.4'
-
- Modal.TRANSITION_DURATION = 300
- Modal.BACKDROP_TRANSITION_DURATION = 150
-
- Modal.DEFAULTS = {
- backdrop: true,
- keyboard: true,
- show: true
- }
-
- Modal.prototype.toggle = function (_relatedTarget) {
- return this.isShown ? this.hide() : this.show(_relatedTarget)
- }
-
- Modal.prototype.show = function (_relatedTarget) {
- var that = this
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
-
- this.$element.trigger(e)
-
- if (this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = true
-
- this.checkScrollbar()
- this.setScrollbar()
- this.$body.addClass('modal-open')
-
- this.escape()
- this.resize()
-
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
- this.$dialog.on('mousedown.dismiss.bs.modal', function () {
- that.$element.one('mouseup.dismiss.bs.modal', function (e) {
- if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
- })
- })
-
- this.backdrop(function () {
- var transition = $.support.transition && that.$element.hasClass('fade')
-
- if (!that.$element.parent().length) {
- that.$element.appendTo(that.$body) // don't move modals dom position
- }
-
- that.$element
- .show()
- .scrollTop(0)
-
- that.adjustDialog()
-
- if (transition) {
- that.$element[0].offsetWidth // force reflow
- }
-
- that.$element
- .addClass('in')
- .attr('aria-hidden', false)
-
- that.enforceFocus()
-
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
-
- transition ?
- that.$dialog // wait for modal to slide in
- .one('bsTransitionEnd', function () {
- that.$element.trigger('focus').trigger(e)
- })
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- that.$element.trigger('focus').trigger(e)
- })
- }
-
- Modal.prototype.hide = function (e) {
- if (e) e.preventDefault()
-
- e = $.Event('hide.bs.modal')
-
- this.$element.trigger(e)
-
- if (!this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = false
-
- this.escape()
- this.resize()
-
- $(document).off('focusin.bs.modal')
-
- this.$element
- .removeClass('in')
- .attr('aria-hidden', true)
- .off('click.dismiss.bs.modal')
- .off('mouseup.dismiss.bs.modal')
-
- this.$dialog.off('mousedown.dismiss.bs.modal')
-
- $.support.transition && this.$element.hasClass('fade') ?
- this.$element
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- this.hideModal()
- }
-
- Modal.prototype.enforceFocus = function () {
- $(document)
- .off('focusin.bs.modal') // guard against infinite focus loop
- .on('focusin.bs.modal', $.proxy(function (e) {
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
- this.$element.trigger('focus')
- }
- }, this))
- }
-
- Modal.prototype.escape = function () {
- if (this.isShown && this.options.keyboard) {
- this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
- e.which == 27 && this.hide()
- }, this))
- } else if (!this.isShown) {
- this.$element.off('keydown.dismiss.bs.modal')
- }
- }
-
- Modal.prototype.resize = function () {
- if (this.isShown) {
- $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
- } else {
- $(window).off('resize.bs.modal')
- }
- }
-
- Modal.prototype.hideModal = function () {
- var that = this
- this.$element.hide()
- this.backdrop(function () {
- that.$body.removeClass('modal-open')
- that.resetAdjustments()
- that.resetScrollbar()
- that.$element.trigger('hidden.bs.modal')
- })
- }
-
- Modal.prototype.removeBackdrop = function () {
- this.$backdrop && this.$backdrop.remove()
- this.$backdrop = null
- }
-
- Modal.prototype.backdrop = function (callback) {
- var that = this
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
-
- if (this.isShown && this.options.backdrop) {
- var doAnimate = $.support.transition && animate
-
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
- .appendTo(this.$body)
-
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
- if (this.ignoreBackdropClick) {
- this.ignoreBackdropClick = false
- return
- }
- if (e.target !== e.currentTarget) return
- this.options.backdrop == 'static'
- ? this.$element[0].focus()
- : this.hide()
- }, this))
-
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
- this.$backdrop.addClass('in')
-
- if (!callback) return
-
- doAnimate ?
- this.$backdrop
- .one('bsTransitionEnd', callback)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callback()
-
- } else if (!this.isShown && this.$backdrop) {
- this.$backdrop.removeClass('in')
-
- var callbackRemove = function () {
- that.removeBackdrop()
- callback && callback()
- }
- $.support.transition && this.$element.hasClass('fade') ?
- this.$backdrop
- .one('bsTransitionEnd', callbackRemove)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callbackRemove()
-
- } else if (callback) {
- callback()
- }
- }
-
- // these following methods are used to handle overflowing modals
-
- Modal.prototype.handleUpdate = function () {
- this.adjustDialog()
- }
-
- Modal.prototype.adjustDialog = function () {
- var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
-
- this.$element.css({
- paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
- paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
- })
- }
-
- Modal.prototype.resetAdjustments = function () {
- this.$element.css({
- paddingLeft: '',
- paddingRight: ''
- })
- }
-
- Modal.prototype.checkScrollbar = function () {
- var fullWindowWidth = window.innerWidth
- if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
- var documentElementRect = document.documentElement.getBoundingClientRect()
- fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
- }
- this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
- this.scrollbarWidth = this.measureScrollbar()
- }
-
- Modal.prototype.setScrollbar = function () {
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
- this.originalBodyPad = document.body.style.paddingRight || ''
- if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
- }
-
- Modal.prototype.resetScrollbar = function () {
- this.$body.css('padding-right', this.originalBodyPad)
- }
-
- Modal.prototype.measureScrollbar = function () { // thx walsh
- var scrollDiv = document.createElement('div')
- scrollDiv.className = 'modal-scrollbar-measure'
- this.$body.append(scrollDiv)
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
- this.$body[0].removeChild(scrollDiv)
- return scrollbarWidth
- }
-
-
- // MODAL PLUGIN DEFINITION
- // =======================
-
- function Plugin(option, _relatedTarget) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.modal')
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
- if (typeof option == 'string') data[option](_relatedTarget)
- else if (options.show) data.show(_relatedTarget)
- })
- }
-
- var old = $.fn.modal
-
- $.fn.modal = Plugin
- $.fn.modal.Constructor = Modal
-
-
- // MODAL NO CONFLICT
- // =================
-
- $.fn.modal.noConflict = function () {
- $.fn.modal = old
- return this
- }
-
-
- // MODAL DATA-API
- // ==============
-
- $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
- var $this = $(this)
- var href = $this.attr('href')
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
- if ($this.is('a')) e.preventDefault()
-
- $target.one('show.bs.modal', function (showEvent) {
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
- $target.one('hidden.bs.modal', function () {
- $this.is(':visible') && $this.trigger('focus')
- })
- })
- Plugin.call($target, option, this)
- })
-
-}(Zepto);
--- /dev/null
+let modal, hiding;
+
+function show_modal () {
+ modal.classList.remove('hidden');
+ setTimeout(function (){
+ document.body.classList.add('modal-open');
+ }, 20);
+}
+
+function hide_modal () {
+ document.body.classList.remove('modal-open');
+}
+
+$(function() {
+ modal = $('.modal')[0];
+ $(modal).on('transitionend', el => {
+ if(!document.body.classList.contains('modal-open'))
+ modal.classList.add('hidden');
+ });
+ $('.backdrop,.modal').each(el => document.body.appendChild(el) );
+ $('#solution').on('click', e => {
+ show_modal();
+ e.preventDefault();
+ });
+ $('.backdrop').on('click', hide_modal);
+ window.onkeyup = event => {
+ if (event.keyCode === 27)
+ hide_modal();
+ }
+});
+++ /dev/null
-(function(window) {
- var re = {
- not_string: /[^s]/,
- number: /[dief]/,
- text: /^[^\x25]+/,
- modulo: /^\x25{2}/,
- placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fiosuxX])/,
- key: /^([a-z_][a-z_\d]*)/i,
- key_access: /^\.([a-z_][a-z_\d]*)/i,
- index_access: /^\[(\d+)\]/,
- sign: /^[\+\-]/
- }
-
- function sprintf() {
- var key = arguments[0], cache = sprintf.cache
- if (!(cache[key] && cache.hasOwnProperty(key))) {
- cache[key] = sprintf.parse(key)
- }
- return sprintf.format.call(null, cache[key], arguments)
- }
-
- sprintf.format = function(parse_tree, argv) {
- var cursor = 1, tree_length = parse_tree.length, node_type = "", arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = ""
- for (i = 0; i < tree_length; i++) {
- node_type = get_type(parse_tree[i])
- if (node_type === "string") {
- output[output.length] = parse_tree[i]
- }
- else if (node_type === "array") {
- match = parse_tree[i] // convenience purposes only
- if (match[2]) { // keyword argument
- arg = argv[cursor]
- for (k = 0; k < match[2].length; k++) {
- if (!arg.hasOwnProperty(match[2][k])) {
- throw new Error(sprintf("[sprintf] property '%s' does not exist", match[2][k]))
- }
- arg = arg[match[2][k]]
- }
- }
- else if (match[1]) { // positional argument (explicit)
- arg = argv[match[1]]
- }
- else { // positional argument (implicit)
- arg = argv[cursor++]
- }
-
- if (get_type(arg) == "function") {
- arg = arg()
- }
-
- if (re.not_string.test(match[8]) && (get_type(arg) != "number" && isNaN(arg))) {
- throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg)))
- }
-
- if (re.number.test(match[8])) {
- is_positive = arg >= 0
- }
-
- switch (match[8]) {
- case "b":
- arg = arg.toString(2)
- break
- case "c":
- arg = String.fromCharCode(arg)
- break
- case "d":
- case "i":
- arg = parseInt(arg, 10)
- break
- case "e":
- arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential()
- break
- case "f":
- arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg)
- break
- case "o":
- arg = arg.toString(8)
- break
- case "s":
- arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg)
- break
- case "u":
- arg = arg >>> 0
- break
- case "x":
- arg = arg.toString(16)
- break
- case "X":
- arg = arg.toString(16).toUpperCase()
- break
- }
- if (re.number.test(match[8]) && (!is_positive || match[3])) {
- sign = is_positive ? "+" : "-"
- arg = arg.toString().replace(re.sign, "")
- }
- else {
- sign = ""
- }
- pad_character = match[4] ? match[4] === "0" ? "0" : match[4].charAt(1) : " "
- pad_length = match[6] - (sign + arg).length
- pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : "") : ""
- output[output.length] = match[5] ? sign + arg + pad : (pad_character === "0" ? sign + pad + arg : pad + sign + arg)
- }
- }
- return output.join("")
- }
-
- sprintf.cache = {}
-
- sprintf.parse = function(fmt) {
- var _fmt = fmt, match = [], parse_tree = [], arg_names = 0
- while (_fmt) {
- if ((match = re.text.exec(_fmt)) !== null) {
- parse_tree[parse_tree.length] = match[0]
- }
- else if ((match = re.modulo.exec(_fmt)) !== null) {
- parse_tree[parse_tree.length] = "%"
- }
- else if ((match = re.placeholder.exec(_fmt)) !== null) {
- if (match[2]) {
- arg_names |= 1
- var field_list = [], replacement_field = match[2], field_match = []
- if ((field_match = re.key.exec(replacement_field)) !== null) {
- field_list[field_list.length] = field_match[1]
- while ((replacement_field = replacement_field.substring(field_match[0].length)) !== "") {
- if ((field_match = re.key_access.exec(replacement_field)) !== null) {
- field_list[field_list.length] = field_match[1]
- }
- else if ((field_match = re.index_access.exec(replacement_field)) !== null) {
- field_list[field_list.length] = field_match[1]
- }
- else {
- throw new SyntaxError("[sprintf] failed to parse named argument key")
- }
- }
- }
- else {
- throw new SyntaxError("[sprintf] failed to parse named argument key")
- }
- match[2] = field_list
- }
- else {
- arg_names |= 2
- }
- if (arg_names === 3) {
- throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported")
- }
- parse_tree[parse_tree.length] = match
- }
- else {
- throw new SyntaxError("[sprintf] unexpected placeholder")
- }
- _fmt = _fmt.substring(match[0].length)
- }
- return parse_tree
- }
-
- var vsprintf = function(fmt, argv, _argv) {
- _argv = (argv || []).slice(0)
- _argv.splice(0, 0, fmt)
- return sprintf.apply(null, _argv)
- }
-
- /**
- * helpers
- */
- function get_type(variable) {
- return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase()
- }
-
- function str_repeat(input, multiplier) {
- return Array(multiplier + 1).join(input)
- }
-
- /**
- * export to either browser or node.js
- */
- if (typeof exports !== "undefined") {
- exports.sprintf = sprintf
- exports.vsprintf = vsprintf
- }
- else {
- window.sprintf = sprintf
- window.vsprintf = vsprintf
-
- if (typeof define === "function" && define.amd) {
- define(function() {
- return {
- sprintf: sprintf,
- vsprintf: vsprintf
- }
- })
- }
- }
-})(typeof window === "undefined" ? this : window);
-(function(){
- 'use strict';
-
- $( document ).ready(function() {
- if(!$('#sidebar').size()) {
- var content = $('#content');
- content.wrapInner('<div class="col-md-9">').append('<aside id="sidebar" class="col-md-3">').addClass('row');
- }
- });
-})();
+$(function() {
+ if(!document.getElementById('sidebar')) {
+ let content = $('main')[0];
+ content.innerHTML = '<div class="col-md-9">' + content.innerHTML + '</div><aside id="sidebar" class="col-md-3"></aside>';
+ content.classList.add('row');
+ }
+});
-(function(){
- 'use strict';
-
- function divine_format() {
- var filename = $('#prog').val();
- var ext = /\.([^.]*)$/.exec(filename)[1];
- var format;
-
- switch(ext) {
- case 'c':
- format = 'C';
- break;
- case 'cc':
- case 'cpp':
- case 'cxx':
- case 'C':
- format = 'CPP';
- break;
- case 'go':
- format = 'GOLANG';
- break;
- case 'hs':
- case 'lhs':
- format = 'HASKELL';
- break;
- case 'lisp':
- case 'lsp':
- case 'cl':
- case 'l':
- format = 'SBCL';
- break;
- case 'java':
- format = 'JAVA';
- break;
- case 'pas':
- format = 'PASCAL';
- break;
- case 'pl':
- format = 'PERL';
- break;
- case 'py':
- format = 'PYTHON';
- break;
- case 'rb':
- format = 'RUBY';
- break;
- }
-
- if(format)
- $('#prog_format').val(format);
- }
-
- $( document ).ready(function() {
- $('#prog').on('change', divine_format);
- });
-})();
+var ext_table = {
+ 'c' : 'C',
+
+ 'cc' : 'CPP',
+ 'cpp' : 'CPP',
+ 'cxx' : 'CPP',
+ 'C' : 'CPP',
+
+ 'go' : 'GOLANG',
+
+ 'gs' : 'GOLFSCRIPT',
+
+ 'hs' : 'HASKELL',
+ 'lhs' : 'HASKELL',
+
+ 'lisp': 'SBCL',
+ 'lsp' : 'SBCL',
+ 'cl' : 'SBCL',
+ 'l' : 'SBCL',
+
+ 'java': 'JAVA',
+
+ 'pas' : 'PASCAL',
+
+ 'pl' : 'PERL',
+
+ 'py' : 'PYTHON',
+
+ 'rb' : 'RUBY'
+}
+
+function divine_format() {
+ var filename = $('#prog')[0].value;
+ var ext = /\.([^.]*)$/.exec(filename)[1];
+
+ if(ext_table[ext])
+ $('#prog_format')[0].value = ext_table[ext];
+}
+
+$(() => $('#prog').on('change', divine_format));
-(function(){
- 'use strict';
-
- $( document ).ready(function(){
- $('.jsform').on('click', 'input[type="submit"]', function(e){
- var form_data = new FormData(this.parentElement);
- var form = $(this).parent();
- var xhr = new XMLHttpRequest();
- xhr.open(form.attr('method'), form.attr('action'));
- xhr.onload = function() {
- $('#result').html(this.responseText);
- };
- xhr.onerror = function() {
- $('#result').html('Error!');
- };
- window.scrollTo(0, 0);
- $('#result').html('Loading...');
- xhr.send(form_data);
- return false;
- });
+$(function(){
+ let result = $('#result')[0];
+ $('.jsform > input[type="submit"]').on('click', e => {
+ let form_data = new FormData(this.parentElement);
+ let form = this.parentNode;
+ let xhr = new XMLHttpRequest();
+ xhr.open(form.getAttribute('method'), form.getAttribute('action'));
+ xhr.onload = () => result.innerHTML = this.responseText;
+ xhr.onerror = () => result.innerHTML = 'Error!';
+ window.scrollTo(0, 0);
+ result.innerHTML = 'Loading...';
+ xhr.send(form_data);
+ e.preventDefault();
});
-})();
+});
-(function(){
- 'use strict';
-
- $( document ).ready(function(){
- if(window.innerWidth >= 768)
- return;
- $('#title').before('<div class="text-center">Tap title to toggle menu</div>');
- $('nav').addClass('hidden');
- $('#title,#logo').on('click', function () {
- $('nav').toggleClass('hidden');
- });
- });
-})();
+$(function(){
+ if(window.innerWidth >= 768)
+ return;
+ $('#title')[0].insertAdjacentHTML('beforebegin', '<div class="text-center">Tap title to toggle menu</div>');
+ $('nav')[0].classList.add('hidden');
+ $('#title,#logo').on('click', () => $('nav')[0].classList.toggle('hidden'));
+});
-(function(){
- 'use strict';
-
- $( document ).ready(function(){
- $('#sponsors').detach().appendTo($('#sidebar'));
- });
-})();
+$(() => $('#sidebar')[0].appendChild($('#sponsors')[0]));
-(function(){
- 'use strict';
+const NAVS = {
+ home: /^\/$/,
+ pb: /^\/(?:pb|sol)\//,
+ ct: /^\/(?:ct|st|ed)\//,
+ log: /^\/log\//,
+ us: /^\/us\//,
+ account: /^\/account$/,
+ contribute: /^\/contribute$/,
+ about: /^\/about$/,
+};
- var NAVS = {
- 'home': /^\/$/,
- 'pb': /^\/(?:pb|sol)\//,
- 'ct': /^\/(?:ct|st|ed)\//,
- 'log': /^\/log\//,
- 'us': /^\/us\//,
- 'account': /^\/account$/,
- 'contribute': /^\/contribute$/,
- 'about': /^\/about$/,
- };
-
- $( document ).ready(function(){
- var path = location.pathname;
- for (var nav in NAVS)
- if(path.match(NAVS[nav])) {
- $('#nav-' + nav).addClass('active');
- break;
- }
- });
-})();
+$(function(){
+ let path = location.pathname;
+ for (let nav in NAVS)
+ if(path.match(NAVS[nav]))
+ $('#nav-' + nav)[0].classList.add('active');
+});
-(function(){
- 'use strict';
-
- $( document ).ready(function() {
- $('.reqjs').removeClass('reqjs');
- });
-})();
+$(() => $('.reqjs').each(e => e.classList.remove('reqjs')));
-(function(){
- 'use strict';
- function set_style(name){
- $('link[rel~="stylesheet"]').prop('disabled', true);
- $('link[title="' + name + '"]').prop('disabled', false);
- localStorage.setItem("theme", name);
- $(document).ready(function() {
- if(name == 'slate' || name == 'cyborg')
- $('.logo').removeClass('logo-light');
- else
- $('.logo').addClass('logo-light');
- });
- }
-
- var selector;
-
- function add_themelink(theme, text) {
- var link = $('<a role="button">' + text + '</a>');
- link.appendTo(selector.find('ul')).wrap('<li>').on('click', function () { set_style(theme) });
- }
-
- $( document ).ready(function() {
- selector = $('<div>Themes: <ul class="list-inline"></ul></div>');
- add_themelink('cyborg', 'Black');
- add_themelink('slate', 'Grey');
- add_themelink('readable', 'White');
- $('#sidebar').prepend(selector);
+function set_style(name){
+ $('link[rel~="stylesheet"]').each(e => e.disabled = true);
+ $('link[title="' + name + '"]')[0].disabled = false;
+ localStorage.setItem("theme", name);
+ $(function() {
+ if(name == 'slate' || name == 'cyborg')
+ $('.logo').each(e => e.classList.remove('logo-light'));
+ else
+ $('.logo').each(e => e.classList.add('logo-light'));
});
+}
+
+$(function() {
+ var theme_ul = '<ul class="list-inline" id="themes">' +
+ '<li><a role="button" data-theme="cyborg">Black</a>' +
+ '<li><a role="button" data-theme="slate">Grey</a>' +
+ '<li><a role="button" data-theme="readable">White</a></ul>';
+ var sidebar = $('#sidebar')[0];
+ sidebar.insertBefore(m(theme_ul), sidebar.firstChild);
+ $('#themes a').on('click', e => set_style(e.target.dataset.theme));
+});
- var theme = localStorage.getItem("theme");
- if(theme) {
- if(theme == "cerulean" || theme == "cosmo")
- theme = "readable";
- set_style(theme);
- }
-})();
+let theme = localStorage.getItem("theme");
+if(theme) {
+ if(theme == "cerulean" || theme == "cosmo")
+ theme = "readable";
+ set_style(theme);
+}
-(function(){
- 'use strict';
+let offset = 0;
- function update_timer(timer){
- var start = parseInt(timer.dataset.start);
- var stop = parseInt(timer.dataset.stop);
- var value = parseInt(timer.dataset.value);
- var now = Math.floor(Date.now() / 1000);
+function update_timer(timer){
+ var start = parseInt(timer.dataset.start);
+ var stop = parseInt(timer.dataset.stop);
+ var value = parseInt(timer.dataset.value);
+ var now = Math.floor(Date.now() / 1000) + offset;
- var left = stop - now;
- var total = stop - start;
- if(left < 0)
- left = 0;
+ var left = stop - now;
+ var total = stop - start;
+ if(left < 0)
+ left = 0;
- if(value) {
- value = Math.max(value * 3 / 10, value * left / total);
- timer.innerHTML = Math.floor(value);
- } else {
- var hours = left / 60 / 60;
- var minutes = left / 60 % 60;
- var seconds = left % 60;
- timer.innerHTML = sprintf('%02d:%02d:%02d', hours, minutes, seconds);
- }
+ if(value) {
+ value = Math.max(value * 3 / 10, value * left / total);
+ timer.innerHTML = Math.floor(value);
+ } else {
+ var hours = Math.floor(left / 60 / 60);
+ hours = hours < 10 ? '0' + hours : hours;
+ var minutes = Math.floor(left / 60) % 60;
+ minutes = minutes < 10 ? '0' + minutes : minutes;
+ var seconds = left % 60;
+ seconds = seconds < 10 ? '0' + seconds : seconds;
+ timer.innerHTML = hours + ':' + minutes + ':' + seconds;
}
+}
- $( document ).ready(function() {
- $('.timer').each(function(index, item){
- update_timer(item);
- setInterval(function(){update_timer(item)}, 1000);
- });
+$(() => {
+ $('.timer').each(item => {
+ update_timer(item);
+ setInterval(() => update_timer(item), 1000);
});
-})();
+ if($('.timer').length > 0) {
+ let xhr = new XMLHttpRequest();
+ xhr.open('HEAD', '/');
+ xhr.onload = () => {
+ let srvtime = Date.parse(xhr.getResponseHeader('Date'));
+ offset = Math.ceil((srvtime - Date.now()) / 1000);
+ console.log("Offset from server: " + offset);
+ };
+ xhr.send();
+ }
+});
-(function(){
- 'use strict';
+const TICK = '<span class="tick tracker-mark">✔</span>';
+const XMARK = '<span class="x tracker-mark">✘</span>';
- function tick() { return $('<span class="tick tracker-mark">✔</span>') }
- function xmark() { return $('<span class="x tracker-mark">✘</span>') }
+function clean_tracker(){
+ $('.tracker-mark').each(e => e.parentNode.removeChild(e));
+ $('.tracker-info').each(e => {
+ e.classList.remove('tracker-info');
+ e.classList.remove('info');
+ });
+}
- function clean_tracker(){
- $('.tracker-mark').detach();
- $('.tracker-info').removeClass('tracker-info info');
- }
+let tracker;
- var tracker;
+function update_tracker(){
+ let data = localStorage.getItem('tracker_data');
+ let user = localStorage.getItem('tracker_username');
+ if(!data)
+ return;
+ data = JSON.parse(data);
+ let contests = {}, solved = {}, attempted = {}, solvednr = 0, attemptednr = 0;
+ data.problems.forEach(e => {
+ if(e.solved) {
+ solved[e.problem] = 1;
+ solvednr++;
+ } else {
+ attempted[e.problem] = 1;
+ attemptednr++;
+ }
+ });
- function update_tracker(){
- var data = localStorage.getItem('tracker_data');
- var user = localStorage.getItem('tracker_username');
- if(!data)
- return;
- data = JSON.parse(data);
- var solved = {};
- var attempted = {};
- var solvednr = 0;
- var attemptednr = 0;
- data.problems.forEach(function(e){
- if(e.solved){
- solved[e.problem] = 1;
- solvednr++;
- } else {
- attempted[e.problem] = 1;
- attemptednr++;
- }
- });
+ data.contests.forEach(e => contests[e.contest] = 1);
- var contests = {};
- data.contests.forEach(function(e){
- contests[e.contest] = 1;
- });
+ clean_tracker();
+ $('#tracker_userlink')[0].innerHTML = data.name;
+ $('#tracker_solved')[0].innerHTML = solvednr;
+ $('#tracker_attempted')[0].innerHTML = attemptednr;
+ $('#tracker_contests')[0].innerHTML = data.contests.length;
+ $('#tracker_log')[0].setAttribute('href', '/log/?owner=' + user);
- clean_tracker();
- $('#tracker_userlink').html(data.name);
- $('#tracker_solved').html(solvednr);
- $('#tracker_attempted').html(attemptednr);
- $('#tracker_contests').html(data.contests.length);
- $('#tracker_log').attr('href', '/log/?owner=' + user);
+ if(location.pathname == '/pb/')
+ $('table .name a').each(el => {
+ let id = el.getAttribute('href').split('?', 2)[0];
+ if(solved[id])
+ el.insertAdjacentHTML('beforebegin', TICK);
+ else if(attempted[id])
+ el.insertAdjacentHTML('beforebegin', XMARK);
+ });
- if(location.pathname == '/pb/')
- $('table').find('.name').find('a').each(function() {
- var id = $(this).attr('href').split('?', 2)[0];
- if(solved[id])
- $(this).parent().prepend(tick());
- else if(attempted[id])
- $(this).parent().prepend(xmark());
- });
+ if(location.pathname == '/ct/')
+ $('table .name a').each(el => {
+ let id = el.getAttribute('href').substr(4);
+ if(contests[id])
+ el.insertAdjacentHTML('beforebegin', TICK);
+ });
- if(location.pathname == '/ct/')
- $('table').find('.name').find('a').each(function() {
- var id = $(this).attr('href').substr(4);
- if(contests[id])
- $(this).parent().prepend(tick());
- });
+ if(location.pathname == '/log/')
+ $('table tbody tr').each(el => {
+ let owner = el.querySelector('.owner a');
+ if(!owner || owner.getAttribute('href') != '/us/' + user)
+ return;
+ var state = el.getElementsByClassName('r0').length ? TICK : XMARK;
+ el.getElementsByClassName('id')[0].innerHTML += state;
+ });
- if(location.pathname == '/log/')
- $('table').find('tbody').find('tr').each(function() {
- if($(this).find('.owner').find('a').attr('href') != '/us/' + user)
- return;
- $(this).find('.id').append($(this).find('.r0').size() ? tick() : xmark());
- });
+ if(location.pathname.match(/^\/st\//) || location.pathname == '/us/')
+ $('table tbody tr').each(el => {
+ if(el.querySelector('.user a').getAttribute('href') == '/us/' + user){
+ el.classList.add('info');
+ el.classList.add('tracker-info');
+ }
+ });
+}
- if(location.pathname.match(/^\/st\//) || location.pathname == '/us/')
- $('table').find('tbody').find('tr').each(function() {
- if($(this).find('.user').find('a').attr('href') == '/us/' + user)
- $(this).addClass('info tracker-info');
- });
- }
+function start_tracking(user){
+ localStorage.setItem('tracker_username', user);
+ $('#tracker_userlink')[0].setAttribute('href', '/us/' + user);
+ $('#tracker_userlink')[0].innerHTML = user;
+ tracker.classList.remove('hidden');
+ update_tracker();
+ var lastfetch = localStorage.getItem('tracker_lastfetch');
+ if(Date.now() - lastfetch > 60 * 10 * 1000)
+ refresh_tracker();
+}
- function start_tracking(user){
- localStorage.setItem('tracker_username', user);
- $('#tracker_userlink').attr('href', '/us/' + user).html(user);
- tracker.removeClass('hidden');
+function refresh_tracker(){
+ var user = localStorage.getItem('tracker_username');
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', '/us/' + user + '?format=json');
+ xhr.onload = () => {
+ localStorage.setItem('tracker_data', xhr.responseText);
+ localStorage.setItem('tracker_lastfetch', Date.now());
update_tracker();
- var lastfetch = localStorage.getItem('tracker_lastfetch');
- if(Date.now() - lastfetch > 60 * 10 * 1000)
- refresh_tracker();
- }
-
- function refresh_tracker(){
- var user = localStorage.getItem('tracker_username');
- var xhr = new XMLHttpRequest();
- xhr.open('GET', '/us/' + user + '?format=json');
- xhr.onload = function () {
- localStorage.setItem('tracker_data', this.responseText);
- localStorage.setItem('tracker_lastfetch', Date.now());
- update_tracker();
- };
- xhr.send();
- }
- window.refresh_tracker = refresh_tracker;
- window.start_tracking = start_tracking;
+ };
+ xhr.send();
+}
- function stop_tracking(){
- clean_tracker();
- localStorage.removeItem('tracker_username');
- localStorage.removeItem('tracker_data');
- localStorage.removeItem('tracker_lastfetch');
- tracker.addClass('hidden');
- }
+function stop_tracking(){
+ clean_tracker();
+ localStorage.removeItem('tracker_username');
+ localStorage.removeItem('tracker_data');
+ localStorage.removeItem('tracker_lastfetch');
+ tracker.classList.add('hidden');
+}
- $( document ).ready(function(){
- tracker = $('<div id="tracker" class="hidden">Tracking <a id="tracker_userlink"></a>.<br><a id="tracker_stop" role="button">Stop tracking</a><br><a id="tracker_log">Job log</a><dl class="dl-horizontal"><dt>Solved</dt> <dd id="tracker_solved">?</dd><dt>Attempted</dt> <dd id="tracker_attempted">?</dd><dt>Contests</dt> <dd id="tracker_contests">?</dd></dl></div>');
- tracker.prependTo($('#sidebar'));
- $('#tracker_stop').on('click', stop_tracking);
- $('#track_user').on('click', function() { stop_tracking(); start_tracking($(this).data('user')) });
- $('#submitform').on('submit', function() { localStorage.removeItem('tracker_lastfetch') });
+$(function(){
+ tracker = m('<div id="tracker" class="hidden">Tracking <a id="tracker_userlink"></a>.<br><a id="tracker_stop" role="button">Stop tracking</a><br><a id="tracker_log">Job log</a><dl class="dl-horizontal"><dt>Solved</dt> <dd id="tracker_solved">?</dd><dt>Attempted</dt> <dd id="tracker_attempted">?</dd><dt>Contests</dt> <dd id="tracker_contests">?</dd></dl></div>');
+ var sidebar = $('#sidebar')[0];
+ sidebar.insertBefore(tracker, sidebar.firstChild);
+ $('#tracker_stop').on('click', stop_tracking);
+ $('#track_user').on('click', function() { stop_tracking(); start_tracking(this.dataset.user) });
+ $('#submitform').on('submit', () => localStorage.removeItem('tracker_lastfetch'));
- if(localStorage.getItem('tracker_username'))
- start_tracking(localStorage.getItem('tracker_username'));
- });
-})();
+ if(localStorage.getItem('tracker_username'))
+ start_tracking(localStorage.getItem('tracker_username'));
+});
-(function(){
- 'use strict';
-
- $( document ).ready(function() {
- $('#webchat').prependTo('#sidebar');
- });
-})();
+$(() => $('#sidebar')[0].insertBefore($('#webchat')[0], $('#sidebar')[0].firstChild));
-(function(){
- 'use strict';
-
- $( document ).ready(function(){
- $('<a role="button">Log in').prependTo($('#sidebar')).wrap('<div id="login">').on('click', function(e) {
- var xhr = new XMLHttpRequest();
- xhr.open('GET', '/login');
- xhr.onload = function () {
- if(this.status != 200)
- return;
- var username = this.responseText;
- sessionStorage.setItem('login_username', username);
- start_tracking(username);
- $('#login').html('Probably logged in as ' + username);
- }
- xhr.send();
- return false;
- });
-
- var username = sessionStorage.getItem('login_username');
- if(username)
- $('#login').html('Probably logged in as ' + username);
+$(function(){
+ var sidebar = $('#sidebar')[0];
+ var login = document.createElement('div');
+ login.innerHTML = '<a role="button" id="login" class="show">Log in</a>';
+ sidebar.insertBefore(login, sidebar.firstChild);
+ $('#login').on('click', e => {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', '/login');
+ xhr.onload = () => {
+ if(this.status != 200)
+ return;
+ var username = this.responseText;
+ sessionStorage.setItem('login_username', username);
+ start_tracking(username);
+ login.innerHTML = 'Probably logged in as ' + username;
+ }
+ xhr.send();
+ return false;
});
-})();
+
+ var username = sessionStorage.getItem('login_username');
+ if(username)
+ login.innerHTML = 'Probably logged in as ' + username;
+});
$tree->fid('job_log')->edit_href(sub{$_ .= "&private=$args{private}"}) if $args{private};
$tree->fid('solution')->detach unless $args{solution};
$_->detach for $tree->fclass('rc'); # requires contest
- $tree->fid('solution_modal')->fclass('modal-body')->replace_content(literal $args{solution});
+ $tree->fid('solution_modal')->replace_content(literal $args{solution});
}
if ($args{cansubmit}) {
$tree->fid('nosubmit')->detach;
use CSS::Minifier::XS qw//;
use CSS::SpriteMaker;
-use JavaScript::Minifier::XS qw//;
+use Digest::SHA qw/sha256_base64/;
use IO::Compress::Gzip qw/gzip/;
-use File::Slurp qw/read_file write_file/;
+use File::Slurp qw/read_file write_file edit_file_lines/;
mkdir 'static';
mkdir 'static/css';
+mkdir 'static/js';
sub make_sprite {
my $maker = Local::CSS::SpriteMaker->new(
}
sub make_js {
- if (-f 'compiler.jar') {
- system java => -jar => 'compiler.jar', qw,-O SIMPLE --create_source_map static/js.map --js_output_file static/js.js --language_in ECMASCRIPT5_STRICT --source_map_location_mapping js/|/static/js/,, <js/*>;
- my $js = read_file 'static/js.js';
- write_file 'static/js.js', '//# sourceMappingURL=/static/js.map', "\n", $js;
- system 'cp', '-rp', 'js', 'static/';
- } else {
- my $js;
- $js .= read_file $_ for <js/*.js>;
- write_file 'static/js.js', JavaScript::Minifier::XS::minify $js;
- }
- gzip_file 'static/js.js';
+ system java => -jar => 'compiler.jar', qw,-O SIMPLE --create_source_map static/js/js.map --js_output_file static/js/all.js --language_in ECMASCRIPT6_STRICT --language_out ECMASCRIPT5_STRICT --source_map_location_mapping js/|/static/js/,, <js/*>;
+ my $js = read_file 'static/js/all.js';
+ write_file 'static/js/all.js', '//# sourceMappingURL=/static/js/js.map', "\n", $js;
+ system 'cp', '-rp', 'js', 'static/';
+ gzip_file 'static/js/all.js';
}
my $sprite_mtime = -M 'static/logos.png' // 0;
}
}
+edit_file_lines {
+ my ($file) = m,(static.*\.(?:css|js)),;
+ return unless $file;
+ my $hash = sha256_base64 scalar read_file $file;
+ s/integrity=".*"/integrity="sha256-$hash="/;
+} 'tmpl/skel.en';
+
package
Local::CSS::SpriteMaker;
</dl>
<a href="/log/?problem=problem_id" id="job_log">Job log</a><br>
-<a href="/sol/problem_id" id="solution" data-toggle="modal" data-target="#solution_modal">Solution</a>
+<a href="/sol/problem_id" id="solution">Solution</a>
<h1 static="no">Submit solution</h1>
</div>
</div>
-<div class="modal fade" id="solution_modal" role="dialog" aria-hidden="true" tabindex="-1">
-<div class="modal-dialog modal-lg">
-<div class="modal-content">
-<div class="modal-header">
-<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
-<h4 class="modal-title">Solution</h4>
-</div>
-<div class="modal-body"></div>
-</div>
-</div>
-</div>
+<div class="backdrop"></div>
+<div id="solution_modal" class="hidden modal"></div>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/static/favicon.png" rel="shortcut icon">
-<link href="/static/css/cyborg.css" title="cyborg" rel="alternate stylesheet">
-<link href="/static/css/slate.css" title="slate" rel="stylesheet">
-<link href="/static/css/readable.css" title="readable" rel="alternate stylesheet">
-<script src="/static/js.js" type="text/javascript" async defer></script>
+<link href="/static/css/cyborg.css" title="cyborg" rel="alternate stylesheet" integrity="x">
+<link href="/static/css/slate.css" title="slate" rel="stylesheet" integrity="x">
+<link href="/static/css/readable.css" title="readable" rel="alternate stylesheet" integrity="x">
+<script src="/static/js/all.js" type="text/javascript" async defer integrity="x"></script>
<body>
<div class="container-fluid">