To fix many bygs

This commit is contained in:
cutls 2018-08-21 03:26:14 +09:00
parent 5dbafe5dc7
commit 406f65b17f
19 changed files with 1092 additions and 128 deletions

View File

@ -45,25 +45,33 @@ body,html{overflow-y: scroll;}
Check if TheDesk is not working on Windows, you want to login Pleroma instance.<br> Check if TheDesk is not working on Windows, you want to login Pleroma instance.<br>
<input type="checkbox" class="filled-in" id="linux" /> <input type="checkbox" class="filled-in" id="linux" />
<label for="linux">Code setup</label><br> <label for="linux">Code setup</label><br>
<input type="checkbox" class="filled-in" id="misskey" />
<label for="misskey">Login as Misskey</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br> <button class="btn waves-effect" onclick="instance()">Login</button><br>
</div> </div>
<div class="col s6"> <div class="col s6">
<span style="font-family:Open Sans;">Supports</span> <span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div> <div id="support" class="collection transparent"></div>
</div> </div>
</div> </div></div>
<div id="auth" style="display:none">
Paste the code and close browser.<br>
<input type="text" id="code" placeholder="Code">
<button class="btn waves-effect" onclick="code()">Auth</button><br>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
Read <a href="https://thedesk.top/how-to-misskey-login.html">Docs(ja)</a> to login Misskey.<br>
<input type="hidden" id="misskey-url">
<input type="text" id="misskey-key" placeholder="Code">
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br>
</div>
<h5>Main an account</h5> <h5>Main an account</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">Select an account</span> <div class="input-field" style="width:300px"><span data-trans="your_acct">Select an account</span>
<br> <br>
<select id="main-acct-sel" class="acct-sel" style="color:black" onchange="mainacct()"></select> <select id="main-acct-sel" class="acct-sel" style="color:black" onchange="mainacct()"></select>
<label></label> <label></label>
</div> </div>
</div>
<div id="auth" style="display:none">
Paste the code and close browser.<br>
<input type="text" id="code" placeholder="Code">
<button class="btn waves-effect" onclick="code()">Auth</button><br>
</div>
Instance data by <a href="https://instances.social" target="_blank">instances.social API</a><br> Instance data by <a href="https://instances.social" target="_blank">instances.social API</a><br>
<img src="./img/loading.svg" id="ins-prof" width="200"><br> <img src="./img/loading.svg" id="ins-prof" width="200"><br>
@<span id="ins-upd"></span><br> @<span id="ins-upd"></span><br>

View File

@ -45,25 +45,33 @@ body,html{overflow-y: scroll;}
{{codesetupwarn}}<br> {{codesetupwarn}}<br>
<input type="checkbox" class="filled-in" id="linux" /> <input type="checkbox" class="filled-in" id="linux" />
<label for="linux">{{codesetup}}</label><br> <label for="linux">{{codesetup}}</label><br>
<input type="checkbox" class="filled-in" id="misskey" />
<label for="misskey">{{thisismisskey}}</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br> <button class="btn waves-effect" onclick="instance()">Login</button><br>
</div> </div>
<div class="col s6"> <div class="col s6">
<span style="font-family:Open Sans;">Supports</span> <span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div> <div id="support" class="collection transparent"></div>
</div> </div>
</div> </div></div>
<div id="auth" style="display:none">
{{codepastewarn}}<br>
<input type="text" id="code" placeholder="{{codepaste}}">
<button class="btn waves-effect" onclick="code()">Auth</button><br>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
{{misskeylogin}}<br>
<input type="hidden" id="misskey-url">
<input type="text" id="misskey-key" placeholder="{{codepaste}}">
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br>
</div>
<h5>{{mainacct}}</h5> <h5>{{mainacct}}</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">{{selacct}}</span> <div class="input-field" style="width:300px"><span data-trans="your_acct">{{selacct}}</span>
<br> <br>
<select id="main-acct-sel" class="acct-sel" style="color:black" onchange="mainacct()"></select> <select id="main-acct-sel" class="acct-sel" style="color:black" onchange="mainacct()"></select>
<label></label> <label></label>
</div> </div>
</div>
<div id="auth" style="display:none">
{{codepastewarn}}<br>
<input type="text" id="code" placeholder="{{codepaste}}">
<button class="btn waves-effect" onclick="code()">Auth</button><br>
</div>
Instance data by <a href="https://instances.social" target="_blank">instances.social API</a><br> Instance data by <a href="https://instances.social" target="_blank">instances.social API</a><br>
<img src="./img/loading.svg" id="ins-prof" width="200"><br> <img src="./img/loading.svg" id="ins-prof" width="200"><br>
@<span id="ins-upd"></span><br> @<span id="ins-upd"></span><br>

View File

