nodejs Redis

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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
const {promisify} = require('util');
const each=(f)=>(o={})=> Object.entries(o).forEach(f)
const promisifyAll=(c)=>{
let f=([k,v])=>c.__proto__["_"+k]=promisify(v).bind(c)
each(f)(c.__proto__)
return c
}

const redis = require("redis");
const conn=()=>{
let client = redis.createClient();
promisifyAll(client)
return client
}

const cache=(k="",v="")=>{
let client=conn()
if (k && v) {
return client._hset("push",k,to_s(v))
}else if (k){
return client._hget("push",k,)
}else{
return client._hgetall('push')
}
}

const test=async ()=>{
let c=conn()
r=await c._set('foo','bar')
r=await c._get('foo')
r=await c._hset('test','ccc','dddee')
r=await c._hget('test','ccc')
r=await c._hdel('test','ccc')
r=await c._hvals('test')
r=await c._hkeys('test')
r=await c._hgetall('test')
r=await c._hlen('test')
kk=await c._hkeys('test').then(x=>)
kk.forEach(y=>client._hdel('test',y))
}

const test1=async()=>{
let c=conn()
var args = [ 'myzset', 1, 'one', 2, 'two', 3, 'three', 99, 'ninety-nine' ];
var args1 = [ 'myzset', '+inf', '-inf' ];
var max = 3, min = 1, offset = 1, count = 2;
var args2 = [ 'myzset', max, min, 'WITHSCORES', 'LIMIT', offset, count ];

r0=await c._zadd(args)
r1=await c._zrevrangebyscore(args1)
r2=await c._zrevrangebyscore(args2)
}



test=async ()=>{
r=await c._APPEND(...)
r=await c._ASKING(...)
r=await c._AUTH(...)
r=await c._BATCH(...)
r=await c._BGREWRITEAOF(...)
r=await c._BGSAVE(...)
r=await c._BITCOUNT(...)
r=await c._BITFIELD(...)
r=await c._BITOP(...)
r=await c._BITPOS(...)
r=await c._BLPOP(...)
r=await c._BRPOP(...)
r=await c._BRPOPLPUSH(...)
r=await c._BZPOPMAX(...)
r=await c._BZPOPMIN(...)
r=await c._CLIENT(...)
r=await c._CLUSTER(...)
r=await c._COMMAND(...)
r=await c._CONFIG(...)
r=await c._DBSIZE(...)
r=await c._DEBUG(...)
r=await c._DECR(...)
r=await c._DECRBY(...)
r=await c._DEL(...)
r=await c._DISCARD(...)
r=await c._DUMP(...)
r=await c._ECHO(...)
r=await c._EVAL(...)
r=await c._EVALSHA(...)
r=await c._EXEC(...)
r=await c._EXISTS(...)
r=await c._EXPIRE(...)
r=await c._EXPIREAT(...)
r=await c._FLUSHALL(...)
r=await c._FLUSHDB(...)
r=await c._GEOADD(...)
r=await c._GEODIST(...)
r=await c._GEOHASH(...)
r=await c._GEOPOS(...)
r=await c._GEORADIUS(...)
r=await c._GEORADIUSBYMEMBER(...)
r=await c._GEORADIUSBYMEMBER_RO(...)
r=await c._GEORADIUS_RO(...)
r=await c._GET(...)
r=await c._GETBIT(...)
r=await c._GETRANGE(...)
r=await c._GETSET(...)
r=await c._HDEL(...)
r=await c._HEXISTS(...)
r=await c._HGET(...)
r=await c._HGETALL(...)
r=await c._HINCRBY(...)
r=await c._HINCRBYFLOAT(...)
r=await c._HKEYS(...)
r=await c._HLEN(...)
r=await c._HMGET(...)
r=await c._HMSET(...)
r=await c._HOST:(...)
r=await c._HOST_(...)
r=await c._HSCAN(...)
r=await c._HSET(...)
r=await c._HSETNX(...)
r=await c._HSTRLEN(...)
r=await c._HVALS(...)
r=await c._INCR(...)
r=await c._INCRBY(...)
r=await c._INCRBYFLOAT(...)
r=await c._INFO(...)
r=await c._KEYS(...)
r=await c._LASTSAVE(...)
r=await c._LATENCY(...)
r=await c._LINDEX(...)
r=await c._LINSERT(...)
r=await c._LLEN(...)
r=await c._LOLWUT(...)
r=await c._LPOP(...)
r=await c._LPUSH(...)
r=await c._LPUSHX(...)
r=await c._LRANGE(...)
r=await c._LREM(...)
r=await c._LSET(...)
r=await c._LTRIM(...)
r=await c._MEMORY(...)
r=await c._MGET(...)
r=await c._MIGRATE(...)
r=await c._MODULE(...)
r=await c._MONITOR(...)
r=await c._MOVE(...)
r=await c._MSET(...)
r=await c._MSETNX(...)
r=await c._MULTI(...)
r=await c._OBJECT(...)
r=await c._PERSIST(...)
r=await c._PEXPIRE(...)
r=await c._PEXPIREAT(...)
r=await c._PFADD(...)
r=await c._PFCOUNT(...)
r=await c._PFDEBUG(...)
r=await c._PFMERGE(...)
r=await c._PFSELFTEST(...)
r=await c._PING(...)
r=await c._POST(...)
r=await c._PSETEX(...)
r=await c._PSUBSCRIBE(...)
r=await c._PSYNC(...)
r=await c._PTTL(...)
r=await c._PUBLISH(...)
r=await c._PUBSUB(...)
r=await c._PUNSUBSCRIBE(...)
r=await c._QUIT(...)
r=await c._RANDOMKEY(...)
r=await c._READONLY(...)
r=await c._READWRITE(...)
r=await c._RENAME(...)
r=await c._RENAMENX(...)
r=await c._REPLCONF(...)
r=await c._REPLICAOF(...)
r=await c._RESTORE(...)
r=await c._RESTORE-ASKING(...)
r=await c._RESTORE_ASKING(...)
r=await c._ROLE(...)
r=await c._RPOP(...)
r=await c._RPOPLPUSH(...)
r=await c._RPUSH(...)
r=await c._RPUSHX(...)
r=await c._SADD(...)
r=await c._SAVE(...)
r=await c._SCAN(...)
r=await c._SCARD(...)
r=await c._SCRIPT(...)
r=await c._SDIFF(...)
r=await c._SDIFFSTORE(...)
r=await c._SELECT(...)
r=await c._SET(...)
r=await c._SETBIT(...)
r=await c._SETEX(...)
r=await c._SETNX(...)
r=await c._SETRANGE(...)
r=await c._SHUTDOWN(...)
r=await c._SINTER(...)
r=await c._SINTERSTORE(...)
r=await c._SISMEMBER(...)
r=await c._SLAVEOF(...)
r=await c._SLOWLOG(...)
r=await c._SMEMBERS(...)
r=await c._SMOVE(...)
r=await c._SORT(...)
r=await c._SPOP(...)
r=await c._SRANDMEMBER(...)
r=await c._SREM(...)
r=await c._SSCAN(...)
r=await c._STRLEN(...)
r=await c._SUBSCRIBE(...)
r=await c._SUBSTR(...)
r=await c._SUNION(...)
r=await c._SUNIONSTORE(...)
r=await c._SWAPDB(...)
r=await c._SYNC(...)
r=await c._TIME(...)
r=await c._TOUCH(...)
r=await c._TTL(...)
r=await c._TYPE(...)
r=await c._UNLINK(...)
r=await c._UNSUBSCRIBE(...)
r=await c._UNWATCH(...)
r=await c._WAIT(...)
r=await c._WATCH(...)
r=await c._XACK(...)
r=await c._XADD(...)
r=await c._XCLAIM(...)
r=await c._XDEL(...)
r=await c._XGROUP(...)
r=await c._XINFO(...)
r=await c._XLEN(...)
r=await c._XPENDING(...)
r=await c._XRANGE(...)
r=await c._XREAD(...)
r=await c._XREADGROUP(...)
r=await c._XREVRANGE(...)
r=await c._XSETID(...)
r=await c._XTRIM(...)
r=await c._ZADD(...)
r=await c._ZCARD(...)
r=await c._ZCOUNT(...)
r=await c._ZINCRBY(...)
r=await c._ZINTERSTORE(...)
r=await c._ZLEXCOUNT(...)
r=await c._ZPOPMAX(...)
r=await c._ZPOPMIN(...)
r=await c._ZRANGE(...)
r=await c._ZRANGEBYLEX(...)
r=await c._ZRANGEBYSCORE(...)
r=await c._ZRANK(...)
r=await c._ZREM(...)
r=await c._ZREMRANGEBYLEX(...)
r=await c._ZREMRANGEBYRANK(...)
r=await c._ZREMRANGEBYSCORE(...)
r=await c._ZREVRANGE(...)
r=await c._ZREVRANGEBYLEX(...)
r=await c._ZREVRANGEBYSCORE(...)
r=await c._ZREVRANK(...)
r=await c._ZSCAN(...)
r=await c._ZSCORE(...)
r=await c._ZUNIONSTORE(...)
r=await c._append(...)
r=await c._asking(...)
r=await c._auth(...)
r=await c._batch(...)
r=await c._bgrewriteaof(...)
r=await c._bgsave(...)
r=await c._bitcount(...)
r=await c._bitfield(...)
r=await c._bitop(...)
r=await c._bitpos(...)
r=await c._blpop(...)
r=await c._brpop(...)
r=await c._brpoplpush(...)
r=await c._bzpopmax(...)
r=await c._bzpopmin(...)
r=await c._client(...)
r=await c._cluster(...)
r=await c._command(...)
r=await c._config(...)
r=await c._connection_gone(...)
r=await c._cork(...)
r=await c._create_stream(...)
r=await c._dbsize(...)
r=await c._debug(...)
r=await c._decr(...)
r=await c._decrby(...)
r=await c._del(...)
r=await c._discard(...)
r=await c._drain(...)
r=await c._dump(...)
r=await c._duplicate(...)
r=await c._echo(...)
r=await c._emit_idle(...)
r=await c._end(...)
r=await c._eval(...)
r=await c._evalsha(...)
r=await c._exec(...)
r=await c._exists(...)
r=await c._expire(...)
r=await c._expireat(...)
r=await c._flush_and_error(...)
r=await c._flushall(...)
r=await c._flushdb(...)
r=await c._geoadd(...)
r=await c._geodist(...)
r=await c._geohash(...)
r=await c._geopos(...)
r=await c._georadius(...)
r=await c._georadius_ro(...)
r=await c._georadiusbymember(...)
r=await c._georadiusbymember_ro(...)
r=await c._get(...)
r=await c._getbit(...)
r=await c._getrange(...)
r=await c._getset(...)
r=await c._handle_reply(...)
r=await c._hdel(...)
r=await c._hexists(...)
r=await c._hget(...)
r=await c._hgetall(...)
r=await c._hincrby(...)
r=await c._hincrbyfloat(...)
r=await c._hkeys(...)
r=await c._hlen(...)
r=await c._hmget(...)
r=await c._hmset(...)
r=await c._host:(...)
r=await c._host_(...)
r=await c._hscan(...)
r=await c._hset(...)
r=await c._hsetnx(...)
r=await c._hstrlen(...)
r=await c._hvals(...)
r=await c._incr(...)
r=await c._incrby(...)
r=await c._incrbyfloat(...)
r=await c._info(...)
r=await c._initialize_retry_vars(...)
r=await c._internal_send_command(...)
r=await c._keys(...)
r=await c._lastsave(...)
r=await c._latency(...)
r=await c._lindex(...)
r=await c._linsert(...)
r=await c._llen(...)
r=await c._lolwut(...)
r=await c._lpop(...)
r=await c._lpush(...)
r=await c._lpushx(...)
r=await c._lrange(...)
r=await c._lrem(...)
r=await c._lset(...)
r=await c._ltrim(...)
r=await c._memory(...)
r=await c._mget(...)
r=await c._migrate(...)
r=await c._module(...)
r=await c._monitor(...)
r=await c._move(...)
r=await c._mset(...)
r=await c._msetnx(...)
r=await c._multi(...)
r=await c._object(...)
r=await c._on_connect(...)
r=await c._on_error(...)
r=await c._on_info_cmd(...)
r=await c._on_ready(...)
r=await c._persist(...)
r=await c._pexpire(...)
r=await c._pexpireat(...)
r=await c._pfadd(...)
r=await c._pfcount(...)
r=await c._pfdebug(...)
r=await c._pfmerge(...)
r=await c._pfselftest(...)
r=await c._ping(...)
r=await c._post(...)
r=await c._psetex(...)
r=await c._psubscribe(...)
r=await c._psync(...)
r=await c._pttl(...)
r=await c._publish(...)
r=await c._pubsub(...)
r=await c._punsubscribe(...)
r=await c._quit(...)
r=await c._randomkey(...)
r=await c._readonly(...)
r=await c._readwrite(...)
r=await c._ready_check(...)
r=await c._rename(...)
r=await c._renamenx(...)
r=await c._replconf(...)
r=await c._replicaof(...)
r=await c._restore(...)
r=await c._restore-asking(...)
r=await c._restore_asking(...)
r=await c._return_error(...)
r=await c._return_reply(...)
r=await c._role(...)
r=await c._rpop(...)
r=await c._rpoplpush(...)
r=await c._rpush(...)
r=await c._rpushx(...)
r=await c._sadd(...)
r=await c._save(...)
r=await c._scan(...)
r=await c._scard(...)
r=await c._script(...)
r=await c._sdiff(...)
r=await c._sdiffstore(...)
r=await c._select(...)
r=await c._sendCommand(...)
r=await c._send_command(...)
r=await c._send_offline_queue(...)
r=await c._set(...)
r=await c._setbit(...)
r=await c._setex(...)
r=await c._setnx(...)
r=await c._setrange(...)
r=await c._shutdown(...)
r=await c._sinter(...)
r=await c._sinterstore(...)
r=await c._sismember(...)
r=await c._slaveof(...)
r=await c._slowlog(...)
r=await c._smembers(...)
r=await c._smove(...)
r=await c._sort(...)
r=await c._spop(...)
r=await c._srandmember(...)
r=await c._srem(...)
r=await c._sscan(...)
r=await c._strlen(...)
r=await c._subscribe(...)
r=await c._substr(...)
r=await c._sunion(...)
r=await c._sunionstore(...)
r=await c._swapdb(...)
r=await c._sync(...)
r=await c._time(...)
r=await c._touch(...)
r=await c._ttl(...)
r=await c._type(...)
r=await c._uncork(...)
r=await c._unlink(...)
r=await c._unref(...)
r=await c._unsubscribe(...)
r=await c._unwatch(...)
r=await c._wait(...)
r=await c._warn(...)
r=await c._watch(...)
r=await c._write(...)
r=await c._write_buffers(...)
r=await c._write_strings(...)
r=await c._xack(...)
r=await c._xadd(...)
r=await c._xclaim(...)
r=await c._xdel(...)
r=await c._xgroup(...)
r=await c._xinfo(...)
r=await c._xlen(...)
r=await c._xpending(...)
r=await c._xrange(...)
r=await c._xread(...)
r=await c._xreadgroup(...)
r=await c._xrevrange(...)
r=await c._xsetid(...)
r=await c._xtrim(...)
r=await c._zadd(...)
r=await c._zcard(...)
r=await c._zcount(...)
r=await c._zincrby(...)
r=await c._zinterstore(...)
r=await c._zlexcount(...)
r=await c._zpopmax(...)
r=await c._zpopmin(...)
r=await c._zrange(...)
r=await c._zrangebylex(...)
r=await c._zrangebyscore(...)
r=await c._zrank(...)
r=await c._zrem(...)
r=await c._zremrangebylex(...)
r=await c._zremrangebyrank(...)
r=await c._zremrangebyscore(...)
r=await c._zrevrange(...)
r=await c._zrevrangebylex(...)
r=await c._zrevrangebyscore(...)
r=await c._zrevrank(...)
r=await c._zscan(...)
r=await c._zscore(...)
r=await c._zunionstore(...)'
}
1
2
3
4
5
6
7
8
https://github.com/NodeRedis/node_redis
client.set(k,v,redis.print)
client.hset(key, "x", "1", redis.print);
client.hdel('ccc','zzz')
client.hmset([key, v], console.log);
client.hkeys(key,console.log)
client.hvals(key,console.log)
client.hgetall(key,console.log)

