Newer
Older
// CoNLL-U SVG Load & Save by Koichi Yasuoka, July 15, 2018.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// "conllusvgview.js" is needed.
"use strict";
conllusvg.onLoadLocal=function(e){
var textid,c;
for(textid in conllusvg.main){
if(conllusvg.main[textid].files==null)
continue;
else if(conllusvg.main[textid].files.load==e.currentTarget)
break;
}
c=conllusvg.main[textid];
c.files.reader.removeEventListener("load",conllusvg.onLoadLocal);
conllusvg.loadText(textid,c.files.reader.result);
}
conllusvg.onLoadRemote=function(e){
var textid,c;
for(textid in conllusvg.main){
if(conllusvg.main[textid].files==null)
continue;
else if(conllusvg.main[textid].files.request==e.currentTarget)
break;
}
c=conllusvg.main[textid];
c.files.request.removeEventListener("load",conllusvg.onLoadRemote);
if(c.files.request.status==200)
conllusvg.loadText(textid,c.files.request.responseText);
}
conllusvg.onChangeInput=function(e){
var textid;
for(textid in conllusvg.main){
if(conllusvg.main[textid].files==null)
continue;
else if(conllusvg.main[textid].files.load==e.currentTarget)
break;
}
conllusvg.changeInput(textid);
}
conllusvg.loadLocal=function(textid,append){
var c=conllusvg.main[textid];
var g=document.createElement("input");
g.setAttribute("type","file");
g.style.position="absolute";
g.style.opacity=g.style.right=g.style.top=0;
document.body.appendChild(g);
g.addEventListener("change",conllusvg.onChangeInput);
if(c.files==null)
c.files=new Object();
c.files.inputBox=g;
c.files.append=(append==null)?false:append;
c.files.reader=null;
c.files.type="loadLocal";
g.click();
if(c.files.reader==null){
if(c.files.inputBox==g){
g.removeEventListener("change",conllusvg.onChangeInput);
document.body.removeChild(g);
c.files.inputBox=null;
}
}
}
conllusvg.changeInput=function(textid){
var c=conllusvg.main[textid];
c.files.reader=new FileReader();
c.files.reader.addEventListener("load",conllusvg.onLoadLocal);
c.files.reader.readAsText(c.files.inputBox.files[0]);
c.files.filename=c.files.inputBox.files[0].name;
c.files.inputBox.removeEventListener("change",conllusvg.onChangeInput);
document.body.removeChild(c.files.inputBox);
c.files.inputBox=null;
}
conllusvg.loadText=function(textid,t){
var c=conllusvg.main[textid];
var tx=document.getElementById(textid);
var n;
if(tx.value==null){
if(c.files.append&&tx.textContent.length>0)
tx.textContent=tx.textContent+"\n"+t
else
tx.textContent=t;
}
else if(c.files.append&&tx.value.length>0)
tx.value=tx.value+"\n"+t;
else
tx.value=t;
for(n in c.nodes){
if(c.nodes[n].svg!=null)
c.svg.removeChild(c.nodes[n].svg);
c.nodes[n].svg=null;
}
for(n in c.links){
if(c.links[n].svg!=null)
c.svg.removeChild(c.links[n].svg);
c.links[n].svg=null;
}
conllusvg.view(c.svg,textid);
}
conllusvg.loadRemote=function(textid,url,append){
var c=conllusvg.main[textid];
var i;
if(c.files==null)
c.files=new Object();
c.files.append=(append==null)?false:append;
i=url.lastIndexOf("/");
c.files.filename=(i<0)?url:url.slice(i+1);
c.files.request=new XMLHttpRequest();
c.files.request.addEventListener("load",conllusvg.onLoadRemote);
c.files.request.open("GET",url);
c.files.request.send();
}
conllusvg.saveLocal=function(textid){
var c=conllusvg.main[textid];
var tx=document.getElementById(textid);
var s,b,f,a;
if(tx.value==null)
s=tx.textContent;
else
s=tx.value;
s=s+"\n";
if(c.files==null)
c.files=new Object();
f=c.files.filename;
if(f==null)
f="conllu.txt";
else if(f.lastIndexOf(".txt")!=f.length-4)
f="conllu.txt";
b=new Blob([s],{"type":"application/force-download"});
if(window.navigator.msSaveBlob)
window.navigator.msSaveBlob(b,f);
else{
a=document.createElement("a");
a.href=window.URL.createObjectURL(b);
a.target="_blank";
a.download=f;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
}