This commit is contained in:
syuilo 2017-10-31 23:11:22 +09:00
parent 5efb52b9f5
commit f87ec61e96
7 changed files with 97 additions and 11 deletions

View File

@ -484,6 +484,9 @@ const endpoints: Endpoint[] = [
minInterval: ms('10seconds') minInterval: ms('10seconds')
} }
}, },
{
name: 'channels/show'
},
]; ];
export default endpoints; export default endpoints;

View File

@ -0,0 +1,31 @@
/**
* Module dependencies
*/
import $ from 'cafy';
import { default as Channel, IChannel } from '../../models/channel';
import serialize from '../../serializers/channel';
/**
* Show a channel
*
* @param {any} params
* @param {any} user
* @return {Promise<any>}
*/
module.exports = (params, user) => new Promise(async (res, rej) => {
// Get 'channel_id' parameter
const [channelId, channelIdErr] = $(params.channel_id).id().$;
if (channelIdErr) return rej('invalid channel_id param');
// Fetch channel
const channel: IChannel = await Channel.findOne({
_id: channelId
});
if (channel === null) {
return rej('channel not found');
}
// Serialize
res(await serialize(channel, user));
});

View File

@ -7,15 +7,16 @@ const route = require('page');
let page = null; let page = null;
export default me => { export default me => {
route('/', index); route('/', index);
route('/i>mentions', mentions); route('/i>mentions', mentions);
route('/channel', channels); route('/channel', channels);
route('/post::post', post); route('/channel/:channel', channel);
route('/search::query', search); route('/post::post', post);
route('/:user', user.bind(null, 'home')); route('/search::query', search);
route('/:user/graphs', user.bind(null, 'graphs')); route('/:user', user.bind(null, 'home'));
route('/:user/:post', post); route('/:user/graphs', user.bind(null, 'graphs'));
route('*', notFound); route('/:user/:post', post);
route('*', notFound);
function index() { function index() {
me ? home() : entrance(); me ? home() : entrance();
@ -55,6 +56,12 @@ export default me => {
mount(el); mount(el);
} }
function channel(ctx) {
const el = document.createElement('mk-channel-page');
el.setAttribute('id', ctx.params.channel);
mount(el);
}
function channels() { function channels() {
mount(document.createElement('mk-channels-page')); mount(document.createElement('mk-channels-page'));
} }
@ -72,6 +79,7 @@ export default me => {
}; };
function mount(content) { function mount(content) {
document.documentElement.style.background = '#313a42';
document.documentElement.removeAttribute('data-page'); document.documentElement.removeAttribute('data-page');
if (page) page.unmount(); if (page) page.unmount();
const body = document.getElementById('app'); const body = document.getElementById('app');

View File

@ -61,6 +61,7 @@ require('./pages/user.tag');
require('./pages/post.tag'); require('./pages/post.tag');
require('./pages/search.tag'); require('./pages/search.tag');
require('./pages/not-found.tag'); require('./pages/not-found.tag');
require('./pages/channel.tag');
require('./pages/channels.tag'); require('./pages/channels.tag');
require('./autocomplete-suggestion.tag'); require('./autocomplete-suggestion.tag');
require('./progress-dialog.tag'); require('./progress-dialog.tag');

View File

@ -0,0 +1,43 @@
<mk-channel-page>
<mk-ui ref="ui">
<main if={ !parent.fetching }>
<h1>{ parent.channel.title }</h1>
</main>
</mk-ui>
<style>
:scope
display block
main
> h1
color #f00
</style>
<script>
import Progress from '../../../common/scripts/loading';
this.mixin('api');
this.id = this.opts.id;
this.fetching = true;
this.channel = null;
this.on('mount', () => {
document.documentElement.style.background = '#efefef';
Progress.start();
this.api('channels/show', {
channel_id: this.id
}).then(channel => {
Progress.done();
this.update({
fetching: false,
channel: channel
});
document.title = channel.title + ' | Misskey'
});
});
</script>
</mk-channel-page>

View File

@ -18,7 +18,7 @@
this.new = () => { this.new = () => {
const title = window.prompt('%i18n:desktop.tags.mk-channels-page.channel-title%'); const title = window.prompt('%i18n:desktop.tags.mk-channels-page.channel-title%');
this.api('bbs/channels/create', { this.api('channels/create', {
title: title title: title
}).then(channel => { }).then(channel => {
location.href = '/channel/' + channel.id; location.href = '/channel/' + channel.id;

View File

@ -16,7 +16,7 @@
this.refs.ui.refs.user.on('user-fetched', user => { this.refs.ui.refs.user.on('user-fetched', user => {
Progress.set(0.5); Progress.set(0.5);
document.title = user.name + ' | Misskey' document.title = user.name + ' | Misskey';
}); });
this.refs.ui.refs.user.on('loaded', () => { this.refs.ui.refs.user.on('loaded', () => {