@ -1,5 +1,6 @@
/*共通CSS*/ /*共通CSS*/
html,body{ html,body{
/*transform: translate3d(0,0,0);*/
overflow:hidden; overflow:hidden;
user-select: none; user-select: none;
cursor:default; cursor:default;

View File

@ -353,6 +353,15 @@ p:not(:last-child){
overflow:hidden; overflow:hidden;
height:0; height:0;
} }
.prof-img{
border-radius: 3px;
}
.notf-icon{
position: relative;
top: -20px;
width: 20px;
left: 20px;
}
.notf-indv-box { .notf-indv-box {
width:100%; width:100%;
max-height: 400px; max-height: 400px;

View File

@ -1,5 +1,834 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<meta http-equiv="refresh" content="0;URL='language.html?mode=redirect'" /> <title>TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
<link href="./css/themes.css" type="text/css" rel="stylesheet">
<link href='./css/tl.css' rel='stylesheet' type='text/css'>
<link href='./css/userdata.css' rel='stylesheet' type='text/css'>
<link href='./css/post.css' rel='stylesheet' type='text/css'>
<link href="./css/master.css" type="text/css" rel="stylesheet">
<link href='./css/sort.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet">
<meta charset="utf-8">
</head> </head>
<body>
<script type="text/javascript" src="./js/common/jquery.js"></script>
<script type="text/javascript" src="./js/platform/first.js"></script>
<script type="text/javascript" src="./js/common/materialize.js"></script>
<script type="text/javascript" src="./js/lang/lang.js"></script>
<script type="text/javascript" src="./js/lang/parse.lang.js"></script>
<script type="text/javascript" src="./js/common/time.js"></script>
<script type="text/javascript" src="./js/common/version.js"></script>
<script type="text/javascript" src="./js/common/keyshortcut.js"></script>
<script type="text/javascript" src="./js/common/modal.js"></script>
<script type="text/javascript" src="./js/ui/jquery-ui.min.js"></script>
<script>
var ver="Akane (16.0.8)";
//betaを入れるとバージョンチェックしない
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta";
var acct_id=0;
var tlid=0;
var lang="en";
verck(ver);
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<div id="tl">
<!--TL-->
<!--ドラッグハンドラ-->
<div id="drag">
<div id="drag-content" data-trans="drag_here">Drag here to upload
<br>
<button class="btn waves-effect" onclick="closedrop()" data-trans="close">Close</button>
</div>
</div>
</div>
<div id="post-box" class="z-depth-3">
<!--トゥートボックス-->
<div class="row" style="margin-bottom:0;">
</span>
<div class="" style="float:left;">
<a onclick="profShow()" style="vertical-align:-2.5rem;" class="pointer mize">
<img src="./img/missing.svg" id="acct-sel-prof" title="Show profile of the selecting account(Ctrl+Shift+P)" data-trans-title="post_box_prof" width="24px">
</a>
</div>
<div class="input-field mize" style="float:left; width:calc(100% - 24px)">
<select id="post-acct-sel" class="acct-sel" onchange="mdCheck()"></select>
</div>
<span class="cancel">
<i class="material-icons waves-effect" onclick="hide()" title="Close this box(X)" data-trans-title="post_box_close">cancel</i>
</span>
<!--Markdown-->
<div class="row" style="margin-bottom:0">
<div class="markdown mize hide">
<div class="col s12">
<i class="material-icons pointer setting waves-effect" onclick="tagsel('b')" title="太字(Ctrl+B)テキストボックス内を選択してから押すと囲みます。">format_bold</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('i')" title="斜字(Ctrl+I)テキストボックス内を選択してから押すと囲みます。">format_italic</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('u')" title="下線(Ctrl+U)テキストボックス内を選択してから押すと囲みます。">format_underlined</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('s')" title="取り消し(Ctrl+S)テキストボックス内を選択してから押すと囲みます。">strikethrough_s</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('>','no','yes')" title="引用">format_quote</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('#','no','yes')" title="見出し">short_text</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('`','yes','no')" title="コード挿入 テキストボックス内を選択してから押すと囲みます。">code</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('- ','yes','yes')" title="箇条書きリスト">format_list_bulleted</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('1. ','yes','yes')" title="番号付きリスト">format_list_numbered</i>
<i class="pointer setting fa fa-subscript waves-effect" onclick="markdown('__','yes','no','before')" title="下付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-superscript waves-effect" onclick="markdown('_','yes','no','before')" title="上付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('spin')" title="回転 テキストボックス内を選択してから押すと囲みます。">autorenew</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('pulse')" title="点滅 テキストボックス内を選択してから押すと囲みます。">flare</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=vertical')" title="上下反転 テキストボックス内を選択してから押すと囲みます。">swap_vert</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=horizontal')" title="左右反転 テキストボックス内を選択してから押すと囲みます。">swap_horiz</i>
<span class="sml gray pointer waves-effect">
<a onclick="mdToggle()">Markdownエディタを隠す</a>
</span>
<br>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('size')" title="文字サイズ変更 テキストボックス内を選択してから押すと囲みます。">format_size</i>
<input id="size" style="width: calc(50% - 20px); margin: 0; height: 24px;" value="12">px
<i class="material-icons pointer setting waves-effect" onclick="tagsel('colorhex')" title="文字色変更 テキストボックス内を選択してから押すと囲みます。">color_lens</i>
<input id="colorhex" style="width: calc(50% - 50px); margin: 0; height: 24px;" type="color">
<br>
<i class="material-icons pointer setting waves-effect" onclick="markdownLink()" title="リンク挿入">link</i>
<input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクテキスト">&nbsp;
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクアドレス">
<br>
<i class="material-icons pointer setting waves-effect" onclick="markdownImage()" title="インライン画像挿入">image</i>
<input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="代替テキスト">&nbsp;
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="画像アドレス">
</div>
</div>
<div class="input-field col s12" id="preview-field" style="margin-top: 0;">
<div id="md-preview">
</div>
<span class="sml gray pointer">
<a onclick="previewEdit()">Edit</a>
</span>
</div>
<div class="input-field col s12" id="toot-field" style="margin-top: 10px;">
<textarea id="textarea" class="materialize-textarea unmize" style="margin-bottom:0;" data-length="500"></textarea>
<label for="textarea" data-trans="toot">Toot</label>
<br>
<span class="sml gray pointer markdown mize" id="preview-btn">
<a onclick="preview()">Preview</a>
</span>
<span class="sml gray pointer anti-markdown mize">
<a onclick="mdToggle()">Markdownエディタを表示</a>
</span>
<span id="suggest"></span>
</div>
<div class="col s12 mize" style="margin-top: 0; display:flex; justify-content: space-between">
<i class="waves-effect gray material-icons" id="nsfw" title="Mark media as sensitive" onclick="nsfw()">visibility_off</i>
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1' id="vis-icon">public</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="Hide text behind warning">CW</a>
<span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray" onclick="fileselect()" title="Attach..">photo_library</i></span></span>
<i class="waves-effect gray material-icons" onclick="adobe()" title="Adobe Photo Editor">format_shapes</i>
<i class="waves-effect gray material-icons" onclick="emoji()" title="Emojis">tag_faces</i>
<a class="pointer waves-effect gray" id="npbtn" title="NowPlaying[Click to insert info of Spotify(account link is required.)/control+click to insert that of iTunes(macOS)]"><i class="material-icons" style="font-size:24px;">music_note</i></a>
<i class="material-icons nex gray waves-effect" title="Clear toot box(Ctrl+Shit+C)" data-trans-title="post_box_clear" id="clear">clear</i>
</div>
<div class="col s12 mize" style="margin-bottom:5px; padding:0;">
<div id="taglist"></div>
<span id="preview" class="mize"></span>
<span class=" sml mize"><span data-trans="reply">Reply</span>:
<span id="rec">No</span>/<span data-trans="file">Attaching files</span>:
<span id="mec">None</span>/<span data-trans="vis">Adjust status privacy</span>:
<span id="vis">public</span>
</span>
<br>
<input type="text" id="cw-text" placeholder="Warning text" class="mize" style="margin:0">
</div>
</div>
<!-- 公開範囲 Dropdown Structure -->
<ul id='dropdown1' class='dropdown-content'>
<li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">Adjust status privacy</li>
<li>
<a onclick="vis('public')">(Public)</a>
</li>
<li>
<a onclick="vis('unlisted')">(Unlisted)</a>
</li>
<li>
<a onclick="vis('private')" id="private-button">(Private)</a>
</li>
<li id="limited-button" class="hide">
<a onclick="vis('limited')">限定公開(Limited)</a>
</li>
<li>
<a onclick="vis('direct')" class="disabled direct">(Direct)</a>
</li>
</ul>
<!--hidden area-->
<input type="hidden" id="reply">
<input type="hidden" id="media">
<!--END hidden area-->
</div>
<div id="toot-btn-field">
<button class="btn waves-effect indigo unmize" style="width:calc(100% - 10px); padding:0; margin-top:10px;" onclick="post()" id="toot-post-btn">Toot</button>
</div>
</div>
<!--絵文字ピッカー-->
<div id="emoji" class="hide shared z-depth-4">
<span class="gray sml">
<a onclick="emojiGet('true')" class="pointer">Refresh emojis list</a>
<i class="material-icons waves-effect" onclick="emoji()" title="Close this box" data-trans-title="post_box_close">cancel</i>
<br>
</span>
<input type="text" id="emoji-suggest" placeholder="Custom emojis Search">
<div id="emoji-list" class="" style="">
</div>
<div class="emoji-control center">
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('before')" id="emoji-before">
<i class="material-icons">navigate_before</i>
</button>
<span id="emoji-count"></span>/
<span id="emoji-sum"></span>
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('next')" id="emoji-next">
<i class="material-icons">navigate_next</i>
</button>
</div>
<div id="default-emoji">
<span id="now-emoji"></span> are shown.<br><span class="gray sml">Some emojis are not able to be inserted.</span>
<br>
<a onclick="customEmoji()" class="pointer waves-effect" title="Custom emojis">
<i class="material-icons">add</i>
</a>
<a onclick="defaultEmoji('people')" class="pointer waves-effect" title="Emojis of people">
<i class="material-icons">people</i>
</a>
<a onclick="defaultEmoji('nature')" class="pointer waves-effect" title="Emojis of nature">
<i class="material-icons">local_florist</i>
</a>
<a onclick="defaultEmoji('food')" class="pointer waves-effect" title="Emojis of foods">
<i class="material-icons">restaurant</i>
</a>
<a onclick="defaultEmoji('activity')" class="pointer waves-effect" title="Emojis of activities">
<i class="material-icons">directions_run</i>
</a>
<a onclick="defaultEmoji('place')" class="pointer waves-effect" title="Emojis of places">
<i class="material-icons">directions_car</i>
</a>
<a onclick="defaultEmoji('object')" class="pointer waves-effect" title="Emojis of tools">
<i class="material-icons">attach_file</i>
</a>
<a onclick="defaultEmoji('symbol')" class="pointer waves-effect" title="Emojis of symbols">
<i class="material-icons">gesture</i>
</a>
<a onclick="defaultEmoji('flag')" class="pointer waves-effect" title="Emojis of flags">
<i class="material-icons">flag</i>
</a>
<a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn">
<i class="fa fa-fort-awesome"></i>
</a>
</div>
</div>
<!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer">
<div class="modal-content">
<ul class="collapsible" data-collapsible="accordion" id="det-col">
<li>
<div class="collapsible-header">
<i class="material-icons">arrow_upward</i>Context before this toot
</div>
<div class="collapsible-body toot-reset" id="toot-reply">
</div>
</li>
<li>
<div class="collapsible-header" id="activator">
<i class="material-icons">more_horiz</i>This toot
</div>
<div class="collapsible-body toot-reset" id="toot-this">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">arrow_downward</i>Context after this toot
</div>
<div class="collapsible-body toot-reset" id="toot-after">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">people_outline</i>Local TL before this toot
</div>
<div class="collapsible-body toot-reset" id="toot-before">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">person_outline</i>User TL before this toot
</div>
<div class="collapsible-body toot-reset" id="user-before">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">star</i>People who favourited it
</div>
<div class="collapsible-body toot-reset" id="toot-fav">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="text-darken-3 fa fa-retweet"></i>People who boosted it
</div>
<div class="collapsible-body toot-reset" id="toot-rt">
</div>
</li>
</ul>
Use other account(<i class="fa fa-retweet"></i>/<i class="fa fa-star"></i>:unfav and unBT are disabled.)<br>
<div class="row">
<div class="col s4">
<select id="status-acct-sel" class="acct-sel"></select>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share left"></i>Reply</button>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet left"></i>Boost</button>
</div>
<div class="col s3">
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i class="fa fa-star left"></i>Favourite</button>
</div>
</div>
<div id="toot-tools">
</div>
<div id="toot-after">
</div>
</div>
<div class="modal-footer">
<a href="#!" class="waves-effect waves-green btn-flat" onclick="brws()">Open in browser</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="shot()">Take a screenshot</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy()">Copy URL of this toot</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy('emb')">Embed</a>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Use other account</a>
</div>
</div>
<!-- Modal Structure Userdata -->
<div id="his-data" class="modal bottom-sheet modal-fixed-footer" style="max-height:750px; height:90%;">
<div id="his-data-content" class="modal-content" style="padding-bottom: 0;overflow-y:hidden;">
<div id="his-data-show">
<img src="./img/loading.svg" id="his-prof" style="">
<div class="his-float">
<span id="his-name" style="font-size:1.5rem">Loading...</span><span class="gray" id="his-bot"></span>
<br>@
<span id="his-acct"></span>
<span class="gray" id="his-relation"></span>
<br>
<span class="cbadge">
<span id="his-sta"></span>Toots
</span>
<span class="cbadge">Follow:
<span id="his-follow"></span>
</span>
<span class="cbadge">Follower:
<span id="his-follower"></span>
</span>
<span class="cbadge" style="max-width:150px; width:150px; ">Since:
<span id="his-since"></span>
</div>
<div class="his-float">
<span id="his-des"></span>
<br>
</div>
<div class="row">
<div class="col s12" id="my-data-nav">
<ul class="custom-tabs transparent">
<li class="custom-tab col my-data-width active-back column-first">
<a go="#his-tl">Timeline</a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follow-list">Follow</a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follower-list">Follower</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-action">Cross-account</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-list">List</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-fav-list">Favourite</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-blocking-list">Blocks</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-muting-list">Mutes</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-domain-list">Domain block</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-prof-list">Edit profile</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-request-list">Follow requests</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-matching-list">Resembling</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-follow-recom-list">Suggest</a>
</li>
</ul>
</div>
<div id="his-tl" class="col s12 tab-content">
<div id="his-tl-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="utl('--now','more')">More</button>
</div>
<div id="his-follow-list" class="col s12 tab-content">
<div id="his-follow-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="flw('--now','more')">More</button>
</div>
<div id="his-follower-list" class="col s12 tab-content">
<div id="his-follower-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="fer('--now','more')">More</button>
</div>
<div id="his-action" class="col s12 tab-content">
Use other account to Follow((Unable to unfollow))<br>
<div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div>
<a href="#!" class="waves-effect btn" onclick="follow('selector','true')">Follow</a><br>
or<br>
<a href="#!" class="waves-effect btn" onclick="udgEx('selector', 'selector')">Show profile</a><br>
</div>
<div id="his-list" class="col s12 tab-content">
<div id="his-lists-a">Follow to add this user to lists.</div>
<div id="his-lists-b"></div>
</div>
<div id="his-fav-list" class="col s12 tab-content">
<div id="his-fav-list-contents" class="cont-series">
</div>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="showFav('more')">More</button>
</div>
<div id="his-blocking-list" class="col s12 tab-content">
<div id="his-blocking-list-contents"class="cont-series" >
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showBlo('more')">More</button>
</div>
<div id="his-muting-list" class="col s12 tab-content">
<div id="his-muting-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showMut('more')">More</button>
</div>
<div id="his-domain-list" class="col s12 tab-content">
<div id="his-domain-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showDom('more')">More</button>Add blocking domain
<br>
<input type="text" placeholder="example.com" id="domainblock">
<button class="btn waves-effect" onclick="addDomainblock()">Add</button>
<br>
</div>
<div id="his-prof-list" class="col s12 tab-content">Display name
<br>
<input type="text" placeholder="Display name" id="his-name-val" style="max-width:250px;">
<br>Note
<br>
<div class="input-field col s12">
<textarea placeholder="Note" id="his-des-val" class="materialize-textarea"></textarea>
<label for="his-des-val">Note</label>
</div>
<br>Change avataor:
<span id="prof-change">
<input type="file" onchange="imgChange(this,'avatar')">
</span>
<br>Change header image:
<span id="header-change">
<input type="file" onchange="imgChange(this,'header')">
</span>
</div>
<div id="his-request-list" class="col s12 tab-content">
<div id="his-request-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showReq('more')">More</button>
</div>
<div id="his-matching-list" class="col s12 tab-content">
Get people resembling this user.<br>
Powered by <a href="https://vinayaka.distsn.org/" target="_blank">Mastodon User Matching</a><br>
<div id="his-matching-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " onclick="showMat()">Get</button>
</div>
<div id="his-follow-recom-list" class="col s12 tab-content">
<div id="his-follow-recom-contents" class="cont-series">
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button class="modal-action waves-effect waves-green btn-flat" id="his-history-btn" onclick="historyShow()">Back</button>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-follow-btn" onclick="follow()">Follow</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-mute-btn" onclick="mute()">Mute</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-block-btn" onclick="block()">Block</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-emp-btn" onclick="empUser()">Emphasize this user</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" onclick="hisclose()">Close</a>
</div>
</div>
<!-- Modal Structure Image-->
<div id="imagemodal" class="modal modal-fixed-footer" style="min-width:550px">
<div class="modal-content">
<div id="imagewrap">
<img src="" id="imgmodal">
</div>
<br>
</div>
<div class="modal-footer">
DL:<span id="imgprog"></span>%
<a class="waves-effect white-text" onclick="zoom(2)">
<i class="material-icons">zoom_in</i>
</a>
<a class="waves-effect white-text" onclick="zoom(0.5)">
<i class="material-icons">zoom_out</i>
</a>
<button class="btn waves-effect purple" onclick="dlImg()">
<i class="material-icons">file_download</i>
</button>
<button class="btn waves-effect brown" onclick="detFromImg()">This toot</button>
<button class="btn waves-effect orange" onclick="imgCont('prev')" id="image-prev">
<i class="material-icons">keyboard_arrow_left</i>
</button>
<button class="btn waves-effect orange" onclick="imgCont('next')" id="image-next">
<i class="material-icons">keyboard_arrow_right</i>
</button>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">
<i class="material-icons">close</i>
</a>
</div>
</div>
<!-- Modal Structure Video-->
<div id="videomodal" class="modal modal-fixed-footer">
<div class="modal-content">
<video src="" id="video" style="max-width:100%; max-height:100%;" controls >
</div>
<div class="modal-footer">
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
</div>
</div>
<!-- Modal Structure Release Note-->
<div id="releasenote" class="modal modal-fixed-footer">
<div class="modal-content">
<h3>TheDesk</h3>
<a href="https://thedesk.top" target="_blank">HP</a><br>
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br><br>
<div id="release-Akane_16-0-8" style="display:none">
<h5>Release Note Akane (16.0.8)</h5>
16.0.7<br>
<ul>
<li>ログインできない問題を修正。</li>
<li>ストリーミングが切れることがある不具合を修正。</li>
<li>通知カラムが存在するときにベルアイコンが赤くならないようにする設定を追加。</li>
</ul>
16.0.7<br>
<ul>
<li>Pixiv埋め込み</li>
<li>Misskey(URL Analyzer/Realtime Reaction)</li>
<li>その他修正</li>
</ul>
16.0.6/16.0.5<br>
<ul>
<li>開けっ放し設定時にズレるバグ</li>
<li>閉じた後Nで開かないバグ</li>
<li>その他修正</li>
</ul>
16.0.4<br>
<ul>
<li>一部ロケールを追加</li>
<li>Misskeyの一部修正</li>
<li>アニメーションの変更</li>
</ul>
16.0.3<br>
<ul>
<li>Misskey周りの改善</li>
<li>Fav/BT/Reply数の表示バグ修正(β)</li>
</ul>
16.0.2<br>
<ul>
<li>CWの固定</li>
<li>トゥートボックスを閉じない設定</li>
</ul>
16.0.1<br>
<ul>
<li>(β)Windows環境ではアップデート時に自動で展開を行います。ダウンロードを押すだけでアップデートは完結します。</li>
</ul>
16.0.0
<ul>
<li>言語設定:英語に対応</li>
<li>Misskeyに暫定対応</li>
<li>デザインを大きく変更</li>
</ul>
</div>
<br><br>
TheDesk is open-source software. We need your friendly support!<br>
<a href="https://enty.jp/Cutls" target="_blank">Support on Enty</a><br>
<a href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">Amazon Wish List</a><br>
Give me Amazon Gift Card:<a href="mailto:mstdn@thedesk.top" target="_blank">mstdn@thedesk.top</a><br>
<a href="https://osushi.love/Cutls_P" target="_blank">Osushi.love</a>: give me sushi<br>
</div>
<div class="modal-footer">
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
</div>
</div>
<!--PiP-->
<div id="pip" class="hide pip-bottom pip-left">
<i class="material-icons pip-horiz pointer" onclick="pipHoriz()">chevron_right</i> 
<i class="material-icons pip-vert pointer" onclick="pipVert()">expand_less</i> 
<i class="material-icons pointer" onclick="endPip()">close</i>
<div id="pip-content">
</div>
</div>
<!--カラム追加-->
<div id="add-box" class="hide z-depth-4 notf-box">
<div class="input-field"><span data-trans="your_acct">Select an account</span>
<br>
<select id="add-acct-sel" class="acct-sel" style="color:black" onchange="addselCk()"></select>
<label></label>
</div>
<div class="input-field">
<div id="auth">
<select id="type-sel" style="color:black">
<option value="local" data-trans="local">Local</option>
<option value="local-media" data-trans="local-media">Local(Media)</option>
<option value="home" data-trans="home">Home</option>
<option value="pub" data-trans="public">Federated</option>
<option value="pub-media" data-trans="public-media">Federated(Media)</option>
<option value="dm" data-trans="dm">Direct Message</option>
<option value="mix" data-trans="integrated">Integrated(Local and Home)</option>
<option value="plus" data-trans="plus">Integrated(Local and replies and BT on Home)</option>
<option value="notf" data-trans="notification">Notifications</option>
</select>
<label data-trans="show_tl">Show this TL:</label>
</div>
<div id="noauth" class="hide">Show this TL:
<input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);" placeholder="e.g:mstdn.jp">
</div>
</div>
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add">
<i class="material-icons left">add</i>Add
</button>
<br>
<br>
</div>
<!--検索-->
<div id="src-box" class="hide notf-box z-depth-4" style="width:500px">
<div class="input-field">
<select id="src-acct-sel" class="acct-sel" onchange="trend()"></select>
</div><div class="input-field">
<i class="material-icons prefix">search</i>
<input id="src" type="text" class="validate" style="width:calc( 60% - 40px);">
<label for="src" data-trans="src">Search</label>
<button class="btn waves-effect indigo" style="width:calc( 40% - 40px);" onclick="src()" data-trans-i="src">
<i class="material-icons left">search</i>Search
</button>
<br>
<br>
</div>
<div id="search">
<div id="src-contents">
</div>
</div>
</div>
<!--並べ替え-->
<div id="sort-box" class="hide">
<ul id="sort"></ul>
<div>
<button onclick="sort()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="sort">
<i class="material-icons left">sort</i>Sort
</button>
<button onclick="sortToggle()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="close">
<i class="material-icons left">close</i>Close
</button>
</div>
</div>
<!--リスト-->
<div id="list-box" class="hide notf-box z-depth-4">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="list-acct-sel" class="acct-sel"></select>
<label>Select an account</label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="list()" data-trans-i="lists">
List
</button>
</div>
<br><br>
<div id="lists"></div>
<div id="lists-user"></div>
<input type="text" style="width:150px" id="list-add" placeholder="Display name">
<button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">Save</button>
</div>
<!--フィルター-->
<div id="filter-box" class="hide notf-box z-depth-4">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="filter-acct-sel" class="acct-sel"></select>
<label>Select an account</label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="filter()" data-trans-i="filters">
List
</button>
</div>
<div id="filtered-words"></div>
<input type="hidden" id="filter-edit-id">
<input type="text" style="width:150px" id="filter-add-word" placeholder="Filtering words"><br>
Filter contexts<br>
<input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">Home</label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">Local</label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">Notifications</label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">Conversations</label><br>
Options<br>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">Whole word</label><br>
<span class="sml">Nice for Latin language</span><br>
<input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">Drop instead of hide</label><br>
<span class="sml">Filtered toots will disappear irreversibly, even if filter is later removed</span><br>
Expire after<span class="sml">Unset or "0" means "Never"<b>This value may contain some error</b></span><br><br>
<input type="text" style="width:50px" id="days_filter" placeholder="d" value="0">days
<input type="text" style="width:50px" id="hours_filter" placeholder="h" value="0">hours
<input type="text" style="width:50px" id="mins_filter" placeholder="m" value="0">minutes
<button class="btn waves-effect" style="width:120px;" onclick="makeNewFilter()" id="add-filter-btn">Add</button><br>
<span class="sml">Integrated TL/Plus TL will hide both Home-filtering words and Local-filtering words.</span>
</div>
<div id="main">
<!--TLのTL-->
<div id="timeline-container">
<h3>Welcome to TheDesk</h3><br><a href="acct.html">Add an account</a> or click <i class="material-icons">add</i> to add a column.
</div>
</div>
</div>
<!--bottom-->
<div id="bottom">
<div class="leftside">
<div id="dambox">
<input type="text" id="posttgl" placeholder="Toot" style="height:2rem">
</div>
<div class="leftside" id="group">
<div class="btnsgroup"><span class="grouptitle">Columns:</span>
<a onclick="addToggle()" class="nex waves-effect" data-trans-i="add" id="add-tgl">
<i class="material-icons nex" title="Add a column" data-trans-title="column_add">add</i>
</a>
<a onclick="sortToggle()" class="nex waves-effect">
<i class="material-icons nex big-icon" title="Sort" data-trans-title="sort">sort</i>
</a>
</div>
<div class="btnsgroup"><span class="grouptitle">Accounts:</span>
<a href="acct.html" class="nex waves-effect">
<i class="material-icons nex big-icon" title="Account Manager(Ctrl+Shift+M)" data-trans-title="manager">account_circle</i>
</a>
<a onclick="srcToggle()" class="nex waves-effect" id="src-tgl">
<i class="material-icons" title="Search" data-trans-title="src">search</i>
</a>
<a onclick="listToggle()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="List" data-trans-title="list">view_headline</i>
</a>
<a onclick="filterToggle()" class="nex waves-effect" id="filter-tgl">
<i class="material-icons" title="Filter" data-trans-title="filter">filter_list</i>
</a>
</div>
<div class="btnsgroup"><span class="grouptitle">Preferences:</span>
<a href="setting.html" class="nex waves-effect">
<i class="material-icons nex" title="Preferences(Ctrl+Shift+S)" data-trans-title="setting">settings</i>
</a>
<a href="index.html" class="nex mize waves-effect">
<i class="material-icons nex" title="Super Reload(F5/⌘+R)" data-trans-title="reload">refresh</i>
</a>
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="The smallest Mastodon,TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i>
</a>
<a onclick="window.open('https://astarte.thedesk.top');" class="setting nex waves-effect" target="_blank" id="ranking-btn" style="display:none;">
<i class="material-icons nex" title="アスタルテランキング">timeline</i>
</a>
</div>
</div>
</div>
<div>
<div id="tips-menu">
<div class="btnsgroup" style="height:34px"><span class="grouptitle">Tips:</span>
<a onclick="tips('ver')" class="nex waves-effect">
<i class="material-icons nex" title="Version" data-trans-title="ver">info</i>
</a>
<a onclick="tips('clock')" class="nex waves-effect">
<i class="material-icons nex" title="Clock" data-trans-title="clock">access_time</i>
</a>
<a onclick="tips('memory')" class="nex waves-effect">
<i class="material-icons nex" title="RAM status" data-trans-title="memory">memory</i>
</a>
<a onclick="tips('trend')" class="nex waves-effect imasonly" style="display:none;">
<i class="material-icons nex" title="アイマストドントレンド" data-trans-title="trendtip">whatshot</i>
</a>
<a onclick="tips('spotify')" class="nex waves-effect">
<i class="fa fa-spotify nex" title="Spotify" data-trans-title="spotifytips"></i>
</a>
</div>
</div>
<div id="tips" class="hide">
<a onclick="tipsToggle()" class="nex waves-effect" style="float:left">
<i class="material-icons nex" title="Change Tips" data-trans-title="tips">bubble_chart</i>
</a>
<div id="tips-text" style="float:left; width:300px;"></div>
</div>
</div>
</div>
<!--左下メッセージ-->
<div id="message">
</div>
<!--Radio Happy(Yui) Taku Inoue-->
<audio src="" id="radio"></audio>
<!--JS-->
<script type="text/javascript" src="./js/ui/tips.js"></script>
<script src="https://twemoji.maxcdn.com/2/twemoji.min.js?2.7"></script>
<script type="text/javascript" src="./js/common/about.js"></script>
<script type="text/javascript" src="./js/tl/parse.js"></script>
<script type="text/javascript" src="./js/tl/misskeyparse.js"></script>
<script type="text/javascript" src="./js/ui/scroll.js"></script>
<script type="text/javascript" src="./js/tl/tl.js"></script>
<script type="text/javascript" src="./js/tl/card.js"></script>
<script type="text/javascript" src="./js/tl/date.js"></script>
<script type="text/javascript" src="./js/tl/notification.js"></script>
<script type="text/javascript" src="./js/tl/datails.js"></script>
<script type="text/javascript" src="./js/tl/mix.js"></script>
<script type="text/javascript" src="./js/tl/src.js"></script>
<script type="text/javascript" src="./js/tl/filter.js"></script>
<script type="text/javascript" src="./js/tl/tag.js"></script>
<script type="text/javascript" src="./js/tl/list.js"></script>
<script type="text/javascript" src="./js/tl/speech.js"></script>
<script type="text/javascript" src="./js/ui/post-box.js"></script>
<script type="text/javascript" src="./js/ui/layout.js"></script>
<script type="text/javascript" src="./js/login/instance.js"></script>
<script type="text/javascript" src="./js/login/login.js"></script>
<script type="text/javascript" src="./js/ui/img.js"></script>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script type="text/javascript" src="./js/ui/pip.js"></script>
<script type="text/javascript" src="./js/ui/sort.js"></script>
<script type="text/javascript" src="./js/ui/spotify.js"></script>
<script type="text/javascript" src="./js/post/post.js"></script>
<script type="text/javascript" src="./js/post/use-txtbox.js"></script>
<script type="text/javascript" src="./js/post/secure.js"></script>
<script type="text/javascript" src="./js/post/img.js"></script>
<script type="text/javascript" src="./js/post/status.js"></script>
<script type="text/javascript" src="./js/post/misskeystatus.js"></script>
<script type="text/javascript" src="./js/post/emoji.js"></script>
<script type="text/javascript" src="./js/post/suggest.js"></script>
<script type="text/javascript" src="./js/post/bb-md.js"></script>
<script type="text/javascript" src="./js/userdata/showOnTL.js"></script>
<script type="text/javascript" src="./js/userdata/his-data.js"></script>
<script type="text/javascript" src="./js/userdata/prof-edit.js"></script>
<script type="text/javascript" src="./js/emoji/emojipack.js"></script>
<script type="text/javascript" src="./js/emoji/default-emoji.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>

View File

@ -741,7 +741,7 @@ var lang="{{lang}}";
<i class="material-icons" title="{{filter}}" data-trans-title="filter">filter_list</i> <i class="material-icons" title="{{filter}}" data-trans-title="filter">filter_list</i>
</a> </a>
</div> </div>
<div class="btnsgroup"><span class="grouptitle">Preferances:</span> <div class="btnsgroup"><span class="grouptitle">Preferences:</span>
<a href="setting.html" class="nex waves-effect"> <a href="setting.html" class="nex waves-effect">
<i class="material-icons nex" title="{{setting}}(Ctrl+Shift+S)" data-trans-title="setting">settings</i> <i class="material-icons nex" title="{{setting}}(Ctrl+Shift+S)" data-trans-title="setting">settings</i>
</a> </a>

View File

@ -112,6 +112,10 @@ var lang_manager_none={
"ja":"なし", "ja":"なし",
"en":"None" "en":"None"
} }
var lang_manager_godev={
"ja":"MisskeyのDevセンターに移動します。同時に開かれるドキュメントを参考にログインしてください。",
"en":"Open DevCenter of Misskey. We show also an official documents to refer."
}
//post/bb-md.js //post/bb-md.js
var lang_bbmd_misskey={ var lang_bbmd_misskey={
"ja":"TheDeskにおけるMisskeyでは、@を返信として扱いますが、全ての@は消去され別パラメータに入力されます。また、「未収載」を「ホーム」として扱います。", "ja":"TheDeskにおけるMisskeyでは、@を返信として扱いますが、全ての@は消去され別パラメータに入力されます。また、「未収載」を「ホーム」として扱います。",

View File

@ -263,7 +263,7 @@ function getdataAdv(domain, at) {
function refresh(target) { function refresh(target) {
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
if(obj[target].domain=="misskey.xyz"){ if(obj[target].mode=="misskey"){
return return
} }
var start = "https://" + obj[target].domain + var start = "https://" + obj[target].domain +
@ -320,6 +320,7 @@ function refresh(target) {
//絶対ストリーミングを閉じさせないマン //絶対ストリーミングを閉じさせないマン
function ckdb(acct_id) { function ckdb(acct_id) {
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
if(domain=="kirishima.cloud"){ if(domain=="kirishima.cloud"){
localStorage.setItem("kirishima", "true"); localStorage.setItem("kirishima", "true");
$("#ranking-btn").show(); $("#ranking-btn").show();
@ -380,7 +381,7 @@ function ckdb(acct_id) {
localStorage.setItem("follow_" + acct_id, json[domain + "_follow"]); localStorage.setItem("follow_" + acct_id, json[domain + "_follow"]);
} }
} }
if(domain!="misskey.xyz"){ if(domain.indexOf("misskey::")==-1 || domain!="misskey.xyz"){
var start = "https://" + domain + "/api/v1/instance/activity"; var start = "https://" + domain + "/api/v1/instance/activity";
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
@ -402,6 +403,10 @@ function ckdb(acct_id) {
} }
}); });
}else{
if(domain=="misskey.xyz"){
localStorage.setItem("domain_" + acct_id,"misskey::misskey.xyz");
}
} }
@ -420,29 +425,30 @@ function multiSelector() {
var templete; var templete;
if(localStorage.getItem("mainuse")=="main"){ if(localStorage.getItem("mainuse")=="main"){
var last = localStorage.getItem("main"); var last = localStorage.getItem("main");
}else{ }else if(localStorage.getItem("last-use")){
var last = localStorage.getItem("last-use"); var last = localStorage.getItem("last-use");
}else{
var last=0;
} }
var sel; var sel;
console.log(obj.length)
if(obj.length<1){ if(obj.length<1){
$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>'); $("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").html('<option value="noauth">'+lang_login_noauth[lang]+'</option>'); $("#add-acct-sel").html('<option value="noauth">'+lang_login_noauth[lang]+'</option>');
}else{ }else{
Object.keys(obj).forEach(function(key) { Object.keys(obj).forEach(function(key) {
var acct = obj[key]; var acct = obj[key];
var list = key * 1 + 1; var list = key * 1 + 1;
if (key == last) { if (key == last) {
sel = "selected"; sel = "selected";
var domain = localStorage.getItem("domain_" + key); var domain = localStorage.getItem("domain_" + key);
var domain=domain.replace( "misskey::", "" );
if(idata[domain+"_letters"]){ if(idata[domain+"_letters"]){
$("#textarea").attr("data-length", idata[domain+"_letters"]) $("#textarea").attr("data-length", idata[domain+"_letters"])
}else{ }else{
$("#textarea").attr("data-length", 500) $("#textarea").attr("data-length", 500)
} }
var profimg=localStorage.getItem("prof_"+key); var profimg=localStorage.getItem("prof_"+key);
var domain=localStorage.getItem("domain_"+key); console.log(profimg);
if(!profimg){ if(!profimg){
profimg="./img/missing.svg"; profimg="./img/missing.svg";
} }

View File

@ -244,8 +244,8 @@ function support() {
function login(url) { function login(url) {
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
if(url=="misskey.xyz"){ if($('#misskey:checked').val()=="on"){
misskeyLogin(); misskeyLogin(url);
return; return;
} }
if($('#linux:checked').val()=="on"){ if($('#linux:checked').val()=="on"){
@ -270,6 +270,7 @@ function login(url) {
if (httpreq.readyState == 4) { if (httpreq.readyState == 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json); console.log(json);
localStorage.setItem("msky","false");
var auth = "https://" + url + "/oauth/authorize?client_id=" + json[ var auth = "https://" + url + "/oauth/authorize?client_id=" + json[
"client_id"] + "&client_secret=" + json["client_secret"] + "client_id"] + "&client_secret=" + json["client_secret"] +
"&response_type=code&scope=read+write+follow&redirect_uri=" + encodeURIComponent(red); "&response_type=code&scope=read+write+follow&redirect_uri=" + encodeURIComponent(red);
@ -294,16 +295,42 @@ function login(url) {
} }
//これが後のMisskeyである。 //これが後のMisskeyである。
function misskeyLogin() { function misskeyLogin(url) {
if(!url){
var url=$("#misskey-url").val();
}
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
var start = "https://misskey.xyz/api/auth/session/generate"; var start = "https://"+url+"/api/auth/session/generate";
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true); httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json'); httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json'; httpreq.responseType = 'json';
localStorage.setItem("msky","ture");
if(url=="misskey.xyz"){
var mkc=localStorage.getItem("mkc");
}else{
var mkc=$("#misskey-key").val();
if(!mkc){
$("#misskeylogin").show();
$("#misskey-url").val(url);
if(confirm(lang_manager_godev[lang])){
const {
shell
} = require('electron');
console.log("https://"+url+"/dev")
shell.openExternal("https://"+url+"/dev");
shell.openExternal("https://thedesk.top/how-to-login-misskey.html");
}
return false;
}else{
$("#misskeylogin").hide();
$("#misskey-url").val("");
}
}
httpreq.send(JSON.stringify({ httpreq.send(JSON.stringify({
appSecret: localStorage.getItem("mkc") appSecret: mkc
})); }));
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) { if (httpreq.readyState == 4) {
@ -316,7 +343,7 @@ function misskeyLogin() {
$("#auth").show(); $("#auth").show();
$("#code").val(token); $("#code").val(token);
$("#add").hide(); $("#add").hide();
localStorage.setItem("domain_tmp","misskey.xyz"); localStorage.setItem("domain_tmp",url);
shell.openExternal(json.url); shell.openExternal(json.url);
var electron = require("electron"); var electron = require("electron");
} }
@ -328,6 +355,10 @@ function misskeyLogin() {
//テキストボックスにURL入れた //テキストボックスにURL入れた
function instance() { function instance() {
var url = $("#url").val(); var url = $("#url").val();
if(url.indexOf("@")!=-1 || url.indexOf("https")!=-1){
alert("入力形式が違います。(Cutls@mstdn.jpにログインする場合、入力するのは\"mstdn.jp\"です。)")
return false;
}
login(url); login(url);
} }
@ -336,12 +367,13 @@ function code(code) {
localStorage.removeItem("redirect") localStorage.removeItem("redirect")
if(!code){ if(!code){
var code = $("#code").val(); var code = $("#code").val();
$("#code").val("");
} }
var url = localStorage.getItem("domain_tmp"); var url = localStorage.getItem("domain_tmp");
localStorage.removeItem("domain_tmp"); localStorage.removeItem("domain_tmp");
console.log(url); console.log(url);
if(url=="misskey.xyz"){ if(localStorage.getItem("msky")=="true"){
var start = "https://misskey.xyz/api/auth/session/userkey"; var start = "https://"+url+"/api/auth/session/userkey";
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true); httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json'); httpreq.setRequestHeader('Content-Type', 'application/json');
@ -360,11 +392,12 @@ function code(code) {
var add = { var add = {
at: i, at: i,
name: json["user"]["name"], name: json["user"]["name"],
domain: "misskey.xyz", domain: url,
user: json["user"]["username"], user: json["user"]["username"],
prof: avatar, prof: avatar,
id: json["user"]["id"], id: json["user"]["id"],
vis: priv vis: priv,
mode: "misskey"
}; };
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
@ -398,13 +431,6 @@ function code(code) {
client_secret: secret, client_secret: secret,
code: code code: code
})); }));
console.log({
grant_type: "authorization_code",
redirect_uri: "urn:ietf:wg:oauth:2.0:oob",
client_id: id,
client_secret: secret,
code: code
})
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) { if (httpreq.readyState == 4) {
var json = httpreq.response; var json = httpreq.response;
@ -458,7 +484,8 @@ function getdata(domain, at) {
user: json["acct"], user: json["acct"],
prof: avatar, prof: avatar,
id: json["id"], id: json["id"],
vis: priv vis: priv,
mode: "mastodon"
}; };
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
@ -479,8 +506,8 @@ function getdata(domain, at) {
function refresh(target) { function refresh(target) {
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
if(obj[target].domain=="misskey.xyz"){ if(obj[target].mode=="misskey"){
misskeyRefresh(obj,target); misskeyRefresh(obj,target,obj[target].domain);
return return
} }
var start = "https://" + obj[target].domain + var start = "https://" + obj[target].domain +
@ -532,8 +559,9 @@ function refresh(target) {
load(); load();
}); });
} }
function misskeyRefresh(obj,target){ function misskeyRefresh(obj,target,url){
var start = "https://misskey.xyz/api/users/show";
var start = "https://"+url+"/api/users/show";
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true); httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json'); httpreq.setRequestHeader('Content-Type', 'application/json');
@ -552,7 +580,7 @@ function misskeyRefresh(obj,target){
var add = { var add = {
at: json.accessToken, at: json.accessToken,
name: json["user"]["name"], name: json["user"]["name"],
domain: "misskey.xyz", domain: url,
user: json["user"]["username"], user: json["user"]["username"],
prof: avatar, prof: avatar,
id: json["user"]["id"], id: json["user"]["id"],

View File

@ -3,11 +3,14 @@
function mdCheck(){ function mdCheck(){
var acct_id = $("#post-acct-sel").val(); var acct_id = $("#post-acct-sel").val();
var profimg=localStorage.getItem("prof_"+acct_id); var profimg=localStorage.getItem("prof_"+acct_id);
if(!profimg){
profimg="./img/missing.svg";
}
$("#acct-sel-prof").attr("src",profimg); $("#acct-sel-prof").attr("src",profimg);
if(localStorage.getItem("post_" + acct_id)){ if(localStorage.getItem("post_" + acct_id)){
$("#toot-post-btn").text(localStorage.getItem("post_" + acct_id)+"("+localStorage.getItem("domain_"+acct_id)+")"); $("#toot-post-btn").text(localStorage.getItem("post_" + acct_id)+"("+localStorage.getItem("domain_"+acct_id)+")");
}else{ }else{
$("#toot-post-btn").text(lang_toot[lang]+"("+localStorage.getItem("domain_"+acct_id)+")"); $("#toot-post-btn").text(lang_toot[lang]+"("+localStorage.getItem("domain_"+acct_id).replace( "misskey::", "" )+")");
} }
if(!localStorage.getItem("bb_"+acct_id) && !localStorage.getItem("md_"+acct_id)){ if(!localStorage.getItem("bb_"+acct_id) && !localStorage.getItem("md_"+acct_id)){
$(".markdown").addClass("hide"); $(".markdown").addClass("hide");
@ -36,7 +39,7 @@ function mdCheck(){
}else{ }else{
$("#trendtag").html(""); $("#trendtag").html("");
} }
if(domain=="misskey.xyz"){ if(~domain.indexOf("misskey::")){
Materialize.toast(lang_bbmd_misskey[lang], 5000); Materialize.toast(lang_bbmd_misskey[lang], 5000);
} }
if(idata[domain+"_letters"]){ if(idata[domain+"_letters"]){

View File

@ -102,8 +102,9 @@ function media(b64, type, no) {
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at"); var at = localStorage.getItem("acct_"+ acct_id + "_at");
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
if(domain=="misskey.xyz"){ if(~domain.indexOf("misskey::")){
var start = "https://" + domain + "/api/drive/files/create";
var start = "https://" + domain.replace( "misskey::", "" ) + "/api/drive/files/create";
httpreq.open('POST', start, true); httpreq.open('POST', start, true);
httpreq.upload.addEventListener("progress", progshow, false); httpreq.upload.addEventListener("progress", progshow, false);
httpreq.responseType = 'json'; httpreq.responseType = 'json';

View File

@ -11,6 +11,11 @@ function re(id,at,acct_id,mode){
$('select').material_select(); $('select').material_select();
$("#textarea").attr("placeholder",lang_usetxtbox_reply[lang]); $("#textarea").attr("placeholder",lang_usetxtbox_reply[lang]);
$("#textarea").focus(); $("#textarea").focus();
var profimg=localStorage.getItem("prof_"+acct_id);
if(!profimg){
profimg="./img/missing.svg";
}
$("#acct-sel-prof").attr("src",profimg);
vis(mode); vis(mode);
} }
function reEx(id){ function reEx(id){

View File

@ -29,9 +29,11 @@ function additional(acct_id, tlid) {
var card = localStorage.getItem("card_" + tlid); var card = localStorage.getItem("card_" + tlid);
var text = $(this).attr('href'); var text = $(this).attr('href');
if(text){ if(text){
if(text.indexOf("twimg.com")=== -1){
var urls = text.match( var urls = text.match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/ /https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
); );
}
}else{ }else{
var urls =[] var urls =[]
} }
@ -297,6 +299,7 @@ function mov(id,tlid,type){
} }
if(mouseover=="hide"){ if(mouseover=="hide"){
$(tlide+" [toot-id="+id+"] .area-actions").toggleClass("hide") $(tlide+" [toot-id="+id+"] .area-actions").toggleClass("hide")
$(tlide+" [toot-id="+id+"] .area-side").toggleClass("hide")
} }
} }
@ -313,6 +316,7 @@ function resetmv(type){
} }
if(mouseover=="hide"){ if(mouseover=="hide"){
$(".area-actions").addClass("hide"); $(".area-actions").addClass("hide");
$(".area-side").addClass("hide");
} }
} }

View File

@ -77,7 +77,7 @@ function mixtl(acct_id, tlid, type,delc,voice) {
//Streamingに接続 //Streamingに接続
function mixre(acct_id, tlid, TLtype, mute,delc,voice) { function mixre(acct_id, tlid, TLtype, mute,delc,voice,mode) {
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at"); var at = localStorage.getItem("acct_"+ acct_id + "_at");
var startHome = "wss://" + domain + var startHome = "wss://" + domain +
@ -146,6 +146,11 @@ function mixre(acct_id, tlid, TLtype, mute,delc,voice) {
console.log(obj); console.log(obj);
var type = JSON.parse(mess.data).event; var type = JSON.parse(mess.data).event;
if (type == "delete") { if (type == "delete") {
if(del>10){
reconnector(tlid,type,acct_id,data)
}else{
localStorage.setItem("delete",del*1+1)
}
if(delc=="true"){ if(delc=="true"){
$("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized"); $("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
$("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch"); $("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
@ -154,6 +159,7 @@ function mixre(acct_id, tlid, TLtype, mute,delc,voice) {
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove(); $("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
} }
} else if (type == "update") { } else if (type == "update") {
localStorage.removeItem("delete");
if(TLtype=="integrated"){ if(TLtype=="integrated"){
var templete = parse([obj], '', acct_id, tlid); var templete = parse([obj], '', acct_id, tlid);
}else if(TLtype=="plus"){ }else if(TLtype=="plus"){
@ -187,10 +193,42 @@ function mixre(acct_id, tlid, TLtype, mute,delc,voice) {
} }
websocketLocal[wslid].onerror = function(error) { websocketLocal[wslid].onerror = function(error) {
console.error('WebSocket Error ' + error); console.error('WebSocket Error ' + error);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Error ' + error);
}else{
reconnector(tlid,TLtype,acct_id,"","error");
}
};
websocketLocal[wslid].onclose = function() {
console.error('WebSocketLocal Closing by error:' + tlid);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Closed');
}else{
reconnector(tlid,TLtype,acct_id,"","error");
}
}; };
websocketHome[wshid].onerror = function(error) { websocketHome[wshid].onerror = function(error) {
console.error('WebSocket Error ' + error); console.error('WebSocket Error ' + error);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Error ' + error);
}else{
reconnector(tlid,TLtype,acct_id,"","error");
}
}; };
websocketHome[wshid].onclose = function() {
console.error('WebSocketHome Closing by error:' + tlid);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Closed');
}else{
reconnector(tlid,TLtype,acct_id,"","error");
}
};
} }
//ある程度のスクロールで発火 //ある程度のスクロールで発火

View File

@ -157,7 +157,18 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}); });
} }
var noticeavatar="";
if (mix == "notf") { if (mix == "notf") {
if (gif == "yes") {
noticeavatar = toot.account.avatar;
} else {
noticeavatar = toot.account.avatar_static;
}
noticeavatar='<a onclick="udg(\'' + toot.account.id +
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
'<img src="' + noticeavatar +
'" width="20" class="notf-icon prof-img" user="' + toot.account.acct +
'"></a>';
if (toot.type == "mention") { if (toot.type == "mention") {
var what = lang_parse_mentioned[lang]; var what = lang_parse_mentioned[lang];
var icon = "fa-share teal-text"; var icon = "fa-share teal-text";
@ -249,6 +260,16 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}else{ }else{
var if_notf=""; var if_notf="";
if (toot.reblog) { if (toot.reblog) {
if (gif == "yes") {
noticeavatar = toot.account.avatar;
} else {
noticeavatar = toot.account.avatar_static;
}
noticeavatar='<a onclick="udg(\'' + toot.account.id +
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
'<img src="' + noticeavatar +
'" width="20" class="notf-icon prof-img" user="' + toot.account.acct +
'"></a>';
var rebtxt = lang_parse_btedsimple[lang]; var rebtxt = lang_parse_btedsimple[lang];
var rticon = "fa-retweet light-blue-text"; var rticon = "fa-retweet light-blue-text";
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){ if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
@ -387,7 +408,24 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
spoil = spoil.replace(regExp, emoji_url); spoil = spoil.replace(regExp, emoji_url);
}); });
} }
//ニコフレ絵文字
if(toot.profile_emojis){
var nicoemojick = toot.profile_emojis[0];
}else{
var nicoemojick=false;
}
//絵文字があれば
if (nicoemojick) {
Object.keys(toot.profile_emojis).forEach(function(keynico) {
var emoji = toot.profile_emojis[keynico];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
content = content.replace(regExp, emoji_url);
spoil = spoil.replace(regExp, emoji_url);
});
}
//デフォ絵文字 //デフォ絵文字
content=twemoji.parse(content); content=twemoji.parse(content);
if(dis_name){ if(dis_name){
@ -551,7 +589,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' + '\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
'<img src="' + avatar + '<img src="' + avatar +
'" width="40" class="prof-img" user="' + toot.account.acct + '" width="40" class="prof-img" user="' + toot.account.acct +
'"></a></div>' + '"></a>'+noticeavatar+'</div>' +
'<div class="area-display_name"><div class="flex-name"><span class="user">' + '<div class="area-display_name"><div class="flex-name"><span class="user">' +
dis_name + dis_name +
'</span><span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis; cursor:text;"> @' + '</span><span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis; cursor:text;"> @' +

View File

@ -1,5 +1,5 @@
//TL取得 //TL取得
function tl(type, data, acct_id, tlid, delc, voice) { function tl(type, data, acct_id, tlid, delc, voice, mode) {
scrollevent(); scrollevent();
localStorage.removeItem("morelock"); localStorage.removeItem("morelock");
localStorage.removeItem("pool"); localStorage.removeItem("pool");
@ -140,7 +140,7 @@ function tl(type, data, acct_id, tlid, delc, voice) {
} }
//Streaming接続 //Streaming接続
function reload(type, cc, acct_id, tlid, data, mute, delc, voice) { function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
if (!type) { if (!type) {
var type = localStorage.getItem("now"); var type = localStorage.getItem("now");
} }
@ -247,6 +247,12 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice) {
}else{ }else{
var typeA = JSON.parse(mess.data).event; var typeA = JSON.parse(mess.data).event;
if (typeA == "delete") { if (typeA == "delete") {
var del=localStorage.getItem("delete");
if(del>10){
reconnector(tlid,type,acct_id,data)
}else{
localStorage.setItem("delete",del*1+1)
}
var obj = JSON.parse(mess.data).payload; var obj = JSON.parse(mess.data).payload;
if(delc=="true"){ if(delc=="true"){
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized"); $("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
@ -257,6 +263,7 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice) {
} }
} else if (typeA == "update") { } else if (typeA == "update") {
localStorage.removeItem("delete");
var obj = JSON.parse(JSON.parse(mess.data).payload); var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj); console.log(obj);
if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){ if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){
@ -264,6 +271,9 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice) {
say(obj.content) say(obj.content)
} }
var templete = parse([obj], type, acct_id, tlid,"",mute); var templete = parse([obj], type, acct_id, tlid,"",mute);
if ($("timeline_box_"+tlid+"_box .tl-box").scrollTop() == 0) {
$("#timeline_" + tlid).prepend(templete);
}else{
var pool = localStorage.getItem("pool_" + tlid); var pool = localStorage.getItem("pool_" + tlid);
if (pool) { if (pool) {
pool = templete + pool; pool = templete + pool;
@ -271,9 +281,8 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice) {
pool = templete pool = templete
} }
localStorage.setItem("pool_" + tlid, pool); localStorage.setItem("pool_" + tlid, pool);
}
scrollck(); scrollck();
additional(acct_id, tlid); additional(acct_id, tlid);
jQuery("time.timeago").timeago(); jQuery("time.timeago").timeago();
}else{ }else{
@ -290,7 +299,23 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice) {
} }
websocket[wsid].onerror = function(error) { websocket[wsid].onerror = function(error) {
console.error('WebSocket Error ' + error); console.error('WebSocket Error ' + error);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Error ' + error);
}else{
reconnector(tlid,type,acct_id,data,"error");
}
}; };
websocket[wsid].onclose = function() {
console.error('WebSocket Closing by error:' + tlid);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Closed');
}else{
reconnector(tlid,type,acct_id,data,"error");
}
};
} }
//一定のスクロールで発火 //一定のスクロールで発火
@ -571,58 +596,11 @@ function strAlive(){
if(col){ if(col){
var obj = JSON.parse(col); var obj = JSON.parse(col);
Object.keys(obj).forEach(function(key) { Object.keys(obj).forEach(function(key) {
if($("#notice_icon_" + key).hasClass("red-text")){
var type=obj[key].type; var type=obj[key].type;
var lastunix=localStorage.getItem("lastunix_"+ key); var acct_id=obj[key].domain;
if(obj[key].type=="pub" || obj[key].type=="pub-media"){ var data=obj[key].data;
//連合[連合数100超 or not] reconnector(key,type,acct_id,data,"error");
if(localStorage.getItem("connects_" + obj[key].domain)>100){
var should=30;
}else{
var should=120;
}
}else if(obj[key].type=="local" || obj[key].type=="local-media"){
//連合[週間トゥ数10000超 or not]
if(localStorage.getItem("statuses_" + obj[key].domain)>10000){
var should=10;
}else if(localStorage.getItem("statuses_" + obj[key].domain)>1000){
var should=120;
}else{
var should=600;
}
}else{
if(type=="local" || type=="local-media" || type=="mix" || type=="plus"){
//ローカル[週間トゥ数10000超 or not]
if(localStorage.getItem("statuses_" + obj[key].domain)>10000){
var should=10;
}else if(localStorage.getItem("statuses_" + obj[key].domain)>1000){
var should=120;
}else{
var should=600;
}
}
if(type=="home" || type=="mix"){
//ホーム[フォロー数]
var flw=localStorage.getItem("follow_" + obj[key].domain)
if(flw>1000){
var should=10;
}else if(flw>500){
var should=20;
}else if(flw>100){
var should=30;
}else if(flw>50){
var should=45;
}else{
var should=60;
}
}
}
if (obj[key].data) {
var data = obj[key].data;
} else {
var data = "";
}
if(unix*1>lastunix*1+should*1 && should){
reconnector(tlid,type,obj[key].domain,data);
} }
}); });
} }
@ -631,8 +609,8 @@ function strAlive(){
function strAliveInt(){ function strAliveInt(){
setTimeout(strAlive, 10000); setTimeout(strAlive, 10000);
} }
function reconnector(tlid,type,acct_id,data){ function reconnector(tlid,type,acct_id,data,mode){
console.log("Reconnector") console.log("Reconnector:"+mode)
if(type=="mix" || type=="plus"){ if(type=="mix" || type=="plus"){
if(localStorage.getItem("voice_" + tlid)){ if(localStorage.getItem("voice_" + tlid)){
var voice=true; var voice=true;
@ -648,7 +626,7 @@ function reconnector(tlid,type,acct_id,data){
websocketHome[wssh].close(); websocketHome[wssh].close();
var wssh=localStorage.getItem("wssL_" + tlid); var wssh=localStorage.getItem("wssL_" + tlid);
websocketLocal[wssl].close(); websocketLocal[wssl].close();
mixre(acct_id, tlid, type, mute,"",voice); mixre(acct_id, tlid, type, mute,"",voice,mode);
}else if(type=="notf"){ }else if(type=="notf"){
}else{ }else{
var wss=localStorage.getItem("wss_" + tlid); var wss=localStorage.getItem("wss_" + tlid);
@ -663,7 +641,7 @@ function reconnector(tlid,type,acct_id,data){
}else{ }else{
var mute=[]; var mute=[];
} }
reload(type, '', acct_id, tlid, data, mute, "",voice); reload(type, '', acct_id, tlid, data, mute, "",voice,mode);
} }
Materialize.toast(lang_tl_reconnect[lang], 2000); Materialize.toast(lang_tl_reconnect[lang], 2000);
} }

View File

@ -156,7 +156,7 @@ function parseColumn() {
}else{ }else{
var voice=false; var voice=false;
} }
tl(acct.type, data, acct.domain, key, delc,voice); tl(acct.type, data, acct.domain, key, delc,voice,"");
cardCheck(key); cardCheck(key);
mediaCheck(key); mediaCheck(key);
catchCheck(key); catchCheck(key);

View File

@ -15,5 +15,7 @@
"users2":"users", "users2":"users",
"safety":"Connection", "safety":"Connection",
"ver":"Mastodon version", "ver":"Mastodon version",
"ko":"" "ko":"",
"thisismisskey":"Login as Misskey",
"misskeylogin":"Read <a href=\"https://thedesk.top/how-to-misskey-login.html\">Docs(ja)</a> to login Misskey."
} }

View File

@ -15,5 +15,7 @@
"users2":"人", "users2":"人",
"safety":"コネクション", "safety":"コネクション",
"ver":"Mastodonバージョン", "ver":"Mastodonバージョン",
"ko":"個" "ko":"個",
"thisismisskey":"Misskeyとしてログイン",
"misskeylogin":"<a href=\"https://thedesk.top/how-to-misskey-login.html\">ドキュメント</a>を参照して正しいコードを入れてください。"
} }