WIP done some ToDO

This commit is contained in:
Cutls 2019-04-11 02:59:13 +09:00
parent 0ad7bf9036
commit 1c16a5f4a0
16 changed files with 168 additions and 64 deletions

View File

@ -505,7 +505,26 @@ p:not(:last-child){
.votebtn:hover{
background-color:var(--color);
}
.jump{
display: inline-block; animation: jump 0.75s linear infinite;
}
@keyframes jump {
0% {
transform: translateY(0);
}
25% {
transform: translateY(-16px);
}
50% {
transform: translateY(0);
}
75% {
transform: translateY(-8px);
}
100% {
transform: translateY(0);
}
}
@keyframes fadeInDown {
from {
opacity: 0;

View File

@ -154,11 +154,6 @@ function emojiList(target,reaction) {
}
$("#emoji-next").removeClass("disabled");
$("#emoji-count").text(ct);
if(localStorage.getItem("emoji-zero-width")){
var brank="";
}else{
var brank=" ";
}
for (i = start; i < start + 126; i++) {
var emoji = obj[i];
if (emoji) {
@ -167,7 +162,7 @@ function emojiList(target,reaction) {
':\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
}else{
html = html + '<a onclick="emojiInsert(\':' + emoji.shortcode +
':'+brank+'\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
':\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
}
}
@ -179,14 +174,19 @@ function emojiList(target,reaction) {
function emojiInsert(code, del) {
var now = $("#textarea").val();
var selin = localStorage.getItem("cursor");
if(localStorage.getItem("emoji-zero-width")=="yes"){
var brank="";
}else{
var brank=" ";
}
console.log(selin);
var now = $("#textarea").val();
if(selin>0){
var before = now.substr(0, selin);
var after = now.substr(selin, now.length);
newt = before + " "+ code+" " + after;
newt = before + brank+ code+brank + after;
}else{
newt = code+" ";
newt = code+brank;
}
if (!del) {
$("#textarea").val(newt);
@ -194,7 +194,7 @@ function emojiInsert(code, del) {
} else {
var regExp = new RegExp(del, "g");
var now = now.replace(regExp, "");
$("#textarea").val(now + " " + code);
$("#textarea").val(now + brank + code);
}
$("#textarea").focus();

View File

@ -65,7 +65,7 @@ function reactiontoggle(id,acct_id,tlid){
var json = httpreq.response;
console.log(json);
if(json.reactionCounts){
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding","star"];
for(var i=0;i<reactions.length;i++){
if(json.reactionCounts[reactions[i]]){
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
@ -133,8 +133,12 @@ function reactRefresh(acct_id,id){
return false;
}
var poll="";
console.log(json);
reactRefreshCore(json)
if(json.error){
$("[toot-id=" + id + "]").hide();
$("[toot-id=" + id + "]").remove();
}else{
reactRefreshCore(json)
}
});
}
function reactRefreshCore(json){

View File

@ -236,6 +236,8 @@ function del(id, acct_id) {
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = "json";
httpreq.send(JSON.stringify({i:at,noteId:id}));
$("[toot-id=" + id+ "]").hide();
$("[toot-id=" + id + "]").remove();
}else{
var start = "https://" + domain + "/api/v1/statuses/" + id;
var httpreq = new XMLHttpRequest();

View File

@ -160,6 +160,15 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
}else{
disname="";
}
//絵文字があれば
Object.keys(toot.user.emojis).forEach(function(key5) {
var emoji = toot.user.emojis[key5];
var shortcode = emoji.name;
var emoji_url = '<img draggable="false" src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
});
if (mix == "notf") {
if (gif == "yes") {
noticeavatar = toot.user.avatarUrl;
@ -192,24 +201,25 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
"congrats":"🎉",
"amgry":"💢",
"confused":"😥",
"pudding":"🍮"
"pudding":"🍮",
"star":"⭐"
}
var icon=reactions[toot.reaction];
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
for(var i=0;i<reactions.length;i++){
if(toot.note.reactionCounts[reactions[i]]){
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(toot.note.reactionCounts[reactions[i]])
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
}else{
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
$("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
}else{
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
}
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(toot.note.reactionCounts[reactions[i]])
}
}
var emojisData = JSON.parse(localStorage.getItem("emoji_" + acct_id));
if(!icon){
if(emojisData){
var num = emojisData.length;
var ehtml="";
for (i = 0; i < num; i++) {
var emoji = emojisData[i];
if (":"+emoji.shortcode+":"==toot.reaction) {
if (emoji) {
icon='<img src="'+emoji.url+'" style="width:1rem">';
}
}
}
}
}
}else{
var icon = '<i class="big-text material-icons indigo-text" style="font-size:17px">info</i>';
}
@ -250,19 +260,19 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tagstemp(toot.status.content),
icon: toot.account.avatar
body: toot.user.name+"(" + toot.user.username +")"+what+"\n\n"+$.strip_tagstemp(toot.note.text),
icon: toot.user.avatarUrl
};
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', [
'TheDesk:'+domain,
toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tagstemp(toot.status.content),
toot.account.avatar,
toot.user.name+"(" + toot.user.username +")"+what+"\n\n"+$.strip_tagstemp(toot.note.text),
toot.user.avatarUrl,
"toot",
acct_id,
toot.status.id
toot.note.id
]);
}
}
@ -395,7 +405,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var emojick = toot.emojis[0];
}else{
var emojick=false;
}
}
//デフォ絵文字
if(content){
//MFM
@ -403,17 +413,35 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
content=content.replace(/`(.+)`/gi, '<code>$1</code>')
content=content.replace(/(http(s)?:\/\/[\x21-\x7e]+)/gi, '<a href="$1" target="_blank">$1</a>')
content=content.replace(/\(\(\((.+)\)\)\)/gi, '<span class="shake">$1</span>')
content=content.replace(/<motion>(.+)<\/motion>/gi, '<span class="shake">$1</span>')
content=content.replace(/&lt;motion&gt;(.+)&lt;\/motion&gt;/gi, '<span class="shake">$1</span>')
content=content.replace(/\*\*\*([^*]+)\*\*\*/gi, '<span class="shake" style="font-size:200%">$1</span>')
content=content.replace(/\*\*([^*]+)\*\*/gi, '<b>$1</b>')
content=content.replace(/^(.+)\s(検索|search)$/gmi, '<div class="input-field"><i class="material-icons prefix">search</i><input type="text" style="width:calc( 60% - 80px);" name="q" value="$1" id="srcbox_'+toot.id+'"><label for="src" data-trans="src" class="">検索</label><button class="btn waves-effect indigo" style="width:40%;" data-trans-i="src" onclick="goGoogle(\''+toot.id+'\')">検索</button></div>')
content=content.replace(/\[(.+)\]\(<a href="(http(s)?:\/\/[\x21-\x7e]+)".+\)/gi,'<a href="$2" target="_blank">$1</a>');
content=content.replace(/&lt;center&gt;/gi, '<div class="center">')
content=content.replace(/&lt;\/center&gt;/gi, '</div>')
content=content.replace(/&lt;flip&gt;(.+)&lt;\/flip&gt;/gi, '<span class="fa fa-flip-horizontal">$1</span>')
content=content.replace(/&lt;small&gt;(.+)&lt;\/small&gt;/gi, '<small>$1</small>')
content=content.replace(/&lt;i&gt;(.+)&lt;\/i&gt;/gi, '<i>$1</i>')
content=content.replace(/&lt;spin&gt;(.+)&lt;\/spin&gt;/gi, '<span class="fa fa-spin">$1</span>')
content=content.replace(/\*\*(.+)\*\*/gi, '<b>$1</b>')
content=content.replace(/&lt;jump&gt;(.+)&lt;\/jump&gt;/gi, '<span class="jump">$1</jump>')
content=twemoji.parse(content);
}else{
content="";
}
//絵文字があれば
if (emojick) {
Object.keys(toot.emojis).forEach(function(key5) {
var emoji = toot.emojis[key5];
var shortcode = emoji.name;
var emoji_url = '<img draggable="false" 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);
});
}
if(dis_name){
dis_name=twemoji.parse(dis_name);
}else{
@ -728,6 +756,11 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
content='<span class="gray">This post has no content. It may be media-only, private or deleted.</span>';
}
var trans="";
if(toot.user.emojis){
var actemojick = toot.user.emojis[0];
}else{
var actemojick=false;
}
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
boostback + ' ' + fav_app + ' ' + rt_app + ' ' + hasmedia + '" toot-id="' + id + '" unique-id="' + uniqueid + '" data-medias="'+media_ids+' " unixtime="' + date(obj[
key].created_at, 'unix') + '" '+if_notf+' onmouseover="mov(\'' + toot.id + '\',\''+tlid+'\',\'mv\')" onclick="mov(\'' + toot.id + '\',\''+tlid+'\',\'cl\')" onmouseout="resetmv(\'mv\')" reacted="'+reacted+'">' +

View File

@ -233,13 +233,13 @@ function notfCommon(acct_id, tlid, sys) {
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: ct+lang_notf_new[lang],
body: ct+lang.lang_notf_new[lang],
icon: localStorage.getItem("prof_"+acct_id)
};
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]);
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang.lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]);
}
}

