@@ -7,7 +7,7 @@ function load() {
var mode = m [ 1 ] ;
var codex = m [ 2 ] ;
if ( mode == "first" && codex == "true" ) {
$ ( "body" ) . addClass ( "first" )
$ ( "body" ) . addClass ( "first" ) ;
} else {
}
}
@@ -38,27 +38,18 @@ function load() {
var acct = obj [ key ] ;
var list = key * 1 + 1 ;
if ( acct . background != "def" && acct . text != "def" ) {
var style = 'style="background-color:#' + acct . background + ' ; color:' + acct . text + ';"'
var style = 'style="background-color:#' + acct . background + " ; color:" + acct . text + ';"' ;
} else {
var style = ""
var style = "" ;
}
if ( acct . name ) {
var name = acct . name ;
} else {
var name = acct . user ;
}
templete = '<div id="acct_' + key + '" class="card" ' + style + '><div class="card-content "><span class="lts">' + list +
'.</span><img src="' + acct . prof + '" width="40" height="40"><span class="card-title">' +
name + '</span>' + escapeHTML ( acct . user ) + '@' + acct . domain +
'</div><div class="card-action"><a class="waves-effect disTar pointer white-text" onclick="data(\'' +
acct . domain +
'\')"><i class="material-icons">info</i>' + lang . lang _manager _info + '</a><a class="waves-effect disTar pointer white-text" onclick="refresh(' +
key +
')"><i class="material-icons">refresh</i>' + lang . lang _manager _refresh + '</a><a class="waves-effect disTar pointer red-text" onclick="multiDel(' +
key +
')"><i class="material-icons">delete</i>' + lang . lang _manager _delete + '</a><br>' + lang . lang _manager _color + '<div id="colorsel_' + key + '" class="colorsel"></div></div></div>' ;
templete = '<div id="acct_' + key + '" class="card" ' + style + '><div class="card-content "><span class="lts">' + list + '.</span><img src="' + acct . prof + '" width="40" height="40"><span class="card-title">' + name + "</span>" + escapeHTML ( acct . user ) + "@" + acct . domain + '</div><div class="card-action"><a class="waves-effect disTar pointer white-text" onclick="data(\'' + acct . domain + '\')"><i class="material-icons">info</i>' + lang . lang _manager _info + '</a><a class="waves-effect disTar pointer white-text" onclick="refresh(' + key + ')"><i class="material-icons">refresh</i>' + lang . lang _manager _refresh + '</a><a class="waves-effect disTar pointer red-text" onclick="multiDel(' + key + ')"><i class="material-icons">delete</i>' + lang . lang _manager _delete + "</a><br>" + lang . lang _manager _color + '<div id="colorsel_' + key + '" class="colorsel"></div></div></div>' ;
$ ( "#acct-list" ) . append ( templete ) ;
colorpicker ( key )
colorpicker ( key ) ;
} ) ;
multisel ( ) ;
var acctN = localStorage . getItem ( "acct" ) ;
@@ -68,7 +59,6 @@ function load() {
}
//全部チェックアリでいいと思うの
$ ( "#linux" ) . prop ( "checked" , true ) ;
}
//最初に読む
load ( ) ;
@@ -85,27 +75,30 @@ function data(domain) {
$ ( "#ins-user" ) . text ( "Loading..." ) ;
$ ( "#ins-ver" ) . text ( "Loading..." ) ;
$ ( "#ins-name" ) . text ( "Loading..." ) ;
$ ( "#ins-prof" ) . attr ( ' src' , "../../img/loading.svg" ) ;
$ ( "#ins-prof" ) . attr ( " src" , "../../img/loading.svg" ) ;
var start = "https://instances.social/api/1.0/instances/show?name=" + domain ;
fetch ( start , {
method : ' GET' ,
method : " GET" ,
headers : {
' content-type' : ' application/json' ,
' Authorization' : ' Bearer tC8F6xWGWBUwGScyNevYlx62iO6fdQ4oIK0ad68Oo7ZKB8GQdGpjW9TKxBnIh8grAhvd5rw3iyP9JPamoDpeLQdz62EToPJUW99hDx8rfuJfGdjQuimZPTbIOx0woA5M'
} ,
} ) . then ( function ( response ) {
" content-type" : " application/json" ,
Authorization: " Bearer tC8F6xWGWBUwGScyNevYlx62iO6fdQ4oIK0ad68Oo7ZKB8GQdGpjW9TKxBnIh8grAhvd5rw3iyP9JPamoDpeLQdz62EToPJUW99hDx8rfuJfGdjQuimZPTbIOx0woA5M"
}
} )
. then ( function ( response ) {
return response . json ( ) ;
} ) . catch ( function ( error ) {
} )
. catch ( function ( error ) {
todo ( error ) ;
console . error ( error ) ;
} ) . then ( function ( json ) {
} )
. then ( function ( json ) {
if ( ! json . error ) {
$ ( "#ins-name" ) . text ( json . name ) ;
$ ( "#ins-upd" ) . text ( date ( json . checked _at , ' full' ) ) ;
$ ( "#ins-add" ) . text ( date ( json . added _at , ' full' ) ) ;
$ ( "#ins-upd" ) . text ( date ( json . checked _at , " full" ) ) ;
$ ( "#ins-add" ) . text ( date ( json . added _at , " full" ) ) ;
$ ( "#ins-connect" ) . text ( json . connections ) ;
$ ( "#ins-toot" ) . text ( json . statuses ) ;
$ ( "#ins-sys" ) . text ( date ( json . updated _at , ' full' ) ) ;
$ ( "#ins-sys" ) . text ( date ( json . updated _at , " full" ) ) ;
$ ( "#ins-per" ) . text ( json . uptime * 100 ) ;
$ ( "#ins-user" ) . text ( json . users ) ;
$ ( "#ins-ver" ) . text ( json . version ) ;
@@ -115,16 +108,19 @@ function data(domain) {
} ) ;
var start = "https://" + domain + "/api/v1/instance" ;
fetch ( start , {
method : ' GET' ,
method : " GET" ,
headers : {
' content-type' : ' application/json' ,
} ,
} ) . then ( function ( response ) {
" content-type" : " application/json"
}
} )
. then ( function ( response ) {
return response . json ( ) ;
} ) . catch ( function ( error ) {
} )
. catch ( function ( error ) {
todo ( error ) ;
console . error ( error ) ;
} ) . then ( function ( json ) {
} )
. then ( function ( json ) {
if ( ! json . error ) {
$ ( "#ins-title" ) . text ( json . title ) ;
$ ( "#ins-desc" ) . html ( json . description ) ;
@@ -132,7 +128,7 @@ function data(domain) {
$ ( "#ins-toot" ) . text ( json . stats . status _count ) ;
$ ( "#ins-user" ) . text ( json . stats . user _count ) ;
$ ( "#ins-ver" ) . text ( json . version ) ;
$ ( "#ins-prof" ) . attr ( ' src' , json . thumbnail ) ;
$ ( "#ins-prof" ) . attr ( " src" , json . thumbnail ) ;
$ ( "#ins-admin" ) . text ( escapeHTML ( json . contact _account . display _name ) + "(" + json . contact _account . acct + ")" ) ;
$ ( "#ins-admin" ) . attr ( "href" , "index.html?mode=user&code=" + json . contact _account . username + "@" + domain ) ;
} else {
@@ -149,13 +145,13 @@ function multiDel(target) {
Swal . fire ( {
title : lang . lang _manager _logout ,
text : obj [ target ] [ "user" ] + "@" + obj [ target ] [ "domain" ] + lang . lang _manager _confirm ,
type : ' warning' ,
type : " warning" ,
showCancelButton : true ,
confirmButtonColor : ' #3085d6' ,
cancelButtonColor : ' #d33' ,
confirmButtonColor : " #3085d6" ,
cancelButtonColor : " #d33" ,
confirmButtonText : lang . lang _yesno ,
cancelButtonText : lang . lang _no
} ) . then ( ( result ) => {
} ) . then ( result => {
if ( result . value ) {
Object . keys ( obj ) . forEach ( function ( key ) {
var nk = key - 1 ;
@@ -182,7 +178,6 @@ function multiDel(target) {
localStorage . setItem ( "user-id_" + target , localStorage . getItem ( "user-id_" + key ) ) ;
localStorage . setItem ( "prof_" + target , localStorage . getItem ( "prof_" + key ) ) ;
}
} ) ;
//とりあえず消す
obj . splice ( target , 1 ) ;
@@ -213,9 +208,8 @@ function multiDel(target) {
} ) ;
var json = JSON . stringify ( newcols ) ;
localStorage . setItem ( "column" , json ) ;
}
} )
} ) ;
}
function multiDel2 ( target ) {
var multi = localStorage . getItem ( "multi" ) ;
@@ -223,13 +217,13 @@ function multiDel2(target) {
Swal . fire ( {
title : lang . lang _manager _logout ,
text : obj [ target ] [ "user" ] + "@" + obj [ target ] [ "domain" ] + lang . lang _manager _confirm ,
type : ' warning' ,
type : " warning" ,
showCancelButton : true ,
confirmButtonColor : ' #3085d6' ,
cancelButtonColor : ' #d33' ,
confirmButtonColor : " #3085d6" ,
cancelButtonColor : " #d33" ,
confirmButtonText : lang . lang _yesno ,
cancelButtonText : lang . lang _no
} ) . then ( ( result ) => {
} ) . then ( result => {
if ( result . value ) {
obj . splice ( target , 1 ) ;
var json = JSON . stringify ( obj ) ;
@@ -250,10 +244,12 @@ function multiDel2(target) {
} ) ;
var col = localStorage . getItem ( "column" ) ;
if ( ! col ) {
var obj = [ {
var obj = [
{
domain : 0 ,
type : ' local'
} ] ;
type : " local"
}
] ;
localStorage . setItem ( "card_0" , "true" ) ;
var json = JSON . stringify ( obj ) ;
localStorage . setItem ( "column" , json ) ;
@@ -275,7 +271,7 @@ function multiDel2(target) {
localStorage . setItem ( "column" , json ) ;
load ( ) ;
}
} )
} ) ;
}
//サポートインスタンス
@@ -283,8 +279,7 @@ function support() {
Object . keys ( idata ) . forEach ( function ( key ) {
var instance = idata [ key ] ;
if ( instance == "instance" ) {
templete = ' <a onclick="login(\'' + key +
'\')" class="collection-item pointer transparent">' + idata [ key + "_name" ] + '(' + key + ')</a>' ;
templete = " <a onclick=\ "login('" + key + '\')" class="collection-item pointer transparent">' + idata [ key + "_name" ] + "(" + key + ")</a>" ;
$ ( "#support" ) . append ( templete ) ;
}
} ) ;
@@ -294,206 +289,172 @@ function support() {
function login ( url ) {
var multi = localStorage . getItem ( "multi" ) ;
var obj = JSON . parse ( multi ) ;
if ( $ ( ' #misskey:checked' ) . val ( ) == "on" ) {
if ( $ ( " #misskey:checked" ) . val ( ) == "on" ) {
$ ( "#misskey" ) . prop ( "checked" , true ) ;
misskeyLogin ( url ) ;
return ;
}
$ ( "#compt" ) . hide ( )
if ( $ ( ' #linux:checked' ) . val ( ) == "on" ) {
var red = "urn:ietf:wg:oauth:2.0:oob"
$ ( "#compt" ) . hide ( ) ;
if ( $ ( " #linux:checked" ) . val ( ) == "on" ) {
var red = "urn:ietf:wg:oauth:2.0:oob" ;
if ( ~ url . indexOf ( "pixelfed" ) ) {
red = "https://thedesk.top/hello.html"
red = "https://thedesk.top/hello.html" ;
}
} else {
var red = ' thedesk://manager' ;
var red = " thedesk://manager" ;
}
localStorage . setItem ( "redirect" , red ) ;
var start = "https://" + url + "/api/v1/apps" ;
var httpreq = new XMLHttpRequest ( ) ;
httpreq . open ( ' POST' , start , true ) ;
httpreq . setRequestHeader ( ' Content-Type' , ' application/json' ) ;
httpreq . open ( " POST" , start , true ) ;
httpreq . setRequestHeader ( " Content-Type" , " application/json" ) ;
httpreq . responseType = "json" ;
httpreq . send ( JSON . stringify ( {
scopes : 'read write follow' ,
httpreq . send (
JSON . stringify ( {
scopes : "read write follow" ,
client _name : "TheDesk(PC)" ,
redirect _uris : red ,
website : "https://thedesk.top"
} ) ) ;
} )
) ;
httpreq . onreadystatechange = function ( ) {
if ( httpreq . readyState === 4 ) {
var json = httpreq . response ;
localStorage . setItem ( "msky" , "false" ) ;
var auth = "https://" + url + "/oauth/authorize?client_id=" + json [
"client_id" ] + "&client_secret=" + json [ "client_secret" ] +
"&response_type=code&scope=read+write+follow&redirect_uri=" + encodeURIComponent ( red ) ;
var auth = "https://" + url + "/oauth/authorize?client_id=" + json [ "client_id" ] + "&client_secret=" + json [ "client_secret" ] + "&response_type=code&scope=read+write+follow&redirect_uri=" + encodeURIComponent ( red ) ;
localStorage . setItem ( "domain_tmp" , url ) ;
localStorage . setItem ( "client_id" , json [ "client_id" ] ) ;
localStorage . setItem ( "client_secret" , json [ "client_secret" ] ) ;
$ ( "#auth" ) . show ( ) ;
versionChecker ( url )
versionChecker ( url ) ;
$ ( "#add" ) . hide ( ) ;
postMessage ( [ "openUrl" , auth ] , "*" )
if ( $ ( ' #linux:checked' ) . val ( ) == "on" ) { } else {
postMessage ( [ "sendSinmpleIpc" , "quit" ] , "*" )
}
postMessage ( [ "openUrl" , auth ] , "*" ) ;
if ( $ ( " #linux:checked" ) . val ( ) == "on" ) {
} else {
postMessage ( [ "sendSinmpleIpc" , "quit" ] , "*" ) ;
}
}
} ;
}
function versionChecker ( url ) {
var start = "https://" + url + "/api/v1/instance" ;
fetch ( start , {
method : ' GET' ,
method : " GET" ,
headers : {
' content-type' : ' application/json' ,
} ,
} ) . then ( function ( response ) {
" content-type" : " application/json"
}
} )
. then ( function ( response ) {
return response . json ( ) ;
} ) . catch ( function ( error ) {
} )
. catch ( function ( error ) {
todo ( error ) ;
console . error ( error ) ;
} ) . then ( function ( json ) {
var version = json . version
} )
. then ( function ( json ) {
var version = json . version ;
if ( version ) {
var reg = version . match ( /^([0-9])\.[0-9]\.[0-9]/u ) ;
if ( reg ) {
versionCompat ( reg [ 1 ] , reg , json . title , reg [ 0 ] )
versionCompat ( reg [ 1 ] , reg , json . title , reg [ 0 ] ) ;
}
}
} ) ;
}
function versionCompat ( prefix , ver , title , real ) {
$ ( "#compt-instance" ) . text ( title )
$ ( "#compt-ver" ) . text ( real )
$ ( "#compt-instance" ) . text ( title ) ;
$ ( "#compt-ver" ) . text ( real ) ;
if ( ~ real . indexOf ( "compatible" ) ) {
$ ( "#compt-warn" ) . show ( )
$ ( "#compt-warn" ) . show ( ) ;
} else {
$ ( "#compt-warn" ) . hide ( )
$ ( "#compt-warn" ) . hide ( ) ;
}
$ ( "#compt-list" ) . html ( "" )
$ ( "#compt-list" ) . html ( "" ) ;
var start = "../../source/version.json" ;
fetch ( start , {
method : ' GET' ,
method : " GET" ,
headers : {
' content-type' : ' application/json' ,
} ,
} ) . then ( function ( response ) {
" content-type" : " application/json"
}
} )
. then ( function ( response ) {
return response . json ( ) ;
} ) . catch ( function ( error ) {
} )
. catch ( function ( error ) {
todo ( error ) ;
console . error ( error ) ;
} ) . then ( function ( json ) {
var complete = false
var ct = 0
var jl = 0
var jl2 = 0
} )
. then ( function ( json ) {
var complete = false ;
var ct = 0 ;
var jl = 0 ;
var jl2 = 0 ;
Object . keys ( json ) . forEach ( function ( key ) {
var data = json [ key ] ;
if ( data ) {
jl ++
jl ++ ;
if ( key != real && ! complete ) {
for ( var i = 0 ; i < data . length ; i ++ ) {
var e = ""
var e = "" ;
if ( i == 0 ) {
e = "(" + key + ")"
e = "(" + key + ")" ;
}
$ ( "#compt-list" ) . append ( ' <li>' + data [ i ] + e + ' </li>' )
$ ( "#compt-list" ) . append ( " <li>" + data [ i ] + e + " </li>" ) ;
ct ++ ;
e = ""
e = "" ;
}
jl2 ++
jl2 ++ ;
} else if ( ! complete ) {
complete = true
complete = true ;
}
}
} ) ;
if ( lang . language == "ja" && ct > 0 ) {
if ( jl2 != jl && prefix != "1" ) {
$ ( "#compt" ) . show ( )
$ ( "#compt" ) . show ( ) ;
}
}
} ) ;
}
//これが後のMisskeyである。
function misskeyLogin ( url ) {
if ( ! url ) {
var url = $ ( "#misskey-url" ) . val ( ) ;
}
var start = "https ://" + url + "/api/app/create" ;
var start = "http://" + url + "/api/app/create" ;
var httpreq = new XMLHttpRequest ( ) ;
httpreq . open ( ' POST' , start , true ) ;
httpreq . setRequestHeader ( ' Content-Type' , ' application/json' ) ;
httpreq . open ( " POST" , start , true ) ;
httpreq . setRequestHeader ( " Content-Type" , " application/json" ) ;
httpreq . responseType = "json" ;
localStorage . setItem ( "msky" , "true" ) ;
httpreq . send ( JSON . stringify ( {
httpreq . send (
JSON . stringify ( {
name : "TheDesk(PC)" ,
description : "Mastodon client for PC" ,
permission : [
"account-read" ,
"account-write" ,
"account/read" ,
"account/write" ,
"drive-read" ,
"drive-write" ,
"favorite-read" ,
"favorite-write" ,
"favorites-read" ,
"following-read" ,
"following-write" ,
"messaging-read" ,
"messaging-write" ,
"note-read" ,
"note-write" ,
"notification-read" ,
"notification-write" ,
"reaction-read" ,
"reaction-write" ,
"vote-read" ,
"vote-write" ,
"read:account" ,
"write:account" ,
"read:drive" ,
"write:drive" ,
"read:blocks" ,
"write:blocks" ,
"read:favorites" ,
"write:favorites" ,
"read:following" ,
"write:following" ,
"read:messaging" ,
"write:messaging" ,
"read:mutes" ,
"write:mutes" ,
"write:notes" ,
"read:notifications" ,
"write:notifications" ,
"read:reactions" ,
"write:reactions" ,
"write:votes"
]
} ) ) ;
description : "Mastodon and Misskey client for PC" ,
permission : [ "account-read" , "account-write" , "account/read" , "account/write" , "drive-read" , "drive-write" , "favorite-read" , "favorite-write" , "favorites-read" , "following-read" , "following-write" , "messaging-read" , "messaging-write" , "note-read" , "note-write" , "notification-read" , "notification-write" , "reaction-read" , "reaction-write" , "vote-read" , "vote-write" , "read:account" , "write:account" , "read:drive" , "write:drive" , "read:blocks" , "write:blocks" , "read:favorites" , "write:favorites" , "read:following" , "write:following" , "read:messaging" , "write:messaging" , "read:mutes" , "write:mutes" , "write:notes" , "read:notifications" , "write:notifications" , "read:reactions" , "write:reactions" , "write:votes" ]
} )
) ;
httpreq . onreadystatechange = function ( ) {
if ( httpreq . readyState === 4 ) {
var json = httpreq . response ;
misskeyAuth ( url , json . secret )
misskeyAuth ( url , json . secret ) ;
}
}
} ;
}
function misskeyAuth ( url , mkc ) {
var start = "https://" + url + "/api/auth/session/generate" ;
var httpreq = new XMLHttpRequest ( ) ;
httpreq . open ( ' POST' , start , true ) ;
httpreq . setRequestHeader ( ' Content-Type' , ' application/json' ) ;
httpreq . open ( " POST" , start , true ) ;
httpreq . setRequestHeader ( " Content-Type" , " application/json" ) ;
httpreq . responseType = "json" ;
localStorage . setItem ( "mkc" , mkc )
localStorage . setItem ( "mkc" , mkc ) ;
localStorage . setItem ( "msky" , "true" ) ;
httpreq . send ( JSON . stringify ( {
httpreq . send (
JSON . stringify ( {
appSecret : mkc
} ) ) ;
} )
) ;
httpreq . onreadystatechange = function ( ) {
if ( httpreq . readyState === 4 ) {
var json = httpreq . response ;
@@ -503,16 +464,16 @@ function misskeyAuth(url, mkc) {
$ ( "#add" ) . hide ( ) ;
$ ( "#misskey" ) . prop ( "checked" , false ) ;
localStorage . setItem ( "domain_tmp" , url ) ;
postMessage ( [ "openUrl" , json . url ] , "*" )
}
postMessage ( [ "openUrl" , json . url ] , "*" ) ;
}
} ;
}
//テキストボックスにURL入れた
function instance ( ) {
var url = $ ( "#url" ) . val ( ) ;
if ( url . indexOf ( "@" ) != - 1 || url . indexOf ( "https" ) != - 1 ) {
alert ( " 入力形式が違います。(Cutls@mstdn.jpにログインする場合、入力するのは\ "mstdn.jp\ "です。)" )
alert ( ' 入力形式が違います。(Cutls@mstdn.jpにログインする場合、入力するのは"mstdn.jp"です。)' ) ;
return false ;
}
login ( url ) ;
@@ -520,23 +481,29 @@ function instance() {
//コード入れてAccessTokenゲット
function code ( code ) {
localStorage . removeItem ( "redirect" )
localStorage . removeItem ( "redirect" ) ;
if ( ! code ) {
var code = $ ( "#code" ) . val ( ) ;
$ ( "#code" ) . val ( "" ) ;
}
if ( ! code || code == "" ) {
M . toast ( { html : lang . lang _fatalerroroccured + "Error: no code" , displayLength : 5000 } ) ;
return false
}
var url = localStorage . getItem ( "domain_tmp" ) ;
localStorage . removeItem ( "domain_tmp" ) ;
if ( localStorage . getItem ( "msky" ) == "true" ) {
var start = "https://" + url + "/api/auth/session/userkey" ;
var httpreq = new XMLHttpRequest ( ) ;
httpreq . open ( ' POST' , start , true ) ;
httpreq . setRequestHeader ( ' Content-Type' , ' application/json' ) ;
httpreq . open ( " POST" , start , true ) ;
httpreq . setRequestHeader ( " Content-Type" , " application/json" ) ;
httpreq . responseType = "json" ;
httpreq . send ( JSON . stringify ( {
httpreq . send (
JSON . stringify ( {
token : code ,
appSecret : localStorage . getItem ( "mkc" )
} ) ) ;
} )
) ;
httpreq . onreadystatechange = function ( ) {
if ( httpreq . readyState === 4 ) {
var json = httpreq . response ;
@@ -553,10 +520,10 @@ function code(code) {
vis : priv ,
mode : "misskey"
} ;
localStorage . setItem ( "mode_" + url , "misskey" )
localStorage . setItem ( "mode_" + url , "misskey" ) ;
var multi = localStorage . getItem ( "multi" ) ;
var obj = JSON . parse ( multi ) ;
var target = obj . lengtt h ;
var target = obj . length ;
obj . push ( add ) ;
localStorage . setItem ( "name_" + target , json [ "user" ] [ "name" ] ) ;
localStorage . setItem ( "user_" + target , json [ "user" ] [ "username" ] ) ;
@@ -565,32 +532,34 @@ function code(code) {
var json = JSON . stringify ( obj ) ;
localStorage . setItem ( "multi" , json ) ;
if ( $ ( "body" ) . hasClass ( "first" ) ) {
location . href = "index.html"
location . href = "index.html" ;
}
load ( ) ;
return ;
}
}
} ;
return ;
} else {
var red = "urn:ietf:wg:oauth:2.0:oob"
var red = "urn:ietf:wg:oauth:2.0:oob" ;
if ( ~ url . indexOf ( "pixelfed" ) ) {
red = "https://thedesk.top/hello.html"
red = "https://thedesk.top/hello.html" ;
}
var start = "https://" + url + "/oauth/token" ;
var id = localStorage . getItem ( "client_id" ) ;
var secret = localStorage . getItem ( "client_secret" ) ;
var httpreq = new XMLHttpRequest ( ) ;
httpreq . open ( ' POST' , start , true ) ;
httpreq . setRequestHeader ( ' Content-Type' , ' application/json' ) ;
httpreq . open ( " POST" , start , true ) ;
httpreq . setRequestHeader ( " Content-Type" , " application/json" ) ;
httpreq . responseType = "json" ;
httpreq . send ( JSON . stringify ( {
httpreq . send (
JSON . stringify ( {
grant _type : "authorization_code" ,
redirect _uri : red ,
client _id : id ,
client _secret : secret ,
code : code
} ) ) ;
} )
) ;
httpreq . onreadystatechange = function ( ) {
if ( httpreq . readyState === 4 ) {
var json = httpreq . response ;
@@ -600,28 +569,30 @@ function code(code) {
getdata ( url , json [ "access_token" ] ) ;
}
}
} ;
}
}
}
//ユーザーデータ取得
function getdata ( domain , at ) {
var start = "https://" + domain + "/api/v1/accounts/verify_credentials" ;
fetch ( start , {
method : ' GET' ,
method : " GET" ,
headers : {
' content-type' : ' application/json' ,
' Authorization' : ' Bearer ' + at
} ,
} ) . then ( function ( response ) {
" content-type" : " application/json" ,
Authorization: " Bearer " + at
}
} )
. then ( function ( response ) {
return response . json ( ) ;
} ) . catch ( function ( error ) {
} )
. catch ( function ( error ) {
todo ( error ) ;
console . error ( error ) ;
} ) . then ( function ( json ) {
} )
. then ( function ( json ) {
if ( json . error ) {
console . error ( "Error:" + json . error ) ;
M . toast ( { html : lang . lang _fatalerroroccured + "Error:" + json . error , displayLength : 5000 } )
M . toast ( { html : lang . lang _fatalerroroccured + "Error:" + json . error , displayLength : 5000 } ) ;
return ;
}
var avatar = json [ "avatar" ] ;
@@ -646,7 +617,7 @@ function getdata(domain, at) {
} ;
var multi = localStorage . getItem ( "multi" ) ;
var obj = JSON . parse ( multi ) ;
var target = obj . lengtt h ;
var target = obj . length ;
obj . push ( add ) ;
localStorage . setItem ( "name_" + target , json [ "display_name" ] ) ;
localStorage . setItem ( "user_" + target , json [ "acct" ] ) ;
@@ -655,37 +626,88 @@ function getdata(domain, at) {
var json = JSON . stringify ( obj ) ;
localStorage . setItem ( "multi" , json ) ;
if ( $ ( "body" ) . hasClass ( "first" ) ) {
location . href = "index.html"
location . href = "index.html" ;
}
load ( ) ;
} ) ;
}
//アクセストークン直接入力
function atSetup ( type ) {
var url = localStorage . getItem ( "domain_tmp" ) ;
localStorage . removeItem ( "domain_tmp" ) ;
var multi = localStorage . getItem ( "multi" ) ;
var avatar = "../../img/missing.svg" ;
var priv = "public" ;
if ( type == "misskey" ) {
var i = $ ( "#misskey-key" ) . val ( ) ;
var add = {
at : i ,
name : "Pseudo Account" ,
domain : url ,
user : "user+pseudo" ,
prof : avatar ,
id : "id+pseudo" ,
vis : priv ,
mode : "misskey"
} ;
localStorage . setItem ( "mode_" + url , "misskey" ) ;
} else {
var i = $ ( "#code" ) . val ( ) ;
var add = {
at : i ,
name : "Pseudo Account" ,
domain : url ,
user : "user+pseudo" ,
prof : avatar ,
id : "id+pseudo" ,
vis : priv ,
mode : ""
} ;
}
if ( ! i || i == "" ) {
M . toast ( { html : lang . lang _fatalerroroccured + "Error: access token" , displayLength : 5000 } ) ;
return false
}
var obj = JSON . parse ( multi ) ;
var target = obj . length ;
obj . push ( add ) ;
localStorage . setItem ( "name_" + target , add [ "name" ] ) ;
localStorage . setItem ( "user_" + target , add [ "username" ] ) ;
localStorage . setItem ( "user-id_" + target , add [ "id" ] ) ;
localStorage . setItem ( "prof_" + target , avatar ) ;
var json = JSON . stringify ( obj ) ;
localStorage . setItem ( "multi" , json ) ;
refresh ( target ) ;
}
//ユーザーデータ更新
function refresh ( target ) {
var multi = localStorage . getItem ( "multi" ) ;
var obj = JSON . parse ( multi ) ;
console . log ( obj )
if ( obj [ target ] . mode == "misskey" ) {
misskeyRefresh ( obj , target , obj [ target ] . domain ) ;
return
return ;
}
var start = "https://" + obj [ target ] . domain +
"/api/v1/accounts/verify_credentials" ;
var start = "https://" + obj [ target ] . domain + "/api/v1/accounts/verify_credentials" ;
fetch ( start , {
method : ' GET' ,
method : " GET" ,
headers : {
' content-type' : ' application/json' ,
' Authorization' : ' Bearer ' + obj [ target ] . at
} ,
} ) . then ( function ( response ) {
" content-type" : " application/json" ,
Authorization: " Bearer " + obj [ target ] . at
}
} )
. then ( function ( response ) {
return response . json ( ) ;
} ) . catch ( function ( error ) {
} )
. catch ( function ( error ) {
todo ( error ) ;
console . error ( error ) ;
} ) . then ( function ( json ) {
} )
. then ( function ( json ) {
if ( json . error ) {
console . error ( "Error:" + json . error ) ;
M . toast ( { html : lang . lang _fatalerroroccured + "Error:" + json . error , displayLength : 5000 } )
M . toast ( { html : lang . lang _fatalerroroccured + "Error:" + json . error , displayLength : 5000 } ) ;
return ;
}
var avatar = json [ "avatar" ] ;
@@ -721,18 +743,19 @@ function refresh(target) {
function misskeyRefresh ( obj , target , url ) {
var start = "https://" + url + "/api/users/show" ;
var httpreq = new XMLHttpRequest ( ) ;
httpreq . open ( ' POST' , start , true ) ;
httpreq . setRequestHeader ( ' Content-Type' , ' application/json' ) ;
httpreq . open ( " POST" , start , true ) ;
httpreq . setRequestHeader ( " Content-Type" , " application/json" ) ;
httpreq . responseType = "json" ;
httpreq . send ( JSON . stringify ( {
httpreq . send (
JSON . stringify ( {
username : obj [ target ] . user ,
i : localStorage . getItem ( "at" )
} ) ) ;
i : obj [ target ] . at
} )
) ;
httpreq . onreadystatechange = function ( ) {
if ( httpreq . readyState === 4 ) {
var json = httpreq . response ;
return ;
var avatar = json [ "user" ] [ "avatarURL" ] ;
var avatar = json [ "user" ] [ "avatarUrl" ] ;
var priv = "public" ;
var add = {
at : json . accessToken ,
@@ -745,7 +768,7 @@ function misskeyRefresh(obj, target, url) {
} ;
var multi = localStorage . getItem ( "multi" ) ;
var obj = JSON . parse ( multi ) ;
var target = obj . lengtt h ;
var target = obj . length ;
obj . push ( add ) ;
localStorage . setItem ( "name_" + target , json [ "user" ] [ "name" ] ) ;
localStorage . setItem ( "user_" + target , json [ "user" ] [ "username" ] ) ;
@@ -756,7 +779,7 @@ function misskeyRefresh(obj, target, url) {
load ( ) ;
return ;
}
}
} ;
}
//アカウントを選択…を実装
function multisel ( ) {
@@ -773,14 +796,14 @@ function multisel() {
var sel ;
if ( obj . length < 1 ) {
$ ( "#src-acct-sel" ) . html ( '<option value="tootsearch">Tootsearch</option>' ) ;
$ ( "#add-acct-sel" ) . html ( '<option value="noauth">' + lang . lang _login _noauth + ' </option>' ) ;
$ ( "#add-acct-sel" ) . html ( '<option value="noauth">' + lang . lang _login _noauth + " </option>" ) ;
} else {
Object . keys ( obj ) . forEach ( function ( key ) {
var acct = obj [ key ] ;
var list = key * 1 + 1 ;
if ( key == last ) {
sel = "selected" ;
mainb = '(' + lang . lang _manager _def + ')'
mainb = "(" + lang . lang _manager _def + ")" ;
var domain = localStorage . getItem ( "domain_" + key ) ;
var profimg = localStorage . getItem ( "prof_" + key ) ;
var domain = localStorage . getItem ( "domain_" + key ) ;
@@ -789,46 +812,21 @@ function multisel() {
}
} else {
sel = "" ;
mainb = ""
mainb = "" ;
}
templete = '<option value="' + key + '" data-icon="' + acct . prof +
'" class="left circle" ' + sel + '>' + acct . user + '@' + acct . domain + mainb +
'</option>' ;
templete = '<option value="' + key + '" data-icon="' + acct . prof + '" class="left circle" ' + sel + ">" + acct . user + "@" + acct . domain + mainb + "</option>" ;
$ ( ".acct-sel" ) . append ( templete ) ;
} ) ;
}
$ ( ' select' ) . formSelect ( ) ;
$ ( " select" ) . formSelect ( ) ;
}
function mainacct ( ) {
var acct _id = $ ( "#main-acct-sel" ) . val ( ) ;
localStorage . setItem ( "main" , acct _id ) ;
M . toast ( { html : lang . lang _manager _mainAcct , displayLength : 3000 } )
M . toast ( { html : lang . lang _manager _mainAcct , displayLength : 3000 } ) ;
}
function colorpicker ( key ) {
temp =
'<div onclick="coloradd(' + key + ',\'def\',\'def\')" class="pointer exc">' + lang . lang _manager _none + '</div>' +
'<div onclick="coloradd(' + key + ',\'f44336\',\'white\')" class="red white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'e91e63\',\'white\')" class="pink white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'9c27b0\',\'white\')" class="purple white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'673ab7\',\'white\')" class="deep-purple white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'3f51b5\',\'white\')" class="indigo white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'2196f3\',\'white\')" class="blue white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'03a9f4\',\'black\')" class="light-blue black-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'00bcd4\',\'black\')" class="cyan black-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'009688\',\'white\')" class="teal white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'4caf50\',\'black\')" class="green black-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'8bc34a\',\'black\')" class="light-green black-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'cddc39\',\'black\')" class="lime black-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'ffeb3b\',\'black\')" class="yellow black-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'ffc107\',\'black\')" class="amber black-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'ff9800\',\'black\')" class="orange black-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'ff5722\',\'white\')" class="deep-orange white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'795548\',\'white\')" class="brown white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'9e9e9e\',\'white\')" class="grey white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'607d8b\',\'white\')" class="blue-grey white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'000000\',\'white\')" class="black white-text pointer"></div>' +
'<div onclick="coloradd(' + key + ',\'ffffff\',\'black\')" class="white black-text pointer"></div>' ;
temp = '<div onclick="coloradd(' + key + ",'def','def')\" class=\"pointer exc\">" + lang . lang _manager _none + "</div>" + '<div onclick="coloradd(' + key + ",'f44336','white')\" class=\"red white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'e91e63','white')\" class=\"pink white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'9c27b0','white')\" class=\"purple white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'673ab7','white')\" class=\"deep-purple white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'3f51b5','white')\" class=\"indigo white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'2196f3','white')\" class=\"blue white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'03a9f4','black')\" class=\"light-blue black-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'00bcd4','black')\" class=\"cyan black-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'009688','white')\" class=\"teal white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'4caf50','black')\" class=\"green black-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'8bc34a','black')\" class=\"light-green black-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'cddc39','black')\" class=\"lime black-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'ffeb3b','black')\" class=\"yellow black-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'ffc107','black')\" class=\"amber black-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'ff9800','black')\" class=\"orange black-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'ff5722','white')\" class=\"deep-orange white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'795548','white')\" class=\"brown white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'9e9e9e','white')\" class=\"grey white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'607d8b','white')\" class=\"blue-grey white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'000000','white')\" class=\"black white-text pointer\"></div>" + '<div onclick="coloradd(' + key + ",'ffffff','black')\" class=\"white black-text pointer\"></div>" ;
$ ( "#colorsel_" + key ) . html ( temp ) ;
}
function coloradd ( key , bg , txt ) {
@@ -841,18 +839,18 @@ function coloradd(key, bg, txt) {
var json = JSON . stringify ( o ) ;
localStorage . setItem ( "multi" , json ) ;
if ( txt == "def" ) {
$ ( "#acct_" + key ) . attr ( "style" , "" )
$ ( "#acct_" + key ) . attr ( "style" , "" ) ;
} else {
$ ( "#acct_" + key ) . css ( ' background-color' , '#' + bg ) ;
$ ( "#acct_" + key ) . css ( " background-color" , "#" + bg ) ;
if ( txt == "black" ) {
var bghex = "000000" ;
var ichex = "9e9e9e"
var ichex = "9e9e9e" ;
} else if ( txt == "white" ) {
var bghex = "ffffff" ;
var ichex = "eeeeee"
var ichex = "eeeeee" ;
}
$ ( "#acct_" + key + " .nex" ) . css ( ' color' , '#' + ichex ) ;
$ ( "#acct_" + key ) . css ( ' color' , '#' + bghex ) ;
$ ( "#acct_" + key + " .nex" ) . css ( " color" , "#" + ichex ) ;
$ ( "#acct_" + key ) . css ( " color" , "#" + bghex ) ;
}
}
//入力時にハッシュタグと@をサジェスト
@@ -863,33 +861,36 @@ var input = document.getElementById("url");
var prev _val = input . value ;
var oldSuggest ;
var suggest ;
input . addEventListener ( "focus" , function ( ) {
input . addEventListener (
"focus" ,
function ( ) {
$ ( "#ins-suggest" ) . html ( "" ) ;
window . clearInterval ( timer ) ;
timer = window . setInterval ( function ( ) {
var new _val = input . value ;
if ( prev _val != new _val ) {
if ( new _val . length > 3 ) {
var start = "https://instances.social/api/1.0/instances/search?q=" +
new _val ;
var start = "https://instances.social/api/1.0/instances/search?q=" + new _val ;
fetch ( start , {
method : ' GET' ,
method : " GET" ,
headers : {
' content-type' : ' application/json' ,
' Authorization' : ' Bearer tC8F6xWGWBUwGScyNevYlx62iO6fdQ4oIK0ad68Oo7ZKB8GQdGpjW9TKxBnIh8grAhvd5rw3iyP9JPamoDpeLQdz62EToPJUW99hDx8rfuJfGdjQuimZPTbIOx0woA5M'
} ,
} ) . then ( function ( response ) {
" content-type" : " application/json" ,
Authorization : " Bearer tC8F6xWGWBUwGScyNevYlx62iO6fdQ4oIK0ad68Oo7ZKB8GQdGpjW9TKxBnIh8grAhvd5rw3iyP9JPamoDpeLQdz62EToPJUW99hDx8rfuJfGdjQuimZPTbIOx0woA5M"
}
} )
. then ( function ( response ) {
return response . json ( ) ;
} ) . catch ( function ( error ) {
} )
. catch ( function ( error ) {
todo ( error ) ;
console . error ( error ) ;
} ) . then ( function ( json ) {
} )
. then ( function ( json ) {
if ( ! json . error ) {
var urls = "Suggest:" ;
Object . keys ( json . instances ) . forEach ( function ( key ) {
var url = json . instances [ key ] ;
urls = urls + ' <a onclick="login(\'' + url . name +
'\')" class="pointer">' + escapeHTML ( url . name ) + '</a> ' ;
urls = urls + " <a onclick=\ "login('" + url . name + '\')" class="pointer">' + escapeHTML ( url . name ) + "</a> " ;
} ) ;
$ ( "#ins-suggest" ) . html ( urls ) ;
} else {
@@ -901,12 +902,18 @@ input.addEventListener("focus", function () {
prev _value = new _val ;
}
} , 1000 ) ;
} , false ) ;
} ,
false
) ;
input . addEventListener ( "blur" , function ( ) {
input . addEventListener (
"blur" ,
function ( ) {
window . clearInterval ( timer ) ;
} , false ) ;
} ,
false
) ;
//acctで未読マーカーは要らない
function asReadEnd ( ) {
postMessage ( [ "asReadComp" , "" ] , "*" )
postMessage ( [ "asReadComp" , "" ] , "*" ) ;
}