'use strict' //TL取得 var websocket function tl(data) { var tlid = 0 if (websocket) { websocket.close() } var acct_id = $('#post-acct-sel').val() var type = $('#type-sel').val() var domain = localStorage.getItem('domain_' + acct_id) //タグの場合はカラム追加して描画 if (!type) { //デフォルト var type = 'local' } var at = localStorage.getItem('acct_' + acct_id + '_at') $('#notice_nano').text( cap(type, data) + ' TL(' + localStorage.getItem('user_' + acct_id) + '@' + domain + ')' ) var start = 'https://' + domain + '/api/v1/timelines/' + com(type, data) fetch(start, { method: 'GET', headers: { 'content-type': 'application/json', Authorization: 'Bearer ' + at } }) .then(function(response) { if (!response.ok) { response.text().then(function(text) { setLog(response.url, response.status, text) }) } return response.json() }) .catch(function(error) { console.error(error) }) .then(function(json) { var templete = parse([json[0]], '', acct_id, tlid) $('#timeline_nano').html(templete) jQuery('time.timeago').timeago() $('#menu').addClass('hide') }) //Streaming接続 var tlid = 0 if (type == 'home') { var start = 'wss://' + domain + '/api/v1/streaming/?stream=user&access_token=' + at } else if (type == 'pub') { var start = 'wss://' + domain + '/api/v1/streaming/?stream=public&access_token=' + at } else if (type == 'local') { var start = 'wss://' + domain + '/api/v1/streaming/?stream=public:local&access_token=' + at } else if (type == 'tag') { var start = 'wss://' + domain + '/api/v1/streaming/?stream=hashtag&tag=' + data + '&access_token=' + at } websocket = new WebSocket(start) websocket.onopen = function(mess) { $('#notice_icon_' + tlid).removeClass('red-text') } websocket.onmessage = function(mess) { var typeA = JSON.parse(mess.data).event if (typeA == 'update') { var obj = JSON.parse(JSON.parse(mess.data).payload) var templete = parse([obj], '', acct_id, tlid) jQuery('time.timeago').timeago() $('#timeline_nano').html(templete) } } websocket.onerror = function(error) { console.error('WebSocket Error ' + error) } websocket.onclose = function(mess) { console.error('Close Streaming API:' + type) } } //TLのタイトル function cap(type, data) { if (type == 'home') { return 'Home' } else if (type == 'local') { return 'Local' } else if (type == 'pub') { return 'Public' } else if (type == 'tag') { return '#' + data } else if (type == 'list') { return 'List(id:' + data + ')' } else if (type == 'notf') { return 'Notification' } } //TLのURL function com(type, data) { if (type == 'home') { return 'home?' } else if (type == 'local') { return 'public?local=true&' } else if (type == 'pub') { return 'public?' } else if (type == 'tag') { return 'tag/' + data + '?' } if (type == 'list') { return 'list/' + data + '?' } } //TLのアイコン function icon(type) { if (type == 'home') { return 'home' } else if (type == 'local') { return 'people_outline' } else if (type == 'pub') { return 'language' } else if (type == 'tag') { return 'search' } if (type == 'list') { return 'subject' } } function todo() {} function todc() {} function hide() {} $(function($) { //キーボードショートカット $(window).keydown(function(e) { var hasFocus = $('input').is(':focus') var hasFocus2 = $('textarea').is(':focus') //Ctrl+Enter:投稿 if (event.ctrlKey) { if (e.keyCode === 13) { post() return false } } }) }) function set() { $('#menu').toggleClass('hide') if ($('#menu').hasClass('hide')) { $('#setting').text('Setting') } else { $('#setting').text('Close') } } var multi = localStorage.getItem('multi') if (!multi) { var obj = [ { at: localStorage.getItem(localStorage.getItem('domain_' + acct_id) + '_at'), name: localStorage.getItem('name_' + acct_id), domain: localStorage.getItem('domain_' + acct_id), user: localStorage.getItem('user_' + acct_id), prof: localStorage.getItem('prof_' + acct_id) } ] var json = JSON.stringify(obj) localStorage.setItem('multi', json) } else { var obj = JSON.parse(multi) } var templete var last = localStorage.getItem('last-use') var sel Object.keys(obj).forEach(function(key) { var acct = obj[key] var list = key * 1 + 1 if (key == last) { sel = 'selected' } else { sel = '' } templete = `` $('#post-acct-sel').append(templete) }) function mov() { return false } function resetmv() { return false } function post() { var acct_id = $('#post-acct-sel').val() var domain = localStorage.getItem('domain_' + acct_id) var at = localStorage.getItem('acct_' + acct_id + '_at') var start = 'https://' + domain + '/api/v1/statuses' var str = $('#textarea').val() var toot = { status: str } var vis = loadVis(acct_id) toot.visibility = vis var httpreq = new XMLHttpRequest() httpreq.open('POST', start, true) httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.responseType = 'json' httpreq.send(JSON.stringify(toot)) httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { if (this.status !== 200) { setLog(start, this.status, this.response) } $('#textarea').val('') } } } function loadVis(acct_id) { var vist = localStorage.getItem('vis') if (!vist) { return 'public' } else { if (vist == 'memory') { var memory = localStorage.getItem('vis-memory-' + acct_id) if (!memory) { memory = 'public' } return memory } else if (vist == 'server' || vist == 'useapi') { var multi = localStorage.getItem('multi') var obj = JSON.parse(multi) var memory = obj[acct_id]['vis'] if (!memory) { memory = 'public' } return memory } else { return vist } } } function loader() { var acct_id = $('#post-acct-sel').val() console.log(loadVis(acct_id)) $('#vis-sel').val(loadVis(acct_id)) } loader() $('textarea').height(15) //init $('textarea').css('lineHeight', '1rem') //init $('textarea').on('input', function(evt) { if (evt.target.scrollHeight > evt.target.offsetHeight) { $(evt.target).height(evt.target.scrollHeight) } else { var lineHeight = Number( $(evt.target) .css('lineHeight') .split('px')[0] ) while (true) { $(evt.target).height($(evt.target).height() - lineHeight) if (evt.target.scrollHeight > evt.target.offsetHeight) { $(evt.target).height(evt.target.scrollHeight) break } } } })