TheDesk Mio (15.10.0)

This commit is contained in:
cutls 2018-07-22 22:03:46 +09:00
parent 7dfbd6e2e4
commit 48c184699a
19 changed files with 374 additions and 77 deletions

View File

@ -1,6 +1,6 @@
## For Astarte(kirishima.cloud), My Primary Instance
TheDesk :thedesk: Mio (15.9.0)
TheDesk :thedesk: Mio (15.9.1)
・フィルター機能に対応
・削除して再編集に対応
・削除追跡(削除されたトゥートが画面から消えずに背景色のみ変化します。)
@ -11,7 +11,7 @@ https://thedesk.top
## For Other Instances
PCクライアントTheDesk Mio (15.9.0)
PCクライアントTheDesk Mio (15.9.1)
・フィルター機能に対応
・削除して再編集に対応
・削除追跡(削除されたトゥートが画面から消えずに背景色のみ変化します。)

View File

@ -1,17 +1,25 @@
# TheDesk LICENSE v4
# TheDesk LICENSE v5
(C)TheDesk 2018 all rights reserved. Website:[https://thedesk.top](https://thedesk.top)
以下のライセンスに基づき当ソフトウェアを公開します。
- 以下の条件の範囲内で個人ないし団体による再頒布を認めます。
- 必ず上記コピーライトと本ライセンス条項を改変無く含めること。(必ず年度が2018であること。他言語翻訳を付与する場合も原文を表記。)
- このソフトウェアを改変して同時に複数インスタンスへ投稿させてはならない。
- このソフトウェアの使用、再頒布に伴う一切の責任をTheDeskは負いません。
- このソフトウェアを通じて投稿される内容やAPIを通じたアクションは全て投稿者が権利を主張でき、責務を負うことになります。
- APIを通じたアクションは、全てそのインスタンスの規約に従っていなければなりません。特記無き場合、法的責任はそのインスタンスのホストの所在国の法律に従って下さい。
- 利用しているインスタンスに関わらないTheDeskに起因する法的責任は日本国の法律に従います。
- [https://thedesk.top](https://thedesk.top)で公式に頒布されるソフトのみオリジナルソフトウェアです。あなた自身がビルドしたものはオリジナルではありません。
このライセンス条項は2018年5月20日以降であり、TheDesk Mio (ver.3)以降をダウンロードした際に効力を持ちます。
- このソフトウェアを改変して下記の行為を行うことを禁止します。
- 同一内容の連投行為
- 複数インスタンスやSNSへの同時投稿
- 下記例外を除き、改変した場合コードを公開する必要があります。
- 以下の場合、改変後のソフトウェアを公開する必要はありません。
- theme.cssの変数の変更/master.cssのフォントの変更
- 改変のいかんに関わらず、コピーライト、ライセンス、デベロッパー情報の変更は認められません。
- あなた自身がビルドしたものは改変のいかんに関わらずオリジナルではありません。オリジナルであると主張したり、誤解させたりしてはいけません。
- このソフトウェアの使用、再頒布に伴う一切の責任をTheDeskは負いません。
- このソフトウェアを通じて投稿される内容やAPIを通じたアクションは全て投稿者が権利を主張でき、責務を負うことになります。
- MastodonのAPIを通じたアクションは、全てそのインスタンスの規約に従っていなければなりません。特記無き場合、法的責任はそのインスタンスのホストの所在国の法律に従って下さい。
- その他API(Adobe,Spotify,マストドンユーザーマッチング,instances.social)へのアクセスは、各サービスの規約・プライバシーポリシーを遵守してください。
- Spotifyのログイン情報はTheDeskのサーバーに保存されますが、EUにおける「一般データ保護規則General Data Protection Regulation:GDPR」を遵守できていないため、EU内ユーザーは利用できません。
- 改変、翻訳に関わらず、利用しているインスタンスに関わらないTheDeskに起因する法的責任は日本国の法律に従います。
このライセンス条項は2018年7月21日以降であり、TheDesk Mio (15.10.0)以降をダウンロードした際に効力を持ちます。
 
以下バージョンとコードネームの比較です。
_斜字_ はTheDeskには採用していません。前作等に使用されています。

View File

@ -91,12 +91,9 @@ code, pre {
background-color: #000;
padding: 1em 1em 1em;
position: relative;
-webkit-border-top-left-radius: 10px;
-webkit-border-bottom-right-radius: 10px;
-webkit-border-bottom-left-radius: 10px;
-moz-border-radius-topleft: 10px;
-moz-border-radius-bottomright: 10px;
-moz-border-radius-bottomleft: 10px;
border-top-left-radius: 10px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
}
blockquote, .quote p {
margin: 0;
@ -106,12 +103,9 @@ blockquote, .quote {
background-color: #ddd;
padding: 1em 1em 1em;
position: relative;
-webkit-border-top-left-radius: 10px;
-webkit-border-bottom-right-radius: 10px;
-webkit-border-bottom-left-radius: 10px;
-moz-border-radius-topleft: 10px;
-moz-border-radius-bottomright: 10px;
-moz-border-radius-bottomleft: 10px;
border-top-left-radius: 10px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
}
blockquote:before, .quote:before {
content: "Quote";
@ -123,6 +117,26 @@ blockquote:before, .quote:before {
right: 0;
top: 0;
}
.twitter-tweet {
color: black;
background-color: #fff;
padding: 1em 1em 1em;
position: relative;
border-top-left-radius: 10px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
border-left: 5px solid #0c7abf;
}
.twitter-tweet :before {
content: "From Twitter";
font-size: 1.8rem;
line-height: 1em;
font-family: Open Sans, cursive;
color: #999;
position: absolute;
right: 0;
top: 0;
}
#drag {
display: none;
position: fixed;

View File

@ -177,7 +177,6 @@ grid-area: toot;
justify-content:space-around;
width:300px;
max-width:100%;
margin:2px;
grid-area: actions;
}
.area-vis {
@ -329,7 +328,9 @@ p:not(:last-child){
overflow-y: scroll;
overflow-x: hidden;
border: thin solid gray;
border-bottom: 2px solid white;
grid-area: notf-box;
box-shadow:0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.3), 0px -10px 10px 0px rgba(0,0,0,0.3) inset;
}
#src-contents {
min-height: 100px;
@ -360,4 +361,7 @@ p:not(:last-child){
}
.toot a:not(.mention) span:last-of-type{
display:none;
}
.tl-box .via-hide{
display:none;
}

View File

@ -25,7 +25,7 @@
<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="Mio (15.9.1)";
var ver="Mio (15.10.0)";
//betaを入れるとバージョンチェックしない
//var ver="beta";
var acct_id=0;
@ -739,13 +739,15 @@ var tlid=0;
<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-Mio_15-9-1" style="display:none">
<h5>Release Note Mio (15.9.1)</h5>
<div id="release-Mio_15-10-0" style="display:none">
<h5>Release Note Mio (15.10.0)</h5>
<ul>
<li>フィルター機能に対応</li>
<li>削除して再編集に対応</li>
<li>削除追跡(削除されたトゥートが画面から消えずに背景色のみ変化します。)</li>
<li>通知が表示されないバグ・削除時に境界線が太くなる現象の修正など</li>
<li>音声読み上げに対応</li>
<li>Twitterのツイートに対するリンクをリッチに表示</li>
<li>削除追跡取り下げ</li>
<li>アップデートスキップの有効期限を次バージョン時にする機能</li>
<li>CINDERELLA NowPlaying(imastodon.net)</li>
<li>ライセンス変更(v5)</li>
</ul>
</div>
@ -789,6 +791,7 @@ var tlid=0;
<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>

View File

@ -110,9 +110,17 @@ function verck(ver) {
//betaならアプデチェックしない
} else if (ver != "beta") {
localStorage.removeItem("instance")
var ipc = electron.ipcRenderer;
ipc.send('update', "true");
if(localStorage.getItem("new-ver-skip")){
if(localStorage.getItem("next-ver")!=newest){
var ipc = electron.ipcRenderer;
ipc.send('update', "true");
}else{
todo("アップデートはスキップされました。");
}
}else{
var ipc = electron.ipcRenderer;
ipc.send('update', "true");
}
}
}
});