View File

@ -44,7 +44,7 @@
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<templete v-html=item.text.desc></templete><br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.id=='notf'"><a onclick="notftest()" class="pointer">Notification test</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
@ -62,7 +62,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">Change</button>
</template>
</template><br>
</template>
</div>
<h5>Font</h5>
@ -153,7 +153,7 @@
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
@ -170,7 +170,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">Change</button>
</template>
</template><br>
</template>
</div>
</div>
@ -183,7 +183,7 @@
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template v-if="!check.kirishima || (check.kirishima && kirishima)">
@ -203,7 +203,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">Change</button>
</template>
</template><br>
</template>
</div>
</div>

View File

@ -476,5 +476,16 @@ var postConstruction=[
}
]
}
},{
id:"zero",
storage:"emoji-zero-width",
checkbox:true,
setValue:"normal",
setValue:"no",
text:{
head:"Zero-width space when inserting emojis",
desc:"",
checkbox:yesno
}
}
]

View File

@ -44,7 +44,7 @@
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<templete v-html=item.text.desc></templete><br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.id=='notf'"><a onclick="notftest()" class="pointer">通知テスト</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
@ -62,7 +62,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">変更</button>
</template>
</template><br>
</template>
</div>
<h5>フォント</h5>
@ -153,7 +153,7 @@
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
@ -170,7 +170,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">変更</button>
</template>
</template><br>
</template>
</div>
</div>
@ -183,7 +183,7 @@
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template v-if="!check.kirishima || (check.kirishima && kirishima)">
@ -203,7 +203,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">変更</button>
</template>
</template><br>
</template>
</div>
</div>

