Skip to content

Commit d369009

Browse files
committed
file drag-upload
1 parent 12a5d2b commit d369009

1 file changed

Lines changed: 84 additions & 9 deletions

File tree

docs/index.html

Lines changed: 84 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,22 @@
1717
stroke: #333;
1818
stroke-width: 1.5px;
1919
}
20+
21+
.upload-drop-zone {
22+
height: 200px;
23+
border-width: 2px;
24+
margin-bottom: 20px;
25+
color: #ccc;
26+
border-style: dashed;
27+
border-color: #ccc;
28+
line-height: 200px;
29+
text-align: center
30+
}
31+
.upload-drop-zone.drop {
32+
color: #222;
33+
border-color: #222;
34+
}
35+
2036
</style>
2137
</head>
2238

@@ -171,12 +187,17 @@ <h4 class="modal-title">JSON File</h4>
171187
<div class="modal-body">
172188
<label for="inputFile" class="col-lg-2 control-label">File</label>
173189
<div class="col-lg-10">
174-
<input type="file" class="form-control" id="inputFile">
190+
<input type="file" class="form-control file" id="inputFile">
191+
</div>
192+
<br/>
193+
<label for="drop-zone" class="col-lg-2 control-label">Or drag and drop a file below</label>
194+
<div class="upload-drop-zone" id="drop-zone">
195+
Just drag and drop a JSON file here
175196
</div>
176197
</div>
177198
<div class="modal-footer">
178199
<button type="button" class="btn btn-primary" data-dismiss="modal" id="loadFile">Load</button>
179-
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
200+
<button type="button" class="btn btn-default" data-dismiss="modal" id="fileClose">Close</button>
180201
</div>
181202
</div>
182203
</div>
@@ -345,14 +366,14 @@ <h4 class="modal-title">JSON File</h4>
345366
function updateInfoBox(d) {
346367
if (d) {
347368
var el = document.getElementById("node-info");
348-
var s = "Type: "+d.type+"\n";
369+
var s = "Type: "+d.type+"</br>";
349370
if (d.type == "domain") {
350-
s = s + "Domain: "+d.id+"\n";
351-
s = s + "Status: "+d.status+"\n";
371+
s = s + "Domain: "+linkifyDomain(d)+"</br>";
372+
s = s + "Status: "+d.status+"</br>";
352373
}else if (d.type = "certificate") {
353-
s = s + "Hash: "+d.id+"\n";
374+
s = s + "Hash: "+linkifyCert(d)+"</br>";
354375
}
355-
el.innerText = s;
376+
el.innerHTML = s;
356377
}
357378
}
358379

@@ -375,13 +396,13 @@ <h4 class="modal-title">JSON File</h4>
375396
if (d.root == "true") {
376397
c = "info";
377398
}
378-
$('#domain-list').append('<tr class="'+c+'"><td>'+ ++domainCount +'</td><td><a target="_blank" href="https://'+d.id+'">'+d.id+'</a></td><td>'+d.status+'</td></tr>');
399+
$('#domain-list').append('<tr class="'+c+'"><td>'+ ++domainCount +'</td><td>'+linkifyDomain(d)+'</td><td>'+d.status+'</td></tr>');
379400
}
380401

381402
var certCount = 0;
382403
function addTableCert(d) {
383404
//console.log("cert", d);
384-
$('#cert-list').append('<tr><td>'+ ++certCount + '</td><td><a target="_blank" href="https://crt.sh/?q='+d.id+'">'+d.id+'</a></td></tr>');
405+
$('#cert-list').append('<tr><td>'+ ++certCount + '</td><td>'+linkifyCert(d)+'</td></tr>');
385406
}
386407

387408

@@ -396,6 +417,14 @@ <h4 class="modal-title">JSON File</h4>
396417
})
397418
}
398419

420+
function linkifyCert(d) {
421+
return '<a target="_blank" href="https://crt.sh/?q='+d.id+'">'+d.id+'</a>';
422+
}
423+
424+
function linkifyDomain(d) {
425+
return '<a target="_blank" href="https://crt.sh/?q='+d.id+'">'+d.id+'</a>';
426+
}
427+
399428
function getQueryVariable(variable){
400429
var query = window.location.search.substring(1);
401430
var vars = query.split("&");
@@ -440,6 +469,52 @@ <h4 class="modal-title">JSON File</h4>
440469
reader.readAsText(file);
441470
}
442471

472+
var dropbox = document.getElementById('drop-zone');
473+
function dragenter(e) {
474+
e.stopPropagation();
475+
e.preventDefault();
476+
dropbox.className = 'upload-drop-zone drop';
477+
// console.log("enter");
478+
return false;
479+
}
480+
function dragover(e) {
481+
e.stopPropagation();
482+
e.preventDefault();
483+
// console.log("over");
484+
}
485+
function dragleave(e) {
486+
e.stopPropagation();
487+
e.preventDefault();
488+
dropbox.className = 'upload-drop-zone';
489+
// console.log("leave");
490+
return false;
491+
}
492+
function drop(e) {
493+
// console.log("drop");
494+
e.stopPropagation();
495+
e.preventDefault();
496+
dropbox.className = 'upload-drop-zone';
497+
498+
var dt = e.dataTransfer;
499+
var files = dt.files;
500+
501+
var reader = new FileReader();
502+
reader.onload = function(e) {
503+
var dataStr = reader.result;
504+
var data = JSON.parse(dataStr);
505+
resetGraph();
506+
createGraph(null, data);
507+
}
508+
reader.readAsText(files[0]);
509+
$('#fileClose').click();
510+
return false;
511+
}
512+
dropbox.addEventListener("dragenter", dragenter, false);
513+
dropbox.addEventListener("dragover", dragover, false);
514+
dropbox.addEventListener("drop", drop, false);
515+
dropbox.addEventListener("dragleave",dragleave, false);
516+
517+
443518
// load initial graph data
444519
var dataURL = getQueryVariable("data");
445520
if (dataURL == "") {

0 commit comments

Comments
 (0)