javascript async function test_save_kv(){ let k,v,r; k="ccc" v=[1,2,3] r=await localforage.setItem(k,v) r=await localforage.getItem(k) r=await localforage.removeItem(k) r=await localforage.key(0) //'ccc' r=await localforage.keys() r=await localforage.iterate(console.log) r=await localforage.length() r=await localforage.clear() }

https://rxjs.dev/api/operators/

s=fromEvent(document, ‘click’)

interval(1000)

from([1,2,3])
.pipe(map(x=>x+1))
.subscribe(console.log)

s
.pipe(
throttleTime(1000),
scan(count => count + 1, 0)
)
.subscribe(count => console.log(Clicked ${count} times));

s
.pipe(
map(ev => interval(Math.random() * 2000).pipe(take(3))),
take(2)
)
.pipe(
combineAll()
)
.subscribe(x => console.log(x))

s
.pipe(map(e=>”eee”))
.subscribe(console.log)

s
.pipe(take(5))
.subscribe(console.log)

of(1,2,3)
.pipe(map(x=>x+10),toArray())
.subscribe(say(‘zzz’))

from([1,2,3])
.pipe(
filter(x=>x>1),
map(x=>x+10),
scan((a,b)=>a+b,0),
toArray()
)
.subscribe(say(‘zzz’))

f=() => Math.random() * 2000

d=d3.range(100)
from(d)
.pipe(
//mapTo(f()),
map(f),
//scan((acc, one) => acc + one, 0),
scan((acc, one) =>[…acc,one] , []),
toArray(),
)
.subscribe(x => console.log(x))

s
.pipe(first(ev => ev.target.tagName === ‘DIV’))
.subscribe(console.log)

from(d3.range(100))
.pipe(last((v,i)=>i<10))
.subscribe(say(‘zzz’))

a=of(
{id: 1, name: ‘JavaScript’},
{id: 2, name: ‘Parcel’},
{id: 2, name: ‘webpack’},
{id: 1, name: ‘TypeScript’},
{id: 3, name: ‘TSLint’}
)

a.pipe(
groupBy((x,i)=>x.name),
mergeMap(
x=>x.pipe(
reduce((a,b)=>[…a,b],[])
)
)
)
.subscribe(say(‘dd’))

of(10)
.pipe(
expand(x=>of(x+10)),
take(20)
)
.subscribe(say(‘ddd’))

range(10)
.pipe(
mapTo(1),
mergeScan((acc, one) => of(acc + one), 0),
)
.subscribe(say(‘ddd’))

ss= x => interval(1000)
.pipe(
map(i => x+i)
)

of(‘a’, ‘b’, ‘c’)
.pipe(
mergeMap(ss),
)
.subscribe(console.log)

s
.pipe(bufferCount(5))
.subscribe(console.log)

//交错
s.
.pipe(bufferCount(2, 1))
.subscribe(x => console.log(x))

interval(1000)
.pipe(buffer(s))
.subscribe(say(‘buffer’))

s
.pipe(
mapTo(1),
bufferTime(1000),

)
.subscribe(say(‘buffertime’))

s.pipe(
mapTo(1),
bufferTime(2000, 5000),
)
.subscribe(say(‘bbbb’));

t=()=>1000 + Math.random() * 4000

s.pipe(
mapTo(1),
bufferWhen(() =>
interval(1e4)
)
)
.subscribe(say(‘when’));

s.pipe(
windowCount(3),
map(win => win.pipe(skip(1))),
mergeAll()
)
.subscribe(say(‘wincount’))

s.pipe(
windowCount(2, 3),
mergeAll(),
)
.subscribe(say(‘2,3’))

s.pipe(
operators.window(interval(1000)),
map(win => win.pipe(take(2))),
mergeAll(),
)
.subscribe(say(“window”))

s
.pipe(pairwise())
.pipe(
map(pair => {
const x0 = pair[0].clientX;
const y0 = pair[0].clientY;
const x1 = pair[1].clientX;
const y1 = pair[1].clientY;
return Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));
}),
)
.subscribe(say(‘distance’))

