Move hand-made js to resources
This commit is contained in:
parent
292427d485
commit
a72719dc24
76 changed files with 1280 additions and 548 deletions
|
@ -6,7 +6,7 @@
|
|||
"Jonny Barnes <jonny@jonnybarnes.uk>"
|
||||
],
|
||||
"license": "CC0-1.0",
|
||||
"homepage": "https://github.com/jonnybarnes/jbl5",
|
||||
"homepage": "https://github.com/jonnybarnes/jonnybarnes.uk",
|
||||
"moduleType": [],
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
|
|
108
gulpfile.js
108
gulpfile.js
|
@ -16,62 +16,31 @@ var elixir = require('laravel-elixir');
|
|||
|
||||
elixir(function(mix) {
|
||||
mix.sass('global.scss', 'public/assets/css');
|
||||
mix.copy('resources/assets/js', 'public/assets/js');
|
||||
mix.version([
|
||||
//hand-made css
|
||||
'assets/css/global.css',
|
||||
'assets/css/projects.css',
|
||||
'assets/css/alertify.css',
|
||||
'assets/css/sanitize.min.css',
|
||||
'assets/css/prism.css',
|
||||
'assets/js/libs/fetch.js',
|
||||
'assets/js/libs/alertify.js',
|
||||
'assets/js/libs/store2.min.js',
|
||||
'assets/js/libs/Autolinker.min.js',
|
||||
'assets/js/libs/marked.min.js',
|
||||
'assets/js/libs/prism.js',
|
||||
//hand-made js
|
||||
'assets/js/form-save.js',
|
||||
'assets/js/links.js',
|
||||
'assets/js/maps.js',
|
||||
'assets/js/newplace.js',
|
||||
'assets/js/newnote.js',
|
||||
//bower components
|
||||
'assets/bower/alertify.css',
|
||||
'assets/bower/sanitize.css',
|
||||
'assets/bower/fetch.js',
|
||||
'assets/bower/alertify.js',
|
||||
'assets/bower/store2.min.js',
|
||||
'assets/bower/Autolinker.min.js',
|
||||
'assets/bower/marked.min.js',
|
||||
//prism
|
||||
'assets/prism/prism.js',
|
||||
'assets/prism/prism.css',
|
||||
]);
|
||||
});
|
||||
|
||||
gulp.task('gzip-built-css', function() {
|
||||
return gulp.src('public/build/assets/css/*.css')
|
||||
.pipe(zopfli({ format: 'gzip', append: true }))
|
||||
.pipe(gulp.dest('public/build/assets/css/'));
|
||||
});
|
||||
|
||||
gulp.task('br-built-css', function() {
|
||||
return gulp.src('public/build/assets/css/*.css')
|
||||
.pipe(brotli.compress({mode: 1, quality: 11}))
|
||||
.pipe(gulp.dest('public/build/assets/css/'));
|
||||
});
|
||||
|
||||
gulp.task('gzip-built-js', function() {
|
||||
return gulp.src('public/build/assets/js/*.js')
|
||||
.pipe(zopfli({ format: 'gzip', append: true }))
|
||||
.pipe(gulp.dest('public/build/assets/js/'));
|
||||
});
|
||||
|
||||
gulp.task('br-built-js', function() {
|
||||
return gulp.src('public/build/assets/js/*.js')
|
||||
.pipe(brotli.compress({mode: 1, quality: 11}))
|
||||
.pipe(gulp.dest('public/build/assets/js/'));
|
||||
});
|
||||
|
||||
gulp.task('gzip-built-libs-js', function() {
|
||||
return gulp.src('public/build/assets/js/libs/*.js')
|
||||
.pipe(zopfli({ format: 'gzip', append: true }))
|
||||
.pipe(gulp.dest('public/build/assets/js/libs/'));
|
||||
});
|
||||
|
||||
gulp.task('br-built-libs-js', function() {
|
||||
return gulp.src('public/build/assets/js/libs/*.js')
|
||||
.pipe(brotli.compress({mode: 1, quality: 11}))
|
||||
.pipe(gulp.dest('public/build/assets/js/libs/'));
|
||||
});
|
||||
|
||||
gulp.task('bower', function() {
|
||||
//copy JS files
|
||||
gulp.src([
|
||||
|
@ -81,13 +50,54 @@ gulp.task('bower', function() {
|
|||
'bower_components/Autolinker.js/dist/Autolinker.min.js',
|
||||
'bower_components/marked/marked.min.js',
|
||||
])
|
||||
.pipe(gulp.dest('public/assets/js/libs/'));
|
||||
.pipe(gulp.dest('public/assets/bower/'));
|
||||
//copy CSS files
|
||||
gulp.src([
|
||||
'bower_components/alertify.js/dist/css/alertify.css',
|
||||
'bower_components/sanitize-css/dist/sanitize.min.css',
|
||||
'bower_components/sanitize-css/sanitize.css',
|
||||
])
|
||||
.pipe(gulp.dest('public/assets/css/'));
|
||||
.pipe(gulp.dest('public/assets/bower/'));
|
||||
});
|
||||
|
||||
gulp.task('compress', ['gzip-built-css', 'br-built-css', 'gzip-built-js', 'br-built-js', 'gzip-built-libs-js', 'br-built-libs-js']);
|
||||
gulp.task('compress', function () {
|
||||
//hand-made css
|
||||
gulp.src('public/build/assets/css/*.css')
|
||||
.pipe(zopfli({ format: 'gzip', append: true }))
|
||||
.pipe(gulp.dest('public/build/assets/css/'));
|
||||
gulp.src('public/build/assets/css/*.css')
|
||||
.pipe(brotli.compress({mode: 1, quality: 11}))
|
||||
.pipe(gulp.dest('public/build/assets/css/'));
|
||||
//hand-made js
|
||||
gulp.src('public/build/assets/js/*.js')
|
||||
.pipe(zopfli({ format: 'gzip', append: true }))
|
||||
.pipe(gulp.dest('public/build/assets/js/'));
|
||||
gulp.src('public/build/assets/js/*.js')
|
||||
.pipe(brotli.compress({mode: 1, quality: 11}))
|
||||
.pipe(gulp.dest('public/build/assets/js/'));
|
||||
//bower components
|
||||
gulp.src('public/build/assets/bower/*.css')
|
||||
.pipe(zopfli({ format: 'gzip', append: true }))
|
||||
.pipe(gulp.dest('public/build/assets/bower/'));
|
||||
gulp.src('public/build/assets/bower/*.js')
|
||||
.pipe(zopfli({ format: 'gzip', append: true }))
|
||||
.pipe(gulp.dest('public/build/assets/bower/'));
|
||||
gulp.src('public/build/assets/bower/*.css')
|
||||
.pipe(brotli.compress({mode: 1, quality: 11}))
|
||||
.pipe(gulp.dest('public/build/assets/bower/'));
|
||||
gulp.src('public/build/assets/bower/*.js')
|
||||
.pipe(brotli.compress({mode: 1, quality: 11}))
|
||||
.pipe(gulp.dest('public/build/assets/bower/'));
|
||||
//prism
|
||||
gulp.src('public/build/assets/prism/*.css')
|
||||
.pipe(zopfli({ format: 'gzip', append: true }))
|
||||
.pipe(gulp.dest('public/build/assets/prism/'));
|
||||
gulp.src('public/build/assets/prism/*.js')
|
||||
.pipe(zopfli({ format: 'gzip', append: true }))
|
||||
.pipe(gulp.dest('public/build/assets/prism/'));
|
||||
gulp.src('public/build/assets/prism/*.css')
|
||||
.pipe(brotli.compress({mode: 1, quality: 11}))
|
||||
.pipe(gulp.dest('public/build/assets/prism/'));
|
||||
gulp.src('public/build/assets/prism/*.js')
|
||||
.pipe(brotli.compress({mode: 1, quality: 11}))
|
||||
.pipe(gulp.dest('public/build/assets/prism/'));
|
||||
});
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"gulp": "~3.9",
|
||||
"gulp-brotli": "^1.0.1",
|
||||
"gulp-zopfli": "^1.0.0",
|
||||
"laravel-elixir": "^5.0.0",
|
||||
"laravel-elixir": "^6.0.0-2",
|
||||
"lint-staged": "^1.0.1",
|
||||
"pre-commit": "^1.1.3"
|
||||
},
|
||||
|
@ -18,7 +18,9 @@
|
|||
"lint-staged": "lint-staged"
|
||||
},
|
||||
"lint-staged": {
|
||||
"eslint": "public/assets/js/*.js"
|
||||
"eslint": "resources/assets/js/*.js"
|
||||
},
|
||||
"pre-commit": ["lint-staged"]
|
||||
"pre-commit": [
|
||||
"lint-staged"
|
||||
]
|
||||
}
|
||||
|
|
10
public/assets/bower/Autolinker.min.js
vendored
Normal file
10
public/assets/bower/Autolinker.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/assets/bower/alertify.css
vendored
Normal file
1
public/assets/bower/alertify.css
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.alertify-logs>*{padding:12px 24px;color:#fff;box-shadow:0 2px 5px 0 rgba(0,0,0,.2);border-radius:1px}.alertify-logs>*,.alertify-logs>.default{background:rgba(0,0,0,.8)}.alertify-logs>.error{background:rgba(244,67,54,.8)}.alertify-logs>.success{background:rgba(76,175,80,.9)}.alertify{position:fixed;background-color:rgba(0,0,0,.3);left:0;right:0;top:0;bottom:0;width:100%;height:100%;z-index:1}.alertify.hide{opacity:0;pointer-events:none}.alertify,.alertify.show{box-sizing:border-box;transition:all .33s cubic-bezier(.25,.8,.25,1)}.alertify,.alertify *{box-sizing:border-box}.alertify .dialog{padding:12px}.alertify .alert,.alertify .dialog{width:100%;margin:0 auto;position:relative;top:50%;transform:translateY(-50%)}.alertify .alert>*,.alertify .dialog>*{width:400px;max-width:95%;margin:0 auto;text-align:center;padding:12px;background:#fff;box-shadow:0 2px 4px -1px rgba(0,0,0,.14),0 4px 5px 0 rgba(0,0,0,.098),0 1px 10px 0 rgba(0,0,0,.084)}.alertify .alert .msg,.alertify .dialog .msg{padding:12px;margin-bottom:12px;margin:0;text-align:left}.alertify .alert input:not(.form-control),.alertify .dialog input:not(.form-control){margin-bottom:15px;width:100%;font-size:100%;padding:12px}.alertify .alert input:not(.form-control):focus,.alertify .dialog input:not(.form-control):focus{outline-offset:-2px}.alertify .alert nav,.alertify .dialog nav{text-align:right}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button),.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button){background:transparent;box-sizing:border-box;color:rgba(0,0,0,.87);position:relative;outline:0;border:0;display:inline-block;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;padding:0 6px;margin:6px 8px;line-height:36px;min-height:36px;white-space:nowrap;min-width:88px;text-align:center;text-transform:uppercase;font-size:14px;text-decoration:none;cursor:pointer;border:1px solid transparent;border-radius:2px}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover{background-color:rgba(0,0,0,.05)}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus{border:1px solid rgba(0,0,0,.1)}.alertify .alert nav button.btn,.alertify .dialog nav button.btn{margin:6px 4px}.alertify-logs{position:fixed;z-index:1}.alertify-logs.bottom,.alertify-logs:not(.top){bottom:16px}.alertify-logs.left,.alertify-logs:not(.right){left:16px}.alertify-logs.left>*,.alertify-logs:not(.right)>*{float:left;transform:translateZ(0);height:auto}.alertify-logs.left>.show,.alertify-logs:not(.right)>.show{left:0}.alertify-logs.left>*,.alertify-logs.left>.hide,.alertify-logs:not(.right)>*,.alertify-logs:not(.right)>.hide{left:-110%}.alertify-logs.right{right:16px}.alertify-logs.right>*{float:right;transform:translateZ(0)}.alertify-logs.right>.show{right:0;opacity:1}.alertify-logs.right>*,.alertify-logs.right>.hide{right:-110%;opacity:0}.alertify-logs.top{top:0}.alertify-logs>*{box-sizing:border-box;transition:all .4s cubic-bezier(.25,.8,.25,1);position:relative;clear:both;backface-visibility:hidden;perspective:1000;max-height:0;margin:0;padding:0;overflow:hidden;opacity:0;pointer-events:none}.alertify-logs>.show{margin-top:12px;opacity:1;max-height:1000px;padding:12px;pointer-events:auto}
|
1
public/assets/bower/alertify.js
Normal file
1
public/assets/bower/alertify.js
Normal file
File diff suppressed because one or more lines are too long
|
@ -110,7 +110,7 @@
|
|||
var support = {
|
||||
blob: 'FileReader' in self && 'Blob' in self && (function() {
|
||||
try {
|
||||
new Blob();
|
||||
new Blob()
|
||||
return true
|
||||
} catch(e) {
|
||||
return false
|
||||
|
@ -267,7 +267,7 @@
|
|||
|
||||
function headers(xhr) {
|
||||
var head = new Headers()
|
||||
var pairs = xhr.getAllResponseHeaders().trim().split('\n')
|
||||
var pairs = (xhr.getAllResponseHeaders() || '').trim().split('\n')
|
||||
pairs.forEach(function(header) {
|
||||
var split = header.trim().split(':')
|
||||
var key = split.shift().trim()
|
||||
|
@ -320,9 +320,9 @@
|
|||
return new Response(null, {status: status, headers: {location: url}})
|
||||
}
|
||||
|
||||
self.Headers = Headers;
|
||||
self.Request = Request;
|
||||
self.Response = Response;
|
||||
self.Headers = Headers
|
||||
self.Request = Request
|
||||
self.Response = Response
|
||||
|
||||
self.fetch = function(input, init) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
@ -345,7 +345,7 @@
|
|||
return xhr.getResponseHeader('X-Request-URL')
|
||||
}
|
||||
|
||||
return;
|
||||
return
|
||||
}
|
||||
|
||||
xhr.onload = function() {
|
||||
|
@ -360,7 +360,7 @@
|
|||
headers: headers(xhr),
|
||||
url: responseURL()
|
||||
}
|
||||
var body = 'response' in xhr ? xhr.response : xhr.responseText;
|
||||
var body = 'response' in xhr ? xhr.response : xhr.responseText
|
||||
resolve(new Response(body, options))
|
||||
}
|
||||
|
||||
|
@ -368,6 +368,10 @@
|
|||
reject(new TypeError('Network request failed'))
|
||||
}
|
||||
|
||||
xhr.ontimeout = function() {
|
||||
reject(new TypeError('Network request failed'))
|
||||
}
|
||||
|
||||
xhr.open(request.method, request.url, true)
|
||||
|
||||
if (request.credentials === 'include') {
|
352
public/assets/bower/sanitize.css
vendored
Normal file
352
public/assets/bower/sanitize.css
vendored
Normal file
|
@ -0,0 +1,352 @@
|
|||
/*! sanitize.css v3.3.0 | CC0 1.0 Public Domain | github.com/10up/sanitize.css */
|
||||
|
||||
/* Latest tested: Android 6, Chrome 48, Edge 13, Firefox 44, Internet Explorer 11, iOS 9, Opera 35, Safari 9, Windows Phone 8.1 */
|
||||
|
||||
/*
|
||||
* Normalization
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
text-decoration: underline; /* Chrome 48+, Edge 12+, Internet Explorer 11-, Safari 9+ */
|
||||
text-decoration: underline dotted; /* Firefox 40+ */
|
||||
}
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none; /* Chrome 44-, iOS 8+, Safari 9+ */
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder; /* Edge 12+, Safari 6.2+, and Chrome 18+ */
|
||||
}
|
||||
|
||||
button {
|
||||
-webkit-appearance: button; /* iOS 8+ */
|
||||
overflow: visible; /* Internet Explorer 11- */
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
}
|
||||
|
||||
button::-moz-focus-inner, input::-moz-focus-inner {
|
||||
border: 0;/* Firefox 4+ */
|
||||
padding: 0;/* Firefox 4+ */
|
||||
}
|
||||
|
||||
button:-moz-focusring, input:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;/* Firefox 4+ */
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none; /* Firefox 40+, Internet Explorer 11- */
|
||||
}
|
||||
|
||||
details {
|
||||
display: block; /* Edge 12+, Firefox 40+, Internet Explorer 11-, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
html {
|
||||
-ms-overflow-style: -ms-autohiding-scrollbar; /* Edge 12+, Internet Explorer 11- */
|
||||
overflow-y: scroll; /* All browsers without overlaying scrollbars */
|
||||
-webkit-text-size-adjust: 100%; /* iOS 8+, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
hr {
|
||||
overflow: visible; /* Internet Explorer 11-, Edge 12+ */
|
||||
}
|
||||
|
||||
input {
|
||||
-webkit-border-radius: 0 /* iOS 8+ */
|
||||
}
|
||||
|
||||
input[type="button"],
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button;/* iOS 8+ */
|
||||
}
|
||||
|
||||
input[type="number"] {
|
||||
width: auto;/* Firefox 36+ */
|
||||
}
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield;/* Chrome 45+, Safari 9+ */
|
||||
}
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;/* Chrome 45+, Safari 9+ */
|
||||
}
|
||||
|
||||
main {
|
||||
display: block; /* Android 4.3-, Internet Explorer 11-, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
pre {
|
||||
overflow: auto; /* Internet Explorer 11- */
|
||||
}
|
||||
|
||||
progress {
|
||||
display: inline-block; /* Internet Explorer 11-, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
summary {
|
||||
display: block; /* Firefox 40+, Internet Explorer 11-, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden; /* Internet Explorer 11- */
|
||||
}
|
||||
|
||||
template {
|
||||
display: none; /* Android 4.3-, Internet Explorer 11-, iOS 7-, Safari 7-, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* Edge 12+, Internet Explorer 11- */
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none; /* Internet Explorer 10- */
|
||||
}
|
||||
|
||||
/*
|
||||
* Universal inheritance
|
||||
*/
|
||||
|
||||
*,
|
||||
:before,
|
||||
:after {
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
* {
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
:before,
|
||||
:after {
|
||||
text-decoration: inherit;
|
||||
vertical-align: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit;
|
||||
font-style: inherit;
|
||||
font-weight: inherit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Opinionated defaults
|
||||
*/
|
||||
|
||||
/* specify the margin and padding of all elements */
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* specify the border style and width of all elements */
|
||||
|
||||
*,
|
||||
:before,
|
||||
:after {
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
/* remove the tapping delay from clickable elements */
|
||||
|
||||
a,
|
||||
area,
|
||||
button,
|
||||
input,
|
||||
label,
|
||||
select,
|
||||
textarea,
|
||||
[tabindex] {
|
||||
-ms-touch-action: manipulation;
|
||||
touch-action: manipulation;
|
||||
}
|
||||
|
||||
/* specify the standard appearance of selects */
|
||||
|
||||
select {
|
||||
-moz-appearance: none; /* Firefox 40+ */
|
||||
-webkit-appearance: none /* Chrome 45+ */
|
||||
}
|
||||
|
||||
select::-ms-expand {
|
||||
display: none;/* Edge 12+, Internet Explorer 11- */
|
||||
}
|
||||
|
||||
select::-ms-value {
|
||||
color: currentColor;/* Edge 12+, Internet Explorer 11- */
|
||||
}
|
||||
|
||||
/* use current current as the default fill of svg elements */
|
||||
|
||||
svg {
|
||||
fill: currentColor;
|
||||
}
|
||||
|
||||
/* specify the progress cursor of updating elements */
|
||||
|
||||
[aria-busy="true"] {
|
||||
cursor: progress;
|
||||
}
|
||||
|
||||
/* specify the pointer cursor of trigger elements */
|
||||
|
||||
[aria-controls] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* specify the unstyled cursor of disabled, not-editable, or otherwise inoperable elements */
|
||||
|
||||
[aria-disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* specify the style of visually hidden yet accessible elements */
|
||||
|
||||
[hidden][aria-hidden="false"] {
|
||||
clip: rect(0 0 0 0);
|
||||
display: inherit;
|
||||
position: absolute
|
||||
}
|
||||
|
||||
[hidden][aria-hidden="false"]:focus {
|
||||
clip: auto;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Configurable defaults
|
||||
*/
|
||||
|
||||
/* specify the background repeat of all elements */
|
||||
|
||||
* {
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
/* specify the root styles of the document */
|
||||
|
||||
:root {
|
||||
background-color: #ffffff;
|
||||
box-sizing: border-box;
|
||||
color: #000000;
|
||||
cursor: default;
|
||||
font: 100%/1.5 sans-serif;
|
||||
}
|
||||
|
||||
/* specify the text decoration of anchors */
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* specify the alignment of media elements */
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
iframe,
|
||||
img,
|
||||
svg,
|
||||
video {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* specify the coloring of form elements */
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
background-color: transparent;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* specify the minimum height of form elements */
|
||||
|
||||
button,
|
||||
[type="button"],
|
||||
[type="date"],
|
||||
[type="datetime"],
|
||||
[type="datetime-local"],
|
||||
[type="email"],
|
||||
[type="month"],
|
||||
[type="number"],
|
||||
[type="password"],
|
||||
[type="reset"],
|
||||
[type="search"],
|
||||
[type="submit"],
|
||||
[type="tel"],
|
||||
[type="text"],
|
||||
[type="time"],
|
||||
[type="url"],
|
||||
[type="week"],
|
||||
select,
|
||||
textarea {
|
||||
min-height: 1.5em;
|
||||
}
|
||||
|
||||
/* specify the font family of code elements */
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
}
|
||||
|
||||
/* specify the list style of nav lists */
|
||||
|
||||
nav ol,
|
||||
nav ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
/* specify the font size of small elements */
|
||||
|
||||
small {
|
||||
font-size: 75%;
|
||||
}
|
||||
|
||||
/* specify the border styling of tables */
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
/* specify the resizability of textareas */
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
/* specify the background color, font color, and drop shadow of text selections */
|
||||
|
||||
::-moz-selection {
|
||||
background-color: #b3d4fc; /* required when declaring ::selection */
|
||||
color: #ffffff;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background-color: #b3d4fc; /* required when declaring ::selection */
|
||||
color: #ffffff;
|
||||
text-shadow: none;
|
||||
}
|
1
public/assets/css/alertify.css
vendored
1
public/assets/css/alertify.css
vendored
|
@ -1 +0,0 @@
|
|||
.alertify-logs>*{padding:12px 24px;color:#fff;box-shadow:0 2px 5px 0 rgba(0,0,0,.2);border-radius:1px}.alertify-logs>*,.alertify-logs>.default{background:rgba(0,0,0,.8)}.alertify-logs>.error{background:rgba(244,67,54,.8)}.alertify-logs>.success{background:rgba(76,175,80,.9)}.alertify{position:fixed;background-color:rgba(0,0,0,.3);left:0;right:0;top:0;bottom:0;width:100%;height:100%;z-index:2}.alertify.hide{opacity:0;pointer-events:none}.alertify,.alertify.show{box-sizing:border-box;transition:all .33s cubic-bezier(.25,.8,.25,1)}.alertify,.alertify *{box-sizing:border-box}.alertify .dialog{padding:12px}.alertify .alert,.alertify .dialog{width:100%;margin:0 auto;position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.alertify .alert>*,.alertify .dialog>*{width:400px;max-width:95%;margin:0 auto;text-align:center;padding:12px;background:#fff;box-shadow:0 2px 4px -1px rgba(0,0,0,.14),0 4px 5px 0 rgba(0,0,0,.098),0 1px 10px 0 rgba(0,0,0,.084)}.alertify .alert .msg,.alertify .dialog .msg{padding:12px;margin-bottom:12px;margin:0;text-align:left}.alertify .alert input:not(.form-control),.alertify .dialog input:not(.form-control){margin-bottom:15px;width:100%;font-size:100%;padding:12px}.alertify .alert input:not(.form-control):focus,.alertify .dialog input:not(.form-control):focus{outline-offset:-2px}.alertify .alert nav,.alertify .dialog nav{text-align:right}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button),.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button){background:transparent;box-sizing:border-box;color:rgba(0,0,0,.87);position:relative;outline:0;border:0;display:inline-block;-webkit-align-items:center;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;padding:0 6px;margin:6px 8px;line-height:36px;min-height:36px;white-space:nowrap;min-width:88px;text-align:center;text-transform:uppercase;font-size:14px;text-decoration:none;cursor:pointer;border:1px solid transparent;border-radius:2px}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover{background-color:rgba(0,0,0,.05)}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus{border:1px solid rgba(0,0,0,.1)}.alertify .alert nav button.btn,.alertify .dialog nav button.btn{margin:6px 4px}.alertify-logs{position:fixed;z-index:1}.alertify-logs.bottom,.alertify-logs:not(.top){bottom:16px}.alertify-logs.left,.alertify-logs:not(.right){left:16px}.alertify-logs.left>*,.alertify-logs:not(.right)>*{float:left;-webkit-transform:translateZ(0);transform:translateZ(0);height:auto}.alertify-logs.left>.show,.alertify-logs:not(.right)>.show{left:0}.alertify-logs.left>*,.alertify-logs.left>.hide,.alertify-logs:not(.right)>*,.alertify-logs:not(.right)>.hide{left:-110%}.alertify-logs.right{right:16px}.alertify-logs.right>*{float:right;-webkit-transform:translateZ(0);transform:translateZ(0)}.alertify-logs.right>.show{right:0;opacity:1}.alertify-logs.right>*,.alertify-logs.right>.hide{right:-110%;opacity:0}.alertify-logs.top{top:0}.alertify-logs>*{box-sizing:border-box;transition:all .4s cubic-bezier(.25,.8,.25,1);position:relative;clear:both;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000;max-height:0;margin:0;padding:0;overflow:hidden;opacity:0;pointer-events:none}.alertify-logs>.show{margin-top:12px;opacity:1;max-height:1000px;padding:12px;pointer-events:auto}
|
Binary file not shown.
Before Width: | Height: | Size: 1.5 KiB |
424
public/assets/css/normalize.css
vendored
424
public/assets/css/normalize.css
vendored
|
@ -1,424 +0,0 @@
|
|||
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS and IE text size adjust after device orientation change,
|
||||
* without disabling user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
* and Firefox.
|
||||
* Correct `block` display not defined for `main` in IE 11.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; /* 1 */
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||
* Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of focused elements when they are also in an
|
||||
* active/hover state.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9/10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow not hidden in IE 9/10/11.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
color: inherit; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
button {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
box-sizing: content-box; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
padding: 0;
|
||||
}
|
2
public/assets/css/sanitize.min.css
vendored
2
public/assets/css/sanitize.min.css
vendored
|
@ -1,2 +0,0 @@
|
|||
/*! sanitize.css v3.2.0 | CC0 1.0 Public Domain | github.com/10up/sanitize.css */audio:not([controls]){display:none}button{-webkit-appearance:button;overflow:visible}details{display:block}html{-ms-overflow-style:-ms-autohiding-scrollbar;overflow-y:scroll;-webkit-text-size-adjust:100%}input{-webkit-border-radius:0}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button}input[type=number]{width:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}main{display:block}pre{overflow:auto}progress{display:inline-block}small{font-size:75%}summary{display:block}svg:not(:root){overflow:hidden}template{display:none}textarea{overflow:auto}[hidden]{display:none}*,:after,:before{box-sizing:inherit}*{font-size:inherit;line-height:inherit}:after,:before{text-decoration:inherit;vertical-align:inherit}*,:after,:before{border-style:solid;border-width:0}*{background-repeat:no-repeat;margin:0;padding:0}:root{background-color:#fff;box-sizing:border-box;color:#000;cursor:default;font:100%/1.5 sans-serif}a{text-decoration:none}audio,canvas,iframe,img,svg,video{vertical-align:middle}button,input,select,textarea{background-color:transparent;color:inherit;font-family:inherit;font-style:inherit;font-weight:inherit}[type=button],[type=date],[type=datetime-local],[type=datetime],[type=email],[type=month],[type=number],[type=password],[type=reset],[type=search],[type=submit],[type=tel],[type=text],[type=time],[type=url],[type=week],button,select,textarea{min-height:1.5em}code,kbd,pre,samp{font-family:monospace}nav ol,nav ul{list-style:none}select{-moz-appearance:none;-webkit-appearance:none}select::-ms-expand{display:none}select::-ms-value{color:currentColor}table{border-collapse:collapse;border-spacing:0}textarea{resize:vertical}::-moz-selection{background-color:#b3d4fc;color:#fff;text-shadow:none}::selection{background-color:#b3d4fc;color:#fff;text-shadow:none}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}[hidden][aria-hidden=false]{clip:rect(0 0 0 0);display:inherit;position:absolute}[hidden][aria-hidden=false]:focus{clip:auto}[tabindex],a,area,button,input,label,select,textarea{-ms-touch-action:manipulation;touch-action:manipulation}
|
||||
/*# sourceMappingURL=sanitize.min.css.map */
|
10
public/assets/js/libs/Autolinker.min.js
vendored
10
public/assets/js/libs/Autolinker.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
10
public/build/assets/bower/Autolinker.min-2cb3468034.js
Normal file
10
public/build/assets/bower/Autolinker.min-2cb3468034.js
Normal file
File diff suppressed because one or more lines are too long
BIN
public/build/assets/bower/Autolinker.min-2cb3468034.js.br
Normal file
BIN
public/build/assets/bower/Autolinker.min-2cb3468034.js.br
Normal file
Binary file not shown.
BIN
public/build/assets/bower/Autolinker.min-2cb3468034.js.gz
Normal file
BIN
public/build/assets/bower/Autolinker.min-2cb3468034.js.gz
Normal file
Binary file not shown.
1
public/build/assets/bower/alertify-1b3c6aa174.css
vendored
Normal file
1
public/build/assets/bower/alertify-1b3c6aa174.css
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.alertify-logs>*{padding:12px 24px;color:#fff;box-shadow:0 2px 5px 0 rgba(0,0,0,.2);border-radius:1px}.alertify-logs>*,.alertify-logs>.default{background:rgba(0,0,0,.8)}.alertify-logs>.error{background:rgba(244,67,54,.8)}.alertify-logs>.success{background:rgba(76,175,80,.9)}.alertify{position:fixed;background-color:rgba(0,0,0,.3);left:0;right:0;top:0;bottom:0;width:100%;height:100%;z-index:1}.alertify.hide{opacity:0;pointer-events:none}.alertify,.alertify.show{box-sizing:border-box;transition:all .33s cubic-bezier(.25,.8,.25,1)}.alertify,.alertify *{box-sizing:border-box}.alertify .dialog{padding:12px}.alertify .alert,.alertify .dialog{width:100%;margin:0 auto;position:relative;top:50%;transform:translateY(-50%)}.alertify .alert>*,.alertify .dialog>*{width:400px;max-width:95%;margin:0 auto;text-align:center;padding:12px;background:#fff;box-shadow:0 2px 4px -1px rgba(0,0,0,.14),0 4px 5px 0 rgba(0,0,0,.098),0 1px 10px 0 rgba(0,0,0,.084)}.alertify .alert .msg,.alertify .dialog .msg{padding:12px;margin-bottom:12px;margin:0;text-align:left}.alertify .alert input:not(.form-control),.alertify .dialog input:not(.form-control){margin-bottom:15px;width:100%;font-size:100%;padding:12px}.alertify .alert input:not(.form-control):focus,.alertify .dialog input:not(.form-control):focus{outline-offset:-2px}.alertify .alert nav,.alertify .dialog nav{text-align:right}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button),.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button){background:transparent;box-sizing:border-box;color:rgba(0,0,0,.87);position:relative;outline:0;border:0;display:inline-block;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;padding:0 6px;margin:6px 8px;line-height:36px;min-height:36px;white-space:nowrap;min-width:88px;text-align:center;text-transform:uppercase;font-size:14px;text-decoration:none;cursor:pointer;border:1px solid transparent;border-radius:2px}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover{background-color:rgba(0,0,0,.05)}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus{border:1px solid rgba(0,0,0,.1)}.alertify .alert nav button.btn,.alertify .dialog nav button.btn{margin:6px 4px}.alertify-logs{position:fixed;z-index:1}.alertify-logs.bottom,.alertify-logs:not(.top){bottom:16px}.alertify-logs.left,.alertify-logs:not(.right){left:16px}.alertify-logs.left>*,.alertify-logs:not(.right)>*{float:left;transform:translateZ(0);height:auto}.alertify-logs.left>.show,.alertify-logs:not(.right)>.show{left:0}.alertify-logs.left>*,.alertify-logs.left>.hide,.alertify-logs:not(.right)>*,.alertify-logs:not(.right)>.hide{left:-110%}.alertify-logs.right{right:16px}.alertify-logs.right>*{float:right;transform:translateZ(0)}.alertify-logs.right>.show{right:0;opacity:1}.alertify-logs.right>*,.alertify-logs.right>.hide{right:-110%;opacity:0}.alertify-logs.top{top:0}.alertify-logs>*{box-sizing:border-box;transition:all .4s cubic-bezier(.25,.8,.25,1);position:relative;clear:both;backface-visibility:hidden;perspective:1000;max-height:0;margin:0;padding:0;overflow:hidden;opacity:0;pointer-events:none}.alertify-logs>.show{margin-top:12px;opacity:1;max-height:1000px;padding:12px;pointer-events:auto}
|
BIN
public/build/assets/bower/alertify-1b3c6aa174.css.br
Normal file
BIN
public/build/assets/bower/alertify-1b3c6aa174.css.br
Normal file
Binary file not shown.
BIN
public/build/assets/bower/alertify-1b3c6aa174.css.gz
Normal file
BIN
public/build/assets/bower/alertify-1b3c6aa174.css.gz
Normal file
Binary file not shown.
1
public/build/assets/bower/alertify-84061c87f5.js
Normal file
1
public/build/assets/bower/alertify-84061c87f5.js
Normal file
File diff suppressed because one or more lines are too long
BIN
public/build/assets/bower/alertify-84061c87f5.js.br
Normal file
BIN
public/build/assets/bower/alertify-84061c87f5.js.br
Normal file
Binary file not shown.
BIN
public/build/assets/bower/alertify-84061c87f5.js.gz
Normal file
BIN
public/build/assets/bower/alertify-84061c87f5.js.gz
Normal file
Binary file not shown.
|
@ -110,7 +110,7 @@
|
|||
var support = {
|
||||
blob: 'FileReader' in self && 'Blob' in self && (function() {
|
||||
try {
|
||||
new Blob();
|
||||
new Blob()
|
||||
return true
|
||||
} catch(e) {
|
||||
return false
|
||||
|
@ -267,7 +267,7 @@
|
|||
|
||||
function headers(xhr) {
|
||||
var head = new Headers()
|
||||
var pairs = xhr.getAllResponseHeaders().trim().split('\n')
|
||||
var pairs = (xhr.getAllResponseHeaders() || '').trim().split('\n')
|
||||
pairs.forEach(function(header) {
|
||||
var split = header.trim().split(':')
|
||||
var key = split.shift().trim()
|
||||
|
@ -320,9 +320,9 @@
|
|||
return new Response(null, {status: status, headers: {location: url}})
|
||||
}
|
||||
|
||||
self.Headers = Headers;
|
||||
self.Request = Request;
|
||||
self.Response = Response;
|
||||
self.Headers = Headers
|
||||
self.Request = Request
|
||||
self.Response = Response
|
||||
|
||||
self.fetch = function(input, init) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
@ -345,7 +345,7 @@
|
|||
return xhr.getResponseHeader('X-Request-URL')
|
||||
}
|
||||
|
||||
return;
|
||||
return
|
||||
}
|
||||
|
||||
xhr.onload = function() {
|
||||
|
@ -360,7 +360,7 @@
|
|||
headers: headers(xhr),
|
||||
url: responseURL()
|
||||
}
|
||||
var body = 'response' in xhr ? xhr.response : xhr.responseText;
|
||||
var body = 'response' in xhr ? xhr.response : xhr.responseText
|
||||
resolve(new Response(body, options))
|
||||
}
|
||||
|
||||
|
@ -368,6 +368,10 @@
|
|||
reject(new TypeError('Network request failed'))
|
||||
}
|
||||
|
||||
xhr.ontimeout = function() {
|
||||
reject(new TypeError('Network request failed'))
|
||||
}
|
||||
|
||||
xhr.open(request.method, request.url, true)
|
||||
|
||||
if (request.credentials === 'include') {
|
BIN
public/build/assets/bower/fetch-d8a2646ccc.js.br
Normal file
BIN
public/build/assets/bower/fetch-d8a2646ccc.js.br
Normal file
Binary file not shown.
BIN
public/build/assets/bower/fetch-d8a2646ccc.js.gz
Normal file
BIN
public/build/assets/bower/fetch-d8a2646ccc.js.gz
Normal file
Binary file not shown.
BIN
public/build/assets/bower/marked.min-c2a88705e2.js.gz
Normal file
BIN
public/build/assets/bower/marked.min-c2a88705e2.js.gz
Normal file
Binary file not shown.
352
public/build/assets/bower/sanitize-85919f917a.css
vendored
Normal file
352
public/build/assets/bower/sanitize-85919f917a.css
vendored
Normal file
|
@ -0,0 +1,352 @@
|
|||
/*! sanitize.css v3.3.0 | CC0 1.0 Public Domain | github.com/10up/sanitize.css */
|
||||
|
||||
/* Latest tested: Android 6, Chrome 48, Edge 13, Firefox 44, Internet Explorer 11, iOS 9, Opera 35, Safari 9, Windows Phone 8.1 */
|
||||
|
||||
/*
|
||||
* Normalization
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
text-decoration: underline; /* Chrome 48+, Edge 12+, Internet Explorer 11-, Safari 9+ */
|
||||
text-decoration: underline dotted; /* Firefox 40+ */
|
||||
}
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none; /* Chrome 44-, iOS 8+, Safari 9+ */
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder; /* Edge 12+, Safari 6.2+, and Chrome 18+ */
|
||||
}
|
||||
|
||||
button {
|
||||
-webkit-appearance: button; /* iOS 8+ */
|
||||
overflow: visible; /* Internet Explorer 11- */
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
}
|
||||
|
||||
button::-moz-focus-inner, input::-moz-focus-inner {
|
||||
border: 0;/* Firefox 4+ */
|
||||
padding: 0;/* Firefox 4+ */
|
||||
}
|
||||
|
||||
button:-moz-focusring, input:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;/* Firefox 4+ */
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none; /* Firefox 40+, Internet Explorer 11- */
|
||||
}
|
||||
|
||||
details {
|
||||
display: block; /* Edge 12+, Firefox 40+, Internet Explorer 11-, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
html {
|
||||
-ms-overflow-style: -ms-autohiding-scrollbar; /* Edge 12+, Internet Explorer 11- */
|
||||
overflow-y: scroll; /* All browsers without overlaying scrollbars */
|
||||
-webkit-text-size-adjust: 100%; /* iOS 8+, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
hr {
|
||||
overflow: visible; /* Internet Explorer 11-, Edge 12+ */
|
||||
}
|
||||
|
||||
input {
|
||||
-webkit-border-radius: 0 /* iOS 8+ */
|
||||
}
|
||||
|
||||
input[type="button"],
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button;/* iOS 8+ */
|
||||
}
|
||||
|
||||
input[type="number"] {
|
||||
width: auto;/* Firefox 36+ */
|
||||
}
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield;/* Chrome 45+, Safari 9+ */
|
||||
}
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;/* Chrome 45+, Safari 9+ */
|
||||
}
|
||||
|
||||
main {
|
||||
display: block; /* Android 4.3-, Internet Explorer 11-, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
pre {
|
||||
overflow: auto; /* Internet Explorer 11- */
|
||||
}
|
||||
|
||||
progress {
|
||||
display: inline-block; /* Internet Explorer 11-, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
summary {
|
||||
display: block; /* Firefox 40+, Internet Explorer 11-, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden; /* Internet Explorer 11- */
|
||||
}
|
||||
|
||||
template {
|
||||
display: none; /* Android 4.3-, Internet Explorer 11-, iOS 7-, Safari 7-, Windows Phone 8.1+ */
|
||||
}
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* Edge 12+, Internet Explorer 11- */
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none; /* Internet Explorer 10- */
|
||||
}
|
||||
|
||||
/*
|
||||
* Universal inheritance
|
||||
*/
|
||||
|
||||
*,
|
||||
:before,
|
||||
:after {
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
* {
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
:before,
|
||||
:after {
|
||||
text-decoration: inherit;
|
||||
vertical-align: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit;
|
||||
font-style: inherit;
|
||||
font-weight: inherit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Opinionated defaults
|
||||
*/
|
||||
|
||||
/* specify the margin and padding of all elements */
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* specify the border style and width of all elements */
|
||||
|
||||
*,
|
||||
:before,
|
||||
:after {
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
/* remove the tapping delay from clickable elements */
|
||||
|
||||
a,
|
||||
area,
|
||||
button,
|
||||
input,
|
||||
label,
|
||||
select,
|
||||
textarea,
|
||||
[tabindex] {
|
||||
-ms-touch-action: manipulation;
|
||||
touch-action: manipulation;
|
||||
}
|
||||
|
||||
/* specify the standard appearance of selects */
|
||||
|
||||
select {
|
||||
-moz-appearance: none; /* Firefox 40+ */
|
||||
-webkit-appearance: none /* Chrome 45+ */
|
||||
}
|
||||
|
||||
select::-ms-expand {
|
||||
display: none;/* Edge 12+, Internet Explorer 11- */
|
||||
}
|
||||
|
||||
select::-ms-value {
|
||||
color: currentColor;/* Edge 12+, Internet Explorer 11- */
|
||||
}
|
||||
|
||||
/* use current current as the default fill of svg elements */
|
||||
|
||||
svg {
|
||||
fill: currentColor;
|
||||
}
|
||||
|
||||
/* specify the progress cursor of updating elements */
|
||||
|
||||
[aria-busy="true"] {
|
||||
cursor: progress;
|
||||
}
|
||||
|
||||
/* specify the pointer cursor of trigger elements */
|
||||
|
||||
[aria-controls] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* specify the unstyled cursor of disabled, not-editable, or otherwise inoperable elements */
|
||||
|
||||
[aria-disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* specify the style of visually hidden yet accessible elements */
|
||||
|
||||
[hidden][aria-hidden="false"] {
|
||||
clip: rect(0 0 0 0);
|
||||
display: inherit;
|
||||
position: absolute
|
||||
}
|
||||
|
||||
[hidden][aria-hidden="false"]:focus {
|
||||
clip: auto;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Configurable defaults
|
||||
*/
|
||||
|
||||
/* specify the background repeat of all elements */
|
||||
|
||||
* {
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
/* specify the root styles of the document */
|
||||
|
||||
:root {
|
||||
background-color: #ffffff;
|
||||
box-sizing: border-box;
|
||||
color: #000000;
|
||||
cursor: default;
|
||||
font: 100%/1.5 sans-serif;
|
||||
}
|
||||
|
||||
/* specify the text decoration of anchors */
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* specify the alignment of media elements */
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
iframe,
|
||||
img,
|
||||
svg,
|
||||
video {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* specify the coloring of form elements */
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
background-color: transparent;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* specify the minimum height of form elements */
|
||||
|
||||
button,
|
||||
[type="button"],
|
||||
[type="date"],
|
||||
[type="datetime"],
|
||||
[type="datetime-local"],
|
||||
[type="email"],
|
||||
[type="month"],
|
||||
[type="number"],
|
||||
[type="password"],
|
||||
[type="reset"],
|
||||
[type="search"],
|
||||
[type="submit"],
|
||||
[type="tel"],
|
||||
[type="text"],
|
||||
[type="time"],
|
||||
[type="url"],
|
||||
[type="week"],
|
||||
select,
|
||||
textarea {
|
||||
min-height: 1.5em;
|
||||
}
|
||||
|
||||
/* specify the font family of code elements */
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
}
|
||||
|
||||
/* specify the list style of nav lists */
|
||||
|
||||
nav ol,
|
||||
nav ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
/* specify the font size of small elements */
|
||||
|
||||
small {
|
||||
font-size: 75%;
|
||||
}
|
||||
|
||||
/* specify the border styling of tables */
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
/* specify the resizability of textareas */
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
/* specify the background color, font color, and drop shadow of text selections */
|
||||
|
||||
::-moz-selection {
|
||||
background-color: #b3d4fc; /* required when declaring ::selection */
|
||||
color: #ffffff;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background-color: #b3d4fc; /* required when declaring ::selection */
|
||||
color: #ffffff;
|
||||
text-shadow: none;
|
||||
}
|
BIN
public/build/assets/bower/sanitize-85919f917a.css.br
Normal file
BIN
public/build/assets/bower/sanitize-85919f917a.css.br
Normal file
Binary file not shown.
BIN
public/build/assets/bower/sanitize-85919f917a.css.gz
Normal file
BIN
public/build/assets/bower/sanitize-85919f917a.css.gz
Normal file
Binary file not shown.
BIN
public/build/assets/bower/store2.min-c4daa8f871.js.gz
Normal file
BIN
public/build/assets/bower/store2.min-c4daa8f871.js.gz
Normal file
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
.alertify-logs>*{padding:12px 24px;color:#fff;box-shadow:0 2px 5px 0 rgba(0,0,0,.2);border-radius:1px}.alertify-logs>*,.alertify-logs>.default{background:rgba(0,0,0,.8)}.alertify-logs>.error{background:rgba(244,67,54,.8)}.alertify-logs>.success{background:rgba(76,175,80,.9)}.alertify{position:fixed;background-color:rgba(0,0,0,.3);left:0;right:0;top:0;bottom:0;width:100%;height:100%;z-index:2}.alertify.hide{opacity:0;pointer-events:none}.alertify,.alertify.show{box-sizing:border-box;transition:all .33s cubic-bezier(.25,.8,.25,1)}.alertify,.alertify *{box-sizing:border-box}.alertify .dialog{padding:12px}.alertify .alert,.alertify .dialog{width:100%;margin:0 auto;position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.alertify .alert>*,.alertify .dialog>*{width:400px;max-width:95%;margin:0 auto;text-align:center;padding:12px;background:#fff;box-shadow:0 2px 4px -1px rgba(0,0,0,.14),0 4px 5px 0 rgba(0,0,0,.098),0 1px 10px 0 rgba(0,0,0,.084)}.alertify .alert .msg,.alertify .dialog .msg{padding:12px;margin-bottom:12px;margin:0;text-align:left}.alertify .alert input:not(.form-control),.alertify .dialog input:not(.form-control){margin-bottom:15px;width:100%;font-size:100%;padding:12px}.alertify .alert input:not(.form-control):focus,.alertify .dialog input:not(.form-control):focus{outline-offset:-2px}.alertify .alert nav,.alertify .dialog nav{text-align:right}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button),.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button){background:transparent;box-sizing:border-box;color:rgba(0,0,0,.87);position:relative;outline:0;border:0;display:inline-block;-webkit-align-items:center;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;padding:0 6px;margin:6px 8px;line-height:36px;min-height:36px;white-space:nowrap;min-width:88px;text-align:center;text-transform:uppercase;font-size:14px;text-decoration:none;cursor:pointer;border:1px solid transparent;border-radius:2px}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover{background-color:rgba(0,0,0,.05)}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus{border:1px solid rgba(0,0,0,.1)}.alertify .alert nav button.btn,.alertify .dialog nav button.btn{margin:6px 4px}.alertify-logs{position:fixed;z-index:1}.alertify-logs.bottom,.alertify-logs:not(.top){bottom:16px}.alertify-logs.left,.alertify-logs:not(.right){left:16px}.alertify-logs.left>*,.alertify-logs:not(.right)>*{float:left;-webkit-transform:translateZ(0);transform:translateZ(0);height:auto}.alertify-logs.left>.show,.alertify-logs:not(.right)>.show{left:0}.alertify-logs.left>*,.alertify-logs.left>.hide,.alertify-logs:not(.right)>*,.alertify-logs:not(.right)>.hide{left:-110%}.alertify-logs.right{right:16px}.alertify-logs.right>*{float:right;-webkit-transform:translateZ(0);transform:translateZ(0)}.alertify-logs.right>.show{right:0;opacity:1}.alertify-logs.right>*,.alertify-logs.right>.hide{right:-110%;opacity:0}.alertify-logs.top{top:0}.alertify-logs>*{box-sizing:border-box;transition:all .4s cubic-bezier(.25,.8,.25,1);position:relative;clear:both;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000;max-height:0;margin:0;padding:0;overflow:hidden;opacity:0;pointer-events:none}.alertify-logs>.show{margin-top:12px;opacity:1;max-height:1000px;padding:12px;pointer-events:auto}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,2 +0,0 @@
|
|||
/*! sanitize.css v3.2.0 | CC0 1.0 Public Domain | github.com/10up/sanitize.css */audio:not([controls]){display:none}button{-webkit-appearance:button;overflow:visible}details{display:block}html{-ms-overflow-style:-ms-autohiding-scrollbar;overflow-y:scroll;-webkit-text-size-adjust:100%}input{-webkit-border-radius:0}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button}input[type=number]{width:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}main{display:block}pre{overflow:auto}progress{display:inline-block}small{font-size:75%}summary{display:block}svg:not(:root){overflow:hidden}template{display:none}textarea{overflow:auto}[hidden]{display:none}*,:after,:before{box-sizing:inherit}*{font-size:inherit;line-height:inherit}:after,:before{text-decoration:inherit;vertical-align:inherit}*,:after,:before{border-style:solid;border-width:0}*{background-repeat:no-repeat;margin:0;padding:0}:root{background-color:#fff;box-sizing:border-box;color:#000;cursor:default;font:100%/1.5 sans-serif}a{text-decoration:none}audio,canvas,iframe,img,svg,video{vertical-align:middle}button,input,select,textarea{background-color:transparent;color:inherit;font-family:inherit;font-style:inherit;font-weight:inherit}[type=button],[type=date],[type=datetime-local],[type=datetime],[type=email],[type=month],[type=number],[type=password],[type=reset],[type=search],[type=submit],[type=tel],[type=text],[type=time],[type=url],[type=week],button,select,textarea{min-height:1.5em}code,kbd,pre,samp{font-family:monospace}nav ol,nav ul{list-style:none}select{-moz-appearance:none;-webkit-appearance:none}select::-ms-expand{display:none}select::-ms-value{color:currentColor}table{border-collapse:collapse;border-spacing:0}textarea{resize:vertical}::-moz-selection{background-color:#b3d4fc;color:#fff;text-shadow:none}::selection{background-color:#b3d4fc;color:#fff;text-shadow:none}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}[hidden][aria-hidden=false]{clip:rect(0 0 0 0);display:inherit;position:absolute}[hidden][aria-hidden=false]:focus{clip:auto}[tabindex],a,area,button,input,label,select,textarea{-ms-touch-action:manipulation;touch-action:manipulation}
|
||||
/*# sourceMappingURL=sanitize.min.css.map */
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
public/build/assets/prism/prism-5c98941a94.css.gz
Normal file
BIN
public/build/assets/prism/prism-5c98941a94.css.gz
Normal file
Binary file not shown.
BIN
public/build/assets/prism/prism-f6e997bc6d.js.gz
Normal file
BIN
public/build/assets/prism/prism-f6e997bc6d.js.gz
Normal file
Binary file not shown.
|
@ -1,18 +1,18 @@
|
|||
{
|
||||
"assets/css/alertify.css": "assets/css/alertify-d84546f82d.css",
|
||||
"assets/bower/Autolinker.min.js": "assets/bower/Autolinker.min-2cb3468034.js",
|
||||
"assets/bower/alertify.css": "assets/bower/alertify-1b3c6aa174.css",
|
||||
"assets/bower/alertify.js": "assets/bower/alertify-84061c87f5.js",
|
||||
"assets/bower/fetch.js": "assets/bower/fetch-d8a2646ccc.js",
|
||||
"assets/bower/marked.min.js": "assets/bower/marked.min-c2a88705e2.js",
|
||||
"assets/bower/sanitize.css": "assets/bower/sanitize-85919f917a.css",
|
||||
"assets/bower/store2.min.js": "assets/bower/store2.min-c4daa8f871.js",
|
||||
"assets/css/global.css": "assets/css/global-f45e4f1fb0.css",
|
||||
"assets/css/prism.css": "assets/css/prism-5c98941a94.css",
|
||||
"assets/css/projects.css": "assets/css/projects-d945298e4f.css",
|
||||
"assets/css/sanitize.min.css": "assets/css/sanitize.min-535bccd783.css",
|
||||
"assets/js/form-save.js": "assets/js/form-save-4d4f6e1cb8.js",
|
||||
"assets/js/libs/Autolinker.min.js": "assets/js/libs/Autolinker.min-b46556773a.js",
|
||||
"assets/js/libs/alertify.js": "assets/js/libs/alertify-269e23cb46.js",
|
||||
"assets/js/libs/fetch.js": "assets/js/libs/fetch-5e9040330a.js",
|
||||
"assets/js/libs/marked.min.js": "assets/js/libs/marked.min-c2a88705e2.js",
|
||||
"assets/js/libs/prism.js": "assets/js/libs/prism-f6e997bc6d.js",
|
||||
"assets/js/libs/store2.min.js": "assets/js/libs/store2.min-c4daa8f871.js",
|
||||
"assets/js/links.js": "assets/js/links-c394f9c920.js",
|
||||
"assets/js/maps.js": "assets/js/maps-a6a01a253b.js",
|
||||
"assets/js/newnote.js": "assets/js/newnote-36ff29cdef.js",
|
||||
"assets/js/newplace.js": "assets/js/newplace-89a1be080e.js"
|
||||
"assets/js/newplace.js": "assets/js/newplace-89a1be080e.js",
|
||||
"assets/prism/prism.css": "assets/prism/prism-5c98941a94.css",
|
||||
"assets/prism/prism.js": "assets/prism/prism-f6e997bc6d.js"
|
||||
}
|
69
resources/assets/js/form-save.js
Normal file
69
resources/assets/js/form-save.js
Normal file
|
@ -0,0 +1,69 @@
|
|||
/* global alertify, store */
|
||||
var feature = {
|
||||
addEventListener : !!window.addEventListener,
|
||||
querySelectorAll : !!document.querySelectorAll
|
||||
};
|
||||
|
||||
if (feature.addEventListener && feature.querySelectorAll) {
|
||||
var keys = getKeys();
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
if (store.get(keys[i])) {
|
||||
var formId = keys[i].split('~')[1];
|
||||
document.getElementById(formId).value = store.get(keys[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var timerId = window.setInterval(function() {
|
||||
var saved = false;
|
||||
var inputs = document.querySelectorAll('input[type=text], textarea');
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
var key = getFormElement(inputs[i]).id + '~' + inputs[i].id;
|
||||
if (store.get(key) !== inputs[i].value && inputs[i].value !== '') {
|
||||
store.set(key, inputs[i].value);
|
||||
saved = true;
|
||||
}
|
||||
}
|
||||
if (saved === true) {
|
||||
alertify.logPosition('top right');
|
||||
alertify.success('Auto saved text');
|
||||
}
|
||||
}, 5000);
|
||||
var forms = document.querySelectorAll('form');
|
||||
for (var f = 0; f < forms.length; f++) {
|
||||
var form = forms[f];
|
||||
form.addEventListener('submit', function() {
|
||||
window.clearInterval(timerId);
|
||||
var formId = form.id;
|
||||
var storedKeys = store.keys();
|
||||
for (var i = 0; i < storedKeys.length; i++) {
|
||||
if (storedKeys[i].indexOf(formId) > -1) {
|
||||
store.remove(storedKeys[i]);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
function getKeys() {
|
||||
var keys = [];
|
||||
var formFields = document.querySelectorAll('input[type=text], textarea');
|
||||
for (var f = 0; f < formFields.length; f++) {
|
||||
var parent = getFormElement(formFields[f]);
|
||||
if (parent !== false) {
|
||||
var key = parent.id + '~' + formFields[f].id;
|
||||
keys.push(key);
|
||||
}
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
function getFormElement(elem) {
|
||||
if (elem.nodeName.toLowerCase() !== 'body') {
|
||||
var parent = elem.parentNode;
|
||||
if (parent.nodeName.toLowerCase() === 'form') {
|
||||
return parent;
|
||||
} else {
|
||||
return getFormElement(parent);
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
26
resources/assets/js/links.js
Normal file
26
resources/assets/js/links.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* global Autolinker */
|
||||
//the autlinker object
|
||||
var autolinker = new Autolinker();
|
||||
|
||||
//the youtube regex
|
||||
var ytidregex = /watch\?v=([A-Za-z0-9\-_]+)/;
|
||||
|
||||
//grab the notes and loop through them
|
||||
var notes = document.querySelectorAll('.e-content');
|
||||
for (var i = 0; i < notes.length; i++) {
|
||||
//get Youtube ID
|
||||
var ytid = notes[i].textContent.match(ytidregex);
|
||||
if (ytid !== null) {
|
||||
var id = ytid[1];
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.classList.add('youtube');
|
||||
iframe.setAttribute('src', '//www.youtube.com/embed/' + id);
|
||||
iframe.setAttribute('frameborder', 0);
|
||||
iframe.setAttribute('allowfullscreen', 'true');
|
||||
notes[i].appendChild(iframe);
|
||||
}
|
||||
//now linkify everything
|
||||
var orig = notes[i].innerHTML;
|
||||
var linked = autolinker.link(orig);
|
||||
notes[i].innerHTML = linked;
|
||||
}
|
16
resources/assets/js/maps.js
Normal file
16
resources/assets/js/maps.js
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* global L */
|
||||
//This code runs on page load and looks for <div class="map">, then adds map
|
||||
var mapDivs = document.querySelectorAll('.map');
|
||||
for (var i = 0; i < mapDivs.length; i++) {
|
||||
var mapDiv = mapDivs[i];
|
||||
var latitude = mapDiv.dataset.latitude;
|
||||
var longitude = mapDiv.dataset.longitude;
|
||||
L.mapbox.accessToken = 'pk.eyJ1Ijoiam9ubnliYXJuZXMiLCJhIjoiVlpndW1EYyJ9.aP9fxAqLKh7lj0LpFh5k1w';
|
||||
var map = L.mapbox.map(mapDiv, 'jonnybarnes.gnoihnim')
|
||||
.setView([latitude, longitude], 15)
|
||||
.addLayer(L.mapbox.tileLayer('jonnybarnes.gnoihnim', {
|
||||
detectRetina: true
|
||||
}));
|
||||
L.marker([latitude, longitude]).addTo(map);
|
||||
map.scrollWheelZoom.disable();
|
||||
}
|
281
resources/assets/js/newnote.js
Normal file
281
resources/assets/js/newnote.js
Normal file
|
@ -0,0 +1,281 @@
|
|||
/* global L */
|
||||
if ('geolocation' in navigator) {
|
||||
var button = document.querySelector('#locate');
|
||||
if (button.addEventListener) {
|
||||
//if we have javascript, event listeners and geolocation, make the locate
|
||||
//button clickable and add event
|
||||
button.disabled = false;
|
||||
button.addEventListener('click', getLocation);
|
||||
}
|
||||
}
|
||||
|
||||
function getLocation() {
|
||||
navigator.geolocation.getCurrentPosition(function (position) {
|
||||
//the locate button has been clicked so add the places/map
|
||||
addPlaces(position.coords.latitude, position.coords.longitude);
|
||||
});
|
||||
}
|
||||
|
||||
function addPlaces(latitude, longitude) {
|
||||
//get the nearby places
|
||||
fetch('/places/near/' + latitude + '/' + longitude, {
|
||||
credentials: 'same-origin',
|
||||
method: 'get'
|
||||
}).then(function (response) {
|
||||
return response.json();
|
||||
}).then(function (j) {
|
||||
if (j.length > 0) {
|
||||
var i;
|
||||
var places = [];
|
||||
for (i = 0; i < j.length; ++i) {
|
||||
var latlng = parseLocation(j[i].location);
|
||||
var name = j[i].name;
|
||||
var slug = j[i].slug;
|
||||
places.push([name, slug, latlng[0], latlng[1]]);
|
||||
}
|
||||
//add a map with the nearby places
|
||||
addMap(latitude, longitude, places);
|
||||
} else {
|
||||
//add a map with just current location
|
||||
addMap(latitude, longitude);
|
||||
}
|
||||
}).catch(function (err) {
|
||||
console.error(err);
|
||||
});
|
||||
}
|
||||
|
||||
function addMap(latitude, longitude, places) {
|
||||
//make places null if not supplied
|
||||
if (arguments.length == 2) {
|
||||
places = null;
|
||||
}
|
||||
var form = button.parentNode;
|
||||
var div = document.createElement('div');
|
||||
div.setAttribute('id', 'map');
|
||||
//add the map div
|
||||
form.appendChild(div);
|
||||
L.mapbox.accessToken = 'pk.eyJ1Ijoiam9ubnliYXJuZXMiLCJhIjoiVlpndW1EYyJ9.aP9fxAqLKh7lj0LpFh5k1w';
|
||||
var map = L.mapbox.map('map', 'jonnybarnes.gnoihnim')
|
||||
.setView([latitude, longitude], 15)
|
||||
.addLayer(L.mapbox.tileLayer('jonnybarnes.gnoihnim', {
|
||||
detectRetina: true
|
||||
}));
|
||||
//add a marker for the current location
|
||||
var marker = L.marker([latitude, longitude], {
|
||||
draggable: true
|
||||
}).addTo(map);
|
||||
//when the location marker is dragged, if the new place form elements exist
|
||||
//update the lat/lng values
|
||||
marker.on('dragend', function () {
|
||||
var placeFormLatitude = document.querySelector('#place-latitude');
|
||||
if (placeFormLatitude !== null) {
|
||||
placeFormLatitude.value = getLatitudeFromMapboxMarker(marker.getLatLng());
|
||||
}
|
||||
var placeFormLongitude = document.querySelector('#place-longitude');
|
||||
if (placeFormLongitude !== null) {
|
||||
placeFormLongitude.value = getLongitudeFromMapboxMarker(marker.getLatLng());
|
||||
}
|
||||
});
|
||||
//create the <select> element and give it a no location default
|
||||
var selectEl = document.createElement('select');
|
||||
selectEl.setAttribute('name', 'location');
|
||||
var noLocation = document.createElement('option');
|
||||
noLocation.setAttribute('selected', 'selected');
|
||||
noLocation.setAttribute('value', 'no-location');
|
||||
var noLocText = document.createTextNode('Select no location');
|
||||
noLocation.appendChild(noLocText);
|
||||
selectEl.appendChild(noLocation);
|
||||
form.insertBefore(selectEl, div);
|
||||
if (places !== null) {
|
||||
//add the places both to the map and <select>
|
||||
places.forEach(function (item) {
|
||||
var option = document.createElement('option');
|
||||
option.setAttribute('value', item[1]);
|
||||
var text = document.createTextNode(item[0]);
|
||||
option.appendChild(text);
|
||||
option.dataset.latitude = item[2];
|
||||
option.dataset.longitude = item[3];
|
||||
selectEl.appendChild(option);
|
||||
var placeMarker = L.marker([item[2], item[3]], {
|
||||
icon: L.mapbox.marker.icon({
|
||||
'marker-size': 'large',
|
||||
'marker-symbol': 'building',
|
||||
'marker-color': '#fa0'
|
||||
})
|
||||
}).addTo(map);
|
||||
var name = 'Name: ' + item[0];
|
||||
placeMarker.bindPopup(name, {
|
||||
closeButton: true
|
||||
});
|
||||
placeMarker.on('click', function () {
|
||||
map.panTo([item[2], item[3]]);
|
||||
selectPlace(item[1]);
|
||||
});
|
||||
});
|
||||
//add an event listener
|
||||
selectEl.addEventListener('change', function () {
|
||||
if (selectEl.value !== 'no-location') {
|
||||
var placeLat = selectEl[selectEl.selectedIndex].dataset.latitude;
|
||||
var placeLon = selectEl[selectEl.selectedIndex].dataset.longitude;
|
||||
map.panTo([placeLat, placeLon]);
|
||||
}
|
||||
});
|
||||
}
|
||||
//add a button to add a new place
|
||||
var newLocButton = document.createElement('button');
|
||||
newLocButton.setAttribute('type', 'button');
|
||||
newLocButton.setAttribute('id', 'create-new-place');
|
||||
newLocButton.appendChild(document.createTextNode('Create New Place?'));
|
||||
//the event listener
|
||||
newLocButton.addEventListener('click', function() {
|
||||
//add the form elements
|
||||
var nameLabel = document.createElement('label');
|
||||
nameLabel.setAttribute('for', 'place-name');
|
||||
nameLabel.classList.add('place-label');
|
||||
nameLabel.appendChild(document.createTextNode('Place Name:'));
|
||||
var nameEl = document.createElement('input');
|
||||
nameEl.setAttribute('placeholder', 'Name');
|
||||
nameEl.setAttribute('name', 'place-name');
|
||||
nameEl.setAttribute('id', 'place-name');
|
||||
nameEl.setAttribute('type', 'text');
|
||||
var descLabel = document.createElement('label');
|
||||
descLabel.setAttribute('for', 'place-description');
|
||||
descLabel.classList.add('place-label');
|
||||
descLabel.appendChild(document.createTextNode('Place Description:'));
|
||||
var descEl = document.createElement('input');
|
||||
descEl.setAttribute('placeholder', 'Description');
|
||||
descEl.setAttribute('name', 'place-description');
|
||||
descEl.setAttribute('id', 'place-description');
|
||||
descEl.setAttribute('type', 'text');
|
||||
var latLabel = document.createElement('label');
|
||||
latLabel.setAttribute('for', 'place-latitude');
|
||||
latLabel.classList.add('place-label');
|
||||
latLabel.appendChild(document.createTextNode('Place Latitude:'));
|
||||
var latEl = document.createElement('input');
|
||||
latEl.setAttribute('name', 'place-latitude');
|
||||
latEl.setAttribute('id', 'place-latitude');
|
||||
latEl.setAttribute('type', 'text');
|
||||
latEl.value = getLatitudeFromMapboxMarker(marker.getLatLng());
|
||||
var lonLabel = document.createElement('label');
|
||||
lonLabel.setAttribute('for', 'place-longitude');
|
||||
lonLabel.classList.add('place-label');
|
||||
lonLabel.appendChild(document.createTextNode('Place Longitude:'));
|
||||
var lonEl = document.createElement('input');
|
||||
lonEl.setAttribute('name', 'place-longitude');
|
||||
lonEl.setAttribute('id', 'place-longitude');
|
||||
lonEl.setAttribute('type', 'text');
|
||||
lonEl.value = getLongitudeFromMapboxMarker(marker.getLatLng());
|
||||
var placeSubmit = document.createElement('button');
|
||||
placeSubmit.setAttribute('id', 'place-submit');
|
||||
placeSubmit.setAttribute('value', 'Submit New Place');
|
||||
placeSubmit.setAttribute('name', 'place-submit');
|
||||
placeSubmit.setAttribute('type', 'button');
|
||||
placeSubmit.appendChild(document.createTextNode('Submit New Place'));
|
||||
form.appendChild(nameLabel);
|
||||
form.appendChild(nameEl);
|
||||
form.appendChild(descLabel);
|
||||
form.appendChild(descEl);
|
||||
form.appendChild(latLabel);
|
||||
form.appendChild(latEl);
|
||||
form.appendChild(lonLabel);
|
||||
form.appendChild(lonEl);
|
||||
form.appendChild(placeSubmit);
|
||||
//the event listener for the new place form
|
||||
placeSubmit.addEventListener('click', function () {
|
||||
//create the form data to send
|
||||
var formData = new FormData();
|
||||
formData.append('place-name', document.querySelector('#place-name').value);
|
||||
formData.append('place-description', document.querySelector('#place-description').value);
|
||||
formData.append('place-latitude', document.querySelector('#place-latitude').value);
|
||||
formData.append('place-longitude', document.querySelector('#place-longitude').value);
|
||||
//post the new place
|
||||
fetch('/places/new', {
|
||||
//send cookies with the request
|
||||
credentials: 'same-origin',
|
||||
method: 'post',
|
||||
body: formData
|
||||
})
|
||||
.then(function (response) {
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return Promise.resolve(response);
|
||||
} else {
|
||||
return Promise.reject(new Error(response.statusText));
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (placeJson) {
|
||||
//create the slug from the url
|
||||
var urlParts = placeJson.split('/');
|
||||
var slug = urlParts.pop();
|
||||
//remove un-needed form elements
|
||||
form.removeChild(document.querySelector('#place-name'));
|
||||
form.removeChild(document.querySelector('#place-description'));
|
||||
form.removeChild(document.querySelector('#place-latitude'));
|
||||
form.removeChild(document.querySelector('#place-longitude'));
|
||||
var labels = document.querySelectorAll('.place-label');
|
||||
for (var i = 0; i < labels.length; ++i) {
|
||||
form.removeChild(labels[i]);
|
||||
}
|
||||
form.removeChild(document.querySelector('#place-submit'));
|
||||
form.removeChild(document.querySelector('#create-new-place'));
|
||||
//remove location marker
|
||||
map.removeLayer(marker);
|
||||
//add place marker
|
||||
var newOption = document.createElement('option');
|
||||
newOption.setAttribute('value', slug);
|
||||
newOption.appendChild(document.createTextNode(placeJson['name']));
|
||||
newOption.dataset.latitude = placeJson['latitude'];
|
||||
newOption.dataset.longitude = placeJson['longitude'];
|
||||
selectEl.appendChild(newOption);
|
||||
var newPlaceMarker = L.marker([placeJson['latitude'], placeJson['longitude']], {
|
||||
icon: L.mapbox.marker.icon({
|
||||
'marker-size': 'large',
|
||||
'marker-symbol': 'building',
|
||||
'marker-color': '#fa0'
|
||||
})
|
||||
}).addTo(map);
|
||||
var newName = 'Name: ' + placeJson['name'];
|
||||
newPlaceMarker.bindPopup(newName, {
|
||||
closeButton: true
|
||||
});
|
||||
newPlaceMarker.on('click', function () {
|
||||
map.panTo([placeJson['latitude'], placeJson['longitude']]);
|
||||
selectPlace(slug);
|
||||
});
|
||||
//make selected
|
||||
selectPlace(slug);
|
||||
}).catch(function (placeError) {
|
||||
console.error(placeError);
|
||||
});
|
||||
});
|
||||
});
|
||||
form.insertBefore(newLocButton, div);
|
||||
}
|
||||
|
||||
function parseLocation(point) {
|
||||
var re = /\((.*)\)/;
|
||||
var resultArray = re.exec(point);
|
||||
var location = resultArray[1].split(' ');
|
||||
|
||||
return [location[1], location[0]];
|
||||
}
|
||||
|
||||
function selectPlace(slug) {
|
||||
document.querySelector('select [value=' + slug + ']').selected = true;
|
||||
}
|
||||
|
||||
function getLatitudeFromMapboxMarker(latlng) {
|
||||
var resultArray = /\((.*)\)/.exec(latlng);
|
||||
var location = resultArray[1].split(' ');
|
||||
|
||||
return location[0].replace(',', '');
|
||||
}
|
||||
|
||||
function getLongitudeFromMapboxMarker(latlng) {
|
||||
var resultArray = /\((.*)\)/.exec(latlng);
|
||||
var location = resultArray[1].split(' ');
|
||||
|
||||
return location[1];
|
||||
}
|
44
resources/assets/js/newplace.js
Normal file
44
resources/assets/js/newplace.js
Normal file
|
@ -0,0 +1,44 @@
|
|||
/* global L */
|
||||
var button = document.querySelector('#locate');
|
||||
|
||||
if (button.addEventListener) {
|
||||
button.addEventListener('click', getLocation);
|
||||
} else {
|
||||
button.attachEvent('onclick', getLocation);
|
||||
}
|
||||
|
||||
function getLocation() {
|
||||
if ('geolocation' in navigator) {
|
||||
navigator.geolocation.getCurrentPosition(function(position) {
|
||||
updateForm(position.coords.latitude, position.coords.longitude);
|
||||
addMap(position.coords.latitude, position.coords.longitude);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function updateForm(latitude, longitude) {
|
||||
var inputLatitude = document.querySelector('#latitude');
|
||||
var inputLongitude = document.querySelector('#longitude');
|
||||
inputLatitude.value = latitude;
|
||||
inputLongitude.value = longitude;
|
||||
}
|
||||
|
||||
function addMap(latitude, longitude) {
|
||||
var form = document.querySelector('form');
|
||||
var div = document.createElement('div');
|
||||
div.setAttribute('id', 'map');
|
||||
form.appendChild(div);
|
||||
L.mapbox.accessToken = 'pk.eyJ1Ijoiam9ubnliYXJuZXMiLCJhIjoiVlpndW1EYyJ9.aP9fxAqLKh7lj0LpFh5k1w';
|
||||
var map = L.mapbox.map('map', 'jonnybarnes.gnoihnim')
|
||||
.setView([latitude, longitude], 15)
|
||||
.addLayer(L.mapbox.tileLayer('jonnybarnes.gnoihnim', {
|
||||
detectRetina: true
|
||||
}));
|
||||
var marker = L.marker([latitude, longitude], {
|
||||
draggable: true
|
||||
}).addTo(map);
|
||||
marker.on('dragend', function () {
|
||||
var markerLocation = marker.getLatLng();
|
||||
updateForm(markerLocation.lat, markerLocation.lng);
|
||||
});
|
||||
}
|
Loading…
Add table
Reference in a new issue