UNPKG

1.82 kBJavaScriptView Raw
1var h = require('hyperscript')
2var o = require('observable')
3var pull = require('pull-stream')
4var Pause = require('pull-pause')
5
6var Scroller = require('../')
7
8var c = o.value()
9var v = o.value()
10
11var check = h('input', {type: 'checkbox'})
12var sticky = o.input(check, 'checked')
13var panel
14document.body.appendChild(
15 panel = h('div.screen', {
16 style: {
17 top: '0px', bottom: '0px',
18 position: 'absolute',
19 display: 'flex',
20 'flex-direction': 'row'
21 }
22 },
23 h('div', {style: {position: 'fixed', right: '20px', top: '20px'}},
24 c, '-', v, check,
25 h('a', 'Create!', {href: '#', onclick: function () {
26 panel.appendChild(createScroller())
27 }})
28 )
29 )
30)
31
32//load below the screen bottom, so that normal reading is jankless.
33
34//user provided source stream
35function createSource (top) {
36 return pull(
37 pull.infinite(),
38 pull.map(function (e) {
39 c((c()||0)+1)
40 return {random: e, count: c(), top: top}
41 }),
42 pull.asyncMap(function (e, cb) {
43 var delay = 100 + 200*Math.random()
44 setTimeout(function () {
45 e.delay = delay
46 cb(null, e)
47 }, delay)
48 })
49 )
50}
51
52function render (e) {
53 return h('h3', {
54 style: {background: 'hsl('+Math.round(Math.random()*360) + ',100%,50%)'
55 }
56 }, h('pre', JSON.stringify(e, null, 2)))
57}
58
59function createScroller () {
60 var scroller = SCROLLER = h('ol', {
61 style: {
62 'flex-bias': 0,
63 overflowY: 'scroll',
64 overflow: 'auto',
65 display: 'inline-block'
66 }
67 })
68
69 pull(
70 createSource(true),
71 Scroller(scroller, render, true, false)
72 )
73
74 pull(
75 createSource(false),
76 Scroller(scroller, render, false, false)
77 )
78
79 return h('div', {style: {
80 display: 'flex', 'flex-bias': 0,
81 'flex-direction': 'column'
82 }}, h('h1', 'scroller') , scroller)
83}
84
85