git ssb

16+

Dominic / patchbay



Tree: c7c8921e2864618a237860e416900eed3b9acbe9

Files: c7c8921e2864618a237860e416900eed3b9acbe9 / main / html / app.js

2077 bytesRaw
1const { h } = require('mutant')
2const nest = require('depnest')
3const insertCss = require('insert-css')
4const Tabs = require('hypertabs')
5
6exports.gives = nest('main.html.app')
7
8exports.needs = nest({
9 main: {
10 async: {
11 catchLinkClick: 'first'
12 },
13 html: {
14 error: 'first',
15 externalConfirm: 'first',
16 search: 'first'
17 }
18 },
19 'router.html.page': 'first',
20 'styles.css': 'reduce'
21})
22
23exports.create = function (api) {
24 return nest('main.html.app', app)
25
26 function app () {
27 const css = values(api.styles.css()).join('\n')
28 insertCss(css)
29
30 const search = api.main.html.search((path, change) => {
31 if (tabs.has(path)) {
32 tabs.select(path)
33 return true
34 }
35
36 var page = addPage(path, true, false)
37 return change
38 })
39 const tabs = Tabs(onSelect, { append: h('div.navExtra', [ search ]) })
40 function onSelect (indexes) {
41 search.input.value = tabs.get(indexes[0]).content.id
42 }
43
44 const App = h('App', tabs)
45
46 function addPage (link, change, split) {
47 const page = api.router.html.page(link)
48 if (!page) return
49
50 page.id = page.id || link
51 tabs.add(page, change, split)
52 }
53
54 const initialTabs = ['/public', '/private', '/notifications']
55 initialTabs.forEach(p => addPage(p))
56 tabs.select(0)
57
58 // Catch link clicks
59 api.main.async.catchLinkClick(App, (link, { ctrlKey: openBackground, isExternal }) => {
60 if (isExternal) api.main.html.externalConfirm(link)
61
62 if (tabs.has(link)) tabs.select(link)
63 else {
64 const changeTab = !openBackground
65 addPage(link, changeTab)
66 }
67 })
68
69 // Catch errors
70 var { container: errorPage, content: errorList } = api.router.html.page('/errors')
71 window.addEventListener('error', ev => {
72 if (!tabs.has('/errors')) tabs.add(errorPage, true)
73
74 const error = api.main.html.error(ev.error || ev)
75 errorList.appendChild(error)
76 })
77
78 return App
79 }
80}
81
82function values (object) {
83 const keys = Object.keys(object)
84 return keys.map(k => object[k])
85}
86
87

Built with git-ssb-web