git ssb

0+

ev / 0qc



Tree: 423e77eca80692c36556b549a46bcb6c572c3dbb

Files: 423e77eca80692c36556b549a46bcb6c572c3dbb / views.js

4799 bytesRaw
1var pull = require('pull-stream')
2var sbot = require('./scuttlebot')
3var hyperscroll = require('hyperscroll')
4var stream = require('hyperloadmore/stream')
5var h = require('hyperscript')
6var ref = require('ssb-ref')
7var next = require('pull-next-query')
8
9var render = require('./render').render
10
11var config = require('./config')()
12
13var id = require('./keys').id
14
15var compose = require('./compose')
16
17var keyPage = function () {
18 var screen = document.getElementById('screen')
19
20 var importKey = h('textarea.import', {placeholder: 'Import a new public/private key', name: 'textarea', style: 'width: 97%; height: 100px;'})
21
22 var content = h('div.content',
23 h('div.message#key',
24 h('h1', 'Your Key'),
25 h('p', {innerHTML: 'Your public/private key is: <pre><code>' + localStorage[config.caps.shs + '/secret'] + '</code></pre>'},
26 h('button.btn', {onclick: function (e){
27 localStorage[config.caps.shs +'/secret'] = ''
28 alert('Your public/private key has been deleted')
29 e.preventDefault()
30 location.hash = ""
31 location.reload()
32 }}, 'Delete Key')
33 ),
34 h('hr'),
35 h('form',
36 importKey,
37 h('button.btn', {onclick: function (e){
38 if(importKey.value) {
39 localStorage[config.caps.shs + '/secret'] = importKey.value.replace(/\s+/g, ' ')
40 e.preventDefault()
41 alert('Your public/private key has been updated')
42 }
43 location.hash = ""
44 location.reload()
45 }}, 'Import key'),
46 )
47 )
48 )
49 screen.appendChild(hyperscroll(content))
50}
51
52function getMessage (src) {
53
54 var content = h('div.content')
55 var screen = document.getElementById('screen')
56
57 screen.appendChild(hyperscroll(content))
58
59 sbot.get(src, function (err, data) {
60 if (err) {
61 var message = h('div.message', 'Missing message!')
62 content.appendChild(message)
63 }
64 if (data) {
65 var message = {}
66
67 message.value = data
68 message.key = src
69
70 if (content.firstChild) {
71 content.insertBefore(render(message), content.firstChild)
72 } else {
73 content.appendChild(render(message))
74 }
75 }
76 })
77}
78
79
80function userStream (src) {
81
82 var screen = document.getElementById('screen')
83 var content = h('div.content')
84
85 screen.appendChild(hyperscroll(content))
86
87 function createStream (opts) {
88 return pull(
89 next(sbot.query, opts, ['value', 'timestamp']),
90 pull.map(function (msg) {
91 return render(msg)
92 })
93 )
94 }
95
96 pull(
97 createStream({
98 limit: 100,
99 reverse: true,
100 live: false,
101 query: [{$filter: { value: { author: src, timestamp: { $gt: 0 }}}}]
102 }),
103 stream.bottom(content)
104 )
105
106 pull(
107 createStream({
108 limit: 100,
109 old: false,
110 live: true,
111 query: [{$filter: { value: {author: src, timestamp: { $gt: 0 }}}}]
112 }),
113 stream.top(content)
114 )
115}
116
117function mentionsStream (src) {
118
119 var screen = document.getElementById('screen')
120 var content = h('div.content')
121
122 screen.appendChild(hyperscroll(content))
123
124 function createStream (opts) {
125 return pull(
126 next(sbot.backlinks, opts, ['value', 'timestamp']),
127 pull.map(function (msg) {
128 return render(msg)
129 })
130 )
131 }
132
133 pull(
134 createStream({
135 limit: 100,
136 reverse: true,
137 index: 'DTA',
138 live: false,
139 query: [{$filter: {dest: src}}]
140 }),
141 stream.bottom(content)
142 )
143
144 pull(
145 createStream({
146 limit: 100,
147 old: false,
148 index: 'DTA',
149 live: true,
150 query: [{$filter: {dest: src}}]
151 }),
152 stream.top(content)
153 )
154}
155
156function everythingStream () {
157
158 var screen = document.getElementById('screen')
159 var content = h('div.content')
160
161 screen.appendChild(hyperscroll(content))
162
163 function createStream (opts) {
164 return pull(
165 next(sbot.query, opts, ['value', 'timestamp']),
166 pull.map(function (msg) {
167 if (msg.value) {
168 return render(msg)
169 }
170 })
171 )
172 }
173
174 pull(
175 createStream({
176 limit: 250,
177 reverse: true,
178 live: false,
179 query: [{$filter: { value: { timestamp: { $gt: 0 }}}}]
180 }),
181 stream.bottom(content)
182 )
183
184 pull(
185 createStream({
186 limit: 250,
187 old: false,
188 live: true,
189 query: [{$filter: { value: { timestamp: { $gt: 0 }}}}]
190 }),
191 stream.top(content)
192 )
193}
194
195module.exports = function () {
196 var src = window.location.hash.substring(1)
197
198 if (ref.isFeed(src)) {
199 userStream(src)
200 } else if (ref.isMsg(src)) {
201 getMessage(src)
202 } else if ((src.substring(0, 5) == 'wall/') && (ref.isFeed(src.substring(5)))) {
203 mentionsStream(src.substring(5))
204 } else if (ref.isMsg(src)) {
205 messageStream()
206 } else if (src == 'key') {
207 keyPage()
208 } else {
209 everythingStream()
210 }
211
212}
213

Built with git-ssb-web