Compare commits
19 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1387482db0 | ||
|
b7a86324dd | ||
|
babc5a6424 | ||
|
74a468383c | ||
|
3a48f0ff0d | ||
|
e26363adf6 | ||
|
35d97d42c5 | ||
|
4fa7d07500 | ||
|
15f428528b | ||
|
7fa805fe3a | ||
|
fd9c97a126 | ||
|
f081154804 | ||
|
866affdf45 | ||
|
30aee556f1 | ||
|
b12c18aa08 | ||
|
f17a47d088 | ||
|
d79f096749 | ||
|
5b82b91c6a | ||
|
4a6b87ac1c |
@@ -10,9 +10,6 @@ body {
|
|||||||
background-color: var(--bg);
|
background-color: var(--bg);
|
||||||
color: var(--color);
|
color: var(--color);
|
||||||
}
|
}
|
||||||
body {
|
|
||||||
border: thin solid gray;
|
|
||||||
}
|
|
||||||
.btn {
|
.btn {
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
text-transform: none;
|
text-transform: none;
|
||||||
@@ -307,6 +304,9 @@ blockquote:before,
|
|||||||
.tabs {
|
.tabs {
|
||||||
background-color: var(--subcolor);
|
background-color: var(--subcolor);
|
||||||
}
|
}
|
||||||
|
.collapsible-header:focus {
|
||||||
|
background-color: var(--subcolor);
|
||||||
|
}
|
||||||
.modal-footer {
|
.modal-footer {
|
||||||
background-color: var(--modalfooter) !important;
|
background-color: var(--modalfooter) !important;
|
||||||
}
|
}
|
||||||
|
@@ -158,6 +158,7 @@ iframe {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
border: thin solid gray;
|
border: thin solid gray;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
border-top: none;
|
||||||
}
|
}
|
||||||
.box .pin,
|
.box .pin,
|
||||||
#his-data .pin {
|
#his-data .pin {
|
||||||
@@ -585,6 +586,7 @@ p:not(:last-child) {
|
|||||||
display: block;
|
display: block;
|
||||||
margin-right: 1px;
|
margin-right: 1px;
|
||||||
float: left;
|
float: left;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.nsfw-media {
|
.nsfw-media {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@@ -137,6 +137,10 @@ $(function ($) {
|
|||||||
//矢印:選択
|
//矢印:選択
|
||||||
if (e.code == "ArrowLeft") {
|
if (e.code == "ArrowLeft") {
|
||||||
//left
|
//left
|
||||||
|
if ($("#imagemodal").hasClass("open")) {
|
||||||
|
imgCont('next');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (selectedColumn > 0) {
|
if (selectedColumn > 0) {
|
||||||
selectedColumn--
|
selectedColumn--
|
||||||
}
|
}
|
||||||
@@ -144,6 +148,9 @@ $(function ($) {
|
|||||||
return false;
|
return false;
|
||||||
} else if (e.code == "ArrowUp") {
|
} else if (e.code == "ArrowUp") {
|
||||||
//up
|
//up
|
||||||
|
if ($("#imagemodal").hasClass("open")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (selectedToot > 0) {
|
if (selectedToot > 0) {
|
||||||
selectedToot--
|
selectedToot--
|
||||||
}
|
}
|
||||||
@@ -151,6 +158,10 @@ $(function ($) {
|
|||||||
return false;
|
return false;
|
||||||
} else if (e.code == "ArrowRight") {
|
} else if (e.code == "ArrowRight") {
|
||||||
//right
|
//right
|
||||||
|
if ($("#imagemodal").hasClass("open")) {
|
||||||
|
imgCont('prev');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (selectedColumn < $(".tl-box").length - 1) {
|
if (selectedColumn < $(".tl-box").length - 1) {
|
||||||
selectedColumn++
|
selectedColumn++
|
||||||
}
|
}
|
||||||
@@ -158,6 +169,9 @@ $(function ($) {
|
|||||||
return false;
|
return false;
|
||||||
} else if (e.code == "ArrowDown") {
|
} else if (e.code == "ArrowDown") {
|
||||||
//down
|
//down
|
||||||
|
if ($("#imagemodal").hasClass("open")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
selectedToot++
|
selectedToot++
|
||||||
tootSelector(selectedColumn, selectedToot)
|
tootSelector(selectedColumn, selectedToot)
|
||||||
return false;
|
return false;
|
||||||
@@ -206,19 +220,6 @@ $(function ($) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//イメージビューワー切り替え
|
|
||||||
if (e.keyCode === 37 && wv) {
|
|
||||||
if ($("#imagemodal").hasClass("open")) {
|
|
||||||
imgCont('prev');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (e.keyCode === 39 && wv) {
|
|
||||||
if ($("#imagemodal").hasClass("open")) {
|
|
||||||
imgCont('next');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
//クリアボタン
|
//クリアボタン
|
||||||
$("#clear").click(function () {
|
$("#clear").click(function () {
|
||||||
|
@@ -10,20 +10,20 @@ $(document).on('click', 'a', e => {
|
|||||||
if (url) {
|
if (url) {
|
||||||
urls = url.match(/https?:\/\/(.+)/);
|
urls = url.match(/https?:\/\/(.+)/);
|
||||||
//トゥートのURLぽかったら
|
//トゥートのURLぽかったら
|
||||||
toot = url.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
|
toot = url.match(/https:\/\/([^+_]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
|
||||||
if(!toot){
|
if(!toot){
|
||||||
//Pleroma対策
|
//Pleroma対策
|
||||||
toot = url.match(/https:\/\/([a-zA-Z0-9.-]+)\/users\/([a-zA-Z0-9_]+)\/statuses\/([0-9]+)/);
|
toot = url.match(/https:\/\/([^+_]+)\/users\/([a-zA-Z0-9_]+)\/statuses\/([0-9]+)/);
|
||||||
}
|
}
|
||||||
//タグのURLぽかったら
|
//タグのURLぽかったら
|
||||||
var tags = [];
|
var tags = [];
|
||||||
tags = url.match(
|
tags = url.match(
|
||||||
/https:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
|
/https:\/\/([^+_]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
|
||||||
);
|
);
|
||||||
//メンションっぽかったら
|
//メンションっぽかったら
|
||||||
var ats = [];
|
var ats = [];
|
||||||
ats = url.match(
|
ats = url.match(
|
||||||
/https:\/\/([-a-zA-Z0-9.]+)\/@([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#@]+)/
|
/https:\/\/([^+_]+)\/@([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#@]+)/
|
||||||
);
|
);
|
||||||
if (toot) {
|
if (toot) {
|
||||||
if (toot[1]) {
|
if (toot[1]) {
|
||||||
|
@@ -170,4 +170,29 @@ $.mb_substr = function (str, begin, end) {
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
//ソートするやつ
|
||||||
|
function object_array_sort(data, key, order, fn) {
|
||||||
|
var num_a = -1;
|
||||||
|
var num_b = 1;
|
||||||
|
if (order === 'asc') {
|
||||||
|
num_a = 1;
|
||||||
|
num_b = -1;
|
||||||
|
}
|
||||||
|
data = data.sort(function (a, b) {
|
||||||
|
var x = a[key];
|
||||||
|
var y = b[key];
|
||||||
|
if (x > y) return num_a;
|
||||||
|
if (x < y) return num_b;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
var arrObj = {};
|
||||||
|
for (var i = 0; i < data.length; i++) {
|
||||||
|
arrObj[data[i]['family']] = data[i];
|
||||||
|
}
|
||||||
|
data = [];
|
||||||
|
for (var key in arrObj) {
|
||||||
|
data.push(arrObj[key]);
|
||||||
|
}
|
||||||
|
fn(data);
|
||||||
|
}
|
||||||
localStorage.removeItem("errors");
|
localStorage.removeItem("errors");
|
@@ -160,7 +160,6 @@ ipc.on('memory', function (event, arg) {
|
|||||||
})
|
})
|
||||||
//update.html
|
//update.html
|
||||||
ipc.on('prog', function (event, arg) {
|
ipc.on('prog', function (event, arg) {
|
||||||
console.log(arg)
|
|
||||||
postMessage(["updateProg", arg], "*")
|
postMessage(["updateProg", arg], "*")
|
||||||
})
|
})
|
||||||
ipc.on('mess', function (event, arg) {
|
ipc.on('mess', function (event, arg) {
|
||||||
|
533
app/js/platform/punycode.js
Normal file
533
app/js/platform/punycode.js
Normal file
@@ -0,0 +1,533 @@
|
|||||||
|
/*! https://mths.be/punycode v1.4.1 by @mathias */
|
||||||
|
;(function(root) {
|
||||||
|
|
||||||
|
/** Detect free variables */
|
||||||
|
var freeExports = typeof exports == 'object' && exports &&
|
||||||
|
!exports.nodeType && exports;
|
||||||
|
var freeModule = typeof module == 'object' && module &&
|
||||||
|
!module.nodeType && module;
|
||||||
|
var freeGlobal = typeof global == 'object' && global;
|
||||||
|
if (
|
||||||
|
freeGlobal.global === freeGlobal ||
|
||||||
|
freeGlobal.window === freeGlobal ||
|
||||||
|
freeGlobal.self === freeGlobal
|
||||||
|
) {
|
||||||
|
root = freeGlobal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `punycode` object.
|
||||||
|
* @name punycode
|
||||||
|
* @type Object
|
||||||
|
*/
|
||||||
|
var punycode,
|
||||||
|
|
||||||
|
/** Highest positive signed 32-bit float value */
|
||||||
|
maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
|
||||||
|
|
||||||
|
/** Bootstring parameters */
|
||||||
|
base = 36,
|
||||||
|
tMin = 1,
|
||||||
|
tMax = 26,
|
||||||
|
skew = 38,
|
||||||
|
damp = 700,
|
||||||
|
initialBias = 72,
|
||||||
|
initialN = 128, // 0x80
|
||||||
|
delimiter = '-', // '\x2D'
|
||||||
|
|
||||||
|
/** Regular expressions */
|
||||||
|
regexPunycode = /^xn--/,
|
||||||
|
regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
|
||||||
|
regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
|
||||||
|
|
||||||
|
/** Error messages */
|
||||||
|
errors = {
|
||||||
|
'overflow': 'Overflow: input needs wider integers to process',
|
||||||
|
'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
|
||||||
|
'invalid-input': 'Invalid input'
|
||||||
|
},
|
||||||
|
|
||||||
|
/** Convenience shortcuts */
|
||||||
|
baseMinusTMin = base - tMin,
|
||||||
|
floor = Math.floor,
|
||||||
|
stringFromCharCode = String.fromCharCode,
|
||||||
|
|
||||||
|
/** Temporary variable */
|
||||||
|
key;
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A generic error utility function.
|
||||||
|
* @private
|
||||||
|
* @param {String} type The error type.
|
||||||
|
* @returns {Error} Throws a `RangeError` with the applicable error message.
|
||||||
|
*/
|
||||||
|
function error(type) {
|
||||||
|
throw new RangeError(errors[type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A generic `Array#map` utility function.
|
||||||
|
* @private
|
||||||
|
* @param {Array} array The array to iterate over.
|
||||||
|
* @param {Function} callback The function that gets called for every array
|
||||||
|
* item.
|
||||||
|
* @returns {Array} A new array of values returned by the callback function.
|
||||||
|
*/
|
||||||
|
function map(array, fn) {
|
||||||
|
var length = array.length;
|
||||||
|
var result = [];
|
||||||
|
while (length--) {
|
||||||
|
result[length] = fn(array[length]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple `Array#map`-like wrapper to work with domain name strings or email
|
||||||
|
* addresses.
|
||||||
|
* @private
|
||||||
|
* @param {String} domain The domain name or email address.
|
||||||
|
* @param {Function} callback The function that gets called for every
|
||||||
|
* character.
|
||||||
|
* @returns {Array} A new string of characters returned by the callback
|
||||||
|
* function.
|
||||||
|
*/
|
||||||
|
function mapDomain(string, fn) {
|
||||||
|
var parts = string.split('@');
|
||||||
|
var result = '';
|
||||||
|
if (parts.length > 1) {
|
||||||
|
// In email addresses, only the domain name should be punycoded. Leave
|
||||||
|
// the local part (i.e. everything up to `@`) intact.
|
||||||
|
result = parts[0] + '@';
|
||||||
|
string = parts[1];
|
||||||
|
}
|
||||||
|
// Avoid `split(regex)` for IE8 compatibility. See #17.
|
||||||
|
string = string.replace(regexSeparators, '\x2E');
|
||||||
|
var labels = string.split('.');
|
||||||
|
var encoded = map(labels, fn).join('.');
|
||||||
|
return result + encoded;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an array containing the numeric code points of each Unicode
|
||||||
|
* character in the string. While JavaScript uses UCS-2 internally,
|
||||||
|
* this function will convert a pair of surrogate halves (each of which
|
||||||
|
* UCS-2 exposes as separate characters) into a single code point,
|
||||||
|
* matching UTF-16.
|
||||||
|
* @see `punycode.ucs2.encode`
|
||||||
|
* @see <https://mathiasbynens.be/notes/javascript-encoding>
|
||||||
|
* @memberOf punycode.ucs2
|
||||||
|
* @name decode
|
||||||
|
* @param {String} string The Unicode input string (UCS-2).
|
||||||
|
* @returns {Array} The new array of code points.
|
||||||
|
*/
|
||||||
|
function ucs2decode(string) {
|
||||||
|
var output = [],
|
||||||
|
counter = 0,
|
||||||
|
length = string.length,
|
||||||
|
value,
|
||||||
|
extra;
|
||||||
|
while (counter < length) {
|
||||||
|
value = string.charCodeAt(counter++);
|
||||||
|
if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
|
||||||
|
// high surrogate, and there is a next character
|
||||||
|
extra = string.charCodeAt(counter++);
|
||||||
|
if ((extra & 0xFC00) == 0xDC00) { // low surrogate
|
||||||
|
output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
|
||||||
|
} else {
|
||||||
|
// unmatched surrogate; only append this code unit, in case the next
|
||||||
|
// code unit is the high surrogate of a surrogate pair
|
||||||
|
output.push(value);
|
||||||
|
counter--;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
output.push(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a string based on an array of numeric code points.
|
||||||
|
* @see `punycode.ucs2.decode`
|
||||||
|
* @memberOf punycode.ucs2
|
||||||
|
* @name encode
|
||||||
|
* @param {Array} codePoints The array of numeric code points.
|
||||||
|
* @returns {String} The new Unicode string (UCS-2).
|
||||||
|
*/
|
||||||
|
function ucs2encode(array) {
|
||||||
|
return map(array, function(value) {
|
||||||
|
var output = '';
|
||||||
|
if (value > 0xFFFF) {
|
||||||
|
value -= 0x10000;
|
||||||
|
output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
|
||||||
|
value = 0xDC00 | value & 0x3FF;
|
||||||
|
}
|
||||||
|
output += stringFromCharCode(value);
|
||||||
|
return output;
|
||||||
|
}).join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a basic code point into a digit/integer.
|
||||||
|
* @see `digitToBasic()`
|
||||||
|
* @private
|
||||||
|
* @param {Number} codePoint The basic numeric code point value.
|
||||||
|
* @returns {Number} The numeric value of a basic code point (for use in
|
||||||
|
* representing integers) in the range `0` to `base - 1`, or `base` if
|
||||||
|
* the code point does not represent a value.
|
||||||
|
*/
|
||||||
|
function basicToDigit(codePoint) {
|
||||||
|
if (codePoint - 48 < 10) {
|
||||||
|
return codePoint - 22;
|
||||||
|
}
|
||||||
|
if (codePoint - 65 < 26) {
|
||||||
|
return codePoint - 65;
|
||||||
|
}
|
||||||
|
if (codePoint - 97 < 26) {
|
||||||
|
return codePoint - 97;
|
||||||
|
}
|
||||||
|
return base;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a digit/integer into a basic code point.
|
||||||
|
* @see `basicToDigit()`
|
||||||
|
* @private
|
||||||
|
* @param {Number} digit The numeric value of a basic code point.
|
||||||
|
* @returns {Number} The basic code point whose value (when used for
|
||||||
|
* representing integers) is `digit`, which needs to be in the range
|
||||||
|
* `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
|
||||||
|
* used; else, the lowercase form is used. The behavior is undefined
|
||||||
|
* if `flag` is non-zero and `digit` has no uppercase form.
|
||||||
|
*/
|
||||||
|
function digitToBasic(digit, flag) {
|
||||||
|
// 0..25 map to ASCII a..z or A..Z
|
||||||
|
// 26..35 map to ASCII 0..9
|
||||||
|
return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bias adaptation function as per section 3.4 of RFC 3492.
|
||||||
|
* https://tools.ietf.org/html/rfc3492#section-3.4
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function adapt(delta, numPoints, firstTime) {
|
||||||
|
var k = 0;
|
||||||
|
delta = firstTime ? floor(delta / damp) : delta >> 1;
|
||||||
|
delta += floor(delta / numPoints);
|
||||||
|
for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
|
||||||
|
delta = floor(delta / baseMinusTMin);
|
||||||
|
}
|
||||||
|
return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a Punycode string of ASCII-only symbols to a string of Unicode
|
||||||
|
* symbols.
|
||||||
|
* @memberOf punycode
|
||||||
|
* @param {String} input The Punycode string of ASCII-only symbols.
|
||||||
|
* @returns {String} The resulting string of Unicode symbols.
|
||||||
|
*/
|
||||||
|
function decode(input) {
|
||||||
|
// Don't use UCS-2
|
||||||
|
var output = [],
|
||||||
|
inputLength = input.length,
|
||||||
|
out,
|
||||||
|
i = 0,
|
||||||
|
n = initialN,
|
||||||
|
bias = initialBias,
|
||||||
|
basic,
|
||||||
|
j,
|
||||||
|
index,
|
||||||
|
oldi,
|
||||||
|
w,
|
||||||
|
k,
|
||||||
|
digit,
|
||||||
|
t,
|
||||||
|
/** Cached calculation results */
|
||||||
|
baseMinusT;
|
||||||
|
|
||||||
|
// Handle the basic code points: let `basic` be the number of input code
|
||||||
|
// points before the last delimiter, or `0` if there is none, then copy
|
||||||
|
// the first basic code points to the output.
|
||||||
|
|
||||||
|
basic = input.lastIndexOf(delimiter);
|
||||||
|
if (basic < 0) {
|
||||||
|
basic = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j = 0; j < basic; ++j) {
|
||||||
|
// if it's not a basic code point
|
||||||
|
if (input.charCodeAt(j) >= 0x80) {
|
||||||
|
error('not-basic');
|
||||||
|
}
|
||||||
|
output.push(input.charCodeAt(j));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main decoding loop: start just after the last delimiter if any basic code
|
||||||
|
// points were copied; start at the beginning otherwise.
|
||||||
|
|
||||||
|
for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
|
||||||
|
|
||||||
|
// `index` is the index of the next character to be consumed.
|
||||||
|
// Decode a generalized variable-length integer into `delta`,
|
||||||
|
// which gets added to `i`. The overflow checking is easier
|
||||||
|
// if we increase `i` as we go, then subtract off its starting
|
||||||
|
// value at the end to obtain `delta`.
|
||||||
|
for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
|
||||||
|
|
||||||
|
if (index >= inputLength) {
|
||||||
|
error('invalid-input');
|
||||||
|
}
|
||||||
|
|
||||||
|
digit = basicToDigit(input.charCodeAt(index++));
|
||||||
|
|
||||||
|
if (digit >= base || digit > floor((maxInt - i) / w)) {
|
||||||
|
error('overflow');
|
||||||
|
}
|
||||||
|
|
||||||
|
i += digit * w;
|
||||||
|
t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
|
||||||
|
|
||||||
|
if (digit < t) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
baseMinusT = base - t;
|
||||||
|
if (w > floor(maxInt / baseMinusT)) {
|
||||||
|
error('overflow');
|
||||||
|
}
|
||||||
|
|
||||||
|
w *= baseMinusT;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
out = output.length + 1;
|
||||||
|
bias = adapt(i - oldi, out, oldi == 0);
|
||||||
|
|
||||||
|
// `i` was supposed to wrap around from `out` to `0`,
|
||||||
|
// incrementing `n` each time, so we'll fix that now:
|
||||||
|
if (floor(i / out) > maxInt - n) {
|
||||||
|
error('overflow');
|
||||||
|
}
|
||||||
|
|
||||||
|
n += floor(i / out);
|
||||||
|
i %= out;
|
||||||
|
|
||||||
|
// Insert `n` at position `i` of the output
|
||||||
|
output.splice(i++, 0, n);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ucs2encode(output);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a string of Unicode symbols (e.g. a domain name label) to a
|
||||||
|
* Punycode string of ASCII-only symbols.
|
||||||
|
* @memberOf punycode
|
||||||
|
* @param {String} input The string of Unicode symbols.
|
||||||
|
* @returns {String} The resulting Punycode string of ASCII-only symbols.
|
||||||
|
*/
|
||||||
|
function encode(input) {
|
||||||
|
var n,
|
||||||
|
delta,
|
||||||
|
handledCPCount,
|
||||||
|
basicLength,
|
||||||
|
bias,
|
||||||
|
j,
|
||||||
|
m,
|
||||||
|
q,
|
||||||
|
k,
|
||||||
|
t,
|
||||||
|
currentValue,
|
||||||
|
output = [],
|
||||||
|
/** `inputLength` will hold the number of code points in `input`. */
|
||||||
|
inputLength,
|
||||||
|
/** Cached calculation results */
|
||||||
|
handledCPCountPlusOne,
|
||||||
|
baseMinusT,
|
||||||
|
qMinusT;
|
||||||
|
|
||||||
|
// Convert the input in UCS-2 to Unicode
|
||||||
|
input = ucs2decode(input);
|
||||||
|
|
||||||
|
// Cache the length
|
||||||
|
inputLength = input.length;
|
||||||
|
|
||||||
|
// Initialize the state
|
||||||
|
n = initialN;
|
||||||
|
delta = 0;
|
||||||
|
bias = initialBias;
|
||||||
|
|
||||||
|
// Handle the basic code points
|
||||||
|
for (j = 0; j < inputLength; ++j) {
|
||||||
|
currentValue = input[j];
|
||||||
|
if (currentValue < 0x80) {
|
||||||
|
output.push(stringFromCharCode(currentValue));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handledCPCount = basicLength = output.length;
|
||||||
|
|
||||||
|
// `handledCPCount` is the number of code points that have been handled;
|
||||||
|
// `basicLength` is the number of basic code points.
|
||||||
|
|
||||||
|
// Finish the basic string - if it is not empty - with a delimiter
|
||||||
|
if (basicLength) {
|
||||||
|
output.push(delimiter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main encoding loop:
|
||||||
|
while (handledCPCount < inputLength) {
|
||||||
|
|
||||||
|
// All non-basic code points < n have been handled already. Find the next
|
||||||
|
// larger one:
|
||||||
|
for (m = maxInt, j = 0; j < inputLength; ++j) {
|
||||||
|
currentValue = input[j];
|
||||||
|
if (currentValue >= n && currentValue < m) {
|
||||||
|
m = currentValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
|
||||||
|
// but guard against overflow
|
||||||
|
handledCPCountPlusOne = handledCPCount + 1;
|
||||||
|
if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
|
||||||
|
error('overflow');
|
||||||
|
}
|
||||||
|
|
||||||
|
delta += (m - n) * handledCPCountPlusOne;
|
||||||
|
n = m;
|
||||||
|
|
||||||
|
for (j = 0; j < inputLength; ++j) {
|
||||||
|
currentValue = input[j];
|
||||||
|
|
||||||
|
if (currentValue < n && ++delta > maxInt) {
|
||||||
|
error('overflow');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentValue == n) {
|
||||||
|
// Represent delta as a generalized variable-length integer
|
||||||
|
for (q = delta, k = base; /* no condition */; k += base) {
|
||||||
|
t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
|
||||||
|
if (q < t) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
qMinusT = q - t;
|
||||||
|
baseMinusT = base - t;
|
||||||
|
output.push(
|
||||||
|
stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
|
||||||
|
);
|
||||||
|
q = floor(qMinusT / baseMinusT);
|
||||||
|
}
|
||||||
|
|
||||||
|
output.push(stringFromCharCode(digitToBasic(q, 0)));
|
||||||
|
bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
|
||||||
|
delta = 0;
|
||||||
|
++handledCPCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
++delta;
|
||||||
|
++n;
|
||||||
|
|
||||||
|
}
|
||||||
|
return output.join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a Punycode string representing a domain name or an email address
|
||||||
|
* to Unicode. Only the Punycoded parts of the input will be converted, i.e.
|
||||||
|
* it doesn't matter if you call it on a string that has already been
|
||||||
|
* converted to Unicode.
|
||||||
|
* @memberOf punycode
|
||||||
|
* @param {String} input The Punycoded domain name or email address to
|
||||||
|
* convert to Unicode.
|
||||||
|
* @returns {String} The Unicode representation of the given Punycode
|
||||||
|
* string.
|
||||||
|
*/
|
||||||
|
function toUnicode(input) {
|
||||||
|
return mapDomain(input, function(string) {
|
||||||
|
return regexPunycode.test(string)
|
||||||
|
? decode(string.slice(4).toLowerCase())
|
||||||
|
: string;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a Unicode string representing a domain name or an email address to
|
||||||
|
* Punycode. Only the non-ASCII parts of the domain name will be converted,
|
||||||
|
* i.e. it doesn't matter if you call it with a domain that's already in
|
||||||
|
* ASCII.
|
||||||
|
* @memberOf punycode
|
||||||
|
* @param {String} input The domain name or email address to convert, as a
|
||||||
|
* Unicode string.
|
||||||
|
* @returns {String} The Punycode representation of the given domain name or
|
||||||
|
* email address.
|
||||||
|
*/
|
||||||
|
function toASCII(input) {
|
||||||
|
return mapDomain(input, function(string) {
|
||||||
|
return regexNonASCII.test(string)
|
||||||
|
? 'xn--' + encode(string)
|
||||||
|
: string;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** Define the public API */
|
||||||
|
punycode = {
|
||||||
|
/**
|
||||||
|
* A string representing the current Punycode.js version number.
|
||||||
|
* @memberOf punycode
|
||||||
|
* @type String
|
||||||
|
*/
|
||||||
|
'version': '1.4.1',
|
||||||
|
/**
|
||||||
|
* An object of methods to convert from JavaScript's internal character
|
||||||
|
* representation (UCS-2) to Unicode code points, and back.
|
||||||
|
* @see <https://mathiasbynens.be/notes/javascript-encoding>
|
||||||
|
* @memberOf punycode
|
||||||
|
* @type Object
|
||||||
|
*/
|
||||||
|
'ucs2': {
|
||||||
|
'decode': ucs2decode,
|
||||||
|
'encode': ucs2encode
|
||||||
|
},
|
||||||
|
'decode': decode,
|
||||||
|
'encode': encode,
|
||||||
|
'toASCII': toASCII,
|
||||||
|
'toUnicode': toUnicode
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Expose `punycode` */
|
||||||
|
// Some AMD build optimizers, like r.js, check for specific condition patterns
|
||||||
|
// like the following:
|
||||||
|
if (
|
||||||
|
typeof define == 'function' &&
|
||||||
|
typeof define.amd == 'object' &&
|
||||||
|
define.amd
|
||||||
|
) {
|
||||||
|
define('punycode', function() {
|
||||||
|
return punycode;
|
||||||
|
});
|
||||||
|
} else if (freeExports && freeModule) {
|
||||||
|
if (module.exports == freeExports) {
|
||||||
|
// in Node.js, io.js, or RingoJS v0.8.0+
|
||||||
|
freeModule.exports = punycode;
|
||||||
|
} else {
|
||||||
|
// in Narwhal or RingoJS v0.7.0-
|
||||||
|
for (key in punycode) {
|
||||||
|
punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// in Rhino or a web browser
|
||||||
|
root.punycode = punycode;
|
||||||
|
}
|
||||||
|
|
||||||
|
}(this));
|
@@ -29,7 +29,6 @@ function post(mode, postvis) {
|
|||||||
}
|
}
|
||||||
if (domain != "kirishima.cloud") {
|
if (domain != "kirishima.cloud") {
|
||||||
if (mode != "pass" && !$("#cw").hasClass("cw-avail") && (str.length > cw_sent || (str.split("\n").length - 1) > cw_ltres)) {
|
if (mode != "pass" && !$("#cw").hasClass("cw-avail") && (str.length > cw_sent || (str.split("\n").length - 1) > cw_ltres)) {
|
||||||
console.log("out")
|
|
||||||
var plus = str.replace(/\n/g, "").slice(0, 10) + "...";
|
var plus = str.replace(/\n/g, "").slice(0, 10) + "...";
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: lang.lang_post_cwtitle,
|
title: lang.lang_post_cwtitle,
|
||||||
@@ -43,7 +42,6 @@ function post(mode, postvis) {
|
|||||||
showCloseButton: true,
|
showCloseButton: true,
|
||||||
focusConfirm: false,
|
focusConfirm: false,
|
||||||
}).then((result) => {
|
}).then((result) => {
|
||||||
console.log(result)
|
|
||||||
if (result.dismiss == "cancel") {
|
if (result.dismiss == "cancel") {
|
||||||
//btn3:sonomama
|
//btn3:sonomama
|
||||||
post("pass")
|
post("pass")
|
||||||
|
@@ -66,7 +66,7 @@ input.addEventListener("focus", function () {
|
|||||||
}
|
}
|
||||||
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");
|
||||||
suggest = "https://" + domain + "/api/v1/search?q=" + q
|
suggest = "https://" + domain + "/api/v2/search?q=" + q
|
||||||
if (suggest != oldSuggest) {
|
if (suggest != oldSuggest) {
|
||||||
console.log("Try to get suggest at " + suggest)
|
console.log("Try to get suggest at " + suggest)
|
||||||
fetch(suggest, {
|
fetch(suggest, {
|
||||||
@@ -81,18 +81,43 @@ input.addEventListener("focus", function () {
|
|||||||
todo(error);
|
todo(error);
|
||||||
console.error(error);
|
console.error(error);
|
||||||
}).then(function (json) {
|
}).then(function (json) {
|
||||||
|
console.log(["Search", json]);
|
||||||
|
//ハッシュタグ
|
||||||
if (json.hashtags[0] && tag) {
|
if (json.hashtags[0] && tag) {
|
||||||
if (tag[1]) {
|
if (tag[1]) {
|
||||||
var tags = "";
|
var tags = [];
|
||||||
Object.keys(json.hashtags).forEach(function (key4) {
|
Object.keys(json.hashtags).forEach(function (key4) {
|
||||||
var tag = json.hashtags[key4];
|
var tag = json.hashtags[key4];
|
||||||
if (tag != q) {
|
var his = tag.history;
|
||||||
tags = tags + '<a onclick="tagInsert(\'#' + tag + '\',\'#' + q +
|
var uses = his[0].uses * 1 + his[1].uses * 1 + his[2].uses * 1 + his[3].uses * 1 + his[4].uses * 1 + his[5].uses * 1 + his[6].uses * 1;
|
||||||
'\')" class="pointer">#' + tag + '</a><br>';
|
tagHTML = '<br><a onclick="tagInsert(\'#' + escapeHTML(tag.name) + '\',\'#' + q + '\')" class="pointer">#' +
|
||||||
|
escapeHTML(tag.name) + '</a> ' + uses + 'toot(s)'
|
||||||
|
var item = {
|
||||||
|
"uses": uses,
|
||||||
|
"html": tagHTML
|
||||||
|
}
|
||||||
|
tags.push(item)
|
||||||
|
});
|
||||||
|
var num_a = -1;
|
||||||
|
var num_b = 1;
|
||||||
|
tags = tags.sort(function (a, b) {
|
||||||
|
var x = a["uses"];
|
||||||
|
var y = b["uses"];
|
||||||
|
if (x > y) return num_a;
|
||||||
|
if (x < y) return num_b;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
var ins = ""
|
||||||
|
var nev = false
|
||||||
|
Object.keys(tags).forEach(function (key7) {
|
||||||
|
ins = ins + tags[key7].html
|
||||||
|
if (key7 <= 0 && !nev) {
|
||||||
|
ins = ins + '<br>'
|
||||||
|
nev = true
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
$("#suggest").html(ins);
|
||||||
$("#right-side").show()
|
$("#right-side").show()
|
||||||
$("#suggest").html("Tags:<br>" + tags);
|
|
||||||
$("#poll").addClass("hide")
|
$("#poll").addClass("hide")
|
||||||
$("#emoji").addClass("hide")
|
$("#emoji").addClass("hide")
|
||||||
}
|
}
|
||||||
|
@@ -82,7 +82,7 @@ function details(id, acct_id, tlid, mode) {
|
|||||||
} else {
|
} else {
|
||||||
$("#tootmodal").attr("data-user", scn);
|
$("#tootmodal").attr("data-user", scn);
|
||||||
}
|
}
|
||||||
context(id, acct_id);
|
getContext(id, acct_id);
|
||||||
var dom = null;
|
var dom = null;
|
||||||
if (!local) {
|
if (!local) {
|
||||||
dom = scn.replace(/.+@/g, '');
|
dom = scn.replace(/.+@/g, '');
|
||||||
@@ -156,7 +156,7 @@ function replyTL(id, acct_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//コンテクストってなんですか
|
//コンテクストってなんですか
|
||||||
function context(id, acct_id) {
|
function getContext(id, acct_id) {
|
||||||
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");
|
||||||
if (localStorage.getItem("mode_" + domain) == "misskey") {
|
if (localStorage.getItem("mode_" + domain) == "misskey") {
|
||||||
|
@@ -1001,7 +1001,6 @@ function connectMisskey(acct_id, re) {
|
|||||||
var mute = [];
|
var mute = [];
|
||||||
if (data.body.id.indexOf("notf:") !== -1) {
|
if (data.body.id.indexOf("notf:") !== -1) {
|
||||||
var obj = JSON.parse(mess.data).body;
|
var obj = JSON.parse(mess.data).body;
|
||||||
console.log(obj);
|
|
||||||
var popup = localStorage.getItem("popup");
|
var popup = localStorage.getItem("popup");
|
||||||
if (!popup) {
|
if (!popup) {
|
||||||
popup = 0;
|
popup = 0;
|
||||||
|
@@ -481,8 +481,25 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
var urls = $.strip_tags(content).replace(/\n/g, " ").match(
|
var urls = $.strip_tags(content).replace(/\n/g, " ").match(
|
||||||
/https?:\/\/([-a-zA-Z0-9@.]+)\/?(?!.*((media|tags)|mentions)).*([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?/
|
/https?:\/\/([^+_]+)\/?(?!.*((media|tags)|mentions)).*([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?/
|
||||||
);
|
);
|
||||||
|
urlsck = content.match(/(https?):\/\/([^<>]*?)\/([^"]*)/g)
|
||||||
|
if (urlsck) {
|
||||||
|
for (var urlct = 0; urlct < urlsck.length; urlct++) {
|
||||||
|
var urlindv = urlsck[urlct]
|
||||||
|
urlCont = urlindv.match(/(https?):\/\/([^a-zA-Z0-9.-]*?)\.(.+?)\/([^"]*)/)
|
||||||
|
if (urlCont) {
|
||||||
|
urlindv = urlindv.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&")
|
||||||
|
var encoded = encodeURI(urlCont[4])
|
||||||
|
var punycoded = "xn--" + punycode.encode(urlCont[2])
|
||||||
|
var eUrl = urlCont[1] + "://" + punycoded + "." + urlCont[3] + "/" + encoded
|
||||||
|
var regExp = new RegExp('href="' + urlindv + '"', "g")
|
||||||
|
content = content.replace(regExp, 'href="' + eUrl + '"')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (urls) {
|
if (urls) {
|
||||||
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
|
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
|
||||||
',\'' + id + '\')" class="add-show pointer">' + lang.lang_parse_url + '</a><br>';
|
',\'' + id + '\')" class="add-show pointer">' + lang.lang_parse_url + '</a><br>';
|
||||||
@@ -525,60 +542,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
|||||||
'"><i class="far fa-calendar-times"></i>' +
|
'"><i class="far fa-calendar-times"></i>' +
|
||||||
ended + '</span></div>';
|
ended + '</span></div>';
|
||||||
}
|
}
|
||||||
if (toot.emojis) {
|
|
||||||
var emojick = toot.emojis[0];
|
|
||||||
} else {
|
|
||||||
var emojick = false;
|
|
||||||
}
|
|
||||||
//絵文字があれば
|
|
||||||
if (emojick) {
|
|
||||||
Object.keys(toot.emojis).forEach(function (key5) {
|
|
||||||
var emoji = toot.emojis[key5];
|
|
||||||
var shortcode = emoji.shortcode;
|
|
||||||
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);
|
|
||||||
poll = poll.replace(regExp, emoji_url);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//ニコフレ絵文字
|
|
||||||
if (toot.profile_emojis) {
|
|
||||||
var nicoemojick = toot.profile_emojis[0];
|
|
||||||
} else {
|
|
||||||
var nicoemojick = false;
|
|
||||||
}
|
|
||||||
//絵文字があれば(nico)
|
|
||||||
if (nicoemojick) {
|
|
||||||
Object.keys(toot.profile_emojis).forEach(function (keynico) {
|
|
||||||
var emoji = toot.profile_emojis[keynico];
|
|
||||||
var shortcode = emoji.shortcode;
|
|
||||||
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);
|
|
||||||
poll = poll.replace(regExp, emoji_url);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//デフォ絵文字
|
|
||||||
content = twemoji.parse(content);
|
|
||||||
if (dis_name) {
|
|
||||||
dis_name = twemoji.parse(dis_name);
|
|
||||||
}
|
|
||||||
if (spoil) {
|
|
||||||
spoil = twemoji.parse(spoil);
|
|
||||||
}
|
|
||||||
if (noticetext) {
|
|
||||||
noticetext = twemoji.parse(noticetext);
|
|
||||||
}
|
|
||||||
if (notice) {
|
|
||||||
notice = twemoji.parse(notice);
|
|
||||||
}
|
|
||||||
if (poll) {
|
|
||||||
poll = twemoji.parse(poll);
|
|
||||||
}
|
|
||||||
var mediack = toot.media_attachments[0];
|
var mediack = toot.media_attachments[0];
|
||||||
//メディアがあれば
|
//メディアがあれば
|
||||||
var media_ids = "";
|
var media_ids = "";
|
||||||
@@ -594,8 +558,8 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
|||||||
if (toot.sensitive && nsfw) {
|
if (toot.sensitive && nsfw) {
|
||||||
var sense = "sensitive"
|
var sense = "sensitive"
|
||||||
var blur = media.blurhash
|
var blur = media.blurhash
|
||||||
|
nsfwmes = '<div class="nsfw-media">' + lang.lang_parse_nsfw + '</div>'
|
||||||
if (blur) {
|
if (blur) {
|
||||||
nsfwmes = '<div class="nsfw-media">' + lang.lang_parse_nsfw + '</div>'
|
|
||||||
purl = parseBlur(blur)
|
purl = parseBlur(blur)
|
||||||
var sense = ""
|
var sense = ""
|
||||||
}
|
}
|
||||||
@@ -608,7 +572,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
|||||||
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
||||||
'" data-type="video" class="img-parsed"><video src="' +
|
'" data-type="video" class="img-parsed"><video src="' +
|
||||||
purl + '" class="' + sense +
|
purl + '" class="' + sense +
|
||||||
' toot-img pointer" style="max-width:100%;"></a></span>';
|
' toot-img pointer" style="max-width:100%;" loop="true"></a></span>';
|
||||||
} else {
|
} else {
|
||||||
if (media.type == "unknown") {
|
if (media.type == "unknown") {
|
||||||
viewer = viewer + '<a href="' + media.remote_url + '" title="' + media.remote_url + '">[' + lang.lang_parse_unknown + ']</a> '
|
viewer = viewer + '<a href="' + media.remote_url + '" title="' + media.remote_url + '">[' + lang.lang_parse_unknown + ']</a> '
|
||||||
@@ -736,7 +700,6 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
|||||||
if (wordmuteList) {
|
if (wordmuteList) {
|
||||||
Object.keys(wordmuteList).forEach(function (key8) {
|
Object.keys(wordmuteList).forEach(function (key8) {
|
||||||
var worde = wordmuteList[key8];
|
var worde = wordmuteList[key8];
|
||||||
console.log(worde)
|
|
||||||
if (worde) {
|
if (worde) {
|
||||||
if (worde.tag) {
|
if (worde.tag) {
|
||||||
var wordList = worde.tag;
|
var wordList = worde.tag;
|
||||||
@@ -761,6 +724,60 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (toot.emojis) {
|
||||||
|
var emojick = toot.emojis[0];
|
||||||
|
} else {
|
||||||
|
var emojick = false;
|
||||||
|
}
|
||||||
|
//絵文字があれば
|
||||||
|
if (emojick) {
|
||||||
|
Object.keys(toot.emojis).forEach(function (key5) {
|
||||||
|
var emoji = toot.emojis[key5];
|
||||||
|
var shortcode = emoji.shortcode;
|
||||||
|
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);
|
||||||
|
poll = poll.replace(regExp, emoji_url);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//ニコフレ絵文字
|
||||||
|
if (toot.profile_emojis) {
|
||||||
|
var nicoemojick = toot.profile_emojis[0];
|
||||||
|
} else {
|
||||||
|
var nicoemojick = false;
|
||||||
|
}
|
||||||
|
//絵文字があれば(nico)
|
||||||
|
if (nicoemojick) {
|
||||||
|
Object.keys(toot.profile_emojis).forEach(function (keynico) {
|
||||||
|
var emoji = toot.profile_emojis[keynico];
|
||||||
|
var shortcode = emoji.shortcode;
|
||||||
|
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);
|
||||||
|
poll = poll.replace(regExp, emoji_url);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//デフォ絵文字
|
||||||
|
content = twemoji.parse(content);
|
||||||
|
if (dis_name) {
|
||||||
|
dis_name = twemoji.parse(dis_name);
|
||||||
|
}
|
||||||
|
if (spoil) {
|
||||||
|
spoil = twemoji.parse(spoil);
|
||||||
|
}
|
||||||
|
if (noticetext) {
|
||||||
|
noticetext = twemoji.parse(noticetext);
|
||||||
|
}
|
||||||
|
if (notice) {
|
||||||
|
notice = twemoji.parse(notice);
|
||||||
|
}
|
||||||
|
if (poll) {
|
||||||
|
poll = twemoji.parse(poll);
|
||||||
|
}
|
||||||
//日本語じゃない
|
//日本語じゃない
|
||||||
if (toot.language != lang.language && toot.language) {
|
if (toot.language != lang.language && toot.language) {
|
||||||
var trans = '<div class="action pin"><a onclick="trans(\'' + toot.language + '\',\'' + lang.language + '\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_trans + '"><i class="material-icons">g_translate</i></a></div>';
|
var trans = '<div class="action pin"><a onclick="trans(\'' + toot.language + '\',\'' + lang.language + '\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_trans + '"><i class="material-icons">g_translate</i></a></div>';
|
||||||
@@ -847,7 +864,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
|||||||
'<div class="action ' + disp["re"] + ' ' + noauth + '"><a onclick="re(\'' + toot.id +
|
'<div class="action ' + disp["re"] + ' ' + noauth + '"><a onclick="re(\'' + toot.id +
|
||||||
'\',\'' + to_mention + '\',' +
|
'\',\'' + to_mention + '\',' +
|
||||||
acct_id + ',\'' + visen +
|
acct_id + ',\'' + visen +
|
||||||
'\')" class="waves-effect waves-dark btn-flat actct rep-btn" data-men="' + to_mention +'" data-visen="' + visen +'" style="padding:0" title="' + lang.lang_parse_replyto + '"><i class="fas fa-share"></i><span class="rep_ct">' + replyct +
|
'\')" class="waves-effect waves-dark btn-flat actct rep-btn" data-men="' + to_mention + '" data-visen="' + visen + '" style="padding:0" title="' + lang.lang_parse_replyto + '"><i class="fas fa-share"></i><span class="rep_ct">' + replyct +
|
||||||
'</a></span></a></div>' +
|
'</a></span></a></div>' +
|
||||||
'<div class="action ' + can_rt + ' ' + disp["rt"] + ' ' + noauth + '"><a onclick="rt(\'' + toot.id + '\',' + acct_id +
|
'<div class="action ' + can_rt + ' ' + disp["rt"] + ' ' + noauth + '"><a onclick="rt(\'' + toot.id + '\',' + acct_id +
|
||||||
',\'' + tlid +
|
',\'' + tlid +
|
||||||
@@ -897,119 +914,122 @@ function userparse(obj, auth, acct_id, tlid, popup) {
|
|||||||
var datetype = localStorage.getItem("datetype");
|
var datetype = localStorage.getItem("datetype");
|
||||||
Object.keys(obj).forEach(function (key) {
|
Object.keys(obj).forEach(function (key) {
|
||||||
var toot = obj[key];
|
var toot = obj[key];
|
||||||
console.log(["Parsing", toot])
|
if (toot) {
|
||||||
if (!toot.username) {
|
console.log(["Parsing", toot])
|
||||||
var raw = toot;
|
if (!toot.username) {
|
||||||
toot = toot.account;
|
var raw = toot;
|
||||||
var notf = true;
|
toot = toot.account;
|
||||||
} else {
|
var notf = true;
|
||||||
var notf = false;
|
} else {
|
||||||
}
|
var notf = false;
|
||||||
if (toot.locked) {
|
|
||||||
var locked = ' <i class="fas fa-lock red-text"></i>';
|
|
||||||
} else {
|
|
||||||
var locked = "";
|
|
||||||
}
|
|
||||||
if (auth == "request") {
|
|
||||||
var authhtml = '<i class="material-icons gray pointer" onclick="request(\'' +
|
|
||||||
toot.id + '\',\'authorize\',' + acct_id + ')" title="Accept">person_add</i> <i class="material-icons gray pointer" onclick="request(\'' +
|
|
||||||
toot.id + '\',\'reject\',' + acct_id + ')" title="Reject">person_add_disabled</i>';
|
|
||||||
} else {
|
|
||||||
var authhtml = "";
|
|
||||||
}
|
|
||||||
var ftxt = lang.lang_parse_followed;
|
|
||||||
if (!locale && localStorage.getItem("followlocale_" + acct_id)) {
|
|
||||||
ftxt = localStorage.getItem("followlocale_" + acct_id);
|
|
||||||
}
|
|
||||||
if (popup > 0 || popup == -1 || notf) {
|
|
||||||
var notftext = ftxt + '<br>';
|
|
||||||
} else {
|
|
||||||
var notftext = "";
|
|
||||||
}
|
|
||||||
var memory = localStorage.getItem("notice-mem");
|
|
||||||
if (popup >= 0 && obj.length < 5 && notftext != memory) {
|
|
||||||
M.toast({ html: escapeHTML(toot.display_name) + ":" + ftxt, displayLength: popup * 1000 })
|
|
||||||
$(".notf-icon_" + tlid).addClass("red-text");
|
|
||||||
localStorage.setItem("notice-mem", notftext);
|
|
||||||
notftext = "";
|
|
||||||
var native = localStorage.getItem("nativenotf");
|
|
||||||
if (!native) {
|
|
||||||
native = "yes";
|
|
||||||
}
|
}
|
||||||
if (native == "yes") {
|
if (toot.locked) {
|
||||||
var os = localStorage.getItem("platform");
|
var locked = ' <i class="fas fa-lock red-text"></i>';
|
||||||
var options = {
|
} else {
|
||||||
body: toot.display_name + "(" + toot.acct + ")" + ftxt,
|
var locked = "";
|
||||||
icon: toot.avatar
|
}
|
||||||
};
|
if (auth == "request") {
|
||||||
var domain = localStorage.getItem("domain_" + acct_id);
|
var authhtml = '<i class="material-icons gray pointer" onclick="request(\'' +
|
||||||
if (os == "darwin") {
|
toot.id + '\',\'authorize\',' + acct_id + ')" title="Accept">person_add</i> <i class="material-icons gray pointer" onclick="request(\'' +
|
||||||
var n = new Notification('TheDesk:' + domain, options);
|
toot.id + '\',\'reject\',' + acct_id + ')" title="Reject">person_add_disabled</i>';
|
||||||
} else {
|
} else {
|
||||||
var nativeNotfOpt = [
|
var authhtml = "";
|
||||||
'TheDesk:' + domain,
|
}
|
||||||
toot.display_name + "(" + toot.acct + ")" + ftxt,
|
var ftxt = lang.lang_parse_followed;
|
||||||
toot.avatar,
|
if (!locale && localStorage.getItem("followlocale_" + acct_id)) {
|
||||||
"userdata",
|
ftxt = localStorage.getItem("followlocale_" + acct_id);
|
||||||
acct_id,
|
}
|
||||||
toot.id
|
if (popup > 0 || popup == -1 || notf) {
|
||||||
]
|
var notftext = ftxt + '<br>';
|
||||||
postMessage(["nativeNotf", nativeNotfOpt], "*")
|
} else {
|
||||||
|
var notftext = "";
|
||||||
|
}
|
||||||
|
var memory = localStorage.getItem("notice-mem");
|
||||||
|
if (popup >= 0 && obj.length < 5 && notftext != memory) {
|
||||||
|
M.toast({ html: escapeHTML(toot.display_name) + ":" + ftxt, displayLength: popup * 1000 })
|
||||||
|
$(".notf-icon_" + tlid).addClass("red-text");
|
||||||
|
localStorage.setItem("notice-mem", notftext);
|
||||||
|
notftext = "";
|
||||||
|
var native = localStorage.getItem("nativenotf");
|
||||||
|
if (!native) {
|
||||||
|
native = "yes";
|
||||||
|
}
|
||||||
|
if (native == "yes") {
|
||||||
|
var os = localStorage.getItem("platform");
|
||||||
|
var options = {
|
||||||
|
body: toot.display_name + "(" + toot.acct + ")" + ftxt,
|
||||||
|
icon: toot.avatar
|
||||||
|
};
|
||||||
|
var domain = localStorage.getItem("domain_" + acct_id);
|
||||||
|
if (os == "darwin") {
|
||||||
|
var n = new Notification('TheDesk:' + domain, options);
|
||||||
|
} else {
|
||||||
|
var nativeNotfOpt = [
|
||||||
|
'TheDesk:' + domain,
|
||||||
|
toot.display_name + "(" + toot.acct + ")" + ftxt,
|
||||||
|
toot.avatar,
|
||||||
|
"userdata",
|
||||||
|
acct_id,
|
||||||
|
toot.id
|
||||||
|
]
|
||||||
|
postMessage(["nativeNotf", nativeNotfOpt], "*")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if (toot.display_name) {
|
||||||
if (toot.display_name) {
|
var dis_name = escapeHTML(toot.display_name);
|
||||||
var dis_name = escapeHTML(toot.display_name);
|
} else {
|
||||||
} else {
|
var dis_name = toot.username;
|
||||||
var dis_name = toot.username;
|
}
|
||||||
}
|
//ネイティブ通知
|
||||||
//ネイティブ通知
|
|
||||||
|
|
||||||
if (toot.emojis) {
|
if (toot.emojis) {
|
||||||
var actemojick = toot.emojis[0];
|
var actemojick = toot.emojis[0];
|
||||||
} else {
|
} else {
|
||||||
var actemojick = false;
|
var actemojick = false;
|
||||||
}
|
}
|
||||||
//絵文字があれば
|
//絵文字があれば
|
||||||
if (actemojick) {
|
if (actemojick) {
|
||||||
Object.keys(toot.emojis).forEach(function (key5) {
|
Object.keys(toot.emojis).forEach(function (key5) {
|
||||||
var emoji = toot.emojis[key5];
|
var emoji = toot.emojis[key5];
|
||||||
var shortcode = emoji.shortcode;
|
var shortcode = emoji.shortcode;
|
||||||
var emoji_url = '<img draggable="false" src="' + emoji.url +
|
var emoji_url = '<img draggable="false" src="' + emoji.url +
|
||||||
'" class="emoji-img" data-emoji="' + shortcode + '" alt=" :' + shortcode + ': ">';
|
'" class="emoji-img" data-emoji="' + shortcode + '" alt=" :' + shortcode + ': ">';
|
||||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||||
dis_name = dis_name.replace(regExp, emoji_url);
|
dis_name = dis_name.replace(regExp, emoji_url);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (dis_name) {
|
if (dis_name) {
|
||||||
dis_name = twemoji.parse(dis_name);
|
dis_name = twemoji.parse(dis_name);
|
||||||
}
|
}
|
||||||
if (toot.avatar) {
|
if (toot.avatar) {
|
||||||
var avatar = toot.avatar;
|
var avatar = toot.avatar;
|
||||||
} else {
|
} else {
|
||||||
var avatar = "../../img/missing.svg";
|
var avatar = "../../img/missing.svg";
|
||||||
|
}
|
||||||
|
|
||||||
|
templete = templete +
|
||||||
|
'<div class="cvo" style="padding-top:5px;" user-id="' + toot.id + '"><div class="area-notice">' +
|
||||||
|
notftext +
|
||||||
|
'</div><div class="area-icon"><a onclick="udg(\'' + toot.id + '\',' +
|
||||||
|
acct_id + ');" user="' + toot.acct + '" class="udg">' +
|
||||||
|
'<img draggable="false" src="' + avatar + '" width="40" class="prof-img" user="' + toot
|
||||||
|
.acct + '"></a></div>' +
|
||||||
|
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
|
||||||
|
dis_name + '</span>' +
|
||||||
|
'<span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
|
||||||
|
toot.acct + locked + '</span>' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>' +
|
||||||
|
'<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' +
|
||||||
|
toot.following_count +
|
||||||
|
'</div><div class="cbadge" style="width:100px;">Followers:' + toot.followers_count +
|
||||||
|
'</div>' + authhtml +
|
||||||
|
'</div>' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
templete = templete +
|
|
||||||
'<div class="cvo" style="padding-top:5px;" user-id="' + toot.id + '"><div class="area-notice">' +
|
|
||||||
notftext +
|
|
||||||
'</div><div class="area-icon"><a onclick="udg(\'' + toot.id + '\',' +
|
|
||||||
acct_id + ');" user="' + toot.acct + '" class="udg">' +
|
|
||||||
'<img draggable="false" src="' + avatar + '" width="40" class="prof-img" user="' + toot
|
|
||||||
.acct + '"></a></div>' +
|
|
||||||
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
|
|
||||||
dis_name + '</span>' +
|
|
||||||
'<span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
|
|
||||||
toot.acct + locked + '</span>' +
|
|
||||||
'</div>' +
|
|
||||||
'</div>' +
|
|
||||||
'<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' +
|
|
||||||
toot.following_count +
|
|
||||||
'</div><div class="cbadge" style="width:100px;">Followers:' + toot.followers_count +
|
|
||||||
'</div>' + authhtml +
|
|
||||||
'</div>' +
|
|
||||||
'</div>' +
|
|
||||||
'</div>';
|
|
||||||
|
|
||||||
});
|
});
|
||||||
return templete;
|
return templete;
|
||||||
@@ -1030,7 +1050,6 @@ function client(name) {
|
|||||||
showCloseButton: true,
|
showCloseButton: true,
|
||||||
focusConfirm: false,
|
focusConfirm: false,
|
||||||
}).then((result) => {
|
}).then((result) => {
|
||||||
console.log(result)
|
|
||||||
if (result.dismiss == "cancel") {
|
if (result.dismiss == "cancel") {
|
||||||
//Emp
|
//Emp
|
||||||
var cli = localStorage.getItem("client_emp");
|
var cli = localStorage.getItem("client_emp");
|
||||||
|
@@ -177,12 +177,12 @@ function graphDraw(tag, acct_id) {
|
|||||||
var zero = 50 - (his[0].uses / max * 50);
|
var zero = 50 - (his[0].uses / max * 50);
|
||||||
if (max === 0) {
|
if (max === 0) {
|
||||||
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">' +
|
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">' +
|
||||||
'</svg><span style="font-size:200%">' + his[0].uses + '</span>toots <a onclick="tl(\'tag\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
|
'</svg><span style="font-size:200%">' + his[0].uses + '</span>toot(s) <a onclick="tl(\'tag\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
|
||||||
'\',\'add\')" class="pointer">#' + escapeHTML(tag.name) + '</a> ' + his[0].accounts + lang.lang_src_people;
|
'\',\'add\')" class="pointer">#' + escapeHTML(tag.name) + '</a> ' + his[0].accounts + lang.lang_src_people;
|
||||||
} else {
|
} else {
|
||||||
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">' +
|
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">' +
|
||||||
'<g><path d="M0,' + six + ' L10,' + five + ' 20,' + four + ' 30,' + three + ' 40,' + two + ' 50,' + one + ' 60,' + zero + '" style="stroke: #9e9e9e; stroke-width: 1;fill: none;"></path></g>' +
|
'<g><path d="M0,' + six + ' L10,' + five + ' 20,' + four + ' 30,' + three + ' 40,' + two + ' 50,' + one + ' 60,' + zero + '" style="stroke: #9e9e9e; stroke-width: 1;fill: none;"></path></g>' +
|
||||||
'</svg><span style="font-size:200%">' + his[0].uses + '</span>toots <a onclick="tl(\'tag\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
|
'</svg><span style="font-size:200%">' + his[0].uses + '</span>toot <a onclick="tl(\'tag\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
|
||||||
'\',\'add\')" class="pointer">#' + escapeHTML(tag.name) + '</a> ' + his[0].accounts + lang.lang_src_people;
|
'\',\'add\')" class="pointer">#' + escapeHTML(tag.name) + '</a> ' + his[0].accounts + lang.lang_src_people;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -70,7 +70,6 @@ if (location.search) {
|
|||||||
var mode = m[1];
|
var mode = m[1];
|
||||||
var codex = m[2];
|
var codex = m[2];
|
||||||
if (mode == "share") {
|
if (mode == "share") {
|
||||||
console.log(codex);
|
|
||||||
$('textarea').focus();
|
$('textarea').focus();
|
||||||
$("#textarea").val(decodeURI(codex));
|
$("#textarea").val(decodeURI(codex));
|
||||||
show();
|
show();
|
||||||
|
@@ -357,7 +357,6 @@ function relations(user, acct_id) {
|
|||||||
console.error(error);
|
console.error(error);
|
||||||
}).then(function (json) {
|
}).then(function (json) {
|
||||||
var json = json[0];
|
var json = json[0];
|
||||||
console.log(json);
|
|
||||||
if (json.following) {
|
if (json.following) {
|
||||||
//自分がフォローしている
|
//自分がフォローしている
|
||||||
$("#his-data").addClass("following");
|
$("#his-data").addClass("following");
|
||||||
|
35
app/main.js
35
app/main.js
@@ -18,6 +18,27 @@ const app = electron.app;
|
|||||||
const BrowserWindow = electron.BrowserWindow;
|
const BrowserWindow = electron.BrowserWindow;
|
||||||
// メインウィンドウはGCされないようにグローバル宣言
|
// メインウィンドウはGCされないようにグローバル宣言
|
||||||
let mainWindow;
|
let mainWindow;
|
||||||
|
if (process.argv.indexOf("--dev") === -1) {
|
||||||
|
var packaged = true;
|
||||||
|
} else {
|
||||||
|
var packaged = false;
|
||||||
|
console.log(
|
||||||
|
"||\\\\\\ \n"+
|
||||||
|
"|||| \\\\\\\\ \n"+
|
||||||
|
"|||| \\\\\\\\ \n"+
|
||||||
|
"|||| Am I a \\\\\\\\ \n"+
|
||||||
|
"|||| cat? ^ ^ \\\\\\\\\\ _____ _ ____ _ \n"+
|
||||||
|
"|||| (.-.) \\\\\\\\\\ |_ _| |__ ___| _ \\ ___ ___| | __\n"+
|
||||||
|
"|||| ___> ) ||||| | | | '_ \\ / _ \\ | | |/ _ \\/ __| |/ /\n"+
|
||||||
|
"|||| < _ _) ////// | | | | | | __/ |_| | __/\__ \\ < \n"+
|
||||||
|
"|||| |_||_| ///// |_| |_| |_|\\___|____/ \\___||___/_|\\_\\ \n"+
|
||||||
|
"|||| ///// \n"+
|
||||||
|
"|||| /////\n"+
|
||||||
|
"|||| /////\n"+
|
||||||
|
"||||//////"
|
||||||
|
)
|
||||||
|
console.log("Welcome!")
|
||||||
|
}
|
||||||
var info_path = join(app.getPath("userData"), "window-size.json");
|
var info_path = join(app.getPath("userData"), "window-size.json");
|
||||||
var max_info_path = join(app.getPath("userData"), "max-window-size.json");
|
var max_info_path = join(app.getPath("userData"), "max-window-size.json");
|
||||||
var lang_path = join(app.getPath("userData"), "language");
|
var lang_path = join(app.getPath("userData"), "language");
|
||||||
@@ -25,9 +46,9 @@ var ha_path = join(app.getPath("userData"), "hardwareAcceleration");
|
|||||||
try {
|
try {
|
||||||
fs.readFileSync(ha_path, 'utf8');
|
fs.readFileSync(ha_path, 'utf8');
|
||||||
app.disableHardwareAcceleration()
|
app.disableHardwareAcceleration()
|
||||||
console.log("disabled: HA");
|
if(!packaged) console.log("disabled: Hardware Acceleration");
|
||||||
} catch{
|
} catch{
|
||||||
console.log("enabled: HA");
|
if(!packaged) console.log("enabled: Hardware Acceleration");
|
||||||
}
|
}
|
||||||
var window_size;
|
var window_size;
|
||||||
try {
|
try {
|
||||||
@@ -74,7 +95,6 @@ app.on('activate', function () {
|
|||||||
|
|
||||||
function createWindow() {
|
function createWindow() {
|
||||||
if (isFile(lang_path)) {
|
if (isFile(lang_path)) {
|
||||||
console.log("exist");
|
|
||||||
var lang = fs.readFileSync(lang_path, 'utf8');
|
var lang = fs.readFileSync(lang_path, 'utf8');
|
||||||
} else {
|
} else {
|
||||||
var langs = app.getLocale();
|
var langs = app.getLocale();
|
||||||
@@ -88,8 +108,8 @@ function createWindow() {
|
|||||||
fs.writeFileSync(lang_path, lang);
|
fs.writeFileSync(lang_path, lang);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
console.log(app.getLocale());
|
if(!packaged) console.log("your lang:" + app.getLocale());
|
||||||
console.log("launch:" + lang);
|
if(!packaged) console.log("launch:" + lang);
|
||||||
// メイン画面の表示。ウィンドウの幅、高さを指定できる
|
// メイン画面の表示。ウィンドウの幅、高さを指定できる
|
||||||
var platform = process.platform;
|
var platform = process.platform;
|
||||||
var bit = process.arch;
|
var bit = process.arch;
|
||||||
@@ -173,11 +193,6 @@ function createWindow() {
|
|||||||
|
|
||||||
var platform = process.platform;
|
var platform = process.platform;
|
||||||
var bit = process.arch;
|
var bit = process.arch;
|
||||||
if (process.argv.indexOf("--dev") === -1) {
|
|
||||||
packaged = true;
|
|
||||||
} else {
|
|
||||||
packaged = false;
|
|
||||||
}
|
|
||||||
Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang, mainWindow, packaged, dir)));
|
Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang, mainWindow, packaged, dir)));
|
||||||
//CSS
|
//CSS
|
||||||
css.css(mainWindow);
|
css.css(mainWindow);
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "thedesk",
|
"name": "thedesk",
|
||||||
"version": "18.7.0",
|
"version": "18.7.1",
|
||||||
"description": "TheDesk is a Mastodon client for PC.",
|
"description": "TheDesk is a Mastodon client for PC.",
|
||||||
"repository": "https://github.com/cutls/TheDesk",
|
"repository": "https://github.com/cutls/TheDesk",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
@@ -65,9 +65,9 @@
|
|||||||
"font-manager": "^0.3.0"
|
"font-manager": "^0.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"electron": "^5.0.4",
|
"electron": "^6.0.0",
|
||||||
"electron-builder": "^20.44.4",
|
"electron-builder": "^21.1.5",
|
||||||
"readline-sync": "1.4.9"
|
"readline-sync": "1.4.10"
|
||||||
},
|
},
|
||||||
"build": {
|
"build": {
|
||||||
"productName": "TheDesk",
|
"productName": "TheDesk",
|
||||||
@@ -116,8 +116,8 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"electronDownload": {
|
"electronDownload": {
|
||||||
"version": "5.0.1"
|
"version": "5.0.4"
|
||||||
},
|
},
|
||||||
"electronVersion": "5.0.1"
|
"electronVersion": "5.0.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -36,8 +36,9 @@
|
|||||||
<script type="text/javascript" src="../../js/common/modal.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 type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
|
||||||
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||||
|
<script type="text/javascript" src="../../js/platform/punycode.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var ver = "Usamin (18.7.0)";
|
var ver = "Usamin (18.7.1)";
|
||||||
//betaを入れるとバージョンチェックしない
|
//betaを入れるとバージョンチェックしない
|
||||||
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
|
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
|
||||||
//var ver="beta";
|
//var ver="beta";
|
||||||
@@ -666,7 +667,7 @@
|
|||||||
<!-- Modal Structure Video-->
|
<!-- Modal Structure Video-->
|
||||||
<div id="videomodal" class="modal modal-fixed-footer">
|
<div id="videomodal" class="modal modal-fixed-footer">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<video src="" id="video" style="max-width:100%; max-height:100%;" controls>
|
<video src="" id="video" style="max-width:100%; max-height:100%;" controls loop="true" autoplay="true">
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
|
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
|
||||||
@@ -679,21 +680,21 @@
|
|||||||
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
||||||
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
||||||
<br>
|
<br>
|
||||||
<div id="release-Usamin_18-7-0" class="release-do" style="display:none; ">
|
<div id="release-Usamin_18-7-1" class="release-do" style="display:none; ">
|
||||||
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
||||||
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
||||||
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
||||||
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
||||||
<h5>Release Note Usamin (18.7.0)</h5>
|
<h5>Release Note Usamin (18.7.1)</h5>
|
||||||
<span style="font-size :120%">・<u>トゥートを矢印キーで選択してR,B,Fで返信,BT,ふぁぼ</u></span><br>
|
・Electron 6.0.0。<br>
|
||||||
・Pleromaでトゥート内のトゥートへのリンクをクリックしたときの挙動を修正。<br>
|
・画像ビューアーを開いているときに画像を矢印キーで切り替えられないバグを修正。<br>
|
||||||
・アップロードに失敗したときに何もできなくなるバグを修正。<br>
|
・コンテキストを上手く取得できないバグを修正。<br>
|
||||||
・設定画面の詳細説明が表示されないバグを修正。<br>
|
・タグサジェストがパワーアップ。<br>
|
||||||
・カラム名がオーバーフローしてしまうバグを修正。<br>
|
・動画が自動再生(モーダル表示時)、ループ(モーダル, Pleroma, MisskeyのTL上)する<br>
|
||||||
・トゥートのリプライ元をたどる挙動を修正。<br>
|
・絵文字(カスタム絵文字/Twemoji)をミュートワードに追加できるように。<br>
|
||||||
・カードが長くて(特にSpotify)邪魔な問題を修正。<br>
|
・絵文字が入ったURLに関する不具合を修正。<br>
|
||||||
・トゥート詳細画面でレイアウトが崩れる不具合を修正。<br>
|
・blurhash非対応インスタンスでのNSFW画像のblurを改修。<br>
|
||||||
・このクライアントは勝手に特定のドメインをブロックするみたいなことはしていません。
|
・Pleroma等でアカウント情報が無い時があるため、それに関して修正。<br>
|
||||||
</div>
|
</div>
|
||||||
<div id="release-en" style="display:none">
|
<div id="release-en" style="display:none">
|
||||||
<h5>Let's make it native!</h5>
|
<h5>Let's make it native!</h5>
|
||||||
|
@@ -36,8 +36,9 @@
|
|||||||
<script type="text/javascript" src="../../js/common/modal.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 type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
|
||||||
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||||
|
<script type="text/javascript" src="../../js/platform/punycode.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var ver = "Usamin (18.7.0)";
|
var ver = "Usamin (18.7.1)";
|
||||||
//betaを入れるとバージョンチェックしない
|
//betaを入れるとバージョンチェックしない
|
||||||
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
|
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
|
||||||
//var ver="beta";
|
//var ver="beta";
|
||||||
@@ -666,7 +667,7 @@
|
|||||||
<!-- Modal Structure Video-->
|
<!-- Modal Structure Video-->
|
||||||
<div id="videomodal" class="modal modal-fixed-footer">
|
<div id="videomodal" class="modal modal-fixed-footer">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<video src="" id="video" style="max-width:100%; max-height:100%;" controls>
|
<video src="" id="video" style="max-width:100%; max-height:100%;" controls loop="true" autoplay="true">
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
|
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
|
||||||
@@ -679,21 +680,21 @@
|
|||||||
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
||||||
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
||||||
<br>
|
<br>
|
||||||
<div id="release-Usamin_18-7-0" class="release-do" style="display:none; ">
|
<div id="release-Usamin_18-7-1" class="release-do" style="display:none; ">
|
||||||
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
||||||
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
||||||
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
||||||
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
||||||
<h5>Release Note Usamin (18.7.0)</h5>
|
<h5>Release Note Usamin (18.7.1)</h5>
|
||||||
<span style="font-size :120%">・<u>トゥートを矢印キーで選択してR,B,Fで返信,BT,ふぁぼ</u></span><br>
|
・Electron 6.0.0。<br>
|
||||||
・Pleromaでトゥート内のトゥートへのリンクをクリックしたときの挙動を修正。<br>
|
・画像ビューアーを開いているときに画像を矢印キーで切り替えられないバグを修正。<br>
|
||||||
・アップロードに失敗したときに何もできなくなるバグを修正。<br>
|
・コンテキストを上手く取得できないバグを修正。<br>
|
||||||
・設定画面の詳細説明が表示されないバグを修正。<br>
|
・タグサジェストがパワーアップ。<br>
|
||||||
・カラム名がオーバーフローしてしまうバグを修正。<br>
|
・動画が自動再生(モーダル表示時)、ループ(モーダル, Pleroma, MisskeyのTL上)する<br>
|
||||||
・トゥートのリプライ元をたどる挙動を修正。<br>
|
・絵文字(カスタム絵文字/Twemoji)をミュートワードに追加できるように。<br>
|
||||||
・カードが長くて(特にSpotify)邪魔な問題を修正。<br>
|
・絵文字が入ったURLに関する不具合を修正。<br>
|
||||||
・トゥート詳細画面でレイアウトが崩れる不具合を修正。<br>
|
・blurhash非対応インスタンスでのNSFW画像のblurを改修。<br>
|
||||||
・このクライアントは勝手に特定のドメインをブロックするみたいなことはしていません。
|
・Pleroma等でアカウント情報が無い時があるため、それに関して修正。<br>
|
||||||
</div>
|
</div>
|
||||||
<div id="release-en" style="display:none">
|
<div id="release-en" style="display:none">
|
||||||
<h5>Let's make it native!</h5>
|
<h5>Let's make it native!</h5>
|
||||||
|
@@ -36,6 +36,7 @@
|
|||||||
<script type="text/javascript" src="../../js/common/modal.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 type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
|
||||||
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||||
|
<script type="text/javascript" src="../../js/platform/punycode.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var ver = "@@versionLetter@@";
|
var ver = "@@versionLetter@@";
|
||||||
//betaを入れるとバージョンチェックしない
|
//betaを入れるとバージョンチェックしない
|
||||||
@@ -666,7 +667,7 @@
|
|||||||
<!-- Modal Structure Video-->
|
<!-- Modal Structure Video-->
|
||||||
<div id="videomodal" class="modal modal-fixed-footer">
|
<div id="videomodal" class="modal modal-fixed-footer">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<video src="" id="video" style="max-width:100%; max-height:100%;" controls>
|
<video src="" id="video" style="max-width:100%; max-height:100%;" controls loop="true" autoplay="true">
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">@@close@@</a>
|
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">@@close@@</a>
|
||||||
@@ -679,21 +680,21 @@
|
|||||||
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
||||||
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
||||||
<br>
|
<br>
|
||||||
<div id="release-Usamin_18-7-0" class="release-do" style="display:none; ">
|
<div id="release-Usamin_18-7-1" class="release-do" style="display:none; ">
|
||||||
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
||||||
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
||||||
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
||||||
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
||||||
<h5>Release Note Usamin (18.7.0)</h5>
|
<h5>Release Note Usamin (18.7.1)</h5>
|
||||||
<span style="font-size :120%">・<u>トゥートを矢印キーで選択してR,B,Fで返信,BT,ふぁぼ</u></span><br>
|
・Electron 6.0.0。<br>
|
||||||
・Pleromaでトゥート内のトゥートへのリンクをクリックしたときの挙動を修正。<br>
|
・画像ビューアーを開いているときに画像を矢印キーで切り替えられないバグを修正。<br>
|
||||||
・アップロードに失敗したときに何もできなくなるバグを修正。<br>
|
・コンテキストを上手く取得できないバグを修正。<br>
|
||||||
・設定画面の詳細説明が表示されないバグを修正。<br>
|
・タグサジェストがパワーアップ。<br>
|
||||||
・カラム名がオーバーフローしてしまうバグを修正。<br>
|
・動画が自動再生(モーダル表示時)、ループ(モーダル, Pleroma, MisskeyのTL上)する<br>
|
||||||
・トゥートのリプライ元をたどる挙動を修正。<br>
|
・絵文字(カスタム絵文字/Twemoji)をミュートワードに追加できるように。<br>
|
||||||
・カードが長くて(特にSpotify)邪魔な問題を修正。<br>
|
・絵文字が入ったURLに関する不具合を修正。<br>
|
||||||
・トゥート詳細画面でレイアウトが崩れる不具合を修正。<br>
|
・blurhash非対応インスタンスでのNSFW画像のblurを改修。<br>
|
||||||
・このクライアントは勝手に特定のドメインをブロックするみたいなことはしていません。
|
・Pleroma等でアカウント情報が無い時があるため、それに関して修正。<br>
|
||||||
</div>
|
</div>
|
||||||
<div id="release-en" style="display:none">
|
<div id="release-en" style="display:none">
|
||||||
<h5>Let's make it native!</h5>
|
<h5>Let's make it native!</h5>
|
||||||
|
@@ -2,7 +2,7 @@ const fs = require("fs")
|
|||||||
const readlineSync = require('readline-sync');
|
const readlineSync = require('readline-sync');
|
||||||
let ver = readlineSync.question('version string (empty: default string)? ');
|
let ver = readlineSync.question('version string (empty: default string)? ');
|
||||||
if (!ver) {
|
if (!ver) {
|
||||||
ver = "Usamin (18.7.0)"
|
ver = "Usamin (18.7.1)"
|
||||||
}
|
}
|
||||||
console.log("Constructing view files " + ver + ": make sure to update package.json")
|
console.log("Constructing view files " + ver + ": make sure to update package.json")
|
||||||
const langs = ["ja", "en", "ps"]
|
const langs = ["ja", "en", "ps"]
|
||||||
|
@@ -36,8 +36,9 @@
|
|||||||
<script type="text/javascript" src="../../js/common/modal.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 type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
|
||||||
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||||
|
<script type="text/javascript" src="../../js/platform/punycode.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var ver = "Usamin (18.7.0)";
|
var ver = "Usamin (18.7.1)";
|
||||||
//betaを入れるとバージョンチェックしない
|
//betaを入れるとバージョンチェックしない
|
||||||
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
|
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
|
||||||
//var ver="beta";
|
//var ver="beta";
|
||||||
@@ -666,7 +667,7 @@
|
|||||||
<!-- Modal Structure Video-->
|
<!-- Modal Structure Video-->
|
||||||
<div id="videomodal" class="modal modal-fixed-footer">
|
<div id="videomodal" class="modal modal-fixed-footer">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<video src="" id="video" style="max-width:100%; max-height:100%;" controls>
|
<video src="" id="video" style="max-width:100%; max-height:100%;" controls loop="true" autoplay="true">
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">crwdns385:0crwdne385:0</a>
|
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">crwdns385:0crwdne385:0</a>
|
||||||
@@ -679,21 +680,21 @@
|
|||||||
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
||||||
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
||||||
<br>
|
<br>
|
||||||
<div id="release-Usamin_18-7-0" class="release-do" style="display:none; ">
|
<div id="release-Usamin_18-7-1" class="release-do" style="display:none; ">
|
||||||
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
||||||
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
||||||
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
||||||
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
||||||
<h5>Release Note Usamin (18.7.0)</h5>
|
<h5>Release Note Usamin (18.7.1)</h5>
|
||||||
<span style="font-size :120%">・<u>トゥートを矢印キーで選択してR,B,Fで返信,BT,ふぁぼ</u></span><br>
|
・Electron 6.0.0。<br>
|
||||||
・Pleromaでトゥート内のトゥートへのリンクをクリックしたときの挙動を修正。<br>
|
・画像ビューアーを開いているときに画像を矢印キーで切り替えられないバグを修正。<br>
|
||||||
・アップロードに失敗したときに何もできなくなるバグを修正。<br>
|
・コンテキストを上手く取得できないバグを修正。<br>
|
||||||
・設定画面の詳細説明が表示されないバグを修正。<br>
|
・タグサジェストがパワーアップ。<br>
|
||||||
・カラム名がオーバーフローしてしまうバグを修正。<br>
|
・動画が自動再生(モーダル表示時)、ループ(モーダル, Pleroma, MisskeyのTL上)する<br>
|
||||||
・トゥートのリプライ元をたどる挙動を修正。<br>
|
・絵文字(カスタム絵文字/Twemoji)をミュートワードに追加できるように。<br>
|
||||||
・カードが長くて(特にSpotify)邪魔な問題を修正。<br>
|
・絵文字が入ったURLに関する不具合を修正。<br>
|
||||||
・トゥート詳細画面でレイアウトが崩れる不具合を修正。<br>
|
・blurhash非対応インスタンスでのNSFW画像のblurを改修。<br>
|
||||||
・このクライアントは勝手に特定のドメインをブロックするみたいなことはしていません。
|
・Pleroma等でアカウント情報が無い時があるため、それに関して修正。<br>
|
||||||
</div>
|
</div>
|
||||||
<div id="release-en" style="display:none">
|
<div id="release-en" style="display:none">
|
||||||
<h5>Let's make it native!</h5>
|
<h5>Let's make it native!</h5>
|
||||||
|
Reference in New Issue
Block a user