View File

@ -33,11 +33,20 @@ input.addEventListener("focus", function() {
var tag = new_val.match(/#(\S{3,})/);
var acct = new_val.match(/@(\S{3,})/);
if (tag && tag[1]) {
if(localStorage.getItem("imas")){
//セルフNP
var cpnp = new_val.match(/\/\/(\S{1,})/);
}else{
var cpnp=[];
}
if (cpnp && cpnp[1]) {
var q = cpnp[1];
cgNPs(q);
} else if (tag && tag[1]) {
var q = tag[1];
} else if (acct && acct[1]) {
var q = acct[1];
} else {
}else {
//$("#suggest").html("");
return;
}
@ -108,4 +117,33 @@ function tagInsert(code, del) {
$("#textarea").val(newt);
$("#textarea").focus();
$("#suggest").html("");
}
function cgNPs(q){
suggest = "https://cg.toot.app/api/v1/search/light?q=" + q
if (suggest != oldSuggest) {
console.log(suggest)
fetch(suggest, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
if (json[0]) {
var tags = "";
Object.keys(json).forEach(function(key4) {
var tag = json[key4];
tags = tags + '<a onclick="cgNP(\''+json[key4]+'\')" class="pointer">' + json[key4] + '</a> ';
});
$("#suggest").html("Cinderella NowPlaying:" + tags);
}else{
$("#suggest").html("Cinderella NowPlaying:Not Found");
}
});
}
}

View File

@ -58,6 +58,16 @@ function additional(acct_id, tlid) {
console.error(error);
}).then(function(json) {
console.log(json);
//このリンク鳥やんけ、ってとき
if (json.provider_name=="Twitter"){
if(json.image){
var twiImg='<br><img src="'+json.image+'">';
}else{
var twiImg='';
}
$("[toot-id=" + id + "] .additional").html(
'<blockquote class="twitter-tweet"><b>'+json.author_name+'</b><br>'+json.description+twiImg+'</blockquote>');
}
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URLチェック:<br>Title:" + json.title + "<br>" +
@ -149,14 +159,26 @@ function additionalIndv(tlid, acct_id, id) {
console.error(error);
}).then(function(json) {
console.log(json);
if (json.title) {
//このリンク鳥やんけ、ってとき
console.log(json.provider_name);
if (json.provider_name=="Twitter"){
if(json.image){
var twiImg='<br><img src="'+json.image+'" style="max-width:100%">';
}else{
var twiImg='';
}
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URLチェック:<br>Title:" + json.title + "<br>" +
json.description + "</span>");
}
if (json.html) {
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="ながら観モード">picture_in_picture_alt</i>');
'<div class="twitter-tweet"><b>'+json.author_name+'</b><br>'+json.description+twiImg+'</div>');
}else{
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URLチェック:<br>Title:" + json.title + "<br>" +
json.description + "</span>");
}
if (json.html) {
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="ながら観モード">picture_in_picture_alt</i>');
}
}
if (json.title) {
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");

View File

@ -39,7 +39,6 @@ function catchToggle(tlid) {
localStorage.setItem("catch_" + tlid, "true");
$("#sta-del-" + tlid).text("On");
$("#sta-del-" + tlid).css("color",'#009688');
$("#timeline_"+tlid).addClass("media-filter");
parseColumn();
}
}
@ -53,16 +52,6 @@ function catchCheck(tlid) {
$("#sta-del-" + tlid).css("color",'red');
}
}
function catchCheck(tlid) {
var catchck = localStorage.getItem("catch_" + tlid);
if (catchck) {
$("#sta-del-" + tlid).text("On");
$("#sta-del-" + tlid).css("color",'#009688');
} else {
$("#sta-del-" + tlid).text("Off");
$("#sta-del-" + tlid).css("color",'red');
}
}
function delreset(tlid){
$("[tlid=" + tlid + "] .by_delcatch").hide();
$("[tlid=" + tlid + "] .by_delcatch").remove();
@ -346,4 +335,10 @@ function filterUpdateInternal(json,type){
});
});
}
}
}
/*
<a onclick="catchToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="削除捕捉(削除されても残ります。背景色が変化します。)">delete</i><span id="sta-del-' +
key + '">On</span></a>削除捕捉<a onclick="delreset(' + key +
')" class="pointer">リセット</a><br>
*/

