thedesk/app/js/platform/nano.js
2019-10-31 00:30:26 +09:00

262 lines
6.5 KiB
JavaScript

//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 = '<option value="' + key + '" ' + sel + ">" + acct.user + "@" + acct.domain + "</option>";
$("#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;
}
}
}
});