s
.pipe(partition(ev => ev.target.tagName === ‘DIV’))
.map((z,i)=>z.subscribe(say(‘partition’+i)))

f=val => val >5 ? throwError(‘Error!’) :of(val)

f=async ()=>{
r=await fetch(‘/abc’)
return r.ok ? of(123) : throwError(‘ddd’)
}

interval(1000)
.pipe(
mergeMap(f),
retry(2)
)
.subscribe({
next: say(‘next’),
error: say(‘error’),
})

of(1, 1, 2, 2, 2, 1, 2, 3, 4, 3, 2, 1).pipe(
distinct(),
)
.subscribe(x => console.log(x))

of(
{ age: 4, name: ‘Foo’},
{ age: 7, name: ‘Bar’},
{ age: 5, name: ‘Foo’},
).pipe(
distinct(p => p.name), //整体不重复
// distinctUntilChanged((p,q) => p.name === q.name), //相邻不重复
// distinctUntilKeyChanged(‘name’),
// distinctUntilKeyChanged(‘name’, (x,y) => x.substring(0, 3) === y.substring(0, 3)),
)
.subscribe(x => console.log(x));

of(1, 1, 2, 2, 2, 1, 1, 2, 3, 3, 4).pipe(
distinctUntilChanged(),
)
.subscribe(x => console.log(x)); // 1, 2, 1, 2, 3, 4

interval(1000)
.pipe(sample(s))
.subscribe(say(‘sample’))

s
.pipe(
audit(ev => interval(1000))
)
.subscribe(say(‘audit’))

s.pipe(
debounce(() => interval(1000))
)
.subscribe(say(‘debounce’))

s
.pipe(
mapTo(of(123)),
throttle(ev => interval(1000)),
mergeAll(),
)
.subscribe(say(‘throttle’))

s
.pipe(map((ev) => interval(1000)))
.pipe(mergeAll())
.subscribe(say(‘mergeAll’))

s
.pipe(
map((ev) => interval(1000).pipe(take(10))),
)
.pipe(mergeAll(2));
.subscribe(say(‘mergeAll(2)’))

s.pipe(
map(ev => interval(1000).pipe(take(4))),
)
.pipe(concatAll())
.subscribe(say(‘concatAll’))

s
.pipe(tap(say(‘click’)))
.pipe(map((ev) => interval(1000)))
.pipe(
switchAll()
)
.subscribe(say(‘switchall’))

of(1, 2, 3)
.pipe(switchMap(x=> of(x, x ** 2, x ** 3)))
.subscribe(say(‘switchMap’))

s
.pipe(
switchMap((ev) => interval(1000))
)
.subscribe(say(‘switchMap’))

s.pipe(
map((ev) => interval(1000).pipe(take(5))),
)
.pipe(exhaust())
.subscribe(say(‘exhaust’))

s.pipe(
concatMapTo(interval(1000).pipe(take(4))),
)
.subscribe(say(‘concatmap’))

s.pipe(
map(ev => interval(Math.random() * 2000).pipe(take(3))),
take(2)
)
.pipe(
combineAll()
)
.subscribe(say(‘combineall’))

s
.pipe(sampleTime(1000))
.subscribe(say(‘st’))

s
.pipe(auditTime(1000))
.subscribe(say(‘at’))

s
.pipe(debounceTime(1000))
.subscribe(say(‘dt’))

s
.pipe(throttleTime(1000))
.subscribe(say(‘tt’))

s
.pipe(
throttleTime(400, asyncScheduler,
{
leading: false,
trailing: true
}
)
)
.subscribe(say(‘tt1’))

s
.pipe(delay(1000))
.subscribe(say(‘delay’))

const date = new Date(‘March 15, 2050 12:00:00’)

s
.pipe(delay(date))
.subscribe(say(‘future’))

s.pipe(
delayWhen(event => interval(Math.random() * 5000)),
)
.subscribe(say(“delay when”))

of(‘a’, ‘b’, ‘c’)
.pipe(
mergeMap(x => interval(1000).pipe(map(i => x+i))),
)
.subscribe(say(‘mm’))

s
.pipe(find(ev => ev.target.tagName === ‘DIV’))
.subscribe(x => console.log(x))

s
.pipe(findIndex(ev => ev.target.tagName === ‘DIV’))
.subscribe(x => console.log(x))

interval(1000)
.pipe(timeinterval())
.subscribe(
value => console.log(value),
err => console.log(err),
);

interval(1000)
.pipe(timeout(900))
.subscribe(
value => console.log(value),
err => console.log(err),
)

