forked from huiyan-fe/mapv
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDataControl.js
More file actions
174 lines (150 loc) · 5.58 KB
/
DataControl.js
File metadata and controls
174 lines (150 loc) · 5.58 KB
1
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/**
* @file this file is to supprot customer data
* @author Mofei Zhu <zhuwenlong@baidu.ocm>
*/
function DataControl(superObj) {
this.initDom();
this.initEvent();
this.super = superObj;
this.geoData = superObj.geoData;
// console.log(this.geoData.setData);
}
DataControl.prototype.initDom = function () {
var control = this.control = document.createElement('div');
var input = this.input = document.createElement('input');
input.type = 'file';
var tipstitle = document.createElement('div');
tipstitle.textContent = '自定义数据:';
var tips = document.createElement('div');
tips.textContent = '拖拽文件到窗口或者选择自定义文件';
control.appendChild(tipstitle);
control.appendChild(tips);
control.appendChild(input);
control.style.fontSize = '12px';
control.style.lineHeight = '1.8em';
control.style.position = 'absolute';
control.style.bottom = '50px';
control.style.left = '10px';
control.style.padding = '10px 20px';
control.style.color = '#FFF';
control.style.background = 'rgba(0,0,0,0.5)';
control.style.zIndex = '100000';
control.style.overflow = 'hidden';
control.style.webkitTransition = 'all 0.5s ease-in';
var history = document.createElement('div');
var historyTitle = document.createElement('div');
historyTitle.textContent = '历史数据';
this.history = document.createElement('div');
history.appendChild(historyTitle);
history.appendChild(this.history);
control.appendChild(history);
document.body.appendChild(control);
};
DataControl.prototype.initEvent = function () {
var self = this;
var reader = new FileReader();
reader.addEventListener('load', function (e) {
var text = reader.result;
var draw = formatRender(text);
if (draw) {
var filenames = localStorage.getItem('filenames') || '{}';
filenames = JSON.parse(filenames);
if (!reader.fileName || !reader.fileSize) {
console.log('no fileName or fileSize , save faild ');
return false;
}
for (var i in filenames) {
if (filenames[i].name === this.fileName && filenames[i].size === this.fileSize) {
return false;
}
}
var saveName = this.fileName + this.fileSize + parseInt(Math.random() * 1e17, 10).toString(36);
filenames[saveName] = {
size: this.fileSize,
name: this.fileName
};
// console.log(filenames)
localStorage.setItem('filenames', JSON.stringify(filenames));
localStorage.setItem(saveName, JSON.stringify(text));
self.initHistory();
}
});
self.history.addEventListener('click', function (e) {
var node = e.target;
if (node.nodeName === 'A') {
var storageName = node.getAttribute('storageName');
var dataStr = localStorage.getItem(storageName);
formatRender(dataStr);
}
return false;
});
self.input.addEventListener('change', function (e) {
reader.readAsText(e.target.files[0]);
reader.fileName = e.target.files[0].name;
reader.fileSize = e.target.files[0].size;
});
document.addEventListener('dragover', function (event) {
event.preventDefault();
}, false);
document.addEventListener('drop', function (event) {
event.preventDefault();
reader.readAsText(event.dataTransfer.files[0]);
reader.fileName = event.dataTransfer.files[0].name;
reader.fileSize = event.dataTransfer.files[0].size;
return false;
});
function formatRender(dataStr) {
var data;
var wrongType = false;
try {
data = JSON.parse(dataStr.replace(/\s/g, ''));
// console.log('??!@',data)
var count = 0;
while (typeof (data) === 'string' && count <= 10) {
data = JSON.parse(data);
count++;
}
wrongType = false;
} catch (e) {
wrongType = true;
}
if (wrongType) {
try {
data = [];
var dataT = dataStr.split('\n');
if (dataT.length <= 1) {
dataT = dataStr.split('\\n');
}
var keys = dataT[0].split(',');
// console.log(keys)
for (var i = 1; i < keys.length; i++) {
var values = dataT[i].split(',');
var obj = {};
var nonameIndex = 0;
for (var j = 0; j < values.length; j++) {
var name = keys[j] || 'noname' + (nonameIndex++);
name = name.replace(/\\r/g, '');
obj[name] = Number(values[j].replace(/\\r/g, '').replace(/\"/g, ''));
}
data.push(obj);
}
data = JSON.stringify(data).replace(/\\r/g, '');
data = JSON.parse(data);
wrongType = false;
} catch (e) {
window.console.log(e);
wrongType = true;
}
}
if (wrongType) {
alert('数据格式错误,请检查是否为json或者csv格式数据');
return false;
}
self.geoData.setData(data);
console.log(self.super._layers)
for(var i=0;i<self.super._layers.length;i++){
self.super._layers[i].draw();
}
return true;
}
};