diff --git a/components/app.js b/components/app.js index 1075e8d..2ae837d 100644 --- a/components/app.js +++ b/components/app.js @@ -3,6 +3,7 @@ import Client from "/lib/client.js"; import Buffer from "/components/buffer.js"; import BufferList from "/components/buffer-list.js"; import BufferHeader from "/components/buffer-header.js"; +import MemberList from "/components/member-list.js"; import Connect from "/components/connect.js"; import Composer from "/components/composer.js"; import ScrollManager from "/components/scroll-manager.js"; @@ -513,6 +514,18 @@ export default class App extends Component { `; } + var memberList = null; + if (activeBuffer && activeBuffer.type == BufferType.CHANNEL) { + memberList = html` +
+ ${activeBuffer.members.size} users +
+
+ <${MemberList} members=${activeBuffer.members} onNickClick=${this.handleNickClick}/> +
+ `; + } + return html` + ${memberList} <${Composer} ref=${this.composer} readOnly=${this.state.activeBuffer == SERVER_BUFFER} onSubmit=${this.handleComposerSubmit}/> `; } diff --git a/components/member-list.js b/components/member-list.js new file mode 100644 index 0000000..8ead455 --- /dev/null +++ b/components/member-list.js @@ -0,0 +1,25 @@ +import { html, Component } from "/lib/index.js"; + +function MemberItem(props) { + function handleClick(event) { + event.preventDefault(); + props.onClick(); + } + + var url = "irc:///" + encodeURIComponent(props.nick) + ",isnick"; + return html` +
  • + ${props.nick} +
  • + `; +} + +export default function MemberList(props) { + return html` + + `; +} diff --git a/style.css b/style.css index 51e2dea..07b2c92 100644 --- a/style.css +++ b/style.css @@ -8,11 +8,11 @@ html, body { body { display: grid; grid-template-rows: auto 1fr max-content; - grid-template-columns: max-content auto; + grid-template-columns: max-content auto max-content; font-family: monospace; } -#sidebar, #buffer, #connect { +#sidebar, #buffer, #connect, #member-list { width: 100%; height: 100%; overflow: auto; @@ -43,14 +43,17 @@ body { color: #b37400; } -#topbar { - grid-row: 1; - grid-column: 2; +#topbar, #member-list-header { box-sizing: border-box; padding: 5px 10px; border-bottom: 1px solid #e3e3e3; } +#topbar { + grid-row: 1; + grid-column: 2; +} + #topbar .status-here { color: green; } @@ -67,9 +70,32 @@ body { grid-column: 2; } +#member-list-header { + grid-row: 1; + grid-column: 3; + border-left: 1px solid #e3e3e3; +} +#member-list { + grid-row: 2; + grid-column: 3; + border-left: 1px solid #e3e3e3; +} + +#member-list ul { + list-style-type: none; + margin: 0; + padding: 0; +} +#member-list li a { + display: inline-block; + width: 100%; + padding: 2px 10px; + box-sizing: border-box; +} + #composer { - grid-column: 2; grid-row: 3; + grid-column: 2 / 4; border-top: 1px solid #e3e3e3; } #composer input {