git ssb

16+

Dominic / patchbay



Commit 586029e96f32a0cff461ec17d522d4877ec63fc0

merge

Dominic Tarr committed on 10/25/2016, 1:42:29 PM
Parent: bfe1cc1971947547bf1a8c0d9facad16ba4eb786
Parent: 0e8b5960a55bb51280320035b8d4cb1ecd883988

Files changed

modules_basic/follow.jschanged
modules_basic/like.jschanged
modules_basic/message-link.jschanged
modules_basic/message-name.jschanged
modules_basic/message.jschanged
modules_basic/private.jschanged
modules_basic/thread.jschanged
modules_core/menu.jschanged
modules_core/message-confirm.jschanged
modules_core/tabs.jschanged
modules_extra/git.jschanged
modules_extra/notifications.jschanged
modules_extra/raw.jschanged
modules_extra/theme.jschanged
package.jsonchanged
style.csschanged
modules_basic/follow.jsView
@@ -1,7 +1,10 @@
11 var h = require('hyperscript')
22 var u = require('../util')
3-var avatar = require('../plugs').first(exports.avatar = [])
3 +var plugs = require('../plugs')
4 +var avatar = plugs.first(exports.avatar = [])
5 +var avatar_name = plugs.first(exports.avatar_name = [])
6 +var avatar_link = plugs.first(exports.avatar_link = [])
47 var pull = require('pull-stream')
58 var plugs = require('../plugs')
69
710 //render a message when someone follows someone,
@@ -9,8 +12,21 @@
912 function isRelated(value, name) {
1013 return value ? name : value === false ? 'un'+name : ''
1114 }
1215
16 +exports.message_content =
17 +exports.message_content_mini = function (msg) {
18 + var content = msg.value.content
19 + if(content.type == 'contact' && content.contact) {
20 + var relation = isRelated(content.following, 'follows')
21 + if(content.blocking) relation = 'blocks'
22 + return [
23 + relation, ' ',
24 + avatar_link(content.contact, avatar_name(content.contact), '')
25 + ]
26 + }
27 +}
28 +
1329 exports.message_content = function (msg) {
1430
1531 var content = msg.value.content
1632 if(content.type == 'contact' && content.contact) {
modules_basic/like.jsView
@@ -8,15 +8,17 @@
88 var message_confirm = plugs.first(exports.message_confirm = [])
99 var message_link = plugs.first(exports.message_link = [])
1010 var sbot_links = plugs.first(exports.sbot_links = [])
1111
12-exports.message_content = function (msg, sbot) {
12 +
13 +exports.message_content =
14 +exports.message_content_mini = function (msg, sbot) {
1315 if(msg.value.content.type !== 'vote') return
1416 var link = msg.value.content.vote.link
15- return h('div',
17 + return [
1618 msg.value.content.vote.value > 0 ? 'Dug' : 'Undug',
1719 ' ', message_link(link)
18- )
20 + ]
1921 }
2022
2123 exports.message_meta = function (msg, sbot) {
2224 var digs = h('a')
modules_basic/message-link.jsView
@@ -1,30 +1,33 @@
11 var h = require('hyperscript')
2 +var ref = require('ssb-ref')
23
3-var sbot_get = require('../plugs').first(exports.sbot_get = [])
4 +var first = require('../plugs').first
5 +var sbot_get = first(exports.sbot_get = [])
6 +var message_name = first(exports.message_name = [])
47
58 exports.message_link = function (id) {
69
710 if('string' !== typeof id)
811 throw new Error('link must be to message id')
912
1013 var link = h('a', {href: '#'+id}, id.substring(0, 10)+'...')
1114
12- sbot_get(id, function (err, value) {
13- if(err) {
14- if (err.name == 'NotFoundError')
15- link.textContent += ' (missing)'
16- else
17- console.error(err)
18- return
19- }
20- if(value.content.text)
21- link.textContent = value.content.text.substring(0, 40)+'...'
22- })
15 + if(ref.isMsg(id))
16 + message_name(id, function (err, name) {
17 + if(err) console.error(err)
18 + else link.textContent = name
19 + })
2320
2421 return link
2522 }
2623
2724
2825
2926
3027
28 +
29 +
30 +
31 +
32 +
33 +
modules_basic/message-name.jsView
@@ -1,8 +1,15 @@
11
22 var sbot_get = require('../plugs').first(exports.sbot_get = [])
33
4-exports.message_name = function (id) {
4 +exports.message_name = function (id, cb) {
55 sbot_get(id, function (err, value) {
6-
6 + if(err && err.name == 'NotFoundError')
7 + return cb(null, id.substring(0, 10)+'...(missing)')
8 + if(value.content.type === 'post' && 'string' === typeof value.content.text)
9 + return cb(null, value.content.text.substring(0, 40)+'...')
10 + else if('string' === typeof value.content.text)
11 + return cb(null, value.content.type + ':'+value.content.text.substring(0, 20))
12 + else
13 + return cb(null, id.substring(0, 10)+'...')
714 })
815 }
modules_basic/message.jsView
@@ -1,20 +1,35 @@
11 var h = require('hyperscript')
22 var u = require('../util')
33 var pull = require('pull-stream')
44
5-
6-
75 var plugs = require('../plugs')
86 var message_content = plugs.first(exports.message_content = [])
7 +var message_content_mini = plugs.first(exports.message_content_mini = [])
98 var avatar = plugs.first(exports.avatar = [])
9 +var avatar_name = plugs.first(exports.avatar_name = [])
10 +var avatar_link = plugs.first(exports.avatar_link = [])
1011 var message_meta = plugs.map(exports.message_meta = [])
1112 var message_action = plugs.map(exports.message_action = [])
1213 var message_link = plugs.first(exports.message_link = [])
1314
1415 var sbot_links = plugs.first(exports.sbot_links = [])
1516
1617 exports.message_render = function (msg, sbot) {
18 + var elMini = message_content_mini(msg)
19 + if (elMini) {
20 + var div = h('div.message',
21 + h('div.message_content.row',
22 + h('div',
23 + avatar_link(msg.value.author, avatar_name(msg.value.author), ''),
24 + ' ', elMini),
25 + h('div.message_meta.row', message_meta(msg))
26 + )
27 + )
28 + div.setAttribute('tabindex', '0')
29 + return div
30 + }
31 +
1732 var el = message_content(msg)
1833 if(!el) return
1934
2035 var links = []
modules_basic/private.jsView
@@ -75,9 +75,9 @@
7575 if(Array.isArray(ary)) return ary.map(iter)
7676 }
7777
7878 exports.message_meta = function (msg) {
79- if(msg.value.private)
79 + if(msg.value.content.recps || msg.value.private)
8080 return h('span.row', 'PRIVATE', map(msg.value.content.recps, function (id) {
8181 return avatar_image_link('string' == typeof id ? id : id.link, 'thumbnail')
8282 }))
8383 }
modules_basic/thread.jsView
@@ -4,8 +4,9 @@
44 var ref = require('ssb-ref')
55 var h = require('hyperscript')
66 var u = require('../util')
77 var Scroller = require('pull-scroll')
8 +var self_id = require('../keys').id
89
910 function once (cont) {
1011 var ended = false
1112 return function (abort, cb) {
@@ -22,8 +23,9 @@
2223
2324 var plugs = require('../plugs')
2425
2526 var message_render = plugs.first(exports.message_render = [])
27 +var message_name = plugs.first(exports.message_name = [])
2628 var message_compose = plugs.first(exports.message_compose = [])
2729 var message_unbox = plugs.first(exports.message_unbox = [])
2830
2931 var sbot_get = plugs.first(exports.sbot_get = [])
@@ -65,8 +67,12 @@
6567 message_compose(meta, {shrink: false, placeholder: 'Write a reply'})
6668 )
6769 )
6870
71 + message_name(id, function (err, name) {
72 + div.id = name
73 + })
74 +
6975 pull(
7076 sbot_links({
7177 rel: 'root', dest: id, keys: true, old: false
7278 }),
@@ -97,10 +103,15 @@
97103 meta.root = thread[0].value.content.root || thread[0].key
98104 meta.channel = thread[0].value.content.channel
99105
100106 var recps = thread[0].value.content.recps
101- if(recps && thread[0].value.private)
102- meta.recps = recps
107 + var private = thread[0].value.private
108 + if(private) {
109 + if(recps)
110 + meta.recps = recps
111 + else
112 + meta.recps = [thread[0].value.author, self_id]
113 + }
103114 })
104115 }
105116
106117 loadThread()
modules_core/menu.jsView
@@ -3,11 +3,11 @@
33
44 var menu_items = plugs.map(exports.menu_items = [])
55
66 var status = h('div.status.error') //start off disconnected
7- var list = h('div.column', {style: 'display: none;'})
7 + var list = h('div.menu.column', {style: 'display: none;'})
88
9-var menu = h('div.menu.column', status, list , {
9 +var menu = h('div.column', status, list , {
1010 onmouseover: function (e) {
1111 list.style.display = 'flex'
1212 }, onmouseout: function () {
1313 list.style.display = 'none'
modules_core/message-confirm.jsView
@@ -1,27 +1,41 @@
11 var lightbox = require('hyperlightbox')
22 var h = require('hyperscript')
33 var u = require('../util')
4 +var self_id = require('../keys').id
45 //publish or add
56
67 var plugs = require('../plugs')
78
89 var publish = plugs.first(exports.sbot_publish = [])
910 var message_content = plugs.first(exports.message_content = [])
11 +var avatar = plugs.first(exports.avatar = [])
12 +var message_meta = plugs.map(exports.message_meta = [])
1013
1114 exports.message_confirm = function (content, cb) {
1215
1316 cb = cb || function () {}
1417
1518 var lb = lightbox()
1619 document.body.appendChild(lb)
1720
21 + var msg = {
22 + key: "DRAFT",
23 + value: {
24 + author: self_id,
25 + previous: null,
26 + sequence: null,
27 + timestamp: Date.now(),
28 + content: content
29 + }
30 + }
31 +
1832 var okay = h('button', 'okay', {onclick: function () {
1933 lb.remove()
2034 publish(content, cb)
2135 }})
2236
23- var cancel = h('button', 'cancel', {onclick: function () {
37 + var cancel = h('button', 'Cancel', {onclick: function () {
2438 lb.remove()
2539 cb(null)
2640 }})
2741
@@ -29,10 +43,16 @@
2943 if(ev.keyCode === 27) cancel.click() //escape
3044 })
3145
3246 lb.show(h('div.column.message-confirm',
33- message_content({key: "DRAFT", value: {content: content}})
34- || h('pre', JSON.stringify(content, null, 2)),
47 + h('div.message',
48 + h('div.title.row',
49 + h('div.avatar', avatar(msg.value.author, 'thumbnail')),
50 + h('div.message_meta.row', message_meta(msg))
51 + ),
52 + h('div.message_content', message_content(msg)
53 + || h('pre', JSON.stringify(msg, null, 2)))
54 + ),
3555 h('div.row.message-confirm__controls', okay, cancel)
3656 ))
3757
3858 okay.focus()
modules_core/tabs.jsView
@@ -166,13 +166,15 @@
166166 window.removeEventListener('error', window.onError)
167167 delete window.onError
168168 }
169169
170 + var errors = h('div.errors', {id: 'errors'})
171 +
170172 // put errors in a tab
171173 window.addEventListener('error', function (ev) {
172174 var err = ev.error || ev
173175 if(!tabs.has('errors'))
174- tabs.add('errors', errors, false)
176 + tabs.add(errors, false)
175177 var el = h('div.message',
176178 h('strong', err.message),
177179 h('pre', err.stack))
178180 if (errorsContent.firstChild)
@@ -180,8 +182,25 @@
180182 else
181183 errorsContent.appendChild(el)
182184 })
183185
186 + if (process.versions.electron) {
187 + window.addEventListener('contextmenu', function (ev) {
188 + ev.preventDefault()
189 + var remote = require('electron').remote
190 + var Menu = remote.Menu
191 + var MenuItem = remote.MenuItem
192 + var menu = new Menu()
193 + menu.append(new MenuItem({
194 + label: 'Inspect Element',
195 + click: function () {
196 + remote.getCurrentWindow().inspectElement(ev.x, ev.y)
197 + }
198 + }))
199 + menu.popup(remote.getCurrentWindow())
200 + })
201 + }
202 +
184203 return tabs
185204 }
186205
187206
@@ -191,4 +210,5 @@
191210
192211
193212
194213
214 +
modules_extra/git.jsView
@@ -76,17 +76,26 @@
7676 })
7777 )
7878 }
7979
80-function repoLink(id) {
81- var el = h('a', {href: '#'+id}, id.substr(0, 10) + '…')
82- getAvatar({links: sbot_links}, self_id, id, function (err, avatar) {
80 +function repoText(id) {
81 + var text = document.createTextNode(id.substr(0, 10) + '…')
82 + getAvatar({links: sbot_links, get: sbot_get}, self_id, id,
83 + function (err, avatar) {
8384 if(err) return console.error(err)
84- el.textContent = avatar.name
85 + text.nodeValue = avatar.name
8586 })
86- return el
87 + return text
8788 }
8889
90 +function repoLink(id) {
91 + return h('a', {href: '#'+id}, repoText(id))
92 +}
93 +
94 +function repoName(id) {
95 + return h('ins', repoText(id))
96 +}
97 +
8998 function getIssueState(id, cb) {
9099 pull(
91100 sbot_links({dest: id, rel: 'issues', values: true, reverse: true}),
92101 pull.map(function (msg) {
@@ -130,19 +139,8 @@
130139 }
131140 return t
132141 }
133142
134-function repoName(id, link) {
135- var el = link
136- ? h('a', {href: '#'+id}, id.substr(0, 8) + '…')
137- : h('ins', id.substr(0, 8) + '…')
138- getAvatar({links: sbot_links}, self_id, id, function (err, avatar) {
139- if(err) return console.error(err)
140- el.textContent = avatar.name
141- })
142- return el
143-}
144-
145143 function renderIssueEdit(c) {
146144 var id = c.issue || c.link
147145 return [
148146 c.title ? h('p', 'renamed issue ', message_link(id),
@@ -158,9 +156,9 @@
158156 var branchesT, tagsT, openIssuesT, closedIssuesT, openPRsT, closedPRsT
159157 var forksT
160158 var div = h('div',
161159 h('p', 'git repo ', repoName(msg.key)),
162- c.upstream ? h('p', 'fork of ', repoName(c.upstream, true)) : '',
160 + c.upstream ? h('p', 'fork of ', repoLink(c.upstream)) : '',
163161 h('p', h('code', 'ssb://' + msg.key)),
164162 h('div.git-table-wrapper', {style: {'max-height': '12em'}},
165163 h('table',
166164 branchesT = tableRows(h('tr',
@@ -186,12 +184,14 @@
186184 h('div.git-table-wrapper',
187185 h('table',
188186 forksT = tableRows(h('tr',
189187 h('th', 'forks'))))),
190- h('div', h('a', {href: '#', onclick: function () {
188 + h('div', h('a', {href: '#', onclick: function (e) {
189 + e.preventDefault()
191190 this.parentNode.replaceChild(issueForm(msg), this)
192191 }}, 'New Issue…')),
193- h('div', h('a', {href: '#', onclick: function () {
192 + h('div', h('a', {href: '#', onclick: function (e) {
193 + e.preventDefault()
194194 this.parentNode.replaceChild(pullRequestForm(msg), this)
195195 }}, 'New Pull Request…')))
196196
197197 pull(getRefs(msg), pull.drain(function (ref) {
@@ -246,9 +246,9 @@
246246 pull(
247247 getForks(msg.key),
248248 pull.drain(function (fork) {
249249 forksT.append(h('tr', h('td',
250- repoName(fork.id, true),
250 + repoLink(fork.id),
251251 ' by ', h('a', {href: '#'+fork.author}, avatar_name(fork.author)))))
252252 }, function (err) {
253253 if (err) console.error(err)
254254 })
@@ -335,9 +335,9 @@
335335 }
336336 }
337337
338338 function issueForm(msg, contentEl) {
339- return h('form',
339 + var form = h('form',
340340 h('strong', 'New Issue:'),
341341 message_compose(
342342 {type: 'issue', project: msg.key},
343343 function (value) { return value },
@@ -351,8 +351,9 @@
351351 ))
352352 }
353353 )
354354 )
355 + return form
355356 }
356357
357358 function branchMenu(msg, full) {
358359 return combobox({
@@ -400,9 +401,9 @@
400401 pull.once({id: msg.key, author: msg.value.author}),
401402 getForks(msg.key)
402403 ]), pull.map(function (fork) {
403404 return h('option', {value: fork.id},
404- repoName(fork.id), ' by ', avatar_name(fork.author))
405 + repoLink(fork.id), ' by ', avatar_name(fork.author))
405406 }))
406407 }),
407408 ':',
408409 headBranchInput,
@@ -439,9 +440,10 @@
439440 exports.message_action = function (msg, sbot) {
440441 var c = msg.value.content
441442 if(c.type === 'issue' || c.type === 'pull-request') {
442443 var isOpen
443- var a = h('a', {href: '#', onclick: function () {
444 + var a = h('a', {href: '#', onclick: function (e) {
445 + e.preventDefault()
444446 message_confirm({
445447 type: 'issue-edit',
446448 root: msg.key,
447449 issues: [{
modules_extra/notifications.jsView
@@ -4,8 +4,9 @@
44 var Scroller = require('pull-scroll')
55 var paramap = require('pull-paramap')
66 var plugs = require('../plugs')
77 var cont = require('cont')
8 +var ref = require('ssb-ref')
89
910 var message_render = plugs.first(exports.message_render = [])
1011 var sbot_log = plugs.first(exports.sbot_log = [])
1112 var sbot_get = plugs.first(exports.sbot_get = [])
@@ -30,8 +31,9 @@
3031
3132 function isOurMsg(id, cb) {
3233 if (!id) return cb(null, false)
3334 if (typeof id === 'object' && typeof id.link === 'string') id = id.link
35 + if (!ref.isMsg(id)) return cb(null, false)
3436 sbot_get(id, function (err, msg) {
3537 if (err && err.name == 'NotFoundError') cb(null, false)
3638 else if (err) cb(err)
3739 else if (msg.content.type === 'issue' || msg.content.type === 'pull-request')
modules_extra/raw.jsView
@@ -9,9 +9,9 @@
99
1010 // from ssb-ref
1111 var refRegex = /((?:@|%|&)[A-Za-z0-9\/+]{43}=\.[\w\d]+)/g
1212
13-function linkify(text) {
13 +exports.linkify = function (text) {
1414 var arr = text.split(refRegex)
1515 for (var i = 1; i < arr.length; i += 2) {
1616 arr[i] = h('a', {href: '#' + arr[i]}, arr[i])
1717 }
@@ -32,9 +32,9 @@
3232 // move away the content
3333 while (el = msgContentEl.firstChild)
3434 tmp.appendChild(el)
3535 // show the raw stuff
36- if (!pre) pre = h('pre', linkify(JSON.stringify({
36 + if (!pre) pre = h('pre', exports.linkify(JSON.stringify({
3737 key: msg.key,
3838 value: msg.value
3939 }, 0, 2)))
4040 msgContentEl.appendChild(pre)
modules_extra/theme.jsView
@@ -95,29 +95,42 @@
9595
9696 function theme_view() {
9797 var themeInput
9898 var themesList = h('form.themes__list')
99- var themesByKey = {}
99 + var themesPerFeed = {/* feedid: {blobid||name: theme} */}
100100
101101 pull(
102102 themes(),
103- pull.unique('id'),
104103 pull.drain(function (theme) {
105- // don't show old versions of theme
106- var key = theme.feed + theme.name
107- var newerTheme = themesByKey[key]
104 + var map = themesPerFeed[theme.feed] || (themesPerFeed[theme.feed] = {})
105 + // replace old theme
106 + var prevByName = map[theme.name]
107 + var prevById = map[theme.id]
108108 theme.el = renderTheme(theme)
109- themesByKey[key] = theme
110- if (!newerTheme) {
111- // show latest theme
109 + map[theme.name] = theme
110 + map[theme.id] = theme
111 + if (prevById) {
112 + // remove theme which is having its id reused
113 + themesList.removeChild(prevById.el)
114 + // prevById.el.appendChild(document.createTextNode(' (renamed)'))
115 + if (prevById === prevByName) {
116 + prevByName = null
117 + }
118 + }
119 + if (prevByName) {
120 + // update theme
121 + if (prevByName.id === localStorage.themeId
122 + || prevByName.id === activeTheme) {
123 + // keep old version because the user is still using it
124 + prevByName.el.appendChild(document.createTextNode(' (old)'))
125 + insertAfter(themesList, theme.el, prevByName.el)
126 + } else {
127 + // replace old version
128 + themesList.replaceChild(theme.el, prevByName.el)
129 + }
130 + } else {
131 + // show new theme
112132 themesList.appendChild(theme.el)
113- } else if (theme.id === localStorage.themeId
114- || theme.id === activeTheme) {
115- // show old version because the user is still using it
116- theme.el.appendChild(document.createTextNode(' (old)'))
117- insertAfter(themesList, theme.el, newerTheme.el)
118- } else {
119- // ignore old version of theme
120133 }
121134 }, function (err) {
122135 if (err) console.error(err)
123136 })
package.jsonView
@@ -1,8 +1,8 @@
11 {
22 "name": "patchbay",
33 "description": "a pluggable patchwork",
4- "version": "3.2.0",
4 + "version": "3.5.0",
55 "homepage": "https://github.com/dominictarr/patchbay",
66 "repository": {
77 "type": "git",
88 "url": "git://github.com/dominictarr/patchbay.git"
@@ -35,10 +35,10 @@
3535 "pull-stream": "^3.4.5",
3636 "scuttlebot": "^8.7.2",
3737 "simple-mime": "^0.1.0",
3838 "split-buffer": "^1.0.0",
39- "ssb-avatar": "^0.1.0",
4039 "ssb-blobs": "^0.1.7",
40 + "ssb-avatar": "^0.2.0",
4141 "ssb-client": "^4.0.3",
4242 "ssb-config": "^2.1.1",
4343 "ssb-feed": "^2.2.1",
4444 "ssb-keys": "^6.1.0",
@@ -62,4 +62,7 @@
6262 },
6363 "author": "Dominic Tarr <dominic.tarr@gmail.com> (http://dominictarr.com)",
6464 "license": "MIT"
6565 }
66 +
67 +
68 +
style.cssView
@@ -5,8 +5,19 @@
55 * {
66 word-break: break-word;
77 }
88
9 +a:link, a:visited, a:active {
10 + color: #0088cc;
11 + text-decoration: none;
12 +}
13 +
14 +a:hover,
15 +a:focus {
16 + color: #005580;
17 + text-decoration: underline;
18 +}
19 +
920 .screen {
1021 position: absolute;
1122 top: 0px; bottom: 0px;
1223 left: 0px; right: 0px;
@@ -70,9 +81,59 @@
7081 margin-bottom: .9em;
7182 }
7283
7384 input, textarea {
85 + border: none;
86 + border-radius: .2em;
87 + font-family: sans-serif;
88 +}
89 +
90 +input:focus, .compose:focus, .message:focus, button:focus {
91 + outline: none;
92 + border-color: #0088cc;
93 + box-shadow: 0 0 4px #0088cc;
94 +}
95 +
96 +textarea {
97 + padding: .5em;
98 +}
99 +
100 +textarea:focus {
101 + outline: none;
102 + border-color: none;
103 + box-shadow: none;
104 +}
105 +
106 +button {
107 + background: #fff;
108 + color: #666;
109 + border: 1px solid #bbb;
110 + border-radius: .5em;
111 + padding: .7em;
112 + margin: .5em;
113 + cursor: pointer;
114 + text-transform: uppercase;
115 + font-weight: bold;
116 + font-size: .7em;
117 +}
118 +
119 +button:hover {
120 + background: #ccc;
121 + border: 1px solid #bbb;
122 +}
123 +
124 +.menu {
125 + position: absolute;
126 + top: .5em;
127 + right: .5em;
128 + padding-top: .5em;
129 + padding-bottom: .5em;
130 + padding-right: 1em;
131 + padding-left: 1em;
132 + background: #f5f5f5;
74133 border: 1px solid #eee;
134 + box-shadow: 3px 0px 3px #ccc;
135 + border-radius: .2em;
75136 }
76137
77138 /* scrolling feeds, threads */
78139
@@ -90,20 +151,41 @@
90151 /* compose */
91152
92153 .compose {
93154 width: 100%;
155 + margin-top: .5em;
156 + margin-bottom: .5em;
157 + box-shadow: #dadada 1px 2px 8px;
94158 }
95159
160 +.compose button {
161 + float: right;
162 +}
163 +
96164 /* messages */
97165
98166 .message {
99167 display: block;
100168 flex-basis: 0;
101169 word-wrap: break-word;
102170 display: inline-block;
103- border: 1px solid #eee;
171 + margin-bottom: 1em;
172 + padding: 0.3rem;
173 + border-radius: 2px;
174 + box-shadow: #dadada 1px 2px 8px;
104175 }
105176
177 +.message_content div > span {
178 + font-size: 0.8rem;
179 + margin-bottom: 0.7rem;
180 + display: block;
181 + color: #888;
182 +}
183 +
184 +.message_content div > span a {
185 + color: #005d8c;
186 +}
187 +
106188 .message_meta input {
107189 font-size: .8em;
108190 }
109191
@@ -158,18 +240,25 @@
158240 padding-left: -2em;
159241 }
160242
161243 .suggest-box .selected {
162- background: yellow;
244 + background: #eee;
163245 }
164246
165247 .suggest-box {
166248 width: max-content;
167249 background: white;
250 + border-radius: 1em;
168251 }
169252
170253 /* avatar */
171254
255 +.avatar--large,
256 +.avatar--thumbnail,
257 +.avatar--fullsize {
258 + border: 1px solid #eee;
259 +}
260 +
172261 .avatar {
173262 display: flex;
174263 flex-direction: row;
175264 }
@@ -205,23 +294,37 @@
205294 /* lightbox - used in message-confirm */
206295
207296 .lightbox {
208297 overflow: auto;
209- padding: 1em;
210- background: white;
298 + padding: 1.5em;
299 + margin-top: 3em;
300 + margin-bottom: 3em;
301 + width: 600px;
302 + background: #f5f5f5;
303 + margin-left: auto;
304 + margin-right: auto;
305 + border: 1px solid #eee;
306 + border-radius: .2em;
307 + box-shadow: #dadada 1px 2px 8px;
211308 }
212309
213310 /* searchprompt */
214311
215312 .searchprompt {
216- width: 100%;
217- height: 2.55em;
313 + float: left;
314 + width: 85%;
315 + height: 2em;
316 + margin-top: .3em;
317 + border-radius: 1em;
318 + padding-left: .2em;
319 + margin-left: 1em;
320 + margin-right: 1em;
218321 }
219322
220323 /* TextNodeSearcher highlights */
221324
222325 .highlight {
223- background: yellow;
326 + background: #f5f5f5;
224327 }
225328
226329 /* avatar editor */
227330
@@ -248,22 +351,15 @@
248351 width: .7em;
249352 height: .7em;
250353 margin: .7em;
251354 border-radius: 100%;
252- background: green;
355 + background: #08c;
253356 }
254357
255358 .error {
256359 background: red;
257360 }
258361
259-/* invite codes */
260-
261-.hyperprogress__liquid {
262- height: 1ex;
263- background: blue;
264-}
265-
266362 /* themes */
267363
268364 .theme {
269365 margin-left: 1ex;
@@ -276,10 +372,11 @@
276372
277373 /* tabs */
278374
279375 .header {
280- background: lightgray;
281- border-bottom: 2px inset;
376 + background: #f5f5f5;
377 + border-bottom: 1px inset;
378 + box-shadow: 3px 0px 3px #ccc;
282379 flex-shrink: 0;
283380 }
284381
285382 .header__tabs {
@@ -307,35 +404,39 @@
307404 }
308405
309406 .hypertabs__tab {
310407 color: black;
311- background: lightgray;
312- border-right: 1px solid #ccc;
408 + background: #f5f5f5;
313409 border-top-left-radius: 5px;
314410 margin-left: -3px;
315411 border-bottom: none;
316- padding-top: .35em;
317- padding-left: .5em;
412 + padding-top: .56em;
413 + padding-left: 1em;
414 + border-left: 1px solid #ddd;
318415 width: 100%;
319416 }
320417
321418 .hypertabs__tab > a {
322- color: black;
419 + color: #666;
323420 text-decoration: none;
324421 white-space: nowrap;
422 + font-size: .9em;
325423 }
326424
327425 .hypertabs--selected {
328- background: #E7E7E7;
329- border-top-right-radius: 3px;
426 + font-weight: bold;
427 + background: #eee;
428 + border-top-right-radius: 5px;
330429 z-index: 1;
331430 }
332431
333432 .hypertabs__x {
334433 display: none;
335- transform: translate(-5px, -3px);
434 + transform: translate(-4px, -3px);
336435 }
337436
338437 .hypertabs--selected .hypertabs__x {
339438 display: block;
340439 }
341440
441 +
442 +

Built with git-ssb-web