View File

@ -106,7 +106,10 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
//via通知
var viashow=localStorage.getItem("viashow");
if(!viashow){
viashow="hide";
viashow="via-hide";
}
if(viashow=="hide"){
viashow="via-hide";
}
//認証なしTL
if(mix=="noauth"){

104
app/js/tl/speech.js Normal file
View File

@ -0,0 +1,104 @@
$voise = null;
$voiseName = 'Google 日本語';
$voices = speechSynthesis.getVoices();
$synthes = new SpeechSynthesisUtterance();
$voise = $.grep($voices, function(n, i){return n.name == $voiseName})[0];
$synthes.voice = $voise; // 音声の設定
localStorage.removeItem("voicebank");
speechSynthesis.cancel()
$synthes.rate=localStorage.getItem("voice_speed");
$synthes.pitch=localStorage.getItem("voice_pitch");
$synthes.volume=localStorage.getItem("voice_vol");
function say(msg){
msg=voiceParse(msg);
var voice=localStorage.getItem("voicebank");
var obj = JSON.parse(voice);
if(!obj){
var json = JSON.stringify([msg]);
localStorage.setItem("voicebank", json);
}else{
obj.push([msg]);
var json = JSON.stringify(obj);
localStorage.setItem("voicebank", json);
}
}
$repeat = setInterval(function() {
if(!speechSynthesis.speaking){
var voice=localStorage.getItem("voicebank");
if(voice){
var obj = JSON.parse(voice);
if(obj[0]){
$synthes.text = obj[0];
speechSynthesis.speak($synthes);
obj.splice(0, 1);
var json = JSON.stringify(obj);
localStorage.setItem("voicebank", json);
}
}
}
}, 300);
function voiceParse(msg){
msg = msg.replace(/#/g, "");
msg = msg.replace(/'/g, "");
msg = msg.replace(/"/g, "");
msg = msg.replace(/https?:\/\/[a-zA-Z0-9./-@_=?&]+/g, "");
return msg;
}
function voiceToggle(tlid) {
var voiceck = localStorage.getItem("voice_" + tlid);
if (voiceck) {
localStorage.removeItem("voice_" + tlid);
speechSynthesis.cancel()
$("#sta-voice-" + tlid).text("Off");
$("#sta-voice-" + tlid).css("color",'red');
parseColumn();
} else {
localStorage.setItem("voice_" + tlid, "true");
$("#sta-voice-" + tlid).text("On");
$("#sta-voice-" + tlid).css("color",'#009688');
parseColumn();
}
}
function voiceCheck(tlid) {
var voiceck = localStorage.getItem("voice_" + tlid);
if (voiceck) {
$("#sta-voice-" + tlid).text("On");
$("#sta-voice-" + tlid).css("color",'#009688');
} else {
$("#sta-voice-" + tlid).text("Off");
$("#sta-voice-" + tlid).css("color",'red');
}
}
function voicePlay(){
if(speechSynthesis.speaking){
speechSynthesis.cancel()
}else{
$synthes.text = $("#voicetxt").val();
$synthes.rate = $("#voicespeed").val()/10;
$synthes.pitch = $("#voicepitch").val()/50;
$synthes.volume = $("#voicevol").val()/100;
speechSynthesis.speak($synthes);
}
}
function voiceSettings(){
localStorage.setItem("voice_speed", $("#voicespeed").val()/10);
localStorage.setItem("voice_pitch", $("#voicepitch").val()/50);
localStorage.setItem("voice_vol", $("#voicevol").val()/100);
Materialize.toast("音声読み上げ設定を更新しました。", 3000);
}
function voiceSettingLoad(){
var speed=localStorage.getItem("voice_speed");
var pitch=localStorage.getItem("voice_pitch");
var vol=localStorage.getItem("voice_vol");
if(speed){
$("#voicespeed").val(speed*10);
}
if(pitch){
$("#voicepitch").val(pitch*50);
}
if(vol){
$("#voicevol").val(vol*100);
}
}

View File

@ -1,5 +1,5 @@
//TL取得
function tl(type, data, acct_id, tlid, delc) {
function tl(type, data, acct_id, tlid, delc, voice) {
scrollevent();
localStorage.removeItem("morelock");
localStorage.removeItem("pool");
@ -36,14 +36,14 @@ function tl(type, data, acct_id, tlid, delc) {
$("#notice_" + tlid).text("Integrated TL(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")");
$("#notice_icon_" + tlid).text("merge_type");
mixtl(acct_id, tlid, "integrated",delc);
mixtl(acct_id, tlid, "integrated",delc,voice);
return;
}else if (type == "plus") {
//Local+なら飛ばす
$("#notice_" + tlid).text("Local+ TL(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")");
$("#notice_icon_" + tlid).text("people_outline");
mixtl(acct_id, tlid, "plus",delc);
mixtl(acct_id, tlid, "plus",delc,voice);
return;
}else if (type == "notf") {
//通知なら飛ばす
@ -100,13 +100,13 @@ function tl(type, data, acct_id, tlid, delc) {
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
todc();
reload(type, '', acct_id, tlid, data, mute, delc);
reload(type, '', acct_id, tlid, data, mute, delc,voice);
$(window).scrollTop(0);
});
}
//Streaming接続
function reload(type, cc, acct_id, tlid, data, mute, delc) {
function reload(type, cc, acct_id, tlid, data, mute, delc, voice) {
if (!type) {
var type = localStorage.getItem("now");
}
@ -175,6 +175,10 @@ function reload(type, cc, acct_id, tlid, data, mute, delc) {
var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){
console.log("speech:"+voice);
if(voice){
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid,"",mute);
var pool = localStorage.getItem("pool_" + tlid);
if (pool) {

View File

@ -120,10 +120,9 @@ function parseColumn() {
')" class="setting nex"><i class="material-icons waves-effect nex" title="メディアフィルター">perm_media</i><span id="sta-media-' +
key + '">On</span></a>メディアフィルター<br><a onclick="cardToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="リンクの解析を切り替え(OFFで制限を回避出来る場合があります)">link</i><span id="sta-card-' +
key + '">On</span></a>リンク解析<br><a onclick="catchToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="削除捕捉(削除されても残ります。背景色が変化します。)">delete</i><span id="sta-del-' +
key + '">On</span></a>削除捕捉<a onclick="delreset(' + key +
')" class="pointer">リセット</a><br>TLヘッダーの色<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
key + '">On</span></a>リンク解析<br><a onclick="voiceToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="読み上げ">hearing</i><span id="sta-voice-' +
key + '">On</span></a>読み上げTL<br>TLヘッダーの色<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
'" class="tl" tlid="' + key + '"'+notf_attr+' data-type="' + acct.type + '"><div style="text-align:center">[ここにトゥートはありません。]<br>F5/⌘+Rで再読込できます。</div></div></div></div>';
$("#timeline-container").append(html);
localStorage.removeItem("pool_" + key);
@ -132,15 +131,22 @@ function parseColumn() {
} else {
var data = "";
}
if(localStorage.getItem("catch_" + tlid)){
if(localStorage.getItem("catch_" + key)){
var delc="true";
}else{
var delc="false";
}
tl(acct.type, data, acct.domain, key, delc);
if(localStorage.getItem("voice_" + key)){
var voice=true;
}else{
var voice=false;
}
tl(acct.type, data, acct.domain, key, delc,voice);
cardCheck(key);
mediaCheck(key);
catchCheck(key)
voiceCheck(key)
});
var width = localStorage.getItem("width");
if (width) {
@ -220,6 +226,7 @@ function removeColumn(tlid) {
obj.splice(tlid, 1);
for(var i=0;i<obj.length;i++){
localStorage.setItem("card_" + i,"true");
localStorage.removeItem("catch_" + i);
}
var json = JSON.stringify(obj);
localStorage.setItem("column", json);

View File

@ -315,6 +315,7 @@ climute();
wordmute();
wordemp();
checkSpotify();
voiceSettingLoad();
oksload();
function climute(){
//クライアントミュート

View File

@ -106,6 +106,10 @@ function nowplaying(mode){
content = content.replace(regExp, "");
var regExp = new RegExp("{bitRate}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{lyricist}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{bpm}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{genre}", "g");
content = content.replace(regExp, "");
$("#textarea").val(content);
@ -134,6 +138,10 @@ function nowplaying(mode){
var regExp = new RegExp("{composer}", "g");
content = content.replace(regExp, arg.composer);
var regExp = new RegExp("{hz}", "g");
var regExp = new RegExp("{lyricist}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{bpm}", "g");
content = content.replace(regExp, "");
content = content.replace(regExp, arg.sampleRate/1000+"kHz");
var regExp = new RegExp("{bitRate}", "g");
content = content.replace(regExp, arg.bitRate+"kbps");
@ -168,4 +176,50 @@ $("#npbtn").click(function() {
$("#npbtn").bind('contextmenu', function() {
nowplaying('itunes');
return false;
});
});
/*cinderella NP*/
function cgNP(q){
suggest = "https://cg.toot.app/api/v1/?song=" + q
console.log(suggest)
fetch(suggest, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
var electron = require("electron");
var ipc = electron.ipcRenderer;
var flag=localStorage.getItem("artwork");
if(flag){
var img=json.album.artwork;
ipc.send('bmp-image', [img,0]);
}
var content=localStorage.getItem("np-temp");
if(!content || content==""){
var content="#NowPlaying {song} / {album} / {artist}\n{url}";
}
var regExp = new RegExp("{song}", "g");
content = content.replace(regExp, json.name);
var regExp = new RegExp("{album}", "g");
content = content.replace(regExp, json.album.name);
var regExp = new RegExp("{artist}", "g");
content = content.replace(regExp, json.artist.text);
var regExp = new RegExp("{composer}", "g");
content = content.replace(regExp, json.composer);
var regExp = new RegExp("{lyricist}", "g");
content = content.replace(regExp, json.lyricist);
var regExp = new RegExp("{bpm}", "g");
content = content.replace(regExp, json.bpm);
var regExp = new RegExp("{genre}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{url}", "g");
content = content.replace(regExp, "");
$("#textarea").val(content);
});
}

View File

@ -1,6 +1,6 @@
{
"name": "TheDesk",
"version": "15.9.1",
"version": "15.10.0",
"description": "TheDesk on Mastodonはシンプルと多機能を両立したデスクトップ向けクライアントです",
"main": "main.js",
"scripts": {

View File

@ -133,10 +133,10 @@
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<br>
<h5>画像の高さ</h5>
<br>
<input type="text" style="width:50px" id="img-height">px
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<br>
<br>
</div>
</li>
<li>
@ -243,7 +243,7 @@
<i class="fa fa-spotify"></i>SpotifyとNowPlayingの設定
</div>
<div class="collapsible-body">
<i class="fa fa-spotify" style="font-size:24px;"></i>ボタンから簡単にNowPlayingができます。<br>
<i class="material-icons" style="font-size:24px;">music_note</i>ボタンから簡単にNowPlayingができます。<br>
<h5>アカウントの連携</h5>
APIの性質上thedesk.topへアクセスします。<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">設定</button></div>
@ -255,8 +255,11 @@
{url}</textarea><br>
テンプレート:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名/{url}:各曲のSpotifyのURL<br>
iTunes NowPlayingでも{url}以外のテンプレートに従ってトゥートされます。また、作曲家{composer}/サンプルレート{hz}/ビットレート{bitRate}/ジャンル{genre}が有効です。<br>
CINDERELLA NowPlaying(imastodon.net限定)では作曲家{composer}/作詞家{lyricist}/BPM{bpm}が有効です。<br>
CINDERELLA NowPlayingはimastodon.netにログインしているとき、トゥート欄に「//」を入力し、その後に曲名を入れることで可能です。<br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>Spotifyでアルバムアートワークを添付する</h5>
この設定はCINDERELLA NowPlaying(imastodon.net限定)にも適用されます。<br>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" />
<label for="awk_yes">はい</label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" />
@ -264,8 +267,30 @@
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>読み上げの設定
</div>
<div class="collapsible-body">
<h5>読み上げの速さ</h5>
1-100まで、デフォルトは10。<br>
<p class="range-field"><input type="range" id="voicespeed" min="1" max="100" value="10" style="width:500px; max-width:100%"/></p>
<h5>読み上げの高さ</h5>
0-100まで、デフォルトは50。(大きくなるほど高い)<br>
<p class="range-field"><input type="range" id="voicepitch" min="0" max="100" value="50" style="width:500px; max-width:100%"/></p>
<h5>読み上げの音量</h5>
0-100まで、デフォルトは100。<br>
<p class="range-field"><input type="range" id="voicevol" min="0" max="100" value="100" style="width:500px; max-width:100%"/></p>
<h5>テスト</h5>
<input type="text" style="width:350px" id="voicetxt" value="これはテスト音声です。TheDeskはオープンソースのPC向けマストドンクライアントです。マルチインスタンスやマルチカラムに対応しています。">
<button class="btn waves-effect blue" style="width:150px;" onclick="voicePlay()" id="testplay">再生/停止</button><br>
<br>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">設定</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>戻る</a>
<br>
<br>キーボードショートカット一覧
@ -277,9 +302,9 @@
<li>F5:スーパーリロード</li>
<li>E:投稿パネルの幅を切り替え</li>
<li>Ctrl+Shift+C:入力内容を消す</li>
<li>Ctrl+Shift+S:設</li>
<li>Ctrl+Shift+S:設</li>
<li>Ctrl+Shift+M:アカウントマネージャ</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:現在選択中のプロフィール</li>
<li>←/→:イメージビューワー起動時に画像切り替え</li>
<li>マウスホイール:イメージビューワー時に拡大縮小</li>
@ -302,8 +327,9 @@
<a href="index.html?mode=user&code=Cutls@kirishima.cloud" class="btn waves-effect blue lighten-2" style="width:100%; max-width:500px;"><img src="./img/desk_full.svg" class="left" width="25" style="padding-top:5px;">Developer: Cutls@kirishima.cloud</a>
<a class="btn waves-effect red lighten-2" href="https://osushi.love/Cutls_P" target="_blank" style="width:100%; max-width:500px;"><img src="./img/sushi.svg" class="left" width="25" style="padding-top:5px;">寿司を投げる</a>
<br>
<a onclick="localStorage.removeItem('new-ver-skip'); location.href='index.html';" class="pouinter">アップデートを確認</a><br>
<a href="oss.html">OSS License(オープンソースライセンス)</a><br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk on Mastodon 2018 & Cutls.com 2015 All Rights Reserved.
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018 All Rights Reserved.
<a href="https://github.com/cutls/TheDesk/blob/master/LICENSE.md">TheDesk LICENSE (Latest Ver.)</a>
<br>Developer: Cutls P(
<a href="index.html?mode=user&code=Cutls@kirishima.cloud">@Cutls@kirishima.cloud</a>)
@ -315,6 +341,7 @@ TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のため
<script type="text/javascript" src="./js/platform/end.js"></script>
<script type="text/javascript" src="./js/login/logout.js"></script>
<script type="text/javascript" src="./js/ui/spotify.js"></script>
<script type="text/javascript" src="./js/tl/speech.js"></script>
<script type="text/javascript" src="./js/ui/settings.js"></script>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script type="text/javascript" src="./js/tl/date.js"></script>

View File

@ -32,7 +32,8 @@ a,button{
</div><br>
アップデートはセキュアかつ高速なAmazon CloudFront CDNを通じて提供されます。<br>
アップデート内容の詳細は<a href="https://github.com/cutls/TheDesk/blob/master/LATEST.md">GitHub</a>をご覧ください。<br><br>
<a onclick="window.close();" class="pointer">このアップデートを飛ばす</a>(次回TL表示時まで有効)<br><a onclick="quit()" class="pointer">このソフトを終了</a><br>
このアップデートを飛ばす(<a onclick="window.close();" class="pointer">次回TL表示時まで</a>/<a onclick="nextv();" class="pointer">次のバージョンが出るまで</a>)<br>
<a onclick="quit()" class="pointer">このソフトを終了</a><br>
<a onclick="about()" class="pointer">このソフトについて</a><br>
アップデートに問題が生じる場合は<a href="https://thedesk.top">TheDesk HP</a>からのダウンロードをおためしください。
<script type="text/javascript" src="./js/common/about.js"></script>
@ -75,6 +76,10 @@ function verck(){
$("#now").text(localStorage.getItem("ver"));
});
}
function nextv(){
localStorage.setItem("new-ver-skip","true");
window.close();
}
function enc(ver){
var ver = ver.replace( /\s/g , "" );
var ver = ver.replace( /\(/g , "-" );

View File

@ -1 +1 @@
{"warn":"これはGCPにアップして下さい","warn2":"これはGCPにアップして下さい","warn3":"これはGCPにアップして下さい","desk":"Mio (15.8.0)","desk_mac":"Mio (15.8.0)","date":"2018-06-17","detail":"複数アカウント、フォントなど。バグ修正多数。アプデ後のアプリ内リリースノートなどで。"}
{"warn":"これはGCPにアップして下さい","warn2":"これはGCPにアップして下さい","warn3":"これはGCPにアップして下さい","desk":"Mio (15.9.1)","desk_mac":"Mio (15.9.1)","date":"2018-06-17","detail":"複数アカウント、フォントなど。バグ修正多数。アプデ後のアプリ内リリースノートなどで。"}