This commit is contained in:
syuilo 2017-02-20 10:34:57 +09:00
parent 7791431717
commit 91d8ee5a52
101 changed files with 423 additions and 423 deletions

View file

@ -111,13 +111,13 @@
this.session = this.opts.session this.session = this.opts.session
this.app = @session.app this.app = @session.app
cancel() { this.cancel = () => {
this.api 'auth/deny' do this.api 'auth/deny' do
token: @session.token token: @session.token
.then => .then =>
this.trigger('denied'); this.trigger('denied');
accept() { this.accept = () => {
this.api 'auth/accept' do this.api 'auth/accept' do
token: @session.token token: @session.token
.then => .then =>

View file

@ -127,7 +127,7 @@
this.state = 'fetch-session-error' this.state = 'fetch-session-error'
this.update(); this.update();
accepted() { this.accepted = () => {
this.state = 'accepted' this.state = 'accepted'
this.update(); this.update();

View file

@ -57,7 +57,7 @@
</style> </style>
<script> <script>
retry() { this.retry = () => {
this.unmount(); this.unmount();
this.opts.retry(); this.opts.retry();
} }

View file

@ -119,7 +119,7 @@
<script> <script>
this.mixin('api'); this.mixin('api');
onpaste(e) { this.onpaste = (e) => {
const data = e.clipboardData; const data = e.clipboardData;
const items = data.items; const items = data.items;
for (let i = 0; i < items.length; i++) { for (let i = 0; i < items.length; i++) {
@ -130,17 +130,17 @@
} }
} }
onkeypress(e) { this.onkeypress = (e) => {
if ((e.which == 10 || e.which == 13) && e.ctrlKey) { if ((e.which == 10 || e.which == 13) && e.ctrlKey) {
this.send(); this.send();
} }
} }
selectFile() { this.selectFile = () => {
this.refs.file.click(); this.refs.file.click();
} }
selectFileFromDrive() { this.selectFileFromDrive = () => {
const browser = document.body.appendChild(document.createElement('mk-select-file-from-drive-window')); const browser = document.body.appendChild(document.createElement('mk-select-file-from-drive-window'));
const event = riot.observable(); const event = riot.observable();
riot.mount(browser, { riot.mount(browser, {
@ -152,7 +152,7 @@
}); });
} }
send() { this.send = () => {
this.sending = true; this.sending = true;
this.api('messaging/messages/create', { this.api('messaging/messages/create', {
user_id: this.opts.user.id, user_id: this.opts.user.id,
@ -166,7 +166,7 @@
this.update(); this.update();
}); });
clear() { this.clear = () => {
this.refs.text.value = ''; this.refs.text.value = '';
this.files = []; this.files = [];
this.update(); this.update();

View file

@ -305,7 +305,7 @@
}); });
} }
search() { this.search = () => {
const q = this.refs.search.value; const q = this.refs.search.value;
if (q == '') { if (q == '') {
this.searchResult = []; this.searchResult = [];
@ -323,7 +323,7 @@
.catch (err) => .catch (err) =>
console.error err console.error err
on-search-keydown(e) { this.on-search-keydown = (e) => {
key = e.which key = e.which
switch (key) switch (key)
| 9, 40 => // Key[TAB] or Key[↓] | 9, 40 => // Key[TAB] or Key[↓]
@ -331,7 +331,7 @@
e.stopPropagation(); e.stopPropagation();
this.refs.search-result.childNodes[0].focus(); this.refs.search-result.childNodes[0].focus();
on-search-result-keydown(i, e) { this.on-search-result-keydown = (i, e) => {
key = e.which key = e.which
switch (key) switch (key)
| 10, 13 => // Key[ENTER] | 10, 13 => // Key[ENTER]

View file

@ -128,18 +128,18 @@
this.mixin('api'); this.mixin('api');
this.mixin('messaging-stream'); this.mixin('messaging-stream');
this.user = this.opts.user this.user = this.opts.user;
this.init = true this.init = true;
this.sending = false this.sending = false;
this.messages = [] this.messages = [];
this.connection = new @MessagingStreamConnection this.I, @user.id this.connection = new this.MessagingStreamConnection(this.I, this.user.id);
this.on('mount', () => { this.on('mount', () => {
@connection.event.on 'message' this.on-message this.connection.event.on('message' this.onMessage);
@connection.event.on 'read' this.on-read this.connection.event.on('read' this.onRead);
document.add-event-listener 'visibilitychange' this.on-visibilitychange document.addEventListener 'visibilitychange' this.on-visibilitychange
this.api 'messaging/messages' do this.api 'messaging/messages' do
user_id: @user.id user_id: @user.id
@ -156,7 +156,7 @@
@connection.event.off 'read' this.on-read @connection.event.off 'read' this.on-read
@connection.close! @connection.close!
document.remove-event-listener 'visibilitychange' this.on-visibilitychange document.removeEventListener 'visibilitychange' this.on-visibilitychange
this.on('update', () => { this.on('update', () => {
@messages.for-each (message) => @messages.for-each (message) =>
@ -165,7 +165,7 @@
message._date = date message._date = date
message._datetext = month + '月 ' + date + '日' message._datetext = month + '月 ' + date + '日'
on-message(message) { this.on-message = (message) => {
is-bottom = @is-bottom! is-bottom = @is-bottom!
@messages.push message @messages.push message
@ -182,7 +182,7 @@
// Notify // Notify
@notify '新しいメッセージがあります' @notify '新しいメッセージがあります'
on-read(ids) { this.on-read = (ids) => {
if not Array.isArray ids then ids = [ids] if not Array.isArray ids then ids = [ids]
ids.for-each (id) => ids.for-each (id) =>
if (@messages.some (x) => x.id == id) if (@messages.some (x) => x.id == id)
@ -190,15 +190,15 @@
@messages[exist].is_read = true @messages[exist].is_read = true
this.update(); this.update();
is-bottom() { this.is-bottom = () => {
current = this.root.scroll-top + this.root.offset-height current = this.root.scroll-top + this.root.offset-height
max = this.root.scroll-height max = this.root.scroll-height
current > (max - 32) current > (max - 32)
scroll-to-bottom() { this.scroll-to-bottom = () => {
this.root.scroll-top = this.root.scroll-height this.root.scroll-top = this.root.scroll-height
notify(message) { this.notify = (message) => {
n = document.createElement 'p' n = document.createElement 'p'
n.inner-HTML = '<i class="fa fa-arrow-circle-down"></i>' + message n.inner-HTML = '<i class="fa fa-arrow-circle-down"></i>' + message
n.onclick = => n.onclick = =>
@ -213,7 +213,7 @@
, 1000ms , 1000ms
, 4000ms , 4000ms
on-visibilitychange() { this.on-visibilitychange = () => {
if document.hidden then return if document.hidden then return
@messages.for-each (message) => @messages.for-each (message) =>
if message.user_id != this.I.id and not message.is_read if message.user_id != this.I.id and not message.is_read

View file

@ -88,26 +88,26 @@
<script> <script>
this.choices = ['', '']; this.choices = ['', ''];
oninput(i, e) { this.oninput = (i, e) => {
this.choices[i] = e.target.value; this.choices[i] = e.target.value;
} }
add() { this.add = () => {
this.choices.push(''); this.choices.push('');
this.update(); this.update();
this.refs.choices.childNodes[this.choices.length - 1].childNodes[0].focus(); this.refs.choices.childNodes[this.choices.length - 1].childNodes[0].focus();
} }
remove(i) { this.remove = (i) => {
this.choices = this.choices.filter((_, _i) => _i != i); this.choices = this.choices.filter((_, _i) => _i != i);
this.update(); this.update();
} }
destroy() { this.destroy = () => {
this.opts.ondestroy(); this.opts.ondestroy();
} }
get() { this.get = () => {
return { return {
choices: this.choices.filter(choice => choice != '') choices: this.choices.filter(choice => choice != '')
} }

View file

@ -76,11 +76,11 @@
this.isVoted = this.poll.choices.some(c => c.is_voted); this.isVoted = this.poll.choices.some(c => c.is_voted);
this.result = this.isVoted; this.result = this.isVoted;
toggleResult() { this.toggleResult = () => {
this.result = !this.result; this.result = !this.result;
} }
vote(id) { this.vote = (id) => {
if (this.poll.choices.some(c => c.is_voted)) return; if (this.poll.choices.some(c => c.is_voted)) return;
this.api('posts/polls/vote', { this.api('posts/polls/vote', {
post_id: this.post.id, post_id: this.post.id,

View file

@ -68,7 +68,7 @@
this.on('unmount', () => { this.on('unmount', () => {
@stream.off 'signin' this.on-signin @stream.off 'signin' this.on-signin
on-signin(signin) { this.on-signin = (signin) => {
@history.unshift signin @history.unshift signin
this.update(); this.update();
</script> </script>

View file

@ -102,7 +102,7 @@
this.user = null; this.user = null;
this.signing = false; this.signing = false;
oninput() { this.oninput = () => {
this.api 'users/show' do this.api 'users/show' do
username: this.refs.username.value username: this.refs.username.value
.then (user) => .then (user) =>
@ -110,7 +110,7 @@
this.trigger 'user' user this.trigger 'user' user
this.update(); this.update();
onsubmit(e) { this.onsubmit = (e) => {
e.preventDefault(); e.preventDefault();
if this.refs.username.value == '' if this.refs.username.value == ''

View file

@ -199,7 +199,7 @@
head.appendChild script head.appendChild script
}); });
on-change-username() { this.on-change-username = () => {
username = this.refs.username.value username = this.refs.username.value
if username == '' if username == ''
@ -232,7 +232,7 @@
this.username-state = 'error' this.username-state = 'error'
this.update(); this.update();
on-change-password() { this.on-change-password = () => {
password = this.refs.password.value password = this.refs.password.value
if password == '' if password == ''
@ -252,7 +252,7 @@
this.refs.password-metar.style.width = (strength * 100) + '%' this.refs.password-metar.style.width = (strength * 100) + '%'
on-change-password-retype() { this.on-change-password-retype = () => {
password = this.refs.password.value password = this.refs.password.value
retyped-password = this.refs.password-retype.value retyped-password = this.refs.password-retype.value
@ -265,7 +265,7 @@
else else
this.password-retype-state = 'not-match' this.password-retype-state = 'not-match'
onsubmit(e) { this.onsubmit = (e) => {
e.preventDefault(); e.preventDefault();
username = this.refs.username.value username = this.refs.username.value

View file

@ -22,7 +22,7 @@
if @mode == 'relative' or @mode == 'detail' if @mode == 'relative' or @mode == 'detail'
clear-interval @tickid clear-interval @tickid
tick() { this.tick = () => {
now = new Date! now = new Date!
ago = (now - @time) / 1000ms ago = (now - @time) / 1000ms
this.relative = switch this.relative = switch

View file

@ -145,7 +145,7 @@
this.uploads = [] this.uploads = []
upload(file, folder) { this.upload = (file, folder) => {
id = Math.random! id = Math.random!
ctx = ctx =

View file

@ -16,7 +16,7 @@
this.on('unmount', () => { this.on('unmount', () => {
clear-interval @clock clear-interval @clock
draw() { this.draw = () => {
now = new Date! now = new Date!
s = now.get-seconds! s = now.get-seconds!
m = now.get-minutes! m = now.get-minutes!

View file

@ -89,11 +89,11 @@
this.select = -1 this.select = -1
this.on('mount', () => { this.on('mount', () => {
@textarea.add-event-listener 'keydown' this.on-keydown @textarea.addEventListener 'keydown' this.on-keydown
all = document.query-selector-all 'body *' all = document.query-selector-all 'body *'
Array.prototype.for-each.call all, (el) => Array.prototype.for-each.call all, (el) =>
el.add-event-listener 'mousedown' @mousedown el.addEventListener 'mousedown' @mousedown
this.api 'users/search_by_username' do this.api 'users/search_by_username' do
query: @q query: @q
@ -106,20 +106,20 @@
console.error err console.error err
this.on('unmount', () => { this.on('unmount', () => {
@textarea.remove-event-listener 'keydown' this.on-keydown @textarea.removeEventListener 'keydown' this.on-keydown
all = document.query-selector-all 'body *' all = document.query-selector-all 'body *'
Array.prototype.for-each.call all, (el) => Array.prototype.for-each.call all, (el) =>
el.remove-event-listener 'mousedown' @mousedown el.removeEventListener 'mousedown' @mousedown
mousedown(e) { this.mousedown = (e) => {
if (!contains this.root, e.target) and (this.root != e.target) if (!contains this.root, e.target) and (this.root != e.target)
@close! @close!
on-click(e) { this.on-click = (e) => {
@complete e.item @complete e.item
on-keydown(e) { this.on-keydown = (e) => {
key = e.which key = e.which
switch (key) switch (key)
| 10, 13 => // Key[ENTER] | 10, 13 => // Key[ENTER]
@ -147,7 +147,7 @@
| _ => | _ =>
@close! @close!
select-next() { this.select-next = () => {
@select++ @select++
if @select >= @users.length if @select >= @users.length
@ -155,7 +155,7 @@
@apply-select! @apply-select!
select-prev() { this.select-prev = () => {
@select-- @select--
if @select < 0 if @select < 0
@ -163,17 +163,17 @@
@apply-select! @apply-select!
apply-select() { this.apply-select = () => {
this.refs.users.children.for-each (el) => this.refs.users.children.for-each (el) =>
el.remove-attribute 'data-selected' el.remove-attribute 'data-selected'
this.refs.users.children[@select].setAttribute 'data-selected' \true this.refs.users.children[@select].setAttribute 'data-selected' \true
this.refs.users.children[@select].focus(); this.refs.users.children[@select].focus();
complete(user) { this.complete = (user) => {
this.opts.complete user this.opts.complete user
close() { this.close = () => {
this.opts.close! this.opts.close!
function contains(parent, child) function contains(parent, child)

View file

@ -91,17 +91,17 @@
@stream.off 'follow' this.on-stream-follow @stream.off 'follow' this.on-stream-follow
@stream.off 'unfollow' this.on-stream-unfollow @stream.off 'unfollow' this.on-stream-unfollow
on-stream-follow(user) { this.on-stream-follow = (user) => {
if user.id == @user.id if user.id == @user.id
this.user = user this.user = user
this.update(); this.update();
on-stream-unfollow(user) { this.on-stream-unfollow = (user) => {
if user.id == @user.id if user.id == @user.id
this.user = user this.user = user
this.update(); this.update();
onclick() { this.onclick = () => {
this.wait = true this.wait = true
if @user.is_following if @user.is_following
this.api 'following/delete' do this.api 'following/delete' do

View file

@ -94,19 +94,19 @@
</style> </style>
<script> <script>
this.root.add-event-listener 'contextmenu' (e) => this.root.addEventListener 'contextmenu' (e) =>
e.preventDefault(); e.preventDefault();
mousedown(e) { this.mousedown = (e) => {
e.preventDefault(); e.preventDefault();
if (!contains this.root, e.target) and (this.root != e.target) if (!contains this.root, e.target) and (this.root != e.target)
@close! @close!
return false return false
open(pos) { this.open = (pos) => {
all = document.query-selector-all 'body *' all = document.query-selector-all 'body *'
Array.prototype.for-each.call all, (el) => Array.prototype.for-each.call all, (el) =>
el.add-event-listener 'mousedown' @mousedown el.addEventListener 'mousedown' @mousedown
this.root.style.display = 'block' this.root.style.display = 'block'
this.root.style.left = pos.x + 'px' this.root.style.left = pos.x + 'px'
this.root.style.top = pos.y + 'px' this.root.style.top = pos.y + 'px'
@ -121,10 +121,10 @@
easing: 'linear' easing: 'linear'
} }
close() { this.close = () => {
all = document.query-selector-all 'body *' all = document.query-selector-all 'body *'
Array.prototype.for-each.call all, (el) => Array.prototype.for-each.call all, (el) =>
el.remove-event-listener 'mousedown' @mousedown el.removeEventListener 'mousedown' @mousedown
this.trigger('closed'); this.trigger('closed');
this.unmount(); this.unmount();

View file

@ -172,16 +172,16 @@
highlight: no highlight: no
view-mode: 1 view-mode: 1
ok() { this.ok = () => {
@cropper.get-cropped-canvas!.to-blob (blob) => @cropper.get-cropped-canvas!.to-blob (blob) =>
this.trigger 'cropped' blob this.trigger 'cropped' blob
this.refs.window.close! this.refs.window.close!
skip() { this.skip = () => {
this.trigger('skiped'); this.trigger('skiped');
this.refs.window.close! this.refs.window.close!
cancel() { this.cancel = () => {
this.trigger('canceled'); this.trigger('canceled');
this.refs.window.close! this.refs.window.close!
</script> </script>

View file

@ -114,7 +114,7 @@
easing: [ 0, 0.5, 0.5, 1 ] easing: [ 0, 0.5, 0.5, 1 ]
} }
close() { this.close = () => {
this.refs.bg.style.pointer-events = 'none' this.refs.bg.style.pointer-events = 'none'
Velocity this.refs.bg, 'finish' true Velocity this.refs.bg, 'finish' true
Velocity this.refs.bg, { Velocity this.refs.bg, {
@ -138,7 +138,7 @@
this.unmount(); this.unmount();
} }
bg-click() { this.bg-click = () => {
if @can-through if @can-through
if this.opts.on-through? if this.opts.on-through?
this.opts.on-through! this.opts.on-through!

View file

@ -50,7 +50,7 @@
this.mixin('api'); this.mixin('api');
this.mixin('i'); this.mixin('i');
close(e) { this.close = (e) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();

View file

@ -20,18 +20,18 @@
this.trigger('closed'); this.trigger('closed');
this.unmount(); this.unmount();
open(pos) { this.open = (pos) => {
this.refs.ctx.open pos this.refs.ctx.open pos
create-folder() { this.create-folder = () => {
this.browser.create-folder! this.browser.create-folder!
this.refs.ctx.close! this.refs.ctx.close!
upload() { this.upload = () => {
this.browser.select-local-file! this.browser.select-local-file!
this.refs.ctx.close! this.refs.ctx.close!
url-upload() { this.url-upload = () => {
this.browser.url-upload! this.browser.url-upload!
this.refs.ctx.close! this.refs.ctx.close!
</script> </script>

View file

@ -40,7 +40,7 @@
@update do @update do
usage: info.usage / info.capacity * 100 usage: info.usage / info.capacity * 100
close() { this.close = () => {
this.refs.window.close! this.refs.window.close!
</script> </script>
</mk-drive-browser-window> </mk-drive-browser-window>

View file

@ -289,27 +289,27 @@
@stream.off 'drive_folder_created' this.on-stream-drive-folder-created @stream.off 'drive_folder_created' this.on-stream-drive-folder-created
@stream.off 'drive_folder_updated' this.on-stream-drive-folder-updated @stream.off 'drive_folder_updated' this.on-stream-drive-folder-updated
on-stream-drive-file-created(file) { this.on-stream-drive-file-created = (file) => {
@add-file file, true @add-file file, true
on-stream-drive-file-updated(file) { this.on-stream-drive-file-updated = (file) => {
current = if this.folder? then this.folder.id else null current = if this.folder? then this.folder.id else null
if current != file.folder_id if current != file.folder_id
@remove-file file @remove-file file
else else
@add-file file, true @add-file file, true
on-stream-drive-folder-created(folder) { this.on-stream-drive-folder-created = (folder) => {
@add-folder folder, true @add-folder folder, true
on-stream-drive-folder-updated(folder) { this.on-stream-drive-folder-updated = (folder) => {
current = if this.folder? then this.folder.id else null current = if this.folder? then this.folder.id else null
if current != folder.parent_id if current != folder.parent_id
@remove-folder folder @remove-folder folder
else else
@add-folder folder, true @add-folder folder, true
onmousedown(e) { this.onmousedown = (e) => {
if (contains this.refs.folders-container, e.target) or (contains this.refs.files-container, e.target) if (contains this.refs.folders-container, e.target) or (contains this.refs.files-container, e.target)
return true return true
@ -341,20 +341,20 @@
this.refs.selection.style.top = cursor-y + 'px' this.refs.selection.style.top = cursor-y + 'px'
up = (e) => up = (e) =>
document.document-element.remove-event-listener 'mousemove' move document.document-element.removeEventListener 'mousemove' move
document.document-element.remove-event-listener 'mouseup' up document.document-element.removeEventListener 'mouseup' up
this.refs.selection.style.display = 'none' this.refs.selection.style.display = 'none'
document.document-element.add-event-listener 'mousemove' move document.document-element.addEventListener 'mousemove' move
document.document-element.add-event-listener 'mouseup' up document.document-element.addEventListener 'mouseup' up
path-oncontextmenu(e) { this.path-oncontextmenu = (e) => {
e.preventDefault(); e.preventDefault();
e.stop-immediate-propagation! e.stop-immediate-propagation!
return false return false
ondragover(e) { this.ondragover = (e) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -371,15 +371,15 @@
e.dataTransfer.dropEffect = 'none' e.dataTransfer.dropEffect = 'none'
return false return false
ondragenter(e) { this.ondragenter = (e) => {
e.preventDefault(); e.preventDefault();
if !@is-drag-source if !@is-drag-source
this.draghover = true this.draghover = true
ondragleave(e) { this.ondragleave = (e) => {
this.draghover = false this.draghover = false
ondrop(e) { this.ondrop = (e) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -438,7 +438,7 @@
return false return false
oncontextmenu(e) { this.oncontextmenu = (e) => {
e.preventDefault(); e.preventDefault();
e.stop-immediate-propagation! e.stop-immediate-propagation!
@ -452,10 +452,10 @@
return false return false
select-local-file() { this.select-local-file = () => {
this.refs.file-input.click! this.refs.file-input.click!
url-upload() { this.url-upload = () => {
url <~ @input-dialog do url <~ @input-dialog do
'URLアップロード' 'URLアップロード'
'アップロードしたいファイルのURL' 'アップロードしたいファイルのURL'
@ -473,7 +473,7 @@
text: 'OK' text: 'OK'
] ]
create-folder() { this.create-folder = () => {
name <~ @input-dialog do name <~ @input-dialog do
'フォルダー作成' 'フォルダー作成'
'フォルダー名' 'フォルダー名'
@ -488,26 +488,26 @@
.catch (err) => .catch (err) =>
console.error err console.error err
change-file-input() { this.change-file-input = () => {
files = this.refs.file-input.files files = this.refs.file-input.files
for i from 0 to files.length - 1 for i from 0 to files.length - 1
file = files.item i file = files.item i
@upload file, this.folder @upload file, this.folder
upload(file, folder) { this.upload = (file, folder) => {
if folder? and typeof folder == 'object' if folder? and typeof folder == 'object'
folder = folder.id folder = folder.id
this.refs.uploader.upload file, folder this.refs.uploader.upload file, folder
get-selection() { this.get-selection = () => {
this.files.filter (file) -> file._selected this.files.filter (file) -> file._selected
new-window(folder-id) { this.new-window = (folder-id) => {
browser = document.body.appendChild document.createElement 'mk-drive-browser-window' browser = document.body.appendChild document.createElement 'mk-drive-browser-window'
riot.mount browser, do riot.mount browser, do
folder: folder-id folder: folder-id
move(target-folder) { this.move = (target-folder) => {
if target-folder? and typeof target-folder == 'object' if target-folder? and typeof target-folder == 'object'
target-folder = target-folder.id target-folder = target-folder.id
@ -537,7 +537,7 @@
.catch (err, text-status) -> .catch (err, text-status) ->
console.error err console.error err
add-folder(folder, unshift = false) { this.add-folder = (folder, unshift = false) => {
current = if this.folder? then this.folder.id else null current = if this.folder? then this.folder.id else null
if current != folder.parent_id if current != folder.parent_id
return return
@ -555,7 +555,7 @@
this.update(); this.update();
add-file(file, unshift = false) { this.add-file = (file, unshift = false) => {
current = if this.folder? then this.folder.id else null current = if this.folder? then this.folder.id else null
if current != file.folder_id if current != file.folder_id
return return
@ -573,26 +573,26 @@
this.update(); this.update();
remove-folder(folder) { this.remove-folder = (folder) => {
if typeof folder == 'object' if typeof folder == 'object'
folder = folder.id folder = folder.id
this.folders = this.folders.filter (f) -> f.id != folder this.folders = this.folders.filter (f) -> f.id != folder
this.update(); this.update();
remove-file(file) { this.remove-file = (file) => {
if typeof file == 'object' if typeof file == 'object'
file = file.id file = file.id
this.files = this.files.filter (f) -> f.id != file this.files = this.files.filter (f) -> f.id != file
this.update(); this.update();
go-root() { this.go-root = () => {
if this.folder != null if this.folder != null
this.folder = null this.folder = null
this.hierarchy-folders = [] this.hierarchy-folders = []
this.update(); this.update();
@load! @load!
load() { this.load = () => {
this.folders = [] this.folders = []
this.files = [] this.files = []
this.more-folders = false this.more-folders = false

View file

@ -54,10 +54,10 @@
this.trigger('closed'); this.trigger('closed');
this.unmount(); this.unmount();
open(pos) { this.open = (pos) => {
this.refs.ctx.open pos this.refs.ctx.open pos
rename() { this.rename = () => {
this.refs.ctx.close! this.refs.ctx.close!
name <~ @input-dialog do name <~ @input-dialog do
@ -73,25 +73,25 @@
.catch (err) => .catch (err) =>
console.error err console.error err
copy-url() { this.copy-url = () => {
@NotImplementedException! @NotImplementedException!
download() { this.download = () => {
this.refs.ctx.close! this.refs.ctx.close!
set-avatar() { this.set-avatar = () => {
this.refs.ctx.close! this.refs.ctx.close!
@update-avatar this.I, null, this.file @update-avatar this.I, null, this.file
set-banner() { this.set-banner = () => {
this.refs.ctx.close! this.refs.ctx.close!
@update-banner this.I, null, this.file @update-banner this.I, null, this.file
set-wallpaper() { this.set-wallpaper = () => {
this.refs.ctx.close! this.refs.ctx.close!
@update-wallpaper this.I, null, this.file @update-wallpaper this.I, null, this.file
add-app() { this.add-app = () => {
@NotImplementedException! @NotImplementedException!
</script> </script>
</mk-drive-browser-file-contextmenu> </mk-drive-browser-file-contextmenu>

View file

@ -155,7 +155,7 @@
this.is-contextmenu-showing = false this.is-contextmenu-showing = false
onclick() { this.onclick = () => {
if this.browser.multiple if this.browser.multiple
if this.file._selected? if this.file._selected?
this.file._selected = !this.file._selected this.file._selected = !this.file._selected
@ -171,7 +171,7 @@
this.file._selected = true this.file._selected = true
this.browser.trigger 'change-selection' this.file this.browser.trigger 'change-selection' this.file
oncontextmenu(e) { this.oncontextmenu = (e) => {
e.preventDefault(); e.preventDefault();
e.stop-immediate-propagation! e.stop-immediate-propagation!
@ -190,7 +190,7 @@
this.update(); this.update();
return false return false
ondragstart(e) { this.ondragstart = (e) => {
e.dataTransfer.effect-allowed = 'move' e.dataTransfer.effect-allowed = 'move'
e.dataTransfer.set-data 'text' JSON.stringify do e.dataTransfer.set-data 'text' JSON.stringify do
type: 'file' type: 'file'
@ -202,7 +202,7 @@
// (=あなたの子供が、ドラッグを開始しましたよ) // (=あなたの子供が、ドラッグを開始しましたよ)
this.browser.is-drag-source = true this.browser.is-drag-source = true
ondragend(e) { this.ondragend = (e) => {
this.is-dragging = false this.is-dragging = false
this.browser.is-drag-source = false this.browser.is-drag-source = false
</script> </script>

View file

@ -24,30 +24,30 @@
this.browser = this.opts.browser this.browser = this.opts.browser
this.folder = this.opts.folder this.folder = this.opts.folder
open(pos) { this.open = (pos) => {
this.refs.ctx.open pos this.refs.ctx.open pos
this.refs.ctx.on('closed', () => { this.refs.ctx.on('closed', () => {
this.trigger('closed'); this.trigger('closed');
this.unmount(); this.unmount();
move() { this.move = () => {
this.browser.move this.folder.id this.browser.move this.folder.id
this.refs.ctx.close! this.refs.ctx.close!
new-window() { this.new-window = () => {
this.browser.new-window this.folder.id this.browser.new-window this.folder.id
this.refs.ctx.close! this.refs.ctx.close!
create-folder() { this.create-folder = () => {
this.browser.create-folder! this.browser.create-folder!
this.refs.ctx.close! this.refs.ctx.close!
upload() { this.upload = () => {
this.browser.select-lcoal-file! this.browser.select-lcoal-file!
this.refs.ctx.close! this.refs.ctx.close!
rename() { this.rename = () => {
this.refs.ctx.close! this.refs.ctx.close!
name <~ @input-dialog do name <~ @input-dialog do

View file

@ -61,16 +61,16 @@
this.draghover = false this.draghover = false
this.is-contextmenu-showing = false this.is-contextmenu-showing = false
onclick() { this.onclick = () => {
this.browser.move this.folder this.browser.move this.folder
onmouseover() { this.onmouseover = () => {
this.hover = true this.hover = true
onmouseout() { this.onmouseout = () => {
this.hover = false this.hover = false
ondragover(e) { this.ondragover = (e) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -86,14 +86,14 @@
e.dataTransfer.dropEffect = 'none' e.dataTransfer.dropEffect = 'none'
return false return false
ondragenter() { this.ondragenter = () => {
if !@is-dragging if !@is-dragging
this.draghover = true this.draghover = true
ondragleave() { this.ondragleave = () => {
this.draghover = false this.draghover = false
ondrop(e) { this.ondrop = (e) => {
e.stopPropagation(); e.stopPropagation();
this.draghover = false this.draghover = false
@ -146,7 +146,7 @@
return false return false
ondragstart(e) { this.ondragstart = (e) => {
e.dataTransfer.effect-allowed = 'move' e.dataTransfer.effect-allowed = 'move'
e.dataTransfer.set-data 'text' JSON.stringify do e.dataTransfer.set-data 'text' JSON.stringify do
type: 'folder' type: 'folder'
@ -157,11 +157,11 @@
// (=あなたの子供が、ドラッグを開始しましたよ) // (=あなたの子供が、ドラッグを開始しましたよ)
this.browser.is-drag-source = true this.browser.is-drag-source = true
ondragend(e) { this.ondragend = (e) => {
this.is-dragging = false this.is-dragging = false
this.browser.is-drag-source = false this.browser.is-drag-source = false
oncontextmenu(e) { this.oncontextmenu = (e) => {
e.preventDefault(); e.preventDefault();
e.stop-immediate-propagation! e.stop-immediate-propagation!

View file

@ -16,16 +16,16 @@
this.hover = false this.hover = false
onclick() { this.onclick = () => {
this.browser.move this.folder this.browser.move this.folder
onmouseover() { this.onmouseover = () => {
this.hover = true this.hover = true
onmouseout() { this.onmouseout = () => {
this.hover = false this.hover = false
ondragover(e) { this.ondragover = (e) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -39,15 +39,15 @@
e.dataTransfer.dropEffect = 'move' e.dataTransfer.dropEffect = 'move'
return false return false
ondragenter() { this.ondragenter = () => {
if this.folder != null or this.browser.folder != null if this.folder != null or this.browser.folder != null
this.draghover = true this.draghover = true
ondragleave() { this.ondragleave = () => {
if this.folder != null or this.browser.folder != null if this.folder != null or this.browser.folder != null
this.draghover = false this.draghover = false
ondrop(e) { this.ondrop = (e) => {
e.stopPropagation(); e.stopPropagation();
this.draghover = false this.draghover = false

View file

@ -88,17 +88,17 @@
@stream.off 'follow' this.on-stream-follow @stream.off 'follow' this.on-stream-follow
@stream.off 'unfollow' this.on-stream-unfollow @stream.off 'unfollow' this.on-stream-unfollow
on-stream-follow(user) { this.on-stream-follow = (user) => {
if user.id == @user.id if user.id == @user.id
this.user = user this.user = user
this.update(); this.update();
on-stream-unfollow(user) { this.on-stream-unfollow = (user) => {
if user.id == @user.id if user.id == @user.id
this.user = user this.user = user
this.update(); this.update();
onclick() { this.onclick = () => {
this.wait = true this.wait = true
if @user.is_following if @user.is_following
this.api 'following/delete' do this.api 'following/delete' do

View file

@ -135,7 +135,7 @@
this.on('mount', () => { this.on('mount', () => {
@load! @load!
load() { this.load = () => {
this.loading = true this.loading = true
this.users = null this.users = null
this.update(); this.update();
@ -150,14 +150,14 @@
.catch (err, text-status) -> .catch (err, text-status) ->
console.error err console.error err
refresh() { this.refresh = () => {
if @users.length < @limit if @users.length < @limit
this.page = 0 this.page = 0
else else
@page++ @page++
@load! @load!
close() { this.close = () => {
this.unmount(); this.unmount();
</script> </script>
</mk-following-setuper> </mk-following-setuper>

View file

@ -1,11 +1,11 @@
<mk-go-top> <mk-go-top>
<button class="hidden" title="一番上へ"><i class="fa fa-angle-up"></i></button> <button class="hidden" title="一番上へ"><i class="fa fa-angle-up"></i></button>
<script> <script>
window.add-event-listener 'load' this.on-scroll window.addEventListener 'load' this.on-scroll
window.add-event-listener 'scroll' this.on-scroll window.addEventListener 'scroll' this.on-scroll
window.add-event-listener 'resize' this.on-scroll window.addEventListener 'resize' this.on-scroll
on-scroll() { this.on-scroll = () => {
if $ window .scroll-top! > 500px if $ window .scroll-top! > 500px
@remove-class 'hidden' @remove-class 'hidden'
else else

View file

@ -106,7 +106,7 @@
</style> </style>
<script> <script>
draw() { this.draw = () => {
now = new Date! now = new Date!
nd = now.get-date! nd = now.get-date!
nm = now.get-month! nm = now.get-month!

View file

@ -55,23 +55,23 @@
this.mode = 'all' this.mode = 'all'
this.on('mount', () => { this.on('mount', () => {
document.add-event-listener 'keydown' this.on-document-keydown document.addEventListener 'keydown' this.on-document-keydown
window.add-event-listener 'scroll' this.on-scroll window.addEventListener 'scroll' this.on-scroll
@fetch => @fetch =>
this.trigger('loaded'); this.trigger('loaded');
this.on('unmount', () => { this.on('unmount', () => {
document.remove-event-listener 'keydown' this.on-document-keydown document.removeEventListener 'keydown' this.on-document-keydown
window.remove-event-listener 'scroll' this.on-scroll window.removeEventListener 'scroll' this.on-scroll
on-document-keydown(e) { this.on-document-keydown = (e) => {
tag = e.target.tag-name.to-lower-case! tag = e.target.tag-name.to-lower-case!
if tag != 'input' and tag != 'textarea' if tag != 'input' and tag != 'textarea'
if e.which == 84 // t if e.which == 84 // t
this.refs.timeline.focus(); this.refs.timeline.focus();
fetch(cb) { this.fetch = (cb) => {
this.api 'posts/mentions' do this.api 'posts/mentions' do
following: @mode == 'following' following: @mode == 'following'
.then (posts) => .then (posts) =>
@ -84,7 +84,7 @@
console.error err console.error err
if cb? then cb! if cb? then cb!
more() { this.more = () => {
if @more-loading or @is-loading or this.refs.timeline.posts.length == 0 if @more-loading or @is-loading or this.refs.timeline.posts.length == 0
return return
this.more-loading = true this.more-loading = true
@ -99,12 +99,12 @@
.catch (err) => .catch (err) =>
console.error err console.error err
on-scroll() { this.on-scroll = () => {
current = window.scroll-y + window.inner-height current = window.scroll-y + window.inner-height
if current > document.body.offset-height - 8 if current > document.body.offset-height - 8
@more! @more!
set-mode(mode) { this.set-mode = (mode) => {
@update do @update do
mode: mode mode: mode
@fetch! @fetch!

View file

@ -43,7 +43,7 @@
</style> </style>
<script> <script>
settings() { this.settings = () => {
w = riot.mount document.body.appendChild document.createElement 'mk-settings-window' .0 w = riot.mount document.body.appendChild document.createElement 'mk-settings-window' .0
w.switch 'notification' w.switch 'notification'
</script> </script>

View file

@ -77,7 +77,7 @@
this.on('unmount', () => { this.on('unmount', () => {
@stream.off 'drive_file_created' this.on-stream-drive-file-created @stream.off 'drive_file_created' this.on-stream-drive-file-created
on-stream-drive-file-created(file) { this.on-stream-drive-file-created = (file) => {
if /^image\/.+$/.test file.type if /^image\/.+$/.test file.type
@images.unshift file @images.unshift file
if @images.length > 9 if @images.length > 9

View file

@ -46,10 +46,10 @@
this.mixin('update-avatar'); this.mixin('update-avatar');
this.mixin('update-banner'); this.mixin('update-banner');
set-avatar() { this.set-avatar = () => {
@update-avatar this.I @update-avatar this.I
set-banner() { this.set-banner = () => {
@update-banner this.I @update-banner this.I
</script> </script>
</mk-profile-home-widget> </mk-profile-home-widget>

View file

@ -78,7 +78,7 @@
this.on('unmount', () => { this.on('unmount', () => {
clear-interval @clock clear-interval @clock
fetch() { this.fetch = () => {
this.api CONFIG.url + '/api:rss' do this.api CONFIG.url + '/api:rss' do
url: @url url: @url
.then (feed) => .then (feed) =>
@ -88,7 +88,7 @@
.catch (err) -> .catch (err) ->
console.error err console.error err
settings() { this.settings = () => {
@NotImplementedException! @NotImplementedException!
</script> </script>
</mk-rss-reader-home-widget> </mk-rss-reader-home-widget>

View file

@ -46,8 +46,8 @@
@stream.on 'follow' this.on-stream-follow @stream.on 'follow' this.on-stream-follow
@stream.on 'unfollow' this.on-stream-unfollow @stream.on 'unfollow' this.on-stream-unfollow
document.add-event-listener 'keydown' this.on-document-keydown document.addEventListener 'keydown' this.on-document-keydown
window.add-event-listener 'scroll' this.on-scroll window.addEventListener 'scroll' this.on-scroll
@load => @load =>
this.trigger('loaded'); this.trigger('loaded');
@ -57,16 +57,16 @@
@stream.off 'follow' this.on-stream-follow @stream.off 'follow' this.on-stream-follow
@stream.off 'unfollow' this.on-stream-unfollow @stream.off 'unfollow' this.on-stream-unfollow
document.remove-event-listener 'keydown' this.on-document-keydown document.removeEventListener 'keydown' this.on-document-keydown
window.remove-event-listener 'scroll' this.on-scroll window.removeEventListener 'scroll' this.on-scroll
on-document-keydown(e) { this.on-document-keydown = (e) => {
tag = e.target.tag-name.to-lower-case! tag = e.target.tag-name.to-lower-case!
if tag != 'input' and tag != 'textarea' if tag != 'input' and tag != 'textarea'
if e.which == 84 // t if e.which == 84 // t
this.refs.timeline.focus(); this.refs.timeline.focus();
load(cb) { this.load = (cb) => {
this.api 'posts/timeline' this.api 'posts/timeline'
.then (posts) => .then (posts) =>
this.is-loading = false this.is-loading = false
@ -78,7 +78,7 @@
console.error err console.error err
if cb? then cb! if cb? then cb!
more() { this.more = () => {
if @more-loading or @is-loading or this.refs.timeline.posts.length == 0 if @more-loading or @is-loading or this.refs.timeline.posts.length == 0
return return
this.more-loading = true this.more-loading = true
@ -92,18 +92,18 @@
.catch (err) => .catch (err) =>
console.error err console.error err
on-stream-post(post) { this.on-stream-post = (post) => {
this.is-empty = false this.is-empty = false
this.update(); this.update();
this.refs.timeline.add-post post this.refs.timeline.add-post post
on-stream-follow() { this.on-stream-follow = () => {
@load! @load!
on-stream-unfollow() { this.on-stream-unfollow = () => {
@load! @load!
on-scroll() { this.on-scroll = () => {
current = window.scroll-y + window.inner-height current = window.scroll-y + window.inner-height
if current > document.body.offset-height - 8 if current > document.body.offset-height - 8
@more! @more!

View file

@ -48,11 +48,11 @@
this.on('unmount', () => { this.on('unmount', () => {
clear-interval @clock clear-interval @clock
set() { this.set = () => {
this.refs.text.innerHTML = @tips[Math.floor Math.random! * @tips.length] this.refs.text.innerHTML = @tips[Math.floor Math.random! * @tips.length]
this.update(); this.update();
change() { this.change = () => {
Velocity this.refs.tip, { Velocity this.refs.tip, {
opacity: 0 opacity: 0
} { } {

View file

@ -128,7 +128,7 @@
this.on('unmount', () => { this.on('unmount', () => {
clear-interval @clock clear-interval @clock
fetch(quiet = false) { this.fetch = (quiet = false) => {
this.loading = true this.loading = true
this.users = null this.users = null
if not quiet then this.update(); if not quiet then this.update();
@ -142,7 +142,7 @@
.catch (err, text-status) -> .catch (err, text-status) ->
console.error err console.error err
refresh() { this.refresh = () => {
if @users.length < @limit if @users.length < @limit
this.page = 0 this.page = 0
else else

View file

@ -53,7 +53,7 @@
// easing: 'ease-out' // easing: 'ease-out'
#} #}
close() { this.close = () => {
Velocity this.root, { Velocity this.root, {
opacity: 0 opacity: 0
} { } {

View file

@ -29,7 +29,7 @@
this.images = this.opts.images this.images = this.opts.images
this.image = @images.0 this.image = @images.0
mousemove(e) { this.mousemove = (e) => {
rect = this.refs.view.get-bounding-client-rect! rect = this.refs.view.get-bounding-client-rect!
mouse-x = e.client-x - rect.left mouse-x = e.client-x - rect.left
mouse-y = e.client-y - rect.top mouse-y = e.client-y - rect.top
@ -37,7 +37,7 @@
yp = mouse-y / this.refs.view.offset-height * 100 yp = mouse-y / this.refs.view.offset-height * 100
this.refs.view.style.background-position = xp + '% ' + yp + '%' this.refs.view.style.background-position = xp + '% ' + yp + '%'
click() { this.click = () => {
dialog = document.body.appendChild document.createElement 'mk-image-dialog' dialog = document.body.appendChild document.createElement 'mk-image-dialog'
riot.mount dialog, do riot.mount dialog, do
image: @image image: @image

View file

@ -139,16 +139,16 @@
this.refs.window.on('closed', () => { this.refs.window.on('closed', () => {
this.unmount(); this.unmount();
cancel() { this.cancel = () => {
this.done = false this.done = false
this.refs.window.close! this.refs.window.close!
ok() { this.ok = () => {
if not @allow-empty and @text.value == '' then return if not @allow-empty and @text.value == '' then return
this.done = true this.done = true
this.refs.window.close! this.refs.window.close!
on-keydown(e) { this.on-keydown = (e) => {
if e.which == 13 // Enter if e.which == 13 // Enter
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();

View file

@ -199,7 +199,7 @@
this.on('unmount', () => { this.on('unmount', () => {
@stream.off 'notification' this.on-notification @stream.off 'notification' this.on-notification
on-notification(notification) { this.on-notification = (notification) => {
@notifications.unshift notification @notifications.unshift notification
this.update(); this.update();

View file

@ -65,15 +65,15 @@
<script> <script>
this.mode = 'signin' this.mode = 'signin'
signup() { this.signup = () => {
this.mode = 'signup' this.mode = 'signup'
this.update(); this.update();
signin() { this.signin = () => {
this.mode = 'signin' this.mode = 'signin'
this.update(); this.update();
introduction() { this.introduction = () => {
this.mode = 'introduction' this.mode = 'introduction'
this.update(); this.update();
</script> </script>

View file

@ -124,7 +124,7 @@
@update do @update do
user: user user: user
introduction() { this.introduction = () => {
this.parent.introduction! this.parent.introduction!
</script> </script>
</mk-entrance-signin> </mk-entrance-signin>

View file

@ -28,18 +28,18 @@
document.title = 'Misskey' document.title = 'Misskey'
this.Progress.start(); this.Progress.start();
@stream.on 'post' this.on-stream-post @stream.on 'post' this.on-stream-post
document.add-event-listener 'visibilitychange' @window-on-visibilitychange, false document.addEventListener 'visibilitychange' @window-on-visibilitychange, false
this.on('unmount', () => { this.on('unmount', () => {
@stream.off 'post' this.on-stream-post @stream.off 'post' this.on-stream-post
document.remove-event-listener 'visibilitychange' @window-on-visibilitychange document.removeEventListener 'visibilitychange' @window-on-visibilitychange
on-stream-post(post) { this.on-stream-post = (post) => {
if document.hidden and post.user_id !== this.I.id if document.hidden and post.user_id !== this.I.id
@unread-count++ @unread-count++
document.title = '(' + @unread-count + ') ' + @get-post-summary post document.title = '(' + @unread-count + ') ' + @get-post-summary post
window-on-visibilitychange() { this.window-on-visibilitychange = () => {
if !document.hidden if !document.hidden
this.unread-count = 0 this.unread-count = 0
document.title = 'Misskey' document.title = 'Misskey'

View file

@ -123,7 +123,7 @@
if e.tag-name == 'MK-URL' if e.tag-name == 'MK-URL'
riot.mount e riot.mount e
like() { this.like = () => {
if @post.is_liked if @post.is_liked
this.api 'posts/likes/delete' do this.api 'posts/likes/delete' do
post_id: @post.id post_id: @post.id

View file

@ -398,17 +398,17 @@
this.update(); this.update();
reply() { this.reply = () => {
form = document.body.appendChild document.createElement 'mk-post-form-window' form = document.body.appendChild document.createElement 'mk-post-form-window'
riot.mount form, do riot.mount form, do
reply: @p reply: @p
repost() { this.repost = () => {
form = document.body.appendChild document.createElement 'mk-repost-form-window' form = document.body.appendChild document.createElement 'mk-repost-form-window'
riot.mount form, do riot.mount form, do
post: @p post: @p
like() { this.like = () => {
if @p.is_liked if @p.is_liked
this.api 'posts/likes/delete' do this.api 'posts/likes/delete' do
post_id: @p.id post_id: @p.id
@ -422,7 +422,7 @@
@p.is_liked = true @p.is_liked = true
this.update(); this.update();
load-context() { this.load-context = () => {
this.loading-context = true this.loading-context = true
// Get context // Get context

View file

@ -335,16 +335,16 @@
this.on('unmount', () => { this.on('unmount', () => {
@autocomplete.detach! @autocomplete.detach!
focus() { this.focus = () => {
this.refs.text.focus(); this.refs.text.focus();
clear() { this.clear = () => {
this.refs.text.value = '' this.refs.text.value = ''
this.files = [] this.files = []
this.trigger('change-files'); this.trigger('change-files');
this.update(); this.update();
ondragover(e) { this.ondragover = (e) => {
e.stopPropagation(); e.stopPropagation();
this.draghover = true this.draghover = true
// ドラッグされてきたものがファイルだったら // ドラッグされてきたものがファイルだったら
@ -354,13 +354,13 @@
e.dataTransfer.dropEffect = 'move' e.dataTransfer.dropEffect = 'move'
return false return false
ondragenter(e) { this.ondragenter = (e) => {
this.draghover = true this.draghover = true
ondragleave(e) { this.ondragleave = (e) => {
this.draghover = false this.draghover = false
ondrop(e) { this.ondrop = (e) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.draghover = false this.draghover = false
@ -388,11 +388,11 @@
return false return false
onkeydown(e) { this.onkeydown = (e) => {
if (e.which == 10 || e.which == 13) && (e.ctrlKey || e.meta-key) if (e.which == 10 || e.which == 13) && (e.ctrlKey || e.meta-key)
@post! @post!
onpaste(e) { this.onpaste = (e) => {
data = e.clipboardData data = e.clipboardData
items = data.items items = data.items
for i from 0 to items.length - 1 for i from 0 to items.length - 1
@ -401,26 +401,26 @@
| 'file' => | 'file' =>
@upload item.getAsFile(); @upload item.getAsFile();
select-file() { this.select-file = () => {
this.refs.file.click! this.refs.file.click!
select-file-from-drive() { this.select-file-from-drive = () => {
browser = document.body.appendChild document.createElement 'mk-select-file-from-drive-window' browser = document.body.appendChild document.createElement 'mk-select-file-from-drive-window'
i = riot.mount browser, do i = riot.mount browser, do
multiple: true multiple: true
i[0].one 'selected' (files) => i[0].one 'selected' (files) =>
files.for-each @add-file files.for-each @add-file
change-file() { this.change-file = () => {
files = this.refs.file.files files = this.refs.file.files
for i from 0 to files.length - 1 for i from 0 to files.length - 1
file = files.item i file = files.item i
@upload file @upload file
upload(file) { this.upload = (file) => {
this.refs.uploader.upload file this.refs.uploader.upload file
add-file(file) { this.add-file = (file) => {
file._remove = => file._remove = =>
this.files = this.files.filter (x) -> x.id != file.id this.files = this.files.filter (x) -> x.id != file.id
this.trigger 'change-files' this.files this.trigger 'change-files' this.files
@ -430,14 +430,14 @@
this.trigger 'change-files' this.files this.trigger 'change-files' this.files
this.update(); this.update();
add-poll() { this.add-poll = () => {
this.poll = true this.poll = true
on-poll-destroyed() { this.on-poll-destroyed = () => {
@update do @update do
poll: false poll: false
post(e) { this.post = (e) => {
this.wait = true this.wait = true
files = if this.files? and this.files.length > 0 files = if this.files? and this.files.length > 0
@ -459,7 +459,7 @@
this.wait = false this.wait = false
this.update(); this.update();
cat() { this.cat = () => {
this.refs.text.value = this.refs.text.value + get-cat! this.refs.text.value = this.refs.text.value + get-cat!
</script> </script>
</mk-post-form> </mk-post-form>

View file

@ -83,12 +83,12 @@
this.refs.window.on('closed', () => { this.refs.window.on('closed', () => {
this.unmount(); this.unmount();
update-progress(value, max) { this.update-progress = (value, max) => {
this.value = parse-int value, 10 this.value = parse-int value, 10
this.max = parse-int max, 10 this.max = parse-int max, 10
this.update(); this.update();
close() { this.close = () => {
this.refs.window.close! this.refs.window.close!
</script> </script>
</mk-progress-dialog> </mk-progress-dialog>

View file

@ -12,7 +12,7 @@
</style> </style>
<script> <script>
on-document-keydown(e) { this.on-document-keydown = (e) => {
tag = e.target.tag-name.to-lower-case! tag = e.target.tag-name.to-lower-case!
if tag != 'input' and tag != 'textarea' if tag != 'input' and tag != 'textarea'
if e.which == 27 // Esc if e.which == 27 // Esc
@ -25,12 +25,12 @@
this.refs.window.refs.form.on('posted', () => { this.refs.window.refs.form.on('posted', () => {
this.refs.window.close! this.refs.window.close!
document.add-event-listener 'keydown' this.on-document-keydown document.addEventListener 'keydown' this.on-document-keydown
this.refs.window.on('closed', () => { this.refs.window.on('closed', () => {
this.unmount(); this.unmount();
this.on('unmount', () => { this.on('unmount', () => {
document.remove-event-listener 'keydown' this.on-document-keydown document.removeEventListener 'keydown' this.on-document-keydown
</script> </script>
</mk-repost-form-window> </mk-repost-form-window>

View file

@ -120,10 +120,10 @@
this.wait = false this.wait = false
this.quote = false this.quote = false
cancel() { this.cancel = () => {
this.trigger('cancel'); this.trigger('cancel');
ok() { this.ok = () => {
this.wait = true this.wait = true
this.api 'posts/create' do this.api 'posts/create' do
repost_id: this.opts.post.id repost_id: this.opts.post.id
@ -138,7 +138,7 @@
this.wait = false this.wait = false
this.update(); this.update();
onquote() { this.onquote = () => {
this.quote = true this.quote = true
</script> </script>
</mk-repost-form> </mk-repost-form>

View file

@ -38,8 +38,8 @@
this.page = 0 this.page = 0
this.on('mount', () => { this.on('mount', () => {
document.add-event-listener 'keydown' this.on-document-keydown document.addEventListener 'keydown' this.on-document-keydown
window.add-event-listener 'scroll' this.on-scroll window.addEventListener 'scroll' this.on-scroll
this.api 'posts/search' do this.api 'posts/search' do
query: @query query: @query
@ -53,16 +53,16 @@
console.error err console.error err
this.on('unmount', () => { this.on('unmount', () => {
document.remove-event-listener 'keydown' this.on-document-keydown document.removeEventListener 'keydown' this.on-document-keydown
window.remove-event-listener 'scroll' this.on-scroll window.removeEventListener 'scroll' this.on-scroll
on-document-keydown(e) { this.on-document-keydown = (e) => {
tag = e.target.tag-name.to-lower-case! tag = e.target.tag-name.to-lower-case!
if tag != 'input' and tag != 'textarea' if tag != 'input' and tag != 'textarea'
if e.which == 84 // t if e.which == 84 // t
this.refs.timeline.focus(); this.refs.timeline.focus();
more() { this.more = () => {
if @more-loading or @is-loading or @timeline.posts.length == 0 if @more-loading or @is-loading or @timeline.posts.length == 0
return return
this.more-loading = true this.more-loading = true
@ -78,7 +78,7 @@
.catch (err) => .catch (err) =>
console.error err console.error err
on-scroll() { this.on-scroll = () => {
current = window.scroll-y + window.inner-height current = window.scroll-y + window.inner-height
if current > document.body.offset-height - 16 // 遊び if current > document.body.offset-height - 16 // 遊び
@more! @more!

View file

@ -148,13 +148,13 @@
this.refs.window.on('closed', () => { this.refs.window.on('closed', () => {
this.unmount(); this.unmount();
close() { this.close = () => {
this.refs.window.close! this.refs.window.close!
upload() { this.upload = () => {
this.refs.window.refs.browser.select-local-file! this.refs.window.refs.browser.select-local-file!
ok() { this.ok = () => {
this.trigger 'selected' this.file this.trigger 'selected' this.file
this.refs.window.close! this.refs.window.close!
</script> </script>

View file

@ -34,10 +34,10 @@
this.mixin('i'); this.mixin('i');
this.mixin('update-avatar'); this.mixin('update-avatar');
set() { this.set = () => {
@update-avatar this.I @update-avatar this.I
close(e) { this.close = (e) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.unmount(); this.unmount();

View file

@ -34,10 +34,10 @@
this.mixin('i'); this.mixin('i');
this.mixin('update-banner'); this.mixin('update-banner');
set() { this.set = () => {
@update-banner this.I @update-banner this.I
close(e) { this.close = (e) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.unmount(); this.unmount();

View file

@ -19,7 +19,7 @@
this.refs.window.on('closed', () => { this.refs.window.on('closed', () => {
this.unmount(); this.unmount();
close() { this.close = () => {
this.refs.window.close! this.refs.window.close!
</script> </script>
</mk-settings-window> </mk-settings-window>

View file

@ -205,13 +205,13 @@
this.page = 'account' this.page = 'account'
set-page(page) { this.set-page = (page) => {
this.page = page this.page = page
avatar() { this.avatar = () => {
@update-avatar this.I @update-avatar this.I
update-account() { this.update-account = () => {
this.api 'i/update' do this.api 'i/update' do
name: this.refs.account-name.value name: this.refs.account-name.value
location: this.refs.account-location.value location: this.refs.account-location.value
@ -222,19 +222,19 @@
.catch (err) => .catch (err) =>
console.error err console.error err
update-cache() { this.update-cache = () => {
this.I.data.cache = !this.I.data.cache this.I.data.cache = !this.I.data.cache
this.api 'i/appdata/set' do this.api 'i/appdata/set' do
data: JSON.stringify do data: JSON.stringify do
cache: this.I.data.cache cache: this.I.data.cache
update-debug() { this.update-debug = () => {
this.I.data.debug = !this.I.data.debug this.I.data.debug = !this.I.data.debug
this.api 'i/appdata/set' do this.api 'i/appdata/set' do
data: JSON.stringify do data: JSON.stringify do
debug: this.I.data.debug debug: this.I.data.debug
update-nya() { this.update-nya = () => {
this.I.data.nya = !this.I.data.nya this.I.data.nya = !this.I.data.nya
this.api 'i/appdata/set' do this.api 'i/appdata/set' do
data: JSON.stringify do data: JSON.stringify do

View file

@ -349,17 +349,17 @@
riot.mount @preview, do riot.mount @preview, do
url: t.content url: t.content
reply() { this.reply = () => {
form = document.body.appendChild document.createElement 'mk-post-form-window' form = document.body.appendChild document.createElement 'mk-post-form-window'
riot.mount form, do riot.mount form, do
reply: @p reply: @p
repost() { this.repost = () => {
form = document.body.appendChild document.createElement 'mk-repost-form-window' form = document.body.appendChild document.createElement 'mk-repost-form-window'
riot.mount form, do riot.mount form, do
post: @p post: @p
like() { this.like = () => {
if @p.is_liked if @p.is_liked
this.api 'posts/likes/delete' do this.api 'posts/likes/delete' do
post_id: @p.id post_id: @p.id
@ -373,11 +373,11 @@
@p.is_liked = true @p.is_liked = true
this.update(); this.update();
toggle-detail() { this.toggle-detail = () => {
this.is-detail-opened = !@is-detail-opened this.is-detail-opened = !@is-detail-opened
this.update(); this.update();
on-key-down(e) { this.on-key-down = (e) => {
should-be-cancel = true should-be-cancel = true
switch switch
| e.which == 38 or e.which == 74 or (e.which == 9 and e.shift-key) => // ↑, j or Shift+Tab | e.which == 38 or e.which == 74 or (e.which == 9 and e.shift-key) => // ↑, j or Shift+Tab

View file

@ -46,24 +46,24 @@
<script> <script>
this.posts = [] this.posts = []
set-posts(posts) { this.set-posts = (posts) => {
this.posts = posts this.posts = posts
this.update(); this.update();
prepend-posts(posts) { this.prepend-posts = (posts) => {
posts.for-each (post) => posts.for-each (post) =>
@posts.push post @posts.push post
this.update(); this.update();
add-post(post) { this.add-post = (post) => {
@posts.unshift post @posts.unshift post
this.update(); this.update();
clear() { this.clear = () => {
this.posts = [] this.posts = []
this.update(); this.update();
focus() { this.focus = () => {
this.root.children.0.focus(); this.root.children.0.focus();
this.on('update', () => { this.on('update', () => {
@ -73,7 +73,7 @@
post._date = date post._date = date
post._datetext = month + '月 ' + date + '日' post._datetext = month + '月 ' + date + '日'
tail() { this.tail = () => {
@posts[@posts.length - 1] @posts[@posts.length - 1]
</script> </script>
</mk-timeline> </mk-timeline>

View file

@ -167,37 +167,37 @@
this.on('before-unmount', () => { this.on('before-unmount', () => {
@close! @close!
toggle() { this.toggle = () => {
if @is-open if @is-open
@close! @close!
else else
@open! @open!
open() { this.open = () => {
this.is-open = true this.is-open = true
this.update(); this.update();
all = document.query-selector-all 'body *' all = document.query-selector-all 'body *'
Array.prototype.for-each.call all, (el) => Array.prototype.for-each.call all, (el) =>
el.add-event-listener 'mousedown' @mousedown el.addEventListener 'mousedown' @mousedown
close() { this.close = () => {
this.is-open = false this.is-open = false
this.update(); this.update();
all = document.query-selector-all 'body *' all = document.query-selector-all 'body *'
Array.prototype.for-each.call all, (el) => Array.prototype.for-each.call all, (el) =>
el.remove-event-listener 'mousedown' @mousedown el.removeEventListener 'mousedown' @mousedown
mousedown(e) { this.mousedown = (e) => {
e.preventDefault(); e.preventDefault();
if (!contains this.root, e.target) and (this.root != e.target) if (!contains this.root, e.target) and (this.root != e.target)
@close! @close!
return false return false
drive() { this.drive = () => {
@close! @close!
riot.mount document.body.appendChild document.createElement 'mk-drive-browser-window' riot.mount document.body.appendChild document.createElement 'mk-drive-browser-window'
settings() { this.settings = () => {
@close! @close!
riot.mount document.body.appendChild document.createElement 'mk-settings-window' riot.mount document.body.appendChild document.createElement 'mk-settings-window'

View file

@ -58,7 +58,7 @@
</style> </style>
<script> <script>
draw() { this.draw = () => {
now = new Date! now = new Date!
yyyy = now.get-full-year! yyyy = now.get-full-year!

View file

@ -98,15 +98,15 @@
@stream.off 'read_all_messaging_messages' this.on-read-all-messaging-messages @stream.off 'read_all_messaging_messages' this.on-read-all-messaging-messages
@stream.off 'unread_messaging_message' this.on-unread-messaging-message @stream.off 'unread_messaging_message' this.on-unread-messaging-message
on-read-all-messaging-messages() { this.on-read-all-messaging-messages = () => {
this.has-unread-messaging-messages = false this.has-unread-messaging-messages = false
this.update(); this.update();
on-unread-messaging-message() { this.on-unread-messaging-message = () => {
this.has-unread-messaging-messages = true this.has-unread-messaging-messages = true
this.update(); this.update();
messaging() { this.messaging = () => {
riot.mount document.body.appendChild document.createElement 'mk-messaging-window' riot.mount document.body.appendChild document.createElement 'mk-messaging-window'
</script> </script>
</ul> </ul>

View file

@ -77,27 +77,27 @@
<script> <script>
this.is-open = false this.is-open = false
toggle() { this.toggle = () => {
if @is-open if @is-open
@close! @close!
else else
@open! @open!
open() { this.open = () => {
this.is-open = true this.is-open = true
this.update(); this.update();
all = document.query-selector-all 'body *' all = document.query-selector-all 'body *'
Array.prototype.for-each.call all, (el) => Array.prototype.for-each.call all, (el) =>
el.add-event-listener 'mousedown' @mousedown el.addEventListener 'mousedown' @mousedown
close() { this.close = () => {
this.is-open = false this.is-open = false
this.update(); this.update();
all = document.query-selector-all 'body *' all = document.query-selector-all 'body *'
Array.prototype.for-each.call all, (el) => Array.prototype.for-each.call all, (el) =>
el.remove-event-listener 'mousedown' @mousedown el.removeEventListener 'mousedown' @mousedown
mousedown(e) { this.mousedown = (e) => {
e.preventDefault(); e.preventDefault();
if (!contains this.root, e.target) and (this.root != e.target) if (!contains this.root, e.target) and (this.root != e.target)
@close! @close!

View file

@ -35,7 +35,7 @@
</style> </style>
<script> <script>
post(e) { this.post = (e) => {
this.parent.parent.open-post-form! this.parent.parent.open-post-form!
</script> </script>
</mk-ui-header-post-button> </mk-ui-header-post-button>

View file

@ -34,7 +34,7 @@
<script> <script>
this.mixin('page'); this.mixin('page');
onsubmit(e) { this.onsubmit = (e) => {
e.preventDefault(); e.preventDefault();
@page '/search:' + this.refs.q.value @page '/search:' + this.refs.q.value
</script> </script>

View file

@ -14,20 +14,20 @@
<script> <script>
this.mixin('i'); this.mixin('i');
open-post-form() { this.open-post-form = () => {
riot.mount document.body.appendChild document.createElement 'mk-post-form-window' riot.mount document.body.appendChild document.createElement 'mk-post-form-window'
set-root-layout() { this.set-root-layout = () => {
this.root.style.padding-top = this.refs.header.root.client-height + 'px' this.root.style.padding-top = this.refs.header.root.client-height + 'px'
this.on('mount', () => { this.on('mount', () => {
@set-root-layout! @set-root-layout!
document.add-event-listener 'keydown' this.onkeydown document.addEventListener 'keydown' this.onkeydown
this.on('unmount', () => { this.on('unmount', () => {
document.remove-event-listener 'keydown' this.onkeydown document.removeEventListener 'keydown' this.onkeydown
onkeydown(e) { this.onkeydown = (e) => {
tag = e.target.tag-name.to-lower-case! tag = e.target.tag-name.to-lower-case!
if tag != 'input' and tag != 'textarea' if tag != 'input' and tag != 'textarea'
if e.which == 80 or e.which == 78 // p or n if e.which == 80 or e.which == 78 // p or n

View file

@ -11,7 +11,7 @@
this.user = this.opts.user this.user = this.opts.user
fetch(iknow, limit, cursor, cb) { this.fetch = (iknow, limit, cursor, cb) => {
this.api 'users/followers' do this.api 'users/followers' do
user_id: @user.id user_id: @user.id
iknow: iknow iknow: iknow

View file

@ -11,7 +11,7 @@
this.user = this.opts.user this.user = this.opts.user
fetch(iknow, limit, cursor, cb) { this.fetch = (iknow, limit, cursor, cb) => {
this.api 'users/following' do this.api 'users/following' do
user_id: @user.id user_id: @user.id
iknow: iknow iknow: iknow

View file

@ -111,16 +111,16 @@
this.user = this.opts.user this.user = this.opts.user
this.on('mount', () => { this.on('mount', () => {
window.add-event-listener 'load' @scroll window.addEventListener 'load' @scroll
window.add-event-listener 'scroll' @scroll window.addEventListener 'scroll' @scroll
window.add-event-listener 'resize' @scroll window.addEventListener 'resize' @scroll
this.on('unmount', () => { this.on('unmount', () => {
window.remove-event-listener 'load' @scroll window.removeEventListener 'load' @scroll
window.remove-event-listener 'scroll' @scroll window.removeEventListener 'scroll' @scroll
window.remove-event-listener 'resize' @scroll window.removeEventListener 'resize' @scroll
scroll() { this.scroll = () => {
top = window.scroll-y top = window.scroll-y
height = 280px height = 280px
@ -131,7 +131,7 @@
if blur <= 10 if blur <= 10
this.refs.banner.style.filter = 'blur(' + blur + 'px)' this.refs.banner.style.filter = 'blur(' + blur + 'px)'
on-update-banner() { this.on-update-banner = () => {
if not @SIGNIN or this.I.id != @user.id if not @SIGNIN or this.I.id != @user.id
return return

View file

@ -130,7 +130,7 @@
easing: 'ease-out' easing: 'ease-out'
} }
close() { this.close = () => {
Velocity this.root, { Velocity this.root, {
opacity: 0 opacity: 0
'margin-top': '-8px' 'margin-top': '-8px'

View file

@ -86,12 +86,12 @@
this.user = this.opts.user this.user = this.opts.user
show-following() { this.show-following = () => {
window = document.body.appendChild document.createElement 'mk-user-following-window' window = document.body.appendChild document.createElement 'mk-user-following-window'
riot.mount window, do riot.mount window, do
user: @user user: @user
show-followers() { this.show-followers = () => {
window = document.body.appendChild document.createElement 'mk-user-followers-window' window = document.body.appendChild document.createElement 'mk-user-followers-window'
riot.mount window, do riot.mount window, do
user: @user user: @user

View file

@ -59,9 +59,9 @@
this.mode = 'default' this.mode = 'default'
this.on('mount', () => { this.on('mount', () => {
document.add-event-listener 'visibilitychange' @window-on-visibilitychange, false document.addEventListener 'visibilitychange' @window-on-visibilitychange, false
document.add-event-listener 'keydown' this.on-document-keydown document.addEventListener 'keydown' this.on-document-keydown
window.add-event-listener 'scroll' this.on-scroll window.addEventListener 'scroll' this.on-scroll
@user-promise.then (user) => @user-promise.then (user) =>
this.user = user this.user = user
@ -71,17 +71,17 @@
this.trigger('loaded'); this.trigger('loaded');
this.on('unmount', () => { this.on('unmount', () => {
document.remove-event-listener 'visibilitychange' @window-on-visibilitychange document.removeEventListener 'visibilitychange' @window-on-visibilitychange
document.remove-event-listener 'keydown' this.on-document-keydown document.removeEventListener 'keydown' this.on-document-keydown
window.remove-event-listener 'scroll' this.on-scroll window.removeEventListener 'scroll' this.on-scroll
on-document-keydown(e) { this.on-document-keydown = (e) => {
tag = e.target.tag-name.to-lower-case! tag = e.target.tag-name.to-lower-case!
if tag != 'input' and tag != 'textarea' if tag != 'input' and tag != 'textarea'
if e.which == 84 // t if e.which == 84 // t
this.refs.timeline.focus(); this.refs.timeline.focus();
fetch(cb) { this.fetch = (cb) => {
this.api 'users/posts' do this.api 'users/posts' do
user_id: @user.id user_id: @user.id
with_replies: @mode == 'with-replies' with_replies: @mode == 'with-replies'
@ -95,7 +95,7 @@
console.error err console.error err
if cb? then cb! if cb? then cb!
more() { this.more = () => {
if @more-loading or @is-loading or this.refs.timeline.posts.length == 0 if @more-loading or @is-loading or this.refs.timeline.posts.length == 0
return return
this.more-loading = true this.more-loading = true
@ -111,7 +111,7 @@
.catch (err) => .catch (err) =>
console.error err console.error err
on-stream-post(post) { this.on-stream-post = (post) => {
this.is-empty = false this.is-empty = false
this.update(); this.update();
this.refs.timeline.add-post post this.refs.timeline.add-post post
@ -120,17 +120,17 @@
@unread-count++ @unread-count++
document.title = '(' + @unread-count + ') ' + @get-post-summary post document.title = '(' + @unread-count + ') ' + @get-post-summary post
window-on-visibilitychange() { this.window-on-visibilitychange = () => {
if !document.hidden if !document.hidden
this.unread-count = 0 this.unread-count = 0
document.title = 'Misskey' document.title = 'Misskey'
on-scroll() { this.on-scroll = () => {
current = window.scroll-y + window.inner-height current = window.scroll-y + window.inner-height
if current > document.body.offset-height - 16 // 遊び if current > document.body.offset-height - 16 // 遊び
@more! @more!
set-mode(mode) { this.set-mode = (mode) => {
@update do @update do
mode: mode mode: mode
@fetch! @fetch!

View file

@ -100,7 +100,7 @@
@fetch => @fetch =>
this.trigger('loaded'); this.trigger('loaded');
fetch(cb) { this.fetch = (cb) => {
this.fetching = true this.fetching = true
this.update(); this.update();
obj <~ this.opts.fetch do obj <~ this.opts.fetch do
@ -113,7 +113,7 @@
this.update(); this.update();
if cb? then cb! if cb? then cb!
more() { this.more = () => {
this.more-fetching = true this.more-fetching = true
this.update(); this.update();
obj <~ this.opts.fetch do obj <~ this.opts.fetch do
@ -125,7 +125,7 @@
this.more-fetching = false this.more-fetching = false
this.update(); this.update();
set-mode(mode) { this.set-mode = (mode) => {
@update do @update do
mode: mode mode: mode

View file

@ -207,17 +207,17 @@
this.refs.main.style.top = '15%' this.refs.main.style.top = '15%'
this.refs.main.style.left = (window.inner-width / 2) - (this.refs.main.offset-width / 2) + 'px' this.refs.main.style.left = (window.inner-width / 2) - (this.refs.main.offset-width / 2) + 'px'
this.refs.header.add-event-listener 'contextmenu' (e) => this.refs.header.addEventListener 'contextmenu' (e) =>
e.preventDefault(); e.preventDefault();
window.add-event-listener 'resize' this.on-browser-resize window.addEventListener 'resize' this.on-browser-resize
@open! @open!
this.on('unmount', () => { this.on('unmount', () => {
window.remove-event-listener 'resize' this.on-browser-resize window.removeEventListener 'resize' this.on-browser-resize
on-browser-resize() { this.on-browser-resize = () => {
position = this.refs.main.get-bounding-client-rect! position = this.refs.main.get-bounding-client-rect!
browser-width = window.inner-width browser-width = window.inner-width
browser-height = window.inner-height browser-height = window.inner-height
@ -236,7 +236,7 @@
if position.top + window-height > browser-height if position.top + window-height > browser-height
this.refs.main.style.top = browser-height - window-height + 'px' this.refs.main.style.top = browser-height - window-height + 'px'
open() { this.open = () => {
this.trigger('opening'); this.trigger('opening');
@top! @top!
@ -270,7 +270,7 @@
this.trigger('opened'); this.trigger('opened');
, 300ms , 300ms
close() { this.close = () => {
this.trigger('closing'); this.trigger('closing');
if @is-modal if @is-modal
@ -300,7 +300,7 @@
, 300ms , 300ms
// 最前面へ移動します // 最前面へ移動します
top() { this.top = () => {
z = 0 z = 0
ws = document.query-selector-all 'mk-window' ws = document.query-selector-all 'mk-window'
@ -314,20 +314,20 @@
this.refs.main.style.z-index = z + 1 this.refs.main.style.z-index = z + 1
if @is-modal then this.refs.bg.style.z-index = z + 1 if @is-modal then this.refs.bg.style.z-index = z + 1
repel-move(e) { this.repel-move = (e) => {
e.stopPropagation(); e.stopPropagation();
return true return true
bg-click() { this.bg-click = () => {
if @can-close if @can-close
@close! @close!
on-body-mousedown(e) { this.on-body-mousedown = (e) => {
@top! @top!
true true
// ヘッダー掴み時 // ヘッダー掴み時
on-header-mousedown(e) { this.on-header-mousedown = (e) => {
e.preventDefault(); e.preventDefault();
if not contains this.refs.main, document.active-element if not contains this.refs.main, document.active-element
@ -369,7 +369,7 @@
this.refs.main.style.top = move-top + 'px' this.refs.main.style.top = move-top + 'px'
// 上ハンドル掴み時 // 上ハンドル掴み時
on-top-handle-mousedown(e) { this.on-top-handle-mousedown = (e) => {
e.preventDefault(); e.preventDefault();
base = e.client-y base = e.client-y
@ -391,7 +391,7 @@
@apply-transform-top 0 @apply-transform-top 0
// 右ハンドル掴み時 // 右ハンドル掴み時
on-right-handle-mousedown(e) { this.on-right-handle-mousedown = (e) => {
e.preventDefault(); e.preventDefault();
base = e.client-x base = e.client-x
@ -411,7 +411,7 @@
@apply-transform-width browser-width - left @apply-transform-width browser-width - left
// 下ハンドル掴み時 // 下ハンドル掴み時
on-bottom-handle-mousedown(e) { this.on-bottom-handle-mousedown = (e) => {
e.preventDefault(); e.preventDefault();
base = e.client-y base = e.client-y
@ -431,7 +431,7 @@
@apply-transform-height browser-height - top @apply-transform-height browser-height - top
// 左ハンドル掴み時 // 左ハンドル掴み時
on-left-handle-mousedown(e) { this.on-left-handle-mousedown = (e) => {
e.preventDefault(); e.preventDefault();
base = e.client-x base = e.client-x
@ -453,55 +453,55 @@
@apply-transform-left 0 @apply-transform-left 0
// 左上ハンドル掴み時 // 左上ハンドル掴み時
on-top-left-handle-mousedown(e) { this.on-top-left-handle-mousedown = (e) => {
this.on-top-handle-mousedown e this.on-top-handle-mousedown e
this.on-left-handle-mousedown e this.on-left-handle-mousedown e
// 右上ハンドル掴み時 // 右上ハンドル掴み時
on-top-right-handle-mousedown(e) { this.on-top-right-handle-mousedown = (e) => {
this.on-top-handle-mousedown e this.on-top-handle-mousedown e
this.on-right-handle-mousedown e this.on-right-handle-mousedown e
// 右下ハンドル掴み時 // 右下ハンドル掴み時
on-bottom-right-handle-mousedown(e) { this.on-bottom-right-handle-mousedown = (e) => {
this.on-bottom-handle-mousedown e this.on-bottom-handle-mousedown e
this.on-right-handle-mousedown e this.on-right-handle-mousedown e
// 左下ハンドル掴み時 // 左下ハンドル掴み時
on-bottom-left-handle-mousedown(e) { this.on-bottom-left-handle-mousedown = (e) => {
this.on-bottom-handle-mousedown e this.on-bottom-handle-mousedown e
this.on-left-handle-mousedown e this.on-left-handle-mousedown e
// 高さを適用 // 高さを適用
apply-transform-height(height) { this.apply-transform-height = (height) => {
this.refs.main.style.height = height + 'px' this.refs.main.style.height = height + 'px'
// 幅を適用 // 幅を適用
apply-transform-width(width) { this.apply-transform-width = (width) => {
this.refs.main.style.width = width + 'px' this.refs.main.style.width = width + 'px'
// Y座標を適用 // Y座標を適用
apply-transform-top(top) { this.apply-transform-top = (top) => {
this.refs.main.style.top = top + 'px' this.refs.main.style.top = top + 'px'
// X座標を適用 // X座標を適用
apply-transform-left(left) { this.apply-transform-left = (left) => {
this.refs.main.style.left = left + 'px' this.refs.main.style.left = left + 'px'
function drag-listen fn function drag-listen fn
window.add-event-listener 'mousemove' fn window.addEventListener 'mousemove' fn
window.add-event-listener 'mouseleave' drag-clear.bind null fn window.addEventListener 'mouseleave' drag-clear.bind null fn
window.add-event-listener 'mouseup' drag-clear.bind null fn window.addEventListener 'mouseup' drag-clear.bind null fn
function drag-clear fn function drag-clear fn
window.remove-event-listener 'mousemove' fn window.removeEventListener 'mousemove' fn
window.remove-event-listener 'mouseleave' drag-clear window.removeEventListener 'mouseleave' drag-clear
window.remove-event-listener 'mouseup' drag-clear window.removeEventListener 'mouseup' drag-clear
ondragover(e) { this.ondragover = (e) => {
e.dataTransfer.dropEffect = 'none' e.dataTransfer.dropEffect = 'none'
on-keydown(e) { this.on-keydown = (e) => {
if e.which == 27 // Esc if e.which == 27 // Esc
if @can-close if @can-close
e.preventDefault(); e.preventDefault();

View file

@ -182,7 +182,7 @@
this.nid-state = null this.nid-state = null
on-change-nid() { this.on-change-nid = () => {
nid = this.refs.nid.value nid = this.refs.nid.value
if nid == '' if nid == ''
@ -215,7 +215,7 @@
this.nid-state = 'error' this.nid-state = 'error'
this.update(); this.update();
onsubmit() { this.onsubmit = () => {
name = this.refs.name.value name = this.refs.name.value
nid = this.refs.nid.value nid = this.refs.nid.value
description = this.refs.description.value description = this.refs.description.value

View file

@ -63,11 +63,11 @@
this.files = files this.files = files
this.update(); this.update();
cancel() { this.cancel = () => {
this.trigger('canceled'); this.trigger('canceled');
this.unmount(); this.unmount();
ok() { this.ok = () => {
this.trigger 'selected' this.files this.trigger 'selected' this.files
this.unmount(); this.unmount();
</script> </script>

View file

@ -167,20 +167,20 @@
@stream.off 'drive_folder_created' this.on-stream-drive-folder-created @stream.off 'drive_folder_created' this.on-stream-drive-folder-created
@stream.off 'drive_folder_updated' this.on-stream-drive-folder-updated @stream.off 'drive_folder_updated' this.on-stream-drive-folder-updated
on-stream-drive-file-created(file) { this.on-stream-drive-file-created = (file) => {
@add-file file, true @add-file file, true
on-stream-drive-file-updated(file) { this.on-stream-drive-file-updated = (file) => {
current = if this.folder? then this.folder.id else null current = if this.folder? then this.folder.id else null
if current != file.folder_id if current != file.folder_id
@remove-file file @remove-file file
else else
@add-file file, true @add-file file, true
on-stream-drive-folder-created(folder) { this.on-stream-drive-folder-created = (folder) => {
@add-folder folder, true @add-folder folder, true
on-stream-drive-folder-updated(folder) { this.on-stream-drive-folder-updated = (folder) => {
current = if this.folder? then this.folder.id else null current = if this.folder? then this.folder.id else null
if current != folder.parent_id if current != folder.parent_id
@remove-folder folder @remove-folder folder
@ -190,10 +190,10 @@
@_move = (ev) => @_move = (ev) =>
@move ev.item.folder @move ev.item.folder
move(target-folder) { this.move = (target-folder) => {
@cd target-folder @cd target-folder
cd(target-folder, silent = false) { this.cd = (target-folder, silent = false) => {
this.file = null this.file = null
if target-folder? and typeof target-folder == 'object' if target-folder? and typeof target-folder == 'object'
@ -226,7 +226,7 @@
.catch (err, text-status) -> .catch (err, text-status) ->
console.error err console.error err
add-folder(folder, unshift = false) { this.add-folder = (folder, unshift = false) => {
current = if this.folder? then this.folder.id else null current = if this.folder? then this.folder.id else null
if current != folder.parent_id if current != folder.parent_id
return return
@ -241,7 +241,7 @@
this.update(); this.update();
add-file(file, unshift = false) { this.add-file = (file, unshift = false) => {
current = if this.folder? then this.folder.id else null current = if this.folder? then this.folder.id else null
if current != file.folder_id if current != file.folder_id
return return
@ -259,19 +259,19 @@
this.update(); this.update();
remove-folder(folder) { this.remove-folder = (folder) => {
if typeof folder == 'object' if typeof folder == 'object'
folder = folder.id folder = folder.id
this.folders = this.folders.filter (f) -> f.id != folder this.folders = this.folders.filter (f) -> f.id != folder
this.update(); this.update();
remove-file(file) { this.remove-file = (file) => {
if typeof file == 'object' if typeof file == 'object'
file = file.id file = file.id
this.files = this.files.filter (f) -> f.id != file this.files = this.files.filter (f) -> f.id != file
this.update(); this.update();
go-root() { this.go-root = () => {
if this.folder != null or this.file != null if this.folder != null or this.file != null
this.file = null this.file = null
this.folder = null this.folder = null
@ -280,7 +280,7 @@
this.trigger('move-root'); this.trigger('move-root');
@load! @load!
load() { this.load = () => {
this.folders = [] this.folders = []
this.files = [] this.files = []
this.more-folders = false this.more-folders = false
@ -337,11 +337,11 @@
flag := true flag := true
this.trigger('load-mid'); this.trigger('load-mid');
choose-file(file) { this.choose-file = (file) => {
if @is-select-mode if @is-select-mode
exist = @selected-files.some (f) => f.id == file.id exist = @selected-files.some (f) => f.id == file.id
if exist if exist
selected-files(@selected-files.filter (f) { f.id != file.id) this.selected-files = (@selected-files.filter (f) => { f.id != file.id)
else else
@selected-files.push file @selected-files.push file
this.update(); this.update();
@ -349,7 +349,7 @@
else else
@cf file @cf file
cf(file, silent = false) { this.cf = (file, silent = false) => {
if typeof file == 'object' if typeof file == 'object'
file = file.id file = file.id

View file

@ -188,7 +188,7 @@
this.file = this.opts.file this.file = this.opts.file
this.kind = this.file.type.split '/' .0 this.kind = this.file.type.split '/' .0
rename() { this.rename = () => {
name = window.prompt '名前を変更' this.file.name name = window.prompt '名前を変更' this.file.name
if name? and name != '' and name != this.file.name if name? and name != '' and name != this.file.name
this.api 'drive/files/update' do this.api 'drive/files/update' do

View file

@ -131,7 +131,7 @@
this.browser.on('change-selected', (selects) => { this.browser.on('change-selected', (selects) => {
this.is-selected = selects.some (f) => f.id == this.file.id this.is-selected = selects.some (f) => f.id == this.file.id
onclick() { this.onclick = () => {
this.browser.choose-file this.file this.browser.choose-file this.file
</script> </script>
</mk-drive-file> </mk-drive-file>

View file

@ -40,7 +40,7 @@
this.browser = this.parent this.browser = this.parent
this.folder = this.opts.folder this.folder = this.opts.folder
onclick() { this.onclick = () => {
this.browser.move this.folder this.browser.move this.folder
</script> </script>
</mk-drive-folder> </mk-drive-folder>

View file

@ -69,17 +69,17 @@
@stream.off 'follow' this.on-stream-follow @stream.off 'follow' this.on-stream-follow
@stream.off 'unfollow' this.on-stream-unfollow @stream.off 'unfollow' this.on-stream-unfollow
on-stream-follow(user) { this.on-stream-follow = (user) => {
if user.id == @user.id if user.id == @user.id
this.user = user this.user = user
this.update(); this.update();
on-stream-unfollow(user) { this.on-stream-unfollow = (user) => {
if user.id == @user.id if user.id == @user.id
this.user = user this.user = user
this.update(); this.update();
onclick() { this.onclick = () => {
this.wait = true this.wait = true
if @user.is_following if @user.is_following
this.api 'following/delete' do this.api 'following/delete' do

View file

@ -25,19 +25,19 @@
@stream.off 'follow' this.on-stream-follow @stream.off 'follow' this.on-stream-follow
@stream.off 'unfollow' this.on-stream-unfollow @stream.off 'unfollow' this.on-stream-unfollow
more() { this.more = () => {
this.api 'posts/timeline' do this.api 'posts/timeline' do
max_id: this.refs.timeline.tail!.id max_id: this.refs.timeline.tail!.id
on-stream-post(post) { this.on-stream-post = (post) => {
this.is-empty = false this.is-empty = false
this.update(); this.update();
this.refs.timeline.add-post post this.refs.timeline.add-post post
on-stream-follow() { this.on-stream-follow = () => {
@fetch! @fetch!
on-stream-unfollow() { this.on-stream-unfollow = () => {
@fetch! @fetch!
</script> </script>
</mk-home-timeline> </mk-home-timeline>

View file

@ -21,7 +21,7 @@
this.images = this.opts.images this.images = this.opts.images
this.image = @images.0 this.image = @images.0
click() { this.click = () => {
window.open @image.url window.open @image.url
</script> </script>
</mk-images-viewer> </mk-images-viewer>

View file

@ -79,7 +79,7 @@
this.on('unmount', () => { this.on('unmount', () => {
@stream.off 'notification' this.on-notification @stream.off 'notification' this.on-notification
on-notification(notification) { this.on-notification = (notification) => {
@notifications.unshift notification @notifications.unshift notification
this.update(); this.update();

View file

@ -45,15 +45,15 @@
<script> <script>
this.mode = 'signin' this.mode = 'signin'
signup() { this.signup = () => {
this.mode = 'signup' this.mode = 'signup'
this.update(); this.update();
signin() { this.signin = () => {
this.mode = 'signin' this.mode = 'signin'
this.update(); this.update();
introduction() { this.introduction = () => {
this.mode = 'introduction' this.mode = 'introduction'
this.update(); this.update();
</script> </script>

View file

@ -23,21 +23,21 @@
this.Progress.start(); this.Progress.start();
@stream.on 'post' this.on-stream-post @stream.on 'post' this.on-stream-post
document.add-event-listener 'visibilitychange' @window-on-visibilitychange, false document.addEventListener 'visibilitychange' @window-on-visibilitychange, false
this.refs.ui.refs.home.on('loaded', () => { this.refs.ui.refs.home.on('loaded', () => {
this.Progress.done(); this.Progress.done();
this.on('unmount', () => { this.on('unmount', () => {
@stream.off 'post' this.on-stream-post @stream.off 'post' this.on-stream-post
document.remove-event-listener 'visibilitychange' @window-on-visibilitychange document.removeEventListener 'visibilitychange' @window-on-visibilitychange
on-stream-post(post) { this.on-stream-post = (post) => {
if document.hidden and post.user_id !== this.I.id if document.hidden and post.user_id !== this.I.id
@unread-count++ @unread-count++
document.title = '(' + @unread-count + ') ' + @get-post-summary post document.title = '(' + @unread-count + ') ' + @get-post-summary post
window-on-visibilitychange() { this.window-on-visibilitychange = () => {
if !document.hidden if !document.hidden
this.unread-count = 0 this.unread-count = 0
document.title = 'Misskey' document.title = 'Misskey'

View file

@ -391,18 +391,18 @@
this.replies = replies this.replies = replies
this.update(); this.update();
reply() { this.reply = () => {
@open-post-form do @open-post-form do
reply: @p reply: @p
repost() { this.repost = () => {
text = window.prompt '「' + @summary + '」をRepost' text = window.prompt '「' + @summary + '」をRepost'
if text? if text?
this.api 'posts/create' do this.api 'posts/create' do
repost_id: @p.id repost_id: @p.id
text: if text == '' then undefined else text text: if text == '' then undefined else text
like() { this.like = () => {
if @p.is_liked if @p.is_liked
this.api 'posts/likes/delete' do this.api 'posts/likes/delete' do
post_id: @p.id post_id: @p.id
@ -416,7 +416,7 @@
@p.is_liked = true @p.is_liked = true
this.update(); this.update();
load-context() { this.load-context = () => {
this.loading-context = true this.loading-context = true
// Get context // Get context

View file

@ -200,13 +200,13 @@
this.refs.text.focus(); this.refs.text.focus();
onkeypress(e) { this.onkeypress = (e) => {
if (e.char-code == 10 || e.char-code == 13) && e.ctrlKey if (e.char-code == 10 || e.char-code == 13) && e.ctrlKey
@post! @post!
else else
return true return true
onpaste(e) { this.onpaste = (e) => {
data = e.clipboardData data = e.clipboardData
items = data.items items = data.items
for i from 0 to items.length - 1 for i from 0 to items.length - 1
@ -216,10 +216,10 @@
@upload item.getAsFile(); @upload item.getAsFile();
return true return true
select-file() { this.select-file = () => {
this.refs.file.click! this.refs.file.click!
select-file-from-drive() { this.select-file-from-drive = () => {
browser = document.body.appendChild document.createElement 'mk-drive-selector' browser = document.body.appendChild document.createElement 'mk-drive-selector'
browser = riot.mount browser, do browser = riot.mount browser, do
multiple: true multiple: true
@ -227,16 +227,16 @@
browser.on('selected', (files) => { browser.on('selected', (files) => {
files.for-each @add-file files.for-each @add-file
change-file() { this.change-file = () => {
files = this.refs.file.files files = this.refs.file.files
for i from 0 to files.length - 1 for i from 0 to files.length - 1
file = files.item i file = files.item i
@upload file @upload file
upload(file) { this.upload = (file) => {
this.refs.uploader.upload file this.refs.uploader.upload file
add-file(file) { this.add-file = (file) => {
file._remove = => file._remove = =>
this.files = this.files.filter (x) -> x.id != file.id this.files = this.files.filter (x) -> x.id != file.id
this.trigger 'change-files' this.files this.trigger 'change-files' this.files
@ -246,14 +246,14 @@
this.trigger 'change-files' this.files this.trigger 'change-files' this.files
this.update(); this.update();
add-poll() { this.add-poll = () => {
this.poll = true this.poll = true
on-poll-destroyed() { this.on-poll-destroyed = () => {
@update do @update do
poll: false poll: false
post() { this.post = () => {
this.wait = true this.wait = true
files = if this.files? and this.files.length > 0 files = if this.files? and this.files.length > 0
@ -274,11 +274,11 @@
this.wait = false this.wait = false
this.update(); this.update();
cancel() { this.cancel = () => {
this.trigger('cancel'); this.trigger('cancel');
this.unmount(); this.unmount();
cat() { this.cat = () => {
this.refs.text.value = this.refs.text.value + get-cat! this.refs.text.value = this.refs.text.value + get-cat!
</script> </script>
</mk-post-form> </mk-post-form>

View file

@ -22,7 +22,7 @@
res posts res posts
this.trigger('loaded'); this.trigger('loaded');
more() { this.more = () => {
@offset += @max @offset += @max
this.api 'posts/search' do this.api 'posts/search' do
query: @query query: @query

View file

@ -319,18 +319,18 @@
riot.mount @preview, do riot.mount @preview, do
url: t.content url: t.content
reply() { this.reply = () => {
@open-post-form do @open-post-form do
reply: @p reply: @p
repost() { this.repost = () => {
text = window.prompt '「' + @summary + '」をRepost' text = window.prompt '「' + @summary + '」をRepost'
if text? if text?
this.api 'posts/create' do this.api 'posts/create' do
repost_id: @p.id repost_id: @p.id
text: if text == '' then undefined else text text: if text == '' then undefined else text
like() { this.like = () => {
if @p.is_liked if @p.is_liked
this.api 'posts/likes/delete' do this.api 'posts/likes/delete' do
post_id: @p.id post_id: @p.id

View file

@ -91,7 +91,7 @@
post._date = date post._date = date
post._datetext = month + '月 ' + date + '日' post._datetext = month + '月 ' + date + '日'
more() { this.more = () => {
if @init or @fetching or @posts.length == 0 then return if @init or @fetching or @posts.length == 0 then return
this.fetching = true this.fetching = true
this.update(); this.update();
@ -99,20 +99,20 @@
this.fetching = false this.fetching = false
@prepend-posts posts @prepend-posts posts
set-posts(posts) { this.set-posts = (posts) => {
this.posts = posts this.posts = posts
this.update(); this.update();
prepend-posts(posts) { this.prepend-posts = (posts) => {
posts.for-each (post) => posts.for-each (post) =>
@posts.push post @posts.push post
this.update(); this.update();
add-post(post) { this.add-post = (post) => {
@posts.unshift post @posts.unshift post
this.update(); this.update();
tail() { this.tail = () => {
@posts[@posts.length - 1] @posts[@posts.length - 1]
</script> </script>
</mk-timeline> </mk-timeline>

View file

@ -98,7 +98,7 @@
if this.refs.title? if this.refs.title?
this.refs.title.innerHTML = title this.refs.title.innerHTML = title
post() { this.post = () => {
@open-post-form! @open-post-form!
</script> </script>
</mk-ui-header> </mk-ui-header>

View file

@ -123,7 +123,7 @@
this.on('mount', () => { this.on('mount', () => {
this.opts.ready! this.opts.ready!
search() { this.search = () => {
query = window.prompt '検索' query = window.prompt '検索'
if query? and query != '' if query? and query != ''
@page '/search:' + query @page '/search:' + query

View file

@ -29,21 +29,21 @@
this.on('unmount', () => { this.on('unmount', () => {
@stream.off 'notification' this.on-stream-notification @stream.off 'notification' this.on-stream-notification
ready() { this.ready = () => {
@ready-count++ @ready-count++
if @ready-count == 2 if @ready-count == 2
@init-view-position! @init-view-position!
init-view-position() { this.init-view-position = () => {
top = this.refs.header.root.offset-height top = this.refs.header.root.offset-height
this.refs.main.style.padding-top = top + 'px' this.refs.main.style.padding-top = top + 'px'
toggle-drawer() { this.toggle-drawer = () => {
this.is-drawer-opening = !@is-drawer-opening this.is-drawer-opening = !@is-drawer-opening
this.refs.nav.root.style.display = if @is-drawer-opening then 'block' else 'none' this.refs.nav.root.style.display = if @is-drawer-opening then 'block' else 'none'
on-stream-notification(notification) { this.on-stream-notification = (notification) => {
el = document.body.appendChild document.createElement 'mk-notify' el = document.body.appendChild document.createElement 'mk-notify'
riot.mount el, do riot.mount el, do
notification: notification notification: notification

View file

@ -10,7 +10,7 @@
this.user = this.opts.user this.user = this.opts.user
fetch(iknow, limit, cursor, cb) { this.fetch = (iknow, limit, cursor, cb) => {
this.api 'users/followers' do this.api 'users/followers' do
user_id: @user.id user_id: @user.id
iknow: iknow iknow: iknow

View file

@ -10,7 +10,7 @@
this.user = this.opts.user this.user = this.opts.user
fetch(iknow, limit, cursor, cb) { this.fetch = (iknow, limit, cursor, cb) => {
this.api 'users/following' do this.api 'users/following' do
user_id: @user.id user_id: @user.id
iknow: iknow iknow: iknow

View file

@ -22,7 +22,7 @@
res posts res posts
this.trigger('loaded'); this.trigger('loaded');
more() { this.more = () => {
this.api 'users/posts' do this.api 'users/posts' do
user_id: @user.id user_id: @user.id
with_media: @with-media with_media: @with-media

View file

@ -172,19 +172,19 @@
this.trigger 'loaded' user this.trigger 'loaded' user
this.update(); this.update();
go-posts() { this.go-posts = () => {
this.page = 'posts' this.page = 'posts'
this.update(); this.update();
go-media() { this.go-media = () => {
this.page = 'media' this.page = 'media'
this.update(); this.update();
go-graphs() { this.go-graphs = () => {
this.page = 'graphs' this.page = 'graphs'
this.update(); this.update();
go-likes() { this.go-likes = () => {
this.page = 'likes' this.page = 'likes'
this.update(); this.update();
</script> </script>

Some files were not shown because too many files have changed in this diff Show more