View File

@ -476,5 +476,16 @@ var postConstruction=[
}
]
}
},{
id:"zero",
storage:"emoji-zero-width",
checkbox:true,
setValue:"normal",
setValue:"no",
text:{
head:"絵文字にゼロ幅スペースを使う",
desc:"",
checkbox:yesno
}
}
]

View File

@ -114,6 +114,7 @@
"secwarn":"Toot with other visibility setting",
"nothing":"Hidden",
"localonly":"Local Only",
"zeroWidthEmoji":"Zero-width space when inserting emojis",
"keysc":"Keyboard shortcut Preferences",
"iks":"Easy inserter",
"okswarn":"You can insert any letters and emojis with only 3 keys",

View File

@ -114,6 +114,7 @@
"secwarn":"公開範囲の変更とトゥートを一発でできます。",
"nothing":"表示しない",
"localonly":"ローカル限定",
"zeroWidthEmoji":"絵文字にゼロ幅スペースを使う",
"keysc":"キーボードショートカットの設定",
"iks":"簡単文字入力",
"okswarn":"絵文字やタグ、&gt;BTなどを登録しておくとすぐに入力できます。",

View File

@ -44,7 +44,7 @@
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<templete v-html=item.text.desc></templete><br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.id=='notf'"><a onclick="notftest()" class="pointer">@@nntest@@</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
@ -62,7 +62,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">@@change@@</button>
</template>
</template><br>
</template>
</div>
<h5>@@font@@</h5>
@ -153,7 +153,7 @@
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
@ -170,7 +170,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">@@change@@</button>
</template>
</template><br>
</template>
</div>
</div>
@ -183,7 +183,7 @@
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template v-if="!check.kirishima || (check.kirishima && kirishima)">
@ -203,7 +203,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">@@change@@</button>
</template>
</template><br>
</template>
</div>
</div>

View File

@ -476,5 +476,16 @@ var postConstruction=[
}
]
}
},{
id:"zero",
storage:"emoji-zero-width",
checkbox:true,
setValue:"normal",
setValue:"no",
text:{
head:"@@zeroWidthEmoji@@",
desc:"",
checkbox:yesno
}
}
]

View File

@ -44,7 +44,7 @@
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<templete v-html=item.text.desc></templete><br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.id=='notf'"><a onclick="notftest()" class="pointer">crwdns540:0crwdne540:0</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
@ -62,7 +62,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">crwdns528:0crwdne528:0</button>
</template>
</template><br>
</template>
</div>
<h5>crwdns544:0crwdne544:0</h5>
@ -153,7 +153,7 @@
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
@ -170,7 +170,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">crwdns528:0crwdne528:0</button>
</template>
</template><br>
</template>
</div>
</div>
@ -183,7 +183,7 @@
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if=item.text.desc><templete v-html=item.text.desc></templete><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template v-if="!check.kirishima || (check.kirishima && kirishima)">
@ -203,7 +203,7 @@
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">crwdns528:0crwdne528:0</button>
</template>
</template><br>
</template>
</div>
</div>

View File

@ -476,5 +476,16 @@ var postConstruction=[
}
]
}
},{
id:"zero",
storage:"emoji-zero-width",
checkbox:true,
setValue:"normal",
setValue:"no",
text:{
head:"@@zeroWidthEmoji@@",
desc:"",
checkbox:yesno
}
}
]