Files: b3369beb8b305b3fd5c63b483fdd8810799b0e2d / book / html / layout / card.js
1561 bytesRaw
1 | const nest = require('depnest') |
2 | const { h, computed } = require('mutant') |
3 | const spacetime = require('spacetime') |
4 | |
5 | exports.needs = nest({ |
6 | 'message.html': { |
7 | backlinks: 'first', |
8 | meta: 'map', |
9 | action: 'map', |
10 | timestamp: 'first' |
11 | }, |
12 | 'about.html.image': 'first', |
13 | 'about.obs.color': 'first', |
14 | 'blob.sync.url': 'first', |
15 | 'book.obs.book': 'first', |
16 | 'book.html': { |
17 | description: 'first', |
18 | title: 'first' |
19 | } |
20 | }) |
21 | |
22 | exports.gives = nest('book.html.layout') |
23 | |
24 | exports.create = (api) => { |
25 | return nest('book.html.layout', bookLayout) |
26 | |
27 | function bookLayout (msg, opts) { |
28 | const { layout, obs, isCard } = opts |
29 | |
30 | if (!(layout === undefined || layout === 'card')) return |
31 | |
32 | const { timestamp, meta, backlinks, action } = api.message.html |
33 | |
34 | const { description, title, authors } = api.book.html |
35 | |
36 | const content = [ |
37 | h('a', { href: msg.key }, [ |
38 | h('.toggle-layout', { |
39 | 'ev-click': e => { |
40 | e.preventDefault() |
41 | isCard.set(false) |
42 | } |
43 | }, '+'), |
44 | h('.details', [ |
45 | title({title: obs.title, msg}), |
46 | authors({authors: obs.authors}), |
47 | description({description: obs.description}) |
48 | ]) |
49 | ]) |
50 | ] |
51 | |
52 | return h('Message -book-card', [ |
53 | h('section.avatar', {}, api.about.html.image(msg.value.author)), |
54 | h('section.timestamp', {}, timestamp(msg)), |
55 | h('section.meta', {}, meta(msg)), |
56 | h('section.content', {}, content), |
57 | h('section.actions', {}, action(msg)), |
58 | h('footer.backlinks', {}, backlinks(msg)) |
59 | ]) |
60 | } |
61 | } |
62 |
Built with git-ssb-web