git ssb

16+

Dominic / patchbay



Commit d542ac6edb25eb991a692944332bd33016e0ce22

add menu

mix irving committed on 4/1/2017, 12:26:35 PM
Parent: 4c68eb0d5b9492c23ab5b49977560d7c3361d4f1

Files changed

about/html/edit.jschanged
main/html/app.jschanged
main/html/hypertabs.mcsschanged
main/html/menu.jsadded
main/html/menu.mcssadded
router/html/page/notifications.jschanged
router/html/page/private.jschanged
router/html/page/profile.jschanged
router/html/page/public.jschanged
router/html/page/search.jschanged
about/html/edit.jsView
@@ -92,10 +92,10 @@
9292 h('img', { src: avatarSrc })
9393 ]),
9494 h('footer', displayedName)
9595 ]),
96- h('section.description', computed(api.about.obs.description(id), (descr)=>{
97- if (descr == null) return "" // TODO: should be in patchcore, I think...
96+ h('section.description', computed(api.about.obs.description(id), (descr) => {
97+ if (descr == null) return '' // TODO: should be in patchcore, I think...
9898 return api.message.html.markdown(descr)
9999 })),
100100 h('section.aliases', [
101101 h('header', 'Aliases'),
main/html/app.jsView
@@ -12,8 +12,9 @@
1212 },
1313 html: {
1414 error: 'first',
1515 externalConfirm: 'first',
16+ menu: 'first',
1617 search: 'first'
1718 },
1819 sync: {
1920 catchKeyboardShortcut: 'first'
@@ -29,18 +30,21 @@
2930 function app () {
3031 const css = values(api.styles.css()).join('\n')
3132 insertCss(css)
3233
33- const search = api.main.html.search((path, change) => {
34+ const handleSelection = (path, change) => {
3435 if (tabs.has(path)) {
3536 tabs.select(path)
3637 return true
3738 }
3839
3940 addPage(path, true, false)
4041 return change
41- })
42- const tabs = Tabs(onSelect, { append: h('div.navExtra', [ search ]) })
42+ }
43+ const search = api.main.html.search(handleSelection)
44+ const menu = api.main.html.menu(handleSelection)
45+
46+ const tabs = Tabs(onSelect, { append: h('div.navExtra', [ search, menu ]) })
4347 function onSelect (indexes) {
4448 search.input.value = tabs.get(indexes[0]).content.id
4549 }
4650
main/html/hypertabs.mcssView
@@ -72,9 +72,9 @@
7272 }
7373
7474 }
7575
76- div.extra {
76+ div.navExtra {
7777 display: flex
7878 align-items: center
7979 }
8080 }
main/html/menu.jsView
@@ -1,0 +1,23 @@
1+const nest = require('depnest')
2+const { h, Value } = require('mutant')
3+
4+exports.gives = nest('main.html.menu')
5+
6+exports.needs = nest('router.html.simpleRoute', 'map')
7+
8+exports.create = function (api) {
9+ return nest('main.html.menu', menu)
10+
11+ function menu (handleClick) {
12+ var state = Value('')
13+
14+ return h('Menu', {
15+ classList: [ state ],
16+ 'ev-mouseover': () => state.set('-active'),
17+ 'ev-mouseout': () => state.set('')
18+ }, [
19+ h('div', api.router.html.simpleRoute(handleClick))
20+ ])
21+ }
22+}
23+
main/html/menu.mcssView
@@ -1,0 +1,29 @@
1+Menu {
2+ background-color: #0088cc
3+ width: 1rem
4+ height: 1rem
5+
6+ div {
7+ display: none
8+
9+ position: absolute
10+ top: .5em
11+ right: 0
12+ padding-top: .5em
13+ padding-bottom: .5em
14+ padding-right: 1em
15+ padding-left: 1em
16+ background: #f5f5f5
17+ border: 1px solid #eee
18+ z-index: 5
19+
20+ }
21+
22+ -active {
23+ div {
24+ display: flex
25+ flex-direction: column
26+ }
27+ }
28+}
29+
router/html/page/notifications.jsView
@@ -1,10 +1,17 @@
11 const nest = require('depnest')
2+const { h } = require('mutant')
23 const pull = require('pull-stream')
34 const Scroller = require('pull-scroll')
45 const next = require('../../../junk/next-stepper')
56
6-exports.gives = nest('router.html.page')
7+exports.gives = nest({
8+ 'router.html': {
9+ page: true,
10+ simpleRoute: true
11+ }
12+})
13+
714 exports.needs = nest({
815 'feed.pull': {
916 mentions: 'first',
1017 public: 'first'
@@ -12,11 +19,28 @@
1219 'keys.sync.id': 'first',
1320 'main.html.scroller': 'first',
1421 'message.html.render': 'first'
1522 })
23+
1624 exports.create = function (api) {
17- return nest('router.html.page', (path) => {
18- if (path !== '/notifications') return
25+ const route = '/notifications'
26+
27+ return nest({
28+ 'router.html': {
29+ page: notificationsPage,
30+ simpleRoute: menuItem
31+ }
32+ })
33+
34+ function menuItem (handleClick) {
35+ return h('a', {
36+ style: { order: 3 },
37+ 'ev-click': () => handleClick(route)
38+ }, route)
39+ }
40+
41+ function notificationsPage (path) {
42+ if (path !== route) return
1943 const id = api.keys.sync.id()
2044 const mentions = api.feed.pull.mentions(id)
2145
2246 const { container, content } = api.main.html.scroller({})
@@ -30,7 +54,7 @@
3054 next(mentions, {reverse: true, limit: 100, live: false}),
3155 Scroller(container, content, api.message.html.render, false, false)
3256 )
3357 return container
34- })
58+ }
3559 }
3660
router/html/page/private.jsView
@@ -1,11 +1,17 @@
11 const nest = require('depnest')
2+const { h } = require('mutant')
23 const pull = require('pull-stream')
34 const Scroller = require('pull-scroll')
45 const next = require('../../../junk/next-stepper')
56 const ref = require('ssb-ref')
67
7-exports.gives = nest('router.html.page')
8+exports.gives = nest({
9+ 'router.html': {
10+ page: true,
11+ simpleRoute: true
12+ }
13+})
814
915 exports.needs = nest({
1016 'feed.pull.private': 'first',
1117 'keys.sync.id': 'first',
@@ -16,12 +22,26 @@
1622 }
1723 })
1824
1925 exports.create = function (api) {
20- return nest('router.html.page', privatePage)
26+ const route = '/private'
2127
28+ return nest({
29+ 'router.html': {
30+ page: privatePage,
31+ simpleRoute: menuItem
32+ }
33+ })
34+
35+ function menuItem (handleClick) {
36+ return h('a', {
37+ style: { order: 2 },
38+ 'ev-click': () => handleClick(route)
39+ }, route)
40+ }
41+
2242 function privatePage (path) {
23- if (path !== '/private') return
43+ if (path !== route) return
2444
2545 const id = api.keys.sync.id()
2646
2747 const composer = api.message.html.compose({
router/html/page/profile.jsView
@@ -5,21 +5,18 @@
55 const { h, watch } = require('mutant')
66 const next = require('../../../junk/next-stepper')
77
88 exports.gives = nest({
9- 'router.html.page': true
9+ 'router.html': {
10+ page: true,
11+ simpleRoute: true
12+ }
1013 })
11-// menu_items
1214
1315 exports.needs = nest({
1416 'about.html.edit': 'first',
1517 'about.obs': {
1618 'name': 'first'
17- // 'description': 'first',
18- // 'image': 'first',
19- // 'imageUrl',
20- // 'names',
21- // 'images',
2219 },
2320 'contact.html.relationships': 'first',
2421 'keys.sync.id': 'first',
2522 'main.html.scroller': 'first',
@@ -28,16 +25,22 @@
2825 })
2926
3027 exports.create = function (api) {
3128 return nest({
32- 'router.html.page': page
29+ 'router.html': {
30+ page: profilePage,
31+ simpleRoute: menuItem
32+ }
3333 })
34- // menu_items: () => h('a', {
35- // href: '#'+self_id,
36- // style: { order: 1 }
37- // }, '/profile')
3834
39- function page (id) {
35+ function menuItem (handleClick) {
36+ return h('a', {
37+ style: { order: 0 },
38+ 'ev-click': () => handleClick(api.keys.sync.id())
39+ }, '/profile')
40+ }
41+
42+ function profilePage (id) {
4043 if (!ref.isFeed(id)) return
4144
4245 const profile = h('Profile', [
4346 h('section.edit', api.about.html.edit(id)),
router/html/page/public.jsView
@@ -1,10 +1,16 @@
11 const nest = require('depnest')
2+const { h } = require('mutant')
23 const pull = require('pull-stream')
34 const Scroller = require('pull-scroll')
45 const next = require('../../../junk/next-stepper')
56
6-exports.gives = nest('router.html.page')
7+exports.gives = nest({
8+ 'router.html': {
9+ page: true,
10+ simpleRoute: true
11+ }
12+})
713
814 exports.needs = nest({
915 'feed.pull.public': 'first',
1016 'message.html': {
@@ -14,12 +20,26 @@
1420 'main.html.scroller': 'first'
1521 })
1622
1723 exports.create = function (api) {
18- return nest('router.html.page', publicPage)
24+ const route = '/public'
1925
26+ return nest({
27+ 'router.html': {
28+ page: publicPage,
29+ simpleRoute: menuItem
30+ }
31+ })
32+
33+ function menuItem (handleClick) {
34+ return h('a', {
35+ style: { order: 1 },
36+ 'ev-click': () => handleClick(route)
37+ }, route)
38+ }
39+
2040 function publicPage (path) {
21- if (path !== '/public') return
41+ if (path !== route) return
2242
2343 const composer = api.message.html.compose({
2444 meta: { type: 'post' },
2545 placeholder: 'Write a public message'
router/html/page/search.jsView
@@ -132,9 +132,9 @@
132132 } else if (/^no source/.test(err.message)) {
133133 search.isLinear.set(true)
134134 return pull(
135135 next(api.sbot_log, {reverse: true, limit: 500, live: false}),
136- pull.through(() => search.linear.checked.set(search.linear.checked()+1)),
136+ pull.through(() => search.linear.checked.set(search.linear.checked() + 1)),
137137 pull.filter(matchesQuery)
138138 )
139139 }
140140 }),

Built with git-ssb-web