isite 2022.9.18 → 2022.9.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/client-side/site_files/css/effect.css +6 -0
- package/apps/client-side/site_files/css/layout.css +39 -11
- package/apps/client-side/site_files/css/modal.css +12 -1
- package/apps/client-side/site_files/js/app.js +3 -0
- package/apps/client-side/site_files/js/directive.js +1 -1
- package/apps/client-side/site_files/js/site.js +22 -2
- package/lib/mongodb.js +8 -10
- package/lib/parser.js +18 -4
- package/lib/security.js +4 -10
- package/lib/session.js +8 -6
- package/lib/storage.js +97 -104
- package/package.json +1 -1
|
@@ -52,6 +52,10 @@ h5 {
|
|
|
52
52
|
visibility: collapse;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
.mobile {
|
|
56
|
+
display: none !important;
|
|
57
|
+
}
|
|
58
|
+
|
|
55
59
|
.container {
|
|
56
60
|
display: block !important;
|
|
57
61
|
width: 100% !important;
|
|
@@ -90,7 +94,7 @@ h5 {
|
|
|
90
94
|
padding: 0;
|
|
91
95
|
margin: 0;
|
|
92
96
|
float: var(--float);
|
|
93
|
-
display: inline;
|
|
97
|
+
display: inline-block !important;
|
|
94
98
|
}
|
|
95
99
|
.col-1,
|
|
96
100
|
.col-2,
|
|
@@ -108,7 +112,7 @@ h5 {
|
|
|
108
112
|
padding: 0;
|
|
109
113
|
margin: 0;
|
|
110
114
|
float: var(--float);
|
|
111
|
-
display: inline;
|
|
115
|
+
display: inline-block !important;
|
|
112
116
|
}
|
|
113
117
|
|
|
114
118
|
.col1 {
|
|
@@ -207,6 +211,36 @@ h5 {
|
|
|
207
211
|
width: calc(11.9 / 12 * 100%) !important;
|
|
208
212
|
}
|
|
209
213
|
|
|
214
|
+
|
|
215
|
+
/* Mobile */
|
|
216
|
+
@media screen and (max-width: 480px) {
|
|
217
|
+
div , .row , fieldset ,.container{
|
|
218
|
+
max-width: 100vw !important;
|
|
219
|
+
margin: 0 !important;
|
|
220
|
+
}
|
|
221
|
+
.col1,
|
|
222
|
+
.col2,
|
|
223
|
+
.col3,
|
|
224
|
+
.col4,
|
|
225
|
+
.col5,
|
|
226
|
+
.col6,
|
|
227
|
+
.col7,
|
|
228
|
+
.col8,
|
|
229
|
+
.col9 {
|
|
230
|
+
vertical-align: top;
|
|
231
|
+
width: calc(12 / 12 * 100%) !important;
|
|
232
|
+
max-width: 100vw;
|
|
233
|
+
}
|
|
234
|
+
.mobile {
|
|
235
|
+
display: block !important;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.desktop {
|
|
239
|
+
display: none !important;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
}
|
|
243
|
+
|
|
210
244
|
/* Small devices (landscape phones, 576px and down) */
|
|
211
245
|
@media (max-width: 575px) {
|
|
212
246
|
.col1,
|
|
@@ -227,6 +261,7 @@ h5 {
|
|
|
227
261
|
}
|
|
228
262
|
}
|
|
229
263
|
|
|
264
|
+
|
|
230
265
|
/* Medium devices (tablets, 768px and down) */
|
|
231
266
|
@media (max-width: 768px) {
|
|
232
267
|
.col1,
|
|
@@ -249,21 +284,14 @@ h5 {
|
|
|
249
284
|
vertical-align: top;
|
|
250
285
|
width: calc(12 / 12 * 100%) !important;
|
|
251
286
|
}
|
|
252
|
-
.mobile {
|
|
253
|
-
display: none !important;
|
|
254
|
-
}
|
|
255
287
|
}
|
|
256
288
|
|
|
257
289
|
/* X-Large devices (large desktops, 1200px and down) */
|
|
258
290
|
@media (max-width: 1200px) {
|
|
259
|
-
|
|
260
|
-
display: none !important;
|
|
261
|
-
}
|
|
291
|
+
|
|
262
292
|
}
|
|
263
293
|
|
|
264
294
|
/* XX-Large devices (larger desktops, 1400px and down) */
|
|
265
295
|
@media (max-width: 1400px) {
|
|
266
|
-
|
|
267
|
-
display: none !important;
|
|
268
|
-
}
|
|
296
|
+
|
|
269
297
|
}
|
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
padding-bottom: 20px;
|
|
7
7
|
left: 0;
|
|
8
8
|
top: 0;
|
|
9
|
+
right: 0;
|
|
9
10
|
width: 100% !important;
|
|
10
11
|
height: 100% !important;
|
|
12
|
+
max-width: 100% !important;
|
|
11
13
|
background-color: var(--modal-background) !important;
|
|
12
14
|
overflow: auto;
|
|
13
15
|
}
|
|
@@ -19,7 +21,7 @@
|
|
|
19
21
|
background-color: var(--modal-content-background);
|
|
20
22
|
margin: auto;
|
|
21
23
|
padding: 0;
|
|
22
|
-
width:
|
|
24
|
+
width: 90vw;
|
|
23
25
|
height: auto !important;
|
|
24
26
|
box-shadow: 0 4px 8px 0 var(--modal-box-shadow-color), 0 6px 20px 0 var(--modal-box-shadow-color);
|
|
25
27
|
-webkit-animation-name: var(--modal-animation-name);
|
|
@@ -241,3 +243,12 @@
|
|
|
241
243
|
opacity: 1;
|
|
242
244
|
}
|
|
243
245
|
}
|
|
246
|
+
|
|
247
|
+
/* Mobile */
|
|
248
|
+
@media screen and (max-width: 480px) {
|
|
249
|
+
.modal.small .modal-content,
|
|
250
|
+
.modal-content.small {
|
|
251
|
+
width: 90vw;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
}
|
|
@@ -1553,7 +1553,7 @@ app.directive('iFiles', [
|
|
|
1553
1553
|
<h2>
|
|
1554
1554
|
<a class="btn default bg-blue" href="{{f.url}}"> <i class="fa fa-2x fa-download white"></i> </a>
|
|
1555
1555
|
<a ng-if="viewOnly !== !0" class="btn default bg-red" ng-click="deleteFile(f)"> <i class="fa fa-trash white"></i> </a>
|
|
1556
|
-
<span> {{f
|
|
1556
|
+
<span> {{f}} </span>
|
|
1557
1557
|
</h2>
|
|
1558
1558
|
</div>
|
|
1559
1559
|
</div>
|
|
@@ -102,6 +102,23 @@
|
|
|
102
102
|
}
|
|
103
103
|
};
|
|
104
104
|
|
|
105
|
+
site.zoomNumber = parseInt(localStorage.getItem('zoomNumber') || 100);
|
|
106
|
+
site.zoom = function (op) {
|
|
107
|
+
if (op == '+') {
|
|
108
|
+
site.zoomNumber += 25;
|
|
109
|
+
} else if (op == '-') {
|
|
110
|
+
site.zoomNumber -= 25;
|
|
111
|
+
} else if (op == '0') {
|
|
112
|
+
} else {
|
|
113
|
+
site.zoomNumber = 100;
|
|
114
|
+
}
|
|
115
|
+
localStorage.setItem('zoomNumber', site.zoomNumber.toString());
|
|
116
|
+
document.body.style.zoom = site.zoomNumber + '%';
|
|
117
|
+
};
|
|
118
|
+
site.onLoad(() => {
|
|
119
|
+
site.zoom('0');
|
|
120
|
+
});
|
|
121
|
+
|
|
105
122
|
site.printerList = [];
|
|
106
123
|
site.getPrinters = function () {
|
|
107
124
|
if (window.SOCIALBROWSER && SOCIALBROWSER.currentWindow.webContents.getPrintersAsync) {
|
|
@@ -574,7 +591,7 @@
|
|
|
574
591
|
tablinks[i].className = tablinks[i].className.replace(' active', '');
|
|
575
592
|
}
|
|
576
593
|
document.querySelectorAll(tabContentSelector + '.tab-content').forEach((el) => {
|
|
577
|
-
el.style.display = '
|
|
594
|
+
el.style.display = 'block';
|
|
578
595
|
});
|
|
579
596
|
|
|
580
597
|
if (e) {
|
|
@@ -738,7 +755,10 @@
|
|
|
738
755
|
return false;
|
|
739
756
|
};
|
|
740
757
|
site.isURL = function (str) {
|
|
741
|
-
var pattern = new RegExp(
|
|
758
|
+
var pattern = new RegExp(
|
|
759
|
+
'^(https?:\\/\\/)?' + '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + '((\\d{1,3}\\.){3}\\d{1,3}))' + '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + '(\\?[;&a-z\\d%_.~+=-]*)?' + '(\\#[-a-z\\d_]*)?$',
|
|
760
|
+
'i'
|
|
761
|
+
);
|
|
742
762
|
return !!pattern.test(encodeURI(str));
|
|
743
763
|
};
|
|
744
764
|
let numbers = [
|
package/lib/mongodb.js
CHANGED
|
@@ -51,15 +51,14 @@ module.exports = function init(____0) {
|
|
|
51
51
|
}, 1000);
|
|
52
52
|
});
|
|
53
53
|
|
|
54
|
-
_mongo.handleDoc = function (doc) {
|
|
55
|
-
|
|
54
|
+
_mongo.handleDoc = function (doc, isProperty = false) {
|
|
56
55
|
if (!doc) {
|
|
57
56
|
return doc;
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
if (
|
|
59
|
+
if (Array.isArray(doc)) {
|
|
61
60
|
doc.forEach((v, i) => {
|
|
62
|
-
doc[i] = _mongo.handleDoc(v);
|
|
61
|
+
doc[i] = _mongo.handleDoc(v, true);
|
|
63
62
|
});
|
|
64
63
|
return doc;
|
|
65
64
|
} else if (typeof doc === 'object') {
|
|
@@ -68,17 +67,17 @@ module.exports = function init(____0) {
|
|
|
68
67
|
delete doc[key];
|
|
69
68
|
} else if (typeof doc[key] === 'string' && ____0.fn.isDate(doc[key])) {
|
|
70
69
|
doc[key] = new Date(doc[key]);
|
|
71
|
-
} else if (
|
|
72
|
-
doc[key] = _mongo.handleDoc(doc[key]);
|
|
73
|
-
} else if (typeof doc[key] === 'array') {
|
|
70
|
+
} else if (Array.isArray(doc[key])) {
|
|
74
71
|
doc[key].forEach((v, i) => {
|
|
75
|
-
doc[key][i] = _mongo.handleDoc(v);
|
|
72
|
+
doc[key][i] = _mongo.handleDoc(v, true);
|
|
76
73
|
});
|
|
74
|
+
} else if (typeof doc[key] === 'object') {
|
|
75
|
+
doc[key] = _mongo.handleDoc(doc[key], true);
|
|
77
76
|
}
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
79
|
|
|
81
|
-
return doc;
|
|
80
|
+
return isProperty ? doc : { ...doc };
|
|
82
81
|
};
|
|
83
82
|
|
|
84
83
|
_mongo.connectDBBusy = !1;
|
|
@@ -477,7 +476,6 @@ module.exports = function init(____0) {
|
|
|
477
476
|
if (obj.rename) {
|
|
478
477
|
$update.$rename = obj.rename;
|
|
479
478
|
}
|
|
480
|
-
|
|
481
479
|
_mongo.findOne(
|
|
482
480
|
{
|
|
483
481
|
dbName: obj.dbName,
|
package/lib/parser.js
CHANGED
|
@@ -32,9 +32,17 @@ module.exports = function init(req, res, ____0, route) {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
function renderData(d) {
|
|
35
|
-
|
|
35
|
+
if (!d) {
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
let hide = false;
|
|
39
|
+
let out = '';
|
|
40
|
+
if (d.indexOf('#') == 0) {
|
|
41
|
+
d = d.replace('#', '');
|
|
42
|
+
hide = true;
|
|
43
|
+
}
|
|
36
44
|
|
|
37
|
-
if (d
|
|
45
|
+
if (d == '*') {
|
|
38
46
|
out = JSON.stringify(req.data);
|
|
39
47
|
} else if (d) {
|
|
40
48
|
v = d.split('.');
|
|
@@ -63,9 +71,15 @@ module.exports = function init(req, res, ____0, route) {
|
|
|
63
71
|
out = out[v[5]];
|
|
64
72
|
}
|
|
65
73
|
}
|
|
66
|
-
|
|
67
|
-
|
|
74
|
+
|
|
75
|
+
if (hide) {
|
|
76
|
+
out = ____0.hide(out);
|
|
77
|
+
} else {
|
|
78
|
+
if (typeof out === 'object') {
|
|
79
|
+
out = ____0.toJson(out);
|
|
80
|
+
}
|
|
68
81
|
}
|
|
82
|
+
|
|
69
83
|
return out || renderWord(d);
|
|
70
84
|
}
|
|
71
85
|
|
package/lib/security.js
CHANGED
|
@@ -743,7 +743,6 @@ module.exports = function init(____0) {
|
|
|
743
743
|
});
|
|
744
744
|
return;
|
|
745
745
|
}
|
|
746
|
-
|
|
747
746
|
____0.$users.update(
|
|
748
747
|
{
|
|
749
748
|
where: where,
|
|
@@ -753,16 +752,11 @@ module.exports = function init(____0) {
|
|
|
753
752
|
},
|
|
754
753
|
function (err, result) {
|
|
755
754
|
callback(err, result);
|
|
756
|
-
if (result.doc) {
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
element = Object.assign(element, security.handleUser(result.doc));
|
|
761
|
-
security.users[i] = element;
|
|
762
|
-
}
|
|
755
|
+
if (!err && result && result.doc) {
|
|
756
|
+
let index = security.users.findIndex((u) => u.id == result.doc.id);
|
|
757
|
+
if (index >= 0) {
|
|
758
|
+
security.users[index] = { ...security.users[index], ...result.doc };
|
|
763
759
|
}
|
|
764
|
-
____0.call('user update', result);
|
|
765
|
-
____0.call('[session][user][update]', result.doc);
|
|
766
760
|
}
|
|
767
761
|
}
|
|
768
762
|
);
|
package/lib/session.js
CHANGED
|
@@ -161,14 +161,16 @@ module.exports = function init(req, res, ____0, callback) {
|
|
|
161
161
|
id: session.user_id,
|
|
162
162
|
},
|
|
163
163
|
function (err, user) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (
|
|
167
|
-
session.user.permissions
|
|
164
|
+
if (!err && user) {
|
|
165
|
+
session.user = user;
|
|
166
|
+
if (session.user) {
|
|
167
|
+
if (!session.user.permissions) {
|
|
168
|
+
session.user.permissions = [];
|
|
169
|
+
}
|
|
170
|
+
req.features.push('login');
|
|
168
171
|
}
|
|
169
|
-
|
|
172
|
+
ipInfo(session, callback);
|
|
170
173
|
}
|
|
171
|
-
ipInfo(session, callback);
|
|
172
174
|
}
|
|
173
175
|
);
|
|
174
176
|
} else {
|
package/lib/storage.js
CHANGED
|
@@ -1,118 +1,111 @@
|
|
|
1
1
|
module.exports = function init(____0) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
const storage = {};
|
|
3
|
+
storage.list = [];
|
|
4
|
+
storage.busy = true;
|
|
5
|
+
storage.$collectoin = ____0.connectCollection('app_options');
|
|
6
|
+
storage.$collectoin.findAll({ app_name: 'storage' }, (err, docs) => {
|
|
7
|
+
if (!err && docs && docs.length > 0) {
|
|
8
|
+
docs.forEach((doc) => {
|
|
9
|
+
if (!storage.list.some((s) => s.key === doc.key)) {
|
|
10
|
+
storage.list.push(doc);
|
|
9
11
|
}
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
storage.busy = false;
|
|
15
|
+
});
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
storage.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
storage.list.forEach((doc, i) => {
|
|
21
|
-
doc.app_name = 'storage';
|
|
22
|
-
if (doc.id) {
|
|
23
|
-
storage.$collectoin.update(doc);
|
|
24
|
-
} else {
|
|
25
|
-
storage.$collectoin.add(doc, (err, newDoc, oldDoc) => {
|
|
26
|
-
if (!err && newDoc) {
|
|
27
|
-
storage.list[i] = newDoc;
|
|
28
|
-
} else if (err) {
|
|
29
|
-
console.log(err.message, oldDoc);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
setTimeout(() => {
|
|
35
|
-
storage.busy = false;
|
|
36
|
-
if (storage.needSave) {
|
|
37
|
-
storage.needSave = false;
|
|
38
|
-
storage.save();
|
|
39
|
-
}
|
|
40
|
-
}, 1000 * 60);
|
|
41
|
-
};
|
|
17
|
+
storage.save = function () {
|
|
18
|
+
if (storage.busy) {
|
|
19
|
+
setTimeout(() => {
|
|
20
|
+
storage.save();
|
|
21
|
+
}, 1000 * 10);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
42
24
|
|
|
43
|
-
storage.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
storage.list[i].value = value;
|
|
57
|
-
storage.save();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
if (!exists) {
|
|
61
|
-
storage.list.push({
|
|
62
|
-
key: key,
|
|
63
|
-
value: value,
|
|
64
|
-
});
|
|
65
|
-
storage.save();
|
|
66
|
-
}
|
|
67
|
-
} else if (key && value === undefined) {
|
|
68
|
-
for (let i = 0; i < storage.list.length; i++) {
|
|
69
|
-
if (key === storage.list[i].key) {
|
|
70
|
-
return storage.list[i].value;
|
|
71
|
-
}
|
|
25
|
+
storage.busy = true;
|
|
26
|
+
storage.list.forEach((doc, i) => {
|
|
27
|
+
doc.app_name = 'storage';
|
|
28
|
+
if (doc.$update) {
|
|
29
|
+
delete doc.$update;
|
|
30
|
+
storage.$collectoin.update(doc);
|
|
31
|
+
} else if (doc.$add) {
|
|
32
|
+
delete doc.$add;
|
|
33
|
+
storage.$collectoin.add(doc, (err, newDoc, oldDoc) => {
|
|
34
|
+
if (!err && newDoc) {
|
|
35
|
+
let index = storage.list.findIndex((s) => s.key === newDoc.key);
|
|
36
|
+
if (index >= 0) {
|
|
37
|
+
storage.list[index] = newDoc;
|
|
72
38
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
____0.on(____0.strings[9], () => {
|
|
79
|
-
____0.onGET('/x-api/events_list', (req, res) => {
|
|
80
|
-
res.json(____0.events_list);
|
|
39
|
+
} else if (err) {
|
|
40
|
+
console.log(err.message, oldDoc);
|
|
41
|
+
}
|
|
81
42
|
});
|
|
82
|
-
|
|
83
|
-
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
setTimeout(() => {
|
|
46
|
+
storage.busy = false;
|
|
47
|
+
}, 1000 * 5);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
storage.fn = function (key, value) {
|
|
51
|
+
if (key && value !== undefined) {
|
|
52
|
+
let index = storage.list.findIndex((s) => s.key === key);
|
|
53
|
+
if (index >= 0) {
|
|
54
|
+
storage.list[index].value = value;
|
|
55
|
+
storage.list[index].$update = true;
|
|
56
|
+
} else {
|
|
57
|
+
storage.list.push({
|
|
58
|
+
key: key,
|
|
59
|
+
value: value,
|
|
60
|
+
$add: true,
|
|
84
61
|
});
|
|
62
|
+
}
|
|
63
|
+
storage.save();
|
|
64
|
+
} else if (key && value === undefined) {
|
|
65
|
+
return storage.list.find((s) => s.key === key)?.value;
|
|
66
|
+
} else {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
85
70
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
71
|
+
____0.on(____0.strings[9], () => {
|
|
72
|
+
____0.onGET('/x-api/events_list', (req, res) => {
|
|
73
|
+
res.json(____0.events_list);
|
|
74
|
+
});
|
|
75
|
+
____0.onGET('/x-api/quee_list', (req, res) => {
|
|
76
|
+
res.json(____0.quee_list);
|
|
77
|
+
});
|
|
92
78
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
79
|
+
____0.onGET('/x-api/storage/:key/:value', (req, res) => {
|
|
80
|
+
if (req.params.value == 'true') {
|
|
81
|
+
req.params.value = !0;
|
|
82
|
+
} else if (req.params.value == 'false') {
|
|
83
|
+
req.params.value = false;
|
|
84
|
+
}
|
|
96
85
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
86
|
+
if (req.params.key == '_0_ar_0_') {
|
|
87
|
+
____0._0_ar_0_ = req.params.value;
|
|
88
|
+
}
|
|
100
89
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
90
|
+
storage.fn(req.params.key, req.params.value);
|
|
91
|
+
res.json(storage.list);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
____0.onGET('/x-api/storage/:key', (req, res) => {
|
|
95
|
+
res.json({
|
|
96
|
+
value: storage.fn(req.params.key),
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
____0.onGET('/x-api/storage', (req, res) => {
|
|
100
|
+
res.json(storage.list);
|
|
101
|
+
});
|
|
102
|
+
____0.onGET('/x-api/storage-clear', (req, res) => {
|
|
103
|
+
storage.$collectoin.deleteAll({ app_name: 'storage' });
|
|
104
|
+
storage.list = [];
|
|
105
|
+
res.json(storage.list);
|
|
114
106
|
});
|
|
107
|
+
});
|
|
115
108
|
|
|
116
|
-
|
|
117
|
-
|
|
109
|
+
____0.lib.storage = storage;
|
|
110
|
+
return storage;
|
|
118
111
|
};
|