Files: e4ce6bb40173e08028c870d5b637e13128c98c83 / views.js
4799 bytesRaw
1 | var pull = require('pull-stream') |
2 | var sbot = require('./scuttlebot') |
3 | var hyperscroll = require('hyperscroll') |
4 | var stream = require('hyperloadmore/stream') |
5 | var h = require('hyperscript') |
6 | var ref = require('ssb-ref') |
7 | var next = require('pull-next-query') |
8 | |
9 | var render = require('./render').render |
10 | |
11 | var config = require('./config')() |
12 | |
13 | var id = require('./keys').id |
14 | |
15 | var compose = require('./compose') |
16 | |
17 | var 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 | |
52 | function 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 | |
80 | function 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 | |
117 | function 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 | |
156 | function 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 | |
195 | module.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