git ssb

2+

mixmix / ticktack



Commit 119e5a731640d722b01b4aa15a4ec30a09b17285

Merge pull request #4 from ticktackim/navigation

Navigation
mix irving authored on 8/9/2017, 10:22:09 PM
GitHub committed on 8/9/2017, 10:22:09 PM
Parent: 67f7cf6602ca46e257e4a98dceeb953dc946cd86
Parent: e86756b38bce4ea2fc14a828133a9c2fbc4d4ca6

Files changed

app/html/app.jschanged
app/html/thread.jschanged
app/html/nav.jsadded
app/html/nav.mcssadded
app/index.jschanged
app/page/group.jschanged
app/page/home.jschanged
app/page/page.mcsschanged
app/page/private.jschanged
app/sync/goTo.jsdeleted
blob/index.jschanged
blob/sync/url.jschanged
main.jschanged
package-lock.jsonchanged
package.jsonchanged
router/sync/routes.jschanged
styles/css.jschanged
styles/mcss.jschanged
styles/mixins.jschanged
test/fixtures/thread.jschanged
app/html/app.jsView
@@ -4,9 +4,12 @@
44
55 exports.gives = nest('app.html.app')
66
77 exports.needs = nest({
8- 'app.sync.goTo': 'first',
8+ 'history.sync.push': 'first',
9+ 'history.obs.location': 'first',
10+ 'history.obs.store': 'first',
11+ 'router.sync.router': 'first',
912 'styles.css': 'first'
1013 })
1114
1215 exports.create = (api) => {
@@ -15,7 +18,22 @@
1518 function app () {
1619 const css = values(api.styles.css()).join('\n')
1720 insertCss(css)
1821
19- return api.app.sync.goTo({ page: 'home' })
22+ api.history.obs.location()(render)
23+ api.history.sync.push({ page: 'home' })
2024 }
25+
26+ function render (location) {
27+ const newView = api.router.sync.router(location)
28+
29+ if (!newView) {
30+ api.history.obs.store().pop() // remove bogus location
31+ return
32+ }
33+
34+ const oldView = document.body.firstChild
35+ oldView
36+ ? document.body.replaceChild(newView, oldView)
37+ : document.body.appendChild(newView)
38+ }
2139 }
app/html/thread.jsView
@@ -1,15 +1,12 @@
11 const nest = require('depnest')
22 const { h, Array: MutantArray, map, computed, when } = require('mutant')
3-const pull = require('pull-stream')
4-const last = require('lodash/last')
53 const get = require('lodash/get')
64
75 exports.gives = nest('app.html.thread')
86
97 exports.needs = nest({
108 'about.html.image': 'first',
11- 'app.sync.goTo': 'first',
129 'feed.obs.thread': 'first',
1310 'keys.sync.id': 'first',
1411 'message.html.markdown': 'first'
1512 })
@@ -19,38 +16,36 @@
1916
2017 function thread (id) {
2118 // location here can expected to be: { page: 'home' }
2219
23-
2420 var myId = api.keys.sync.id()
2521
2622 const thread = api.feed.obs.thread(id)
2723 const chunkedMessages = buildChunkedMessages(thread.messages)
2824
29- const { goTo } = api.app.sync
30- const threadView = h('Thread',
25+ const threadView = h('Thread',
3126 map(chunkedMessages, chunk => {
3227 const author = computed([chunk], chunk => get(chunk, '[0].value.author'))
3328
3429 return author() === myId
3530 ? h('div.my-chunk', [
36- h('div.avatar'),
37- h('div.msgs', map(chunk, msg => {
38- return h('div.msg-row', [
39- h('div.spacer'),
40- message(msg)
41- ])
42- }))
43- ])
31+ h('div.avatar'),
32+ h('div.msgs', map(chunk, msg => {
33+ return h('div.msg-row', [
34+ h('div.spacer'),
35+ message(msg)
36+ ])
37+ }))
38+ ])
4439 : h('div.other-chunk', [
45- h('div.avatar', when(author, api.about.html.image(author()))),
46- h('div.msgs', map(chunk, msg => {
47- return h('div.msg-row', [
48- message(msg),
49- h('div.spacer')
50- ])
51- }))
52- ])
40+ h('div.avatar', when(author, api.about.html.image(author()))),
41+ h('div.msgs', map(chunk, msg => {
42+ return h('div.msg-row', [
43+ message(msg),
44+ h('div.spacer')
45+ ])
46+ }))
47+ ])
5348 })
5449 )
5550
5651 function message (msg) {
@@ -66,16 +61,13 @@
6661 function buildChunkedMessages (messagesObs) {
6762 return computed(messagesObs, msgs => {
6863 var chunkedMessages = MutantArray()
6964
70- var _chunk = null
65+ var _chunk = null
7166 var _lastMsg = null
72-
67+
7368 msgs.forEach(msg => {
74- if (!_lastMsg || !isSameAuthor(_lastMsg, msg))
75- createNewChunk(msg)
76- else
77- _chunk.push(msg)
69+ if (!_lastMsg || !isSameAuthor(_lastMsg, msg)) { createNewChunk(msg) } else { _chunk.push(msg) }
7870
7971 _lastMsg = msg
8072 })
8173
@@ -93,6 +85,4 @@
9385 function isSameAuthor (msgA, msgB) {
9486 // TODO (mix) use lodash/get
9587 return msgA.value.author === msgB.value.author
9688 }
97-
98-
app/html/nav.jsView
@@ -1,0 +1,24 @@
1+const nest = require('depnest')
2+const { h } = require('mutant')
3+
4+exports.gives = nest('app.html.nav')
5+
6+exports.needs = nest({
7+ 'history.sync.push': 'first',
8+ 'history.sync.back': 'first'
9+})
10+
11+exports.create = (api) => {
12+ return nest('app.html.nav', nav)
13+
14+ function nav (id) {
15+ const { push, back } = api.history.sync
16+ return h('Nav', [
17+ h('div.back', { 'ev-click': back }, '←'),
18+ h('div', { 'ev-click': () => push({page: 'home'}) }, 'Home'),
19+ // h('div', { 'ev-click': () => push({type: 'group', key: '%sadlkjas;lkdjas'}) }, 'Group'),
20+ h('div', { 'ev-click': () => push({key: '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256'}) }, 'Thread A'),
21+ h('div', { 'ev-click': () => push({key: '%3cWZHeN6k03XpvDBxrxP5bGLsNByFLTvr/rKYFV4f+c=.sha256'}) }, 'Thread B')
22+ ])
23+ }
24+}
app/html/nav.mcssView
@@ -1,0 +1,27 @@
1+Nav {
2+ display: flex
3+ align-items: center
4+
5+ margin: 0 0 1rem 1rem
6+
7+ div {
8+ margin-right: 1rem
9+
10+ :hover {
11+ text-decoration: underline
12+ }
13+ }
14+
15+ div.back {
16+ border: 1px solid #ddd
17+ padding: 0 0.2em;
18+ font-size: 1.4rem;
19+ border-radius: 4px
20+
21+ :hover {
22+ text-decoration: none
23+ border-color: #222
24+ }
25+ }
26+}
27+
app/index.jsView
@@ -1,14 +1,12 @@
11 module.exports = {
22 html: {
33 app: require('./html/app'),
4- thread: require('./html/thread')
4+ thread: require('./html/thread'),
5+ nav: require('./html/nav')
56 },
67 page: {
78 group: require('./page/group'),
89 home: require('./page/home'),
910 private: require('./page/private')
10- },
11- sync: {
12- goTo: require('./sync/goTo')
1311 }
1412 }
app/page/group.jsView
@@ -3,9 +3,9 @@
33
44 exports.gives = nest('app.page.group')
55
66 exports.needs = nest({
7- 'app.sync.goTo': 'first'
7+ 'app.html.nav': 'first'
88 })
99
1010 exports.create = (api) => {
1111 return nest('app.page.group', group)
@@ -13,13 +13,11 @@
1313 function group (location) {
1414 // location here can be the root message of a group : { type: 'group', key }
1515 // TODO show specific group index described by key
1616
17- const { goTo } = api.app.sync
18-
1917 return h('Page -group', [
2018 h('h1', 'Group'),
21- h('a', { 'ev-click': () => goTo({ page: 'home' }) }, 'Home'),
19+ api.app.html.nav(),
2220 h('p', `key: ${location.key}`)
2321 ])
2422 }
2523 }
app/page/home.jsView
@@ -3,25 +3,19 @@
33
44 exports.gives = nest('app.page.home')
55
66 exports.needs = nest({
7- 'app.sync.goTo': 'first'
7+ 'app.html.nav': 'first'
88 })
99
1010 exports.create = (api) => {
1111 return nest('app.page.home', home)
1212
1313 function home (location) {
1414 // location here can expected to be: { page: 'home' }
15- const { goTo } = api.app.sync
1615
1716 return h('Page -home', [
1817 h('h1', 'Home'),
19- h('nav', [
20- h('div', { 'ev-click': () => goTo({ page: 'home' }) }, 'Home'),
21- h('div', { 'ev-click': () => goTo({ type: 'group', key: '%sadlkjas;lkdjas' }) }, 'Group'),
22- h('div', { 'ev-click': () => goTo({key: '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256'}) }, 'Private Thread A'),
23- h('div', { 'ev-click': () => goTo({key: '%3cWZHeN6k03XpvDBxrxP5bGLsNByFLTvr/rKYFV4f+c=.sha256'}) }, 'Private Thread B'),
24- ])
18+ api.app.html.nav()
2519 ])
2620 }
2721 }
app/page/page.mcssView
@@ -1,6 +1,6 @@
11 Page {
2- h1, nav {
2+ h1 {
33 margin-left: 1rem
44 }
55
66 }
app/page/private.jsView
@@ -1,28 +1,25 @@
11 const nest = require('depnest')
22 const { h } = require('mutant')
33
4-const pull = require('pull-stream')
5-
64 exports.gives = nest('app.page.private')
75
86 exports.needs = nest({
9- 'app.sync.goTo': 'first',
7+ 'app.html.nav': 'first',
108 'app.html.thread': 'first'
119 })
1210
1311 exports.create = (api) => {
14- return nest('app.page.private', private)
12+ return nest('app.page.private', privatePage)
1513
16- function private (location) {
14+ function privatePage (location) {
1715 // location here can expected to be an ssb-message
18- const { goTo } = api.app.sync
1916
2017 const thread = api.app.html.thread(location.key)
2118
2219 return h('Page -private', [
2320 h('h1', 'Private message'),
24- h('nav', { 'ev-click': () => goTo({ page: 'home' }) }, 'Home'),
21+ api.app.html.nav(),
2522 thread
2623 ])
2724 }
2825 }
app/sync/goTo.jsView
@@ -1,22 +1,0 @@
1-const nest = require('depnest')
2-
3-exports.gives = nest('app.sync.goTo')
4-
5-exports.needs = nest({
6- 'router.sync.router': 'first'
7-})
8-
9-exports.create = (api) => {
10- return nest('app.sync.goTo', goTo)
11-
12- function goTo (location) {
13- console.log('goTo', location)
14- const newView = api.router.sync.router(location)
15-
16- // TODO (mix) : change once history in place
17- const oldView = document.body.firstChild
18- oldView
19- ? document.body.replaceChild(newView, oldView)
20- : document.body.appendChild(newView)
21- }
22-}
blob/index.jsView
@@ -2,5 +2,4 @@
22 sync: {
33 url: require('./sync/url')
44 }
55 }
6-
blob/sync/url.jsView
@@ -8,6 +8,4 @@
88
99 return 'http://localhost:8989/blobs/get/' + id
1010 })
1111 }
12-
13-
main.jsView
@@ -1,22 +1,20 @@
11 const combine = require('depject')
22 const entry = require('depject/entry')
33 const nest = require('depnest')
44
5-const ticktack = require('./')
6-const patchcore = require('patchcore')
7-
85 // polyfills
96 require('setimmediate')
107
118 // from more specialized to more general
129 const sockets = combine(
13- ticktack,
14- patchcore
10+ require('./'),
11+ require('patch-history'),
12+ require('patchcore')
1513 )
1614
1715 const api = entry(sockets, nest('app.html.app', 'first'))
1816
1917 const app = api.app.html.app()
2018
21-// TODO (mix) : once goTo/ router is swapping pages, attach the app to the page here
19+// TODO (mix) : once app has swapping pages, attach the app to the page here
2220 // document.body.appendChild(app)
package-lock.jsonView
@@ -1039,8 +1039,19 @@
10391039 "pull-reader": "1.2.9",
10401040 "pull-through": "1.0.18"
10411041 }
10421042 },
1043+ "patch-history": {
1044+ "version": "1.0.0",
1045+ "resolved": "https://registry.npmjs.org/patch-history/-/patch-history-1.0.0.tgz",
1046+ "integrity": "sha512-lWc3U5awYkuZIBLiRcDgagtilCEQwb2IN3UAorVrIzdp4+MkyrVH3MQmVazx4YLV4w9AkVUy5Fdyz3yn8v32iw==",
1047+ "requires": {
1048+ "depject": "4.1.0",
1049+ "depnest": "1.3.0",
1050+ "lodash": "4.17.4",
1051+ "mutant": "3.21.2"
1052+ }
1053+ },
10431054 "patchcore": {
10441055 "version": "1.9.0",
10451056 "resolved": "https://registry.npmjs.org/patchcore/-/patchcore-1.9.0.tgz",
10461057 "integrity": "sha512-d9bJ7oivSS9uLknOZxnpJMDWTGVSyLmUt38mOTrL0LD1YEAAmThhi+6i/+mPXhm6605DFbYzWtxBVmXQ2t2SjQ==",
package.jsonView
@@ -22,8 +22,9 @@
2222 "libnested": "^1.2.1",
2323 "lodash": "^4.17.4",
2424 "micro-css": "^2.0.1",
2525 "mutant": "^3.21.2",
26+ "patch-history": "^1.0.0",
2627 "patchcore": "^1.9.0",
2728 "pull-stream": "^3.6.0",
2829 "read-directory": "^2.1.0",
2930 "setimmediate": "^1.0.5"
router/sync/routes.jsView
@@ -10,15 +10,15 @@
1010 })
1111
1212 exports.create = (api) => {
1313 return nest('router.sync.routes', (sofar = []) => {
14- const { home, group, private } = api.app.page
14+ const { home, group, private: privatePage } = api.app.page
1515
1616 // route format: [ routeValidator, routeFunction ]
1717 const routes = [
18- [ ({ page }) => page === 'home', home ],
19- [ ({ type }) => type === 'group', group ],
20- [ ({ key }) => !isEmpty(key), private ],
18+ [ location => location.page === 'home', home ],
19+ [ location => location.type === 'group', group ],
20+ [ location => !isEmpty(location.key), privatePage ]
2121 ]
2222
2323 return [...routes, ...sofar]
2424 })
styles/css.jsView
@@ -39,5 +39,4 @@
3939 return map(mcssObj, (mcssStr, [name]) => {
4040 return compile(mixinsStr + '\n' + mcssStr)
4141 })
4242 }
43-
styles/mcss.jsView
@@ -22,5 +22,4 @@
2222 })
2323 return sofar
2424 }
2525 }
26-
styles/mixins.jsView
@@ -30,6 +30,4 @@
3030 height: 6rem
3131 border-radius: 3rem
3232 }
3333 `
34-
35-
test/fixtures/thread.jsView
@@ -2,182 +2,181 @@
22 // can stream by making a source with pull.values()
33 // If you assume you're Dominic, your key is : @EMovhfIrFk4NihAKnRNhrfRaqIhBv1Wj8pTxJNgvCCY=.ed25519
44
55 module.exports = [{
6- "key": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
7- "value": {
8- "previous": "%rJq76pz8gQHvskBsqg9+3839IFNpLCpSTVIPd8bcfNI=.sha256",
9- "author": "@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519",
10- "sequence": 165,
11- "timestamp": 1501995543247,
12- "hash": "sha256",
13- "content": {
14- "type": "post",
15- "channel": "lolashare",
16- "text": "NPM is like ridiculously broken. It's impossible for me to install `patchwork` from source. I'm going to nuke my entire node and npm and rebuild from scratch to hope to fix this.\n\nI'm getting so many errors related to NPM. Maybe it's because I'm also using NVM. Going to uninstall NVM as well.",
17- "mentions": []
6+ 'key': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
7+ 'value': {
8+ 'previous': '%rJq76pz8gQHvskBsqg9+3839IFNpLCpSTVIPd8bcfNI=.sha256',
9+ 'author': '@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519',
10+ 'sequence': 165,
11+ 'timestamp': 1501995543247,
12+ 'hash': 'sha256',
13+ 'content': {
14+ 'type': 'post',
15+ 'channel': 'lolashare',
16+ 'text': "NPM is like ridiculously broken. It's impossible for me to install `patchwork` from source. I'm going to nuke my entire node and npm and rebuild from scratch to hope to fix this.\n\nI'm getting so many errors related to NPM. Maybe it's because I'm also using NVM. Going to uninstall NVM as well.",
17+ 'mentions': []
1818 },
19- "signature": "Y5jEAF6KvJh1Q4q7uIqw+X2nFjlYDKTmZhbwqY4E9mbC/TE2KgOBPXJZVGfVjYw1TUf+xHVQk/KT47nfILOsCQ==.sig.ed25519"
19+ 'signature': 'Y5jEAF6KvJh1Q4q7uIqw+X2nFjlYDKTmZhbwqY4E9mbC/TE2KgOBPXJZVGfVjYw1TUf+xHVQk/KT47nfILOsCQ==.sig.ed25519'
2020 }
2121 }, {
22- "key": "%IAkSWeMycouc4MM7eakTTIC+TITDNtvfpFp3Jgz4LiU=.sha256",
23- "value": {
24- "previous": "%AnMqmglMBFteYwH9pTDCp2lDEQStPhObfDaj04IHYS8=.sha256",
25- "author": "@EMovhfIrFk4NihAKnRNhrfRaqIhBv1Wj8pTxJNgvCCY=.ed25519",
26- "sequence": 9597,
27- "timestamp": 1501995579483,
28- "hash": "sha256",
29- "content": {
30- "type": "post",
31- "root": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
32- "branch": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
33- "channel": "lolashare",
34- "text": "npm@4 definitely works, npm@5 may not be fully cooked yet",
35- "mentions": []
22+ 'key': '%IAkSWeMycouc4MM7eakTTIC+TITDNtvfpFp3Jgz4LiU=.sha256',
23+ 'value': {
24+ 'previous': '%AnMqmglMBFteYwH9pTDCp2lDEQStPhObfDaj04IHYS8=.sha256',
25+ 'author': '@EMovhfIrFk4NihAKnRNhrfRaqIhBv1Wj8pTxJNgvCCY=.ed25519',
26+ 'sequence': 9597,
27+ 'timestamp': 1501995579483,
28+ 'hash': 'sha256',
29+ 'content': {
30+ 'type': 'post',
31+ 'root': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
32+ 'branch': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
33+ 'channel': 'lolashare',
34+ 'text': 'npm@4 definitely works, npm@5 may not be fully cooked yet',
35+ 'mentions': []
3636 },
37- "signature": "EdLZOhb2rWShs4/nllGysjTUJ6QHiz7XhiSm9/DZpp6LFjJ+Nv1BUOfAvVbDF3eUIvwvJyAFOXWIh8YcAywcDA==.sig.ed25519"
37+ 'signature': 'EdLZOhb2rWShs4/nllGysjTUJ6QHiz7XhiSm9/DZpp6LFjJ+Nv1BUOfAvVbDF3eUIvwvJyAFOXWIh8YcAywcDA==.sig.ed25519'
3838 }
3939 }, {
40- "key": "%gWq4Pn+0WRa371rLYFrZezHQ4fuVlSJCm5jqwsCjw/w=.sha256",
41- "value": {
42- "previous": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
43- "author": "@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519",
44- "sequence": 166,
45- "timestamp": 1501995914277,
46- "hash": "sha256",
47- "content": {
48- "type": "post",
49- "root": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
50- "branch": "%IAkSWeMycouc4MM7eakTTIC+TITDNtvfpFp3Jgz4LiU=.sha256",
51- "channel": "lolashare",
52- "recps": null,
53- "text": "I'm rolling back to node 6x and npm 3x to see if that helps.",
54- "mentions": []
40+ 'key': '%gWq4Pn+0WRa371rLYFrZezHQ4fuVlSJCm5jqwsCjw/w=.sha256',
41+ 'value': {
42+ 'previous': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
43+ 'author': '@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519',
44+ 'sequence': 166,
45+ 'timestamp': 1501995914277,
46+ 'hash': 'sha256',
47+ 'content': {
48+ 'type': 'post',
49+ 'root': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
50+ 'branch': '%IAkSWeMycouc4MM7eakTTIC+TITDNtvfpFp3Jgz4LiU=.sha256',
51+ 'channel': 'lolashare',
52+ 'recps': null,
53+ 'text': "I'm rolling back to node 6x and npm 3x to see if that helps.",
54+ 'mentions': []
5555 },
56- "signature": "rddvGZidRcKn16Nwqz0zr8aJ0LPJQ/4zJ+agcNmgHOiYXgL7svXEdt01TILaEYpk1SgNMxIrENbRguN695smDA==.sig.ed25519"
56+ 'signature': 'rddvGZidRcKn16Nwqz0zr8aJ0LPJQ/4zJ+agcNmgHOiYXgL7svXEdt01TILaEYpk1SgNMxIrENbRguN695smDA==.sig.ed25519'
5757 }
5858 }, {
59- "key": "%a45EttIUyVuZGqWIUU3ndpSKHyqxOPoV2ZPhhwPgfag=.sha256",
60- "value": {
61- "previous": "%gWq4Pn+0WRa371rLYFrZezHQ4fuVlSJCm5jqwsCjw/w=.sha256",
62- "author": "@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519",
63- "sequence": 167,
64- "timestamp": 1501996875852,
65- "hash": "sha256",
66- "content": {
67- "type": "post",
68- "root": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
69- "branch": "%gWq4Pn+0WRa371rLYFrZezHQ4fuVlSJCm5jqwsCjw/w=.sha256",
70- "channel": "lolashare",
71- "recps": null,
72- "text": "It's still the same issue with the `electron-spellchecker`. I can't figure out a way to get around it.",
73- "mentions": []
59+ 'key': '%a45EttIUyVuZGqWIUU3ndpSKHyqxOPoV2ZPhhwPgfag=.sha256',
60+ 'value': {
61+ 'previous': '%gWq4Pn+0WRa371rLYFrZezHQ4fuVlSJCm5jqwsCjw/w=.sha256',
62+ 'author': '@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519',
63+ 'sequence': 167,
64+ 'timestamp': 1501996875852,
65+ 'hash': 'sha256',
66+ 'content': {
67+ 'type': 'post',
68+ 'root': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
69+ 'branch': '%gWq4Pn+0WRa371rLYFrZezHQ4fuVlSJCm5jqwsCjw/w=.sha256',
70+ 'channel': 'lolashare',
71+ 'recps': null,
72+ 'text': "It's still the same issue with the `electron-spellchecker`. I can't figure out a way to get around it.",
73+ 'mentions': []
7474 },
75- "signature": "geJ7ysx3Cf+hS8WpeuTMjAJbhS9Y1O2K/gKFCxtv7e93qmElF5wshOTWjSBtwyiGQDgMItIk/ml2H8Nf7z4RAQ==.sig.ed25519"
75+ 'signature': 'geJ7ysx3Cf+hS8WpeuTMjAJbhS9Y1O2K/gKFCxtv7e93qmElF5wshOTWjSBtwyiGQDgMItIk/ml2H8Nf7z4RAQ==.sig.ed25519'
7676 }
7777 }, {
78- "key": "%sF0OCi+RTkgl1OqUnvRwb6yi/4ME5l9f0dMCToFPs9k=.sha256",
79- "value": {
80- "previous": "%6dG3vV9qAj2Bbi2ZTwbqlzUVpJpOsuirny08XdUJx4k=.sha256",
81- "author": "@6ilZq3kN0F+dXFHAPjAwMm87JEb/VdB+LC9eIMW3sa0=.ed25519",
82- "sequence": 4595,
83- "timestamp": 1501997305257,
84- "hash": "sha256",
85- "content": {
86- "type": "post",
87- "root": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
88- "branch": "%a45EttIUyVuZGqWIUU3ndpSKHyqxOPoV2ZPhhwPgfag=.sha256",
89- "channel": "lolashare",
90- "recps": null,
91- "text": "hey [@Marak](@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519), if you're using Linux have you installed the system dependencies [described in the README](https://github.com/ssbc/patchwork)? compiling from source requires having some C(++) header files setup.",
92- "mentions": [
78+ 'key': '%sF0OCi+RTkgl1OqUnvRwb6yi/4ME5l9f0dMCToFPs9k=.sha256',
79+ 'value': {
80+ 'previous': '%6dG3vV9qAj2Bbi2ZTwbqlzUVpJpOsuirny08XdUJx4k=.sha256',
81+ 'author': '@6ilZq3kN0F+dXFHAPjAwMm87JEb/VdB+LC9eIMW3sa0=.ed25519',
82+ 'sequence': 4595,
83+ 'timestamp': 1501997305257,
84+ 'hash': 'sha256',
85+ 'content': {
86+ 'type': 'post',
87+ 'root': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
88+ 'branch': '%a45EttIUyVuZGqWIUU3ndpSKHyqxOPoV2ZPhhwPgfag=.sha256',
89+ 'channel': 'lolashare',
90+ 'recps': null,
91+ 'text': "hey [@Marak](@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519), if you're using Linux have you installed the system dependencies [described in the README](https://github.com/ssbc/patchwork)? compiling from source requires having some C(++) header files setup.",
92+ 'mentions': [
9393 {
94- "link": "@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519",
95- "name": "Marak"
94+ 'link': '@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519',
95+ 'name': 'Marak'
9696 }
9797 ]
9898 },
99- "signature": "bnUplsQQ5t1uKmRgSz+bLGhnHr/Z8mUK7nDw9NGVS1YblKgYx6uq0k3aDPUUJAT55cha0WtHKSiOEhMCfngAAg==.sig.ed25519"
99+ 'signature': 'bnUplsQQ5t1uKmRgSz+bLGhnHr/Z8mUK7nDw9NGVS1YblKgYx6uq0k3aDPUUJAT55cha0WtHKSiOEhMCfngAAg==.sig.ed25519'
100100 }
101101 }, {
102- "key": "%nXF7/PGa8bzl31VPvkQOS9FWklTgoQHM2+293ffSvr8=.sha256",
103- "value": {
104- "previous": "%a45EttIUyVuZGqWIUU3ndpSKHyqxOPoV2ZPhhwPgfag=.sha256",
105- "author": "@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519",
106- "sequence": 168,
107- "timestamp": 1501997709310,
108- "hash": "sha256",
109- "content": {
110- "type": "post",
111- "root": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
112- "branch": "%sF0OCi+RTkgl1OqUnvRwb6yi/4ME5l9f0dMCToFPs9k=.sha256",
113- "channel": "lolashare",
114- "recps": null,
115- "text": "I'm on MacOS. The main issue is the custom addon required for `electron-spellchecker`.\n\n",
116- "mentions": []
102+ 'key': '%nXF7/PGa8bzl31VPvkQOS9FWklTgoQHM2+293ffSvr8=.sha256',
103+ 'value': {
104+ 'previous': '%a45EttIUyVuZGqWIUU3ndpSKHyqxOPoV2ZPhhwPgfag=.sha256',
105+ 'author': '@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519',
106+ 'sequence': 168,
107+ 'timestamp': 1501997709310,
108+ 'hash': 'sha256',
109+ 'content': {
110+ 'type': 'post',
111+ 'root': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
112+ 'branch': '%sF0OCi+RTkgl1OqUnvRwb6yi/4ME5l9f0dMCToFPs9k=.sha256',
113+ 'channel': 'lolashare',
114+ 'recps': null,
115+ 'text': "I'm on MacOS. The main issue is the custom addon required for `electron-spellchecker`.\n\n",
116+ 'mentions': []
117117 },
118- "signature": "8WMXXr37UgKElHS36EoLWJkcj0lV2Vs6pwY+kUSLp1Li+3NDGIXh5fPe8Iah+rGWHxhvbs/miO+miwYSKJ2eCQ==.sig.ed25519"
118+ 'signature': '8WMXXr37UgKElHS36EoLWJkcj0lV2Vs6pwY+kUSLp1Li+3NDGIXh5fPe8Iah+rGWHxhvbs/miO+miwYSKJ2eCQ==.sig.ed25519'
119119 }
120120 }, {
121- "key": "%IbRDgPsmkwe7KAyzunmJOt/dB3SNohUh5CuM0K1VEMM=.sha256",
122- "value": {
123- "previous": "%nXF7/PGa8bzl31VPvkQOS9FWklTgoQHM2+293ffSvr8=.sha256",
124- "author": "@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519",
125- "sequence": 169,
126- "timestamp": 1501997880667,
127- "hash": "sha256",
128- "content": {
129- "type": "post",
130- "root": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
131- "branch": "%nXF7/PGa8bzl31VPvkQOS9FWklTgoQHM2+293ffSvr8=.sha256",
132- "channel": "lolashare",
133- "recps": null,
134- "text": "Basically if I comment out the spellcheck dependency, I'm able to install and start the app. It just crashes the moment it can't find the spellchecker.",
135- "mentions": []
121+ 'key': '%IbRDgPsmkwe7KAyzunmJOt/dB3SNohUh5CuM0K1VEMM=.sha256',
122+ 'value': {
123+ 'previous': '%nXF7/PGa8bzl31VPvkQOS9FWklTgoQHM2+293ffSvr8=.sha256',
124+ 'author': '@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519',
125+ 'sequence': 169,
126+ 'timestamp': 1501997880667,
127+ 'hash': 'sha256',
128+ 'content': {
129+ 'type': 'post',
130+ 'root': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
131+ 'branch': '%nXF7/PGa8bzl31VPvkQOS9FWklTgoQHM2+293ffSvr8=.sha256',
132+ 'channel': 'lolashare',
133+ 'recps': null,
134+ 'text': "Basically if I comment out the spellcheck dependency, I'm able to install and start the app. It just crashes the moment it can't find the spellchecker.",
135+ 'mentions': []
136136 },
137- "signature": "OJ3FbnkBOMruGaLFUYe5T3Xx/BU8Iz6tfRddHgdCo1gJchU/qGe35GmGpAF5JhOgFs9QHtCWgAkz4pQyxQHTBA==.sig.ed25519"
137+ 'signature': 'OJ3FbnkBOMruGaLFUYe5T3Xx/BU8Iz6tfRddHgdCo1gJchU/qGe35GmGpAF5JhOgFs9QHtCWgAkz4pQyxQHTBA==.sig.ed25519'
138138 }
139139 }, {
140- "key": "%vSb2DyggRljWViL5SgE72roquM83h8P+wHWFpbElFo8=.sha256",
141- "value": {
142- "previous": "%IbRDgPsmkwe7KAyzunmJOt/dB3SNohUh5CuM0K1VEMM=.sha256",
143- "author": "@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519",
144- "sequence": 170,
145- "timestamp": 1501998429588,
146- "hash": "sha256",
147- "content": {
148- "type": "post",
149- "root": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
150- "branch": "%IbRDgPsmkwe7KAyzunmJOt/dB3SNohUh5CuM0K1VEMM=.sha256",
151- "channel": "lolashare",
152- "recps": null,
153- "text": "It's pretty much impossible for me to contribute or fork `patchwork` on this computer. I have no idea what else I could try to do to fix this. I've nuked node and npm a few times. Obviously there is something wrong with my env that `npm` doesn't like.",
154- "mentions": []
140+ 'key': '%vSb2DyggRljWViL5SgE72roquM83h8P+wHWFpbElFo8=.sha256',
141+ 'value': {
142+ 'previous': '%IbRDgPsmkwe7KAyzunmJOt/dB3SNohUh5CuM0K1VEMM=.sha256',
143+ 'author': '@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519',
144+ 'sequence': 170,
145+ 'timestamp': 1501998429588,
146+ 'hash': 'sha256',
147+ 'content': {
148+ 'type': 'post',
149+ 'root': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
150+ 'branch': '%IbRDgPsmkwe7KAyzunmJOt/dB3SNohUh5CuM0K1VEMM=.sha256',
151+ 'channel': 'lolashare',
152+ 'recps': null,
153+ 'text': "It's pretty much impossible for me to contribute or fork `patchwork` on this computer. I have no idea what else I could try to do to fix this. I've nuked node and npm a few times. Obviously there is something wrong with my env that `npm` doesn't like.",
154+ 'mentions': []
155155 },
156- "signature": "AyFHLOnE/N8I9uqD0u7D11AJoeXIa0q6GUasyQSGriBxjk09JdGmKFimNmkRNCjImmsxUXstrQxF3u7THPuDBQ==.sig.ed25519"
156+ 'signature': 'AyFHLOnE/N8I9uqD0u7D11AJoeXIa0q6GUasyQSGriBxjk09JdGmKFimNmkRNCjImmsxUXstrQxF3u7THPuDBQ==.sig.ed25519'
157157 }
158158 }, {
159- "key": "%8SUAh9kPBdWTmIAvt3DFPI1NjZc1VF6KyxwOKil23tI=.sha256",
160- "value": {
161- "previous": "%0b5qu65mEMhNR7W12e0/VYVC3DlsWRWhbtWUXSqyaf8=.sha256",
162- "author": "@6ilZq3kN0F+dXFHAPjAwMm87JEb/VdB+LC9eIMW3sa0=.ed25519",
163- "sequence": 4600,
164- "timestamp": 1501999271094,
165- "hash": "sha256",
166- "content": {
167- "type": "post",
168- "root": "%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256",
169- "branch": "%vSb2DyggRljWViL5SgE72roquM83h8P+wHWFpbElFo8=.sha256",
170- "channel": "lolashare",
171- "recps": null,
172- "text": "[@Marak](@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519) what specific errors are you experiencing? are the `electron-spellchecker` native modules failing to compile?",
173- "mentions": [
159+ 'key': '%8SUAh9kPBdWTmIAvt3DFPI1NjZc1VF6KyxwOKil23tI=.sha256',
160+ 'value': {
161+ 'previous': '%0b5qu65mEMhNR7W12e0/VYVC3DlsWRWhbtWUXSqyaf8=.sha256',
162+ 'author': '@6ilZq3kN0F+dXFHAPjAwMm87JEb/VdB+LC9eIMW3sa0=.ed25519',
163+ 'sequence': 4600,
164+ 'timestamp': 1501999271094,
165+ 'hash': 'sha256',
166+ 'content': {
167+ 'type': 'post',
168+ 'root': '%fXXZgQrwnj7F+Y19H0IXxNriuvPFoahvusih3UzpkfA=.sha256',
169+ 'branch': '%vSb2DyggRljWViL5SgE72roquM83h8P+wHWFpbElFo8=.sha256',
170+ 'channel': 'lolashare',
171+ 'recps': null,
172+ 'text': '[@Marak](@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519) what specific errors are you experiencing? are the `electron-spellchecker` native modules failing to compile?',
173+ 'mentions': [
174174 {
175- "link": "@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519",
176- "name": "Marak"
175+ 'link': '@5ovtEaQsrXYU13+02SIq7ny2milWoKusk5+CFI+twfs=.ed25519',
176+ 'name': 'Marak'
177177 }
178178 ]
179179 },
180- "signature": "uXsP8MtchPmUgAx8WjOe9lvUcn7IpWknYfUfw9CNIC4yuLgSpsAMMqJeGmMKLAd0lwevTFf6A/jDnRmaLq+IDQ==.sig.ed25519"
180+ 'signature': 'uXsP8MtchPmUgAx8WjOe9lvUcn7IpWknYfUfw9CNIC4yuLgSpsAMMqJeGmMKLAd0lwevTFf6A/jDnRmaLq+IDQ==.sig.ed25519'
181181 }
182182 }]
183-

Built with git-ssb-web