Template
initial commit. basic structure. untested.
This commit is contained in:
commit
d6e9a110b4
23 files changed
+2222
No files matched your search
@@ -0,0 +1,5 @@
|
|||||||
|
.pio
|
||||||
|
.vscode/.browse.c_cpp.db*
|
||||||
|
.vscode/c_cpp_properties.json
|
||||||
|
.vscode/launch.json
|
||||||
|
.vscode/ipch
|
||||||
Vendored
+10
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||||
|
// for the documentation about the extensions.json format
|
||||||
|
"recommendations": [
|
||||||
|
"platformio.platformio-ide"
|
||||||
|
],
|
||||||
|
"unwantedRecommendations": [
|
||||||
|
"ms-vscode.cpptools-extension-pack"
|
||||||
|
]
|
||||||
|
}
|
||||||
Vendored
+13
@@ -0,0 +1,13 @@
|
|||||||
|
/*!
|
||||||
|
* Materialize v1.0.0 (http://materializecss.com)
|
||||||
|
* Copyright 2014-2017 Materialize
|
||||||
|
* MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
|
||||||
|
*/
|
||||||
|
.materialize-red{background-color:#e51c23 !important}.materialize-red-text{color:#e51c23 !important}.materialize-red.lighten-5{background-color:#fdeaeb !important}.materialize-red-text.text-lighten-5{color:#fdeaeb !important}.materialize-red.lighten-4{background-color:#f8c1c3 !important}.materialize-red-text.text-lighten-4{color:#f8c1c3 !important}.materialize-red.lighten-3{background-color:#f3989b !important}.materialize-red-text.text-lighten-3{color:#f3989b !important}.materialize-red.lighten-2{background-color:#ee6e73 !important}.materialize-red-text.text-lighten-2{color:#ee6e73 !important}.materialize-red.lighten-1{background-color:#ea454b !important}.materialize-red-text.text-lighten-1{color:#ea454b !important}.materialize-red.darken-1{background-color:#d0181e !important}.materialize-red-text.text-darken-1{color:#d0181e !important}.materialize-red.darken-2{background-color:#b9151b !important}.materialize-red-text.text-darken-2{color:#b9151b !important}.materialize-red.darken-3{background-color:#a21318 !important}.materialize-red-text.text-darken-3{color:#a21318 !important}.materialize-red.darken-4{background-color:#8b1014 !important}.materialize-red-text.text-darken-4{color:#8b1014 !important}.red{background-color:#F44336 !important}.red-text{color:#F44336 !important}.red.lighten-5{background-color:#FFEBEE !important}.red-text.text-lighten-5{color:#FFEBEE !important}.red.lighten-4{background-color:#FFCDD2 !important}.red-text.text-lighten-4{color:#FFCDD2 !important}.red.lighten-3{background-color:#EF9A9A !important}.red-text.text-lighten-3{color:#EF9A9A !important}.red.lighten-2{background-color:#E57373 !important}.red-text.text-lighten-2{color:#E57373 !important}.red.lighten-1{background-color:#EF5350 !important}.red-text.text-lighten-1{color:#EF5350 !important}.red.darken-1{background-color:#E53935 !important}.red-text.text-darken-1{color:#E53935 !important}.red.darken-2{background-color:#D32F2F !important}.red-text.text-darken-2{color:#D32F2F !important}.red.darken-3{background-color:#C62828 !important}.red-text.text-darken-3{color:#C62828 !important}.red.darken-4{background-color:#B71C1C !important}.red-text.text-darken-4{color:#B71C1C !important}.red.accent-1{background-color:#FF8A80 !important}.red-text.text-accent-1{color:#FF8A80 !important}.red.accent-2{background-color:#FF5252 !important}.red-text.text-accent-2{color:#FF5252 !important}.red.accent-3{background-color:#FF1744 !important}.red-text.text-accent-3{color:#FF1744 !important}.red.accent-4{background-color:#D50000 !important}.red-text.text-accent-4{color:#D50000 !important}.pink{background-color:#e91e63 !important}.pink-text{color:#e91e63 !important}.pink.lighten-5{background-color:#fce4ec !important}.pink-text.text-lighten-5{color:#fce4ec !important}.pink.lighten-4{background-color:#f8bbd0 !important}.pink-text.text-lighten-4{color:#f8bbd0 !important}.pink.lighten-3{background-color:#f48fb1 !important}.pink-text.text-lighten-3{color:#f48fb1 !important}.pink.lighten-2{background-color:#f06292 !important}.pink-text.text-lighten-2{color:#f06292 !important}.pink.lighten-1{background-color:#ec407a !important}.pink-text.text-lighten-1{color:#ec407a !important}.pink.darken-1{background-color:#d81b60 !important}.pink-text.text-darken-1{color:#d81b60 !important}.pink.darken-2{background-color:#c2185b !important}.pink-text.text-darken-2{color:#c2185b !important}.pink.darken-3{background-color:#ad1457 !important}.pink-text.text-darken-3{color:#ad1457 !important}.pink.darken-4{background-color:#880e4f !important}.pink-text.text-darken-4{color:#880e4f !important}.pink.accent-1{background-color:#ff80ab !important}.pink-text.text-accent-1{color:#ff80ab !important}.pink.accent-2{background-color:#ff4081 !important}.pink-text.text-accent-2{color:#ff4081 !important}.pink.accent-3{background-color:#f50057 !important}.pink-text.text-accent-3{color:#f50057 !important}.pink.accent-4{background-color:#c51162 !important}.pink-text.text-accent-4{color:#c51162 !important}.purple{background-color:#9c27b0 !important}.purple-text{color:#9c27b0 !important}.purple.lighten-5{background-color:#f3e5f5 !important}.purple-text.text-lighten-5{color:#f3e5f5 !important}.purple.lighten-4{background-color:#e1bee7 !important}.purple-text.text-lighten-4{color:#e1bee7 !important}.purple.lighten-3{background-color:#ce93d8 !important}.purple-text.text-lighten-3{color:#ce93d8 !important}.purple.lighten-2{background-color:#ba68c8 !important}.purple-text.text-lighten-2{color:#ba68c8 !important}.purple.lighten-1{background-color:#ab47bc !important}.purple-text.text-lighten-1{color:#ab47bc !important}.purple.darken-1{background-color:#8e24aa !important}.purple-text.text-darken-1{color:#8e24aa !important}.purple.darken-2{background-color:#7b1fa2 !important}.purple-text.text-darken-2{color:#7b1fa2 !important}.purple.darken-3{background-color:#6a1b9a !important}.purple-text.text-darken-3{color:#6a1b9a !important}.purple.darken-4{background-color:#4a148c !important}.purple-text.text-darkeLine truncated
|
||||||
|
* Waves v0.6.0
|
||||||
|
* http://fian.my.id/Waves
|
||||||
|
*
|
||||||
|
* Copyright 2014 Alfiana E. Sibuea and other contributors
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/fians/Waves/blob/master/LICENSE
|
||||||
|
*/.waves-effect{position:relative;cursor:pointer;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle;z-index:1;-webkit-transition:.3s ease-out;transition:.3s ease-out}.waves-effect .waves-ripple{position:absolute;border-radius:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;opacity:0;background:rgba(0,0,0,0.2);-webkit-transition:all 0.7s ease-out;transition:all 0.7s ease-out;-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, -webkit-transform;transition-property:transform, opacity;transition-property:transform, opacity, -webkit-transform;-webkit-transform:scale(0);transform:scale(0);pointer-events:none}.waves-effect.waves-light .waves-ripple{background-color:rgba(255,255,255,0.45)}.waves-effect.waves-red .waves-ripple{background-color:rgba(244,67,54,0.7)}.waves-effect.waves-yellow .waves-ripple{background-color:rgba(255,235,59,0.7)}.waves-effect.waves-orange .waves-ripple{background-color:rgba(255,152,0,0.7)}.waves-effect.waves-purple .waves-ripple{background-color:rgba(156,39,176,0.7)}.waves-effect.waves-green .waves-ripple{background-color:rgba(76,175,80,0.7)}.waves-effect.waves-teal .waves-ripple{background-color:rgba(0,150,136,0.7)}.waves-effect input[type="button"],.waves-effect input[type="reset"],.waves-effect input[type="submit"]{border:0;font-style:normal;font-size:inherit;text-transform:inherit;background:none}.waves-effect img{position:relative;z-index:-1}.waves-notransition{-webkit-transition:none !important;transition:none !important}.waves-circle{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, white 100%, black 100%)}.waves-input-wrapper{border-radius:0.2em;vertical-align:bottom}.waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.waves-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%;-webkit-mask-image:none}.waves-block{display:block}.waves-effect .waves-ripple{z-index:-1}.modal{display:none;position:fixed;left:0;right:0;background-color:#fafafa;padding:0;max-height:70%;width:55%;margin:auto;overflow-y:auto;border-radius:2px;will-change:top, opacity}.modal:focus{outline:none}@media only screen and (max-width: 992px){.modal{width:80%}}.modal h1,.modal h2,.modal h3,.modal h4{margin-top:0}.modal .modal-content{padding:24px}.modal .modal-close{cursor:pointer}.modal .modal-footer{border-radius:0 0 2px 2px;background-color:#fafafa;padding:4px 6px;height:56px;width:100%;text-align:right}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-small,.modal .modal-footer .btn-flat{margin:6px 0}.modal-overlay{position:fixed;z-index:999;top:-25%;left:0;bottom:0;right:0;height:125%;width:100%;background:#000;display:none;will-change:opacity}.modal.modal-fixed-footer{padding:0;height:70%}.modal.modal-fixed-footer .modal-content{position:absolute;height:calc(100% - 56px);max-height:100%;width:100%;overflow-y:auto}.modal.modal-fixed-footer .modal-footer{border-top:1px solid rgba(0,0,0,0.1);position:absolute;bottom:0}.modal.bottom-sheet{top:auto;bottom:-100%;margin:0;width:100%;max-height:45%;border-radius:0;will-change:bottom, opacity}.collapsible{border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;margin:.5rem 0 1rem 0}.collapsible-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer;-webkit-tap-highlight-color:transparent;line-height:1.5;padding:1rem;background-color:#fff;border-bottom:1px solid #ddd}.collapsible-header:focus{outline:0}.collapsible-header i{width:2rem;font-size:1.6rem;display:inline-block;text-align:center;margin-right:1rem}.keyboard-focused .collapsible-header:focus{background-color:#eee}.collapsible-body{display:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;box-sizing:border-box;padding:2rem}.sidenav .collapsible,.sidenav.fixed .collapsible{border:none;-webkit-box-shadow:none;box-shadow:none}.sidenav .collapsible li,.sidenav.fixed .collapsible li{padding:0}.sidenav .collapsible-header,.sidenav.fixed .collapsible-header{background-color:transparent;border:none;line-height:inherit;height:inherit;padding:0 16px}.sidenav .collapsible-header:hover,.sidenav.fixed .collapsible-header:hover{background-color:rgba(0,0,0,0.05)}.sidenav .collapsible-header i,.sidenav.fixed .collapsible-header i{line-height:inherit}.sidenav .collapsible-body,.sidenav.fixed .collapsible-body{border:0;background-color:#fff}.sidenav .collapsible-body li a,.sidenav.fixed .collapsible-body li a{padding:0 23.5px 0 31px}.collapsible.popout{border:none;-webkit-box-shadow:none;box-shadow:none}.collapsible.popout>li{-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);margin:0 24px;-webkit-transition:margin 0.35s cubLine truncated
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#header {
|
||||||
|
padding-top:20px;
|
||||||
|
}
|
||||||
|
.logo img {
|
||||||
|
width:200px;
|
||||||
|
}
|
||||||
|
input[type=number] {
|
||||||
|
width:200px;
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.9 KiB |
+629
@@ -0,0 +1,629 @@
|
|||||||
|
<!--This is the plain html source of the hex encoded Editor-Page embedded in SPIFFSEditor.cpp -->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>ESP Editor...</title>
|
||||||
|
<style type="text/css" media="screen">
|
||||||
|
.cm {
|
||||||
|
z-index: 300;
|
||||||
|
position: absolute;
|
||||||
|
left: 5px;
|
||||||
|
border: 1px solid #444;
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
display: none;
|
||||||
|
box-shadow: 0 0 10px rgba( 0, 0, 0, .4 );
|
||||||
|
font-size: 12px;
|
||||||
|
font-family: sans-serif;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
.cm ul {
|
||||||
|
list-style: none;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.cm li {
|
||||||
|
position: relative;
|
||||||
|
min-width: 60px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.cm span {
|
||||||
|
color: #444;
|
||||||
|
display: inline-block;
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
|
.cm li:hover { background: #444; }
|
||||||
|
.cm li:hover span { color: #EEE; }
|
||||||
|
.tvu ul, .tvu li {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
.tvu input {
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.tvu {
|
||||||
|
font: normal 12px Verdana, Arial, Sans-serif;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
color: #444;
|
||||||
|
line-height: 16px;
|
||||||
|
}
|
||||||
|
.tvu span {
|
||||||
|
margin-bottom:5px;
|
||||||
|
padding: 0 0 0 18px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
height: 16px;
|
||||||
|
vertical-align: middle;
|
||||||
|
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADoSURBVBgZBcExblNBGAbA2ceegTRBuIKOgiihSZNTcC5LUHAihNJR0kGKCDcYJY6D3/77MdOinTvzAgCw8ysThIvn/VojIyMjIyPP+bS1sUQIV2s95pBDDvmbP/mdkft83tpYguZq5Jh/OeaYh+yzy8hTHvNlaxNNczm+la9OTlar1UdA/+C2A4trRCnD3jS8BB1obq2Gk6GU6QbQAS4BUaYSQAf4bhhKKTFdAzrAOwAxEUAH+KEM01SY3gM6wBsEAQB0gJ+maZoC3gI6iPYaAIBJsiRmHU0AALOeFC3aK2cWAACUXe7+AwO0lc9eTHYTAAAAAElFTkSuQmCC') no-repeat;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
.tvu span:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
@media screen and (-webkit-min-device-pixel-ratio:0){
|
||||||
|
.tvu{
|
||||||
|
-webkit-animation: webkit-adjacent-element-selector-bugfix infinite 1s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes webkit-adjacent-element-selector-bugfix {
|
||||||
|
from {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#uploader {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
height:28px;
|
||||||
|
line-height: 24px;
|
||||||
|
padding-left: 10px;
|
||||||
|
background-color: #444;
|
||||||
|
color:#EEE;
|
||||||
|
}
|
||||||
|
#tree {
|
||||||
|
position: absolute;
|
||||||
|
top: 28px;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width:160px;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
#editor, #preview {
|
||||||
|
position: absolute;
|
||||||
|
top: 28px;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 160px;
|
||||||
|
border-left:1px solid #EEE;
|
||||||
|
}
|
||||||
|
#preview {
|
||||||
|
background-color: #EEE;
|
||||||
|
padding:5px;
|
||||||
|
}
|
||||||
|
#loader {
|
||||||
|
position: absolute;
|
||||||
|
top: 36%;
|
||||||
|
right: 40%;
|
||||||
|
}
|
||||||
|
.loader {
|
||||||
|
z-index: 10000;
|
||||||
|
border: 8px solid #b5b5b5; /* Grey */
|
||||||
|
border-top: 8px solid #3498db; /* Blue */
|
||||||
|
border-bottom: 8px solid #3498db; /* Blue */
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 240px;
|
||||||
|
height: 240px;
|
||||||
|
animation: spin 2s linear infinite;
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes spin {
|
||||||
|
0% { transform: rotate(0deg); }
|
||||||
|
100% { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
if (typeof XMLHttpRequest === "undefined") {
|
||||||
|
XMLHttpRequest = function () {
|
||||||
|
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e) {}
|
||||||
|
try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e) {}
|
||||||
|
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
|
||||||
|
throw new Error("This browser does not support XMLHttpRequest.");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function ge(a){
|
||||||
|
return document.getElementById(a);
|
||||||
|
}
|
||||||
|
function ce(a){
|
||||||
|
return document.createElement(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortByKey(array, key) {
|
||||||
|
return array.sort(function(a, b) {
|
||||||
|
var x = a[key]; var y = b[key];
|
||||||
|
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var QueuedRequester = function () {
|
||||||
|
this.queue = [];
|
||||||
|
this.running = false;
|
||||||
|
this.xmlhttp = null;
|
||||||
|
}
|
||||||
|
QueuedRequester.prototype = {
|
||||||
|
_request: function(req){
|
||||||
|
this.running = true;
|
||||||
|
if(!req instanceof Object) return;
|
||||||
|
var that = this;
|
||||||
|
|
||||||
|
function ajaxCb(x,d){ return function(){
|
||||||
|
if (x.readyState == 4){
|
||||||
|
ge("loader").style.display = "none";
|
||||||
|
d.callback(x.status, x.responseText);
|
||||||
|
if(that.queue.length === 0) that.running = false;
|
||||||
|
if(that.running) that._request(that.queue.shift());
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
|
||||||
|
ge("loader").style.display = "block";
|
||||||
|
|
||||||
|
var p = "";
|
||||||
|
if(req.params instanceof FormData){
|
||||||
|
p = req.params;
|
||||||
|
} else if(req.params instanceof Object){
|
||||||
|
for (var key in req.params) {
|
||||||
|
if(p === "")
|
||||||
|
p += (req.method === "GET")?"?":"";
|
||||||
|
else
|
||||||
|
p += "&";
|
||||||
|
p += encodeURIComponent(key)+"="+encodeURIComponent(req.params[key]);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
this.xmlhttp = new XMLHttpRequest();
|
||||||
|
this.xmlhttp.onreadystatechange = ajaxCb(this.xmlhttp, req);
|
||||||
|
if(req.method === "GET"){
|
||||||
|
this.xmlhttp.open(req.method, req.url+p, true);
|
||||||
|
this.xmlhttp.send();
|
||||||
|
} else {
|
||||||
|
this.xmlhttp.open(req.method, req.url, true);
|
||||||
|
if(p instanceof String)
|
||||||
|
this.xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
||||||
|
this.xmlhttp.send(p);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
stop: function(){
|
||||||
|
if(this.running) this.running = false;
|
||||||
|
if(this.xmlhttp && this.xmlhttp.readyState < 4){
|
||||||
|
this.xmlhttp.abort();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
add: function(method, url, params, callback){
|
||||||
|
this.queue.push({url:url,method:method,params:params,callback:callback});
|
||||||
|
if(!this.running){
|
||||||
|
this._request(this.queue.shift());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var requests = new QueuedRequester();
|
||||||
|
|
||||||
|
function createFileUploader(element, tree, editor){
|
||||||
|
var xmlHttp;
|
||||||
|
|
||||||
|
var refresh = ce("button");
|
||||||
|
refresh.innerHTML = 'Refresh List';
|
||||||
|
ge(element).appendChild(refresh);
|
||||||
|
|
||||||
|
var input = ce("input");
|
||||||
|
input.type = "file";
|
||||||
|
input.multiple = false;
|
||||||
|
input.name = "data";
|
||||||
|
input.id="upload-select";
|
||||||
|
ge(element).appendChild(input);
|
||||||
|
|
||||||
|
var path = ce("input");
|
||||||
|
path.id = "upload-path";
|
||||||
|
path.type = "text";
|
||||||
|
path.name = "path";
|
||||||
|
path.defaultValue = "/";
|
||||||
|
ge(element).appendChild(path);
|
||||||
|
|
||||||
|
var button = ce("button");
|
||||||
|
button.innerHTML = 'Upload';
|
||||||
|
ge(element).appendChild(button);
|
||||||
|
|
||||||
|
var mkfile = ce("button");
|
||||||
|
mkfile.innerHTML = 'Create';
|
||||||
|
ge(element).appendChild(mkfile);
|
||||||
|
|
||||||
|
var filename = ce("input");
|
||||||
|
filename.id = "editor-filename";
|
||||||
|
filename.type = "text";
|
||||||
|
filename.disabled= true;
|
||||||
|
filename.size = 20;
|
||||||
|
ge(element).appendChild(filename);
|
||||||
|
|
||||||
|
var savefile = ce("button");
|
||||||
|
savefile.innerHTML = ' Save ' ;
|
||||||
|
ge(element).appendChild(savefile);
|
||||||
|
|
||||||
|
function httpPostProcessRequest(status, responseText){
|
||||||
|
if(status != 200)
|
||||||
|
alert("ERROR["+status+"]: "+responseText);
|
||||||
|
else
|
||||||
|
tree.refreshPath(path.value);
|
||||||
|
}
|
||||||
|
function createPath(p){
|
||||||
|
var formData = new FormData();
|
||||||
|
formData.append("path", p);
|
||||||
|
requests.add("PUT", "/edit", formData, httpPostProcessRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
mkfile.onclick = function(e){
|
||||||
|
createPath(path.value);
|
||||||
|
editor.loadUrl(path.value);
|
||||||
|
path.value="/";
|
||||||
|
};
|
||||||
|
|
||||||
|
savefile.onclick = function(e){
|
||||||
|
editor.execCommand('saveCommand');
|
||||||
|
};
|
||||||
|
|
||||||
|
refresh.onclick = function(e){
|
||||||
|
tree.refreshPath(path.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
button.onclick = function(e){
|
||||||
|
if(input.files.length === 0){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var formData = new FormData();
|
||||||
|
formData.append("data", input.files[0], path.value);
|
||||||
|
requests.add("POST", "/edit", formData, httpPostProcessRequest);
|
||||||
|
var uploadPath= ge("upload-path");
|
||||||
|
uploadPath.value="/";
|
||||||
|
var uploadSelect= ge("upload-select");
|
||||||
|
uploadSelect.value="";
|
||||||
|
};
|
||||||
|
input.onchange = function(e){
|
||||||
|
if(input.files.length === 0) return;
|
||||||
|
var filename = input.files[0].name;
|
||||||
|
var ext = /(?:\.([^.]+))?$/.exec(filename)[1];
|
||||||
|
var name = /(.*)\.[^.]+$/.exec(filename)[1];
|
||||||
|
if(typeof name !== undefined){
|
||||||
|
filename = name;
|
||||||
|
}
|
||||||
|
path.value = "/"+filename+"."+ext;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function createTree(element, editor){
|
||||||
|
var preview = ge("preview");
|
||||||
|
var treeRoot = ce("div");
|
||||||
|
treeRoot.className = "tvu";
|
||||||
|
ge(element).appendChild(treeRoot);
|
||||||
|
|
||||||
|
function loadDownload(path){
|
||||||
|
ge('download-frame').src = "/edit?download="+path;
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadPreview(path){
|
||||||
|
var edfname = ge("editor-filename");
|
||||||
|
edfname.value=path;
|
||||||
|
ge("editor").style.display = "none";
|
||||||
|
preview.style.display = "block";
|
||||||
|
preview.innerHTML = '<img src="/edit?edit='+path+'&_cb='+Date.now()+'" style="max-width:100%; max-height:100%; margin:auto; display:block;" />';
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillFileMenu(el, path){
|
||||||
|
var list = ce("ul");
|
||||||
|
el.appendChild(list);
|
||||||
|
var action = ce("li");
|
||||||
|
list.appendChild(action);
|
||||||
|
if(isImageFile(path)){
|
||||||
|
action.innerHTML = "<span>Preview</span>";
|
||||||
|
action.onclick = function(e){
|
||||||
|
loadPreview(path);
|
||||||
|
if(document.body.getElementsByClassName('cm').length > 0) document.body.removeChild(el);
|
||||||
|
};
|
||||||
|
} else if(isTextFile(path)){
|
||||||
|
action.innerHTML = "<span>Edit</span>";
|
||||||
|
action.onclick = function(e){
|
||||||
|
editor.loadUrl(path);
|
||||||
|
if(document.body.getElementsByClassName('cm').length > 0) document.body.removeChild(el);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var download = ce("li");
|
||||||
|
list.appendChild(download);
|
||||||
|
download.innerHTML = "<span>Download</span>";
|
||||||
|
download.onclick = function(e){
|
||||||
|
loadDownload(path);
|
||||||
|
if(document.body.getElementsByClassName('cm').length > 0) document.body.removeChild(el);
|
||||||
|
};
|
||||||
|
var delFile = ce("li");
|
||||||
|
list.appendChild(delFile);
|
||||||
|
delFile.innerHTML = "<span>Delete</span>";
|
||||||
|
delFile.onclick = function(e){
|
||||||
|
httpDelete(path);
|
||||||
|
if(document.body.getElementsByClassName('cm').length > 0) document.body.removeChild(el);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function showContextMenu(event, path, isfile){
|
||||||
|
var divContext = ce("div");
|
||||||
|
var scrollTop = document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop;
|
||||||
|
var scrollLeft = document.body.scrollLeft ? document.body.scrollLeft : document.documentElement.scrollLeft;
|
||||||
|
var left = event.clientX + scrollLeft;
|
||||||
|
var top = event.clientY + scrollTop;
|
||||||
|
divContext.className = 'cm';
|
||||||
|
divContext.style.display = 'block';
|
||||||
|
divContext.style.left = left + 'px';
|
||||||
|
divContext.style.top = top + 'px';
|
||||||
|
fillFileMenu(divContext, path);
|
||||||
|
document.body.appendChild(divContext);
|
||||||
|
var width = divContext.offsetWidth;
|
||||||
|
var height = divContext.offsetHeight;
|
||||||
|
divContext.onmouseout = function(e){
|
||||||
|
if(e.clientX < left || e.clientX > (left + width) || e.clientY < top || e.clientY > (top + height)){
|
||||||
|
if(document.body.getElementsByClassName('cm').length > 0) document.body.removeChild(divContext);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function createTreeLeaf(path, name, size){
|
||||||
|
var leaf = ce("li");
|
||||||
|
leaf.id = name;
|
||||||
|
var label = ce("span");
|
||||||
|
label.innerHTML = name;
|
||||||
|
leaf.appendChild(label);
|
||||||
|
leaf.onclick = function(e){
|
||||||
|
if(isTextFile(leaf.id.toLowerCase())){
|
||||||
|
editor.loadUrl(leaf.id);
|
||||||
|
} else if(isImageFile(leaf.id.toLowerCase())){
|
||||||
|
loadPreview(leaf.id);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
leaf.oncontextmenu = function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
showContextMenu(e, leaf.id, true);
|
||||||
|
};
|
||||||
|
return leaf;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addList(parent, path, items){
|
||||||
|
sortByKey(items, 'name');
|
||||||
|
var list = ce("ul");
|
||||||
|
parent.appendChild(list);
|
||||||
|
var ll = items.length;
|
||||||
|
for(var i = 0; i < ll; i++){
|
||||||
|
if(items[i].type === "file")
|
||||||
|
list.appendChild(createTreeLeaf(path, items[i].name, items[i].size));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function isTextFile(path){
|
||||||
|
var ext = /(?:\.([^.]+))?$/.exec(path)[1];
|
||||||
|
if(typeof ext !== undefined){
|
||||||
|
switch(ext){
|
||||||
|
case "txt":
|
||||||
|
case "htm":
|
||||||
|
case "html":
|
||||||
|
case "js":
|
||||||
|
case "css":
|
||||||
|
case "xml":
|
||||||
|
case "json":
|
||||||
|
case "conf":
|
||||||
|
case "ini":
|
||||||
|
case "h":
|
||||||
|
case "c":
|
||||||
|
case "cpp":
|
||||||
|
case "php":
|
||||||
|
case "hex":
|
||||||
|
case "ino":
|
||||||
|
case "pde":
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isImageFile(path){
|
||||||
|
var ext = /(?:\.([^.]+))?$/.exec(path)[1];
|
||||||
|
if(typeof ext !== undefined){
|
||||||
|
switch(ext){
|
||||||
|
case "png":
|
||||||
|
case "jpg":
|
||||||
|
case "gif":
|
||||||
|
case "bmp":
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.refreshPath = function(path){
|
||||||
|
treeRoot.removeChild(treeRoot.childNodes[0]);
|
||||||
|
httpGet(treeRoot, "/");
|
||||||
|
};
|
||||||
|
|
||||||
|
function delCb(path){
|
||||||
|
return function(status, responseText){
|
||||||
|
if(status != 200){
|
||||||
|
alert("ERROR["+status+"]: "+responseText);
|
||||||
|
} else {
|
||||||
|
treeRoot.removeChild(treeRoot.childNodes[0]);
|
||||||
|
httpGet(treeRoot, "/");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function httpDelete(filename){
|
||||||
|
var formData = new FormData();
|
||||||
|
formData.append("path", filename);
|
||||||
|
requests.add("DELETE", "/edit", formData, delCb(filename));
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCb(parent, path){
|
||||||
|
return function(status, responseText){
|
||||||
|
if(status == 200)
|
||||||
|
addList(parent, path, JSON.parse(responseText));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function httpGet(parent, path){
|
||||||
|
requests.add("GET", "/edit", { list: path }, getCb(parent, path));
|
||||||
|
}
|
||||||
|
|
||||||
|
httpGet(treeRoot, "/");
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createEditor(element, file, lang, theme, type){
|
||||||
|
function getLangFromFilename(filename){
|
||||||
|
var lang = "plain";
|
||||||
|
var ext = /(?:\.([^.]+))?$/.exec(filename)[1];
|
||||||
|
if(typeof ext !== undefined){
|
||||||
|
switch(ext){
|
||||||
|
case "txt": lang = "plain"; break;
|
||||||
|
case "hex": lang = "plain"; break;
|
||||||
|
case "conf": lang = "plain"; break;
|
||||||
|
case "htm": lang = "html"; break;
|
||||||
|
case "js": lang = "javascript"; break;
|
||||||
|
case "h": lang = "c_cpp"; break;
|
||||||
|
case "c": lang = "c_cpp"; break;
|
||||||
|
case "cpp": lang = "c_cpp"; break;
|
||||||
|
case "css":
|
||||||
|
case "scss":
|
||||||
|
case "php":
|
||||||
|
case "html":
|
||||||
|
case "json":
|
||||||
|
case "xml":
|
||||||
|
case "ini": lang = ext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return lang;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(typeof file === "undefined") file = "/index.html";
|
||||||
|
|
||||||
|
if(typeof lang === "undefined"){
|
||||||
|
lang = getLangFromFilename(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(typeof theme === "undefined") theme = "textmate";
|
||||||
|
|
||||||
|
if(typeof type === "undefined"){
|
||||||
|
type = "text/"+lang;
|
||||||
|
if(lang === "c_cpp") type = "text/plain";
|
||||||
|
}
|
||||||
|
|
||||||
|
var editor = ace.edit(element);
|
||||||
|
function httpPostProcessRequest(status, responseText){
|
||||||
|
if(status != 200) alert("ERROR["+status+"]: "+responseText);
|
||||||
|
}
|
||||||
|
function httpPost(filename, data, type){
|
||||||
|
var formData = new FormData();
|
||||||
|
formData.append("data", new Blob([data], { type: type }), filename);
|
||||||
|
requests.add("POST", "/edit", formData, httpPostProcessRequest);
|
||||||
|
}
|
||||||
|
function httpGetProcessRequest(status, responseText){
|
||||||
|
ge("preview").style.display = "none";
|
||||||
|
ge("editor").style.display = "block";
|
||||||
|
if(status == 200)
|
||||||
|
editor.setValue(responseText);
|
||||||
|
else
|
||||||
|
editor.setValue("");
|
||||||
|
editor.clearSelection();
|
||||||
|
}
|
||||||
|
function httpGet(theUrl){
|
||||||
|
requests.add("GET", "/edit", { edit: theUrl }, httpGetProcessRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lang !== "plain") editor.getSession().setMode("ace/mode/"+lang);
|
||||||
|
editor.setTheme("ace/theme/"+theme);
|
||||||
|
editor.$blockScrolling = Infinity;
|
||||||
|
editor.getSession().setUseSoftTabs(true);
|
||||||
|
editor.getSession().setTabSize(2);
|
||||||
|
editor.setHighlightActiveLine(true);
|
||||||
|
editor.setShowPrintMargin(false);
|
||||||
|
editor.commands.addCommand({
|
||||||
|
name: 'saveCommand',
|
||||||
|
bindKey: {win: 'Ctrl-S', mac: 'Command-S'},
|
||||||
|
exec: function(editor) {
|
||||||
|
//httpPost("/" + file, editor.getValue()+"", type);
|
||||||
|
httpPost(file, editor.getValue()+"", type);
|
||||||
|
},
|
||||||
|
readOnly: false
|
||||||
|
});
|
||||||
|
editor.commands.addCommand({
|
||||||
|
name: 'undoCommand',
|
||||||
|
bindKey: {win: 'Ctrl-Z', mac: 'Command-Z'},
|
||||||
|
exec: function(editor) {
|
||||||
|
editor.getSession().getUndoManager().undo(false);
|
||||||
|
},
|
||||||
|
readOnly: false
|
||||||
|
});
|
||||||
|
editor.commands.addCommand({
|
||||||
|
name: 'redoCommand',
|
||||||
|
bindKey: {win: 'Ctrl-Shift-Z', mac: 'Command-Shift-Z'},
|
||||||
|
exec: function(editor) {
|
||||||
|
editor.getSession().getUndoManager().redo(false);
|
||||||
|
},
|
||||||
|
readOnly: false
|
||||||
|
});
|
||||||
|
editor.loadUrl = function(filename){
|
||||||
|
var edfname = ge("editor-filename");
|
||||||
|
edfname.value=filename;
|
||||||
|
file = filename;
|
||||||
|
lang = getLangFromFilename(file);
|
||||||
|
type = "text/"+lang;
|
||||||
|
if(lang !== "plain") editor.getSession().setMode("ace/mode/"+lang);
|
||||||
|
// httpGet("/"+file);
|
||||||
|
httpGet(file);
|
||||||
|
};
|
||||||
|
return editor;
|
||||||
|
}
|
||||||
|
function onBodyLoad(){
|
||||||
|
var vars = {};
|
||||||
|
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; });
|
||||||
|
var editor = createEditor("editor", vars.file, vars.lang, vars.theme);
|
||||||
|
var tree = createTree("tree", editor);
|
||||||
|
createFileUploader("uploader", tree, editor);
|
||||||
|
if(typeof vars.file === "undefined") vars.file = "/index.htm";
|
||||||
|
editor.loadUrl(vars.file);
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<script id='ace' src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script>
|
||||||
|
if (typeof ace.edit == "undefined") {
|
||||||
|
var script = document.createElement('script');
|
||||||
|
script.src = "/ace.js";
|
||||||
|
script.async = false;
|
||||||
|
document.head.appendChild(script);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload="onBodyLoad();">
|
||||||
|
<div id="loader" class="loader"></div>
|
||||||
|
<div id="uploader"></div>
|
||||||
|
<div id="tree"></div>
|
||||||
|
<div id="editor"></div>
|
||||||
|
<div id="preview" style="display:none;"></div>
|
||||||
|
<iframe id=download-frame style='display:none;'></iframe>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 361 KiB |
@@ -0,0 +1 @@
|
|||||||
|
192.168.0.254
|
||||||
+165
@@ -0,0 +1,165 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>eMAKER Printer Climate Control</title>
|
||||||
|
<!--Import Google Icon Font-->
|
||||||
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
|
||||||
|
<!--Import materialize.css-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="css/materialize.min.css" media="screen,projection" />
|
||||||
|
|
||||||
|
<!--Let browser know website is optimized for mobile-->
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/style.css" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<!-- Header row-->
|
||||||
|
<div id="header" class="row">
|
||||||
|
<div class="col 6 logo">
|
||||||
|
<img src="eMAKER.png" alt="eMAKER logo" />
|
||||||
|
</div>
|
||||||
|
<div class="col 6">
|
||||||
|
<h5>Printer Climate Control</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Data row-->
|
||||||
|
<div class="row">
|
||||||
|
<div class="card light-blue darken-3">
|
||||||
|
<div class="card-tabs">
|
||||||
|
<ul class="tabs tabs-transparent">
|
||||||
|
<li class="tab col s12 m6 l3"><a href="#tabValues">Values</a>
|
||||||
|
</li>
|
||||||
|
<li class="tab col s12 m6 l3"><a href="#tabSettings">Settings</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="card-content white">
|
||||||
|
<div id="tabValues" class="active">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col s12 m6 l3">
|
||||||
|
<div class="card light-blue darken-3 z-depth-3">
|
||||||
|
<div class="card-content white-text">
|
||||||
|
<span class="card-title">Temperature</span>
|
||||||
|
<div class="input-field">
|
||||||
|
<input disabled id="tempinfo" type="number" value="-1" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col s12 m6 l3">
|
||||||
|
<div class="card light-blue darken-3 z-depth-3">
|
||||||
|
<div class="card-content white-text">
|
||||||
|
<span class="card-title">Humidity</span>
|
||||||
|
<div class="input-field">
|
||||||
|
<input disabled id="humidityinfo" type="number" value="-1" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col s12 m6 l3">
|
||||||
|
<div class="card light-blue darken-3 z-depth-3">
|
||||||
|
<div class="card-content white-text">
|
||||||
|
<span class="card-title">Pressure</span>
|
||||||
|
<div class="input-field">
|
||||||
|
<input disabled id="pressureinfo" type="number" value="-1" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col s12 m6 l3">
|
||||||
|
<div class="card light-blue darken-3 z-depth-3">
|
||||||
|
<div class="card-content white-text">
|
||||||
|
<span class="card-title">Layers</span>
|
||||||
|
<div class="input-field">
|
||||||
|
<input disabled id="layersinfo" type="number" value="-1" />
|
||||||
|
<label for="layersinfo">Layer count</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-action">
|
||||||
|
<a id="resetLayers" href="#">Reset</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="tabSettings">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col s12 m6 l3"><!-- Process settings -->
|
||||||
|
<div class="card light-blue darken-3 z-depth-3">
|
||||||
|
<div class="card-content white-text">
|
||||||
|
<span class="card-title">Settings</span>
|
||||||
|
<div class="input-field">
|
||||||
|
<input id="Iim" type="number" value="-1" />
|
||||||
|
<label for="Iim">Lower current</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field">
|
||||||
|
<input id="Imp" type="number" value="-1" />
|
||||||
|
<label for="Imp">Upper Current</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field">
|
||||||
|
<input id="Tu" type="number" value="-1" />
|
||||||
|
<label for="Tu">Upper Temperature</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field">
|
||||||
|
<input id="Tl" type="number" value="-1" />
|
||||||
|
<label for="Tl">Lower Temperature</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-action">
|
||||||
|
<a class="waves-effect waves-light btn" id="btnSetParams" onclick="setParams()">Submit</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col s12 m6 l3"><!-- Connect to network-->
|
||||||
|
<div class="card light-blue darken-3 z-depth-3">
|
||||||
|
<div class="card-content white-text">
|
||||||
|
<span class="card-title">Network</span>
|
||||||
|
<div class="input-field">
|
||||||
|
<input id="ssid" type="text" value="" />
|
||||||
|
<label for="ssid">SSID</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field">
|
||||||
|
<input id="pass" type="text" value="" />
|
||||||
|
<label for="pass">Password</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field">
|
||||||
|
<input id="ip" type="text" value="192.168.0.2" />
|
||||||
|
<label for="ip">IP Address</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field">
|
||||||
|
<input id="gateway" type="text" value="192.168.0.1" />
|
||||||
|
<label for="gateway">Gateway IP</label>
|
||||||
|
</div>
|
||||||
|
<div class="card-action">
|
||||||
|
<a class="waves-effect waves-light btn" id="btnSetParams" onclick="joinNetwork()">Submit</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col s12 m6 l3"><!-- Connect to network-->
|
||||||
|
<div class="card light-blue darken-3 z-depth-3">
|
||||||
|
<div class="card-content white-text">
|
||||||
|
<span class="card-title">Networks</span>
|
||||||
|
<table id="networks">
|
||||||
|
</table>
|
||||||
|
<div class="card-action">
|
||||||
|
<a class="waves-effect waves-light btn" id="btnSetParams" onclick="scanNetworks()">Scan</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript" src="js/aja.min.js"></script>
|
||||||
|
<script type="text/javascript" src="js/materialize.min.js"></script>
|
||||||
|
<script type="text/javascript" src="js/scripts.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
192.168.0.34
|
||||||
Vendored
+9
@@ -0,0 +1,9 @@
|
|||||||
|
/**
|
||||||
|
* aja http://krampstudio.github.io/aja.js/
|
||||||
|
*
|
||||||
|
* @version <=%pkg.version%>
|
||||||
|
* @author Bertrand Chevrier <chevrier.bertrand@gmail.com> © 2015
|
||||||
|
* @license MIT
|
||||||
|
**/
|
||||||
|
!function(){"use strict";var a=["html","json","jsonp","script"],b=["connect","delete","get","head","options","patch","post","put","trace"],c=function f(){var a={},b={},c={url:function(a){return h.call(this,"url",a,d.string)},sync:function(a){return h.call(this,"sync",a,d.bool)},cache:function(a){return h.call(this,"cache",a,d.bool)},type:function(a){return h.call(this,"type",a,d.type)},header:function(b,c){return a.headers=a.headers||{},d.string(b),"undefined"!=typeof c?(d.string(c),a.headers[b]=c,this):a.headers[b]},auth:function(b,c){return d.string(b),d.string(c),a.auth={user:b,passwd:c},this},timeout:function(a){return h.call(this,"timeout",a,d.positiveInteger)},method:function(a){return h.call(this,"method",a,d.method)},queryString:function(a){return h.call(this,"queryString",a,d.queryString)},data:function(a){return h.call(this,"data",a,d.plainObject)},body:function(a){return h.call(this,"body",a,null,function(a){if("object"==typeof a){if(!(a instanceof FormData)){try{a=JSON.stringify(a)}catch(b){throw new TypeError("Unable to stringify body's content : "+b.name)}this.header("Content-Type","application/json")}}else a+="";return a})},into:function(a){return h.call(this,"into",a,d.selector,function(a){return"string"==typeof a?document.querySelectorAll(a):a instanceof HTMLElement?[a]:void 0})},jsonPaddingName:function(a){return h.call(this,"jsonPaddingName",a,d.string)},jsonPadding:function(a){return h.call(this,"jsonPadding",a,d.func)},on:function(a,c){return"function"==typeof c&&(b[a]=b[a]||[],b[a].push(c)),this},off:function(a){return b[a]=[],this},trigger:function(a,c){var d=this,e=function(a,c){b[a]instanceof Array&&b[a].forEach(function(a){a.call(d,c)})};if("undefined"!=typeof a){a+="";var f=/^([0-9])([0-9x])([0-9x])$/i,g=a.match(f);g&&g.length>3?Object.keys(b).forEach(function(a){var b=a.match(f);!(b&&b.length>3&&g[1]===b[1])||"x"!==b[2]&&g[2]!==b[2]||"x"!==b[3]&&g[3]!==b[3]||e(a,c)}):b[a]&&e(a,c)}return this},go:function(){var b=a.type||(a.into?"html":"json"),c=j();return"function"==typeof g[b]?g[b].call(this,c):void 0}},g={json:function(a){var b=this;g._xhr.call(this,a,function(a){if(a)try{a=JSON.parse(a)}catch(c){return b.trigger("error",c),null}return a})},html:function(b){g._xhr.call(this,b,function(b){return a.into&&a.into.length&&[].forEach.call(a.into,function(a){a.innerHTML=b}),b})},_xhr:function(b,c){var d,e,f,g,h,j=this,k=a.method||"get",l=a.sync!==!0,m=new XMLHttpRequest,n=a.data,o=a.body,p=(a.headers||{},this.header("Content-Type")),q=a.timeout;if(!p&&n&&i()&&(this.header("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),p=this.header("Content-Type")),n&&i())if("string"!=typeof o&&(o=""),p.indexOf("json")>-1)try{o=JSON.stringify(n)}catch(r){throw new TypeError("Unable to stringify body's content : "+r.name)}else{g=p&&p.indexOf("x-www-form-urlencoded")>1;for(d in n)o+=g?encodeURIComponent(d)+"="+encodeURIComponent(n[d])+"&":d+"="+n[d]+"\n\r"}h=[k,b,l],a.auth&&(h.push(a.auth.user),h.push(a.auth.passwd)),m.open.apply(m,h);for(e in a.headers)m.setRequestHeader(e,a.headers[e]);m.onprogress=function(a){a.lengthComputable&&j.trigger("progress",a.loaded/a.total)},m.onload=function(){var a=m.responseText;f&&clearTimeout(f),this.status>=200&&this.status<300&&("function"==typeof c&&(a=c(a)),j.trigger("success",a)),j.trigger(this.status,a),j.trigger("end",a)},m.onerror=function(a){f&&clearTimeout(f),j.trigger("error",a,arguments)},q&&(f=setTimeout(function(){j.trigger("timeout",{type:"timeout",expiredAfter:q},m,arguments),m.abort()},q)),m.send(o)},jsonp:function(b){var c,d=this,g=document.querySelector("head"),h=a.sync!==!0,i=a.jsonPaddingName||"callback",j=a.jsonPadding||"_padd"+(new Date).getTime()+Math.floor(1e4*Math.random()),k={};if(f[j])throw new Error("Padding "+j+" already exists. It must be unique.");/^ajajsonp_/.test(j)||(j="ajajsonp_"+j),window[j]=function(a){d.trigger("success",a),g.removeChild(c),window[j]=void 0},k[i]=j,b=e(b,k),c=document.createElement("script"),c.async=h,c.src=b,c.onerror=function(){d.trigger("error",arguments),g.removeChild(c),window[j]=void 0},g.appendChild(c)},script:function(b){var c,d=this,e=document.querySelector("head")||document.querySelector("body"),f=a.sync!==!0;if(!e)throw new Error("Ok, wait a second, you want to load a script, but you don't have at least a head or body tag...");c=document.createElement("script"),c.async=f,c.src=b,c.onerror=function(){d.trigger("error",arguments),e.removeChild(c)},c.onload=function(){d.trigger("success",arguments)},e.appendChild(c)}},h=function(b,c,e,f){if("undefined"!=typeof c){if("function"==typeof e)try{c=e.call(d,c)}catch(g){throw new TypeError("Failed to set "+b+" : "+g.message)}return"function"==typeof f?a[b]=f.call(this,c):a[b]=c,this}return"undefined"===a[b]?null:a[b]},i=function(){return["delete","patch","post","put"].indexOf(a.method)>-1},j=function(){var b=a.url,c="undefined"!=typeof a.cache?!!a.cache:!0,d=a.queryString||"",f=a.data;return c===!1&&(d+="&ajabuster="+(new Date).getTime()),b=eLine truncated
|
||||||
|
//# sourceMappingURL=aja.min.js.map
|
||||||
Vendored
+985
@@ -0,0 +1,985 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="dns-prefetch" href="https://assets-cdn.github.com">
|
||||||
|
<link rel="dns-prefetch" href="https://avatars0.githubusercontent.com">
|
||||||
|
<link rel="dns-prefetch" href="https://avatars1.githubusercontent.com">
|
||||||
|
<link rel="dns-prefetch" href="https://avatars2.githubusercontent.com">
|
||||||
|
<link rel="dns-prefetch" href="https://avatars3.githubusercontent.com">
|
||||||
|
<link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
|
||||||
|
<link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link crossorigin="anonymous" media="all" integrity="sha512-lLo2nlsdl+bHLu6PGvC2j3wfP45RnK4wKQLiPnCDcuXfU38AiD+JCdMywnF3WbJC1jaxe3lAI6AM4uJuMFBLEw==" rel="stylesheet" href="https://assets-cdn.github.com/assets/frameworks-08fc49d3bd2694c870ea23d0906f3610.css" />
|
||||||
|
<link crossorigin="anonymous" media="all" integrity="sha512-4bsutQdbWE5qcKS0bskmuRIZDiHn+kQ8XqWrj5TJLo8uttYTDt5Onp7bxAvepa2WAJl+tAtFzRgWnykPJ3zrhw==" rel="stylesheet" href="https://assets-cdn.github.com/assets/github-305db19fc42a0e30f095f7098e1b21a5.css" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width">
|
||||||
|
|
||||||
|
<title>chartjs-plugin-dragData/chartjs-plugin-dragData.min.js at master · chrispahm/chartjs-plugin-dragData</title>
|
||||||
|
<meta name="description" content="Draggable data points plugin for Chart.js. Contribute to chrispahm/chartjs-plugin-dragData development by creating an account on GitHub.">
|
||||||
|
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
|
||||||
|
<link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
|
||||||
|
<meta property="fb:app_id" content="1401488693436528">
|
||||||
|
|
||||||
|
|
||||||
|
<meta property="og:image" content="https://avatars3.githubusercontent.com/u/20703207?s=400&v=4" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="chrispahm/chartjs-plugin-dragData" /><meta property="og:url" content="https://github.com/chrispahm/chartjs-plugin-dragData" /><meta property="og:description" content="Draggable data points plugin for Chart.js. Contribute to chrispahm/chartjs-plugin-dragData development by creating an account on GitHub." />
|
||||||
|
|
||||||
|
<link rel="assets" href="https://assets-cdn.github.com/">
|
||||||
|
<link rel="web-socket" href="wss://live.github.com/_sockets/VjI6MzAyMTM1MTQyOjgzNDMwNzdmOTFlMTI1NTYyMDAyNzVhMmRkODUyMWZlYTFlZjM3ZjRhODdiZTc0MDRhYTE5YWY0YTJmMjg3ZGU=--a01de6b7de7414d847b0e3c0ac1554ff09371108">
|
||||||
|
<meta name="pjax-timeout" content="1000">
|
||||||
|
<link rel="sudo-modal" href="/sessions/sudo_modal">
|
||||||
|
<meta name="request-id" content="A2C8:59A8:581F51D:A16BDC4:5C090319" data-pjax-transient>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="selected-link" value="repo_source" data-pjax-transient>
|
||||||
|
|
||||||
|
<meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
|
||||||
|
<meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
|
||||||
|
<meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc">
|
||||||
|
|
||||||
|
<meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-app-id" content="github" /><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event" /><meta name="octolytics-dimension-request_id" content="A2C8:59A8:581F51D:A16BDC4:5C090319" /><meta name="octolytics-dimension-region_edge" content="iad" /><meta name="octolytics-dimension-region_render" content="iad" /><meta name="octolytics-actor-id" content="353316" /><meta name="octolytics-actor-login" content="jmgiacalone" /><meta name="octolytics-actor-hash" content="9dff4d9dd9df5ba25f62548e0c475a7dadc47af82d33245bca30b14645a1da31" />
|
||||||
|
<meta name="analytics-location" content="/<user-name>/<repo-name>/blob/show" data-pjax-transient="true" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="google-analytics" content="UA-3769691-2">
|
||||||
|
|
||||||
|
<meta class="js-ga-set" name="userId" content="ced5d7e119eee542cf37fa77e52ce77a" %>
|
||||||
|
|
||||||
|
<meta class="js-ga-set" name="dimension1" content="Logged In">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="hostname" content="github.com">
|
||||||
|
<meta name="user-login" content="jmgiacalone">
|
||||||
|
|
||||||
|
<meta name="expected-hostname" content="github.com">
|
||||||
|
<meta name="js-proxy-site-detection-payload" content="ZDQyYzBlNDBmOGJmZGQ0MDc2ODk2ZTUyYmRkYmE0OTcwYWE1YzY4YTNjNjgxNDJlMmMzMWY1YjI4NTgyYzdhNHx7InJlbW90ZV9hZGRyZXNzIjoiOTAuMjUzLjE0NS4xMzIiLCJyZXF1ZXN0X2lkIjoiQTJDODo1OUE4OjU4MUY1MUQ6QTE2QkRDNDo1QzA5MDMxOSIsInRpbWVzdGFtcCI6MTU0NDA5NDQ5MCwiaG9zdCI6ImdpdGh1Yi5jb20ifQ==">
|
||||||
|
|
||||||
|
<meta name="enabled-features" content="DASHBOARD_V2_LAYOUT,DASHBOARD_V2_LAYOUT_OPT_IN,EXPLORE_DISCOVER_REPOSITORIES,UNIVERSE_BANNER,MARKETPLACE_PLAN_RESTRICTION_EDITOR,NOTIFY_ON_BLOCK,TIMELINE_COMMENT_UPDATES,ISSUE_TEMPLATES_PIONEER,RELATED_ISSUES,MARKETPLACE_INSIGHTS_V2">
|
||||||
|
|
||||||
|
<meta name="html-safe-nonce" content="71bf3c346ef06e2d8e4ed3c84f7cfb657deb6ea0">
|
||||||
|
|
||||||
|
<meta http-equiv="x-pjax-version" content="35976fc262c7c0487ce907894d83cf5d">
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://github.com/chrispahm/chartjs-plugin-dragData/commits/master.atom" rel="alternate" title="Recent Commits to chartjs-plugin-dragData:master" type="application/atom+xml">
|
||||||
|
|
||||||
|
<meta name="go-import" content="github.com/chrispahm/chartjs-plugin-dragData git https://github.com/chrispahm/chartjs-plugin-dragData.git">
|
||||||
|
|
||||||
|
<meta name="octolytics-dimension-user_id" content="20703207" /><meta name="octolytics-dimension-user_login" content="chrispahm" /><meta name="octolytics-dimension-repository_id" content="115925271" /><meta name="octolytics-dimension-repository_nwo" content="chrispahm/chartjs-plugin-dragData" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="115925271" /><meta name="octolytics-dimension-repository_network_root_nwo" content="chrispahm/chartjs-plugin-dragData" /><meta name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" content="false" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="canonical" href="https://github.com/chrispahm/chartjs-plugin-dragData/blob/master/dist/chartjs-plugin-dragData.min.js" data-pjax-transient>
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
|
||||||
|
|
||||||
|
<meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
|
||||||
|
|
||||||
|
<link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#000000">
|
||||||
|
<link rel="icon" type="image/x-icon" class="js-site-favicon" href="https://assets-cdn.github.com/favicon.ico">
|
||||||
|
|
||||||
|
<meta name="theme-color" content="#1e2327">
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="u2f-support" content="true">
|
||||||
|
|
||||||
|
<link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="logged-in env-production page-blob">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="position-relative js-header-wrapper ">
|
||||||
|
<a href="#start-of-content" tabindex="1" class="p-3 bg-blue text-white show-on-focus js-skip-to-content">Skip to content</a>
|
||||||
|
<div id="js-pjax-loader-bar" class="pjax-loader-bar"><div class="progress"></div></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<header class="Header f5" role="banner">
|
||||||
|
<div class="d-flex flex-justify-between px-3 ">
|
||||||
|
<div class="d-flex flex-justify-between ">
|
||||||
|
<div class="">
|
||||||
|
<a class="header-logo-invertocat" href="https://github.com/" data-hotkey="g d" aria-label="Homepage" data-ga-click="Header, go to dashboard, icon:logo">
|
||||||
|
<svg height="32" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="HeaderMenu d-flex flex-justify-between flex-auto">
|
||||||
|
<nav class="d-flex" aria-label="Global">
|
||||||
|
<div class="">
|
||||||
|
<div class="header-search scoped-search site-scoped-search js-site-search position-relative js-jump-to"
|
||||||
|
role="combobox"
|
||||||
|
aria-owns="jump-to-results"
|
||||||
|
aria-label="Search or jump to"
|
||||||
|
aria-haspopup="listbox"
|
||||||
|
aria-expanded="false"
|
||||||
|
>
|
||||||
|
<div class="position-relative">
|
||||||
|
<!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" data-scope-type="Repository" data-scope-id="115925271" data-scoped-search-url="/chrispahm/chartjs-plugin-dragData/search" data-unscoped-search-url="/search" action="/chrispahm/chartjs-plugin-dragData/search" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓" />
|
||||||
|
<label class="form-control header-search-wrapper header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center js-chromeless-input-container">
|
||||||
|
<input type="text"
|
||||||
|
class="form-control header-search-input jump-to-field js-jump-to-field js-site-search-focus js-site-search-field is-clearable"
|
||||||
|
data-hotkey="s,/"
|
||||||
|
name="q"
|
||||||
|
value=""
|
||||||
|
placeholder="Search or jump to…"
|
||||||
|
data-unscoped-placeholder="Search or jump to…"
|
||||||
|
data-scoped-placeholder="Search or jump to…"
|
||||||
|
autocapitalize="off"
|
||||||
|
aria-autocomplete="list"
|
||||||
|
aria-controls="jump-to-results"
|
||||||
|
aria-label="Search or jump to…"
|
||||||
|
data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations#csrf-token=iIVPHPo5ktr/73npGna6sZKhk6fBY7/ywOx90aVi9lmYdYeRCGmiEej6N0Kiy4EVlVpQ6YRArddXQ78c2+Ry7Q=="
|
||||||
|
spellcheck="false"
|
||||||
|
autocomplete="off"
|
||||||
|
>
|
||||||
|
<input type="hidden" class="js-site-search-type-field" name="type" >
|
||||||
|
<img src="https://assets-cdn.github.com/images/search-key-slash.svg" alt="" class="mr-2 header-search-key-slash">
|
||||||
|
|
||||||
|
<div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container">
|
||||||
|
|
||||||
|
<ul class="d-none js-jump-to-suggestions-template-container">
|
||||||
|
|
||||||
|
|
||||||
|
<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option">
|
||||||
|
<a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
|
||||||
|
<div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
|
||||||
|
<svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 12 16" version="1.1" role="img"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
|
||||||
|
<svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 15 16" version="1.1" role="img"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg>
|
||||||
|
<svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M15.7 13.3l-3.81-3.83A5.93 5.93 0 0 0 13 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 0 0 0-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z"/></svg>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
|
||||||
|
|
||||||
|
<div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
|
||||||
|
<span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
|
||||||
|
In this repository
|
||||||
|
</span>
|
||||||
|
<span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
|
||||||
|
All GitHub
|
||||||
|
</span>
|
||||||
|
<span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
|
||||||
|
Jump to
|
||||||
|
<span class="d-inline-block ml-1 v-align-middle">↵</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<ul class="d-none js-jump-to-no-results-template-container">
|
||||||
|
<li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2">
|
||||||
|
<span class="text-gray">No suggested jump to results</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container">
|
||||||
|
|
||||||
|
|
||||||
|
<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option">
|
||||||
|
<a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
|
||||||
|
<div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
|
||||||
|
<svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 12 16" version="1.1" role="img"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
|
||||||
|
<svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 15 16" version="1.1" role="img"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg>
|
||||||
|
<svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M15.7 13.3l-3.81-3.83A5.93 5.93 0 0 0 13 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 0 0 0-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z"/></svg>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
|
||||||
|
|
||||||
|
<div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
|
||||||
|
<span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
|
||||||
|
In this repository
|
||||||
|
</span>
|
||||||
|
<span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
|
||||||
|
All GitHub
|
||||||
|
</span>
|
||||||
|
<span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
|
||||||
|
Jump to
|
||||||
|
<span class="d-inline-block ml-1 v-align-middle">↵</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option">
|
||||||
|
<a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
|
||||||
|
<div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
|
||||||
|
<svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 12 16" version="1.1" role="img"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
|
||||||
|
<svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 15 16" version="1.1" role="img"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg>
|
||||||
|
<svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M15.7 13.3l-3.81-3.83A5.93 5.93 0 0 0 13 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 0 0 0-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z"/></svg>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
|
||||||
|
|
||||||
|
<div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
|
||||||
|
<span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
|
||||||
|
In this repository
|
||||||
|
</span>
|
||||||
|
<span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
|
||||||
|
All GitHub
|
||||||
|
</span>
|
||||||
|
<span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
|
||||||
|
Jump to
|
||||||
|
<span class="d-inline-block ml-1 v-align-middle">↵</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="d-flex flex-justify-center flex-items-center p-0 f5 js-jump-to-suggestion">
|
||||||
|
<img src="https://assets-cdn.github.com/images/spinners/octocat-spinner-128.gif" alt="Octocat Spinner Icon" class="m-2" width="28">
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
</form> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ul class="d-flex pl-2 flex-items-center text-bold list-style-none">
|
||||||
|
<li>
|
||||||
|
<a class="js-selected-navigation-item HeaderNavlink px-2" data-hotkey="g p" data-ga-click="Header, click, Nav menu - item:pulls context:user" aria-label="Pull requests you created" data-selected-links="/pulls /pulls/assigned /pulls/mentioned /pulls" href="/pulls">
|
||||||
|
Pull requests
|
||||||
|
</a> </li>
|
||||||
|
<li>
|
||||||
|
<a class="js-selected-navigation-item HeaderNavlink px-2" data-hotkey="g i" data-ga-click="Header, click, Nav menu - item:issues context:user" aria-label="Issues you created" data-selected-links="/issues /issues/assigned /issues/mentioned /issues" href="/issues">
|
||||||
|
Issues
|
||||||
|
</a> </li>
|
||||||
|
<li class="position-relative">
|
||||||
|
<a class="js-selected-navigation-item HeaderNavlink px-2" data-ga-click="Header, click, Nav menu - item:marketplace context:user" data-octo-click="marketplace_click" data-octo-dimensions="location:nav_bar" data-selected-links=" /marketplace" href="/marketplace">
|
||||||
|
Marketplace
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="js-selected-navigation-item HeaderNavlink px-2" data-ga-click="Header, click, Nav menu - item:explore" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship showcases showcases_search showcases_landing /explore" href="/explore">
|
||||||
|
Explore
|
||||||
|
</a> </li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="d-flex">
|
||||||
|
|
||||||
|
<ul class="user-nav d-flex flex-items-center list-style-none" id="user-links">
|
||||||
|
<li class="dropdown">
|
||||||
|
<span class="d-inline-block px-2">
|
||||||
|
|
||||||
|
<a aria-label="You have unread notifications" class="notification-indicator tooltipped tooltipped-s js-socket-channel js-notification-indicator" data-hotkey="g n" data-ga-click="Header, go to notifications, icon:unread" data-channel="notification-changed:353316" href="/notifications">
|
||||||
|
<span class="mail-status unread"></span>
|
||||||
|
<svg class="octicon octicon-bell" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M14 12v1H0v-1l.73-.58c.77-.77.81-2.55 1.19-4.42C2.69 3.23 6 2 6 2c0-.55.45-1 1-1s1 .45 1 1c0 0 3.39 1.23 4.16 5 .38 1.88.42 3.66 1.19 4.42l.66.58H14zm-7 4c1.11 0 2-.89 2-2H5c0 1.11.89 2 2 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="dropdown">
|
||||||
|
<details class="details-overlay details-reset d-flex px-2 flex-items-center">
|
||||||
|
<summary class="HeaderNavlink"
|
||||||
|
aria-label="Create new…"
|
||||||
|
data-ga-click="Header, create new, icon:add">
|
||||||
|
<svg class="octicon octicon-plus float-left mr-1 mt-1" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 9H7v5H5V9H0V7h5V2h2v5h5v2z"/></svg>
|
||||||
|
<span class="dropdown-caret mt-1"></span>
|
||||||
|
</summary>
|
||||||
|
<details-menu class="dropdown-menu dropdown-menu-sw">
|
||||||
|
|
||||||
|
<a role="menuitem" class="dropdown-item" href="/new" data-ga-click="Header, create new repository">
|
||||||
|
New repository
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a role="menuitem" class="dropdown-item" href="/new/import" data-ga-click="Header, import a repository">
|
||||||
|
Import repository
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a role="menuitem" class="dropdown-item" href="https://gist.github.com/" data-ga-click="Header, create new gist">
|
||||||
|
New gist
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a role="menuitem" class="dropdown-item" href="/organizations/new" data-ga-click="Header, create new organization">
|
||||||
|
New organization
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
<div class="dropdown-header">
|
||||||
|
<span title="chrispahm/chartjs-plugin-dragData">This repository</span>
|
||||||
|
</div>
|
||||||
|
<a role="menuitem" class="dropdown-item" href="/chrispahm/chartjs-plugin-dragData/issues/new" data-ga-click="Header, create new issue">
|
||||||
|
New issue
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
</details-menu>
|
||||||
|
</details>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="dropdown">
|
||||||
|
|
||||||
|
<details class="details-overlay details-reset d-flex pl-2 flex-items-center">
|
||||||
|
<summary class="HeaderNavlink name mt-1"
|
||||||
|
aria-label="View profile and more"
|
||||||
|
data-ga-click="Header, show menu, icon:avatar">
|
||||||
|
<img alt="@jmgiacalone" class="avatar float-left mr-1" src="https://avatars2.githubusercontent.com/u/353316?s=40&v=4" height="20" width="20">
|
||||||
|
<span class="dropdown-caret"></span>
|
||||||
|
</summary>
|
||||||
|
<details-menu class="dropdown-menu dropdown-menu-sw">
|
||||||
|
<ul>
|
||||||
|
<li class="header-nav-current-user css-truncate"><a role="menuitem" class="no-underline user-profile-link px-3 pt-2 pb-2 mb-n2 mt-n1 d-block" href="/jmgiacalone" data-ga-click="Header, go to profile, text:Signed in as">Signed in as <strong class="css-truncate-target">jmgiacalone</strong></a></li>
|
||||||
|
<li class="dropdown-divider"></li>
|
||||||
|
|
||||||
|
|
||||||
|
<li><a role="menuitem" class="dropdown-item" href="/jmgiacalone" data-ga-click="Header, go to profile, text:your profile">Your profile</a></li>
|
||||||
|
<li><a role="menuitem" class="dropdown-item" href="/jmgiacalone?tab=repositories" data-ga-click="Header, go to repositories, text:your repositories">Your repositories</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
<li><a role="menuitem" class="dropdown-item" href="/jmgiacalone?tab=stars" data-ga-click="Header, go to starred repos, text:your stars">Your stars</a></li>
|
||||||
|
<li><a role="menuitem" class="dropdown-item" href="https://gist.github.com/" data-ga-click="Header, your gists, text:your gists">Your gists</a></li>
|
||||||
|
<li class="dropdown-divider"></li>
|
||||||
|
<li><a role="menuitem" class="dropdown-item" href="https://help.github.com" data-ga-click="Header, go to help, text:help">Help</a></li>
|
||||||
|
<li><a role="menuitem" class="dropdown-item" href="/settings/profile" data-ga-click="Header, go to settings, icon:settings">Settings</a></li>
|
||||||
|
<li>
|
||||||
|
<!-- '"` --><!-- </textarea></xmp> --></option></form><form class="logout-form" action="/logout" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="Dvo5KvvMbZKWObcDKWP0zDKPg53ZddYuWhjIJUA0lTXnP+gnAha1sLAMKm+/SW1bLYYhAUfbo5EaElXUX0uO8w==" />
|
||||||
|
<button type="submit" class="dropdown-item dropdown-signout" data-ga-click="Header, sign out, icon:logout" role="menuitem">
|
||||||
|
Sign out
|
||||||
|
</button>
|
||||||
|
</form> </li>
|
||||||
|
</ul>
|
||||||
|
</details-menu>
|
||||||
|
</details>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- '"` --><!-- </textarea></xmp> --></option></form><form class="sr-only right-0" action="/logout" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="PB6BY424Xbzrszb25esDzlUvfeiqi0ZnRvQjmLbkIwnV21BudGKFns2Gq5pzwZpZSibfdDQlM9gG/r5pqZs4zw==" />
|
||||||
|
<button type="submit" class="dropdown-item dropdown-signout" data-ga-click="Header, sign out, icon:logout">
|
||||||
|
Sign out
|
||||||
|
</button>
|
||||||
|
</form> </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="start-of-content" class="show-on-focus"></div>
|
||||||
|
|
||||||
|
<div id="js-flash-container">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="main" class="application-main " data-commit-hovercards-enabled>
|
||||||
|
<div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
|
||||||
|
<div id="js-repo-pjax-container" data-pjax-container >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav ">
|
||||||
|
<div class="repohead-details-container clearfix container">
|
||||||
|
|
||||||
|
<ul class="pagehead-actions">
|
||||||
|
<li>
|
||||||
|
<!-- '"` --><!-- </textarea></xmp> --></option></form><form data-remote="true" class="js-social-form js-social-container" action="/notifications/subscribe" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="dVWze9JDQHMeSNkXQMwixU8Inswmh5JyOfIgFpeCMdaCW+6KD0ib5kNhbqf/vITuZzNYCYbe8H6vukb+oe4ElQ==" /> <input type="hidden" name="repository_id" id="repository_id" value="115925271" class="form-control" />
|
||||||
|
|
||||||
|
<details class="details-reset details-overlay select-menu float-left">
|
||||||
|
<summary class="btn btn-sm btn-with-count select-menu-button" data-ga-click="Repository, click Watch settings, action:blob#show">
|
||||||
|
<span data-menu-button>
|
||||||
|
<svg class="octicon octicon-eye v-align-text-bottom" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>
|
||||||
|
Watch
|
||||||
|
</span>
|
||||||
|
</summary>
|
||||||
|
<details-menu class="select-menu-modal position-absolute mt-5" style="z-index: 99;">
|
||||||
|
<div class="select-menu-header">
|
||||||
|
<span class="select-menu-title">Notifications</span>
|
||||||
|
</div>
|
||||||
|
<div class="select-menu-list">
|
||||||
|
<button type="submit" name="do" value="included" class="select-menu-item width-full" aria-checked="true" role="menuitemradio">
|
||||||
|
<svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
|
||||||
|
<div class="select-menu-item-text">
|
||||||
|
<span class="select-menu-item-heading">Not watching</span>
|
||||||
|
<span class="description">Be notified only when participating or @mentioned.</span>
|
||||||
|
<span class="hidden-select-button-text" data-menu-button-contents>
|
||||||
|
<svg class="octicon octicon-eye v-align-text-bottom" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>
|
||||||
|
Watch
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button type="submit" name="do" value="release_only" class="select-menu-item width-full" aria-checked="false" role="menuitemradio">
|
||||||
|
<svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
|
||||||
|
<div class="select-menu-item-text">
|
||||||
|
<span class="select-menu-item-heading">Releases only</span>
|
||||||
|
<span class="description">Be notified of new releases, and when participating or @mentioned.</span>
|
||||||
|
<span class="hidden-select-button-text" data-menu-button-contents>
|
||||||
|
<svg class="octicon octicon-eye v-align-text-bottom" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>
|
||||||
|
Unwatch releases
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button type="submit" name="do" value="subscribed" class="select-menu-item width-full" aria-checked="false" role="menuitemradio">
|
||||||
|
<svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
|
||||||
|
<div class="select-menu-item-text">
|
||||||
|
<span class="select-menu-item-heading">Watching</span>
|
||||||
|
<span class="description">Be notified of all conversations.</span>
|
||||||
|
<span class="hidden-select-button-text" data-menu-button-contents>
|
||||||
|
<svg class="octicon octicon-eye v-align-text-bottom" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>
|
||||||
|
Unwatch
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button type="submit" name="do" value="ignore" class="select-menu-item width-full" aria-checked="false" role="menuitemradio">
|
||||||
|
<svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
|
||||||
|
<div class="select-menu-item-text">
|
||||||
|
<span class="select-menu-item-heading">Ignoring</span>
|
||||||
|
<span class="description">Never be notified.</span>
|
||||||
|
<span class="hidden-select-button-text" data-menu-button-contents>
|
||||||
|
<svg class="octicon octicon-mute v-align-text-bottom" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 2.81v10.38c0 .67-.81 1-1.28.53L3 10H1c-.55 0-1-.45-1-1V7c0-.55.45-1 1-1h2l3.72-3.72C7.19 1.81 8 2.14 8 2.81zm7.53 3.22l-1.06-1.06-1.97 1.97-1.97-1.97-1.06 1.06L11.44 8 9.47 9.97l1.06 1.06 1.97-1.97 1.97 1.97 1.06-1.06L13.56 8l1.97-1.97z"/></svg>
|
||||||
|
Stop ignoring
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</details-menu>
|
||||||
|
</details>
|
||||||
|
<a class="social-count js-social-count"
|
||||||
|
href="/chrispahm/chartjs-plugin-dragData/watchers"
|
||||||
|
aria-label="2 users are watching this repository">
|
||||||
|
2
|
||||||
|
</a>
|
||||||
|
</form>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
|
||||||
|
<div class="js-toggler-container js-social-container starring-container ">
|
||||||
|
<!-- '"` --><!-- </textarea></xmp> --></option></form><form class="starred js-social-form" action="/chrispahm/chartjs-plugin-dragData/unstar" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="SHDMzOMoQf8/z6b1jC69jHUHVE3UQpY2EBroknmHycvEolSB/jiPfpQ4VGEEck3rxAe3M8r5dO2/zOOVQlEvZg==" />
|
||||||
|
<input type="hidden" name="context" value="repository"></input>
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
class="btn btn-sm btn-with-count js-toggler-target"
|
||||||
|
aria-label="Unstar this repository" title="Unstar chrispahm/chartjs-plugin-dragData"
|
||||||
|
data-ga-click="Repository, click unstar button, action:blob#show; text:Unstar">
|
||||||
|
<svg class="octicon octicon-star v-align-text-bottom" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z"/></svg>
|
||||||
|
Unstar
|
||||||
|
</button>
|
||||||
|
<a class="social-count js-social-count" href="/chrispahm/chartjs-plugin-dragData/stargazers"
|
||||||
|
aria-label="26 users starred this repository">
|
||||||
|
26
|
||||||
|
</a>
|
||||||
|
</form>
|
||||||
|
<!-- '"` --><!-- </textarea></xmp> --></option></form><form class="unstarred js-social-form" action="/chrispahm/chartjs-plugin-dragData/star" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="3RZqt4St4J8F0H/Pz6dBXGuLg2tCOWACL3I476WS7EYVNYlL4DtnTy3Xw2ookmKmNLkBbb41ngY4LLGVfBkKPQ==" />
|
||||||
|
<input type="hidden" name="context" value="repository"></input>
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
class="btn btn-sm btn-with-count js-toggler-target"
|
||||||
|
aria-label="Star this repository" title="Star chrispahm/chartjs-plugin-dragData"
|
||||||
|
data-ga-click="Repository, click star button, action:blob#show; text:Star">
|
||||||
|
<svg class="octicon octicon-star v-align-text-bottom" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z"/></svg>
|
||||||
|
Star
|
||||||
|
</button>
|
||||||
|
<a class="social-count js-social-count" href="/chrispahm/chartjs-plugin-dragData/stargazers"
|
||||||
|
aria-label="26 users starred this repository">
|
||||||
|
26
|
||||||
|
</a>
|
||||||
|
</form> </div>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<!-- '"` --><!-- </textarea></xmp> --></option></form><form class="btn-with-count" action="/chrispahm/chartjs-plugin-dragData/fork" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="L6uDjxVakVO20HMhcKmPbCm5Uz17H6LVU1aeUOh2GBAShBXIr8IT7DRe72KnfXg+G/0BiC3tqtwFFDLNBra2Wg==" />
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
class="btn btn-sm btn-with-count"
|
||||||
|
data-ga-click="Repository, show fork modal, action:blob#show; text:Fork"
|
||||||
|
title="Fork your own copy of chrispahm/chartjs-plugin-dragData to your account"
|
||||||
|
aria-label="Fork your own copy of chrispahm/chartjs-plugin-dragData to your account">
|
||||||
|
<svg class="octicon octicon-repo-forked v-align-text-bottom" viewBox="0 0 10 16" version="1.1" width="10" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
|
||||||
|
Fork
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
<a href="/chrispahm/chartjs-plugin-dragData/network/members" class="social-count"
|
||||||
|
aria-label="5 users forked this repository">
|
||||||
|
5
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h1 class="public ">
|
||||||
|
<svg class="octicon octicon-repo" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
|
||||||
|
<span class="author" itemprop="author"><a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=20703207" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/chrispahm">chrispahm</a></span><!--
|
||||||
|
--><span class="path-divider">/</span><!--
|
||||||
|
--><strong itemprop="name"><a data-pjax="#js-repo-pjax-container" href="/chrispahm/chartjs-plugin-dragData">chartjs-plugin-dragData</a></strong>
|
||||||
|
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav class="reponav js-repo-nav js-sidenav-container-pjax container"
|
||||||
|
itemscope
|
||||||
|
itemtype="http://schema.org/BreadcrumbList"
|
||||||
|
aria-label="Repository"
|
||||||
|
data-pjax="#js-repo-pjax-container">
|
||||||
|
|
||||||
|
<span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
|
||||||
|
<a class="js-selected-navigation-item selected reponav-item" itemprop="url" data-hotkey="g c" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /chrispahm/chartjs-plugin-dragData" href="/chrispahm/chartjs-plugin-dragData">
|
||||||
|
<svg class="octicon octicon-code" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg>
|
||||||
|
<span itemprop="name">Code</span>
|
||||||
|
<meta itemprop="position" content="1">
|
||||||
|
</a> </span>
|
||||||
|
|
||||||
|
<span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
|
||||||
|
<a itemprop="url" data-hotkey="g i" class="js-selected-navigation-item reponav-item" data-selected-links="repo_issues repo_labels repo_milestones /chrispahm/chartjs-plugin-dragData/issues" href="/chrispahm/chartjs-plugin-dragData/issues">
|
||||||
|
<svg class="octicon octicon-issue-opened" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg>
|
||||||
|
<span itemprop="name">Issues</span>
|
||||||
|
<span class="Counter">1</span>
|
||||||
|
<meta itemprop="position" content="2">
|
||||||
|
</a> </span>
|
||||||
|
|
||||||
|
<span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
|
||||||
|
<a data-hotkey="g p" itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_pulls checks /chrispahm/chartjs-plugin-dragData/pulls" href="/chrispahm/chartjs-plugin-dragData/pulls">
|
||||||
|
<svg class="octicon octicon-git-pull-request" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
|
||||||
|
<span itemprop="name">Pull requests</span>
|
||||||
|
<span class="Counter">1</span>
|
||||||
|
<meta itemprop="position" content="3">
|
||||||
|
</a> </span>
|
||||||
|
|
||||||
|
|
||||||
|
<a data-hotkey="g b" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /chrispahm/chartjs-plugin-dragData/projects" href="/chrispahm/chartjs-plugin-dragData/projects">
|
||||||
|
<svg class="octicon octicon-project" viewBox="0 0 15 16" version="1.1" width="15" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg>
|
||||||
|
Projects
|
||||||
|
<span class="Counter" >0</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="js-selected-navigation-item reponav-item" data-hotkey="g w" data-selected-links="repo_wiki /chrispahm/chartjs-plugin-dragData/wiki" href="/chrispahm/chartjs-plugin-dragData/wiki">
|
||||||
|
<svg class="octicon octicon-book" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3 5h4v1H3V5zm0 3h4V7H3v1zm0 2h4V9H3v1zm11-5h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm2-6v9c0 .55-.45 1-1 1H9.5l-1 1-1-1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h5.5l1 1 1-1H15c.55 0 1 .45 1 1zm-8 .5L7.5 3H2v9h6V3.5zm7-.5H9.5l-.5.5V12h6V3z"/></svg>
|
||||||
|
Wiki
|
||||||
|
</a>
|
||||||
|
<a class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors dependency_graph pulse alerts security /chrispahm/chartjs-plugin-dragData/pulse" href="/chrispahm/chartjs-plugin-dragData/pulse">
|
||||||
|
<svg class="octicon octicon-graph" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg>
|
||||||
|
Insights
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container new-discussion-timeline experiment-repo-nav ">
|
||||||
|
<div class="repository-content ">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a class="d-none js-permalink-shortcut" data-hotkey="y" href="/chrispahm/chartjs-plugin-dragData/blob/dca9453b0a7c31897d3d9b8a96b23582efcddf81/dist/chartjs-plugin-dragData.min.js">Permalink</a>
|
||||||
|
|
||||||
|
<!-- blob contrib key: blob_contributors:v21:c34db7f3d7fe528a8f7d81b329dcf681 -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="file-navigation">
|
||||||
|
|
||||||
|
<div class="select-menu branch-select-menu js-menu-container js-select-menu float-left">
|
||||||
|
<button class=" btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w"
|
||||||
|
|
||||||
|
type="button" aria-label="Switch branches or tags" aria-expanded="false" aria-haspopup="true">
|
||||||
|
<i>Branch:</i>
|
||||||
|
<span class="js-select-button css-truncate-target">master</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax>
|
||||||
|
|
||||||
|
<div class="select-menu-modal">
|
||||||
|
<div class="select-menu-header">
|
||||||
|
<svg class="octicon octicon-x js-menu-close" role="img" aria-label="Close" viewBox="0 0 12 16" version="1.1" width="12" height="16"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
|
||||||
|
<span class="select-menu-title">Switch branches/tags</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<tab-container>
|
||||||
|
<div class="select-menu-filters">
|
||||||
|
<div class="select-menu-text-filter">
|
||||||
|
<input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Filter branches/tags">
|
||||||
|
</div>
|
||||||
|
<div class="select-menu-tabs" role="tablist">
|
||||||
|
<ul>
|
||||||
|
<li class="select-menu-tab">
|
||||||
|
<button type="button" class="select-menu-tab-nav" data-filter-placeholder="Filter branches/tags" role="tab" aria-selected="true">Branches</button>
|
||||||
|
</li>
|
||||||
|
<li class="select-menu-tab">
|
||||||
|
<button type="button" class="select-menu-tab-nav" data-filter-placeholder="Find a tag…" role="tab">Tags</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="select-menu-list" role="tabpanel">
|
||||||
|
<div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
|
||||||
|
|
||||||
|
|
||||||
|
<a class="select-menu-item js-navigation-item js-navigation-open selected"
|
||||||
|
href="/chrispahm/chartjs-plugin-dragData/blob/master/dist/chartjs-plugin-dragData.min.js"
|
||||||
|
data-name="master"
|
||||||
|
data-skip-pjax="true"
|
||||||
|
rel="nofollow">
|
||||||
|
<svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
|
||||||
|
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
|
||||||
|
master
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
<a class="select-menu-item js-navigation-item js-navigation-open "
|
||||||
|
href="/chrispahm/chartjs-plugin-dragData/blob/minorFixes/dist/chartjs-plugin-dragData.min.js"
|
||||||
|
data-name="minorFixes"
|
||||||
|
data-skip-pjax="true"
|
||||||
|
rel="nofollow">
|
||||||
|
<svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
|
||||||
|
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
|
||||||
|
minorFixes
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
<a class="select-menu-item js-navigation-item js-navigation-open "
|
||||||
|
href="/chrispahm/chartjs-plugin-dragData/blob/radar/dist/chartjs-plugin-dragData.min.js"
|
||||||
|
data-name="radar"
|
||||||
|
data-skip-pjax="true"
|
||||||
|
rel="nofollow">
|
||||||
|
<svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
|
||||||
|
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
|
||||||
|
radar
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="select-menu-no-results">Nothing to show</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="select-menu-list" role="tabpanel" hidden>
|
||||||
|
<div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
|
||||||
|
|
||||||
|
|
||||||
|
<a class="select-menu-item js-navigation-item js-navigation-open "
|
||||||
|
href="/chrispahm/chartjs-plugin-dragData/tree/v0.0.3/dist/chartjs-plugin-dragData.min.js"
|
||||||
|
data-name="v0.0.3"
|
||||||
|
data-skip-pjax="true"
|
||||||
|
rel="nofollow">
|
||||||
|
<svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
|
||||||
|
<span class="select-menu-item-text css-truncate-target" title="v0.0.3">
|
||||||
|
v0.0.3
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
<a class="select-menu-item js-navigation-item js-navigation-open "
|
||||||
|
href="/chrispahm/chartjs-plugin-dragData/tree/v0.0.2/dist/chartjs-plugin-dragData.min.js"
|
||||||
|
data-name="v0.0.2"
|
||||||
|
data-skip-pjax="true"
|
||||||
|
rel="nofollow">
|
||||||
|
<svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
|
||||||
|
<span class="select-menu-item-text css-truncate-target" title="v0.0.2">
|
||||||
|
v0.0.2
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
<a class="select-menu-item js-navigation-item js-navigation-open "
|
||||||
|
href="/chrispahm/chartjs-plugin-dragData/tree/0.0.4/dist/chartjs-plugin-dragData.min.js"
|
||||||
|
data-name="0.0.4"
|
||||||
|
data-skip-pjax="true"
|
||||||
|
rel="nofollow">
|
||||||
|
<svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
|
||||||
|
<span class="select-menu-item-text css-truncate-target" title="0.0.4">
|
||||||
|
0.0.4
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="select-menu-no-results">Nothing to show</div>
|
||||||
|
</div>
|
||||||
|
</tab-container>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="BtnGroup float-right">
|
||||||
|
<a href="/chrispahm/chartjs-plugin-dragData/find/master"
|
||||||
|
class="js-pjax-capture-input btn btn-sm BtnGroup-item"
|
||||||
|
data-pjax
|
||||||
|
data-hotkey="t">
|
||||||
|
Find file
|
||||||
|
</a>
|
||||||
|
<clipboard-copy for="blob-path" class="btn btn-sm BtnGroup-item">
|
||||||
|
Copy path
|
||||||
|
</clipboard-copy>
|
||||||
|
</div>
|
||||||
|
<div id="blob-path" class="breadcrumb">
|
||||||
|
<span class="repo-root js-repo-root"><span class="js-path-segment"><a data-pjax="true" href="/chrispahm/chartjs-plugin-dragData"><span>chartjs-plugin-dragData</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a data-pjax="true" href="/chrispahm/chartjs-plugin-dragData/tree/master/dist"><span>dist</span></a></span><span class="separator">/</span><strong class="final-path">chartjs-plugin-dragData.min.js</strong>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<include-fragment src="/chrispahm/chartjs-plugin-dragData/contributors/master/dist/chartjs-plugin-dragData.min.js" class="commit-tease commit-loader">
|
||||||
|
<div>
|
||||||
|
Fetching contributors…
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="commit-tease-contributors">
|
||||||
|
<img alt="" class="loader-loading float-left" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32-EAF2F5.gif" width="16" height="16" />
|
||||||
|
<span class="loader-error">Cannot retrieve contributors at this time</span>
|
||||||
|
</div>
|
||||||
|
</include-fragment>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="file ">
|
||||||
|
<div class="file-header">
|
||||||
|
<div class="file-actions">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="BtnGroup">
|
||||||
|
<a id="raw-url" class="btn btn-sm BtnGroup-item" href="/chrispahm/chartjs-plugin-dragData/raw/master/dist/chartjs-plugin-dragData.min.js">Raw</a>
|
||||||
|
<a class="btn btn-sm js-update-url-with-hash BtnGroup-item" data-hotkey="b" href="/chrispahm/chartjs-plugin-dragData/blame/master/dist/chartjs-plugin-dragData.min.js">Blame</a>
|
||||||
|
<a rel="nofollow" class="btn btn-sm BtnGroup-item" href="/chrispahm/chartjs-plugin-dragData/commits/master/dist/chartjs-plugin-dragData.min.js">History</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- '"` --><!-- </textarea></xmp> --></option></form><form class="inline-form js-update-url-with-hash" action="/chrispahm/chartjs-plugin-dragData/edit/master/dist/chartjs-plugin-dragData.min.js" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="DxRTAwk3MLlgDenYwPHg45vQyOxetI3VY3dDYT0y4tUJBuWG7TZVapGthHX1UrcqPbD3/WfkwZbThbzUoYQy5w==" />
|
||||||
|
<button class="btn-octicon tooltipped tooltipped-nw" type="submit"
|
||||||
|
aria-label="Fork this project and edit the file" data-hotkey="e" data-disable-with>
|
||||||
|
<svg class="octicon octicon-pencil" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 12v3h3l8-8-3-3-8 8zm3 2H1v-2h1v1h1v1zm10.3-9.3L12 6 9 3l1.3-1.3a.996.996 0 0 1 1.41 0l1.59 1.59c.39.39.39 1.02 0 1.41z"/></svg>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
<!-- '"` --><!-- </textarea></xmp> --></option></form><form class="inline-form" action="/chrispahm/chartjs-plugin-dragData/delete/master/dist/chartjs-plugin-dragData.min.js" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="iA1qs3hGxWZp5pLxFDBIBjHtCcjVFqr0hE/mDlBTfGTBBIZheBztk3njWQWT5vFvyRmbqa3wkFSyoZItigF0Xw==" />
|
||||||
|
<button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit"
|
||||||
|
aria-label="Fork this project and delete the file" data-disable-with>
|
||||||
|
<svg class="octicon octicon-trashcan" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
|
||||||
|
</button>
|
||||||
|
</form> </div>
|
||||||
|
|
||||||
|
<div class="file-info">
|
||||||
|
10 lines (10 sloc)
|
||||||
|
<span class="file-info-divider"></span>
|
||||||
|
20.1 KB
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div itemprop="text" class="blob-wrapper data type-javascript ">
|
||||||
|
<table class="highlight tab-size js-file-line-container" data-tab-size="8">
|
||||||
|
<tr>
|
||||||
|
<td id="L1" class="blob-num js-line-number" data-line-number="1"></td>
|
||||||
|
<td id="LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">/*</span>!</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="L2" class="blob-num js-line-number" data-line-number="2"></td>
|
||||||
|
<td id="LC2" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * chartjs-plugin-dragData.js</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="L3" class="blob-num js-line-number" data-line-number="3"></td>
|
||||||
|
<td id="LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * http://chartjs.org/</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="L4" class="blob-num js-line-number" data-line-number="4"></td>
|
||||||
|
<td id="LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * Version: 0.0.3</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="L5" class="blob-num js-line-number" data-line-number="5"></td>
|
||||||
|
<td id="LC5" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * </span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="L6" class="blob-num js-line-number" data-line-number="6"></td>
|
||||||
|
<td id="LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * Copyright 2017 Christoph Pahmeyer</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="L7" class="blob-num js-line-number" data-line-number="7"></td>
|
||||||
|
<td id="LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * Released under the MIT license</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="L8" class="blob-num js-line-number" data-line-number="8"></td>
|
||||||
|
<td id="LC8" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * https://github.com/chrispahm/chartjs-plugin-dragData/blob/master/LICENSE.md</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="L9" class="blob-num js-line-number" data-line-number="9"></td>
|
||||||
|
<td id="LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> <span class="pl-c">*/</span></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="L10" class="blob-num js-line-number" data-line-number="10"></td>
|
||||||
|
<td id="LC10" class="blob-code blob-code-inner js-file-line">!function(t){function n(r){if(e[r])return e[r].exports;var i=e[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var e={};return n.m=t,n.c=e,n.p="",n(0)}([function(t,n,e){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,n){return function(){if(l.event){var e=l.event.sourceEvent;if(f=t.getElementAtEvent(e)[0]){if(t.data.datasets[f._datasetIndex].dragData===!1||f._yScale.options.dragData===!1)return void(f=null);h=f._yScale.id,p=f._xScale.id,"function"==typeof n&&f&&n(e,f)}}}}function o(t,n){return function(){if(f&&l.event){var e=l.event.sourceEvent,r=f._datasetIndex,i=f._index,o=void 0,u=void 0;e.touches?(o=t.scales[p].getValueForPixel(e.touches[0].clientX-t.canvas.getBoundingClientRect().left),u=t.scales[h].getValueForPixel(e.touches[0].clientY-t.canvas.getBoundingClientRect().top)):(o=t.scales[p].getValueForPixel(e.clientX-t.canvas.getBoundingClientRect().left),u=t.scales[h].getValueForPixel(e.clientY-t.canvas.getBoundingClientRect().top)),o=o>t.scales[p].max?t.scales[p].max:o,o=o<t.scales[p].min?t.scales[p].min:o,u=u>t.scales[h].max?t.scales[h].max:u,u=u<t.scales[h].min?t.scales[h].min:u,void 0!==t.data.datasets[r].data[i].x&&t.options.dragX&&(t.data.datasets[r].data[i].x=o),void 0!==t.data.datasets[r].data[i].y?t.data.datasets[r].data[i].y=u:t.data.datasets[r].data[i]=u,t.update(0),"function"==typeof n&&n(e,r,i,t.data.datasets[r].data[i])}}}function u(t,n){return function(){if("function"==typeof n&&f){var e=l.event.sourceEvent,r=f._datasetIndex,i=f._index,o=t.data.datasets[r].data[i];return n(e,r,i,o)}}}Object.defineProperty(n,"__esModule",{value:!0});var a=e(1),c=r(a),s=e(2),l=e(3),f=void 0,h=void 0,p=void 0,d={afterInit:function(t){t.options.dragData&&(0,l.select)(t.chart.canvas).call((0,s.drag)().container(t.chart.canvas).on("start",i(t,t.options.onDragStart)).on("drag",o(t,t.options.onDrag)).on("end",u(t,t.options.onDragEnd)))}};c.default.pluginService.register(d),n.default=d},function(t,n){t.exports=Chart},function(t,n,e){!function(t,r){r(n,e(3),e(4))}(this,function(t,n,e){"use strict";function r(){n.event.stopImmediatePropagation()}function i(){n.event.preventDefault(),n.event.stopImmediatePropagation()}function o(t){var e=t.document.documentElement,r=n.select(t).on("dragstart.drag",i,!0);"onselectstart"in e?r.on("selectstart.drag",i,!0):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")}function u(t,e){var r=t.document.documentElement,o=n.select(t).on("dragstart.drag",null);e&&(o.on("click.drag",i,!0),setTimeout(function(){o.on("click.drag",null)},0)),"onselectstart"in r?o.on("selectstart.drag",null):(r.style.MozUserSelect=r.__noselect,delete r.__noselect)}function a(t){return function(){return t}}function c(t,n,e,r,i,o,u,a,c,s){this.target=t,this.type=n,this.subject=e,this.identifier=r,this.active=i,this.x=o,this.y=u,this.dx=a,this.dy=c,this._=s}function s(){return!n.event.button}function l(){return this.parentNode}function f(t){return null==t?{x:n.event.x,y:n.event.y}:t}function h(){return"ontouchstart"in this}function p(){function t(t){t.on("mousedown.drag",p).filter(M).on("touchstart.drag",_).on("touchmove.drag",g).on("touchend.drag touchcancel.drag",y).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(){if(!A&&E.apply(this,arguments)){var t=m("mouse",S.apply(this,arguments),n.mouse,this,arguments);t&&(n.select(n.event.view).on("mousemove.drag",d,!0).on("mouseup.drag",v,!0),o(n.event.view),r(),b=!1,w=n.event.clientX,x=n.event.clientY,t("start"))}}function d(){if(i(),!b){var t=n.event.clientX-w,e=n.event.clientY-x;b=t*t+e*e>D}N.mouse("drag")}function v(){n.select(n.event.view).on("mousemove.drag mouseup.drag",null),u(n.event.view,b),i(),N.mouse("end")}function _(){if(E.apply(this,arguments)){var t,e,i=n.event.changedTouches,o=S.apply(this,arguments),u=i.length;for(t=0;t<u;++t)(e=m(i[t].identifier,o,n.touch,this,arguments))&&(r(),e("start"))}}function g(){var t,e,r=n.event.changedTouches,o=r.length;for(t=0;t<o;++t)(e=N[r[t].identifier])&&(i(),e("drag"))}function y(){var t,e,i=n.event.changedTouches,o=i.length;for(A&&clearTimeout(A),A=setTimeout(function(){A=null},500),t=0;t<o;++t)(e=N[i[t].identifier])&&(r(),e("end"))}function m(e,r,i,o,u){var a,s,l,f=i(r,e),h=C.copy();if(n.customEvent(new c(t,"beforestart",a,e,T,f[0],f[1],0,0,h),function(){return null!=(n.event.subjLine truncated
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<details class="details-reset details-overlay BlobToolbar position-absolute js-file-line-actions dropdown d-none" aria-hidden="true">
|
||||||
|
<summary class="btn-octicon ml-0 px-2 p-0 bg-white border border-gray-dark rounded-1" aria-label="Inline file action toolbar">
|
||||||
|
<svg class="octicon octicon-kebab-horizontal" viewBox="0 0 13 16" version="1.1" width="13" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm5 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zM13 7.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z"/></svg>
|
||||||
|
</summary>
|
||||||
|
<details-menu>
|
||||||
|
<ul class="BlobToolbar-dropdown dropdown-menu dropdown-menu-se mt-2">
|
||||||
|
<li><clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-lines" style="cursor:pointer;" data-original-text="Copy lines">Copy lines</clipboard-copy></li>
|
||||||
|
<li><clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-permalink" style="cursor:pointer;" data-original-text="Copy permalink">Copy permalink</clipboard-copy></li>
|
||||||
|
<li><a class="dropdown-item js-update-url-with-hash" id="js-view-git-blame" role="menuitem" href="/chrispahm/chartjs-plugin-dragData/blame/dca9453b0a7c31897d3d9b8a96b23582efcddf81/dist/chartjs-plugin-dragData.min.js">View git blame</a></li>
|
||||||
|
<li><a class="dropdown-item" id="js-new-issue" role="menuitem" href="/chrispahm/chartjs-plugin-dragData/issues/new">Open new issue</a></li>
|
||||||
|
</ul>
|
||||||
|
</details-menu>
|
||||||
|
</details>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<details class="details-reset details-overlay details-overlay-dark">
|
||||||
|
<summary data-hotkey="l" aria-label="Jump to line"></summary>
|
||||||
|
<details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast linejump" aria-label="Jump to line">
|
||||||
|
<!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form Box-body d-flex" action="" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓" />
|
||||||
|
<input class="form-control flex-auto mr-3 linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line…" aria-label="Jump to line" autofocus>
|
||||||
|
<button type="submit" class="btn" data-close-dialog>Go</button>
|
||||||
|
</form> </details-dialog>
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-backdrop js-touch-events"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="footer container-lg px-3" role="contentinfo">
|
||||||
|
<div class="position-relative d-flex flex-justify-between pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light ">
|
||||||
|
<ul class="list-style-none d-flex flex-wrap ">
|
||||||
|
<li class="mr-3">© 2018 <span title="0.40884s from unicorn-59b88bc4c9-2qf9f">GitHub</span>, Inc.</li>
|
||||||
|
<li class="mr-3"><a data-ga-click="Footer, go to terms, text:terms" href="https://github.com/site/terms">Terms</a></li>
|
||||||
|
<li class="mr-3"><a data-ga-click="Footer, go to privacy, text:privacy" href="https://github.com/site/privacy">Privacy</a></li>
|
||||||
|
<li class="mr-3"><a href="/security" data-ga-click="Footer, go to security, text:security">Security</a></li>
|
||||||
|
<li class="mr-3"><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
|
||||||
|
<li><a data-ga-click="Footer, go to help, text:help" href="https://help.github.com">Help</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<a aria-label="Homepage" title="GitHub" class="footer-octicon mr-lg-4" href="https://github.com">
|
||||||
|
<svg height="24" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
|
||||||
|
</a>
|
||||||
|
<ul class="list-style-none d-flex flex-wrap ">
|
||||||
|
<li class="mr-3"><a data-ga-click="Footer, go to contact, text:contact" href="https://github.com/contact">Contact GitHub</a></li>
|
||||||
|
<li class="mr-3"><a href="https://github.com/pricing" data-ga-click="Footer, go to Pricing, text:Pricing">Pricing</a></li>
|
||||||
|
<li class="mr-3"><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
|
||||||
|
<li class="mr-3"><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
|
||||||
|
<li class="mr-3"><a href="https://blog.github.com" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
|
||||||
|
<li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="d-flex flex-justify-center pb-6">
|
||||||
|
<span class="f6 text-gray-light"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="ajax-error-message" class="ajax-error-message flash flash-error">
|
||||||
|
<svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg>
|
||||||
|
<button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
|
||||||
|
<svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
|
||||||
|
</button>
|
||||||
|
You can’t perform that action at this time.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script crossorigin="anonymous" integrity="sha512-WnyO4VoIUwWWQOmFLjYf4UGg/c1z9VlaLN8IMuiI3uMhhl6rejyThRdLPDyePeUPW6N+38OoBMs6AkqcvWALtA==" type="application/javascript" src="https://assets-cdn.github.com/assets/compat-b66b5d97b4442a01f057c74b091c4368.js"></script>
|
||||||
|
<script crossorigin="anonymous" integrity="sha512-092+yG9tBLtacCexwGKGjTtkuRfZo0YUa8VrsiKW+Zh/nyA2j7MvftFLeoIor9CGQ9uDFYNIcbFDbbTPw7tV3Q==" type="application/javascript" src="https://assets-cdn.github.com/assets/frameworks-176ef037f2b2ddbb94c6810c7bce4ec9.js"></script>
|
||||||
|
|
||||||
|
<script crossorigin="anonymous" async="async" integrity="sha512-1Q7Ebz9Z7DgGT3k6SxGdGh9qknu6pCoRFuElPmXIGEb3N5iv9d4A1+yXS1Ccquw6OyXLJemfc5HAmtG6zYjgzw==" type="application/javascript" src="https://assets-cdn.github.com/assets/github-2def5cbbebe464dee8b3895e4c146e6a.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner d-none">
|
||||||
|
<svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg>
|
||||||
|
<span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
|
||||||
|
<span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
|
||||||
|
</div>
|
||||||
|
<div class="facebox" id="facebox" style="display:none;">
|
||||||
|
<div class="facebox-popup">
|
||||||
|
<div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description">
|
||||||
|
</div>
|
||||||
|
<button type="button" class="facebox-close js-facebox-close" aria-label="Close modal">
|
||||||
|
<svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template id="site-details-dialog">
|
||||||
|
<details class="details-reset details-overlay details-overlay-dark lh-default text-gray-dark" open>
|
||||||
|
<summary aria-haspopup="dialog" aria-label="Close dialog"></summary>
|
||||||
|
<details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast">
|
||||||
|
<button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
|
||||||
|
<svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
|
||||||
|
</button>
|
||||||
|
<div class="octocat-spinner my-6 js-details-dialog-spinner"></div>
|
||||||
|
</details-dialog>
|
||||||
|
</details>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0">
|
||||||
|
<div class="Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large" style="width:360px;">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="hovercard-aria-description" class="sr-only">
|
||||||
|
Press h to open a hovercard with more details.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
Vendored
+6
@@ -0,0 +1,6 @@
|
|||||||
|
/*!
|
||||||
|
* Materialize v1.0.0 (http://materializecss.com)
|
||||||
|
* Copyright 2014-2017 Materialize
|
||||||
|
* MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
|
||||||
|
*/
|
||||||
|
var _get=function t(e,i,n){null===e&&(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,i);if(void 0===s){var o=Object.getPrototypeOf(e);return null===o?void 0:t(o,i,n)}if("value"in s)return s.value;var a=s.get;return void 0!==a?a.call(n):void 0},_createClass=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}window.cash=function(){var i,o=document,a=window,t=Array.prototype,r=t.slice,n=t.filter,s=t.push,e=function(){},h=function(t){return typeof t==typeof e&&t.call},d=function(t){return"string"==typeof t},l=/^#[\w-]*$/,u=/^\.[\w-]*$/,c=/<.+>/,p=/^\w+$/;function v(t,e){e=e||o;var i=u.test(t)?e.getElementsByClassName(t.slice(1)):p.test(t)?e.getElementsByTagName(t):e.querySelectorAll(t);return i}function f(t){if(!i){var e=(i=o.implementation.createHTMLDocument(null)).createElement("base");e.href=o.location.href,i.head.appendChild(e)}return i.body.innerHTML=t,i.body.childNodes}function m(t){"loading"!==o.readyState?t():o.addEventListener("DOMContentLoaded",t)}function g(t,e){if(!t)return this;if(t.cash&&t!==a)return t;var i,n=t,s=0;if(d(t))n=l.test(t)?o.getElementById(t.slice(1)):c.test(t)?f(t):v(t,e);else if(h(t))return m(t),this;if(!n)return this;if(n.nodeType||n===a)this[0]=n,this.length=1;else for(i=this.length=n.length;s<i;s++)this[s]=n[s];return this}function _(t,e){return new g(t,e)}var y=_.fn=_.prototype=g.prototype={cash:!0,length:0,push:s,splice:t.splice,map:t.map,init:g};function k(t,e){for(var i=t.length,n=0;n<i&&!1!==e.call(t[n],t[n],n,t);n++);}function b(t,e){var i=t&&(t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector);return!!i&&i.call(t,e)}function w(e){return d(e)?b:e.cash?function(t){return e.is(t)}:function(t,e){return t===e}}function C(t){return _(r.call(t).filter(function(t,e,i){return i.indexOf(t)===e}))}Object.defineProperty(y,"constructor",{value:_}),_.parseHTML=f,_.noop=e,_.isFunction=h,_.isString=d,_.extend=y.extend=function(t){t=t||{};var e=r.call(arguments),i=e.length,n=1;for(1===e.length&&(t=this,n=0);n<i;n++)if(e[n])for(var s in e[n])e[n].hasOwnProperty(s)&&(t[s]=e[n][s]);return t},_.extend({merge:function(t,e){for(var i=+e.length,n=t.length,s=0;s<i;n++,s++)t[n]=e[s];return t.length=n,t},each:k,matches:b,unique:C,isArray:Array.isArray,isNumeric:function(t){return!isNaN(parseFloat(t))&&isFinite(t)}});var E=_.uid="_cash"+Date.now();function M(t){return t[E]=t[E]||{}}function O(t,e,i){return M(t)[e]=i}function x(t,e){var i=M(t);return void 0===i[e]&&(i[e]=t.dataset?t.dataset[e]:_(t).attr("data-"+e)),i[e]}y.extend({data:function(e,i){if(d(e))return void 0===i?x(this[0],e):this.each(function(t){return O(t,e,i)});for(var t in e)this.data(t,e[t]);return this},removeData:function(s){return this.each(function(t){return i=s,void((n=M(e=t))?delete n[i]:e.dataset?delete e.dataset[i]:_(e).removeAttr("data-"+name));var e,i,n})}});var L=/\S+/g;function T(t){return d(t)&&t.match(L)}function $(t,e){return t.classList?t.classList.contains(e):new RegExp("(^| )"+e+"( |$)","gi").test(t.className)}function B(t,e,i){t.classList?t.classList.add(e):i.indexOf(" "+e+" ")&&(t.className+=" "+e)}function D(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(e,"")}y.extend({addClass:function(t){var n=T(t);return n?this.each(function(e){var i=" "+e.className+" ";k(n,function(t){B(e,t,i)})}):this},attr:function(e,i){if(e){if(d(e))return void 0===i?this[0]?this[0].getAttribute?this[0].getAttribute(e):this[0][e]:void 0:this.each(function(t){t.setAttribute?t.setAttribute(e,i):t[e]=i});for(var t in e)this.attr(t,e[t]);return this}},hasClass:function(t){var e=!1,i=T(t);return i&&i.length&&this.each(function(t){return!(e=$(t,i[0]))}),e},prop:function(e,i){if(d(e))return void 0===i?this[0][e]:this.each(function(t){t[e]=i});for(var t in e)this.prop(t,e[t]);return this},removeAttr:function(e){return this.each(function(t){t.removeAttribute?t.removeAttribute(e):delete t[e]})},removeClass:function(t){if(!arguments.length)return this.attr("class","");var i=T(t);return i?this.each(function(e){k(i,function(t){D(e,t)})}):this},removeProp:function(e){return this.each(function(t){delete t[e]})},toggleClass:function(t,e){if(void 0!==e)return this[e?"addClassLine truncated
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
var _elapsedTime = 0;
|
||||||
|
|
||||||
|
function getParams() {
|
||||||
|
aja()
|
||||||
|
.url('/params')
|
||||||
|
.on('success', function (data) {
|
||||||
|
document.getElementById('Iim').value = data.Iim || -1;
|
||||||
|
document.getElementById('Imp').value = data.Imp || -1;
|
||||||
|
document.getElementById('Tu').value = data.Tu || -1;
|
||||||
|
document.getElementById('Tl').value = data.Tl || -1;
|
||||||
|
M.updateTextFields();
|
||||||
|
})
|
||||||
|
.go();
|
||||||
|
}
|
||||||
|
|
||||||
|
function setParams() {
|
||||||
|
aja()
|
||||||
|
.method('post')
|
||||||
|
.url('/params')
|
||||||
|
.data({ Iim: document.getElementById('Iim').value, Imp: document.getElementById('Imp').value, Tu: document.getElementById('Tu').value, Tl: document.getElementById('Tl').value})
|
||||||
|
.go();
|
||||||
|
}
|
||||||
|
|
||||||
|
function joinNetwork() {
|
||||||
|
aja()
|
||||||
|
.method('post')
|
||||||
|
.url('/setWiFi')
|
||||||
|
.data({ ssid: document.getElementById('ssid').value, pass: document.getElementById('pass').value, ip: document.getElementById('ip').value, gateway: document.getElementById('gateway').value})
|
||||||
|
.go();
|
||||||
|
}
|
||||||
|
|
||||||
|
function scanNetworks() {
|
||||||
|
aja()
|
||||||
|
.url('/scanNetworks')
|
||||||
|
.on('success', function (data) {
|
||||||
|
var listHTML = "";
|
||||||
|
data.forEach((network)=>{
|
||||||
|
listHTML += '<tr><td>'+network.ssid+'</td><td>'+network.channel+'</td><td>'+network.rssi+'</td></tr>';
|
||||||
|
});
|
||||||
|
document.getElementById("networks").innerHTML = listHTML;
|
||||||
|
})
|
||||||
|
.go();
|
||||||
|
}
|
||||||
|
|
||||||
|
setInterval(function () {
|
||||||
|
aja()
|
||||||
|
.url('/sensors')
|
||||||
|
.on('success', function (data) {
|
||||||
|
document.getElementById("tempinfo").value = data.temperature || -1;
|
||||||
|
document.getElementById("humidityinfo").value = data.humidity || -1;
|
||||||
|
document.getElementById("pressureinfo").value = data.pressure || -1;
|
||||||
|
//document.getElementById("targetinfo").value = data.target.toFixed(2) || -1;
|
||||||
|
_run = data.runProfile || 0;
|
||||||
|
_elapsedTime = data.elapsedTime || 0;
|
||||||
|
M.updateTextFields();
|
||||||
|
})
|
||||||
|
.go();
|
||||||
|
}, 4000);
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
M.AutoInit();
|
||||||
|
getParams();
|
||||||
|
// var elems = document.querySelectorAll('.tooltipped');
|
||||||
|
// var instances = M.Tooltip.init(elems, ttOptions);
|
||||||
|
});
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
redweazel2365!
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
LEDE
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>ESP Wi-Fi Manager</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="icon" href="data:,">
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="topnav">
|
||||||
|
<h1>ESP Wi-Fi Manager</h1>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="card-grid">
|
||||||
|
<div class="card">
|
||||||
|
<form action="/setWiFi/" method="POST">
|
||||||
|
<p>
|
||||||
|
<label for="ssid">SSID</label>
|
||||||
|
<input type="text" id ="ssid" name="ssid"><br>
|
||||||
|
<label for="pass">Password</label>
|
||||||
|
<input type="text" id ="pass" name="pass"><br>
|
||||||
|
<label for="ip">IP Address</label>
|
||||||
|
<input type="text" id ="ip" name="ip" value="192.168.1.200"><br>
|
||||||
|
<label for="gateway">Gateway Address</label>
|
||||||
|
<input type="text" id ="gateway" name="gateway" value="192.168.1.1"><br>
|
||||||
|
<input type ="submit" value ="Submit">
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
This directory is intended for project header files.
|
||||||
|
|
||||||
|
A header file is a file containing C declarations and macro definitions
|
||||||
|
to be shared between several project source files. You request the use of a
|
||||||
|
header file in your project source file (C, C++, etc) located in `src` folder
|
||||||
|
by including it, with the C preprocessing directive `#include'.
|
||||||
|
|
||||||
|
```src/main.c
|
||||||
|
|
||||||
|
#include "header.h"
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Including a header file produces the same results as copying the header file
|
||||||
|
into each source file that needs it. Such copying would be time-consuming
|
||||||
|
and error-prone. With a header file, the related declarations appear
|
||||||
|
in only one place. If they need to be changed, they can be changed in one
|
||||||
|
place, and programs that include the header file will automatically use the
|
||||||
|
new version when next recompiled. The header file eliminates the labor of
|
||||||
|
finding and changing all the copies as well as the risk that a failure to
|
||||||
|
find one copy will result in inconsistencies within a program.
|
||||||
|
|
||||||
|
In C, the usual convention is to give header files names that end with `.h'.
|
||||||
|
It is most portable to use only letters, digits, dashes, and underscores in
|
||||||
|
header file names, and at most one dot.
|
||||||
|
|
||||||
|
Read more about using header files in official GCC documentation:
|
||||||
|
|
||||||
|
* Include Syntax
|
||||||
|
* Include Operation
|
||||||
|
* Once-Only Headers
|
||||||
|
* Computed Includes
|
||||||
|
|
||||||
|
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
|
||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
This directory is intended for project specific (private) libraries.
|
||||||
|
PlatformIO will compile them to static libraries and link into executable file.
|
||||||
|
|
||||||
|
The source code of each library should be placed in a an own separate directory
|
||||||
|
("lib/your_library_name/[here are source files]").
|
||||||
|
|
||||||
|
For example, see a structure of the following two libraries `Foo` and `Bar`:
|
||||||
|
|
||||||
|
|--lib
|
||||||
|
| |
|
||||||
|
| |--Bar
|
||||||
|
| | |--docs
|
||||||
|
| | |--examples
|
||||||
|
| | |--src
|
||||||
|
| | |- Bar.c
|
||||||
|
| | |- Bar.h
|
||||||
|
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
|
||||||
|
| |
|
||||||
|
| |--Foo
|
||||||
|
| | |- Foo.c
|
||||||
|
| | |- Foo.h
|
||||||
|
| |
|
||||||
|
| |- README --> THIS FILE
|
||||||
|
|
|
||||||
|
|- platformio.ini
|
||||||
|
|--src
|
||||||
|
|- main.c
|
||||||
|
|
||||||
|
and a contents of `src/main.c`:
|
||||||
|
```
|
||||||
|
#include <Foo.h>
|
||||||
|
#include <Bar.h>
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
PlatformIO Library Dependency Finder will find automatically dependent
|
||||||
|
libraries scanning project source files.
|
||||||
|
|
||||||
|
More information about PlatformIO Library Dependency Finder
|
||||||
|
- https://docs.platformio.org/page/librarymanager/ldf.html
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
; PlatformIO Project Configuration File
|
||||||
|
;
|
||||||
|
; Build options: build flags, source filter
|
||||||
|
; Upload options: custom upload port, speed and extra flags
|
||||||
|
; Library options: dependencies, extra library storages
|
||||||
|
; Advanced options: extra scripting
|
||||||
|
;
|
||||||
|
; Please visit documentation for the other options and examples
|
||||||
|
; https://docs.platformio.org/page/projectconf.html
|
||||||
|
|
||||||
|
[env:esp32cam]
|
||||||
|
platform = espressif32
|
||||||
|
board = esp32cam
|
||||||
|
framework = arduino
|
||||||
|
lib_deps =
|
||||||
|
https://github.com/me-no-dev/ESPAsyncWebServer.git
|
||||||
|
me-no-dev/AsyncTCP@^1.1.1
|
||||||
|
ayushsharma82/AsyncElegantOTA@^2.2.7
|
||||||
|
arduino-libraries/Arduino_JSON@^0.1.0
|
||||||
+173
@@ -0,0 +1,173 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include <AsyncElegantOTA.h>
|
||||||
|
|
||||||
|
//Peripherals includes
|
||||||
|
#include <Wire.h>
|
||||||
|
#include <SPI.h>
|
||||||
|
|
||||||
|
//Web server includes
|
||||||
|
#include <AsyncElegantOTA.h>
|
||||||
|
#include <FS.h>
|
||||||
|
#include "SPIFFS.h"
|
||||||
|
#include <ESPmDNS.h>
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <AsyncTCP.h>
|
||||||
|
#include <ESPAsyncWebServer.h>
|
||||||
|
#include <SPIFFSEditor.h>
|
||||||
|
#include <Arduino_JSON.h>
|
||||||
|
|
||||||
|
#include <Preferences.h>
|
||||||
|
Preferences settings;
|
||||||
|
|
||||||
|
#define LED_PIN 2
|
||||||
|
|
||||||
|
//*********************************************************
|
||||||
|
// Web server variable declarations
|
||||||
|
//*********************************************************
|
||||||
|
|
||||||
|
// Create AsyncWebServer object on port 80
|
||||||
|
AsyncWebServer server(80);
|
||||||
|
AsyncWebSocket ws("/ws");
|
||||||
|
AsyncEventSource events("/events");
|
||||||
|
|
||||||
|
//Variables to save values from HTML form
|
||||||
|
JSONVar scannedSSIDs;
|
||||||
|
String ssid;
|
||||||
|
String pass;
|
||||||
|
String ip;
|
||||||
|
String gateway;
|
||||||
|
int timesConnected = 0;
|
||||||
|
|
||||||
|
const String http_username = "admin";
|
||||||
|
const String http_password = "admin";
|
||||||
|
|
||||||
|
IPAddress localIP;
|
||||||
|
//IPAddress localIP(192, 168, 1, 200); // hardcoded
|
||||||
|
|
||||||
|
// Set your Gateway IP address
|
||||||
|
IPAddress localGateway;
|
||||||
|
//IPAddress localGateway(192, 168, 1, 1); //hardcoded
|
||||||
|
IPAddress subnet(255, 255, 0, 0);
|
||||||
|
|
||||||
|
// Timer variables
|
||||||
|
unsigned long previousMillis = 0;
|
||||||
|
const long interval = 10000; // interval to wait for Wi-Fi connection (milliseconds)
|
||||||
|
#define WIFI_TIMEOUT 10000
|
||||||
|
|
||||||
|
// Stores LED state
|
||||||
|
String ledState;
|
||||||
|
|
||||||
|
|
||||||
|
// function declarations
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// functions
|
||||||
|
// Initialize SPIFFS
|
||||||
|
void initSPIFFS() {
|
||||||
|
if (!SPIFFS.begin(true)) {
|
||||||
|
Serial.println("An error has occurred while mounting SPIFFS");
|
||||||
|
}
|
||||||
|
Serial.println("SPIFFS mounted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize WiFi
|
||||||
|
bool initWiFi() {
|
||||||
|
|
||||||
|
//scan nearby networks
|
||||||
|
WiFi.mode(WIFI_STA);
|
||||||
|
int n = WiFi.scanNetworks();
|
||||||
|
if(n){
|
||||||
|
//networks found, try to connect
|
||||||
|
String availableNetworkParams = "";
|
||||||
|
settings.begin("WiFi");
|
||||||
|
for(int i=0;i<n;i++){
|
||||||
|
//["WiFI":
|
||||||
|
// ["SSID":"pass,ip,gateway,timesConnected",
|
||||||
|
// ...
|
||||||
|
// ]
|
||||||
|
//]
|
||||||
|
availableNetworkParams = settings.getString(WiFi.SSID(i).c_str());
|
||||||
|
if(availableNetworkParams.length() > 1){
|
||||||
|
//known network
|
||||||
|
ssid = WiFi.SSID(i).c_str();
|
||||||
|
String netparams[4];
|
||||||
|
int s=0;
|
||||||
|
for(int j=0;j<4;j++){
|
||||||
|
int e = availableNetworkParams.indexOf(",",s);
|
||||||
|
netparams[j]=availableNetworkParams.substring(s,e);
|
||||||
|
s=e+1;
|
||||||
|
}
|
||||||
|
pass = netparams[0];
|
||||||
|
ip = netparams[1];
|
||||||
|
localIP.fromString(ip);
|
||||||
|
gateway = netparams[2];
|
||||||
|
localGateway.fromString(gateway);
|
||||||
|
timesConnected = netparams[3].toInt();
|
||||||
|
|
||||||
|
if (WiFi.config(localIP, localGateway, subnet)){
|
||||||
|
WiFi.begin(ssid.c_str(), pass.c_str());
|
||||||
|
Serial.println("Connecting to WiFi...");
|
||||||
|
|
||||||
|
unsigned long currentMillis = millis();
|
||||||
|
previousMillis = currentMillis;
|
||||||
|
|
||||||
|
bool res = true;
|
||||||
|
|
||||||
|
while(WiFi.status() != WL_CONNECTED) {
|
||||||
|
currentMillis = millis();
|
||||||
|
if (currentMillis - previousMillis >= WIFI_TIMEOUT) {
|
||||||
|
Serial.println("Failed to connect.");
|
||||||
|
// return false;
|
||||||
|
res = false;
|
||||||
|
}
|
||||||
|
if(!res) break;
|
||||||
|
}
|
||||||
|
// Serial.println(WiFi.localIP());
|
||||||
|
// return true;
|
||||||
|
if(res){
|
||||||
|
//save connection
|
||||||
|
settings.putString(ssid.c_str(),(pass + "," + localIP.toString() + "," + localGateway.toString() + "," + String(timesConnected + 1)).c_str());
|
||||||
|
//initWiFi() true
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
Serial.println("STA Failed to configure");
|
||||||
|
//return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
settings.end();
|
||||||
|
}
|
||||||
|
//no networks found
|
||||||
|
Serial.println("Setting AP (Access Point)");
|
||||||
|
// NULL sets an open Access Point
|
||||||
|
WiFi.mode(WIFI_AP);
|
||||||
|
WiFi.softAP("ESP-WIFI", NULL);
|
||||||
|
|
||||||
|
localIP = WiFi.softAPIP();
|
||||||
|
Serial.print("AP IP address: ");
|
||||||
|
Serial.println(localIP);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replaces placeholder with LED state value
|
||||||
|
String getLEDState(const String& var) {
|
||||||
|
if(var == "STATE") {
|
||||||
|
if(digitalRead(LED_PIN)) {
|
||||||
|
ledState = "ON";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ledState = "OFF";
|
||||||
|
}
|
||||||
|
return ledState;
|
||||||
|
}
|
||||||
|
return String();
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
This directory is intended for PlatformIO Test Runner and project tests.
|
||||||
|
|
||||||
|
Unit Testing is a software testing method by which individual units of
|
||||||
|
source code, sets of one or more MCU program modules together with associated
|
||||||
|
control data, usage procedures, and operating procedures, are tested to
|
||||||
|
determine whether they are fit for use. Unit testing finds problems early
|
||||||
|
in the development cycle.
|
||||||
|
|
||||||
|
More information about PlatformIO Unit Testing:
|
||||||
|
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
|
||||||
Reference in new issue
Block a user