TEST_U='https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/wp-content/themes/Hax/img/dino.svg' TEST_DB= { db_name:"test", table_name:"test", dbVersion:1, } say=(x='')=>(y="")=>console.log(x,y); show_img=(imgFile)=>{ var imgURL = URL.createObjectURL(imgFile); dom=document.getElementById("elephant") dom.setAttribute("src", imgURL); URL.revokeObjectURL(imgURL); } find_img=({db,table_name})=>{ var transaction = db.transaction([table_name], IDBTransaction.READ_WRITE); transaction.objectStore(table_name).get("image").onsuccess = function (event) { var imgFile = event.target.result; console.log("Got elephant!" + imgFile); } } // insert save_img = function ({db,table_name},blob) { console.log("saving",blob); var transaction = db.transaction([table_name], 'readwrite'); // IDBTransaction.READ_WRITE var put = transaction.objectStore(table_name).put(blob, "image"); } // get get_img=(u)=>fetch(u).then(x=>x.blob()) save_img1=async(a,u)=>save_img(a,await get_img(u)) insert=({db,table_name},d={})=>{ var request = db.transaction([table_name], 'readwrite') .objectStore(table_name) .add(d); request.onsuccess = say('insert success') request.onerror = say('insert fail') } find_by_index=({db,table_name},query={"name":"ccc"})=>{ var transaction = db.transaction([table_name], 'readonly'); var store = transaction.objectStore(table_name); let [k,v]=Object.entries(query) var index = store.index(k) var request = index.get(v) request.onsuccess = function (e) { var result = e.target.result; console.log(result) } } find= ({db,table_name},id=1)=> { var transaction = db.transaction(table_name); var objectStore = transaction.objectStore(table_name); var request = objectStore.get(id); request.onerror = say('err'); request.onsuccess = function( event) { let r=request.result ||{} console.log(r) }; } find_all=({db,table_name})=> { var objectStore = db.transaction(table_name).objectStore(table_name); objectStore.openCursor().onsuccess = function (event) { var cursor = event.target.result; let r=[] if (cursor) { console.log(cursor) r.push(cursor) cursor.continue(); } else { console.log('没有更多数据了!'); } console.log(r) } } remove=({db,table_name},id)=> { var request = db.transaction([table_name], 'readwrite') .objectStore(table_name) .delete(id); request.onsuccess = say('removed') } update= ({db,table_name},d={ id: 1, name: '李四', age: 35, email: 'lisi@example.com' })=> { var request = db.transaction([table_name], 'readwrite') .objectStore(table_name) .put(d); request.onsuccess = say('updated') request.onerror = say('update failed') } // (TEST_U) run=(fn=save_img1,...arg)=>{ config=TEST_DB let { db_name,table_name,dbVersion,cb }=config var request = indexedDB.open(db_name, dbVersion); request.onsuccess = function (event) { db = request.result; db.onerror = say('fail open') fn({...config,db},...arg) } request.onupgradeneeded = function (event) { db=event.target.result if ( !db.objectStoreNames.contains(table_name) ){ let o={ keyPath: 'id', autoIncrement: true , } var objectStore = db.createObjectStore(table_name,o) objectStore.createIndex('name', 'name', { unique: false }); } } request.onerror =say('error') } run(insert,{x:1,y:2,z:3})
class Db{ openDB(){ } getByIndex: async function (table, keyValue, indexCursor) { try { let db = await this.openDB(); let store = db .transaction(table.name, 'readonly') .objectStore(table.name); let keyRng = IDBKeyRange.only(keyValue); let request = store.index(indexCursor).openCursor(keyRng); let data = []; return new Promise(resolve => { request.onerror =reject; request.onsuccess = function (event) { var cursor = event.target.result; if (cursor) { console.log(cursor.value); data.push(cursor.value); cursor.continue(); } }; resolve(data); }) } catch (error) { return Promise.reject(error); } } }
[["Luigi Pirandello","Ciascuno a suo modo","...","http://www.liberliber.it/mediateca/libri/p/pirandello/ciascuno_a_suo_modo/pdf/pirandello_ciascuno_a_suo_modo.pdf"],["Luigi Pirandello","Così è (se vi pare)","...","http://www.liberliber.it/mediateca/libri/p/pirandello/cosi_e_se_vi_pare_1918/pdf/cosi_e_p.pdf"],["Luigi Pirandello","Donna Mimma","...","http://www.liberliber.it/mediateca/libri/p/pirandello/donna_mimma/pdf/donna__p.pdf"],["Luigi Pirandello","Enrico IV","...","http://www.liberliber.it/mediateca/libri/p/pirandello/enrico_iv/pdf/pirandello_enrico_iv.pdf"],["Luigi Pirandello","L'esclusa","...","http://www.liberliber.it/mediateca/libri/p/pirandello/l_esclusa/pdf/l_escl_p.pdf"],["Luigi Pirandello","Il fu Mattia Pascal","...","http://www.liberliber.it/mediateca/libri/p/pirandello/il_fu_mattia_pascal/pdf/il_fu__p.pdf"],["Luigi Pirandello","La giara","...","http://www.liberliber.it/mediateca/libri/p/pirandello/la_giara/pdf/la_gia_p.pdf"],["Luigi Pirandello","Una giornata","...","http://www.liberliber.it/mediateca/libri/p/pirandello/una_giornata/pdf/una_gi_p.pdf"],["Luigi Pirandello","Il giuoco delle parti","...","http://www.liberliber.it/mediateca/libri/p/pirandello/il_giuoco_delle_parti/pdf/il_giu_p.pdf"],["Luigi Pirandello","Giustino Roncella nato Boggiòlo","...","http://www.liberliber.it/mediateca/libri/p/pirandello/giustino_roncella_nato_boggiolo/pdf/giusti_p.pdf"],["Luigi Pirandello","In silenzio","...","http://www.liberliber.it/mediateca/libri/p/pirandello/in_silenzio/pdf/in_sil_p.pdf"],["Luigi Pirandello","La morsa","...","http://www.liberliber.it/mediateca/libri/p/pirandello/la_morsa/pdf/pirandello_la_morsa.pdf"],["Luigi Pirandello","La mosca","...","http://www.liberliber.it/mediateca/libri/p/pirandello/la_mosca/pdf/la_mos_p.pdf"],["Luigi Pirandello","Novelle per un anno","...","http://www.liberliber.it/mediateca/libri/p/pirandello/novelle_per_un_anno/pdf/novell_p.pdf"],["Luigi Pirandello","La patente","...","http://www.liberliber.it/mediateca/libri/p/pirandello/la_patente/pdf/la_pat_p.pdf"],["Luigi Pirandello","Il piacere dell'onestà","...","http://www.liberliber.it/mediateca/libri/p/pirandello/il_piacere_dell_onesta/pdf/il_pia_p.pdf"],["Luigi Pirandello","Quaderni di Serafino Gubbio operatore","...","http://www.liberliber.it/mediateca/libri/p/pirandello/quaderni_di_serafino_gubbio_operatore/pdf/quader_p.pdf"],["Luigi Pirandello","Quando si è qualcuno","...","http://www.liberliber.it/mediateca/libri/p/pirandello/quando_si_e_qualcuno/pdf/pirandello_quando_si_e_qualcuno.pdf"],["Luigi Pirandello","Scialle nero","...","http://www.liberliber.it/mediateca/libri/p/pirandello/scialle_nero/pdf/sciall_p.pdf"],["Luigi Pirandello","Sei personaggi in cerca d' autore","...","http://www.liberliber.it/mediateca/libri/p/pirandello/sei_personaggi_in_cerca_d_autore/pdf/sei_pe_p.pdf"],["Luigi Pirandello","Suo marito","...","http://www.liberliber.it/mediateca/libri/p/pirandello/suo_marito/pdf/suo_ma_p.pdf"],["Luigi Pirandello","Il turno","...","http://www.liberliber.it/mediateca/libri/p/pirandello/il_turno/pdf/il_tur_p.pdf"],["Luigi Pirandello","Tutt'e tre","...","http://www.liberliber.it/mediateca/libri/p/pirandello/tutt_e_tre/pdf/tutt_e_p.pdf"],["Luigi Pirandello","Tutte le poesie","...","http://www.liberliber.it/mediateca/libri/p/pirandello/tutte_le_poesie/pdf/pirandello_tutte_le_poesie.pdf"],["Luigi Pirandello","Uno, nessuno e centomila","...","http://www.liberliber.it/mediateca/libri/p/pirandello/uno_nessuno_e_centomila/pdf/pirandello_uno_nessuno.pdf"],["Luigi Pirandello","L'uomo dal fiore in bocca","...","http://www.liberliber.it/mediateca/libri/p/pirandello/l_uomo_dal_fiore_in_bocca/pdf/l_uomo_p.pdf"],["Luigi Pirandello","L'uomo solo","...","http://www.liberliber.it/mediateca/libri/p/pirandello/l_uomo_solo/pdf/l_uomo_p.pdf"],["Luigi Pirandello","I vecchi e i giovani","...","http://www.liberliber.it/mediateca/libri/p/pirandello/i_vecchi_e_i_giovani/pdf/i_vecc_p.pdf"],["Luigi Pirandello","La vita nuda","...","http://www.liberliber.it/mediateca/libri/p/pirandello/la_vita_nuda/pdf/la_vit_p.pdf"],["Giovanni Verga","Cavalleria rusticana","...","http://www.liberliber.it/mediateca/libri/v/verga/cavalleria_rusticana/pdf/cavall_p.pdf"],["Giovanni Verga","Eros","...","http://www.liberliber.it/mediateca/libri/v/verga/eros/pdf/eros_p.pdf"],["Giovanni Verga","Eva","...","http://www.liberliber.it/mediateca/libri/v/verga/eva/pdf/eva_p.pdf"],["Giovanni Verga","La lupa","...","http://www.liberliber.it/mediateca/libri/v/verga/la_lupa/pdf/la_lup_p.pdf"],["Giovanni Verga","I malavoglia","...","http://www.liberliber.it/mediateca/libri/v/verga/i_malavoglia/pdf/i_mala_p.pdf"],["Giovanni Verga","Il marito di Elena","...","http://www.liberliber.it/mediateca/libri/v/verga/il_marito_di_elena/pdf/il_mar_p.pdf"],["Giovanni Verga","Mastro Don Gesualdo","...","http://www.liberliber.it/mediateca/libri/v/verga/mastro_don_gesualdo/pdf/mastro_p.pdf"],["Giovanni Verga","I nuovi tartufi: commedia in quattro atti","...","http://www.liberliber.it/mediateca/libri/v/verga/i_nuovi_tartufi/pdf/i_nuov_p.pdf"],["Giovanni Verga","Una peccatrice","...","http://www.liberliber.it/mediateca/libri/v/verga/una_peccatrice/pdf/una_pe_p.pdf"],["Giovanni Verga","Rose caduche","...","http://www.liberliber.it/mediateca/libri/v/verga/rose_caduche/pdf/rose_c_p.pdf"],["Giovanni Verga","Storia di una capinera","...","http://www.liberliber.it/mediateca/libri/v/verga/storia_di_una_capinera/pdf/storia_p.pdf"],["Giovanni Verga","Teatro","...","http://www.liberliber.it/mediateca/libri/v/verga/teatro/pdf/teatro_p.pdf"],["Giovanni Verga","Tigre reale","...","http://www.liberliber.it/mediateca/libri/v/verga/tigre_reale/pdf/tigre__p.pdf"],["Giovanni Verga","Tutte le novelle","...","http://www.liberliber.it/mediateca/libri/v/verga/tutte_le_novelle/pdf/tutte__p.pdf"],["Giovanni Verga","Convivio","...","http://www.liberliber.it/mediateca/libri/a/alighieri/convivio_edizione_busnelli_vandelli/pdf/conviv_p.pdf"],["Giovanni Verga","De Vulgari Eloquentia","...","http://www.liberliber.it/mediateca/libri/a/alighieri/de_vulgari_eloquentia/pdf/de_vul_p.pdf"],["Giovanni Verga","Detto d'amore","...","http://www.liberliber.it/mediateca/libri/a/alighieri/detto_d_amore/pdf/detto__p.pdf"],["Giovanni Verga","La Divina Commedia","...","http://www.liberliber.it/mediateca/libri/a/alighieri/la_divina_commedia/pdf/la_div_p.pdf"],["Giovanni Verga","Egloghe","...","http://www.liberliber.it/mediateca/libri/a/alighieri/egloghe/pdf/eglogh_p.pdf"],["Giovanni Verga","Epistole","...","http://www.liberliber.it/mediateca/libri/a/alighieri/epistole/pdf/episto_p.pdf"],["Giovanni Verga","Il fiore","...","http://www.liberliber.it/mediateca/libri/a/alighieri/il_fiore/pdf/il_fio_p.pdf"],["Giovanni Verga","Monarchia","...","http://www.liberliber.it/mediateca/libri/a/alighieri/monarchia/pdf/monarc_p.pdf"],["Giovanni Verga","Quaestio de aqua et de terra","...","http://www.liberliber.it/mediateca/libri/a/alighieri/quaestio_de_aqua_et_de_terra/pdf/quaest_p.pdf"],["Giovanni Verga","Vita nuova","...","http://www.liberliber.it/mediateca/libri/a/alighieri/vita_nuova_edizione_barbera/pdf/vita_n_p.pdf"],["Alessandro Manzoni","Adelchi","...","http://www.liberliber.it/mediateca/libri/m/manzoni/adelchi/pdf/adelch_p.pdf"],["Alessandro Manzoni","Il cinque maggio","...","http://www.liberliber.it/mediateca/libri/m/manzoni/il_cinque_maggio/pdf/il_cin_p.pdf"],["Alessandro Manzoni","Il conte di Carmagnola","...","http://www.liberliber.it/mediateca/libri/m/manzoni/il_conte_di_carmagnola/pdf/il_con_p.pdf"],["Alessandro Manzoni","Del romanzo storico e, in genere, de i componimenti misti di storia e d'invenzione","...","http://www.liberliber.it/mediateca/libri/m/manzoni/del_romanzo_storico_e_in_genere_de_i_componimenti_misti_etc/pdf/del_ro_p.pdf"],["Alessandro Manzoni","Del trionfo della libertà","...","http://www.liberliber.it/mediateca/libri/m/manzoni/del_trionfo_della_liberta/pdf/del_tr_p.pdf"],["Alessandro Manzoni","Fermo e Lucia","...","http://www.liberliber.it/mediateca/libri/m/manzoni/fermo_e_lucia/pdf/fermo__p.pdf"],["Alessandro Manzoni","I promessi sposi","...","http://www.liberliber.it/mediateca/libri/m/manzoni/i_promessi_sposi/pdf/i_prom_p.pdf"],["Alessandro Manzoni","Storia della colonna infame","...","http://www.liberliber.it/mediateca/libri/m/manzoni/storia_della_colonna_infame/pdf/storia_p.pdf"],["Alessandro Manzoni","Tutte le poesie","...","http://www.liberliber.it/mediateca/libri/m/manzoni/tutte_le_poesie/pdf/tutte__p.pdf"],["William Shakespeare","Amleto","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/amleto/pdf/amleto_p.pdf"],["William Shakespeare","Antonio e Cleopatra","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/antonio_e_cleopatra/pdf/antoni_p.pdf"],["William Shakespeare","La bisbetica addomesticata","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/la_bisbetica_addomesticata/pdf/la_bis_p.pdf"],["William Shakespeare","Cimbelino","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/cimbelino/pdf/cimbel_p.pdf"],["William Shakespeare","La commedia degli equivoci","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/la_commedia_degli_equivoci/pdf/la_com_p.pdf"],["William Shakespeare","Come vi piaccia","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/come_vi_piaccia/pdf/come_v_p.pdf"],["William Shakespeare","Coriolano","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/coriolano/pdf/coriol_p.pdf"],["William Shakespeare","La dodicesima notte","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/la_dodicesima_notte/pdf/dodice_p.pdf"],["William Shakespeare","I due gentiluoini di Verona","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/i_due_gentiluomini_di_verona/pdf/i_due__p.pdf"],["William Shakespeare","Enrico IV, parte I e II","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/enrico_iv/pdf/enrico_p.pdf"],["William Shakespeare","Enrico V","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/enrico_v/pdf/enrico_p.pdf"],["William Shakespeare","Le gaie mogli di Windsor","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/le_gaie_mogli_di_windsor/pdf/le_gai_p.pdf"],["William Shakespeare","Giulio Cesare","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/giulio_cesare/pdf/giulio_p.pdf"],["William Shakespeare","Macbeth","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/macbeth/pdf/macbet_p.pdf"],["William Shakespeare","Il mercante di venezia","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/il_mercante_di_venezia/pdf/il_mer_p.pdf"],["William Shakespeare","Misura per misura","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/misura_per_misura/pdf/misura_p.pdf"],["William Shakespeare","Otello","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/otello/pdf/otello_p.pdf"],["William Shakespeare","Pene d'amore perdute","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/pene_d_amore_perdute/pdf/pene_d_p.pdf"],["William Shakespeare","Pericle principe di Tiro","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/pericle_principe_di_tiro/pdf/pericl_p.pdf"],["William Shakespeare","Il racconto d'inverno","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/il_racconto_d_inverno/pdf/il_rac_p.pdf"],["William Shakespeare","Re Enrico VI. Prima Parte","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/re_enrico_vi_prima_parte/pdf/re_enr_p.pdf"],["William Shakespeare","Re Enrico VI. Seconda Parte","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/re_enrico_vi_seconda_parte/pdf/re_enr_p.pdf"],["William Shakespeare","Re Enrico VI. Terza Parte","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/re_enrico_vi_terza_parte/pdf/re_enr_p.pdf"],["William Shakespeare","Re Enrico VIII","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/re_enrico_viii/pdf/re_enr_p.pdf"],["William Shakespeare","Re Giovanni","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/re_giovanni/pdf/re_gio_p.pdf"],["William Shakespeare","Re Lear","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/re_lear/pdf/re_lea_p.pdf"],["William Shakespeare","Riccardo II","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/riccardo_ii/pdf/riccar_p.pdf"],["William Shakespeare","Riccardo III","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/riccardo_iii/pdf/riccar_p.pdf"],["William Shakespeare","Romeo e Giulietta","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/romeo_e_giulietta/pdf/romeo__p.pdf"],["William Shakespeare","Sogno di una notte di mezza estate","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/sogno_di_una_notte_di_mezza_estate/pdf/sognod_p.pdf"],["William Shakespeare","Tanto trambusto per nulla","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/tanto_trambusto_per_nulla/pdf/tantot_p.pdf"],["William Shakespeare","La Tempesta","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/la_tempesta/pdf/la_tem_p.pdf"],["William Shakespeare","Timone di Atene","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/timone_di_atene/pdf/timone_p.pdf"],["William Shakespeare","Tito Andronico","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/tito_andronico/pdf/tito_a_p.pdf"],["William Shakespeare","Troilo e Cressida","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/troilo_e_cressida/pdf/troilo_p.pdf"],["William Shakespeare","Tutto è bene quel che finisce bene","...","http://www.liberliber.it/mediateca/libri/s/shakespeare/tutto_e_bene_quel_che_finisce_bene/pdf/tutto__p.pdf"],["Omero","Iliade","...","http://www.liberliber.it/mediateca/libri/h/homerus/iliade/pdf/iliade_p.pdf"],["Omero","Odissea","...","http://www.liberliber.it/mediateca/libri/h/homerus/odissea/pdf/odisse_p.pdf"],["Ugo Foscolo","Ajace","...","http://www.liberliber.it/mediateca/libri/f/foscolo/ajace/pdf/ajace_p.pdf"],["Ugo Foscolo","Dei Sepolcri","...","http://www.liberliber.it/mediateca/libri/f/foscolo/dei_sepolcri/pdf/dei_se_p.pdf"],["Ugo Foscolo","Dell'origine e dell'ufficio della letteratura. Orazione","...","http://www.liberliber.it/mediateca/libri/f/foscolo/dell_origine_e_dell_ufficio_della_letteratura_etc/pdf/dell_o_p.pdf"],["Ugo Foscolo","Edippo","...","http://www.liberliber.it/mediateca/libri/f/foscolo/edippo/pdf/edippo_p.pdf"],["Ugo Foscolo","Frammenti di un romanzo autobiografico","...","http://www.liberliber.it/mediateca/libri/f/foscolo/frammenti_di_un_romanzo_autobiografico/pdf/framme_p.pdf"],["Ugo Foscolo","Le Grazie","...","http://www.liberliber.it/mediateca/libri/f/foscolo/le_grazie/pdf/le_gra_p.pdf"],["Ugo Foscolo","Notizie intorno a Didimo Chierico ","...","http://www.liberliber.it/mediateca/libri/f/foscolo/notizia_intorno_a_didimo_chierico/pdf/notizi_p.pdf"],["Ugo Foscolo","Ricciarda","...","http://www.liberliber.it/mediateca/libri/f/foscolo/ricciarda/pdf/riccia_p.pdf"],["Ugo Foscolo","Saggi sopra il Petrarca","...","http://www.liberliber.it/mediateca/libri/f/foscolo/saggi_sopra_il_petrarca/pdf/saggi__p.pdf"],["Ugo Foscolo","Sonetti","...","http://www.liberliber.it/mediateca/libri/f/foscolo/sonetti/pdf/sonett_p.pdf"],["Ugo Foscolo","Sulla lingua italiana. Discorsi sei","...","http://www.liberliber.it/mediateca/libri/f/foscolo/sulla_lingua_italiana_discorsi_sei/pdf/sulla__p.pdf"],["Ugo Foscolo","Ultime lettere di Jacopo Ortis","...","http://www.liberliber.it/mediateca/libri/f/foscolo/ultime_lettere_di_jacopo_ortis/pdf/ultime_p.pdf"],["Giacomo Leopardi","Appressamento della morte","...","http://www.liberliber.it/mediateca/libri/l/leopardi/appressamento_della_morte/pdf/appres_p.pdf"],["Giacomo Leopardi","Canti","...","http://www.liberliber.it/mediateca/libri/l/leopardi/canti/pdf/canti_p.pdf"],["Giacomo Leopardi","Discorso sopra la Batracomiomachia","...","http://www.liberliber.it/mediateca/libri/l/leopardi/discorso_sopra_la_batracomiomachia/pdf/discor_p.pdf"],["Giacomo Leopardi","Discorso sopra lo stato presente dei costumi degl'Italiani","...","http://www.liberliber.it/mediateca/libri/l/leopardi/discorso_sopra_lo_stato_presente_dei_costumi_degl_italiani/pdf/discor_p.pdf"],["Giacomo Leopardi","Guerra de' topi e delle rane (1821-1822)","...","http://www.liberliber.it/mediateca/libri/l/leopardi/guerra_de_topi_e_delle_rane_1821_1822/pdf/guerra_p.pdf"],["Giacomo Leopardi","La guerra dei topi e delle rane. Poema (1815)","...","http://www.liberliber.it/mediateca/libri/l/leopardi/la_guerra_dei_topi_e_delle_rane_poema_1815/pdf/la_gue_p.pdf"],["Giacomo Leopardi","Guerra dei topi e delle rane (1826)","...","http://www.liberliber.it/mediateca/libri/l/leopardi/guerra_dei_topi_e_delle_rane_1826/pdf/guerra_p.pdf"],["Giacomo Leopardi","L'infinito","...","http://www.liberliber.it/mediateca/libri/l/leopardi/l_infinito/pdf/l_infi_p.pdf"],["Giacomo Leopardi","Operette morali","...","http://www.liberliber.it/mediateca/libri/l/leopardi/operette_morali/pdf/operet_p.pdf"],["Giacomo Leopardi","Paralipomeni della Batracomiomachia","...","http://www.liberliber.it/mediateca/libri/l/leopardi/paralipomeni_della_batracomiomachia/pdf/parali_p.pdf"],["Giacomo Leopardi","Pensieri di varia filosofia e bella letteratura","...","http://www.liberliber.it/mediateca/libri/l/leopardi/pensieri_di_varia_filosofia_e_di_bella_letteratura/pdf/pensie_p.pdf"],["Giacomo Leopardi","Storia di un'anima: momorie","...","http://www.liberliber.it/mediateca/libri/l/leopardi/storia_di_un_anima_memorie/pdf/storia_%20p.pdf"],["Francesco Petrarca","Canzoniere (Rerum Vulgarium Fragmenta)","...","http://www.liberliber.it/mediateca/libri/p/petrarca/canzoniere/pdf/canzon_p.pdf"],["Francesco Petrarca","De secreto conflictu curarum mearum (Secretum)","...","http://www.liberliber.it/mediateca/libri/p/petrarca/de_secreto_conflictu_curarum_mearum/pdf/de_sec_p.pdf"],["Francesco Petrarca","Rime","...","http://www.liberliber.it/mediateca/libri/p/petrarca/rime/pdf/rime_d_p.pdf"],["Francesco Petrarca","Seniles","...","http://www.liberliber.it/mediateca/libri/p/petrarca/seniles/pdf/petrarca_seniles.pdf"],["Francesco Petrarca","I trionfi","...","http://www.liberliber.it/mediateca/libri/p/petrarca/i_trionfi/pdf/i_trio_p.pdf"],["Victor Hugo","Lotte sociali","...","http://www.liberliber.it/mediateca/libri/h/hugo/lotte_sociali/pdf/lotte__p.pdf"],["Victor Hugo","I miserabili","...","http://www.liberliber.it/mediateca/libri/h/hugo/i_miserabili/pdf/i_mise_p.pdf"],["Charles Darwin","Diario di un naturalista giramondo","...","http://www.liberliber.it/mediateca/libri/d/darwin/diario_di_un_naturalista_giramondo/pdf/diario_p.pdf"],["Charles Darwin","Le diverse forme dei fiori in piante della stessa specie ","...","http://www.liberliber.it/mediateca/libri/d/darwin/le_diverse_forme_dei_fiori_in_piante_della_stessa_specie/pdf/le_div_p.pdf"],["Charles Darwin","I diversi apparecchi col mezzo dei quali le orchidee vengono fecondate dagli insetti ","...","http://www.liberliber.it/mediateca/libri/d/darwin/i_diversi_apparecchi_col_mezzo_dei_quali_le_orchidee_ven_etc/pdf/i_dive_p.pdf"],["Charles Darwin","Gli effetti della fecondazione incrociata e propria nel regno vegetale","...","http://www.liberliber.it/mediateca/libri/d/darwin/gli_effetti_della_fecondazione_incrociata_e_propria_nel__etc/pdf/gli_ef_p.pdf"],["Charles Darwin","L'espressione dei sentimenti nell'uomo e negli animali","...","http://www.liberliber.it/mediateca/libri/d/darwin/l_espressione_dei_sentimenti_nell_uomo_e_negli_animali/pdf/l_espr_p.pdf"],["Charles Darwin","La formazione della terra vegetale per l'azione dei lombrici con osservazioni intorno ai loro costumi ","...","http://www.liberliber.it/mediateca/libri/d/darwin/la_formazione_della_terra_vegetale_per_l_azione_dei_lomb_etc/pdf/la_for_p.pdf"],["Charles Darwin","I movimenti e le abitudini delle piante rampicanti","...","http://www.liberliber.it/mediateca/libri/d/darwin/i_movimenti_e_le_abitudini_delle_piante_rampicanti/pdf/i_movi_p.pdf"],["Charles Darwin","L'origine dell'uomo e la scelta in rapporto col sesso","...","http://www.liberliber.it/mediateca/libri/d/darwin/l_origine_dell_uomo_utet_1914/pdf/darwin_l_origine_dell_uomo.pdf"],["Charles Darwin","Le piante insettivore","...","http://www.liberliber.it/mediateca/libri/d/darwin/le_piante_insettivore/pdf/darwin_le_piante_insettivore.pdf"],["Charles Darwin","Il potere di movimento nelle piante","...","http://www.liberliber.it/mediateca/libri/d/darwin/il_potere_di_movimento_delle_piante/pdf/il_pot_p.pdf"],["Charles Darwin","Sulla origine delle specie per elezione naturale, ovvero conservazione delle razze perfezionate nella lotta per l'esistenza","...","http://www.liberliber.it/mediateca/libri/d/darwin/sulla_origine_delle_specie_per_elezione_naturale_ovvero__etc/pdf/sulla__p.pdf"],["Charles Darwin","Sulla struttura e distribuzione dei banchi di corallo e delle isole madreporiche","...","http://www.liberliber.it/mediateca/libri/d/darwin/sulla_struttura_e_distribuzione_dei_banchi_di_corallo_e__etc/pdf/sulla__p.pdf"],["Charles Darwin","Variazione degli animali e delle piante allo stato domestico ","...","http://www.liberliber.it/mediateca/libri/d/darwin/variazione_degli_animali_e_delle_piante_allo_stato_domes_etc/pdf/variaz_p.pdf"],["Charles Dickens","Le avventure di Nicola Nickleby","...","http://www.liberliber.it/mediateca/libri/d/dickens/le_avventure_di_nicola_nickleby/pdf/le_avv_p.pdf"],["Charles Dickens","La bottega dell'antiquario","...","http://www.liberliber.it/mediateca/libri/d/dickens/la_bottega_dell_antiquario/pdf/la_bot_p.pdf"],["Charles Dickens","Cantico di Natale","...","http://www.liberliber.it/mediateca/libri/d/dickens/cantico_di_natale/pdf/cantic_p.pdf"],["Charles Dickens","Il Circolo Pickwick","...","http://www.liberliber.it/mediateca/libri/d/dickens/il_circolo_pickwick/pdf/il_cir_p.pdf"],["Charles Dickens","David Copperfield","...","http://www.liberliber.it/mediateca/libri/d/dickens/david_copperfield/pdf/dickens_david_copperfield.pdf"],["Charles Dickens","Le due città","...","http://www.liberliber.it/mediateca/libri/d/dickens/le_due_citta/pdf/le_due_p.pdf"],["Charles Dickens","La piccola Dorrit","...","http://www.liberliber.it/mediateca/libri/d/dickens/la_piccola_dorrit/pdf/la_pic_p.pdf"],["Friedrich Nietzsche","Così parlò Zarathustra","...","http://www.liberliber.it/mediateca/libri/n/nietzsche/cosi_parlo_zarathustra/pdf/nietzsche_cosi_parlo.pdf"],["Ludovico Ariosto","Cinque Canti","...","http://www.liberliber.it/mediateca/libri/a/ariosto/cinque_canti/pdf/cinque_p.pdf"],["Ludovico Ariosto","La Lena","...","http://www.liberliber.it/mediateca/libri/a/ariosto/la_lena/pdf/la_len_p.pdf"],["Ludovico Ariosto","Il Negromante","...","http://www.liberliber.it/mediateca/libri/a/ariosto/il_negromante/pdf/il_neg_p.pdf"],["Ludovico Ariosto","Orlando furioso","...","http://www.liberliber.it/mediateca/libri/a/ariosto/orlando_furioso/pdf/orland_p.pdf"],["Ludovico Ariosto","Satire","...","http://www.liberliber.it/mediateca/libri/a/ariosto/satire/pdf/satire_p.pdf"],["Torquato Tasso","Aminta","...","http://www.liberliber.it/mediateca/libri/t/tasso/aminta/pdf/aminta_p.pdf"],["Torquato Tasso","Discorso della virtù femminile e donnesca","...","http://www.liberliber.it/mediateca/libri/t/tasso/discorso_della_virtu_feminile_e_donnesca/pdf/discor_p.pdf"],["Torquato Tasso","Gerusalemme conquistata","...","http://www.liberliber.it/mediateca/libri/t/tasso/gerusalemme_conquistata/pdf/gerusa_p.pdf"],["Torquato Tasso","Gerusalemme liberata","...","http://www.liberliber.it/mediateca/libri/t/tasso/gerusalemme_liberata/pdf/gerusa_p.pdf"],["Torquato Tasso","Rinaldo","...","http://www.liberliber.it/mediateca/libri/t/tasso/rinaldo/pdf/rinald_p.pdf"],["Gabriele D'Annunzio","Alcyone","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/alcyone/pdf/d_annunzio_alcyone.pdf"],["Gabriele D'Annunzio","Cabiria","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/cabiria/pdf/d_annunzio_cabiria.pdf"],["Gabriele D'Annunzio","La città morta","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/la_citta_morta/pdf/d_annunzio_la_citta_morta.pdf"],["Gabriele D'Annunzio","Il ferro","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/il_ferro/pdf/d_annunzio_il_ferro.pdf"],["Gabriele D'Annunzio","La figlia di Iorio","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/la_figlia_di_iorio/pdf/d_annunzio_la_figlia_di_iorio.pdf"],["Gabriele D'Annunzio","Forse che sì, forse che no","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/forse_che_si/pdf/d_annunzio_forse_che_si.pdf"],["Gabriele D'Annunzio","Giovanni Episcopo","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/giovanni_episcopo/pdf/d_annunzio_giovanni_episcopo.pdf"],["Gabriele D'Annunzio","L'innocente","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/l_innocente/pdf/d_annunzio_l_innocente.pdf"],["Gabriele D'Annunzio","Isaotta Guttadàuro","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/isaotta_guttadauro/pdf/d_annunzio_isaotta_guttadauro.pdf"],["Gabriele D'Annunzio","Laudi del cielo del mare della terra e degli eroi","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/laudi/pdf/d_annunzio_laudi.pdf"],["Gabriele D'Annunzio","I libro delle vergini","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/il_libro_delle_vergini/pdf/d_annunzio_il_libro.pdf"],["Gabriele D'Annunzio","Le novelle della Pescara","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/le_novelle_della_pescara/pdf/d_annunzio_le_novelle.pdf"],["Gabriele D'Annunzio","Il Piacere","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/il_piacere/pdf/il_pia_p.pdf"],["Gabriele D'Annunzio","Poema paradisiaco","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/poema_paradisiaco/pdf/d_annunzio_poema_paradisiaco.pdf"],["Gabriele D'Annunzio","San Pantaleone","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/san_pantaleone/pdf/d_annunzio_san_pantaleone.pdf"],["Gabriele D'Annunzio","Il trionfo della morte","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/il_trionfo_della_morte/pdf/d_annunzio_il_trionfo_della_morte.pdf"],["Gabriele D'Annunzio","Versi d'amore","...","http://www.liberliber.it/mediateca/libri/d/d_annunzio/versi_d_amore/pdf/d_annunzio_versi_d_amore.pdf"],["Giovanni Boccaccio","Il commento alla Divina Commedia e gli altri scritti intorno a Dante","...","http://www.liberliber.it/mediateca/libri/b/boccaccio/il_comento_alla_divina_commedia_etc/pdf/il_com_p.pdf"],["Giovanni Boccaccio","Decameron","...","http://www.liberliber.it/mediateca/libri/b/boccaccio/decameron/pdf/boccaccio_decameron.pdf"],["Giovanni Boccaccio","Elegia di Madonna Fiammetta","...","http://www.liberliber.it/mediateca/libri/b/boccaccio/elegia_di_madonna_fiammetta/pdf/elegia_p.pdf"],["Giovanni Boccaccio","Filocolo","...","http://www.liberliber.it/mediateca/libri/b/boccaccio/filocolo/pdf/filoco_p.pdf"],["Giovanni Boccaccio","Trattatello in laude di Dante","...","http://www.liberliber.it/mediateca/libri/b/boccaccio/trattatello_in_laude_di_dante/pdf/tratta_p.pdf"],["Italo Svevo","L'assasinio di Via Belpoggio","...","http://www.liberliber.it/mediateca/libri/s/svevo/l_assassinio_di_via_belpoggio/pdf/svevo_l_assassinio_di_via.pdf"],["Italo Svevo","Una burla riuscita","...","http://www.liberliber.it/mediateca/libri/s/svevo/una_burla_riuscita/pdf/svevo_una_burla_riuscita.pdf"],["Italo Svevo","Commedie","...","http://www.liberliber.it/mediateca/libri/s/svevo/commedie/pdf/commed_p.pdf"],["Italo Svevo","Corto viaggio sentimentale","...","http://www.liberliber.it/mediateca/libri/s/svevo/corto_viaggio_sentimentale/pdf/corto__p.pdf"],["Italo Svevo","La coscienza di Zeno","...","http://www.liberliber.it/mediateca/libri/s/svevo/la_coscienza_di_zeno/pdf/la_cos_p.pdf"],["Italo Svevo","La novella del buon vecchio e della bella fanciulla","...","http://www.liberliber.it/mediateca/libri/s/svevo/la_novella_del_buon_vecchio_e_della_bella_fanciulla/pdf/la_nov_p.pdf"],["Italo Svevo","I racconti","...","http://www.liberliber.it/mediateca/libri/s/svevo/i_racconti/pdf/svevo_i_racconti.pdf"],["Italo Svevo","Senilità","...","http://www.liberliber.it/mediateca/libri/s/svevo/senilita/pdf/senili_p.pdf"],["Italo Svevo","Una vita","...","http://www.liberliber.it/mediateca/libri/s/svevo/una_vita/pdf/una_vi_p.pdf"],["Giovanni Pascoli","Ai medici condotti","...","http://www.liberliber.it/mediateca/libri/p/pascoli/ai_medici_condotti/pdf/ai_med_p.pdf"],["Giovanni Pascoli","Canti di Castelvecchio","...","http://www.liberliber.it/mediateca/libri/p/pascoli/canti_di_castelvecchio/pdf/canti__p.pdf"],["Giovanni Pascoli","Le canzoni di Re Enzio","...","http://www.liberliber.it/mediateca/libri/p/pascoli/le_canzoni_di_re_enzio/pdf/le_can_p.pdf"],["Giovanni Pascoli","Il fanciullino","...","http://www.liberliber.it/mediateca/libri/p/pascoli/il_fanciullino/pdf/il_fan_p.pdf"],["Giovanni Pascoli","Myricae","...","http://www.liberliber.it/mediateca/libri/p/pascoli/myricae/pdf/myrica_p.pdf"],["Giovanni Pascoli","Nuovi poemetti","...","http://www.liberliber.it/mediateca/libri/p/pascoli/nuovi_poemetti/pdf/nuovi__p.pdf"],["Giovanni Pascoli","Poemi conviviali","...","http://www.liberliber.it/mediateca/libri/p/pascoli/poemi_conviviali/pdf/poemi__p.pdf"],["Giovanni Pascoli","Poemi del Risorgimento","...","http://www.liberliber.it/mediateca/libri/p/pascoli/poemi_del_risorgimento/pdf/poemi__p.pdf"],["Giovanni Pascoli","Poemi del Risorgimento: inno a Roma, inno a Torino","...","http://www.liberliber.it/mediateca/libri/p/pascoli/poemi_del_risorgimento_inno_a_roma_inno_a_torino/pdf/poemi__p.pdf"],["Giovanni Pascoli","Poemi italici","...","http://www.liberliber.it/mediateca/libri/p/pascoli/poemi_italici/pdf/poemi__p.pdf"],["Giovanni Pascoli","Poesie latine","...","http://www.liberliber.it/mediateca/libri/p/pascoli/poesie_latine/pdf/poesie_p.pdf"],["Giovanni Pascoli","Primi poemetti","...","http://www.liberliber.it/mediateca/libri/p/pascoli/primi_poemetti/pdf/primi__p.pdf"]]
'use strict'; var lib_type= [ "Luigi Pirandello", "Ciascuno a suo modo", "...", "http://www.liberliber.it/mediateca/libri/p/pirandello/ciascuno_a_suo_modo/pdf/pirandello_ciascuno_a_suo_modo.pdf" ]; if (!('indexedDB' in window)) { window.indexedDB = window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; } var elibri = {}; elibri.hasToPopulate = false; elibri.onerror = function(e) { console.log("Database error: ", e.target.errorCode); } elibri.createDatabase = function() { var req = indexedDB.open("elibri", 1); req.onsuccess = function(e) { elibri.db = e.target.result; if(elibri.hasToPopulate) elibri.populateDatabase(); else elibri.readBooks(); }; req.onupgradeneeded = function(e) { elibri.db = e.target.result; if (elibri.db.objectStoreNames.contains("elibri")) { elibri.db.deleteObjectStore("elibri"); } elibri.db.createObjectStore("elibri"); elibri.hasToPopulate = true; }; req.onerror = elibri.onerror; } elibri.populateDatabase = function() { var xmlhttp = new XMLHttpRequest(); xmlhttp.open('GET', 'http://abral.altervista.org/apps/libri/elibri.json.php', true); xmlhttp.onreadystatechange=function() { if(xmlhttp.readyState==4) { var data = eval( '(' + xmlhttp.responseText + ')' ); for(var i=0; i' ); elibri.dataTable = $('#example').dataTable( { "bProcessing": true, "sPaginationType": "full_numbers", "bJQueryUI": true, "aoColumns": [ { "sTitle": "Author", "sWidth": "25%", "sClass": "center", "fnRender": function(obj) { var sReturn = obj.aData[ obj.iDataColumn ]; return ""+sReturn+""; } }, { "sTitle": "Title", "sWidth": "25%", "sClass": "center" }, { "sTitle": "Notes", "sWidth": "50%" }, { "sTitle": "Link" } ] } ); elibri.dataTable.fnSetColumnVis(3, false); $("#example tbody").live("click", function(event) { $(elibri.dataTable.fnSettings().aoData).each(function () { $(this.nTr).removeClass('row_selected'); }); $(event.target.parentNode).addClass('row_selected'); var aData = elibri.dataTable.fnGetData( event.target.parentNode ); $("#cont").html("

Clicca due volte per leggere il libro selezionato.

"); }); $("#example tbody td").live("dblclick", function(event) { var aData = elibri.dataTable.fnGetData( event.target.parentNode ); newWin = window.open("viewer/viewer.html?file=" + encodeURIComponent("http://abral.altervista.org/apps/libri/pdf.php?file=" + aData[3]), "_blank"); newWin.focus(); }); } function login() { alert("Not yet implemented!"); /*$("#loginButton").css('opacity', '0.5'); if(navigator.onLine) navigator.id.getVerifiedEmail(function(assertion) { if (assertion) { $.ajax({ type: 'POST', url: '', data: { assertion: assertion, audience: 'abral.altervista.org' }, success: function(res, status, xhr) { if (res === null) { $("#loginButton").css('opacity', '0.0'); } else { $("#loginButton").css('opacity', '1.0'); console.log(res); } }, error: function(res, status, xhr) { alert("Login failure: " + res); } }); } else { alert("Something went wrong."); } });*/ } $(document).ready(function() { drawTable(); elibri.createDatabase(); if(!navigator.onLine) $("#loginButton").hide(); });
say=(x="")=>(y="")=>console.log(x,y) var db; window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction; window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange; var DBOpenRequest = window.indexedDB.open("toDoList", 4); // var request = window.indexedDB.open("toDoList", {version: 4, storage: "temporary"}); DBOpenRequest.onerror = say('db open err') DBOpenRequest.onsuccess = function(event) { db = DBOpenRequest.result; displayData(); }; DBOpenRequest.onupgradeneeded = function(event) { var db = event.target.result; db.onerror = say('db') var objectStore = db.createObjectStore("toDoList", { keyPath: "taskTitle" }); objectStore.createIndex("hours", "hours", { unique: false }); objectStore.createIndex("minutes", "minutes", { unique: false }); objectStore.createIndex("day", "day", { unique: false }); objectStore.createIndex("month", "month", { unique: false }); objectStore.createIndex("year", "year", { unique: false }); objectStore.createIndex("notified", "notified", { unique: false }); }; function displayData() { var objectStore = db.transaction('toDoList').objectStore('toDoList'); objectStore.openCursor().onsuccess = function(event) { var cursor = event.target.result; console.log(cursor) // cursor.value.day if(cursor) { var listItem = document.createElement('li'); deleteButton.onclick = function(event) { deleteItem(event); } cursor.continue(); } else { } } } taskForm.addEventListener('submit',addData,false); function addData(e) { e.preventDefault(); if(title.value == '' || hours.value == null || minutes.value == null || day.value == '' || month.value == '' || year.value == null) { note.innerHTML += '
  • Data not submitted — form incomplete.
  • '; return; } else { var newItem = [ { taskTitle: title.value, hours: hours.value, minutes: minutes.value, day: day.value, month: month.value, year: year.value, notified: "no" } ]; var transaction = db.transaction(["toDoList"], "readwrite"); transaction.oncomplete = function() { displayData(); }; transaction.onerror =say(transaction.error) var objectStore = transaction.objectStore("toDoList"); let { indexNames, keyPath, name, transaction, autoIncrement, }= objectStore var newItem = [ { taskTitle: "", hours: 0, minutes: 0, day: 0, month: "", year: 0, notified: "no" } ]; var objectStoreRequest = objectStore.add(newItem[0]); objectStoreRequest.onsuccess = say('ok') }; }; function deleteItem(event) { // retrieve the name of the task we want to delete var dataTask = event.target.getAttribute('data-task'); // open a database transaction and delete the task, finding it by the name we retrieved above var transaction = db.transaction(["toDoList"], "readwrite"); var request = transaction.objectStore("toDoList").delete(dataTask); // report that the data item has been deleted transaction.oncomplete = function() { // delete the parent of the button, which is the list item, so it no longer is displayed event.target.parentNode.parentNode.removeChild(event.target.parentNode); note.innerHTML += '
  • Task \"' + dataTask + '\" deleted.
  • '; }; }; function checkDeadlines() { var objectStore = db.transaction(['toDoList'], "readwrite").objectStore('toDoList'); objectStore.openCursor().onsuccess = function(event) { var cursor = event.target.result; } } function createNotification(title) { if (Notification.permission === "granted") { var img = '/to-do-notifications/img/icon-128.png'; var text = 'HEY! Your task "' + title + '" is now overdue.'; var notification = new Notification('To do list', { body: text, icon: img }); window.navigator.vibrate(500); } else if (Notification.permission !== 'denied') { Notification.requestPermission(function (permission) { if(!('permission' in Notification)) { Notification.permission = permission; } if (permission === "granted") { var img = '/to-do-notifications/img/icon-128.png'; var text = 'HEY! Your task "' + title + '" is now overdue.'; var notification = new Notification('To do list', { body: text, icon: img }); window.navigator.vibrate(500); } }); } var objectStore = db.transaction(['toDoList'], "readwrite").objectStore('toDoList'); var objectStoreTitleRequest = objectStore.get(title); objectStoreTitleRequest.onsuccess = function() { var data = objectStoreTitleRequest.result; data.notified = "yes"; var updateTitleRequest = objectStore.put(data); updateTitleRequest.onsuccess = displayData } } setInterval(checkDeadlines, 1000);

    scf

    #SCF

    https://cloud.tencent.com/document/product/583

    SCF CLI

    install

    1
    2
    pip3 install scf  
    scf --version

    init

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    scf init
    scf init --runtime python2.7 --name testproject --output-dir /Users/xxx/code/scf/
    scf init --runtime python2.7 --name hello
    scf init --runtime nodejs6.10 --name hello
    scf init --runtime nodejs8.9 --name hello
    scf init --runtime python3.6 --name hello
    scf init --runtime php5 --name hello
    scf init --runtime php7 --name hello
    scf init --runtime go1 --name hello
    scf init --runtime nodejs 8.9 --name hello --location http://.. --output-dir ./hello

    test

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    scf local generate-event cos post
    scf local generate-event cos put
    scf local generate-event cos delete
    scf local generate-event timer timeup
    scf local generate-event apigateway proxy
    scf local generate-event apigateway proxy > event.json

    scf native invoke --template template.yaml --event event.json
    scf native generate-event cos post| scf native invoke --template template.yaml
    scf local invoke --template template.yaml --event event.json
    scf local generate-event cos post | scf local invoke --template template.yaml
    scf local generate-event cos post | scf local invoke -t template.yaml testfunction

    deploy

    1
    2
    3
    scf deploy
    scf deploy --cos-bucket temp-code-1253970226
    scf deploy -t deploy.yaml -f -c temp-code-1253970226 -n test-func -ns ccc -r ap-hongkong --skip-event