add beta language and auto restart when login crowdin

This commit is contained in:
cutls 2021-01-12 14:44:57 +09:00
parent 89b25c56e7
commit f4d6ff8ee3
51 changed files with 21988 additions and 35 deletions

View File

@ -42,8 +42,13 @@ The default sounds of notifications is provided [Creative Commons BY](https://cr
## Language ## Language
* 日本語(Japanese) * 日本語(Japanese)
* 日本語, 関西(Japanese, Kansai)
* English * English
* de, cs, bg(from Crowdin) * български(Bulgarian) with [translate project](https://translate.thedesk.top/project/thedesk/bg)
* Česky(Czech) with [translate project](https://translate.thedesk.top/project/thedesk/cs)
* Deutsch(German) with [translate project](https://translate.thedesk.top/project/thedesk/de)
* Español, argentina(Spanish, Argentina) with [translate project](https://translate.thedesk.top/project/thedesk/es-AR)
* italiano(Italian) with [translate project](https://translate.thedesk.top/project/thedesk/it-IT)
### Translation ### Translation

View File

@ -41,8 +41,9 @@ Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge
## 言語 ## 言語
* 日本語 * 日本語
* 日本語(関西)
* English(英語) * English(英語)
* ドイツ語, チェコ語, ブルガリア語(from Crowdin) * ドイツ語, チェコ語, ブルガリア語, イタリア語, スペイン語アルゼンチン方言 (from [Crowdin](https://translate.thedesk.top))
### 翻訳 ### 翻訳

View File

@ -98,6 +98,10 @@ function settings() {
//読み込み時の設定ロード //読み込み時の設定ロード
function load() { function load() {
var currentLang = lang.language
console.log(currentLang)
$(`#langsel-sel`).val(currentLang)
$('#langsel-sel').formSelect()
var max = envView.config.length var max = envView.config.length
for (var i = 0; i < max; i++) { for (var i = 0; i < max; i++) {
var ls = envView.config[i].storage var ls = envView.config[i].storage
@ -283,8 +287,10 @@ function oksload() {
$('#oks-3').val(localStorage.getItem('oks-3')) $('#oks-3').val(localStorage.getItem('oks-3'))
} }
} }
function changelang(lang) { function changeLang() {
postMessage(['lang', lang], '*') const lang = $('#langsel-sel').val()
console.log(lang)
if(lang) postMessage(['lang', lang], '*')
} }
function exportSettings() { function exportSettings() {
var exp = exportSettingsCore() var exp = exportSettingsCore()

View File

@ -185,6 +185,13 @@ function createWindow() {
mainWindow.maximize() mainWindow.maximize()
} }
}) })
mainWindow.webContents.on('page-title-updated', () => {
const url = mainWindow.webContents.getURL()
if(url.match(/https:\/\/crowdin.com\/profile/)) {
app.relaunch()
app.exit()
}
})
if (!packaged) mainWindow.toggleDevTools() if (!packaged) mainWindow.toggleDevTools()
electron.session.defaultSession.clearCache(() => {}) electron.session.defaultSession.clearCache(() => {})
if (process.argv) { if (process.argv) {
@ -230,9 +237,12 @@ function createWindow() {
} }
const promise = new Promise(function (resolve) { const promise = new Promise(function (resolve) {
mainWindow.webContents.send('asReadEnd', '') mainWindow.webContents.send('asReadEnd', '')
let wait = 3000
const url = mainWindow.webContents.getURL()
if(!url.match(/index.html/)) wait = 0
setTimeout(function () { setTimeout(function () {
resolve() resolve()
}, 3000) }, wait)
}) })
promise.then(function (response) { promise.then(function (response) {
closeArg = true closeArg = true

154
app/view/es-ES/acct.html Normal file
View File

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="es-ES">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link
href="../../node_modules/materialize-css/dist/css/materialize.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<link href="../../css/tl.css" rel="stylesheet" type="text/css" />
<link href="../../css/userdata.css" rel="stylesheet" type="text/css" />
<link
href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/acct.css" rel="stylesheet" type="text/css" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<script>var pwa = false;</script> <script>var store = false;</script>
</head>
<body id="mainView" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script
type="text/javascript"
src="../../node_modules/materialize-css/dist/js/materialize.js"
></script>
<script type="text/javascript" src="main.js"></script>
<script
type="text/javascript"
src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"
></script>
<script>
var misskeytoken = false
</script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"
>Atrás</a
><br />
<h5>Lista de cuentas</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div class="hide-second">
<a href="setting.html">Having the exported file of TheDesk, click here to jump setting page</a>
</div>
<div>
<h5>Agregar una cuenta</h5>
<br />
<div id="add">
<div class="row">
<div class="col s8">
Fill the instance domain (like mastodon.social)<br />
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp" />
<div id="ins-suggest"></div>
<button class="btn waves-effect" onclick="instance()">Login</button><br />
<div class="pwa">
Desmarcarlo para omitir código de pegado. (iniciar sesión en Mastodon en Windows o macOS) (Recomendado: pcheck)<br />
<label>
<input type="checkbox" class="filled-in" id="linux" />
<span>Configuración de código</span>
</label>
<br />
</div>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<span>Iniciar sesión como Misskey</span> </label
><br />
</div>
<div class="col s4 scr" aria-hidden="true">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div>
</div>
<div id="auth" style="display:none">
Pegar el código y cerrar el navegador web.<br />
<input type="text" id="code" placeholder="Código" required />
<button class="btn waves-effect" onclick="code()">Auth</button><br />
<br />
<a onclick="atSetup()" class="pointer">Usar el token de acceso para iniciar sesión (haga clic después de completar no el código si no el token de acceso en el casilla: avanzado)</a>
<div id="compt" style="display:none" class="scr">
<h5>ログイン前に必ずご確認ください</h5>
<span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span
>のため以下の機能がご利用いただけません。
<span id="compt-warn" style="display:none"
>また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span
>
<ul id="compt-list"></ul>
</div>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
Leer <a href="https://thedesk.top/how-to-misskey-login.html">Docs(ja)</a> para iniciar sesión en Misskey.<br />
<input type="hidden" id="misskey-url" />
<input type="text" id="misskey-key" placeholder="Código" required />
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br />
<br />
<a onclick="atSetup('misskey')" class="pointer">Usar el token de acceso para iniciar sesión (haga clic después de completar no el código si no el token de acceso en el casilla: avanzado)</a>
</div>
</div>
<div class="hide-first">
<h5>Cuenta principal</h5>
<div class="input-field" style="width:300px">
<span data-trans="your_acct">Seleccionar una cuenta</span>
<br />
<select
id="main-acct-sel"
class="acct-sel"
style="color:black"
onchange="mainacct()"
></select>
<label></label>
</div>
<ul id="domain-list" class="collection transparent"></ul>
<div id="instance-data">
Some instance data by
<a href="https://instances.social" target="_blank">instances.social API</a><br />
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br />
<span id="ins-desc"></span><br />
<img src="../../img/loading.svg" id="ins-prof" width="200" /><br />
<br />
Dominio:<span id="ins-name"></span><br />
Servidores federados:<span id="ins-connect"></span><br />
Toots:<span id="ins-toot"></span><br />
Usuarios:<span id="ins-user"></span>Usuarios<br />
Conexión:<span id="ins-per"></span>%<br />
Versión de Mastodon:<span id="ins-ver"></span>@<span id="ins-upd"></span><br />
</div>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/common/sha256.js"></script>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/manager.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>
<script>$('body').addClass(localStorage.getItem('platform'))</script>
</body>
</html>

1287
app/view/es-ES/index.html Normal file

File diff suppressed because it is too large Load Diff

1
app/view/es-ES/main.js Normal file

File diff suppressed because one or more lines are too long

632
app/view/es-ES/setting.html Normal file
View File

@ -0,0 +1,632 @@
<!doctype html>
<html lang="es-ES" style="overflow-y:scroll">
<head>
<title>Settings - TheDesk</title>
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet">
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href="../../css/pickr.css" type="text/css" rel="stylesheet">
<link href="../../css/master.css" type="text/css" rel="stylesheet">
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet">
<meta charset="utf-8">
<style>
input {
max-height: 3.84rem !important
}
.pcr-result {
height: 1rem !important;
}
.container-after-titlebar {
padding: 20px;
}
</style>
<script>var pwa = false;</script>
<script>var store = false;</script>
</head>
<body id="mainView" style="overflow-y:scroll" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<script type="text/javascript" src="main.js"></script>
<script src="../../node_modules/json5/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
<script>function renderMem() { return false; }</script>
<h4>Preferences</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>Preferencias del sistema
</div>
<div class="collapsible-body">
<h5>Idiomas</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br><br>
<div style="display: flex;">
<div style="width: 22rem;" id="langsel">
<select id="langsel-sel"><option value="ja">日本語</option><option value="ja-KS">日本語(関西)</option><option value="en">English</option><option value="bg">български</option><option value="cs">Česky</option><option value="de">Deutsch</option><option value="es-AR">Español, argentina</option><option value="it-IT">italiano</option><option value="zh-CN">简体中文</option><option value="zh-TW">繁體中文(β)</option><option value="fr-FR">français(β)</option><option value="no-NO">norsk(β)</option><option value="pt-BR">Português, brasileiro(β)</option><option value="ru-RU">русский(β)</option><option value="es-ES">Español(β)</option><option value="ps">Crowdin translate system(beta)</option></select>
</div>
<button class="btn waves-effect" onclick="changeLang()">Cambiar</button>
</div>
<h5>Importación y exportación de la configuración</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3"
style="width:100%; max-width:15rem;">Exportar</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3"
style="width:100%; max-width:15rem;">Importar</button><br>
If you got a error when you choose the file, please paste the strings printed when you open the file and click import<br>
<input type="text" id="imp-exp" style="width: 22rem">
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.id=='notf'"><a onclick="notftest()"
class="pointer">Prueba de notificación</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Cambiar</button>
</template><br>
</template>
</div>
<h5>Fuente</h5>
Select your favorite font to 'Select'(Windows/ macOS only)<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="font()">Seleccionar</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:22rem; height:40rem;"></div>
<br>
<input type="text" style="width:11.5rem" id="font">
<button class="btn waves-effect" style="width:7.7rem;" onclick="settings()">Save</button>
<br>
<h5>Carpeta para guardar</h5>
TheDesk utiliza este valor cuando intenta guardar fotos o tomar capturas de pantalla.<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="savefolder()">Cambiar</button>
<br>
</div>
</li>
<li class="pwa">
<div class="collapsible-header">
<i class="material-icons">color_lens</i>Temas
</div>
<div class="collapsible-body">
<h4>Seleccionar tema</h4>
<div style="width:22rem" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<h4>Editar y añadir temas personalizados</h4>
<div style="width:22rem" id="edit-selector" data-add="Add new">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">Add new</option>
</select>
</div>
<h5>Name</h5>
<input type="text" style="width:22rem" id="custom_name" placeholder="Name...">
<h5>About this theme</h5>
<div class="input-field"><textarea style="width:22rem" id="custom_desc" class="materialize-textarea"
placeholder="About this theme..."></textarea></div>
<h5>Esquema de colores</h5>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="dark" value="dark"
checked="true" />
<span>Dark</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="light"
value="light" />
<span>Light</span>
</label><br><br />
<button class="btn waves-effect" onclick="advanced()">Opciones avanzadas (6 colores adicionales)</button>
<span class="advanced hide"></span>
<div id="pickers">
<div>
<h5>Background</h5>Background color<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_0" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker0_value">
</div>
<div>
<h5>Text</h5>Text color<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_1" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker1_value">
</div>
<div>
<h5>Subcolor</h5>Distinguishable from background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_2" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>Background of boosts<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_3" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker3_value">
</div>
<div class="advanced hide">
<h5>Modal</h5>Background of modal window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_4" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modal')">Background</a>
<br />
<input type="color" id="color-picker4_value">
</div>
<div class="advanced hide">
<h5>Modal Footer</h5>Background of modal window's footer<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_5" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modalFooter')">Background</a>/
<a class="pointer" onclick="copyColor('modal','modalFooter')">Modal</a>
<br />
<input type="color" id="color-picker5_value">
</div>
<div class="advanced hide">
<h5>3rd Color</h5>Backgroud of tag buttons, etc(near to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_6" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','third')">Subcolor</a>
<br />
<input type="color" id="color-picker6_value">
</div>
<div class="advanced hide">
<h5>4th Color</h5>Title bar(same scheme to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_7" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','forth')">Subcolor</a>/
<a class="pointer" onclick="copyColor('third','forth')">3rd Color</a>
<br />
<input type="color" id="color-picker7_value">
</div>
<div class="advanced hide">
<h5>Bottom</h5>Background of menu-bar at bottom of window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_8" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','bottom')">Subcolor</a>
<br />
<input type="color" id="color-picker8_value">
</div>
<div class="advanced hide">
<h5>2nd Accent</h5>Emphasized toot's background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_9" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','emphasized')">Accent</a>
<br />
<input type="color" id="color-picker9_value">
</div>
<div class="advanced hide">
<h5>Postbox</h5>Background of post-box and menu<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_10" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','postbox')">Subcolor</a>
<br />
<input type="color" id="color-picker10_value">
</div>
<div class="advanced hide">
<h5>Active</h5>Background of 'active' elements<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_11" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','active')">Accent</a>
<br />
<input type="color" id="color-picker11_value">
</div>
<div class="advanced hide">
<h5>Selected</h5>Background of selected with arrow keys<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_12" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker12_value">
</div>
<div class="advanced hide">
<h5>Selected with shared</h5>Background of selected with arrow keys(boosted toots)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_13" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker13_value">
</div>
</div><br /><br />
<button class="btn-large waves-effect" onclick="customComp()">Cambiar</button>&nbsp;<button
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">Delete</button><br><br>
<input type="text" style="width:22rem;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br>
<h4>Import of custom themes</h4>
<input type="text" style="width:22rem;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">Importar</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>Timeline Preferences
</div>
<div class="collapsible-body">
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Cambiar</button>
</template><br>
</template>
</div>
<h5>Custom sound</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span
id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span
id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span
id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span
id="c4-file"></span><br>
<h5>Volume</h5>
0-100(default:80)<br>
<p class="range-field"><span id="soundVolVal">80</span><br>
<input type="range" id="soundvol" min="0" max="100" value="80" onchange="customVol()"
style="width:40rem; max-width:100%" />
</p>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>Posting Preferences
</div>
<div class="collapsible-body">
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template
v-if="(!check.kirishima || (check.kirishima && kirishima) )&& (!check.quote || (check.quote && quoters))">
<label><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" />
<span>{{check.text}}</span></label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Cambiar</button>
</template><br>
</template>
</div>
<h5>Easy inserter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:11.5rem" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:7.7rem;">Save</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:11.5rem" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:7.7rem;">Save</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:11.5rem" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:7.7rem;">Save</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<img src="../../img/aiscript.svg"
style="height: 1.5rem; margin-left: 0.4rem; margin-right: 0.4rem;">Plugins
</div>
<div class="collapsible-body">
<a href="https://github.com/cutls/TheDesk/blob/master/plugin.md">Japanese docs of AiScript TheDesk plugins</a><br />
<textarea id="plugin" data-id="add_new" style="height: 20rem"></textarea>
<button class="btn waves-effect" style="width:7.7rem;" onclick="completePlugin()">Cambiar</button>
<button class="btn waves-effect red disabled plugin_delete" style="width:7.7rem;"
onclick="deletePlugin()">Delete</button>
<h5>Plugin list</h5>
<div style="width:22rem" id="plugin-selector" data-add="Add new">
<select id="plugin-edit-sel" class="custom-sel" onchange="pluginEdit()">
<option value="add_new">Add new</option>
</select>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>Mute & Emphasis Preferences
</div>
<div class="collapsible-body">
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fab fa-spotify"></i>Spotify and NowPlaying Preferences
</div>
<div class="collapsible-body">
<h5>Account Connection(Spotify)</h5>
TheDesk save your data on thedesk.top server.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
onclick="spotifyAuth()" class="btn waves-effect" style="width:7.7rem;">Save</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-enable"><i
class="fab fa-spotify left"></i>Connect</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-disable"><i
class="fab fa-spotify left"></i>Disconnect</a>
<h5>Account Connection(Last.fm)</h5>
User name...(empty to disconnect) You cannot hide your recent play log at last.fm privacy settings.<br />
<input type="text" style="width:11.5rem" id="lastFmUser">
<button onclick="lastFmSet()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Edit a template</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
<span class="mac">>macOS:{song}:Song name/{album}:Album name/{artist}:Artist name/composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre}</span><br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Attach an Artwork of Spotify</h5>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes"
value="yes" />
<span>Yes</span>
</label>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no"
value="no" />
<span>No</span>
</label>
<div class="mac">
<h5>If the song has no artwork, automatic complete it(macOS)</h5>
If you nowplaying an non-artwork song, get one which seems nice through API. If you do not like the completed artwork, you can right-click it to delete.<br />
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_yes"
value="yes" />
<span>Yes</span>
</label>
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_no"
value="no" />
<span>No</span>
</label>
<br>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>BouyomiChan connect</h5>
Require: BouyomiChan WebSocket Plugin<a href="https://github.com/xztaityozx/BouyomiChan-WebSocket-Plugin"
target="_blank">GitHub</a><br>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_yes"
value="yes" />
<span>Yes</span>
</label>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_no" value="no" />
<span>No</span>
</label>
<h5>Speed</h5>
1-100(default:10)<br>
<p class="range-field"><span id="voicespeedVal">10</span><br>
<input type="range" id="voicespeed" min="1" max="100" value="10"
onchange="document.getElementById('voicespeedVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><span id="voicepitchVal">50</span><br>
<input type="range" id="voicepitch" min="0" max="100" value="50"
onchange="document.getElementById('voicepitchVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><span id="voicevolVal">100</span><br>
<input type="range" id="voicevol" min="0" max="100" value="100"
onchange="document.getElementById('voicevolVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Test</h5>
<input type="text" style="width:27rem" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC.">
<button class="btn waves-effect blue" style="width:11.5rem;" onclick="voicePlay()"
id="testplay">Play/Stop</button><br>
<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="voiceSettings()">Save</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:15rem;"><i
class="material-icons left">undo</i>Atrás</a>
<br>
<br>Keyboard shortcuts
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
<li>Alt+Enter:Secondary Toot Button</li>
<li>Ctrl+E:Make all notifications read</li>
<li>Ctrl+U:Select the top & left(No.1 column) toot</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
<li>Ctrl+Shift+C:Clear toot box</li>
<li>Ctrl+Shift+S:Preferences</li>
<li>Ctrl+Shift+M:Account Manager</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Show next or previous image</li>
<li>Mousewheel:Zoom a image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
When a toot is selected:
<li>F:Favourite this toot</li>
<li>B:Boost this toot</li>
<li>R:Reply to this toot</li>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:40rem;"
onclick="if(confirm('Delete all data. You cannot undo. Continue?')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<button class="btn waves-effect indigo pwa" onclick="about()" style="width:100%; max-width:40rem;"><i
class="material-icons left">info</i>About TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">web</i>Website</a>
<a href="https://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Support(Pixiv FANBOX)</a>
<a href="https://www.patreon.com/cutls" class="btn waves-effect red darken-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Support(Patreon)</a>
<a href="https://liberapay.com/cutls" class="btn waves-effect black-text"
style="width:100%; max-width:40rem; background-color: #f6c915"><i
class="material-icons left">trending_up</i>Support(Liberapay)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">list</i>Help/Docs</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2"
style="width:100%; max-width:40rem;"><i class="fab fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@cutls.com" class="btn waves-effect blue lighten-2"
style="width:100%; max-width:40rem;"><img src="../../img/desk_full.svg" class="left" width="25"
style="padding-top:5px;">Main author: Cutls@cutls.com</a>
<br>
TheDesk @ <a href="https://github.com/cutls/TheDesk/commits/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c">89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c</a> - <a
onclick="checkupd(); return localStorage.removeItem('new-ver-skip'); location.href='index.html';"
class="pointer pwa">Check update</a><br>
<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
<a href="https://status.cutls.com/">
<img src="https://status.cutls.com/badge-service?site=thedesk.top">
</a><br>
<h5>OSS License</h5>
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2Fcutls%2FTheDesk/refs/branch/master/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c"
alt="FOSSA Status"><img
src="https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcutls%2FTheDesk.svg?type=small" /></a>
<br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a
href="https://thedesk.top/priv.html">Privacy
Policy</a>
<br>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/platform/aiscript.js"></script>
<script type="text/javascript" src="../../js/platform/plugin.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/ui/spotify.js"></script>
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/platform/pickr.js"></script>
<script type="text/javascript" src="../../js/ui/settings.js"></script>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>

View File

@ -0,0 +1,756 @@
var yesno = [
{
text: 'Yes',
value: 'yes'
},
{
text: 'No',
value: 'no'
}
]
var sound = [
{
text: 'None',
value: 'none'
},
{
text: 'Default',
value: 'default'
},
{
text: 'Custom 1',
value: 'c1'
},
{
text: 'Custom 2',
value: 'c2'
},
{
text: 'Custom 3',
value: 'c3'
},
{
text: 'Custom 4',
value: 'c4'
}
]
var envConstruction = [
{
id: 'popup',
storage: 'popup',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Notificación emergente (en Windows)',
desc: 'Ocultar para establecer "0"',
after: 'seg'
}
},
{
id: 'notf',
storage: 'nativenotf',
checkbox: true,
setValue: 'yes',
text: {
head: 'Notificación nativa',
desc: 'Esto no funciona en la versión portable para Windows.',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'width',
storage: 'width',
width: 50,
setValue: 300,
text: { after: 'px ~ ' }
},
{
id: 'maxWidth',
storage: 'max-width',
width: 50,
setValue: 600,
text: { after: 'px' }
}
],
text: {
head: 'Width of columns',
desc: 'Scroll bar will be shown when your window size is more than ammounts of columns.'
}
},
{
id: 'margin',
storage: 'margin',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Margin between timelines',
desc: '',
after: 'px'
}
},
{
id: 'fixwidth',
storage: 'fixwidth',
checkbox: false,
doubleText: false,
setValue: 300,
width: 50,
text: {
head: 'Ancho mínimo del navegador TweetDeck',
desc: '',
after: 'px arriba'
}
},
{
id: 'size',
storage: 'size',
checkbox: false,
doubleText: false,
width: 50,
setValue: 13,
text: {
head: 'Tamaño de fuente',
desc: '<span style="font-size:13px">13px(valor absoluto)</span>',
after: 'px'
}
},
{
id: 'ha',
storage: 'ha',
checkbox: true,
setValue: false,
text: {
head: 'Deshabilitar la aceleración por hardware',
desc: 'Reinicio automático',
checkbox: [
{
text: 'Yes',
value: 'true'
},
{
text: 'No',
value: 'false'
}
]
}
},
{
id: 'ua',
storage: 'ua_setting',
checkbox: false,
doubleText: false,
setValue: '',
width: 200,
text: {
head: 'Agente de usuario',
desc: 'Reiniciar al cambiar'
}
},
{
id: 'srcUrl',
storage: 'srcUrl',
checkbox: false,
doubleText: false,
width: 200,
setValue: 'https://google.com/search?q={q}',
text: {
head: 'Search engine',
desc: '{q} will be replaced to query.',
after: ''
}
},{
id: 'download',
storage: 'dl-win',
checkbox: true,
setValue: 'no',
text: {
head: 'Versioning(o Windows downloader)',
desc: 'ex: TheDesk-1.0.0-setup.exe',
checkbox: yesno
}
}
]
var tlConstruction = [
{
id: 'time',
storage: 'datetype',
checkbox: true,
setValue: 'absolute',
text: {
head: 'Time format',
desc: 'Relative format:"1 minutes ago","3 days ago"<br>Absolute format:"23:25:21","2017/12/30 23:59:00"<br>Mixed format:toots posted today are relative-format, others are absolute-format.',
checkbox: [
{
text: 'Relative',
value: 'relative'
},
{
text: 'Absolute',
value: 'absolute'
},
{
text: 'Both relative and absolute',
value: 'double'
},
{
text: 'Mixed',
value: 'medium'
}
]
}
},
{
id: 'ul',
storage: 'locale',
checkbox: true,
setValue: 'yes',
text: {
head: 'Server\s unique locale',
desc: 'This value is available on some Japanese servers',
checkbox: yesno
}
},
{
id: 'nsfw',
storage: 'nsfw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide Mark sensitive pictures',
desc: 'Strong blur effect',
checkbox: yesno
}
},
{
id: 'cw',
storage: 'cw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide CW contents',
desc: '',
checkbox: yesno
}
},
{
id: 'rp',
storage: 'replyct',
checkbox: true,
setValue: 'hidden',
text: {
head: 'Reply counter style',
desc: '',
checkbox: [
{
text: 'Show 1+ if the replies are more than 1.',
value: 'hidden'
},
{
text: 'Show full count(1,2...)',
value: 'all'
}
]
}
},
{
id: 'gif',
storage: 'gif',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animated GIF images animation',
desc: '',
checkbox: yesno
}
},
{
id: 'tag',
storage: 'tag-range',
checkbox: true,
setValue: 'local',
text: {
head: 'Tag TL Search',
desc: '',
checkbox: [
{
text: 'Use federated network',
value: 'all'
},
{
text: 'Use local network',
value: 'local'
}
]
}
},
{
id: 'via',
storage: 'viashow',
checkbox: true,
setValue: 'no',
text: {
head: 'Show via',
desc: '',
checkbox: yesno
}
},
{
id: 'mov',
storage: 'mouseover',
checkbox: true,
setValue: 'no',
text: {
head: 'Hide action buttons without mouseover',
desc: 'You may feel \mouseover\ is unconfortable:(',
checkbox: [
{
text: 'Mouseover to show',
value: 'yes'
},
{
text: 'Click to show',
value: 'click'
},
{
text: 'No',
value: 'no'
}
]
}
},
{
id: 'notfm',
storage: 'setasread',
checkbox: true,
setValue: 'yes',
text: {
head: 'Show Notification marker, red colored bell and counter(if you show a notification column.)',
desc: '',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'sentence',
storage: 'sentence',
width: 50,
setValue: 500,
text: { after: 'lines arriba or' }
},
{
id: 'letters',
storage: 'letters',
width: 50,
setValue: 7000,
text: { after: 'letters arriba' }
}
],
text: {
head: 'Auto folding',
desc: 'TheDesk does not collapse totes of 5 characters or less. Also, when collapsing, newlines are not shown. TheDesk count only newlines as the number of lines.'
}
},
{
id: 'img-height',
storage: 'img-height',
checkbox: false,
doubleText: false,
width: 80,
setValue: 200,
text: {
head: 'Height of images',
desc: 'Option:Set "full" to uncrop.',
after: 'px'
}
},
{
id: 'ticker',
storage: 'ticker_ok',
checkbox: true,
setValue: 'no',
text: {
head: 'Enable OpenSticker',
desc: 'Show the instance name and favicon of tooters <a href="https://opensticker.0px.io">About OpenSticker</a>',
checkbox: yesno
}
},
{
id: 'anime',
storage: 'animation',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animation of timelines',
desc: '',
checkbox: yesno
}
},
{
id: 'markers',
storage: 'markers',
checkbox: true,
setValue: 'no',
text: {
head: 'Markers(mark as read) on HTL and notifications',
desc: 'Mastodon 3.0~. Shared on WebUI and third-party supported clients.',
checkbox: yesno
}
},
{
id: 'remote_img',
storage: 'remote_img',
checkbox: true,
setValue: 'no',
text: {
head: 'Get images from the remote server',
desc: 'All previews are got from your loginned cache server.',
checkbox: yesno
}
},
{
id: 'bkm',
storage: 'bookmark',
checkbox: true,
setValue: 'no',
text: {
head: 'Show a bookmarking toot button',
desc: '',
checkbox: yesno
}
},
{
id: 'scroll',
storage: 'scroll',
checkbox: true,
setValue: 'normalScrollBar',
text: {
head: 'Height of the scroll bar',
desc: '',
checkbox: [
{
text: 'Thick',
value: 'thickScrollBar'
},
{
text: 'Normal',
value: 'normalScrollBar'
},
{
text: 'Thin',
value: 'thinScrollBar'
}
]
}
},
{
id: 'replySound',
storage: 'replySound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Reply)',
desc: '',
checkbox: sound
}
},
{
id: 'favSound',
storage: 'favSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Fav)',
desc: '',
checkbox: sound
}
},
{
id: 'btSound',
storage: 'btSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Boost)',
desc: '',
checkbox: sound
}
},
{
id: 'followSound',
storage: 'followSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Follow)',
desc: '',
checkbox: sound
}
}
]
var postConstruction = [
{
id: 'cw-text',
storage: 'cw-text',
checkbox: false,
doubleText: false,
width: 150,
setValue: '',
text: {
head: 'Default warining text',
desc: '',
after: ''
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'cw_sentence',
storage: 'cw_sentence',
width: 50,
setValue: 500,
text: { after: 'lines arriba or' }
},
{
id: 'cw_letters',
storage: 'cw_letters',
width: 50,
setValue: 7000,
text: { after: 'letters arriba' }
}
],
text: {
head: 'Alert before posting a long toot.',
desc: 'Show dialog whether you make too-long text hidden.'
}
},
{
id: 'cws',
storage: 'always-cw',
checkbox: true,
setValue: 'no',
text: {
head: 'Always CW set',
desc: '',
checkbox: yesno
}
},
{
id: 'cw-continue',
storage: 'cw-continue',
checkbox: true,
setValue: 'no',
text: {
head: '@@cwContinue@@',
desc: '',
checkbox: yesno
}
},
{
id: 'vis',
storage: 'vis',
checkbox: true,
setValue: 'public',
text: {
head: 'Default visibility',
desc: '',
checkbox: [
{
text: 'Public',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Private',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Memory(memorized as each server)',
value: 'memory'
},
{
text: 'Default of your visibility(Set on preferences of Mastodon server)',
value: 'useapi'
}
]
}
},
{
id: 'img',
storage: 'img',
checkbox: true,
setValue: 'no-act',
text: {
head: 'Posting images preferences',
desc: '',
checkbox: [
{
text: 'Insert media URL',
value: 'url'
},
{
text: 'Insert nothig',
value: 'no-act'
}
]
}
},
{
id: 'box',
storage: 'box',
checkbox: true,
setValue: 'yes',
text: {
head: 'Action of posting-box',
desc: '',
checkbox: [
{
text: 'Folding',
value: 'yes'
},
{
text: 'Open after posting',
value: 'no'
},
{
text: 'Absolutely open',
value: 'absolute'
}
]
}
},
{
id: 'quote',
storage: 'quote',
checkbox: true,
setValue: 'nothing',
text: {
head: 'Quote format',
desc: '',
checkbox: [
{
text: 'Only URL',
value: 'simple'
},
{
text: 'URL and acct(mention to the user)',
value: 'mention'
},
{
text: 'URL, text and acct(mention to the user)',
value: 'full'
},
{
text: 'API(only some instances)',
value: 'apiQuote',
quote: true
},
{
text: 'Disabled(Hide buttons on TLs)',
value: 'nothing'
}
]
}
},
{
id: 'main',
storage: 'mainuse',
checkbox: true,
setValue: 'remain',
text: {
head: 'Default accounts of actions',
desc: 'Main account can be set on Account Manager.',
checkbox: [
{
text: 'Account you used recently',
value: 'remain'
},
{
text: 'Main account',
value: 'main'
}
]
}
},
{
id: 'sec',
storage: 'sec',
checkbox: true,
setValue: 'public',
text: {
head: 'Secondary Toot Button',
desc: '',
checkbox: [
{
text: 'Hidden',
value: 'nothing'
},
{
text: 'Public',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Private',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Local Only',
value: 'local',
kirishima: true,
kirishimaText: '非対応インスタンスでは「未収載」になります。'
}
]
}
},
{
id: 'zero',
storage: 'emoji-zero-width',
checkbox: true,
setValue: 'normal',
setValue: 'no',
text: {
head: 'Zero-width space when inserting emojis',
desc: '',
checkbox: yesno
}
},{
id: 'uploadCrop',
storage: 'uploadCrop',
checkbox: false,
doubleText: false,
width: 100,
setValue: '0',
text: {
head: 'Auto scale to fit',
desc: 'Max long-side px. Uploaded images are converted to JPEG(from JPEG) or PNG(from others). Set 0 and the images will not be resized. Notice: if you post an animated picture like GIF, it will be converted static one.',
after: 'px'
}
}
]

302
app/view/es-ES/update.html Normal file
View File

@ -0,0 +1,302 @@
<!DOCTYPE html>
<html lang="es-ES">
<head>
<title>Update - TheDesk</title>
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<style>
body {
font-family: 'Open Sans';
-webkit-app-region: drag;
cursor: move;
padding: 10px;
text-align: right;
}
#start {
display: flex;
justify-content: center;
align-items: center;
width: 100vw;
height: calc(100vh - 2.5rem);
text-align: center;
}
#checkbox {
text-align: left;
}
a,
button,
input,
label,
i {
-webkit-app-region: no-drag;
}
#updskip {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.skipbtn {
display: block;
width: 100%;
height: 100px;
border: 1px solid;
margin-left: 5px;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #c26363;
overflow: hidden;
color: #c26363;
margin-bottom: 5px;
font-size: 1.5rem;
}
.skipbtn:hover {
background-color: #c26363;
transition: all 0.3s ease-in-out;
color: white;
}
#prog {
font-size: 200%;
}
</style>
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet" />
<script>var pwa = false;</script>
</head>
<body>
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<i class="material-icons pointer waves-effect" onclick="about();">info</i>
<i class="material-icons pointer waves-effect" onclick="skipper();">clear</i>
<!--a href="update.html">Reload</a-->
<div id="start" style="filter: brightness(100%)">
<div id="box" class="show">
<h2>TheDesk</h2>
<p>Get latest TheDesk</p>
<span id="now"></span><b id="ver"></b><br />
<a href="" id="github" class="btn waves-effect grey darken-1"><i class="fab fa-github left"></i>What is new?</a><br />
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left: 15px;">Installer(Recommended)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left: 15px;">Portable ver.</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left: 15px;">zip</button>
<button class="waves-effect btn linux hide" onclick="update('linuxdeb')" style="margin-left: 15px;">deb(Recommended on buntu, Debian)</button>
<button class="waves-effect btn linux hide" onclick="update('linuxsnap')" style="margin-left: 15px;">snap</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left: 15px;">Start</button>
<br />
Some problems?<br />Please download on <a href='https://thedesk.top'>Oficial HP</a>.
</div>
<div id="skipper" class="hide">
<h4>Skip this update</h4>
You may lose a cool experience!<br />
<div id="updskip">
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light">
<div>Hidden until next TL loading</div>
</a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light">
<div>Hidden until next version</div>
</a>
</div>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top: 5px;">Continue updating</a>
</div>
<div id="dlnow" class="hide" style="width: 70%;">
<h4>Downloading...</h4>
<h4 id="prog"></h4>
<div class="progress">
<div class="determinate" style="width: 0%;"></div>
</div>
</div>
</div>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script>
function skipper() {
$('#dlnow').addClass('hide')
$('#box').toggleClass('show')
if ($('#box').hasClass('hide') && $('#skipper').hasClass('hide')) {
$('#skipper').removeClass('hide')
$('#skipper').addClass('show')
} else {
$('#box').toggleClass('hide')
$('#skipper').toggleClass('hide')
$('#skipper').toggleClass('show')
}
}
verck()
function update(sel) {
$('#box').toggleClass('show')
$('#box').toggleClass('hide')
$('#dlnow').toggleClass('hide')
$('#dlnow').toggleClass('show')
$('#prog').text('')
var bit = localStorage.getItem('bit')
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
if (sel == 'install') {
if (bit == 'x64') {
var url = json['winx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup.exe'
} else {
var file = 'TheDesk-setup.exe'
}
var filesize = json.winx64_size
} else if (bit == 'ia32') {
var url = json['winia32']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup-ia32.exe'
} else {
var file = 'TheDesk-setup-ia32.exe'
}
var filesize = json.winia32_size
}
} else if (sel == 'portable') {
if (bit == 'x64') {
var url = json['winx64p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '.exe'
} else {
var file = 'TheDesk.exe'
}
var filesize = json.winx64p_size
} else if (bit == 'ia32') {
var url = json['winia32p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-ia32.exe'
} else {
var file = 'TheDesk-ia32.exe'
}
var filesize = json.winia32p_size
}
} else if (sel == 'linux') {
var url = json['linuxx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'thedesk-' + json.unique_linux + '.zip'
} else {
var file = 'thedesk.zip'
}
var filesize = json.linuxx64_size
} else if (sel == 'linuxdeb') {
var url = json['linuxdeb']
var file = 'thedesk_' + json.unique_linux + '_amd64.deb'
var filesize = json.linuxdeb_size
} else if (sel == 'linuxsnap') {
var url = json['linuxsnap']
var file = 'thedesk_' + json.unique_linux + '_amd64.snap'
var filesize = json.linuxsnap_size
} else if (sel == 'mac') {
var url = json['mac']
var file = 'TheDesk-' + json.unique_mac + '.dmg'
var filesize = json.mac_size
}
postMessage(['downloadButton', [url, file, filesize]], '*')
})
}
function quit() {
postMessage(['sendSinmpleIpc', 'quit'], '*')
}
function updateProg(arg) {
$('.determinate').css('width', arg[0].percent * 100 + '%')
$('#prog').html(`${Math.floor(arg[0].percent * 100)}%<br />(${Math.floor(arg[0].percent*arg[1]/1024/1024*10)/10} MB / ${Math.floor(arg[1]/1024/1024*10)/10} MB)`)
}
function updateMess(arg) {
console.log(arg)
$('#prog').text(arg)
}
function verck() {
var platform = localStorage.getItem('platform')
var bit = localStorage.getItem('bit')
if (platform == 'win32') {
$('.windows').removeClass('hide')
} else if (platform == 'linux') {
$('.linux').removeClass('hide')
} else if (platform == 'darwin') {
$('.mac').removeClass('hide')
}
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
console.log(json)
if (platform == 'win32') {
$('#ver').text(json.desk)
localStorage.setItem('next-ver', json.desk)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique
} else if (platform == 'linux') {
$('#ver').text(json.desk_linux)
localStorage.setItem('next-ver', json.desk_linux)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_linux
} else if (platform == 'darwin') {
$('#ver').text(json.desk_mac)
localStorage.setItem('next-ver', json.desk_mac)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_mac
}
$('#github').attr('href', url)
$('#now').text(localStorage.getItem('ver'))
})
}
function nextv() {
localStorage.setItem('new-ver-skip', 'true')
window.close()
}
function enc(ver) {
var ver = ver.replace(/\s/g, '')
var ver = ver.replace(/\(/g, '-')
var ver = ver.replace(/\)/g, '')
var ver = ver.replace(/\[/g, '_')
var ver = ver.replace(/\]/g, '')
return ver
}
</script>
</body>
</html>

154
app/view/fr-FR/acct.html Normal file
View File

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="fr-FR">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link
href="../../node_modules/materialize-css/dist/css/materialize.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<link href="../../css/tl.css" rel="stylesheet" type="text/css" />
<link href="../../css/userdata.css" rel="stylesheet" type="text/css" />
<link
href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/acct.css" rel="stylesheet" type="text/css" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<script>var pwa = false;</script> <script>var store = false;</script>
</head>
<body id="mainView" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script
type="text/javascript"
src="../../node_modules/materialize-css/dist/js/materialize.js"
></script>
<script type="text/javascript" src="main.js"></script>
<script
type="text/javascript"
src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"
></script>
<script>
var misskeytoken = false
</script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"
>Retour</a
><br />
<h5>Liste des comptes</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div class="hide-second">
<a href="setting.html">Having the exported file of TheDesk, click here to jump setting page</a>
</div>
<div>
<h5>Ajouter un compte</h5>
<br />
<div id="add">
<div class="row">
<div class="col s8">
Fill the instance domain (like mastodon.social)<br />
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp" />
<div id="ins-suggest"></div>
<button class="btn waves-effect" onclick="instance()">Login</button><br />
<div class="pwa">
Uncheck it to skip pasiting code.(login to Mastodon on Windows or macOS) (Recommended: pcheck)<br />
<label>
<input type="checkbox" class="filled-in" id="linux" />
<span>Code setup</span>
</label>
<br />
</div>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<span>Login as Misskey</span> </label
><br />
</div>
<div class="col s4 scr" aria-hidden="true">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div>
</div>
<div id="auth" style="display:none">
Paste the code and close browser.<br />
<input type="text" id="code" placeholder="Code" required />
<button class="btn waves-effect" onclick="code()">Auth</button><br />
<br />
<a onclick="atSetup()" class="pointer">Use access token to login(click after fill not code but access-token in box: Advanced)</a>
<div id="compt" style="display:none" class="scr">
<h5>ログイン前に必ずご確認ください</h5>
<span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span
>のため以下の機能がご利用いただけません。
<span id="compt-warn" style="display:none"
>また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span
>
<ul id="compt-list"></ul>
</div>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
Read <a href="https://thedesk.top/how-to-misskey-login.html">Docs(ja)</a> to login Misskey.<br />
<input type="hidden" id="misskey-url" />
<input type="text" id="misskey-key" placeholder="Code" required />
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br />
<br />
<a onclick="atSetup('misskey')" class="pointer">Use access token to login(click after fill not code but access-token in box: Advanced)</a>
</div>
</div>
<div class="hide-first">
<h5>Main an account</h5>
<div class="input-field" style="width:300px">
<span data-trans="your_acct">Choisir un compte</span>
<br />
<select
id="main-acct-sel"
class="acct-sel"
style="color:black"
onchange="mainacct()"
></select>
<label></label>
</div>
<ul id="domain-list" class="collection transparent"></ul>
<div id="instance-data">
Some instance data by
<a href="https://instances.social" target="_blank">instances.social API</a><br />
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br />
<span id="ins-desc"></span><br />
<img src="../../img/loading.svg" id="ins-prof" width="200" /><br />
<br />
Domaine:<span id="ins-name"></span><br />
Serveur fédérées:<span id="ins-connect"></span><br />
Pouets:<span id="ins-toot"></span><br />
Utilisateur·rice·s:<span id="ins-user"></span>Utilisateur·rice·s<br />
Connection:<span id="ins-per"></span>%<br />
Version de Mastodon:<span id="ins-ver"></span>@<span id="ins-upd"></span><br />
</div>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/common/sha256.js"></script>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/manager.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>
<script>$('body').addClass(localStorage.getItem('platform'))</script>
</body>
</html>

1287
app/view/fr-FR/index.html Normal file

File diff suppressed because it is too large Load Diff

1
app/view/fr-FR/main.js Normal file

File diff suppressed because one or more lines are too long

632
app/view/fr-FR/setting.html Normal file
View File

@ -0,0 +1,632 @@
<!doctype html>
<html lang="fr-FR" style="overflow-y:scroll">
<head>
<title>Settings - TheDesk</title>
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet">
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href="../../css/pickr.css" type="text/css" rel="stylesheet">
<link href="../../css/master.css" type="text/css" rel="stylesheet">
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet">
<meta charset="utf-8">
<style>
input {
max-height: 3.84rem !important
}
.pcr-result {
height: 1rem !important;
}
.container-after-titlebar {
padding: 20px;
}
</style>
<script>var pwa = false;</script>
<script>var store = false;</script>
</head>
<body id="mainView" style="overflow-y:scroll" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<script type="text/javascript" src="main.js"></script>
<script src="../../node_modules/json5/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
<script>function renderMem() { return false; }</script>
<h4>Paramètres</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>Préférences système
</div>
<div class="collapsible-body">
<h5>Langues</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br><br>
<div style="display: flex;">
<div style="width: 22rem;" id="langsel">
<select id="langsel-sel"><option value="ja">日本語</option><option value="ja-KS">日本語(関西)</option><option value="en">English</option><option value="bg">български</option><option value="cs">Česky</option><option value="de">Deutsch</option><option value="es-AR">Español, argentina</option><option value="it-IT">italiano</option><option value="zh-CN">简体中文</option><option value="zh-TW">繁體中文(β)</option><option value="fr-FR">français(β)</option><option value="no-NO">norsk(β)</option><option value="pt-BR">Português, brasileiro(β)</option><option value="ru-RU">русский(β)</option><option value="es-ES">Español(β)</option><option value="ps">Crowdin translate system(beta)</option></select>
</div>
<button class="btn waves-effect" onclick="changeLang()">Modifier</button>
</div>
<h5>Importer et exporter les préférences</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3"
style="width:100%; max-width:15rem;">Exporter</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3"
style="width:100%; max-width:15rem;">Importer</button><br>
Si vous avez une erreur lorsque vous choisissez le fichier, veuillez coller les chaînes affichées lorsque vous ouvrez le fichier et cliquez sur Importer<br>
<input type="text" id="imp-exp" style="width: 22rem">
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><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">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Modifier</button>
</template><br>
</template>
</div>
<h5>Police de caractères</h5>
Select your favorite font to 'Select'<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="font()">Sélectionner</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:22rem; height:40rem;"></div>
<br>
<input type="text" style="width:11.5rem" id="font">
<button class="btn waves-effect" style="width:7.7rem;" onclick="settings()">Sauvegarder</button>
<br>
<h5>Folder to save</h5>
TheDesk utilise cette valeur lorsqu'il tente d'enregistrer des photos ou de prendre des captures d'écran.<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="savefolder()">Modifier</button>
<br>
</div>
</li>
<li class="pwa">
<div class="collapsible-header">
<i class="material-icons">color_lens</i>Thèmes
</div>
<div class="collapsible-body">
<h4>Sélectionner un thème</h4>
<div style="width:22rem" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<h4>Modifier et ajouter des thèmes</h4>
<div style="width:22rem" id="edit-selector" data-add="Ajouter">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">Ajouter</option>
</select>
</div>
<h5>Nom</h5>
<input type="text" style="width:22rem" id="custom_name" placeholder="Nom...">
<h5>À propos de ce thème</h5>
<div class="input-field"><textarea style="width:22rem" id="custom_desc" class="materialize-textarea"
placeholder="À propos de ce thème..."></textarea></div>
<h5>Jeu de couleurs</h5>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="dark" value="dark"
checked="true" />
<span>Dark</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="light"
value="light" />
<span>Light</span>
</label><br><br />
<button class="btn waves-effect" onclick="advanced()">Options avancées</button>
<span class="advanced hide"></span>
<div id="pickers">
<div>
<h5>Background</h5>Couleur de l'arrière-plan<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_0" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker0_value">
</div>
<div>
<h5>Text</h5>Couleur du texte<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_1" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker1_value">
</div>
<div>
<h5>Subcolor</h5>Distinguishable from background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_2" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>Background of boosts<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_3" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker3_value">
</div>
<div class="advanced hide">
<h5>Modal</h5>Background of modal window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_4" value="1" />
<span>Use this</span>
</label><br />
Copier depuis:
<a class="pointer" onclick="copyColor('background','modal')">Background</a>
<br />
<input type="color" id="color-picker4_value">
</div>
<div class="advanced hide">
<h5>Modal Footer</h5>Background of modal window's footer<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_5" value="1" />
<span>Use this</span>
</label><br />
Copier depuis:
<a class="pointer" onclick="copyColor('background','modalFooter')">Background</a>/
<a class="pointer" onclick="copyColor('modal','modalFooter')">Modal</a>
<br />
<input type="color" id="color-picker5_value">
</div>
<div class="advanced hide">
<h5>3rd Color</h5>Backgroud of tag buttons, etc(near to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_6" value="1" />
<span>Use this</span>
</label><br />
Copier depuis:
<a class="pointer" onclick="copyColor('subcolor','third')">Subcolor</a>
<br />
<input type="color" id="color-picker6_value">
</div>
<div class="advanced hide">
<h5>4th Color</h5>Title bar(same scheme to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_7" value="1" />
<span>Use this</span>
</label><br />
Copier depuis:
<a class="pointer" onclick="copyColor('subcolor','forth')">Subcolor</a>/
<a class="pointer" onclick="copyColor('third','forth')">3rd Color</a>
<br />
<input type="color" id="color-picker7_value">
</div>
<div class="advanced hide">
<h5>Bottom</h5>Background of menu-bar at bottom of window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_8" value="1" />
<span>Use this</span>
</label><br />
Copier depuis:
<a class="pointer" onclick="copyColor('subcolor','bottom')">Subcolor</a>
<br />
<input type="color" id="color-picker8_value">
</div>
<div class="advanced hide">
<h5>2nd Accent</h5>Emphasized toot's background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_9" value="1" />
<span>Use this</span>
</label><br />
Copier depuis:
<a class="pointer" onclick="copyColor('accent','emphasized')">Accent</a>
<br />
<input type="color" id="color-picker9_value">
</div>
<div class="advanced hide">
<h5>Postbox</h5>Background of post-box and menu<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_10" value="1" />
<span>Use this</span>
</label><br />
Copier depuis:
<a class="pointer" onclick="copyColor('subcolor','postbox')">Subcolor</a>
<br />
<input type="color" id="color-picker10_value">
</div>
<div class="advanced hide">
<h5>Active</h5>Background of 'active' elements<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_11" value="1" />
<span>Use this</span>
</label><br />
Copier depuis:
<a class="pointer" onclick="copyColor('accent','active')">Accent</a>
<br />
<input type="color" id="color-picker11_value">
</div>
<div class="advanced hide">
<h5>Selected</h5>Background of selected with arrow keys<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_12" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker12_value">
</div>
<div class="advanced hide">
<h5>Selected with shared</h5>Background of selected with arrow keys(boosted toots)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_13" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker13_value">
</div>
</div><br /><br />
<button class="btn-large waves-effect" onclick="customComp()">Modifier</button>&nbsp;<button
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">Supprimer</button><br><br>
<input type="text" style="width:22rem;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br>
<h4>Import of custom themes</h4>
<input type="text" style="width:22rem;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">Importer</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>Timeline Preferences
</div>
<div class="collapsible-body">
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Modifier</button>
</template><br>
</template>
</div>
<h5>Son personnalisé</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span
id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span
id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span
id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span
id="c4-file"></span><br>
<h5>Volume</h5>
0-100 (par défaut:80)<br>
<p class="range-field"><span id="soundVolVal">80</span><br>
<input type="range" id="soundvol" min="0" max="100" value="80" onchange="customVol()"
style="width:40rem; max-width:100%" />
</p>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>Posting Preferences
</div>
<div class="collapsible-body">
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template
v-if="(!check.kirishima || (check.kirishima && kirishima) )&& (!check.quote || (check.quote && quoters))">
<label><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" />
<span>{{check.text}}</span></label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Modifier</button>
</template><br>
</template>
</div>
<h5>Easy inserter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:11.5rem" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:7.7rem;">Sauvegarder</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:11.5rem" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:7.7rem;">Sauvegarder</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:11.5rem" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:7.7rem;">Sauvegarder</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<img src="../../img/aiscript.svg"
style="height: 1.5rem; margin-left: 0.4rem; margin-right: 0.4rem;">Plugins
</div>
<div class="collapsible-body">
<a href="https://github.com/cutls/TheDesk/blob/master/plugin.md">Japanese docs of AiScript TheDesk plugins</a><br />
<textarea id="plugin" data-id="add_new" style="height: 20rem"></textarea>
<button class="btn waves-effect" style="width:7.7rem;" onclick="completePlugin()">Modifier</button>
<button class="btn waves-effect red disabled plugin_delete" style="width:7.7rem;"
onclick="deletePlugin()">Supprimer</button>
<h5>Plugin list</h5>
<div style="width:22rem" id="plugin-selector" data-add="Ajouter">
<select id="plugin-edit-sel" class="custom-sel" onchange="pluginEdit()">
<option value="add_new">Ajouter</option>
</select>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>Mute & Emphasis Preferences
</div>
<div class="collapsible-body">
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:7.7rem;">Sauvegarder</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:7.7rem;">Sauvegarder</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fab fa-spotify"></i>Spotify and NowPlaying Preferences
</div>
<div class="collapsible-body">
<h5>Account Connection(Spotify)</h5>
TheDesk enregistre vos données sur le serveur thedesk.top.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
onclick="spotifyAuth()" class="btn waves-effect" style="width:7.7rem;">Sauvegarder</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-enable"><i
class="fab fa-spotify left"></i>Se connecter</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-disable"><i
class="fab fa-spotify left"></i>Se déconnecter</a>
<h5>Account Connection(Last.fm)</h5>
User name...(empty to disconnect) You cannot hide your recent play log at last.fm privacy settings.<br />
<input type="text" style="width:11.5rem" id="lastFmUser">
<button onclick="lastFmSet()" class="btn waves-effect" style="width:7.7rem;">Sauvegarder</button>
<h5>Modifier un modèle</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
<span class="mac">>macOS:{song}:Song name/{album}:Album name/{artist}:Artist name/composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre}</span><br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:7.7rem;">Sauvegarder</button>
<h5>Attach an Artwork of Spotify</h5>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes"
value="yes" />
<span>Oui</span>
</label>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no"
value="no" />
<span>Non</span>
</label>
<div class="mac">
<h5>Si la chanson n'a pas d'illustration, la compléter automatiquement (macOS)</h5>
If you nowplaying an non-artwork song, get one which seems nice through API. If you do not like the completed artwork, you can right-click it to delete.<br />
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_yes"
value="yes" />
<span>Oui</span>
</label>
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_no"
value="no" />
<span>Non</span>
</label>
<br>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>BouyomiChan connect</h5>
Require: BouyomiChan WebSocket Plugin<a href="https://github.com/xztaityozx/BouyomiChan-WebSocket-Plugin"
target="_blank">GitHub</a><br>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_yes"
value="yes" />
<span>Oui</span>
</label>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_no" value="no" />
<span>Non</span>
</label>
<h5>Vitesse</h5>
1-100(default:10)<br>
<p class="range-field"><span id="voicespeedVal">10</span><br>
<input type="range" id="voicespeed" min="1" max="100" value="10"
onchange="document.getElementById('voicespeedVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><span id="voicepitchVal">50</span><br>
<input type="range" id="voicepitch" min="0" max="100" value="50"
onchange="document.getElementById('voicepitchVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><span id="voicevolVal">100</span><br>
<input type="range" id="voicevol" min="0" max="100" value="100"
onchange="document.getElementById('voicevolVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Test</h5>
<input type="text" style="width:27rem" id="voicetxt" value="TheDesk est un client Mastodon open-source pour PC.">
<button class="btn waves-effect blue" style="width:11.5rem;" onclick="voicePlay()"
id="testplay">Jouer/Arrêter</button><br>
<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="voiceSettings()">Sauvegarder</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:15rem;"><i
class="material-icons left">undo</i>Retour</a>
<br>
<br>Raccourcis clavier
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Publier</li>
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
<li>Alt+Enter:Secondary Toot Button</li>
<li>Ctrl+E:Marquer toutes les notifications comme lues</li>
<li>Ctrl+U:Sélectionner la colonne de toot en haut à gauche (colonne numéro 1)</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
<li>Ctrl+Shift+C:Clear toot box</li>
<li>Ctrl+Shift+S:Paramètres</li>
<li>Ctrl+Shift+M:Account Manager</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Montrer l'image précédente ou suivante</li>
<li>Molette de la souris : Zoomer sur l'image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
Quand un toot est sélectionné :
<li>F:Mettre ce pouet en favoris</li>
<li>B:Booster ce pouet</li>
<li>R:Répondre à ce pouet</li>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:40rem;"
onclick="if(confirm('Supprimer toutes les données. Vous ne pouvez pas annuler. Continuer ?')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>Réinitialiser (Danger)</button><br><br>
<button class="btn waves-effect indigo pwa" onclick="about()" style="width:100%; max-width:40rem;"><i
class="material-icons left">info</i>About TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">web</i>Site Web</a>
<a href="https://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Assistance(Pixiv FANBOX)</a>
<a href="https://www.patreon.com/cutls" class="btn waves-effect red darken-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Assistance(Patreon)</a>
<a href="https://liberapay.com/cutls" class="btn waves-effect black-text"
style="width:100%; max-width:40rem; background-color: #f6c915"><i
class="material-icons left">trending_up</i>Assistance(Liberapay)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">list</i>Aide/Docs</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2"
style="width:100%; max-width:40rem;"><i class="fab fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@cutls.com" class="btn waves-effect blue lighten-2"
style="width:100%; max-width:40rem;"><img src="../../img/desk_full.svg" class="left" width="25"
style="padding-top:5px;">Main author: Cutls@cutls.com</a>
<br>
TheDesk @ <a href="https://github.com/cutls/TheDesk/commits/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c">89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c</a> - <a
onclick="checkupd(); return localStorage.removeItem('new-ver-skip'); location.href='index.html';"
class="pointer pwa">Vérifier les mises à jour</a><br>
<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
<a href="https://status.cutls.com/">
<img src="https://status.cutls.com/badge-service?site=thedesk.top">
</a><br>
<h5>OSS License</h5>
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2Fcutls%2FTheDesk/refs/branch/master/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c"
alt="FOSSA Status"><img
src="https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcutls%2FTheDesk.svg?type=small" /></a>
<br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a
href="https://thedesk.top/priv.html">Privacy
Policy</a>
<br>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/platform/aiscript.js"></script>
<script type="text/javascript" src="../../js/platform/plugin.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/ui/spotify.js"></script>
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/platform/pickr.js"></script>
<script type="text/javascript" src="../../js/ui/settings.js"></script>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>

View File

@ -0,0 +1,756 @@
var yesno = [
{
text: 'Oui',
value: 'yes'
},
{
text: 'Non',
value: 'no'
}
]
var sound = [
{
text: 'Aucun',
value: 'none'
},
{
text: 'Par défaut',
value: 'default'
},
{
text: 'Custom 1',
value: 'c1'
},
{
text: 'Custom 2',
value: 'c2'
},
{
text: 'Custom 3',
value: 'c3'
},
{
text: 'Custom 4',
value: 'c4'
}
]
var envConstruction = [
{
id: 'popup',
storage: 'popup',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Notification pop-up',
desc: 'Hide to set "0"',
after: 'sec'
}
},
{
id: 'notf',
storage: 'nativenotf',
checkbox: true,
setValue: 'yes',
text: {
head: 'Native notification',
desc: 'Cela ne fonctionne pas sur la version portable pour Windows.',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'width',
storage: 'width',
width: 50,
setValue: 300,
text: { after: 'px ~ ' }
},
{
id: 'maxWidth',
storage: 'max-width',
width: 50,
setValue: 600,
text: { after: 'px' }
}
],
text: {
head: 'Largeur des colonnes',
desc: 'Scroll bar will be shown when your window size is more than ammounts of columns.'
}
},
{
id: 'margin',
storage: 'margin',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Marge entre les timelines',
desc: '',
after: 'px'
}
},
{
id: 'fixwidth',
storage: 'fixwidth',
checkbox: false,
doubleText: false,
setValue: 300,
width: 50,
text: {
head: 'Largeur minimale du navigateur TweetDeck',
desc: '',
after: 'px above'
}
},
{
id: 'size',
storage: 'size',
checkbox: false,
doubleText: false,
width: 50,
setValue: 13,
text: {
head: 'Taille de la police de caractères',
desc: '<span style="font-size:13px">13px(valeur absolue)</span>',
after: 'px'
}
},
{
id: 'ha',
storage: 'ha',
checkbox: true,
setValue: false,
text: {
head: 'Désactiver l\accélération matérielle',
desc: 'Redémarrage Automatique',
checkbox: [
{
text: 'Oui',
value: 'true'
},
{
text: 'Non',
value: 'false'
}
]
}
},
{
id: 'ua',
storage: 'ua_setting',
checkbox: false,
doubleText: false,
setValue: '',
width: 200,
text: {
head: 'User agent',
desc: 'Restart when changed'
}
},
{
id: 'srcUrl',
storage: 'srcUrl',
checkbox: false,
doubleText: false,
width: 200,
setValue: 'https://google.com/search?q={q}',
text: {
head: 'Moteur de recherche',
desc: '{q} will be replaced to query.',
after: ''
}
},{
id: 'download',
storage: 'dl-win',
checkbox: true,
setValue: 'no',
text: {
head: 'Versioning(o Windows downloader)',
desc: 'ex: TheDesk-1.0.0-setup.exe',
checkbox: yesno
}
}
]
var tlConstruction = [
{
id: 'time',
storage: 'datetype',
checkbox: true,
setValue: 'absolute',
text: {
head: 'Format de lheure',
desc: 'Relative format:"1 minutes ago","3 days ago"<br>Absolute format:"23:25:21","2017/12/30 23:59:00"<br>Mixed format:toots posted today are relative-format, others are absolute-format.',
checkbox: [
{
text: 'Relative',
value: 'relative'
},
{
text: 'Absolute',
value: 'absolute'
},
{
text: 'Both relative and absolute',
value: 'double'
},
{
text: 'Mixed',
value: 'medium'
}
]
}
},
{
id: 'ul',
storage: 'locale',
checkbox: true,
setValue: 'yes',
text: {
head: 'Server\s unique locale',
desc: 'This value is available on some Japanese servers',
checkbox: yesno
}
},
{
id: 'nsfw',
storage: 'nsfw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide NSFW pictures',
desc: 'Strong blur effect',
checkbox: yesno
}
},
{
id: 'cw',
storage: 'cw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide CW contents',
desc: '',
checkbox: yesno
}
},
{
id: 'rp',
storage: 'replyct',
checkbox: true,
setValue: 'hidden',
text: {
head: 'Reply counter style',
desc: '',
checkbox: [
{
text: 'Show 1+ if the replies are more than 1.',
value: 'hidden'
},
{
text: 'Show full count(1,2...)',
value: 'all'
}
]
}
},
{
id: 'gif',
storage: 'gif',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animated GIF images animation',
desc: '',
checkbox: yesno
}
},
{
id: 'tag',
storage: 'tag-range',
checkbox: true,
setValue: 'local',
text: {
head: 'Tag TL Search',
desc: '',
checkbox: [
{
text: 'Use federated network',
value: 'all'
},
{
text: 'Utiliser le réseau local',
value: 'local'
}
]
}
},
{
id: 'via',
storage: 'viashow',
checkbox: true,
setValue: 'no',
text: {
head: 'Afficher via',
desc: '',
checkbox: yesno
}
},
{
id: 'mov',
storage: 'mouseover',
checkbox: true,
setValue: 'no',
text: {
head: 'Hide action buttons without mouseover',
desc: 'You may feel \mouseover\ is unconfortable:(',
checkbox: [
{
text: 'Mouseover to show',
value: 'yes'
},
{
text: 'Cliquez pour afficher',
value: 'click'
},
{
text: 'Non',
value: 'no'
}
]
}
},
{
id: 'notfm',
storage: 'setasread',
checkbox: true,
setValue: 'yes',
text: {
head: 'Show Notification marker, red colored bell and counter(if you show a notification column.)',
desc: '',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'sentence',
storage: 'sentence',
width: 50,
setValue: 500,
text: { after: 'lignes above ou' }
},
{
id: 'letters',
storage: 'letters',
width: 50,
setValue: 7000,
text: { after: 'lettres above' }
}
],
text: {
head: 'Auto folding',
desc: 'TheDesk ne réduit pas les toots de 5 caractères ou moins. Si réduit, les retours à la ligne ne sont pas affichés. TheDesk compte uniquement les retours à la ligne comme le nombre de lignes.'
}
},
{
id: 'img-height',
storage: 'img-height',
checkbox: false,
doubleText: false,
width: 80,
setValue: 200,
text: {
head: 'Hauteur des images',
desc: 'Option:Set "full" to uncrop.',
after: 'px'
}
},
{
id: 'ticker',
storage: 'ticker_ok',
checkbox: true,
setValue: 'no',
text: {
head: 'Activer OpenSticker',
desc: 'Show colorful stickers about tooters\ server. <a href="https://cdn.weep.me/mastodon/">About #InstanceTicker</a> Copyright 2018 weepjp, kyori19.',
checkbox: yesno
}
},
{
id: 'anime',
storage: 'animation',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animation des timelines',
desc: '',
checkbox: yesno
}
},
{
id: 'markers',
storage: 'markers',
checkbox: true,
setValue: 'no',
text: {
head: 'Markers(mark as read) on HTL and notifications',
desc: 'Mastodon 3.0~. Shared on WebUI and third-party supported clients.',
checkbox: yesno
}
},
{
id: 'remote_img',
storage: 'remote_img',
checkbox: true,
setValue: 'no',
text: {
head: 'Récupérer les images depuis le serveur distant',
desc: 'All previews are got from your loginned cache server.',
checkbox: yesno
}
},
{
id: 'bkm',
storage: 'bookmark',
checkbox: true,
setValue: 'no',
text: {
head: 'Show a bookmarking toot button',
desc: '',
checkbox: yesno
}
},
{
id: 'scroll',
storage: 'scroll',
checkbox: true,
setValue: 'normalScrollBar',
text: {
head: 'Height of the scroll bar',
desc: '',
checkbox: [
{
text: 'Thick',
value: 'thickScrollBar'
},
{
text: 'Normal',
value: 'normalScrollBar'
},
{
text: 'Thin',
value: 'thinScrollBar'
}
]
}
},
{
id: 'replySound',
storage: 'replySound',
checkbox: true,
setValue: 'none',
text: {
head: 'Son (Réponse)',
desc: '',
checkbox: sound
}
},
{
id: 'favSound',
storage: 'favSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Son (Fav)',
desc: '',
checkbox: sound
}
},
{
id: 'btSound',
storage: 'btSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Son (Boost)',
desc: '',
checkbox: sound
}
},
{
id: 'followSound',
storage: 'followSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Son (Follow)',
desc: '',
checkbox: sound
}
}
]
var postConstruction = [
{
id: 'cw-text',
storage: 'cw-text',
checkbox: false,
doubleText: false,
width: 150,
setValue: '',
text: {
head: 'Texte d\avertissement par défaut',
desc: '',
after: ''
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'cw_sentence',
storage: 'cw_sentence',
width: 50,
setValue: 500,
text: { after: 'lignes above ou' }
},
{
id: 'cw_letters',
storage: 'cw_letters',
width: 50,
setValue: 7000,
text: { after: 'lettres above' }
}
],
text: {
head: 'Alerte avant de poster un long toot.',
desc: 'Afficher la boîte de dialogue si vous cachez un texte trop long.'
}
},
{
id: 'cws',
storage: 'always-cw',
checkbox: true,
setValue: 'no',
text: {
head: 'Always CW set',
desc: '',
checkbox: yesno
}
},
{
id: 'cw-continue',
storage: 'cw-continue',
checkbox: true,
setValue: 'no',
text: {
head: '@@cwContinue@@',
desc: '',
checkbox: yesno
}
},
{
id: 'vis',
storage: 'vis',
checkbox: true,
setValue: 'public',
text: {
head: 'Visibilité par défaut',
desc: '',
checkbox: [
{
text: 'Public',
value: 'public'
},
{
text: 'Non listé',
value: 'unlisted'
},
{
text: 'Privé',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Memory(memorized as each server)',
value: 'memory'
},
{
text: 'Default of your visibility(Set on preferences of Mastodon server)',
value: 'useapi'
}
]
}
},
{
id: 'img',
storage: 'img',
checkbox: true,
setValue: 'no-act',
text: {
head: 'Posting images preferences',
desc: '',
checkbox: [
{
text: 'Insert media URL',
value: 'url'
},
{
text: 'Insert nothig',
value: 'no-act'
}
]
}
},
{
id: 'box',
storage: 'box',
checkbox: true,
setValue: 'yes',
text: {
head: 'Action of posting-box',
desc: '',
checkbox: [
{
text: 'Folding',
value: 'yes'
},
{
text: 'Open after posting',
value: 'no'
},
{
text: 'Absolutely open',
value: 'absolute'
}
]
}
},
{
id: 'quote',
storage: 'quote',
checkbox: true,
setValue: 'nothing',
text: {
head: 'Format des citations',
desc: '',
checkbox: [
{
text: 'URL uniquement',
value: 'simple'
},
{
text: 'URL and acct(mention to the user)',
value: 'mention'
},
{
text: 'URL, text and acct(mention to the user)',
value: 'full'
},
{
text: 'API (seulement certaines instances)',
value: 'apiQuote',
quote: true
},
{
text: 'Disabled(Hide buttons on TLs)',
value: 'nothing'
}
]
}
},
{
id: 'main',
storage: 'mainuse',
checkbox: true,
setValue: 'remain',
text: {
head: 'Default accounts of actions',
desc: 'Main account can be set on Account Manager.',
checkbox: [
{
text: 'Account you used recently',
value: 'remain'
},
{
text: 'Compte principal',
value: 'main'
}
]
}
},
{
id: 'sec',
storage: 'sec',
checkbox: true,
setValue: 'public',
text: {
head: 'Secondary Toot Button',
desc: '',
checkbox: [
{
text: 'Hidden',
value: 'nothing'
},
{
text: 'Public',
value: 'public'
},
{
text: 'Non listé',
value: 'unlisted'
},
{
text: 'Privé',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Local Only',
value: 'local',
kirishima: true,
kirishimaText: '非対応インスタンスでは「未収載」になります。'
}
]
}
},
{
id: 'zero',
storage: 'emoji-zero-width',
checkbox: true,
setValue: 'normal',
setValue: 'no',
text: {
head: 'Zero-width space when inserting emojis',
desc: '',
checkbox: yesno
}
},{
id: 'uploadCrop',
storage: 'uploadCrop',
checkbox: false,
doubleText: false,
width: 100,
setValue: '0',
text: {
head: 'Ajuster automatiquement la taille',
desc: 'Max long-side px. Uploaded images are converted to JPEG(from JPEG) or PNG(from others). Set 0 and the images will not be resized. Notice: if you post an animated picture like GIF, it will be converted static one.',
after: 'px'
}
}
]

302
app/view/fr-FR/update.html Normal file
View File

@ -0,0 +1,302 @@
<!DOCTYPE html>
<html lang="fr-FR">
<head>
<title>Update - TheDesk</title>
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<style>
body {
font-family: 'Open Sans';
-webkit-app-region: drag;
cursor: move;
padding: 10px;
text-align: right;
}
#start {
display: flex;
justify-content: center;
align-items: center;
width: 100vw;
height: calc(100vh - 2.5rem);
text-align: center;
}
#checkbox {
text-align: left;
}
a,
button,
input,
label,
i {
-webkit-app-region: no-drag;
}
#updskip {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.skipbtn {
display: block;
width: 100%;
height: 100px;
border: 1px solid;
margin-left: 5px;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #c26363;
overflow: hidden;
color: #c26363;
margin-bottom: 5px;
font-size: 1.5rem;
}
.skipbtn:hover {
background-color: #c26363;
transition: all 0.3s ease-in-out;
color: white;
}
#prog {
font-size: 200%;
}
</style>
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet" />
<script>var pwa = false;</script>
</head>
<body>
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<i class="material-icons pointer waves-effect" onclick="about();">info</i>
<i class="material-icons pointer waves-effect" onclick="skipper();">clear</i>
<!--a href="update.html">Reload</a-->
<div id="start" style="filter: brightness(100%)">
<div id="box" class="show">
<h2>TheDesk</h2>
<p>Téléchargez le dernier TheDesk</p>
<span id="now"></span><b id="ver"></b><br />
<a href="" id="github" class="btn waves-effect grey darken-1"><i class="fab fa-github left"></i>What is new?</a><br />
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left: 15px;">Installer(Recommended)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left: 15px;">Portable ver.</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left: 15px;">zip</button>
<button class="waves-effect btn linux hide" onclick="update('linuxdeb')" style="margin-left: 15px;">deb(Recommended on buntu, Debian)</button>
<button class="waves-effect btn linux hide" onclick="update('linuxsnap')" style="margin-left: 15px;">snap</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left: 15px;">Démarrer</button>
<br />
Some problems?<br />Please download on <a href="https://thedesk.top">Oficial HP</a>.
</div>
<div id="skipper" class="hide">
<h4>Ignorer cette mise à jour</h4>
You may lose a cool experience!<br />
<div id="updskip">
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light">
<div>Hidden until next TL loading</div>
</a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light">
<div>Hidden until next version</div>
</a>
</div>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top: 5px;">Continue updating</a>
</div>
<div id="dlnow" class="hide" style="width: 70%;">
<h4>Downloading...</h4>
<h4 id="prog"></h4>
<div class="progress">
<div class="determinate" style="width: 0%;"></div>
</div>
</div>
</div>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script>
function skipper() {
$('#dlnow').addClass('hide')
$('#box').toggleClass('show')
if ($('#box').hasClass('hide') && $('#skipper').hasClass('hide')) {
$('#skipper').removeClass('hide')
$('#skipper').addClass('show')
} else {
$('#box').toggleClass('hide')
$('#skipper').toggleClass('hide')
$('#skipper').toggleClass('show')
}
}
verck()
function update(sel) {
$('#box').toggleClass('show')
$('#box').toggleClass('hide')
$('#dlnow').toggleClass('hide')
$('#dlnow').toggleClass('show')
$('#prog').text('')
var bit = localStorage.getItem('bit')
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
if (sel == 'install') {
if (bit == 'x64') {
var url = json['winx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup.exe'
} else {
var file = 'TheDesk-setup.exe'
}
var filesize = json.winx64_size
} else if (bit == 'ia32') {
var url = json['winia32']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup-ia32.exe'
} else {
var file = 'TheDesk-setup-ia32.exe'
}
var filesize = json.winia32_size
}
} else if (sel == 'portable') {
if (bit == 'x64') {
var url = json['winx64p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '.exe'
} else {
var file = 'TheDesk.exe'
}
var filesize = json.winx64p_size
} else if (bit == 'ia32') {
var url = json['winia32p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-ia32.exe'
} else {
var file = 'TheDesk-ia32.exe'
}
var filesize = json.winia32p_size
}
} else if (sel == 'linux') {
var url = json['linuxx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'thedesk-' + json.unique_linux + '.zip'
} else {
var file = 'thedesk.zip'
}
var filesize = json.linuxx64_size
} else if (sel == 'linuxdeb') {
var url = json['linuxdeb']
var file = 'thedesk_' + json.unique_linux + '_amd64.deb'
var filesize = json.linuxdeb_size
} else if (sel == 'linuxsnap') {
var url = json['linuxsnap']
var file = 'thedesk_' + json.unique_linux + '_amd64.snap'
var filesize = json.linuxsnap_size
} else if (sel == 'mac') {
var url = json['mac']
var file = 'TheDesk-' + json.unique_mac + '.dmg'
var filesize = json.mac_size
}
postMessage(['downloadButton', [url, file, filesize]], '*')
})
}
function quit() {
postMessage(['sendSinmpleIpc', 'quit'], '*')
}
function updateProg(arg) {
$('.determinate').css('width', arg[0].percent * 100 + '%')
$('#prog').html(`${Math.floor(arg[0].percent * 100)}%<br />(${Math.floor(arg[0].percent*arg[1]/1024/1024*10)/10} MB / ${Math.floor(arg[1]/1024/1024*10)/10} MB)`)
}
function updateMess(arg) {
console.log(arg)
$('#prog').text(arg)
}
function verck() {
var platform = localStorage.getItem('platform')
var bit = localStorage.getItem('bit')
if (platform == 'win32') {
$('.windows').removeClass('hide')
} else if (platform == 'linux') {
$('.linux').removeClass('hide')
} else if (platform == 'darwin') {
$('.mac').removeClass('hide')
}
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
console.log(json)
if (platform == 'win32') {
$('#ver').text(json.desk)
localStorage.setItem('next-ver', json.desk)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique
} else if (platform == 'linux') {
$('#ver').text(json.desk_linux)
localStorage.setItem('next-ver', json.desk_linux)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_linux
} else if (platform == 'darwin') {
$('#ver').text(json.desk_mac)
localStorage.setItem('next-ver', json.desk_mac)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_mac
}
$('#github').attr('href', url)
$('#now').text(localStorage.getItem('ver'))
})
}
function nextv() {
localStorage.setItem('new-ver-skip', 'true')
window.close()
}
function enc(ver) {
var ver = ver.replace(/\s/g, '')
var ver = ver.replace(/\(/g, '-')
var ver = ver.replace(/\)/g, '')
var ver = ver.replace(/\[/g, '_')
var ver = ver.replace(/\]/g, '')
return ver
}
</script>
</body>
</html>

View File

@ -67,10 +67,8 @@
"add_new": "Add new", "add_new": "Add new",
"name": "Name", "name": "Name",
"desc": "About this theme", "desc": "About this theme",
"customShare": "Share this code with other TheDesk. Do not share this code with MiAS.",
"customImport": "Import of custom themes", "customImport": "Import of custom themes",
"delete": "Delete", "delete": "Delete",
"cImpWarn": "Get more themes on <a href=\"https://assets.msky.cafe/\" target=\"_blank\">MiAS</a>",
"timeline": "Timeline Preferences", "timeline": "Timeline Preferences",
"timemode": "Time format", "timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"", "relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",

View File

@ -66,10 +66,8 @@
"add_new": "新規作成", "add_new": "新規作成",
"name": "名前", "name": "名前",
"desc": "説明", "desc": "説明",
"customShare": "このコードは他のTheDeskなどとシェアできるけこのコードをMiASに貼るのはあかん。詳細:<a href=\"https://thedesk.top/mias.html\" target=\"_blank\">テーマ互換性</a>",
"customImport": "カスタムテーマのインポート", "customImport": "カスタムテーマのインポート",
"delete": "削除", "delete": "削除",
"cImpWarn": "<a href=\"https://assets.msky.cafe/\" target=\"_blank\">MiAS</a>上の80を超えるテーマを張っ付けることもできる。",
"timeline": "タイムラインの設定", "timeline": "タイムラインの設定",
"timemode": "時間表記設定", "timemode": "時間表記設定",
"relativetime": "相対時間の例:\"1分前\",\"3日前\"", "relativetime": "相対時間の例:\"1分前\",\"3日前\"",

View File

@ -67,10 +67,8 @@
"add_new": "新規作成", "add_new": "新規作成",
"name": "名前", "name": "名前",
"desc": "説明", "desc": "説明",
"customShare": "このコードは他のTheDeskなどとシェアできます。このコードをMiASに貼ることはご遠慮ください。詳細:<a href=\"https://thedesk.top/mias.html\" target=\"_blank\">テーマ互換性</a>",
"customImport": "カスタムテーマのインポート", "customImport": "カスタムテーマのインポート",
"delete": "削除", "delete": "削除",
"cImpWarn": "<a href=\"https://assets.msky.cafe/\" target=\"_blank\">MiAS</a>上の80を超えるテーマを張り付けることもできます。",
"timeline": "タイムラインの設定", "timeline": "タイムラインの設定",
"timemode": "時間表記設定", "timemode": "時間表記設定",
"relativetime": "相対時間の例:\"1分前\",\"3日前\"", "relativetime": "相対時間の例:\"1分前\",\"3日前\"",

View File

@ -28,7 +28,8 @@ function main(ver, basefile, pwa, store) {
.trim() .trim()
fs.writeFileSync(basefile + 'git', gitHash) fs.writeFileSync(basefile + 'git', gitHash)
console.log('Constructing view files ' + ver) console.log('Constructing view files ' + ver)
const langs = ['ja', 'ja-KS', 'en', 'bg', 'cs', 'de', 'es-AR', 'it-IT', 'ps'] const langs = ['ja', 'ja-KS', 'en', 'bg', 'cs', 'de',
'es-AR', 'it-IT', 'zh-CN', 'zh-TW', 'fr-FR', 'no-NO', 'pt-BR', 'ru-RU', 'es-ES', 'ps']
const langsh = [ const langsh = [
'日本語', '日本語',
'日本語(関西)', '日本語(関西)',
@ -36,8 +37,15 @@ function main(ver, basefile, pwa, store) {
'български', 'български',
'Česky', 'Česky',
'Deutsch', 'Deutsch',
'Spanish, Argentina', 'Español, argentina',
'italiano', 'italiano',
'简体中文',
'繁體中文(β)',
'français(β)',
'norsk(β)',
'Português, brasileiro(β)',
'русский(β)',
'Español(β)',
'Crowdin translate system(beta)' 'Crowdin translate system(beta)'
] ]
const simples = ['acct', 'index', 'setting', 'update', 'setting'] const simples = ['acct', 'index', 'setting', 'update', 'setting']
@ -60,28 +68,24 @@ function main(ver, basefile, pwa, store) {
fs.mkdirSync(targetDir) fs.mkdirSync(targetDir)
} }
langstr = langstr =
langstr + langstr + `<option value="${lang}">${langsh[n]}</option>`
'<a onclick="changelang(\'' +
lang +
'\')" class="pointer" style="margin:4px;border: 1px solid var(--text); padding: 3px">' +
langsh[n] +
'</a>'
let mainJson = JSON.parse( let mainJson = JSON.parse(
fs.readFileSync(basefile + 'view/make/language/' + lang + '/main.json', 'utf8') fs.readFileSync(basefile + 'view/make/language/' + lang + '/main.json', 'utf8')
) )
if (lang == 'ja-KS') { if (lang == 'ja-KS') {
Object.keys(jaJson).forEach(function(key) { Object.keys(jaJson).forEach(function (key) {
if (!mainJson[key]) { if (!mainJson[key]) {
mainJson[key] = jaJson[key] mainJson[key] = jaJson[key]
} }
}) })
} else if (lang != 'en') { } else if (lang != 'en') {
Object.keys(enJson).forEach(function(key) { Object.keys(enJson).forEach(function (key) {
if (!mainJson[key]) { if (!mainJson[key]) {
mainJson[key] = enJson[key] mainJson[key] = enJson[key]
} }
}) })
} }
mainJson.language = lang
fs.writeFileSync( fs.writeFileSync(
basefile + 'view/' + lang + '/main.js', basefile + 'view/' + lang + '/main.js',
JSON.stringify(mainJson).replace(/^{/, 'var lang = {') JSON.stringify(mainJson).replace(/^{/, 'var lang = {')
@ -106,7 +110,7 @@ function main(ver, basefile, pwa, store) {
) )
) )
if (lang == 'ja') { if (lang == 'ja') {
Object.keys(target).forEach(function(key) { Object.keys(target).forEach(function (key) {
refKey.push(key) refKey.push(key)
let str = target[key] let str = target[key]
if (pages[i] == 'setting.vue.js') { if (pages[i] == 'setting.vue.js') {
@ -148,7 +152,7 @@ function main(ver, basefile, pwa, store) {
source = source.replace(/@@gitHashShort@@/g, gitHash.slice(0, 7)) source = source.replace(/@@gitHashShort@@/g, gitHash.slice(0, 7))
source = source.replace(/@@lang@@/g, lang) source = source.replace(/@@lang@@/g, lang)
source = source.replace(/@@langlist@@/g, langstr) source = source.replace(/@@langlist@@/g, langstr)
if(pwa) { if (pwa) {
source = source.replace(/@@pwa@@/g, `<link rel="manifest" href="../../manifest.json" /> source = source.replace(/@@pwa@@/g, `<link rel="manifest" href="../../manifest.json" />
<script>var pwa = true;"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.pwa.js").then(e=>{});</script>`) <script>var pwa = true;"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.pwa.js").then(e=>{});</script>`)
source = source.replace(/@@node_base@@/g, 'dependencies') source = source.replace(/@@node_base@@/g, 'dependencies')
@ -179,9 +183,9 @@ if (process.argv.indexOf('--watch') !== -1) {
ignored: 'view/make/make.js', ignored: 'view/make/make.js',
persistent: true persistent: true
}) })
watcher.on('ready', function() { watcher.on('ready', function () {
console.log('watching...') console.log('watching...')
watcher.on('change', function(path) { watcher.on('change', function (path) {
console.log(path + ' changed.') console.log(path + ' changed.')
main(ver, basefile) main(ver, basefile)
}) })

View File

@ -54,7 +54,12 @@
<div class="collapsible-body"> <div class="collapsible-body">
<h5>@@setlang@@</h5> <h5>@@setlang@@</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br><br> To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br><br>
@@langlist@@ <div style="display: flex;">
<div style="width: 22rem;" id="langsel">
<select id="langsel-sel">@@langlist@@</select>
</div>
<button class="btn waves-effect" onclick="changeLang()">@@change@@</button>
</div>
<h5>@@backup@@</h5> <h5>@@backup@@</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3" <button onclick="exportSettings()" class="btn waves-effect lime darken-3"
style="width:100%; max-width:15rem;">@@export@@</button> style="width:100%; max-width:15rem;">@@export@@</button>
@ -287,9 +292,7 @@
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">@@delete@@</button><br><br> class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">@@delete@@</button><br><br>
<input type="text" style="width:22rem;height:40px;" id="custom_json" class="materialize-textarea" <input type="text" style="width:22rem;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br> placeholder="JSON style" readonly><br>
@@customShare@@
<h4>@@customImport@@</h4> <h4>@@customImport@@</h4>
@@cImpWarn@@<br>
<input type="text" style="width:22rem;height:40px;" id="custom_import" class="materialize-textarea" <input type="text" style="width:22rem;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style"> placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">@@import@@</button><br> <button class="btn waves-effect" onclick="customImp()">@@import@@</button><br>
@ -343,7 +346,8 @@
@@volwarn80@@<br> @@volwarn80@@<br>
<p class="range-field"><span id="soundVolVal">80</span><br> <p class="range-field"><span id="soundVolVal">80</span><br>
<input type="range" id="soundvol" min="0" max="100" value="80" onchange="customVol()" <input type="range" id="soundvol" min="0" max="100" value="80" onchange="customVol()"
style="width:40rem; max-width:100%" /></p> style="width:40rem; max-width:100%" />
</p>
</div> </div>
</li> </li>
<li> <li>
@ -398,13 +402,15 @@
</li> </li>
<li> <li>
<div class="collapsible-header"> <div class="collapsible-header">
<img src="../../img/aiscript.svg" style="height: 1.5rem; margin-left: 0.4rem; margin-right: 0.4rem;">@@plugin@@ <img src="../../img/aiscript.svg"
style="height: 1.5rem; margin-left: 0.4rem; margin-right: 0.4rem;">@@plugin@@
</div> </div>
<div class="collapsible-body"> <div class="collapsible-body">
<a href="https://github.com/cutls/TheDesk/blob/master/plugin.md">@@howToWritePlugin@@</a><br /> <a href="https://github.com/cutls/TheDesk/blob/master/plugin.md">@@howToWritePlugin@@</a><br />
<textarea id="plugin" data-id="add_new" style="height: 20rem"></textarea> <textarea id="plugin" data-id="add_new" style="height: 20rem"></textarea>
<button class="btn waves-effect" style="width:7.7rem;" onclick="completePlugin()">@@change@@</button> <button class="btn waves-effect" style="width:7.7rem;" onclick="completePlugin()">@@change@@</button>
<button class="btn waves-effect red disabled plugin_delete" style="width:7.7rem;" onclick="deletePlugin()">@@delete@@</button> <button class="btn waves-effect red disabled plugin_delete" style="width:7.7rem;"
onclick="deletePlugin()">@@delete@@</button>
<h5>@@pluginList@@</h5> <h5>@@pluginList@@</h5>
<div style="width:22rem" id="plugin-selector" data-add="@@add_new@@"> <div style="width:22rem" id="plugin-selector" data-add="@@add_new@@">
<select id="plugin-edit-sel" class="custom-sel" onchange="pluginEdit()"> <select id="plugin-edit-sel" class="custom-sel" onchange="pluginEdit()">
@ -511,19 +517,22 @@
<p class="range-field"><span id="voicespeedVal">10</span><br> <p class="range-field"><span id="voicespeedVal">10</span><br>
<input type="range" id="voicespeed" min="1" max="100" value="10" <input type="range" id="voicespeed" min="1" max="100" value="10"
onchange="document.getElementById('voicespeedVal').innerText=this.value" onchange="document.getElementById('voicespeedVal').innerText=this.value"
style="width:40rem; max-width:100%" /></p> style="width:40rem; max-width:100%" />
</p>
<h5>@@pitch@@</h5> <h5>@@pitch@@</h5>
@@pitchwarn@@<br> @@pitchwarn@@<br>
<p class="range-field"><span id="voicepitchVal">50</span><br> <p class="range-field"><span id="voicepitchVal">50</span><br>
<input type="range" id="voicepitch" min="0" max="100" value="50" <input type="range" id="voicepitch" min="0" max="100" value="50"
onchange="document.getElementById('voicepitchVal').innerText=this.value" onchange="document.getElementById('voicepitchVal').innerText=this.value"
style="width:40rem; max-width:100%" /></p> style="width:40rem; max-width:100%" />
</p>
<h5>@@vol@@</h5> <h5>@@vol@@</h5>
@@volwarn@@<br> @@volwarn@@<br>
<p class="range-field"><span id="voicevolVal">100</span><br> <p class="range-field"><span id="voicevolVal">100</span><br>
<input type="range" id="voicevol" min="0" max="100" value="100" <input type="range" id="voicevol" min="0" max="100" value="100"
onchange="document.getElementById('voicevolVal').innerText=this.value" onchange="document.getElementById('voicevolVal').innerText=this.value"
style="width:40rem; max-width:100%" /></p> style="width:40rem; max-width:100%" />
</p>
<h5>@@test@@</h5> <h5>@@test@@</h5>
<input type="text" style="width:27rem" id="voicetxt" value="@@sample@@"> <input type="text" style="width:27rem" id="voicetxt" value="@@sample@@">
<button class="btn waves-effect blue" style="width:11.5rem;" onclick="voicePlay()" <button class="btn waves-effect blue" style="width:11.5rem;" onclick="voicePlay()"
@ -608,7 +617,7 @@
</span><br> </span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br> TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br> タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../@@node_base@@/lodash/lodash.min.js"></script> <script type="text/javascript" src="../../@@node_base@@/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/platform/aiscript.js"></script> <script type="text/javascript" src="../../js/platform/aiscript.js"></script>
<script type="text/javascript" src="../../js/platform/plugin.js"></script> <script type="text/javascript" src="../../js/platform/plugin.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script> <script type="text/javascript" src="../../js/common/modal.js"></script>

154
app/view/no-NO/acct.html Normal file
View File

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="no-NO">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link
href="../../node_modules/materialize-css/dist/css/materialize.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<link href="../../css/tl.css" rel="stylesheet" type="text/css" />
<link href="../../css/userdata.css" rel="stylesheet" type="text/css" />
<link
href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/acct.css" rel="stylesheet" type="text/css" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<script>var pwa = false;</script> <script>var store = false;</script>
</head>
<body id="mainView" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script
type="text/javascript"
src="../../node_modules/materialize-css/dist/js/materialize.js"
></script>
<script type="text/javascript" src="main.js"></script>
<script
type="text/javascript"
src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"
></script>
<script>
var misskeytoken = false
</script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"
>Tilbake</a
><br />
<h5>Kontoliste</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div class="hide-second">
<a href="setting.html">Having the exported file of TheDesk, click here to jump setting page</a>
</div>
<div>
<h5>Legg til en konto</h5>
<br />
<div id="add">
<div class="row">
<div class="col s8">
Fill the instance domain (like mastodon.social)<br />
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp" />
<div id="ins-suggest"></div>
<button class="btn waves-effect" onclick="instance()">Login</button><br />
<div class="pwa">
Uncheck it to skip pasiting code.(login to Mastodon on Windows or macOS) (Recommended: pcheck)<br />
<label>
<input type="checkbox" class="filled-in" id="linux" />
<span>Kodeoppsett</span>
</label>
<br />
</div>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<span>Logg inn som Misskey</span> </label
><br />
</div>
<div class="col s4 scr" aria-hidden="true">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div>
</div>
<div id="auth" style="display:none">
Lim inn koden og lukk nettleseren.<br />
<input type="text" id="code" placeholder="Kode" required />
<button class="btn waves-effect" onclick="code()">Auth</button><br />
<br />
<a onclick="atSetup()" class="pointer">Use access token to login(click after fill not code but access-token in box: Advanced)</a>
<div id="compt" style="display:none" class="scr">
<h5>ログイン前に必ずご確認ください</h5>
<span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span
>のため以下の機能がご利用いただけません。
<span id="compt-warn" style="display:none"
>また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span
>
<ul id="compt-list"></ul>
</div>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
Read <a href="https://thedesk.top/how-to-misskey-login.html">Docs(ja)</a> to login Misskey.<br />
<input type="hidden" id="misskey-url" />
<input type="text" id="misskey-key" placeholder="Kode" required />
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br />
<br />
<a onclick="atSetup('misskey')" class="pointer">Use access token to login(click after fill not code but access-token in box: Advanced)</a>
</div>
</div>
<div class="hide-first">
<h5>Sett som hovedkonto</h5>
<div class="input-field" style="width:300px">
<span data-trans="your_acct">Velg en konto</span>
<br />
<select
id="main-acct-sel"
class="acct-sel"
style="color:black"
onchange="mainacct()"
></select>
<label></label>
</div>
<ul id="domain-list" class="collection transparent"></ul>
<div id="instance-data">
Some instance data by
<a href="https://instances.social" target="_blank">instances.social API</a><br />
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br />
<span id="ins-desc"></span><br />
<img src="../../img/loading.svg" id="ins-prof" width="200" /><br />
<br />
Domene:<span id="ins-name"></span><br />
Federerte tjenere:<span id="ins-connect"></span><br />
Toots:<span id="ins-toot"></span><br />
Brukere:<span id="ins-user"></span>Brukere<br />
Tilkobling:<span id="ins-per"></span>%<br />
Mastodon-versjon:<span id="ins-ver"></span>@<span id="ins-upd"></span><br />
</div>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/common/sha256.js"></script>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/manager.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>
<script>$('body').addClass(localStorage.getItem('platform'))</script>
</body>
</html>

1287
app/view/no-NO/index.html Normal file

File diff suppressed because it is too large Load Diff

1
app/view/no-NO/main.js Normal file

File diff suppressed because one or more lines are too long

632
app/view/no-NO/setting.html Normal file
View File

@ -0,0 +1,632 @@
<!doctype html>
<html lang="no-NO" style="overflow-y:scroll">
<head>
<title>Settings - TheDesk</title>
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet">
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href="../../css/pickr.css" type="text/css" rel="stylesheet">
<link href="../../css/master.css" type="text/css" rel="stylesheet">
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet">
<meta charset="utf-8">
<style>
input {
max-height: 3.84rem !important
}
.pcr-result {
height: 1rem !important;
}
.container-after-titlebar {
padding: 20px;
}
</style>
<script>var pwa = false;</script>
<script>var store = false;</script>
</head>
<body id="mainView" style="overflow-y:scroll" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<script type="text/javascript" src="main.js"></script>
<script src="../../node_modules/json5/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
<script>function renderMem() { return false; }</script>
<h4>Innstillinger</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>System Preferences
</div>
<div class="collapsible-body">
<h5>Språk</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br><br>
<div style="display: flex;">
<div style="width: 22rem;" id="langsel">
<select id="langsel-sel"><option value="ja">日本語</option><option value="ja-KS">日本語(関西)</option><option value="en">English</option><option value="bg">български</option><option value="cs">Česky</option><option value="de">Deutsch</option><option value="es-AR">Español, argentina</option><option value="it-IT">italiano</option><option value="zh-CN">简体中文</option><option value="zh-TW">繁體中文(β)</option><option value="fr-FR">français(β)</option><option value="no-NO">norsk(β)</option><option value="pt-BR">Português, brasileiro(β)</option><option value="ru-RU">русский(β)</option><option value="es-ES">Español(β)</option><option value="ps">Crowdin translate system(beta)</option></select>
</div>
<button class="btn waves-effect" onclick="changeLang()">Endre</button>
</div>
<h5>Import and export of preferences</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3"
style="width:100%; max-width:15rem;">Eksporter</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3"
style="width:100%; max-width:15rem;">Importer</button><br>
If you got a error when you choose the file, please paste the strings printed when you open the file and click import<br>
<input type="text" id="imp-exp" style="width: 22rem">
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.id=='notf'"><a onclick="notftest()"
class="pointer">Varseltest</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Endre</button>
</template><br>
</template>
</div>
<h5>Font</h5>
Select your favorite font to 'Select'(Windows/ macOS only)<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="font()">Velg</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:22rem; height:40rem;"></div>
<br>
<input type="text" style="width:11.5rem" id="font">
<button class="btn waves-effect" style="width:7.7rem;" onclick="settings()">Lagre</button>
<br>
<h5>Folder to save</h5>
TheDesk uses this value when it try to save pictures or take screenshots.<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="savefolder()">Endre</button>
<br>
</div>
</li>
<li class="pwa">
<div class="collapsible-header">
<i class="material-icons">color_lens</i>Temaer
</div>
<div class="collapsible-body">
<h4>Velg tema</h4>
<div style="width:22rem" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<h4>Edit and add themes</h4>
<div style="width:22rem" id="edit-selector" data-add="Legg til ny">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">Legg til ny</option>
</select>
</div>
<h5>Navn</h5>
<input type="text" style="width:22rem" id="custom_name" placeholder="Navn...">
<h5>Om dette temaet</h5>
<div class="input-field"><textarea style="width:22rem" id="custom_desc" class="materialize-textarea"
placeholder="Om dette temaet..."></textarea></div>
<h5>Fargepalett</h5>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="dark" value="dark"
checked="true" />
<span>Dark</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="light"
value="light" />
<span>Light</span>
</label><br><br />
<button class="btn waves-effect" onclick="advanced()">Advanced options</button>
<span class="advanced hide"></span>
<div id="pickers">
<div>
<h5>Background</h5>Background color<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_0" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker0_value">
</div>
<div>
<h5>Text</h5>Tekstfarge<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_1" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker1_value">
</div>
<div>
<h5>Subcolor</h5>Distinguishable from background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_2" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>Background of boosts<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_3" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker3_value">
</div>
<div class="advanced hide">
<h5>Modal</h5>Background of modal window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_4" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modal')">Background</a>
<br />
<input type="color" id="color-picker4_value">
</div>
<div class="advanced hide">
<h5>Modal Footer</h5>Background of modal window's footer<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_5" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modalFooter')">Background</a>/
<a class="pointer" onclick="copyColor('modal','modalFooter')">Modal</a>
<br />
<input type="color" id="color-picker5_value">
</div>
<div class="advanced hide">
<h5>3rd Color</h5>Backgroud of tag buttons, etc(near to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_6" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','third')">Subcolor</a>
<br />
<input type="color" id="color-picker6_value">
</div>
<div class="advanced hide">
<h5>4th Color</h5>Title bar(same scheme to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_7" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','forth')">Subcolor</a>/
<a class="pointer" onclick="copyColor('third','forth')">3rd Color</a>
<br />
<input type="color" id="color-picker7_value">
</div>
<div class="advanced hide">
<h5>Bottom</h5>Background of menu-bar at bottom of window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_8" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','bottom')">Subcolor</a>
<br />
<input type="color" id="color-picker8_value">
</div>
<div class="advanced hide">
<h5>2nd Accent</h5>Emphasized toot's background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_9" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','emphasized')">Accent</a>
<br />
<input type="color" id="color-picker9_value">
</div>
<div class="advanced hide">
<h5>Postbox</h5>Background of post-box and menu<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_10" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','postbox')">Subcolor</a>
<br />
<input type="color" id="color-picker10_value">
</div>
<div class="advanced hide">
<h5>Active</h5>Background of 'active' elements<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_11" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','active')">Accent</a>
<br />
<input type="color" id="color-picker11_value">
</div>
<div class="advanced hide">
<h5>Selected</h5>Background of selected with arrow keys<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_12" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker12_value">
</div>
<div class="advanced hide">
<h5>Selected with shared</h5>Background of selected with arrow keys(boosted toots)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_13" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker13_value">
</div>
</div><br /><br />
<button class="btn-large waves-effect" onclick="customComp()">Endre</button>&nbsp;<button
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">Slett</button><br><br>
<input type="text" style="width:22rem;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br>
<h4>Import of custom themes</h4>
<input type="text" style="width:22rem;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">Importer</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>Tidslinjepreferanser
</div>
<div class="collapsible-body">
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Endre</button>
</template><br>
</template>
</div>
<h5>Custom sound</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span
id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span
id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span
id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span
id="c4-file"></span><br>
<h5>Volume</h5>
0-100(default:80)<br>
<p class="range-field"><span id="soundVolVal">80</span><br>
<input type="range" id="soundvol" min="0" max="100" value="80" onchange="customVol()"
style="width:40rem; max-width:100%" />
</p>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>Posting Preferences
</div>
<div class="collapsible-body">
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template
v-if="(!check.kirishima || (check.kirishima && kirishima) )&& (!check.quote || (check.quote && quoters))">
<label><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" />
<span>{{check.text}}</span></label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Endre</button>
</template><br>
</template>
</div>
<h5>Enkel innsetter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:11.5rem" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:7.7rem;">Lagre</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:11.5rem" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:7.7rem;">Lagre</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:11.5rem" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:7.7rem;">Lagre</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<img src="../../img/aiscript.svg"
style="height: 1.5rem; margin-left: 0.4rem; margin-right: 0.4rem;">Plugins
</div>
<div class="collapsible-body">
<a href="https://github.com/cutls/TheDesk/blob/master/plugin.md">Japanese docs of AiScript TheDesk plugins</a><br />
<textarea id="plugin" data-id="add_new" style="height: 20rem"></textarea>
<button class="btn waves-effect" style="width:7.7rem;" onclick="completePlugin()">Endre</button>
<button class="btn waves-effect red disabled plugin_delete" style="width:7.7rem;"
onclick="deletePlugin()">Slett</button>
<h5>Plugin list</h5>
<div style="width:22rem" id="plugin-selector" data-add="Legg til ny">
<select id="plugin-edit-sel" class="custom-sel" onchange="pluginEdit()">
<option value="add_new">Legg til ny</option>
</select>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>Mute & Emphasis Preferences
</div>
<div class="collapsible-body">
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:7.7rem;">Lagre</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:7.7rem;">Lagre</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fab fa-spotify"></i>Spotify and NowPlaying Preferences
</div>
<div class="collapsible-body">
<h5>Kontotilknytninger(Spotify)</h5>
TheDesk save your data on thedesk.top server.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
onclick="spotifyAuth()" class="btn waves-effect" style="width:7.7rem;">Lagre</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-enable"><i
class="fab fa-spotify left"></i>Koble til</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-disable"><i
class="fab fa-spotify left"></i>Koble fra</a>
<h5>Kontotilknytninger(Last.fm)</h5>
User name...(empty to disconnect) You cannot hide your recent play log at last.fm privacy settings.<br />
<input type="text" style="width:11.5rem" id="lastFmUser">
<button onclick="lastFmSet()" class="btn waves-effect" style="width:7.7rem;">Lagre</button>
<h5>Endre mal</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
<span class="mac">>macOS:{song}:Song name/{album}:Album name/{artist}:Artist name/composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre}</span><br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:7.7rem;">Lagre</button>
<h5>Attach an Artwork of Spotify</h5>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes"
value="yes" />
<span>Ja</span>
</label>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no"
value="no" />
<span>Nei</span>
</label>
<div class="mac">
<h5>If the song has no artwork, automatic complete it(macOS)</h5>
If you nowplaying an non-artwork song, get one which seems nice through API. If you do not like the completed artwork, you can right-click it to delete.<br />
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_yes"
value="yes" />
<span>Ja</span>
</label>
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_no"
value="no" />
<span>Nei</span>
</label>
<br>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>BouyomiChan connect</h5>
Require: BouyomiChan WebSocket Plugin<a href="https://github.com/xztaityozx/BouyomiChan-WebSocket-Plugin"
target="_blank">GitHub</a><br>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_yes"
value="yes" />
<span>Ja</span>
</label>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_no" value="no" />
<span>Nei</span>
</label>
<h5>Fart</h5>
1-100(default:10)<br>
<p class="range-field"><span id="voicespeedVal">10</span><br>
<input type="range" id="voicespeed" min="1" max="100" value="10"
onchange="document.getElementById('voicespeedVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><span id="voicepitchVal">50</span><br>
<input type="range" id="voicepitch" min="0" max="100" value="50"
onchange="document.getElementById('voicepitchVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><span id="voicevolVal">100</span><br>
<input type="range" id="voicevol" min="0" max="100" value="100"
onchange="document.getElementById('voicevolVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Test</h5>
<input type="text" style="width:27rem" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC.">
<button class="btn waves-effect blue" style="width:11.5rem;" onclick="voicePlay()"
id="testplay">Spill av/Stopp</button><br>
<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="voiceSettings()">Lagre</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:15rem;"><i
class="material-icons left">undo</i>Tilbake</a>
<br>
<br>Hurtigtaster
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
<li>Alt+Enter:Secondary Toot Button</li>
<li>Ctrl+E:Make all notifications read</li>
<li>Ctrl+U:Select the top & left(No.1 column) toot</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
<li>Ctrl+Shift+C:Clear toot box</li>
<li>Ctrl+Shift+S:Innstillinger</li>
<li>Ctrl+Shift+M:Kontoadministrasjon</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Show next or previous image</li>
<li>Mousewheel:Zoom a image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
When a toot is selected:
<li>F:Favoriser denne tooten</li>
<li>B:Boost this toot</li>
<li>R:Svar på denne tooten</li>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:40rem;"
onclick="if(confirm('Slett all data. Kan ikke gjøres om. Fortsette?')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<button class="btn waves-effect indigo pwa" onclick="about()" style="width:100%; max-width:40rem;"><i
class="material-icons left">info</i>Om TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">web</i>Nettsted</a>
<a href="https://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Støtte(Pixiv FANBOX)</a>
<a href="https://www.patreon.com/cutls" class="btn waves-effect red darken-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Støtte(Patreon)</a>
<a href="https://liberapay.com/cutls" class="btn waves-effect black-text"
style="width:100%; max-width:40rem; background-color: #f6c915"><i
class="material-icons left">trending_up</i>Støtte(Liberapay)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">list</i>Hjelp/Docs</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2"
style="width:100%; max-width:40rem;"><i class="fab fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@cutls.com" class="btn waves-effect blue lighten-2"
style="width:100%; max-width:40rem;"><img src="../../img/desk_full.svg" class="left" width="25"
style="padding-top:5px;">Main author: Cutls@cutls.com</a>
<br>
TheDesk @ <a href="https://github.com/cutls/TheDesk/commits/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c">89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c</a> - <a
onclick="checkupd(); return localStorage.removeItem('new-ver-skip'); location.href='index.html';"
class="pointer pwa">Se etter oppdateringer</a><br>
<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
<a href="https://status.cutls.com/">
<img src="https://status.cutls.com/badge-service?site=thedesk.top">
</a><br>
<h5>OSS License</h5>
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2Fcutls%2FTheDesk/refs/branch/master/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c"
alt="FOSSA Status"><img
src="https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcutls%2FTheDesk.svg?type=small" /></a>
<br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a
href="https://thedesk.top/priv.html">Privacy
Policy</a>
<br>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/platform/aiscript.js"></script>
<script type="text/javascript" src="../../js/platform/plugin.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/ui/spotify.js"></script>
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/platform/pickr.js"></script>
<script type="text/javascript" src="../../js/ui/settings.js"></script>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>

View File

@ -0,0 +1,756 @@
var yesno = [
{
text: 'Ja',
value: 'yes'
},
{
text: 'Nei',
value: 'no'
}
]
var sound = [
{
text: 'Ingen',
value: 'none'
},
{
text: 'Standard',
value: 'default'
},
{
text: 'Custom 1',
value: 'c1'
},
{
text: 'Custom 2',
value: 'c2'
},
{
text: 'Custom 3',
value: 'c3'
},
{
text: 'Custom 4',
value: 'c4'
}
]
var envConstruction = [
{
id: 'popup',
storage: 'popup',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Popup notification',
desc: 'Hide to set "0"',
after: 'sec'
}
},
{
id: 'notf',
storage: 'nativenotf',
checkbox: true,
setValue: 'yes',
text: {
head: 'Native notification',
desc: 'This does not work on Windows Portable ver.',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'width',
storage: 'width',
width: 50,
setValue: 300,
text: { after: 'px ~ ' }
},
{
id: 'maxWidth',
storage: 'max-width',
width: 50,
setValue: 600,
text: { after: 'px' }
}
],
text: {
head: 'Width of columns',
desc: 'Scroll bar will be shown when your window size is more than ammounts of columns.'
}
},
{
id: 'margin',
storage: 'margin',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Margin between timelines',
desc: '',
after: 'px'
}
},
{
id: 'fixwidth',
storage: 'fixwidth',
checkbox: false,
doubleText: false,
setValue: 300,
width: 50,
text: {
head: 'Minimum width of TweetDeck browser',
desc: '',
after: 'px above'
}
},
{
id: 'size',
storage: 'size',
checkbox: false,
doubleText: false,
width: 50,
setValue: 13,
text: {
head: 'Font size',
desc: '<span style="font-size:13px">13px(absolute value)</span>',
after: 'px'
}
},
{
id: 'ha',
storage: 'ha',
checkbox: true,
setValue: false,
text: {
head: 'Slå av maskinvareakselerasjon',
desc: 'Auto restarted',
checkbox: [
{
text: 'Ja',
value: 'true'
},
{
text: 'Nei',
value: 'false'
}
]
}
},
{
id: 'ua',
storage: 'ua_setting',
checkbox: false,
doubleText: false,
setValue: '',
width: 200,
text: {
head: 'Brukeragent',
desc: 'Restart when changed'
}
},
{
id: 'srcUrl',
storage: 'srcUrl',
checkbox: false,
doubleText: false,
width: 200,
setValue: 'https://google.com/search?q={q}',
text: {
head: 'Search engine',
desc: '{q} will be replaced to query.',
after: ''
}
},{
id: 'download',
storage: 'dl-win',
checkbox: true,
setValue: 'no',
text: {
head: 'Versioning(o Windows downloader)',
desc: 'ex: TheDesk-1.0.0-setup.exe',
checkbox: yesno
}
}
]
var tlConstruction = [
{
id: 'time',
storage: 'datetype',
checkbox: true,
setValue: 'absolute',
text: {
head: 'Tidsformat',
desc: 'Relative format:"1 minutes ago","3 days ago"<br>Absolute format:"23:25:21","2017/12/30 23:59:00"<br>Mixed format:toots posted today are relative-format, others are absolute-format.',
checkbox: [
{
text: 'Relative',
value: 'relative'
},
{
text: 'Absolutt',
value: 'absolute'
},
{
text: 'Both relative and absolute',
value: 'double'
},
{
text: 'Blandet',
value: 'medium'
}
]
}
},
{
id: 'ul',
storage: 'locale',
checkbox: true,
setValue: 'yes',
text: {
head: 'Server\s unique locale',
desc: 'Denne verdien er tilgjengelig på noen japanske servere',
checkbox: yesno
}
},
{
id: 'nsfw',
storage: 'nsfw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide Mark sensitive pictures',
desc: 'Strong blur effect',
checkbox: yesno
}
},
{
id: 'cw',
storage: 'cw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide CW contents',
desc: '',
checkbox: yesno
}
},
{
id: 'rp',
storage: 'replyct',
checkbox: true,
setValue: 'hidden',
text: {
head: 'Reply counter style',
desc: '',
checkbox: [
{
text: 'Show 1+ if the replies are more than 1.',
value: 'hidden'
},
{
text: 'Show full count(1,2...)',
value: 'all'
}
]
}
},
{
id: 'gif',
storage: 'gif',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animated GIF images animation',
desc: '',
checkbox: yesno
}
},
{
id: 'tag',
storage: 'tag-range',
checkbox: true,
setValue: 'local',
text: {
head: 'Tag TL Search',
desc: '',
checkbox: [
{
text: 'Use federated network',
value: 'all'
},
{
text: 'Bruk lokalt nettverk',
value: 'local'
}
]
}
},
{
id: 'via',
storage: 'viashow',
checkbox: true,
setValue: 'no',
text: {
head: 'Vis via',
desc: '',
checkbox: yesno
}
},
{
id: 'mov',
storage: 'mouseover',
checkbox: true,
setValue: 'no',
text: {
head: 'Hide action buttons without mouseover',
desc: 'You may feel \mouseover\ is unconfortable:(',
checkbox: [
{
text: 'Mouseover to show',
value: 'yes'
},
{
text: 'Klikk for å vise',
value: 'click'
},
{
text: 'Nei',
value: 'no'
}
]
}
},
{
id: 'notfm',
storage: 'setasread',
checkbox: true,
setValue: 'yes',
text: {
head: 'Show Notification marker, red colored bell and counter(if you show a notification column.)',
desc: '',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'sentence',
storage: 'sentence',
width: 50,
setValue: 500,
text: { after: 'linjer above eller' }
},
{
id: 'letters',
storage: 'letters',
width: 50,
setValue: 7000,
text: { after: 'bokstaver above' }
}
],
text: {
head: 'Auto folding',
desc: 'TheDesk does not collapse totes of 5 characters or less. Also, when collapsing, newlines are not shown. TheDesk count only newlines as the number of lines.'
}
},
{
id: 'img-height',
storage: 'img-height',
checkbox: false,
doubleText: false,
width: 80,
setValue: 200,
text: {
head: 'Bildehøyder',
desc: 'Option:Set "full" to uncrop.',
after: 'px'
}
},
{
id: 'ticker',
storage: 'ticker_ok',
checkbox: true,
setValue: 'no',
text: {
head: 'Enable OpenSticker',
desc: 'Show the instance name and favicon of tooters <a href="https://opensticker.0px.io">About OpenSticker</a>',
checkbox: yesno
}
},
{
id: 'anime',
storage: 'animation',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animation of timelines',
desc: '',
checkbox: yesno
}
},
{
id: 'markers',
storage: 'markers',
checkbox: true,
setValue: 'no',
text: {
head: 'Markers(mark as read) on HTL and notifications',
desc: 'Mastodon 3.0~. Shared on WebUI and third-party supported clients.',
checkbox: yesno
}
},
{
id: 'remote_img',
storage: 'remote_img',
checkbox: true,
setValue: 'no',
text: {
head: 'Get images from the remote server',
desc: 'All previews are got from your loginned cache server.',
checkbox: yesno
}
},
{
id: 'bkm',
storage: 'bookmark',
checkbox: true,
setValue: 'no',
text: {
head: 'Show a bookmarking toot button',
desc: '',
checkbox: yesno
}
},
{
id: 'scroll',
storage: 'scroll',
checkbox: true,
setValue: 'normalScrollBar',
text: {
head: 'Height of the scroll bar',
desc: '',
checkbox: [
{
text: 'Thick',
value: 'thickScrollBar'
},
{
text: 'Normal',
value: 'normalScrollBar'
},
{
text: 'Thin',
value: 'thinScrollBar'
}
]
}
},
{
id: 'replySound',
storage: 'replySound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Reply)',
desc: '',
checkbox: sound
}
},
{
id: 'favSound',
storage: 'favSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Fav)',
desc: '',
checkbox: sound
}
},
{
id: 'btSound',
storage: 'btSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Boost)',
desc: '',
checkbox: sound
}
},
{
id: 'followSound',
storage: 'followSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Lyd(Følg)',
desc: '',
checkbox: sound
}
}
]
var postConstruction = [
{
id: 'cw-text',
storage: 'cw-text',
checkbox: false,
doubleText: false,
width: 150,
setValue: '',
text: {
head: 'Standard advarselstekst',
desc: '',
after: ''
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'cw_sentence',
storage: 'cw_sentence',
width: 50,
setValue: 500,
text: { after: 'linjer above eller' }
},
{
id: 'cw_letters',
storage: 'cw_letters',
width: 50,
setValue: 7000,
text: { after: 'bokstaver above' }
}
],
text: {
head: 'Alert before posting a long toot.',
desc: 'Show dialog whether you make too-long text hidden.'
}
},
{
id: 'cws',
storage: 'always-cw',
checkbox: true,
setValue: 'no',
text: {
head: 'Always CW set',
desc: '',
checkbox: yesno
}
},
{
id: 'cw-continue',
storage: 'cw-continue',
checkbox: true,
setValue: 'no',
text: {
head: '@@cwContinue@@',
desc: '',
checkbox: yesno
}
},
{
id: 'vis',
storage: 'vis',
checkbox: true,
setValue: 'public',
text: {
head: 'Standard synlighet',
desc: '',
checkbox: [
{
text: 'Offentlig',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Privat',
value: 'private'
},
{
text: 'Direkte',
value: 'direct'
},
{
text: 'Memory(memorized as each server)',
value: 'memory'
},
{
text: 'Default of your visibility(Set on preferences of Mastodon server)',
value: 'useapi'
}
]
}
},
{
id: 'img',
storage: 'img',
checkbox: true,
setValue: 'no-act',
text: {
head: 'Posting images preferences',
desc: '',
checkbox: [
{
text: 'Sett inn media-URL',
value: 'url'
},
{
text: 'Ikke sett inn noe',
value: 'no-act'
}
]
}
},
{
id: 'box',
storage: 'box',
checkbox: true,
setValue: 'yes',
text: {
head: 'Action of posting-box',
desc: '',
checkbox: [
{
text: 'Folding',
value: 'yes'
},
{
text: 'Open after posting',
value: 'no'
},
{
text: 'Helt åpen',
value: 'absolute'
}
]
}
},
{
id: 'quote',
storage: 'quote',
checkbox: true,
setValue: 'nothing',
text: {
head: 'Sitatformat',
desc: '',
checkbox: [
{
text: 'Kun URL',
value: 'simple'
},
{
text: 'URL and acct(mention to the user)',
value: 'mention'
},
{
text: 'URL, text and acct(mention to the user)',
value: 'full'
},
{
text: 'API(kun noen instanser)',
value: 'apiQuote',
quote: true
},
{
text: 'Disabled(Hide buttons on TLs)',
value: 'nothing'
}
]
}
},
{
id: 'main',
storage: 'mainuse',
checkbox: true,
setValue: 'remain',
text: {
head: 'Default accounts of actions',
desc: 'Main account can be set on Account Manager.',
checkbox: [
{
text: 'Konto du nylig brukte',
value: 'remain'
},
{
text: 'Hovedkonto',
value: 'main'
}
]
}
},
{
id: 'sec',
storage: 'sec',
checkbox: true,
setValue: 'public',
text: {
head: 'Secondary Toot Button',
desc: '',
checkbox: [
{
text: 'Gjemt',
value: 'nothing'
},
{
text: 'Offentlig',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Privat',
value: 'private'
},
{
text: 'Direkte',
value: 'direct'
},
{
text: 'Kun lokalt',
value: 'local',
kirishima: true,
kirishimaText: '非対応インスタンスでは「未収載」になります。'
}
]
}
},
{
id: 'zero',
storage: 'emoji-zero-width',
checkbox: true,
setValue: 'normal',
setValue: 'no',
text: {
head: 'Zero-width space when inserting emojis',
desc: '',
checkbox: yesno
}
},{
id: 'uploadCrop',
storage: 'uploadCrop',
checkbox: false,
doubleText: false,
width: 100,
setValue: '0',
text: {
head: 'Auto scale to fit',
desc: 'Max long-side px. Uploaded images are converted to JPEG(from JPEG) or PNG(from others). Set 0 and the images will not be resized. Notice: if you post an animated picture like GIF, it will be converted static one.',
after: 'px'
}
}
]

302
app/view/no-NO/update.html Normal file
View File

@ -0,0 +1,302 @@
<!DOCTYPE html>
<html lang="no-NO">
<head>
<title>Update - TheDesk</title>
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<style>
body {
font-family: 'Open Sans';
-webkit-app-region: drag;
cursor: move;
padding: 10px;
text-align: right;
}
#start {
display: flex;
justify-content: center;
align-items: center;
width: 100vw;
height: calc(100vh - 2.5rem);
text-align: center;
}
#checkbox {
text-align: left;
}
a,
button,
input,
label,
i {
-webkit-app-region: no-drag;
}
#updskip {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.skipbtn {
display: block;
width: 100%;
height: 100px;
border: 1px solid;
margin-left: 5px;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #c26363;
overflow: hidden;
color: #c26363;
margin-bottom: 5px;
font-size: 1.5rem;
}
.skipbtn:hover {
background-color: #c26363;
transition: all 0.3s ease-in-out;
color: white;
}
#prog {
font-size: 200%;
}
</style>
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet" />
<script>var pwa = false;</script>
</head>
<body>
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<i class="material-icons pointer waves-effect" onclick="about();">info</i>
<i class="material-icons pointer waves-effect" onclick="skipper();">clear</i>
<!--a href="update.html">Reload</a-->
<div id="start" style="filter: brightness(100%)">
<div id="box" class="show">
<h2>TheDesk</h2>
<p>Hent siste TheDesk</p>
<span id="now"></span><b id="ver"></b><br />
<a href="" id="github" class="btn waves-effect grey darken-1"><i class="fab fa-github left"></i>Hva er nytt?</a><br />
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left: 15px;">Installerer(Anbefalt)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left: 15px;">Bærbar ver.</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left: 15px;">zip</button>
<button class="waves-effect btn linux hide" onclick="update('linuxdeb')" style="margin-left: 15px;">deb(Anbefalt på Ubuntu, Debian)</button>
<button class="waves-effect btn linux hide" onclick="update('linuxsnap')" style="margin-left: 15px;">snap</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left: 15px;">Start</button>
<br />
Problemer?<br />Please download on <a href='https://thedesk.top'>Oficial HP</a>.
</div>
<div id="skipper" class="hide">
<h4>Hopp over denne oppdateringen</h4>
Du kan gå glipp av en kul opplevelse!<br />
<div id="updskip">
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light">
<div>Hidden until next TL loading</div>
</a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light">
<div>Hidden until next version</div>
</a>
</div>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top: 5px;">Fortsett oppdatering</a>
</div>
<div id="dlnow" class="hide" style="width: 70%;">
<h4>Laster ned...</h4>
<h4 id="prog"></h4>
<div class="progress">
<div class="determinate" style="width: 0%;"></div>
</div>
</div>
</div>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script>
function skipper() {
$('#dlnow').addClass('hide')
$('#box').toggleClass('show')
if ($('#box').hasClass('hide') && $('#skipper').hasClass('hide')) {
$('#skipper').removeClass('hide')
$('#skipper').addClass('show')
} else {
$('#box').toggleClass('hide')
$('#skipper').toggleClass('hide')
$('#skipper').toggleClass('show')
}
}
verck()
function update(sel) {
$('#box').toggleClass('show')
$('#box').toggleClass('hide')
$('#dlnow').toggleClass('hide')
$('#dlnow').toggleClass('show')
$('#prog').text('')
var bit = localStorage.getItem('bit')
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
if (sel == 'install') {
if (bit == 'x64') {
var url = json['winx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup.exe'
} else {
var file = 'TheDesk-setup.exe'
}
var filesize = json.winx64_size
} else if (bit == 'ia32') {
var url = json['winia32']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup-ia32.exe'
} else {
var file = 'TheDesk-setup-ia32.exe'
}
var filesize = json.winia32_size
}
} else if (sel == 'portable') {
if (bit == 'x64') {
var url = json['winx64p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '.exe'
} else {
var file = 'TheDesk.exe'
}
var filesize = json.winx64p_size
} else if (bit == 'ia32') {
var url = json['winia32p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-ia32.exe'
} else {
var file = 'TheDesk-ia32.exe'
}
var filesize = json.winia32p_size
}
} else if (sel == 'linux') {
var url = json['linuxx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'thedesk-' + json.unique_linux + '.zip'
} else {
var file = 'thedesk.zip'
}
var filesize = json.linuxx64_size
} else if (sel == 'linuxdeb') {
var url = json['linuxdeb']
var file = 'thedesk_' + json.unique_linux + '_amd64.deb'
var filesize = json.linuxdeb_size
} else if (sel == 'linuxsnap') {
var url = json['linuxsnap']
var file = 'thedesk_' + json.unique_linux + '_amd64.snap'
var filesize = json.linuxsnap_size
} else if (sel == 'mac') {
var url = json['mac']
var file = 'TheDesk-' + json.unique_mac + '.dmg'
var filesize = json.mac_size
}
postMessage(['downloadButton', [url, file, filesize]], '*')
})
}
function quit() {
postMessage(['sendSinmpleIpc', 'quit'], '*')
}
function updateProg(arg) {
$('.determinate').css('width', arg[0].percent * 100 + '%')
$('#prog').html(`${Math.floor(arg[0].percent * 100)}%<br />(${Math.floor(arg[0].percent*arg[1]/1024/1024*10)/10} MB / ${Math.floor(arg[1]/1024/1024*10)/10} MB)`)
}
function updateMess(arg) {
console.log(arg)
$('#prog').text(arg)
}
function verck() {
var platform = localStorage.getItem('platform')
var bit = localStorage.getItem('bit')
if (platform == 'win32') {
$('.windows').removeClass('hide')
} else if (platform == 'linux') {
$('.linux').removeClass('hide')
} else if (platform == 'darwin') {
$('.mac').removeClass('hide')
}
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
console.log(json)
if (platform == 'win32') {
$('#ver').text(json.desk)
localStorage.setItem('next-ver', json.desk)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique
} else if (platform == 'linux') {
$('#ver').text(json.desk_linux)
localStorage.setItem('next-ver', json.desk_linux)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_linux
} else if (platform == 'darwin') {
$('#ver').text(json.desk_mac)
localStorage.setItem('next-ver', json.desk_mac)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_mac
}
$('#github').attr('href', url)
$('#now').text(localStorage.getItem('ver'))
})
}
function nextv() {
localStorage.setItem('new-ver-skip', 'true')
window.close()
}
function enc(ver) {
var ver = ver.replace(/\s/g, '')
var ver = ver.replace(/\(/g, '-')
var ver = ver.replace(/\)/g, '')
var ver = ver.replace(/\[/g, '_')
var ver = ver.replace(/\]/g, '')
return ver
}
</script>
</body>
</html>

154
app/view/pt-BR/acct.html Normal file
View File

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link
href="../../node_modules/materialize-css/dist/css/materialize.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<link href="../../css/tl.css" rel="stylesheet" type="text/css" />
<link href="../../css/userdata.css" rel="stylesheet" type="text/css" />
<link
href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/acct.css" rel="stylesheet" type="text/css" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<script>var pwa = false;</script> <script>var store = false;</script>
</head>
<body id="mainView" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script
type="text/javascript"
src="../../node_modules/materialize-css/dist/js/materialize.js"
></script>
<script type="text/javascript" src="main.js"></script>
<script
type="text/javascript"
src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"
></script>
<script>
var misskeytoken = false
</script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"
>Voltar</a
><br />
<h5>Lista de Contas</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div class="hide-second">
<a href="setting.html">Having the exported file of TheDesk, click here to jump setting page</a>
</div>
<div>
<h5>Adicionar conta</h5>
<br />
<div id="add">
<div class="row">
<div class="col s8">
Preencha o domínio da instância (ex: mastodon.social)<br />
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp" />
<div id="ins-suggest"></div>
<button class="btn waves-effect" onclick="instance()">Login</button><br />
<div class="pwa">
Uncheck it to skip pasiting code.(login to Mastodon on Windows or macOS) (Recommended: pcheck)<br />
<label>
<input type="checkbox" class="filled-in" id="linux" />
<span>Code setup</span>
</label>
<br />
</div>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<span>Entrar como Misskey</span> </label
><br />
</div>
<div class="col s4 scr" aria-hidden="true">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div>
</div>
<div id="auth" style="display:none">
Cole o código e feche o navegador.<br />
<input type="text" id="code" placeholder="Código" required />
<button class="btn waves-effect" onclick="code()">Auth</button><br />
<br />
<a onclick="atSetup()" class="pointer">Use access token to login(click after fill not code but access-token in box: Advanced)</a>
<div id="compt" style="display:none" class="scr">
<h5>ログイン前に必ずご確認ください</h5>
<span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span
>のため以下の機能がご利用いただけません。
<span id="compt-warn" style="display:none"
>また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span
>
<ul id="compt-list"></ul>
</div>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
Read <a href="https://thedesk.top/how-to-misskey-login.html">Docs(ja)</a> to login Misskey.<br />
<input type="hidden" id="misskey-url" />
<input type="text" id="misskey-key" placeholder="Código" required />
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br />
<br />
<a onclick="atSetup('misskey')" class="pointer">Use access token to login(click after fill not code but access-token in box: Advanced)</a>
</div>
</div>
<div class="hide-first">
<h5>Main an account</h5>
<div class="input-field" style="width:300px">
<span data-trans="your_acct">Selecione uma conta</span>
<br />
<select
id="main-acct-sel"
class="acct-sel"
style="color:black"
onchange="mainacct()"
></select>
<label></label>
</div>
<ul id="domain-list" class="collection transparent"></ul>
<div id="instance-data">
Some instance data by
<a href="https://instances.social" target="_blank">instances.social API</a><br />
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br />
<span id="ins-desc"></span><br />
<img src="../../img/loading.svg" id="ins-prof" width="200" /><br />
<br />
Domínio:<span id="ins-name"></span><br />
Federated servers:<span id="ins-connect"></span><br />
Toots:<span id="ins-toot"></span><br />
Usuários:<span id="ins-user"></span>Usuários<br />
Conexão:<span id="ins-per"></span>%<br />
Versão do Mastodon:<span id="ins-ver"></span>@<span id="ins-upd"></span><br />
</div>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/common/sha256.js"></script>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/manager.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>
<script>$('body').addClass(localStorage.getItem('platform'))</script>
</body>
</html>

1287
app/view/pt-BR/index.html Normal file

File diff suppressed because it is too large Load Diff

1
app/view/pt-BR/main.js Normal file

File diff suppressed because one or more lines are too long

632
app/view/pt-BR/setting.html Normal file
View File

@ -0,0 +1,632 @@
<!doctype html>
<html lang="pt-BR" style="overflow-y:scroll">
<head>
<title>Settings - TheDesk</title>
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet">
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href="../../css/pickr.css" type="text/css" rel="stylesheet">
<link href="../../css/master.css" type="text/css" rel="stylesheet">
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet">
<meta charset="utf-8">
<style>
input {
max-height: 3.84rem !important
}
.pcr-result {
height: 1rem !important;
}
.container-after-titlebar {
padding: 20px;
}
</style>
<script>var pwa = false;</script>
<script>var store = false;</script>
</head>
<body id="mainView" style="overflow-y:scroll" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<script type="text/javascript" src="main.js"></script>
<script src="../../node_modules/json5/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
<script>function renderMem() { return false; }</script>
<h4>Preferences</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>System Preferences
</div>
<div class="collapsible-body">
<h5>Languages</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br><br>
<div style="display: flex;">
<div style="width: 22rem;" id="langsel">
<select id="langsel-sel"><option value="ja">日本語</option><option value="ja-KS">日本語(関西)</option><option value="en">English</option><option value="bg">български</option><option value="cs">Česky</option><option value="de">Deutsch</option><option value="es-AR">Español, argentina</option><option value="it-IT">italiano</option><option value="zh-CN">简体中文</option><option value="zh-TW">繁體中文(β)</option><option value="fr-FR">français(β)</option><option value="no-NO">norsk(β)</option><option value="pt-BR">Português, brasileiro(β)</option><option value="ru-RU">русский(β)</option><option value="es-ES">Español(β)</option><option value="ps">Crowdin translate system(beta)</option></select>
</div>
<button class="btn waves-effect" onclick="changeLang()">Change</button>
</div>
<h5>Import and export of preferences</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3"
style="width:100%; max-width:15rem;">Export</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3"
style="width:100%; max-width:15rem;">Import</button><br>
If you got a error when you choose the file, please paste the strings printed when you open the file and click import<br>
<input type="text" id="imp-exp" style="width: 22rem">
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><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">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>Font</h5>
Select your favorite font to 'Select'(Windows/ macOS only)<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="font()">Select</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:22rem; height:40rem;"></div>
<br>
<input type="text" style="width:11.5rem" id="font">
<button class="btn waves-effect" style="width:7.7rem;" onclick="settings()">Save</button>
<br>
<h5>Folder to save</h5>
TheDesk uses this value when it try to save pictures or take screenshots.<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="savefolder()">Change</button>
<br>
</div>
</li>
<li class="pwa">
<div class="collapsible-header">
<i class="material-icons">color_lens</i>Themes
</div>
<div class="collapsible-body">
<h4>Select theme</h4>
<div style="width:22rem" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<h4>Edit and add themes</h4>
<div style="width:22rem" id="edit-selector" data-add="Add new">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">Add new</option>
</select>
</div>
<h5>Name</h5>
<input type="text" style="width:22rem" id="custom_name" placeholder="Name...">
<h5>About this theme</h5>
<div class="input-field"><textarea style="width:22rem" id="custom_desc" class="materialize-textarea"
placeholder="About this theme..."></textarea></div>
<h5>Color scheme</h5>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="dark" value="dark"
checked="true" />
<span>Dark</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="light"
value="light" />
<span>Light</span>
</label><br><br />
<button class="btn waves-effect" onclick="advanced()">Advanced options</button>
<span class="advanced hide"></span>
<div id="pickers">
<div>
<h5>Background</h5>Background color<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_0" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker0_value">
</div>
<div>
<h5>Text</h5>Text color<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_1" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker1_value">
</div>
<div>
<h5>Subcolor</h5>Distinguishable from background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_2" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>Background of boosts<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_3" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker3_value">
</div>
<div class="advanced hide">
<h5>Modal</h5>Background of modal window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_4" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modal')">Background</a>
<br />
<input type="color" id="color-picker4_value">
</div>
<div class="advanced hide">
<h5>Modal Footer</h5>Background of modal window's footer<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_5" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modalFooter')">Background</a>/
<a class="pointer" onclick="copyColor('modal','modalFooter')">Modal</a>
<br />
<input type="color" id="color-picker5_value">
</div>
<div class="advanced hide">
<h5>3rd Color</h5>Backgroud of tag buttons, etc(near to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_6" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','third')">Subcolor</a>
<br />
<input type="color" id="color-picker6_value">
</div>
<div class="advanced hide">
<h5>4th Color</h5>Title bar(same scheme to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_7" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','forth')">Subcolor</a>/
<a class="pointer" onclick="copyColor('third','forth')">3rd Color</a>
<br />
<input type="color" id="color-picker7_value">
</div>
<div class="advanced hide">
<h5>Bottom</h5>Background of menu-bar at bottom of window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_8" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','bottom')">Subcolor</a>
<br />
<input type="color" id="color-picker8_value">
</div>
<div class="advanced hide">
<h5>2nd Accent</h5>Emphasized toot's background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_9" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','emphasized')">Accent</a>
<br />
<input type="color" id="color-picker9_value">
</div>
<div class="advanced hide">
<h5>Postbox</h5>Background of post-box and menu<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_10" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','postbox')">Subcolor</a>
<br />
<input type="color" id="color-picker10_value">
</div>
<div class="advanced hide">
<h5>Active</h5>Background of 'active' elements<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_11" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','active')">Accent</a>
<br />
<input type="color" id="color-picker11_value">
</div>
<div class="advanced hide">
<h5>Selected</h5>Background of selected with arrow keys<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_12" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker12_value">
</div>
<div class="advanced hide">
<h5>Selected with shared</h5>Background of selected with arrow keys(boosted toots)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_13" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker13_value">
</div>
</div><br /><br />
<button class="btn-large waves-effect" onclick="customComp()">Change</button>&nbsp;<button
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">Excluir</button><br><br>
<input type="text" style="width:22rem;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br>
<h4>Import of custom themes</h4>
<input type="text" style="width:22rem;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">Import</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>Timeline Preferences
</div>
<div class="collapsible-body">
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>Custom sound</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span
id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span
id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span
id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span
id="c4-file"></span><br>
<h5>Volume</h5>
0-100(default:80)<br>
<p class="range-field"><span id="soundVolVal">80</span><br>
<input type="range" id="soundvol" min="0" max="100" value="80" onchange="customVol()"
style="width:40rem; max-width:100%" />
</p>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>Posting Preferences
</div>
<div class="collapsible-body">
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template
v-if="(!check.kirishima || (check.kirishima && kirishima) )&& (!check.quote || (check.quote && quoters))">
<label><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" />
<span>{{check.text}}</span></label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>Easy inserter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:11.5rem" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:7.7rem;">Save</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:11.5rem" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:7.7rem;">Save</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:11.5rem" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:7.7rem;">Save</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<img src="../../img/aiscript.svg"
style="height: 1.5rem; margin-left: 0.4rem; margin-right: 0.4rem;">Plugins
</div>
<div class="collapsible-body">
<a href="https://github.com/cutls/TheDesk/blob/master/plugin.md">Japanese docs of AiScript TheDesk plugins</a><br />
<textarea id="plugin" data-id="add_new" style="height: 20rem"></textarea>
<button class="btn waves-effect" style="width:7.7rem;" onclick="completePlugin()">Change</button>
<button class="btn waves-effect red disabled plugin_delete" style="width:7.7rem;"
onclick="deletePlugin()">Excluir</button>
<h5>Plugin list</h5>
<div style="width:22rem" id="plugin-selector" data-add="Add new">
<select id="plugin-edit-sel" class="custom-sel" onchange="pluginEdit()">
<option value="add_new">Add new</option>
</select>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>Mute & Emphasis Preferences
</div>
<div class="collapsible-body">
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fab fa-spotify"></i>Spotify and NowPlaying Preferences
</div>
<div class="collapsible-body">
<h5>Account Connection(Spotify)</h5>
TheDesk save your data on thedesk.top server.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
onclick="spotifyAuth()" class="btn waves-effect" style="width:7.7rem;">Save</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-enable"><i
class="fab fa-spotify left"></i>Connect</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-disable"><i
class="fab fa-spotify left"></i>Disconnect</a>
<h5>Account Connection(Last.fm)</h5>
User name...(empty to disconnect) You cannot hide your recent play log at last.fm privacy settings.<br />
<input type="text" style="width:11.5rem" id="lastFmUser">
<button onclick="lastFmSet()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Edit a template</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
<span class="mac">>macOS:{song}:Song name/{album}:Album name/{artist}:Artist name/composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre}</span><br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Attach an Artwork of Spotify</h5>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes"
value="yes" />
<span>Sim</span>
</label>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no"
value="no" />
<span>Não</span>
</label>
<div class="mac">
<h5>If the song has no artwork, automatic complete it(macOS)</h5>
If you nowplaying an non-artwork song, get one which seems nice through API. If you do not like the completed artwork, you can right-click it to delete.<br />
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_yes"
value="yes" />
<span>Sim</span>
</label>
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_no"
value="no" />
<span>Não</span>
</label>
<br>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>BouyomiChan connect</h5>
Require: BouyomiChan WebSocket Plugin<a href="https://github.com/xztaityozx/BouyomiChan-WebSocket-Plugin"
target="_blank">GitHub</a><br>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_yes"
value="yes" />
<span>Sim</span>
</label>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_no" value="no" />
<span>Não</span>
</label>
<h5>Speed</h5>
1-100(default:10)<br>
<p class="range-field"><span id="voicespeedVal">10</span><br>
<input type="range" id="voicespeed" min="1" max="100" value="10"
onchange="document.getElementById('voicespeedVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><span id="voicepitchVal">50</span><br>
<input type="range" id="voicepitch" min="0" max="100" value="50"
onchange="document.getElementById('voicepitchVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><span id="voicevolVal">100</span><br>
<input type="range" id="voicevol" min="0" max="100" value="100"
onchange="document.getElementById('voicevolVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Test</h5>
<input type="text" style="width:27rem" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC.">
<button class="btn waves-effect blue" style="width:11.5rem;" onclick="voicePlay()"
id="testplay">Play/Stop</button><br>
<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="voiceSettings()">Save</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:15rem;"><i
class="material-icons left">undo</i>Voltar</a>
<br>
<br>Keyboard shortcuts
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
<li>Alt+Enter:Secondary Toot Button</li>
<li>Ctrl+E:Make all notifications read</li>
<li>Ctrl+U:Select the top & left(No.1 column) toot</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
<li>Ctrl+Shift+C:Clear toot box</li>
<li>Ctrl+Shift+S:Preferences</li>
<li>Ctrl+Shift+M:Account Manager</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Show next or previous image</li>
<li>Mousewheel:Zoom a image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
When a toot is selected:
<li>F:Favourite this toot</li>
<li>B:Boost this toot</li>
<li>R:Reply to this toot</li>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:40rem;"
onclick="if(confirm('Delete all data. You cannot undo. Continue?')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<button class="btn waves-effect indigo pwa" onclick="about()" style="width:100%; max-width:40rem;"><i
class="material-icons left">info</i>About TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">web</i>Website</a>
<a href="https://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Support(Pixiv FANBOX)</a>
<a href="https://www.patreon.com/cutls" class="btn waves-effect red darken-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Support(Patreon)</a>
<a href="https://liberapay.com/cutls" class="btn waves-effect black-text"
style="width:100%; max-width:40rem; background-color: #f6c915"><i
class="material-icons left">trending_up</i>Support(Liberapay)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">list</i>Help/Docs</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2"
style="width:100%; max-width:40rem;"><i class="fab fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@cutls.com" class="btn waves-effect blue lighten-2"
style="width:100%; max-width:40rem;"><img src="../../img/desk_full.svg" class="left" width="25"
style="padding-top:5px;">Main author: Cutls@cutls.com</a>
<br>
TheDesk @ <a href="https://github.com/cutls/TheDesk/commits/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c">89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c</a> - <a
onclick="checkupd(); return localStorage.removeItem('new-ver-skip'); location.href='index.html';"
class="pointer pwa">Check update</a><br>
<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
<a href="https://status.cutls.com/">
<img src="https://status.cutls.com/badge-service?site=thedesk.top">
</a><br>
<h5>OSS License</h5>
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2Fcutls%2FTheDesk/refs/branch/master/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c"
alt="FOSSA Status"><img
src="https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcutls%2FTheDesk.svg?type=small" /></a>
<br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a
href="https://thedesk.top/priv.html">Privacy
Policy</a>
<br>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/platform/aiscript.js"></script>
<script type="text/javascript" src="../../js/platform/plugin.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/ui/spotify.js"></script>
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/platform/pickr.js"></script>
<script type="text/javascript" src="../../js/ui/settings.js"></script>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>

View File

@ -0,0 +1,756 @@
var yesno = [
{
text: 'Sim',
value: 'yes'
},
{
text: 'Não',
value: 'no'
}
]
var sound = [
{
text: 'Nenhum',
value: 'none'
},
{
text: 'Padrão',
value: 'default'
},
{
text: 'Custom 1',
value: 'c1'
},
{
text: 'Custom 2',
value: 'c2'
},
{
text: 'Custom 3',
value: 'c3'
},
{
text: 'Custom 4',
value: 'c4'
}
]
var envConstruction = [
{
id: 'popup',
storage: 'popup',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Popup notification',
desc: 'Hide to set "0"',
after: 'sec'
}
},
{
id: 'notf',
storage: 'nativenotf',
checkbox: true,
setValue: 'yes',
text: {
head: 'Native notification',
desc: 'This does not work on Windows Portable ver.',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'width',
storage: 'width',
width: 50,
setValue: 300,
text: { after: 'px ~ ' }
},
{
id: 'maxWidth',
storage: 'max-width',
width: 50,
setValue: 600,
text: { after: 'px' }
}
],
text: {
head: 'Width of columns',
desc: 'Scroll bar will be shown when your window size is more than ammounts of columns.'
}
},
{
id: 'margin',
storage: 'margin',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Margin between timelines',
desc: '',
after: 'px'
}
},
{
id: 'fixwidth',
storage: 'fixwidth',
checkbox: false,
doubleText: false,
setValue: 300,
width: 50,
text: {
head: 'Minimum width of TweetDeck browser',
desc: '',
after: 'px above'
}
},
{
id: 'size',
storage: 'size',
checkbox: false,
doubleText: false,
width: 50,
setValue: 13,
text: {
head: 'Font size',
desc: '<span style="font-size:13px">13px(absolute value)</span>',
after: 'px'
}
},
{
id: 'ha',
storage: 'ha',
checkbox: true,
setValue: false,
text: {
head: 'Disable hardware acceleration',
desc: 'Auto restarted',
checkbox: [
{
text: 'Sim',
value: 'true'
},
{
text: 'Não',
value: 'false'
}
]
}
},
{
id: 'ua',
storage: 'ua_setting',
checkbox: false,
doubleText: false,
setValue: '',
width: 200,
text: {
head: 'User agent',
desc: 'Restart when changed'
}
},
{
id: 'srcUrl',
storage: 'srcUrl',
checkbox: false,
doubleText: false,
width: 200,
setValue: 'https://google.com/search?q={q}',
text: {
head: 'Search engine',
desc: '{q} will be replaced to query.',
after: ''
}
},{
id: 'download',
storage: 'dl-win',
checkbox: true,
setValue: 'no',
text: {
head: 'Versioning(o Windows downloader)',
desc: 'ex: TheDesk-1.0.0-setup.exe',
checkbox: yesno
}
}
]
var tlConstruction = [
{
id: 'time',
storage: 'datetype',
checkbox: true,
setValue: 'absolute',
text: {
head: 'Time format',
desc: 'Relative format:"1 minutes ago","3 days ago"<br>Absolute format:"23:25:21","2017/12/30 23:59:00"<br>Mixed format:toots posted today are relative-format, others are absolute-format.',
checkbox: [
{
text: 'Relative',
value: 'relative'
},
{
text: 'Absolute',
value: 'absolute'
},
{
text: 'Both relative and absolute',
value: 'double'
},
{
text: 'Mixed',
value: 'medium'
}
]
}
},
{
id: 'ul',
storage: 'locale',
checkbox: true,
setValue: 'yes',
text: {
head: 'Server\s unique locale',
desc: 'This value is available on some Japanese servers',
checkbox: yesno
}
},
{
id: 'nsfw',
storage: 'nsfw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide Mark sensitive pictures',
desc: 'Strong blur effect',
checkbox: yesno
}
},
{
id: 'cw',
storage: 'cw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide CW contents',
desc: '',
checkbox: yesno
}
},
{
id: 'rp',
storage: 'replyct',
checkbox: true,
setValue: 'hidden',
text: {
head: 'Reply counter style',
desc: '',
checkbox: [
{
text: 'Show 1+ if the replies are more than 1.',
value: 'hidden'
},
{
text: 'Show full count(1,2...)',
value: 'all'
}
]
}
},
{
id: 'gif',
storage: 'gif',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animated GIF images animation',
desc: '',
checkbox: yesno
}
},
{
id: 'tag',
storage: 'tag-range',
checkbox: true,
setValue: 'local',
text: {
head: 'Tag TL Search',
desc: '',
checkbox: [
{
text: 'Use federated network',
value: 'all'
},
{
text: 'Use local network',
value: 'local'
}
]
}
},
{
id: 'via',
storage: 'viashow',
checkbox: true,
setValue: 'no',
text: {
head: 'Show via',
desc: '',
checkbox: yesno
}
},
{
id: 'mov',
storage: 'mouseover',
checkbox: true,
setValue: 'no',
text: {
head: 'Hide action buttons without mouseover',
desc: 'You may feel \mouseover\ is unconfortable:(',
checkbox: [
{
text: 'Mouseover to show',
value: 'yes'
},
{
text: 'Click to show',
value: 'click'
},
{
text: 'Não',
value: 'no'
}
]
}
},
{
id: 'notfm',
storage: 'setasread',
checkbox: true,
setValue: 'yes',
text: {
head: 'Show Notification marker, red colored bell and counter(if you show a notification column.)',
desc: '',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'sentence',
storage: 'sentence',
width: 50,
setValue: 500,
text: { after: 'lines above or' }
},
{
id: 'letters',
storage: 'letters',
width: 50,
setValue: 7000,
text: { after: 'letters above' }
}
],
text: {
head: 'Auto folding',
desc: 'TheDesk does not collapse totes of 5 characters or less. Also, when collapsing, newlines are not shown. TheDesk count only newlines as the number of lines.'
}
},
{
id: 'img-height',
storage: 'img-height',
checkbox: false,
doubleText: false,
width: 80,
setValue: 200,
text: {
head: 'Height of images',
desc: 'Option:Set "full" to uncrop.',
after: 'px'
}
},
{
id: 'ticker',
storage: 'ticker_ok',
checkbox: true,
setValue: 'no',
text: {
head: 'Enable OpenSticker',
desc: 'Show the instance name and favicon of tooters <a href="https://opensticker.0px.io">About OpenSticker</a>',
checkbox: yesno
}
},
{
id: 'anime',
storage: 'animation',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animation of timelines',
desc: '',
checkbox: yesno
}
},
{
id: 'markers',
storage: 'markers',
checkbox: true,
setValue: 'no',
text: {
head: 'Markers(mark as read) on HTL and notifications',
desc: 'Mastodon 3.0~. Shared on WebUI and third-party supported clients.',
checkbox: yesno
}
},
{
id: 'remote_img',
storage: 'remote_img',
checkbox: true,
setValue: 'no',
text: {
head: 'Get images from the remote server',
desc: 'All previews are got from your loginned cache server.',
checkbox: yesno
}
},
{
id: 'bkm',
storage: 'bookmark',
checkbox: true,
setValue: 'no',
text: {
head: 'Show a bookmarking toot button',
desc: '',
checkbox: yesno
}
},
{
id: 'scroll',
storage: 'scroll',
checkbox: true,
setValue: 'normalScrollBar',
text: {
head: 'Height of the scroll bar',
desc: '',
checkbox: [
{
text: 'Thick',
value: 'thickScrollBar'
},
{
text: 'Normal',
value: 'normalScrollBar'
},
{
text: 'Thin',
value: 'thinScrollBar'
}
]
}
},
{
id: 'replySound',
storage: 'replySound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Reply)',
desc: '',
checkbox: sound
}
},
{
id: 'favSound',
storage: 'favSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Fav)',
desc: '',
checkbox: sound
}
},
{
id: 'btSound',
storage: 'btSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Boost)',
desc: '',
checkbox: sound
}
},
{
id: 'followSound',
storage: 'followSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Follow)',
desc: '',
checkbox: sound
}
}
]
var postConstruction = [
{
id: 'cw-text',
storage: 'cw-text',
checkbox: false,
doubleText: false,
width: 150,
setValue: '',
text: {
head: 'Default warining text',
desc: '',
after: ''
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'cw_sentence',
storage: 'cw_sentence',
width: 50,
setValue: 500,
text: { after: 'lines above or' }
},
{
id: 'cw_letters',
storage: 'cw_letters',
width: 50,
setValue: 7000,
text: { after: 'letters above' }
}
],
text: {
head: 'Alert before posting a long toot.',
desc: 'Show dialog whether you make too-long text hidden.'
}
},
{
id: 'cws',
storage: 'always-cw',
checkbox: true,
setValue: 'no',
text: {
head: 'Always CW set',
desc: '',
checkbox: yesno
}
},
{
id: 'cw-continue',
storage: 'cw-continue',
checkbox: true,
setValue: 'no',
text: {
head: '@@cwContinue@@',
desc: '',
checkbox: yesno
}
},
{
id: 'vis',
storage: 'vis',
checkbox: true,
setValue: 'public',
text: {
head: 'Default visibility',
desc: '',
checkbox: [
{
text: 'Public',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Private',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Memory(memorized as each server)',
value: 'memory'
},
{
text: 'Default of your visibility(Set on preferences of Mastodon server)',
value: 'useapi'
}
]
}
},
{
id: 'img',
storage: 'img',
checkbox: true,
setValue: 'no-act',
text: {
head: 'Posting images preferences',
desc: '',
checkbox: [
{
text: 'Insert media URL',
value: 'url'
},
{
text: 'Insert nothig',
value: 'no-act'
}
]
}
},
{
id: 'box',
storage: 'box',
checkbox: true,
setValue: 'yes',
text: {
head: 'Action of posting-box',
desc: '',
checkbox: [
{
text: 'Folding',
value: 'yes'
},
{
text: 'Open after posting',
value: 'no'
},
{
text: 'Absolutely open',
value: 'absolute'
}
]
}
},
{
id: 'quote',
storage: 'quote',
checkbox: true,
setValue: 'nothing',
text: {
head: 'Quote format',
desc: '',
checkbox: [
{
text: 'Only URL',
value: 'simple'
},
{
text: 'URL and acct(mention to the user)',
value: 'mention'
},
{
text: 'URL, text and acct(mention to the user)',
value: 'full'
},
{
text: 'API(only some instances)',
value: 'apiQuote',
quote: true
},
{
text: 'Disabled(Hide buttons on TLs)',
value: 'nothing'
}
]
}
},
{
id: 'main',
storage: 'mainuse',
checkbox: true,
setValue: 'remain',
text: {
head: 'Default accounts of actions',
desc: 'Main account can be set on Account Manager.',
checkbox: [
{
text: 'Account you used recently',
value: 'remain'
},
{
text: 'Main account',
value: 'main'
}
]
}
},
{
id: 'sec',
storage: 'sec',
checkbox: true,
setValue: 'public',
text: {
head: 'Secondary Toot Button',
desc: '',
checkbox: [
{
text: 'Hidden',
value: 'nothing'
},
{
text: 'Public',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Private',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Local Only',
value: 'local',
kirishima: true,
kirishimaText: '非対応インスタンスでは「未収載」になります。'
}
]
}
},
{
id: 'zero',
storage: 'emoji-zero-width',
checkbox: true,
setValue: 'normal',
setValue: 'no',
text: {
head: 'Zero-width space when inserting emojis',
desc: '',
checkbox: yesno
}
},{
id: 'uploadCrop',
storage: 'uploadCrop',
checkbox: false,
doubleText: false,
width: 100,
setValue: '0',
text: {
head: 'Auto scale to fit',
desc: 'Max long-side px. Uploaded images are converted to JPEG(from JPEG) or PNG(from others). Set 0 and the images will not be resized. Notice: if you post an animated picture like GIF, it will be converted static one.',
after: 'px'
}
}
]

302
app/view/pt-BR/update.html Normal file
View File

@ -0,0 +1,302 @@
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<title>Update - TheDesk</title>
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<style>
body {
font-family: 'Open Sans';
-webkit-app-region: drag;
cursor: move;
padding: 10px;
text-align: right;
}
#start {
display: flex;
justify-content: center;
align-items: center;
width: 100vw;
height: calc(100vh - 2.5rem);
text-align: center;
}
#checkbox {
text-align: left;
}
a,
button,
input,
label,
i {
-webkit-app-region: no-drag;
}
#updskip {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.skipbtn {
display: block;
width: 100%;
height: 100px;
border: 1px solid;
margin-left: 5px;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #c26363;
overflow: hidden;
color: #c26363;
margin-bottom: 5px;
font-size: 1.5rem;
}
.skipbtn:hover {
background-color: #c26363;
transition: all 0.3s ease-in-out;
color: white;
}
#prog {
font-size: 200%;
}
</style>
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet" />
<script>var pwa = false;</script>
</head>
<body>
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<i class="material-icons pointer waves-effect" onclick="about();">info</i>
<i class="material-icons pointer waves-effect" onclick="skipper();">clear</i>
<!--a href="update.html">Reload</a-->
<div id="start" style="filter: brightness(100%)">
<div id="box" class="show">
<h2>TheDesk</h2>
<p>Obtenha o mais recente TheDesk</p>
<span id="now"></span><b id="ver"></b><br />
<a href="" id="github" class="btn waves-effect grey darken-1"><i class="fab fa-github left"></i>Quais são as novidades?</a><br />
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left: 15px;">Instalador (Recomendado)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left: 15px;">Portable ver.</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left: 15px;">zip</button>
<button class="waves-effect btn linux hide" onclick="update('linuxdeb')" style="margin-left: 15px;">deb(Recommended on buntu, Debian)</button>
<button class="waves-effect btn linux hide" onclick="update('linuxsnap')" style="margin-left: 15px;">snap</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left: 15px;">Começar</button>
<br />
Alguns problemas?<br />Please download on <a href='https://thedesk.top'>Oficial HP</a>.
</div>
<div id="skipper" class="hide">
<h4>Ignorar esta atualização</h4>
Você pode perder uma experiência legal!<br />
<div id="updskip">
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light">
<div>Hidden until next TL loading</div>
</a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light">
<div>Oculto até a próxima versão</div>
</a>
</div>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top: 5px;">Continuar atualizando</a>
</div>
<div id="dlnow" class="hide" style="width: 70%;">
<h4>Baixando...</h4>
<h4 id="prog"></h4>
<div class="progress">
<div class="determinate" style="width: 0%;"></div>
</div>
</div>
</div>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script>
function skipper() {
$('#dlnow').addClass('hide')
$('#box').toggleClass('show')
if ($('#box').hasClass('hide') && $('#skipper').hasClass('hide')) {
$('#skipper').removeClass('hide')
$('#skipper').addClass('show')
} else {
$('#box').toggleClass('hide')
$('#skipper').toggleClass('hide')
$('#skipper').toggleClass('show')
}
}
verck()
function update(sel) {
$('#box').toggleClass('show')
$('#box').toggleClass('hide')
$('#dlnow').toggleClass('hide')
$('#dlnow').toggleClass('show')
$('#prog').text('')
var bit = localStorage.getItem('bit')
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
if (sel == 'install') {
if (bit == 'x64') {
var url = json['winx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup.exe'
} else {
var file = 'TheDesk-setup.exe'
}
var filesize = json.winx64_size
} else if (bit == 'ia32') {
var url = json['winia32']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup-ia32.exe'
} else {
var file = 'TheDesk-setup-ia32.exe'
}
var filesize = json.winia32_size
}
} else if (sel == 'portable') {
if (bit == 'x64') {
var url = json['winx64p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '.exe'
} else {
var file = 'TheDesk.exe'
}
var filesize = json.winx64p_size
} else if (bit == 'ia32') {
var url = json['winia32p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-ia32.exe'
} else {
var file = 'TheDesk-ia32.exe'
}
var filesize = json.winia32p_size
}
} else if (sel == 'linux') {
var url = json['linuxx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'thedesk-' + json.unique_linux + '.zip'
} else {
var file = 'thedesk.zip'
}
var filesize = json.linuxx64_size
} else if (sel == 'linuxdeb') {
var url = json['linuxdeb']
var file = 'thedesk_' + json.unique_linux + '_amd64.deb'
var filesize = json.linuxdeb_size
} else if (sel == 'linuxsnap') {
var url = json['linuxsnap']
var file = 'thedesk_' + json.unique_linux + '_amd64.snap'
var filesize = json.linuxsnap_size
} else if (sel == 'mac') {
var url = json['mac']
var file = 'TheDesk-' + json.unique_mac + '.dmg'
var filesize = json.mac_size
}
postMessage(['downloadButton', [url, file, filesize]], '*')
})
}
function quit() {
postMessage(['sendSinmpleIpc', 'quit'], '*')
}
function updateProg(arg) {
$('.determinate').css('width', arg[0].percent * 100 + '%')
$('#prog').html(`${Math.floor(arg[0].percent * 100)}%<br />(${Math.floor(arg[0].percent*arg[1]/1024/1024*10)/10} MB / ${Math.floor(arg[1]/1024/1024*10)/10} MB)`)
}
function updateMess(arg) {
console.log(arg)
$('#prog').text(arg)
}
function verck() {
var platform = localStorage.getItem('platform')
var bit = localStorage.getItem('bit')
if (platform == 'win32') {
$('.windows').removeClass('hide')
} else if (platform == 'linux') {
$('.linux').removeClass('hide')
} else if (platform == 'darwin') {
$('.mac').removeClass('hide')
}
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
console.log(json)
if (platform == 'win32') {
$('#ver').text(json.desk)
localStorage.setItem('next-ver', json.desk)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique
} else if (platform == 'linux') {
$('#ver').text(json.desk_linux)
localStorage.setItem('next-ver', json.desk_linux)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_linux
} else if (platform == 'darwin') {
$('#ver').text(json.desk_mac)
localStorage.setItem('next-ver', json.desk_mac)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_mac
}
$('#github').attr('href', url)
$('#now').text(localStorage.getItem('ver'))
})
}
function nextv() {
localStorage.setItem('new-ver-skip', 'true')
window.close()
}
function enc(ver) {
var ver = ver.replace(/\s/g, '')
var ver = ver.replace(/\(/g, '-')
var ver = ver.replace(/\)/g, '')
var ver = ver.replace(/\[/g, '_')
var ver = ver.replace(/\]/g, '')
return ver
}
</script>
</body>
</html>

154
app/view/ru-RU/acct.html Normal file
View File

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="ru-RU">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link
href="../../node_modules/materialize-css/dist/css/materialize.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<link href="../../css/tl.css" rel="stylesheet" type="text/css" />
<link href="../../css/userdata.css" rel="stylesheet" type="text/css" />
<link
href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/acct.css" rel="stylesheet" type="text/css" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<script>var pwa = false;</script> <script>var store = false;</script>
</head>
<body id="mainView" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script
type="text/javascript"
src="../../node_modules/materialize-css/dist/js/materialize.js"
></script>
<script type="text/javascript" src="main.js"></script>
<script
type="text/javascript"
src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"
></script>
<script>
var misskeytoken = false
</script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"
>Назад</a
><br />
<h5>Список аккаунтов</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div class="hide-second">
<a href="setting.html">Having the exported file of TheDesk, click here to jump setting page</a>
</div>
<div>
<h5>Добавьте аккаунт</h5>
<br />
<div id="add">
<div class="row">
<div class="col s8">
Fill the instance domain (like mastodon.social)<br />
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp" />
<div id="ins-suggest"></div>
<button class="btn waves-effect" onclick="instance()">Login</button><br />
<div class="pwa">
Uncheck it to skip pasiting code.(login to Mastodon on Windows or macOS) (Recommended: pcheck)<br />
<label>
<input type="checkbox" class="filled-in" id="linux" />
<span>Настройка кода</span>
</label>
<br />
</div>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<span>Login as Misskey</span> </label
><br />
</div>
<div class="col s4 scr" aria-hidden="true">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div>
</div>
<div id="auth" style="display:none">
Вставьте код и закройте браузер.<br />
<input type="text" id="code" placeholder="Код" required />
<button class="btn waves-effect" onclick="code()">Auth</button><br />
<br />
<a onclick="atSetup()" class="pointer">Use access token to login(click after fill not code but access-token in box: Advanced)</a>
<div id="compt" style="display:none" class="scr">
<h5>ログイン前に必ずご確認ください</h5>
<span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span
>のため以下の機能がご利用いただけません。
<span id="compt-warn" style="display:none"
>また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span
>
<ul id="compt-list"></ul>
</div>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
Read <a href="https://thedesk.top/how-to-misskey-login.html">Docs(ja)</a> to login Misskey.<br />
<input type="hidden" id="misskey-url" />
<input type="text" id="misskey-key" placeholder="Код" required />
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br />
<br />
<a onclick="atSetup('misskey')" class="pointer">Use access token to login(click after fill not code but access-token in box: Advanced)</a>
</div>
</div>
<div class="hide-first">
<h5>Основной аккаунт</h5>
<div class="input-field" style="width:300px">
<span data-trans="your_acct">Выберите аккаунт</span>
<br />
<select
id="main-acct-sel"
class="acct-sel"
style="color:black"
onchange="mainacct()"
></select>
<label></label>
</div>
<ul id="domain-list" class="collection transparent"></ul>
<div id="instance-data">
Some instance data by
<a href="https://instances.social" target="_blank">instances.social API</a><br />
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br />
<span id="ins-desc"></span><br />
<img src="../../img/loading.svg" id="ins-prof" width="200" /><br />
<br />
Домен:<span id="ins-name"></span><br />
Федеративные серверы:<span id="ins-connect"></span><br />
Toots:<span id="ins-toot"></span><br />
Пользователи:<span id="ins-user"></span>Пользователи<br />
Подключение:<span id="ins-per"></span>%<br />
Версия Mastodon:<span id="ins-ver"></span>@<span id="ins-upd"></span><br />
</div>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/common/sha256.js"></script>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/manager.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>
<script>$('body').addClass(localStorage.getItem('platform'))</script>
</body>
</html>

1287
app/view/ru-RU/index.html Normal file

File diff suppressed because it is too large Load Diff

1
app/view/ru-RU/main.js Normal file

File diff suppressed because one or more lines are too long

632
app/view/ru-RU/setting.html Normal file
View File

@ -0,0 +1,632 @@
<!doctype html>
<html lang="ru-RU" style="overflow-y:scroll">
<head>
<title>Settings - TheDesk</title>
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet">
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href="../../css/pickr.css" type="text/css" rel="stylesheet">
<link href="../../css/master.css" type="text/css" rel="stylesheet">
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet">
<meta charset="utf-8">
<style>
input {
max-height: 3.84rem !important
}
.pcr-result {
height: 1rem !important;
}
.container-after-titlebar {
padding: 20px;
}
</style>
<script>var pwa = false;</script>
<script>var store = false;</script>
</head>
<body id="mainView" style="overflow-y:scroll" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<script type="text/javascript" src="main.js"></script>
<script src="../../node_modules/json5/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
<script>function renderMem() { return false; }</script>
<h4>Предпочтения</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>Системные настройки
</div>
<div class="collapsible-body">
<h5>Языки</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br><br>
<div style="display: flex;">
<div style="width: 22rem;" id="langsel">
<select id="langsel-sel"><option value="ja">日本語</option><option value="ja-KS">日本語(関西)</option><option value="en">English</option><option value="bg">български</option><option value="cs">Česky</option><option value="de">Deutsch</option><option value="es-AR">Español, argentina</option><option value="it-IT">italiano</option><option value="zh-CN">简体中文</option><option value="zh-TW">繁體中文(β)</option><option value="fr-FR">français(β)</option><option value="no-NO">norsk(β)</option><option value="pt-BR">Português, brasileiro(β)</option><option value="ru-RU">русский(β)</option><option value="es-ES">Español(β)</option><option value="ps">Crowdin translate system(beta)</option></select>
</div>
<button class="btn waves-effect" onclick="changeLang()">Изменить</button>
</div>
<h5>Импорт и экспорт предпочтений</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3"
style="width:100%; max-width:15rem;">Экспорт</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3"
style="width:100%; max-width:15rem;">Импорт</button><br>
If you got a error when you choose the file, please paste the strings printed when you open the file and click import<br>
<input type="text" id="imp-exp" style="width: 22rem">
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><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">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Изменить</button>
</template><br>
</template>
</div>
<h5>Шрифт</h5>
Select your favorite font to 'Select'(Windows/ macOS only)<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="font()">Выбрать</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:22rem; height:40rem;"></div>
<br>
<input type="text" style="width:11.5rem" id="font">
<button class="btn waves-effect" style="width:7.7rem;" onclick="settings()">Сохранить</button>
<br>
<h5>Папка для сохранения</h5>
TheDesk использует это значение, когда он пытается сохранить фотографии или сделать скриншоты.<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="savefolder()">Изменить</button>
<br>
</div>
</li>
<li class="pwa">
<div class="collapsible-header">
<i class="material-icons">color_lens</i>Темы
</div>
<div class="collapsible-body">
<h4>Выбрать тему</h4>
<div style="width:22rem" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<h4>Редактировать и добавить пользовательские темы</h4>
<div style="width:22rem" id="edit-selector" data-add="Добавить новое">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">Добавить новое</option>
</select>
</div>
<h5>Имя</h5>
<input type="text" style="width:22rem" id="custom_name" placeholder="Имя...">
<h5>Об этой теме</h5>
<div class="input-field"><textarea style="width:22rem" id="custom_desc" class="materialize-textarea"
placeholder="Об этой теме..."></textarea></div>
<h5>Цветная схема</h5>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="dark" value="dark"
checked="true" />
<span>Dark</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="light"
value="light" />
<span>Light</span>
</label><br><br />
<button class="btn waves-effect" onclick="advanced()">Дополнительные параметры (6 дополнительных цветов)</button>
<span class="advanced hide"></span>
<div id="pickers">
<div>
<h5>Background</h5>Background color<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_0" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker0_value">
</div>
<div>
<h5>Text</h5>Цвет текста<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_1" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker1_value">
</div>
<div>
<h5>Subcolor</h5>Подцвет, имеет гармонию с вторичным цветом<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_2" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>Background of boosts<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_3" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker3_value">
</div>
<div class="advanced hide">
<h5>Modal</h5>Background of modal window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_4" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modal')">Background</a>
<br />
<input type="color" id="color-picker4_value">
</div>
<div class="advanced hide">
<h5>Modal Footer</h5>Background of modal window's footer<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_5" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modalFooter')">Background</a>/
<a class="pointer" onclick="copyColor('modal','modalFooter')">Modal</a>
<br />
<input type="color" id="color-picker5_value">
</div>
<div class="advanced hide">
<h5>3rd Color</h5>Backgroud of tag buttons, etc(near to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_6" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','third')">Subcolor</a>
<br />
<input type="color" id="color-picker6_value">
</div>
<div class="advanced hide">
<h5>4th Color</h5>Title bar(same scheme to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_7" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','forth')">Subcolor</a>/
<a class="pointer" onclick="copyColor('third','forth')">3rd Color</a>
<br />
<input type="color" id="color-picker7_value">
</div>
<div class="advanced hide">
<h5>Bottom</h5>Фон нижней панели<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_8" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','bottom')">Subcolor</a>
<br />
<input type="color" id="color-picker8_value">
</div>
<div class="advanced hide">
<h5>2nd Accent</h5>Emphasized toot's background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_9" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','emphasized')">Accent</a>
<br />
<input type="color" id="color-picker9_value">
</div>
<div class="advanced hide">
<h5>Postbox</h5>Background of post-box and menu<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_10" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','postbox')">Subcolor</a>
<br />
<input type="color" id="color-picker10_value">
</div>
<div class="advanced hide">
<h5>Active</h5>Background of 'active' elements<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_11" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','active')">Accent</a>
<br />
<input type="color" id="color-picker11_value">
</div>
<div class="advanced hide">
<h5>Selected</h5>Background of selected with arrow keys<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_12" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker12_value">
</div>
<div class="advanced hide">
<h5>Selected with shared</h5>Background of selected with arrow keys(boosted toots)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_13" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker13_value">
</div>
</div><br /><br />
<button class="btn-large waves-effect" onclick="customComp()">Изменить</button>&nbsp;<button
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">Delete</button><br><br>
<input type="text" style="width:22rem;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br>
<h4>Импорт пользовательских тем</h4>
<input type="text" style="width:22rem;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">Импорт</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>Настройки хронологии
</div>
<div class="collapsible-body">
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Изменить</button>
</template><br>
</template>
</div>
<h5>Пользовательский звук</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span
id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span
id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span
id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span
id="c4-file"></span><br>
<h5>Volume</h5>
0-100(default:80)<br>
<p class="range-field"><span id="soundVolVal">80</span><br>
<input type="range" id="soundvol" min="0" max="100" value="80" onchange="customVol()"
style="width:40rem; max-width:100%" />
</p>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>Настройки публикации
</div>
<div class="collapsible-body">
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template
v-if="(!check.kirishima || (check.kirishima && kirishima) )&& (!check.quote || (check.quote && quoters))">
<label><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" />
<span>{{check.text}}</span></label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Изменить</button>
</template><br>
</template>
</div>
<h5>Easy inserter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:11.5rem" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:7.7rem;">Сохранить</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:11.5rem" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:7.7rem;">Сохранить</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:11.5rem" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:7.7rem;">Сохранить</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<img src="../../img/aiscript.svg"
style="height: 1.5rem; margin-left: 0.4rem; margin-right: 0.4rem;">Plugins
</div>
<div class="collapsible-body">
<a href="https://github.com/cutls/TheDesk/blob/master/plugin.md">Japanese docs of AiScript TheDesk plugins</a><br />
<textarea id="plugin" data-id="add_new" style="height: 20rem"></textarea>
<button class="btn waves-effect" style="width:7.7rem;" onclick="completePlugin()">Изменить</button>
<button class="btn waves-effect red disabled plugin_delete" style="width:7.7rem;"
onclick="deletePlugin()">Delete</button>
<h5>Plugin list</h5>
<div style="width:22rem" id="plugin-selector" data-add="Добавить новое">
<select id="plugin-edit-sel" class="custom-sel" onchange="pluginEdit()">
<option value="add_new">Добавить новое</option>
</select>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>Mute & Emphasis Preferences
</div>
<div class="collapsible-body">
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:7.7rem;">Сохранить</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:7.7rem;">Сохранить</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fab fa-spotify"></i>Spotify and NowPlaying Preferences
</div>
<div class="collapsible-body">
<h5>Account Connection(Spotify)</h5>
TheDesk save your data on thedesk.top server.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
onclick="spotifyAuth()" class="btn waves-effect" style="width:7.7rem;">Сохранить</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-enable"><i
class="fab fa-spotify left"></i>Connect</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-disable"><i
class="fab fa-spotify left"></i>Disconnect</a>
<h5>Account Connection(Last.fm)</h5>
User name...(empty to disconnect) You cannot hide your recent play log at last.fm privacy settings.<br />
<input type="text" style="width:11.5rem" id="lastFmUser">
<button onclick="lastFmSet()" class="btn waves-effect" style="width:7.7rem;">Сохранить</button>
<h5>Edit a template</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
<span class="mac">>macOS:{song}:Song name/{album}:Album name/{artist}:Artist name/composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre}</span><br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:7.7rem;">Сохранить</button>
<h5>Attach an Artwork of Spotify</h5>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes"
value="yes" />
<span>Да</span>
</label>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no"
value="no" />
<span>Нет</span>
</label>
<div class="mac">
<h5>If the song has no artwork, automatic complete it(macOS)</h5>
If you nowplaying an non-artwork song, get one which seems nice through API. If you do not like the completed artwork, you can right-click it to delete.<br />
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_yes"
value="yes" />
<span>Да</span>
</label>
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_no"
value="no" />
<span>Нет</span>
</label>
<br>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>BouyomiChan connect</h5>
Require: BouyomiChan WebSocket Plugin<a href="https://github.com/xztaityozx/BouyomiChan-WebSocket-Plugin"
target="_blank">GitHub</a><br>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_yes"
value="yes" />
<span>Да</span>
</label>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_no" value="no" />
<span>Нет</span>
</label>
<h5>Speed</h5>
1-100(default:10)<br>
<p class="range-field"><span id="voicespeedVal">10</span><br>
<input type="range" id="voicespeed" min="1" max="100" value="10"
onchange="document.getElementById('voicespeedVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><span id="voicepitchVal">50</span><br>
<input type="range" id="voicepitch" min="0" max="100" value="50"
onchange="document.getElementById('voicepitchVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><span id="voicevolVal">100</span><br>
<input type="range" id="voicevol" min="0" max="100" value="100"
onchange="document.getElementById('voicevolVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Test</h5>
<input type="text" style="width:27rem" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC.">
<button class="btn waves-effect blue" style="width:11.5rem;" onclick="voicePlay()"
id="testplay">Play/Stop</button><br>
<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="voiceSettings()">Сохранить</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:15rem;"><i
class="material-icons left">undo</i>Назад</a>
<br>
<br>Keyboard shortcuts
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
<li>Alt+Enter:Secondary Toot Button</li>
<li>Ctrl+E:Make all notifications read</li>
<li>Ctrl+U:Select the top & left(No.1 column) toot</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
<li>Ctrl+Shift+C:Clear toot box</li>
<li>Ctrl+Shift+S:Предпочтения</li>
<li>Ctrl+Shift+M:Account Manager</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Show next or previous image</li>
<li>Mousewheel:Zoom a image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
When a toot is selected:
<li>F:Favourite this toot</li>
<li>B:Boost this toot</li>
<li>R:Reply to this toot</li>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:40rem;"
onclick="if(confirm('Delete all data. You cannot undo. Continue?')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<button class="btn waves-effect indigo pwa" onclick="about()" style="width:100%; max-width:40rem;"><i
class="material-icons left">info</i>О TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">web</i>Website</a>
<a href="https://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Support(Pixiv FANBOX)</a>
<a href="https://www.patreon.com/cutls" class="btn waves-effect red darken-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Support(Patreon)</a>
<a href="https://liberapay.com/cutls" class="btn waves-effect black-text"
style="width:100%; max-width:40rem; background-color: #f6c915"><i
class="material-icons left">trending_up</i>Support(Liberapay)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">list</i>Help/Docs</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2"
style="width:100%; max-width:40rem;"><i class="fab fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@cutls.com" class="btn waves-effect blue lighten-2"
style="width:100%; max-width:40rem;"><img src="../../img/desk_full.svg" class="left" width="25"
style="padding-top:5px;">Main author: Cutls@cutls.com</a>
<br>
TheDesk @ <a href="https://github.com/cutls/TheDesk/commits/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c">89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c</a> - <a
onclick="checkupd(); return localStorage.removeItem('new-ver-skip'); location.href='index.html';"
class="pointer pwa">Check update</a><br>
<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
<a href="https://status.cutls.com/">
<img src="https://status.cutls.com/badge-service?site=thedesk.top">
</a><br>
<h5>OSS License</h5>
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2Fcutls%2FTheDesk/refs/branch/master/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c"
alt="FOSSA Status"><img
src="https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcutls%2FTheDesk.svg?type=small" /></a>
<br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a
href="https://thedesk.top/priv.html">Privacy
Policy</a>
<br>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/platform/aiscript.js"></script>
<script type="text/javascript" src="../../js/platform/plugin.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/ui/spotify.js"></script>
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/platform/pickr.js"></script>
<script type="text/javascript" src="../../js/ui/settings.js"></script>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>

View File

@ -0,0 +1,756 @@
var yesno = [
{
text: 'Да',
value: 'yes'
},
{
text: 'Нет',
value: 'no'
}
]
var sound = [
{
text: 'None',
value: 'none'
},
{
text: 'Default',
value: 'default'
},
{
text: 'Custom 1',
value: 'c1'
},
{
text: 'Custom 2',
value: 'c2'
},
{
text: 'Custom 3',
value: 'c3'
},
{
text: 'Custom 4',
value: 'c4'
}
]
var envConstruction = [
{
id: 'popup',
storage: 'popup',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Всплывающие уведомления (на Windows)',
desc: 'Скрыть для установки "0"',
after: 'сек'
}
},
{
id: 'notf',
storage: 'nativenotf',
checkbox: true,
setValue: 'yes',
text: {
head: 'Native notification',
desc: 'Это не работает на Windows Portable.',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'width',
storage: 'width',
width: 50,
setValue: 300,
text: { after: 'px ~ ' }
},
{
id: 'maxWidth',
storage: 'max-width',
width: 50,
setValue: 600,
text: { after: 'px' }
}
],
text: {
head: 'Width of columns',
desc: 'Scroll bar will be shown when your window size is more than ammounts of columns.'
}
},
{
id: 'margin',
storage: 'margin',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Margin between timelines',
desc: '',
after: 'px'
}
},
{
id: 'fixwidth',
storage: 'fixwidth',
checkbox: false,
doubleText: false,
setValue: 300,
width: 50,
text: {
head: 'Минимальная ширина браузера TweetDeck',
desc: '',
after: 'px above'
}
},
{
id: 'size',
storage: 'size',
checkbox: false,
doubleText: false,
width: 50,
setValue: 13,
text: {
head: 'Размер шрифта',
desc: '<span style="font-size:13px">13px(абсолютное значение)</span>',
after: 'px'
}
},
{
id: 'ha',
storage: 'ha',
checkbox: true,
setValue: false,
text: {
head: 'Отключить аппаратное ускорение',
desc: 'Автоперезапуск',
checkbox: [
{
text: 'Да',
value: 'true'
},
{
text: 'Нет',
value: 'false'
}
]
}
},
{
id: 'ua',
storage: 'ua_setting',
checkbox: false,
doubleText: false,
setValue: '',
width: 200,
text: {
head: 'User agent',
desc: 'Перезапустить, когда изменилось'
}
},
{
id: 'srcUrl',
storage: 'srcUrl',
checkbox: false,
doubleText: false,
width: 200,
setValue: 'https://google.com/search?q={q}',
text: {
head: 'Search engine',
desc: '{q} will be replaced to query.',
after: ''
}
},{
id: 'download',
storage: 'dl-win',
checkbox: true,
setValue: 'no',
text: {
head: 'Versioning(o Windows downloader)',
desc: 'ex: TheDesk-1.0.0-setup.exe',
checkbox: yesno
}
}
]
var tlConstruction = [
{
id: 'time',
storage: 'datetype',
checkbox: true,
setValue: 'absolute',
text: {
head: 'Формат времени',
desc: 'Относительный формат:"1 минут назад","3 дня назад"<br>Absolute format:"23:25:21","2017/12/30 23:59:00"<br>Mixed format:toots posted today are relative-format, others are absolute-format.',
checkbox: [
{
text: 'Relative',
value: 'relative'
},
{
text: 'Absolute',
value: 'absolute'
},
{
text: 'Both relative and absolute',
value: 'double'
},
{
text: 'Mixed',
value: 'medium'
}
]
}
},
{
id: 'ul',
storage: 'locale',
checkbox: true,
setValue: 'yes',
text: {
head: 'Server\s unique locale',
desc: 'This value is available on some Japanese servers',
checkbox: yesno
}
},
{
id: 'nsfw',
storage: 'nsfw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide Mark sensitive pictures',
desc: 'Strong blur effect',
checkbox: yesno
}
},
{
id: 'cw',
storage: 'cw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide CW contents',
desc: '',
checkbox: yesno
}
},
{
id: 'rp',
storage: 'replyct',
checkbox: true,
setValue: 'hidden',
text: {
head: 'Reply counter style',
desc: '',
checkbox: [
{
text: 'Show 1+ if the replies are more than 1.',
value: 'hidden'
},
{
text: 'Show full count(1,2...)',
value: 'all'
}
]
}
},
{
id: 'gif',
storage: 'gif',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animated GIF images animation',
desc: '',
checkbox: yesno
}
},
{
id: 'tag',
storage: 'tag-range',
checkbox: true,
setValue: 'local',
text: {
head: 'Tag TL Search',
desc: '',
checkbox: [
{
text: 'Use federated network',
value: 'all'
},
{
text: 'Use local network',
value: 'local'
}
]
}
},
{
id: 'via',
storage: 'viashow',
checkbox: true,
setValue: 'no',
text: {
head: 'Show via',
desc: '',
checkbox: yesno
}
},
{
id: 'mov',
storage: 'mouseover',
checkbox: true,
setValue: 'no',
text: {
head: 'Hide action buttons without mouseover',
desc: 'You may feel \mouseover\ is unconfortable:(',
checkbox: [
{
text: 'Mouseover to show',
value: 'yes'
},
{
text: 'Нажмите, чтобы показать',
value: 'click'
},
{
text: 'Нет',
value: 'no'
}
]
}
},
{
id: 'notfm',
storage: 'setasread',
checkbox: true,
setValue: 'yes',
text: {
head: 'Show Notification marker, red colored bell and counter(if you show a notification column.)',
desc: '',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'sentence',
storage: 'sentence',
width: 50,
setValue: 500,
text: { after: 'lines above или' }
},
{
id: 'letters',
storage: 'letters',
width: 50,
setValue: 7000,
text: { after: 'letters above' }
}
],
text: {
head: 'Auto folding',
desc: 'TheDesk does not collapse totes of 5 characters or less. Also, when collapsing, newlines are not shown. TheDesk count only newlines as the number of lines.'
}
},
{
id: 'img-height',
storage: 'img-height',
checkbox: false,
doubleText: false,
width: 80,
setValue: 200,
text: {
head: 'Height of images',
desc: 'Option:Set "full" to uncrop.',
after: 'px'
}
},
{
id: 'ticker',
storage: 'ticker_ok',
checkbox: true,
setValue: 'no',
text: {
head: 'Enable OpenSticker',
desc: 'Show the instance name and favicon of tooters <a href="https://opensticker.0px.io">About OpenSticker</a>',
checkbox: yesno
}
},
{
id: 'anime',
storage: 'animation',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animation of timelines',
desc: '',
checkbox: yesno
}
},
{
id: 'markers',
storage: 'markers',
checkbox: true,
setValue: 'no',
text: {
head: 'Markers(mark as read) on HTL and notifications',
desc: 'Mastodon 3.0~. Shared on WebUI and third-party supported clients.',
checkbox: yesno
}
},
{
id: 'remote_img',
storage: 'remote_img',
checkbox: true,
setValue: 'no',
text: {
head: 'Get images from the remote server',
desc: 'All previews are got from your loginned cache server.',
checkbox: yesno
}
},
{
id: 'bkm',
storage: 'bookmark',
checkbox: true,
setValue: 'no',
text: {
head: 'Show a bookmarking toot button',
desc: '',
checkbox: yesno
}
},
{
id: 'scroll',
storage: 'scroll',
checkbox: true,
setValue: 'normalScrollBar',
text: {
head: 'Height of the scroll bar',
desc: '',
checkbox: [
{
text: 'Thick',
value: 'thickScrollBar'
},
{
text: 'Normal',
value: 'normalScrollBar'
},
{
text: 'Thin',
value: 'thinScrollBar'
}
]
}
},
{
id: 'replySound',
storage: 'replySound',
checkbox: true,
setValue: 'none',
text: {
head: 'Звук (Ответить)',
desc: '',
checkbox: sound
}
},
{
id: 'favSound',
storage: 'favSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Звук(Fav)',
desc: '',
checkbox: sound
}
},
{
id: 'btSound',
storage: 'btSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Звук(Boost)',
desc: '',
checkbox: sound
}
},
{
id: 'followSound',
storage: 'followSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Звук(Подписаться)',
desc: '',
checkbox: sound
}
}
]
var postConstruction = [
{
id: 'cw-text',
storage: 'cw-text',
checkbox: false,
doubleText: false,
width: 150,
setValue: '',
text: {
head: 'Default warining text',
desc: '',
after: ''
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'cw_sentence',
storage: 'cw_sentence',
width: 50,
setValue: 500,
text: { after: 'lines above или' }
},
{
id: 'cw_letters',
storage: 'cw_letters',
width: 50,
setValue: 7000,
text: { after: 'letters above' }
}
],
text: {
head: 'Alert before posting a long toot.',
desc: 'Show dialog whether you make too-long text hidden.'
}
},
{
id: 'cws',
storage: 'always-cw',
checkbox: true,
setValue: 'no',
text: {
head: 'Always CW set',
desc: '',
checkbox: yesno
}
},
{
id: 'cw-continue',
storage: 'cw-continue',
checkbox: true,
setValue: 'no',
text: {
head: '@@cwContinue@@',
desc: '',
checkbox: yesno
}
},
{
id: 'vis',
storage: 'vis',
checkbox: true,
setValue: 'public',
text: {
head: 'Default visibility',
desc: '',
checkbox: [
{
text: 'Public',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Private',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Memory(memorized as each server)',
value: 'memory'
},
{
text: 'Default of your visibility(Set on preferences of Mastodon server)',
value: 'useapi'
}
]
}
},
{
id: 'img',
storage: 'img',
checkbox: true,
setValue: 'no-act',
text: {
head: 'Posting images preferences',
desc: '',
checkbox: [
{
text: 'Insert media URL',
value: 'url'
},
{
text: 'Insert nothig',
value: 'no-act'
}
]
}
},
{
id: 'box',
storage: 'box',
checkbox: true,
setValue: 'yes',
text: {
head: 'Action of posting-box',
desc: '',
checkbox: [
{
text: 'Folding',
value: 'yes'
},
{
text: 'Open after posting',
value: 'no'
},
{
text: 'Absolutely open',
value: 'absolute'
}
]
}
},
{
id: 'quote',
storage: 'quote',
checkbox: true,
setValue: 'nothing',
text: {
head: 'Quote format',
desc: '',
checkbox: [
{
text: 'Only URL',
value: 'simple'
},
{
text: 'URL and acct(mention to the user)',
value: 'mention'
},
{
text: 'URL, text and acct(mention to the user)',
value: 'full'
},
{
text: 'API(only some instances)',
value: 'apiQuote',
quote: true
},
{
text: 'Disabled(Hide buttons on TLs)',
value: 'nothing'
}
]
}
},
{
id: 'main',
storage: 'mainuse',
checkbox: true,
setValue: 'remain',
text: {
head: 'Default accounts of actions',
desc: 'Main account can be set on Account Manager.',
checkbox: [
{
text: 'Account you used recently',
value: 'remain'
},
{
text: 'Main account',
value: 'main'
}
]
}
},
{
id: 'sec',
storage: 'sec',
checkbox: true,
setValue: 'public',
text: {
head: 'Secondary Toot Button',
desc: '',
checkbox: [
{
text: 'Hidden',
value: 'nothing'
},
{
text: 'Public',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Private',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Local Only',
value: 'local',
kirishima: true,
kirishimaText: '非対応インスタンスでは「未収載」になります。'
}
]
}
},
{
id: 'zero',
storage: 'emoji-zero-width',
checkbox: true,
setValue: 'normal',
setValue: 'no',
text: {
head: 'Zero-width space when inserting emojis',
desc: '',
checkbox: yesno
}
},{
id: 'uploadCrop',
storage: 'uploadCrop',
checkbox: false,
doubleText: false,
width: 100,
setValue: '0',
text: {
head: 'Auto scale to fit',
desc: 'Max long-side px. Uploaded images are converted to JPEG(from JPEG) or PNG(from others). Set 0 and the images will not be resized. Notice: if you post an animated picture like GIF, it will be converted static one.',
after: 'px'
}
}
]

302
app/view/ru-RU/update.html Normal file
View File

@ -0,0 +1,302 @@
<!DOCTYPE html>
<html lang="ru-RU">
<head>
<title>Update - TheDesk</title>
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<style>
body {
font-family: 'Open Sans';
-webkit-app-region: drag;
cursor: move;
padding: 10px;
text-align: right;
}
#start {
display: flex;
justify-content: center;
align-items: center;
width: 100vw;
height: calc(100vh - 2.5rem);
text-align: center;
}
#checkbox {
text-align: left;
}
a,
button,
input,
label,
i {
-webkit-app-region: no-drag;
}
#updskip {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.skipbtn {
display: block;
width: 100%;
height: 100px;
border: 1px solid;
margin-left: 5px;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #c26363;
overflow: hidden;
color: #c26363;
margin-bottom: 5px;
font-size: 1.5rem;
}
.skipbtn:hover {
background-color: #c26363;
transition: all 0.3s ease-in-out;
color: white;
}
#prog {
font-size: 200%;
}
</style>
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet" />
<script>var pwa = false;</script>
</head>
<body>
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<i class="material-icons pointer waves-effect" onclick="about();">info</i>
<i class="material-icons pointer waves-effect" onclick="skipper();">clear</i>
<!--a href="update.html">Reload</a-->
<div id="start" style="filter: brightness(100%)">
<div id="box" class="show">
<h2>TheDesk</h2>
<p>Get latest TheDesk</p>
<span id="now"></span><b id="ver"></b><br />
<a href="" id="github" class="btn waves-effect grey darken-1"><i class="fab fa-github left"></i>What is new?</a><br />
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left: 15px;">Installer(Recommended)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left: 15px;">Portable ver.</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left: 15px;">zip</button>
<button class="waves-effect btn linux hide" onclick="update('linuxdeb')" style="margin-left: 15px;">deb(Recommended on buntu, Debian)</button>
<button class="waves-effect btn linux hide" onclick="update('linuxsnap')" style="margin-left: 15px;">snap</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left: 15px;">Start</button>
<br />
Some problems?<br />Please download on <a href='https://thedesk.top'>Oficial HP</a>.
</div>
<div id="skipper" class="hide">
<h4>Skip this update</h4>
You may lose a cool experience!<br />
<div id="updskip">
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light">
<div>Hidden until next TL loading</div>
</a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light">
<div>Hidden until next version</div>
</a>
</div>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top: 5px;">Continue updating</a>
</div>
<div id="dlnow" class="hide" style="width: 70%;">
<h4>Downloading...</h4>
<h4 id="prog"></h4>
<div class="progress">
<div class="determinate" style="width: 0%;"></div>
</div>
</div>
</div>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script>
function skipper() {
$('#dlnow').addClass('hide')
$('#box').toggleClass('show')
if ($('#box').hasClass('hide') && $('#skipper').hasClass('hide')) {
$('#skipper').removeClass('hide')
$('#skipper').addClass('show')
} else {
$('#box').toggleClass('hide')
$('#skipper').toggleClass('hide')
$('#skipper').toggleClass('show')
}
}
verck()
function update(sel) {
$('#box').toggleClass('show')
$('#box').toggleClass('hide')
$('#dlnow').toggleClass('hide')
$('#dlnow').toggleClass('show')
$('#prog').text('')
var bit = localStorage.getItem('bit')
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
if (sel == 'install') {
if (bit == 'x64') {
var url = json['winx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup.exe'
} else {
var file = 'TheDesk-setup.exe'
}
var filesize = json.winx64_size
} else if (bit == 'ia32') {
var url = json['winia32']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup-ia32.exe'
} else {
var file = 'TheDesk-setup-ia32.exe'
}
var filesize = json.winia32_size
}
} else if (sel == 'portable') {
if (bit == 'x64') {
var url = json['winx64p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '.exe'
} else {
var file = 'TheDesk.exe'
}
var filesize = json.winx64p_size
} else if (bit == 'ia32') {
var url = json['winia32p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-ia32.exe'
} else {
var file = 'TheDesk-ia32.exe'
}
var filesize = json.winia32p_size
}
} else if (sel == 'linux') {
var url = json['linuxx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'thedesk-' + json.unique_linux + '.zip'
} else {
var file = 'thedesk.zip'
}
var filesize = json.linuxx64_size
} else if (sel == 'linuxdeb') {
var url = json['linuxdeb']
var file = 'thedesk_' + json.unique_linux + '_amd64.deb'
var filesize = json.linuxdeb_size
} else if (sel == 'linuxsnap') {
var url = json['linuxsnap']
var file = 'thedesk_' + json.unique_linux + '_amd64.snap'
var filesize = json.linuxsnap_size
} else if (sel == 'mac') {
var url = json['mac']
var file = 'TheDesk-' + json.unique_mac + '.dmg'
var filesize = json.mac_size
}
postMessage(['downloadButton', [url, file, filesize]], '*')
})
}
function quit() {
postMessage(['sendSinmpleIpc', 'quit'], '*')
}
function updateProg(arg) {
$('.determinate').css('width', arg[0].percent * 100 + '%')
$('#prog').html(`${Math.floor(arg[0].percent * 100)}%<br />(${Math.floor(arg[0].percent*arg[1]/1024/1024*10)/10} MB / ${Math.floor(arg[1]/1024/1024*10)/10} MB)`)
}
function updateMess(arg) {
console.log(arg)
$('#prog').text(arg)
}
function verck() {
var platform = localStorage.getItem('platform')
var bit = localStorage.getItem('bit')
if (platform == 'win32') {
$('.windows').removeClass('hide')
} else if (platform == 'linux') {
$('.linux').removeClass('hide')
} else if (platform == 'darwin') {
$('.mac').removeClass('hide')
}
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
console.log(json)
if (platform == 'win32') {
$('#ver').text(json.desk)
localStorage.setItem('next-ver', json.desk)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique
} else if (platform == 'linux') {
$('#ver').text(json.desk_linux)
localStorage.setItem('next-ver', json.desk_linux)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_linux
} else if (platform == 'darwin') {
$('#ver').text(json.desk_mac)
localStorage.setItem('next-ver', json.desk_mac)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_mac
}
$('#github').attr('href', url)
$('#now').text(localStorage.getItem('ver'))
})
}
function nextv() {
localStorage.setItem('new-ver-skip', 'true')
window.close()
}
function enc(ver) {
var ver = ver.replace(/\s/g, '')
var ver = ver.replace(/\(/g, '-')
var ver = ver.replace(/\)/g, '')
var ver = ver.replace(/\[/g, '_')
var ver = ver.replace(/\]/g, '')
return ver
}
</script>
</body>
</html>

154
app/view/zh-CN/acct.html Normal file
View File

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link
href="../../node_modules/materialize-css/dist/css/materialize.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<link href="../../css/tl.css" rel="stylesheet" type="text/css" />
<link href="../../css/userdata.css" rel="stylesheet" type="text/css" />
<link
href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/acct.css" rel="stylesheet" type="text/css" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<script>var pwa = false;</script> <script>var store = false;</script>
</head>
<body id="mainView" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script
type="text/javascript"
src="../../node_modules/materialize-css/dist/js/materialize.js"
></script>
<script type="text/javascript" src="main.js"></script>
<script
type="text/javascript"
src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"
></script>
<script>
var misskeytoken = false
</script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"
>返回</a
><br />
<h5>已登录帐户</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div class="hide-second">
<a href="setting.html">Having the exported file of TheDesk, click here to jump setting page</a>
</div>
<div>
<h5>添加一个帐户</h5>
<br />
<div id="add">
<div class="row">
<div class="col s8">
Fill the instance domain (like mastodon.social)<br />
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp" />
<div id="ins-suggest"></div>
<button class="btn waves-effect" onclick="instance()">Login</button><br />
<div class="pwa">
Windows以外的运行环境或需要登录Pleroma请尝试勾选下面的复选框<br />
<label>
<input type="checkbox" class="filled-in" id="linux" />
<span>使用授权码登录</span>
</label>
<br />
</div>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<span>使用Misskey登录</span> </label
><br />
</div>
<div class="col s4 scr" aria-hidden="true">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div>
</div>
<div id="auth" style="display:none">
在这里粘贴授权码后即可关闭浏览器<br />
<input type="text" id="code" placeholder="授权码" required />
<button class="btn waves-effect" onclick="code()">Auth</button><br />
<br />
<a onclick="atSetup()" class="pointer">Use access token to login(click after fill not code but access-token in box: Advanced)</a>
<div id="compt" style="display:none" class="scr">
<h5>ログイン前に必ずご確認ください</h5>
<span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span
>のため以下の機能がご利用いただけません。
<span id="compt-warn" style="display:none"
>また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span
>
<ul id="compt-list"></ul>
</div>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
阅读 <a href="https://thedesk.top/how-to-misskey-login.html">文档(ja)</a> 了解如何使用Misskey登录.<br />
<input type="hidden" id="misskey-url" />
<input type="text" id="misskey-key" placeholder="授权码" required />
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br />
<br />
<a onclick="atSetup('misskey')" class="pointer">Use access token to login(click after fill not code but access-token in box: Advanced)</a>
</div>
</div>
<div class="hide-first">
<h5>主帐户</h5>
<div class="input-field" style="width:300px">
<span data-trans="your_acct">选择一个帐户</span>
<br />
<select
id="main-acct-sel"
class="acct-sel"
style="color:black"
onchange="mainacct()"
></select>
<label></label>
</div>
<ul id="domain-list" class="collection transparent"></ul>
<div id="instance-data">
Some instance data by
<a href="https://instances.social" target="_blank">instances.social API</a><br />
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br />
<span id="ins-desc"></span><br />
<img src="../../img/loading.svg" id="ins-prof" width="200" /><br />
<br />
域名:<span id="ins-name"></span><br />
联接实例统计:<span id="ins-connect"></span><br />
嘟嘟统计:<span id="ins-toot"></span><br />
用户统计:<span id="ins-user"></span>用户统计<br />
连通率:<span id="ins-per"></span>%<br />
长毛象版本:<span id="ins-ver"></span>@<span id="ins-upd"></span><br />
</div>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/common/sha256.js"></script>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/manager.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>
<script>$('body').addClass(localStorage.getItem('platform'))</script>
</body>
</html>

1287
app/view/zh-CN/index.html Normal file

File diff suppressed because it is too large Load Diff

1
app/view/zh-CN/main.js Normal file

File diff suppressed because one or more lines are too long

632
app/view/zh-CN/setting.html Normal file
View File

@ -0,0 +1,632 @@
<!doctype html>
<html lang="zh-CN" style="overflow-y:scroll">
<head>
<title>Settings - TheDesk</title>
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet">
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href="../../css/pickr.css" type="text/css" rel="stylesheet">
<link href="../../css/master.css" type="text/css" rel="stylesheet">
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet">
<meta charset="utf-8">
<style>
input {
max-height: 3.84rem !important
}
.pcr-result {
height: 1rem !important;
}
.container-after-titlebar {
padding: 20px;
}
</style>
<script>var pwa = false;</script>
<script>var store = false;</script>
</head>
<body id="mainView" style="overflow-y:scroll" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<script type="text/javascript" src="main.js"></script>
<script src="../../node_modules/json5/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
<script>function renderMem() { return false; }</script>
<h4>Preferences</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>System Preferences
</div>
<div class="collapsible-body">
<h5>Languages</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br><br>
<div style="display: flex;">
<div style="width: 22rem;" id="langsel">
<select id="langsel-sel"><option value="ja">日本語</option><option value="ja-KS">日本語(関西)</option><option value="en">English</option><option value="bg">български</option><option value="cs">Česky</option><option value="de">Deutsch</option><option value="es-AR">Español, argentina</option><option value="it-IT">italiano</option><option value="zh-CN">简体中文</option><option value="zh-TW">繁體中文(β)</option><option value="fr-FR">français(β)</option><option value="no-NO">norsk(β)</option><option value="pt-BR">Português, brasileiro(β)</option><option value="ru-RU">русский(β)</option><option value="es-ES">Español(β)</option><option value="ps">Crowdin translate system(beta)</option></select>
</div>
<button class="btn waves-effect" onclick="changeLang()">Change</button>
</div>
<h5>Import and export of preferences</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3"
style="width:100%; max-width:15rem;">Export</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3"
style="width:100%; max-width:15rem;">Import</button><br>
If you got a error when you choose the file, please paste the strings printed when you open the file and click import<br>
<input type="text" id="imp-exp" style="width: 22rem">
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><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">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>Font</h5>
Select your favorite font to 'Select'<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="font()">Select</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:22rem; height:40rem;"></div>
<br>
<input type="text" style="width:11.5rem" id="font">
<button class="btn waves-effect" style="width:7.7rem;" onclick="settings()">Save</button>
<br>
<h5>Folder to save</h5>
TheDesk uses this value when it try to save pictures or take screenshots.<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="savefolder()">Change</button>
<br>
</div>
</li>
<li class="pwa">
<div class="collapsible-header">
<i class="material-icons">color_lens</i>Themes
</div>
<div class="collapsible-body">
<h4>Select theme</h4>
<div style="width:22rem" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<h4>Edit and add themes</h4>
<div style="width:22rem" id="edit-selector" data-add="Add new">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">Add new</option>
</select>
</div>
<h5>Name</h5>
<input type="text" style="width:22rem" id="custom_name" placeholder="Name...">
<h5>About this theme</h5>
<div class="input-field"><textarea style="width:22rem" id="custom_desc" class="materialize-textarea"
placeholder="About this theme..."></textarea></div>
<h5>Color scheme</h5>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="dark" value="dark"
checked="true" />
<span>Dark</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="light"
value="light" />
<span>Light</span>
</label><br><br />
<button class="btn waves-effect" onclick="advanced()">Advanced options</button>
<span class="advanced hide"></span>
<div id="pickers">
<div>
<h5>Background</h5>Background color<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_0" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker0_value">
</div>
<div>
<h5>Text</h5>Text color<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_1" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker1_value">
</div>
<div>
<h5>Subcolor</h5>Distinguishable from background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_2" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>Background of boosts<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_3" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker3_value">
</div>
<div class="advanced hide">
<h5>Modal</h5>Background of modal window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_4" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modal')">Background</a>
<br />
<input type="color" id="color-picker4_value">
</div>
<div class="advanced hide">
<h5>Modal Footer</h5>Background of modal window's footer<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_5" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modalFooter')">Background</a>/
<a class="pointer" onclick="copyColor('modal','modalFooter')">Modal</a>
<br />
<input type="color" id="color-picker5_value">
</div>
<div class="advanced hide">
<h5>3rd Color</h5>Backgroud of tag buttons, etc(near to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_6" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','third')">Subcolor</a>
<br />
<input type="color" id="color-picker6_value">
</div>
<div class="advanced hide">
<h5>4th Color</h5>Title bar(same scheme to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_7" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','forth')">Subcolor</a>/
<a class="pointer" onclick="copyColor('third','forth')">3rd Color</a>
<br />
<input type="color" id="color-picker7_value">
</div>
<div class="advanced hide">
<h5>Bottom</h5>Background of menu-bar at bottom of window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_8" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','bottom')">Subcolor</a>
<br />
<input type="color" id="color-picker8_value">
</div>
<div class="advanced hide">
<h5>2nd Accent</h5>Emphasized toot's background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_9" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','emphasized')">Accent</a>
<br />
<input type="color" id="color-picker9_value">
</div>
<div class="advanced hide">
<h5>Postbox</h5>Background of post-box and menu<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_10" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','postbox')">Subcolor</a>
<br />
<input type="color" id="color-picker10_value">
</div>
<div class="advanced hide">
<h5>Active</h5>Background of 'active' elements<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_11" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','active')">Accent</a>
<br />
<input type="color" id="color-picker11_value">
</div>
<div class="advanced hide">
<h5>Selected</h5>Background of selected with arrow keys<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_12" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker12_value">
</div>
<div class="advanced hide">
<h5>Selected with shared</h5>Background of selected with arrow keys(boosted toots)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_13" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker13_value">
</div>
</div><br /><br />
<button class="btn-large waves-effect" onclick="customComp()">Change</button>&nbsp;<button
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">删除</button><br><br>
<input type="text" style="width:22rem;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br>
<h4>Import of custom themes</h4>
<input type="text" style="width:22rem;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">Import</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>Timeline Preferences
</div>
<div class="collapsible-body">
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>Custom sound</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span
id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span
id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span
id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span
id="c4-file"></span><br>
<h5>Volume</h5>
0-100(default:80)<br>
<p class="range-field"><span id="soundVolVal">80</span><br>
<input type="range" id="soundvol" min="0" max="100" value="80" onchange="customVol()"
style="width:40rem; max-width:100%" />
</p>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>Posting Preferences
</div>
<div class="collapsible-body">
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template
v-if="(!check.kirishima || (check.kirishima && kirishima) )&& (!check.quote || (check.quote && quoters))">
<label><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" />
<span>{{check.text}}</span></label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>Easy inserter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:11.5rem" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:7.7rem;">Save</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:11.5rem" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:7.7rem;">Save</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:11.5rem" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:7.7rem;">Save</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<img src="../../img/aiscript.svg"
style="height: 1.5rem; margin-left: 0.4rem; margin-right: 0.4rem;">Plugins
</div>
<div class="collapsible-body">
<a href="https://github.com/cutls/TheDesk/blob/master/plugin.md">Japanese docs of AiScript TheDesk plugins</a><br />
<textarea id="plugin" data-id="add_new" style="height: 20rem"></textarea>
<button class="btn waves-effect" style="width:7.7rem;" onclick="completePlugin()">Change</button>
<button class="btn waves-effect red disabled plugin_delete" style="width:7.7rem;"
onclick="deletePlugin()">删除</button>
<h5>Plugin list</h5>
<div style="width:22rem" id="plugin-selector" data-add="Add new">
<select id="plugin-edit-sel" class="custom-sel" onchange="pluginEdit()">
<option value="add_new">Add new</option>
</select>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>Mute & Emphasis Preferences
</div>
<div class="collapsible-body">
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fab fa-spotify"></i>Spotify and NowPlaying Preferences
</div>
<div class="collapsible-body">
<h5>Account Connection(Spotify)</h5>
TheDesk save your data on thedesk.top server.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
onclick="spotifyAuth()" class="btn waves-effect" style="width:7.7rem;">Save</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-enable"><i
class="fab fa-spotify left"></i>Connect</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-disable"><i
class="fab fa-spotify left"></i>Disconnect</a>
<h5>Account Connection(Last.fm)</h5>
User name...(empty to disconnect) You cannot hide your recent play log at last.fm privacy settings.<br />
<input type="text" style="width:11.5rem" id="lastFmUser">
<button onclick="lastFmSet()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Edit a template</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
<span class="mac">>macOS:{song}:Song name/{album}:Album name/{artist}:Artist name/composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre}</span><br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:7.7rem;">Save</button>
<h5>Attach an Artwork of Spotify</h5>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes"
value="yes" />
<span>Yes</span>
</label>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no"
value="no" />
<span>No</span>
</label>
<div class="mac">
<h5>If the song has no artwork, automatic complete it(macOS)</h5>
If you nowplaying an non-artwork song, get one which seems nice through API. If you do not like the completed artwork, you can right-click it to delete.<br />
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_yes"
value="yes" />
<span>Yes</span>
</label>
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_no"
value="no" />
<span>No</span>
</label>
<br>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>BouyomiChan connect</h5>
Require: BouyomiChan WebSocket Plugin<a href="https://github.com/xztaityozx/BouyomiChan-WebSocket-Plugin"
target="_blank">GitHub</a><br>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_yes"
value="yes" />
<span>Yes</span>
</label>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_no" value="no" />
<span>No</span>
</label>
<h5>Speed</h5>
1-100(default:10)<br>
<p class="range-field"><span id="voicespeedVal">10</span><br>
<input type="range" id="voicespeed" min="1" max="100" value="10"
onchange="document.getElementById('voicespeedVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><span id="voicepitchVal">50</span><br>
<input type="range" id="voicepitch" min="0" max="100" value="50"
onchange="document.getElementById('voicepitchVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><span id="voicevolVal">100</span><br>
<input type="range" id="voicevol" min="0" max="100" value="100"
onchange="document.getElementById('voicevolVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Test</h5>
<input type="text" style="width:27rem" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC.">
<button class="btn waves-effect blue" style="width:11.5rem;" onclick="voicePlay()"
id="testplay">Play/Stop</button><br>
<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="voiceSettings()">Save</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:15rem;"><i
class="material-icons left">undo</i>Back</a>
<br>
<br>Keyboard shortcuts
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
<li>Alt+Enter:Secondary Toot Button</li>
<li>Ctrl+E:Make all notifications read</li>
<li>Ctrl+U:Select the top & left(No.1 column) toot</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
<li>Ctrl+Shift+C:Clear toot box</li>
<li>Ctrl+Shift+S:Preferences</li>
<li>Ctrl+Shift+M:Account Manager</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Show next or previous image</li>
<li>Mousewheel:Zoom a image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
When a toot is selected:
<li>F:Favourite this toot</li>
<li>B:Boost this toot</li>
<li>R:Reply to this toot</li>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:40rem;"
onclick="if(confirm('Delete all data. You cannot undo. Continue?')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<button class="btn waves-effect indigo pwa" onclick="about()" style="width:100%; max-width:40rem;"><i
class="material-icons left">info</i>About TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">web</i>Website</a>
<a href="https://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Support(Pixiv FANBOX)</a>
<a href="https://www.patreon.com/cutls" class="btn waves-effect red darken-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Support(Patreon)</a>
<a href="https://liberapay.com/cutls" class="btn waves-effect black-text"
style="width:100%; max-width:40rem; background-color: #f6c915"><i
class="material-icons left">trending_up</i>Support(Liberapay)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">list</i>Help/Docs</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2"
style="width:100%; max-width:40rem;"><i class="fab fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@cutls.com" class="btn waves-effect blue lighten-2"
style="width:100%; max-width:40rem;"><img src="../../img/desk_full.svg" class="left" width="25"
style="padding-top:5px;">Main author: Cutls@cutls.com</a>
<br>
TheDesk @ <a href="https://github.com/cutls/TheDesk/commits/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c">89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c</a> - <a
onclick="checkupd(); return localStorage.removeItem('new-ver-skip'); location.href='index.html';"
class="pointer pwa">Check update</a><br>
<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
<a href="https://status.cutls.com/">
<img src="https://status.cutls.com/badge-service?site=thedesk.top">
</a><br>
<h5>OSS License</h5>
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2Fcutls%2FTheDesk/refs/branch/master/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c"
alt="FOSSA Status"><img
src="https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcutls%2FTheDesk.svg?type=small" /></a>
<br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a
href="https://thedesk.top/priv.html">Privacy
Policy</a>
<br>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/platform/aiscript.js"></script>
<script type="text/javascript" src="../../js/platform/plugin.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/ui/spotify.js"></script>
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/platform/pickr.js"></script>
<script type="text/javascript" src="../../js/ui/settings.js"></script>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>

View File

@ -0,0 +1,756 @@
var yesno = [
{
text: 'Yes',
value: 'yes'
},
{
text: 'No',
value: 'no'
}
]
var sound = [
{
text: 'None',
value: 'none'
},
{
text: '默认',
value: 'default'
},
{
text: 'Custom 1',
value: 'c1'
},
{
text: 'Custom 2',
value: 'c2'
},
{
text: 'Custom 3',
value: 'c3'
},
{
text: 'Custom 4',
value: 'c4'
}
]
var envConstruction = [
{
id: 'popup',
storage: 'popup',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Popup notification(on Windows)',
desc: 'Hide to set "0"',
after: 'sec'
}
},
{
id: 'notf',
storage: 'nativenotf',
checkbox: true,
setValue: 'yes',
text: {
head: 'Native notification',
desc: 'This does not work on Windows Portable ver.',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'width',
storage: 'width',
width: 50,
setValue: 300,
text: { after: 'px ~ ' }
},
{
id: 'maxWidth',
storage: 'max-width',
width: 50,
setValue: 600,
text: { after: 'px' }
}
],
text: {
head: 'Width of columns',
desc: 'Scroll bar will be shown when your window size is more than ammounts of columns.'
}
},
{
id: 'margin',
storage: 'margin',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Margin between timelines',
desc: '',
after: 'px'
}
},
{
id: 'fixwidth',
storage: 'fixwidth',
checkbox: false,
doubleText: false,
setValue: 300,
width: 50,
text: {
head: 'Minimum width of TweetDeck browser',
desc: '',
after: 'px above'
}
},
{
id: 'size',
storage: 'size',
checkbox: false,
doubleText: false,
width: 50,
setValue: 13,
text: {
head: 'Font size',
desc: '<span style="font-size:13px">13px(absolute value)</span>',
after: 'px'
}
},
{
id: 'ha',
storage: 'ha',
checkbox: true,
setValue: false,
text: {
head: 'Disable hardware acceleration',
desc: 'Auto restarted',
checkbox: [
{
text: 'Yes',
value: 'true'
},
{
text: 'No',
value: 'false'
}
]
}
},
{
id: 'ua',
storage: 'ua_setting',
checkbox: false,
doubleText: false,
setValue: '',
width: 200,
text: {
head: 'User agent',
desc: 'Restart when changed'
}
},
{
id: 'srcUrl',
storage: 'srcUrl',
checkbox: false,
doubleText: false,
width: 200,
setValue: 'https://google.com/search?q={q}',
text: {
head: 'Search engine',
desc: '{q} will be replaced to query.',
after: ''
}
},{
id: 'download',
storage: 'dl-win',
checkbox: true,
setValue: 'no',
text: {
head: 'Versioning(o Windows downloader)',
desc: 'ex: TheDesk-1.0.0-setup.exe',
checkbox: yesno
}
}
]
var tlConstruction = [
{
id: 'time',
storage: 'datetype',
checkbox: true,
setValue: 'absolute',
text: {
head: 'Time format',
desc: 'Relative format:"1 minutes ago","3 days ago"<br>Absolute format:"23:25:21","2017/12/30 23:59:00"<br>Mixed format:toots posted today are relative-format, others are absolute-format.',
checkbox: [
{
text: 'Relative',
value: 'relative'
},
{
text: 'Absolute',
value: 'absolute'
},
{
text: 'Both relative and absolute',
value: 'double'
},
{
text: 'Mixed',
value: 'medium'
}
]
}
},
{
id: 'ul',
storage: 'locale',
checkbox: true,
setValue: 'yes',
text: {
head: 'Server\s unique locale',
desc: 'This value is available on some Japanese servers',
checkbox: yesno
}
},
{
id: 'nsfw',
storage: 'nsfw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide NSFW pictures',
desc: 'Strong blur effect',
checkbox: yesno
}
},
{
id: 'cw',
storage: 'cw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide CW contents',
desc: '',
checkbox: yesno
}
},
{
id: 'rp',
storage: 'replyct',
checkbox: true,
setValue: 'hidden',
text: {
head: 'Reply counter style',
desc: '',
checkbox: [
{
text: 'Show 1+ if the replies are more than 1.',
value: 'hidden'
},
{
text: 'Show full count(1,2...)',
value: 'all'
}
]
}
},
{
id: 'gif',
storage: 'gif',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animated GIF images animation',
desc: '',
checkbox: yesno
}
},
{
id: 'tag',
storage: 'tag-range',
checkbox: true,
setValue: 'local',
text: {
head: 'Tag TL Search',
desc: '',
checkbox: [
{
text: 'Use federated network',
value: 'all'
},
{
text: 'Use local network',
value: 'local'
}
]
}
},
{
id: 'via',
storage: 'viashow',
checkbox: true,
setValue: 'no',
text: {
head: 'Show via',
desc: '',
checkbox: yesno
}
},
{
id: 'mov',
storage: 'mouseover',
checkbox: true,
setValue: 'no',
text: {
head: 'Hide action buttons without mouseover',
desc: 'You may feel \mouseover\ is unconfortable:(',
checkbox: [
{
text: 'Mouseover to show',
value: 'yes'
},
{
text: 'Click to show',
value: 'click'
},
{
text: 'No',
value: 'no'
}
]
}
},
{
id: 'notfm',
storage: 'setasread',
checkbox: true,
setValue: 'yes',
text: {
head: 'Show Notification marker, red colored bell and counter(if you show a notification column.)',
desc: '',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'sentence',
storage: 'sentence',
width: 50,
setValue: 500,
text: { after: 'lines above or' }
},
{
id: 'letters',
storage: 'letters',
width: 50,
setValue: 7000,
text: { after: 'letters above' }
}
],
text: {
head: 'Auto folding',
desc: 'TheDesk does not collapse totes of 5 characters or less. Also, when collapsing, newlines are not shown. TheDesk count only newlines as the number of lines.'
}
},
{
id: 'img-height',
storage: 'img-height',
checkbox: false,
doubleText: false,
width: 80,
setValue: 200,
text: {
head: 'Height of images',
desc: 'Option:Set "full" to uncrop.',
after: 'px'
}
},
{
id: 'ticker',
storage: 'ticker_ok',
checkbox: true,
setValue: 'no',
text: {
head: 'Enable #InstanceTicker',
desc: 'Show colorful stickers about tooters\ server. <a href="https://cdn.weep.me/mastodon/">About #InstanceTicker</a> Copyright 2018 weepjp, kyori19.',
checkbox: yesno
}
},
{
id: 'anime',
storage: 'animation',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animation of timelines',
desc: '',
checkbox: yesno
}
},
{
id: 'markers',
storage: 'markers',
checkbox: true,
setValue: 'no',
text: {
head: 'Markers(mark as read) on HTL and notifications',
desc: 'Mastodon 3.0~. Shared on WebUI and third-party supported clients.',
checkbox: yesno
}
},
{
id: 'remote_img',
storage: 'remote_img',
checkbox: true,
setValue: 'no',
text: {
head: 'Get images from the remote server',
desc: 'All previews are got from your loginned cache server.',
checkbox: yesno
}
},
{
id: 'bkm',
storage: 'bookmark',
checkbox: true,
setValue: 'no',
text: {
head: 'Show a bookmarking toot button',
desc: '',
checkbox: yesno
}
},
{
id: 'scroll',
storage: 'scroll',
checkbox: true,
setValue: 'normalScrollBar',
text: {
head: 'Height of the scroll bar',
desc: '',
checkbox: [
{
text: 'Thick',
value: 'thickScrollBar'
},
{
text: 'Normal',
value: 'normalScrollBar'
},
{
text: 'Thin',
value: 'thinScrollBar'
}
]
}
},
{
id: 'replySound',
storage: 'replySound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Reply)',
desc: '',
checkbox: sound
}
},
{
id: 'favSound',
storage: 'favSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Fav)',
desc: '',
checkbox: sound
}
},
{
id: 'btSound',
storage: 'btSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Boost)',
desc: '',
checkbox: sound
}
},
{
id: 'followSound',
storage: 'followSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Follow)',
desc: '',
checkbox: sound
}
}
]
var postConstruction = [
{
id: 'cw-text',
storage: 'cw-text',
checkbox: false,
doubleText: false,
width: 150,
setValue: '',
text: {
head: 'Default warining text',
desc: '',
after: ''
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'cw_sentence',
storage: 'cw_sentence',
width: 50,
setValue: 500,
text: { after: 'lines above or' }
},
{
id: 'cw_letters',
storage: 'cw_letters',
width: 50,
setValue: 7000,
text: { after: 'letters above' }
}
],
text: {
head: 'Alert before posting a long toot.',
desc: 'Show dialog whether you make too-long text hidden.'
}
},
{
id: 'cws',
storage: 'always-cw',
checkbox: true,
setValue: 'no',
text: {
head: 'Always CW set',
desc: '',
checkbox: yesno
}
},
{
id: 'cw-continue',
storage: 'cw-continue',
checkbox: true,
setValue: 'no',
text: {
head: '@@cwContinue@@',
desc: '',
checkbox: yesno
}
},
{
id: 'vis',
storage: 'vis',
checkbox: true,
setValue: 'public',
text: {
head: 'Default visibility',
desc: '',
checkbox: [
{
text: 'Public',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Private',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Memory(memorized as each server)',
value: 'memory'
},
{
text: 'Default of your visibility(Set on preferences of Mastodon server)',
value: 'useapi'
}
]
}
},
{
id: 'img',
storage: 'img',
checkbox: true,
setValue: 'no-act',
text: {
head: 'Posting images preferences',
desc: '',
checkbox: [
{
text: 'Insert media URL',
value: 'url'
},
{
text: 'Insert nothig',
value: 'no-act'
}
]
}
},
{
id: 'box',
storage: 'box',
checkbox: true,
setValue: 'yes',
text: {
head: 'Action of posting-box',
desc: '',
checkbox: [
{
text: 'Folding',
value: 'yes'
},
{
text: 'Open after posting',
value: 'no'
},
{
text: 'Absolutely open',
value: 'absolute'
}
]
}
},
{
id: 'quote',
storage: 'quote',
checkbox: true,
setValue: 'nothing',
text: {
head: 'Quote format',
desc: '',
checkbox: [
{
text: 'Only URL',
value: 'simple'
},
{
text: 'URL and acct(mention to the user)',
value: 'mention'
},
{
text: 'URL, text and acct(mention to the user)',
value: 'full'
},
{
text: 'API(only some instances)',
value: 'apiQuote',
quote: true
},
{
text: 'Disabled(Hide buttons on TLs)',
value: 'nothing'
}
]
}
},
{
id: 'main',
storage: 'mainuse',
checkbox: true,
setValue: 'remain',
text: {
head: 'Default accounts of actions',
desc: 'Main account can be set on Account Manager.',
checkbox: [
{
text: 'Account you used recently',
value: 'remain'
},
{
text: 'Main account',
value: 'main'
}
]
}
},
{
id: 'sec',
storage: 'sec',
checkbox: true,
setValue: 'public',
text: {
head: 'Secondary Toot Button',
desc: '',
checkbox: [
{
text: 'Hidden',
value: 'nothing'
},
{
text: 'Public',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Private',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Local Only',
value: 'local',
kirishima: true,
kirishimaText: '非対応インスタンスでは「未収載」になります。'
}
]
}
},
{
id: 'zero',
storage: 'emoji-zero-width',
checkbox: true,
setValue: 'normal',
setValue: 'no',
text: {
head: 'Zero-width space when inserting emojis',
desc: '',
checkbox: yesno
}
},{
id: 'uploadCrop',
storage: 'uploadCrop',
checkbox: false,
doubleText: false,
width: 100,
setValue: '0',
text: {
head: 'Auto scale to fit',
desc: 'Max long-side px. Uploaded images are converted to JPEG(from JPEG) or PNG(from others). Set 0 and the images will not be resized. Notice: if you post an animated picture like GIF, it will be converted static one.',
after: 'px'
}
}
]

302
app/view/zh-CN/update.html Normal file
View File

@ -0,0 +1,302 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>Update - TheDesk</title>
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<style>
body {
font-family: 'Open Sans';
-webkit-app-region: drag;
cursor: move;
padding: 10px;
text-align: right;
}
#start {
display: flex;
justify-content: center;
align-items: center;
width: 100vw;
height: calc(100vh - 2.5rem);
text-align: center;
}
#checkbox {
text-align: left;
}
a,
button,
input,
label,
i {
-webkit-app-region: no-drag;
}
#updskip {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.skipbtn {
display: block;
width: 100%;
height: 100px;
border: 1px solid;
margin-left: 5px;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #c26363;
overflow: hidden;
color: #c26363;
margin-bottom: 5px;
font-size: 1.5rem;
}
.skipbtn:hover {
background-color: #c26363;
transition: all 0.3s ease-in-out;
color: white;
}
#prog {
font-size: 200%;
}
</style>
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet" />
<script>var pwa = false;</script>
</head>
<body>
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<i class="material-icons pointer waves-effect" onclick="about();">info</i>
<i class="material-icons pointer waves-effect" onclick="skipper();">clear</i>
<!--a href="update.html">Reload</a-->
<div id="start" style="filter: brightness(100%)">
<div id="box" class="show">
<h2>TheDesk</h2>
<p>Get latest TheDesk</p>
<span id="now"></span><b id="ver"></b><br />
<a href="" id="github" class="btn waves-effect grey darken-1"><i class="fab fa-github left"></i>What is new?</a><br />
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left: 15px;">Installer(Recommended)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left: 15px;">Portable ver.</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left: 15px;">zip</button>
<button class="waves-effect btn linux hide" onclick="update('linuxdeb')" style="margin-left: 15px;">deb(Recommended on buntu, Debian)</button>
<button class="waves-effect btn linux hide" onclick="update('linuxsnap')" style="margin-left: 15px;">snap</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left: 15px;">Start</button>
<br />
Some problems?<br />Please download on <a href="https://thedesk.top">Oficial HP</a>.
</div>
<div id="skipper" class="hide">
<h4>Skip this update</h4>
You may lose a cool experience!<br />
<div id="updskip">
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light">
<div>Until next TL loading</div>
</a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light">
<div>Until next version</div>
</a>
</div>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top: 5px;">Continue updating</a>
</div>
<div id="dlnow" class="hide" style="width: 70%;">
<h4>Downloading...</h4>
<h4 id="prog"></h4>
<div class="progress">
<div class="determinate" style="width: 0%;"></div>
</div>
</div>
</div>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script>
function skipper() {
$('#dlnow').addClass('hide')
$('#box').toggleClass('show')
if ($('#box').hasClass('hide') && $('#skipper').hasClass('hide')) {
$('#skipper').removeClass('hide')
$('#skipper').addClass('show')
} else {
$('#box').toggleClass('hide')
$('#skipper').toggleClass('hide')
$('#skipper').toggleClass('show')
}
}
verck()
function update(sel) {
$('#box').toggleClass('show')
$('#box').toggleClass('hide')
$('#dlnow').toggleClass('hide')
$('#dlnow').toggleClass('show')
$('#prog').text('')
var bit = localStorage.getItem('bit')
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
if (sel == 'install') {
if (bit == 'x64') {
var url = json['winx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup.exe'
} else {
var file = 'TheDesk-setup.exe'
}
var filesize = json.winx64_size
} else if (bit == 'ia32') {
var url = json['winia32']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup-ia32.exe'
} else {
var file = 'TheDesk-setup-ia32.exe'
}
var filesize = json.winia32_size
}
} else if (sel == 'portable') {
if (bit == 'x64') {
var url = json['winx64p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '.exe'
} else {
var file = 'TheDesk.exe'
}
var filesize = json.winx64p_size
} else if (bit == 'ia32') {
var url = json['winia32p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-ia32.exe'
} else {
var file = 'TheDesk-ia32.exe'
}
var filesize = json.winia32p_size
}
} else if (sel == 'linux') {
var url = json['linuxx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'thedesk-' + json.unique_linux + '.zip'
} else {
var file = 'thedesk.zip'
}
var filesize = json.linuxx64_size
} else if (sel == 'linuxdeb') {
var url = json['linuxdeb']
var file = 'thedesk_' + json.unique_linux + '_amd64.deb'
var filesize = json.linuxdeb_size
} else if (sel == 'linuxsnap') {
var url = json['linuxsnap']
var file = 'thedesk_' + json.unique_linux + '_amd64.snap'
var filesize = json.linuxsnap_size
} else if (sel == 'mac') {
var url = json['mac']
var file = 'TheDesk-' + json.unique_mac + '.dmg'
var filesize = json.mac_size
}
postMessage(['downloadButton', [url, file, filesize]], '*')
})
}
function quit() {
postMessage(['sendSinmpleIpc', 'quit'], '*')
}
function updateProg(arg) {
$('.determinate').css('width', arg[0].percent * 100 + '%')
$('#prog').html(`${Math.floor(arg[0].percent * 100)}%<br />(${Math.floor(arg[0].percent*arg[1]/1024/1024*10)/10} MB / ${Math.floor(arg[1]/1024/1024*10)/10} MB)`)
}
function updateMess(arg) {
console.log(arg)
$('#prog').text(arg)
}
function verck() {
var platform = localStorage.getItem('platform')
var bit = localStorage.getItem('bit')
if (platform == 'win32') {
$('.windows').removeClass('hide')
} else if (platform == 'linux') {
$('.linux').removeClass('hide')
} else if (platform == 'darwin') {
$('.mac').removeClass('hide')
}
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
console.log(json)
if (platform == 'win32') {
$('#ver').text(json.desk)
localStorage.setItem('next-ver', json.desk)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique
} else if (platform == 'linux') {
$('#ver').text(json.desk_linux)
localStorage.setItem('next-ver', json.desk_linux)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_linux
} else if (platform == 'darwin') {
$('#ver').text(json.desk_mac)
localStorage.setItem('next-ver', json.desk_mac)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_mac
}
$('#github').attr('href', url)
$('#now').text(localStorage.getItem('ver'))
})
}
function nextv() {
localStorage.setItem('new-ver-skip', 'true')
window.close()
}
function enc(ver) {
var ver = ver.replace(/\s/g, '')
var ver = ver.replace(/\(/g, '-')
var ver = ver.replace(/\)/g, '')
var ver = ver.replace(/\[/g, '_')
var ver = ver.replace(/\]/g, '')
return ver
}
</script>
</body>
</html>

154
app/view/zh-TW/acct.html Normal file
View File

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link
href="../../node_modules/materialize-css/dist/css/materialize.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<link href="../../css/tl.css" rel="stylesheet" type="text/css" />
<link href="../../css/userdata.css" rel="stylesheet" type="text/css" />
<link
href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/acct.css" rel="stylesheet" type="text/css" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<script>var pwa = false;</script> <script>var store = false;</script>
</head>
<body id="mainView" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script
type="text/javascript"
src="../../node_modules/materialize-css/dist/js/materialize.js"
></script>
<script type="text/javascript" src="main.js"></script>
<script
type="text/javascript"
src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"
></script>
<script>
var misskeytoken = false
</script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"
>上一頁</a
><br />
<h5>帳號列表</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div class="hide-second">
<a href="setting.html">擁有已匯出之 TheDesk 設定檔,請點此跳至設定頁</a>
</div>
<div>
<h5>新增帳號</h5>
<br />
<div id="add">
<div class="row">
<div class="col s8">
請填入 instance 網址 (例如mastodon.social)<br />
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp" />
<div id="ins-suggest"></div>
<button class="btn waves-effect" onclick="instance()">Login</button><br />
<div class="pwa">
取消選取以忽略貼上授權碼。(於 Windows 或 macOS 上登入 Mastodon) (建議pcheck)<br />
<label>
<input type="checkbox" class="filled-in" id="linux" />
<span>授權碼設定</span>
</label>
<br />
</div>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<span>以 Misskey 登入</span> </label
><br />
</div>
<div class="col s4 scr" aria-hidden="true">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div>
</div>
<div id="auth" style="display:none">
請貼上授權碼並關閉瀏覽器。<br />
<input type="text" id="code" placeholder="授權碼" required />
<button class="btn waves-effect" onclick="code()">Auth</button><br />
<br />
<a onclick="atSetup()" class="pointer">使用 access token 登入 (填入 access token 而非授權碼後點擊:進階設定)</a>
<div id="compt" style="display:none" class="scr">
<h5>ログイン前に必ずご確認ください</h5>
<span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span
>のため以下の機能がご利用いただけません。
<span id="compt-warn" style="display:none"
>また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span
>
<ul id="compt-list"></ul>
</div>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
請閱讀 <a href="https://thedesk.top/how-to-misskey-login.html"> 文件(日文)</a> 以 Misskey 登入說明。<br />
<input type="hidden" id="misskey-url" />
<input type="text" id="misskey-key" placeholder="授權碼" required />
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br />
<br />
<a onclick="atSetup('misskey')" class="pointer">使用 access token 登入 (填入 access token 而非授權碼後點擊:進階設定)</a>
</div>
</div>
<div class="hide-first">
<h5>主要帳號</h5>
<div class="input-field" style="width:300px">
<span data-trans="your_acct">選擇帳號</span>
<br />
<select
id="main-acct-sel"
class="acct-sel"
style="color:black"
onchange="mainacct()"
></select>
<label></label>
</div>
<ul id="domain-list" class="collection transparent"></ul>
<div id="instance-data">
Some instance data by
<a href="https://instances.social" target="_blank">instances.social API</a><br />
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br />
<span id="ins-desc"></span><br />
<img src="../../img/loading.svg" id="ins-prof" width="200" /><br />
<br />
網址:<span id="ins-name"></span><br />
聯邦伺服器:<span id="ins-connect"></span><br />
嘟文:<span id="ins-toot"></span><br />
使用者:<span id="ins-user"></span>使用者<br />
連線:<span id="ins-per"></span>%<br />
Mastodon 版本:<span id="ins-ver"></span>@<span id="ins-upd"></span><br />
</div>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/common/sha256.js"></script>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/manager.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>
<script>$('body').addClass(localStorage.getItem('platform'))</script>
</body>
</html>

1287
app/view/zh-TW/index.html Normal file

File diff suppressed because it is too large Load Diff

1
app/view/zh-TW/main.js Normal file

File diff suppressed because one or more lines are too long

632
app/view/zh-TW/setting.html Normal file
View File

@ -0,0 +1,632 @@
<!doctype html>
<html lang="zh-TW" style="overflow-y:scroll">
<head>
<title>Settings - TheDesk</title>
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet">
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href="../../css/pickr.css" type="text/css" rel="stylesheet">
<link href="../../css/master.css" type="text/css" rel="stylesheet">
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet">
<meta charset="utf-8">
<style>
input {
max-height: 3.84rem !important
}
.pcr-result {
height: 1rem !important;
}
.container-after-titlebar {
padding: 20px;
}
</style>
<script>var pwa = false;</script>
<script>var store = false;</script>
</head>
<body id="mainView" style="overflow-y:scroll" class="">
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<script type="text/javascript" src="main.js"></script>
<script src="../../node_modules/json5/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
<script>function renderMem() { return false; }</script>
<h4>偏好設定</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>System Preferences
</div>
<div class="collapsible-body">
<h5>Languages</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br><br>
<div style="display: flex;">
<div style="width: 22rem;" id="langsel">
<select id="langsel-sel"><option value="ja">日本語</option><option value="ja-KS">日本語(関西)</option><option value="en">English</option><option value="bg">български</option><option value="cs">Česky</option><option value="de">Deutsch</option><option value="es-AR">Español, argentina</option><option value="it-IT">italiano</option><option value="zh-CN">简体中文</option><option value="zh-TW">繁體中文(β)</option><option value="fr-FR">français(β)</option><option value="no-NO">norsk(β)</option><option value="pt-BR">Português, brasileiro(β)</option><option value="ru-RU">русский(β)</option><option value="es-ES">Español(β)</option><option value="ps">Crowdin translate system(beta)</option></select>
</div>
<button class="btn waves-effect" onclick="changeLang()">Change</button>
</div>
<h5>Import and export of preferences</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3"
style="width:100%; max-width:15rem;">Export</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3"
style="width:100%; max-width:15rem;">Import</button><br>
If you got a error when you choose the file, please paste the strings printed when you open the file and click import<br>
<input type="text" id="imp-exp" style="width: 22rem">
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><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">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>Font</h5>
Select your favorite font to 'Select'(Windows/ macOS only)<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="font()">Select</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:22rem; height:40rem;"></div>
<br>
<input type="text" style="width:11.5rem" id="font">
<button class="btn waves-effect" style="width:7.7rem;" onclick="settings()">儲存</button>
<br>
<h5>Folder to save</h5>
TheDesk uses this value when it try to save pictures or take screenshots.<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="savefolder()">Change</button>
<br>
</div>
</li>
<li class="pwa">
<div class="collapsible-header">
<i class="material-icons">color_lens</i>Themes
</div>
<div class="collapsible-body">
<h4>Select theme</h4>
<div style="width:22rem" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<h4>Edit and add themes</h4>
<div style="width:22rem" id="edit-selector" data-add="Add new">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">Add new</option>
</select>
</div>
<h5>Name</h5>
<input type="text" style="width:22rem" id="custom_name" placeholder="Name...">
<h5>About this theme</h5>
<div class="input-field"><textarea style="width:22rem" id="custom_desc" class="materialize-textarea"
placeholder="About this theme..."></textarea></div>
<h5>Color scheme</h5>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="dark" value="dark"
checked="true" />
<span>Dark</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="light"
value="light" />
<span>Light</span>
</label><br><br />
<button class="btn waves-effect" onclick="advanced()">Advanced options</button>
<span class="advanced hide"></span>
<div id="pickers">
<div>
<h5>Background</h5>Background color<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_0" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker0_value">
</div>
<div>
<h5>Text</h5>Text color<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_1" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker1_value">
</div>
<div>
<h5>Subcolor</h5>Distinguishable from background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_2" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>Background of boosts<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_3" value="1" checked disabled />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker3_value">
</div>
<div class="advanced hide">
<h5>Modal</h5>Background of modal window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_4" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modal')">Background</a>
<br />
<input type="color" id="color-picker4_value">
</div>
<div class="advanced hide">
<h5>Modal Footer</h5>Background of modal window's footer<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_5" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('background','modalFooter')">Background</a>/
<a class="pointer" onclick="copyColor('modal','modalFooter')">Modal</a>
<br />
<input type="color" id="color-picker5_value">
</div>
<div class="advanced hide">
<h5>3rd Color</h5>Backgroud of tag buttons, etc(near to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_6" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','third')">Subcolor</a>
<br />
<input type="color" id="color-picker6_value">
</div>
<div class="advanced hide">
<h5>4th Color</h5>Title bar(same scheme to Background)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_7" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','forth')">Subcolor</a>/
<a class="pointer" onclick="copyColor('third','forth')">3rd Color</a>
<br />
<input type="color" id="color-picker7_value">
</div>
<div class="advanced hide">
<h5>Bottom</h5>Background of menu-bar at bottom of window<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_8" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','bottom')">Subcolor</a>
<br />
<input type="color" id="color-picker8_value">
</div>
<div class="advanced hide">
<h5>2nd Accent</h5>Emphasized toot's background<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_9" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','emphasized')">Accent</a>
<br />
<input type="color" id="color-picker9_value">
</div>
<div class="advanced hide">
<h5>Postbox</h5>Background of post-box and menu<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_10" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('subcolor','postbox')">Subcolor</a>
<br />
<input type="color" id="color-picker10_value">
</div>
<div class="advanced hide">
<h5>Active</h5>Background of 'active' elements<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_11" value="1" />
<span>Use this</span>
</label><br />
Copy from:
<a class="pointer" onclick="copyColor('accent','active')">Accent</a>
<br />
<input type="color" id="color-picker11_value">
</div>
<div class="advanced hide">
<h5>Selected</h5>Background of selected with arrow keys<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_12" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker12_value">
</div>
<div class="advanced hide">
<h5>Selected with shared</h5>Background of selected with arrow keys(boosted toots)<br />
<label>
<input type="checkbox" class="filled-in" id="use-color_13" value="1" />
<span>Use this</span>
</label><br />
<input type="color" id="color-picker13_value">
</div>
</div><br /><br />
<button class="btn-large waves-effect" onclick="customComp()">Change</button>&nbsp;<button
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">刪除</button><br><br>
<input type="text" style="width:22rem;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br>
<h4>Import of custom themes</h4>
<input type="text" style="width:22rem;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">Import</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>Timeline Preferences
</div>
<div class="collapsible-body">
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<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" />
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>Custom sound</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span
id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span
id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span
id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span
id="c4-file"></span><br>
<h5>Volume</h5>
0-100(default:80)<br>
<p class="range-field"><span id="soundVolVal">80</span><br>
<input type="range" id="soundvol" min="0" max="100" value="80" onchange="customVol()"
style="width:40rem; max-width:100%" />
</p>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>Posting Preferences
</div>
<div class="collapsible-body">
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if="item.text.desc">
<span v-html="item.text.desc"></span><br>
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template
v-if="(!check.kirishima || (check.kirishima && kirishima) )&& (!check.quote || (check.quote && quoters))">
<label><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" />
<span>{{check.text}}</span></label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id"
v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<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:7.7rem;"
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>Easy inserter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:11.5rem" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:7.7rem;">儲存</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:11.5rem" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:7.7rem;">儲存</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:11.5rem" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:7.7rem;">儲存</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<img src="../../img/aiscript.svg"
style="height: 1.5rem; margin-left: 0.4rem; margin-right: 0.4rem;">Plugins
</div>
<div class="collapsible-body">
<a href="https://github.com/cutls/TheDesk/blob/master/plugin.md">Japanese docs of AiScript TheDesk plugins</a><br />
<textarea id="plugin" data-id="add_new" style="height: 20rem"></textarea>
<button class="btn waves-effect" style="width:7.7rem;" onclick="completePlugin()">Change</button>
<button class="btn waves-effect red disabled plugin_delete" style="width:7.7rem;"
onclick="deletePlugin()">刪除</button>
<h5>Plugin list</h5>
<div style="width:22rem" id="plugin-selector" data-add="Add new">
<select id="plugin-edit-sel" class="custom-sel" onchange="pluginEdit()">
<option value="add_new">Add new</option>
</select>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>Mute & Emphasis Preferences
</div>
<div class="collapsible-body">
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:7.7rem;">儲存</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:7.7rem;">儲存</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fab fa-spotify"></i>Spotify and NowPlaying Preferences
</div>
<div class="collapsible-body">
<h5>Account Connection(Spotify)</h5>
TheDesk save your data on thedesk.top server.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
onclick="spotifyAuth()" class="btn waves-effect" style="width:7.7rem;">儲存</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-enable"><i
class="fab fa-spotify left"></i>Connect</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
style="width:100%; max-width:15rem; background-color:#1ed760;" id="spotify-disable"><i
class="fab fa-spotify left"></i>Disconnect</a>
<h5>Account Connection(Last.fm)</h5>
User name...(empty to disconnect) You cannot hide your recent play log at last.fm privacy settings.<br />
<input type="text" style="width:11.5rem" id="lastFmUser">
<button onclick="lastFmSet()" class="btn waves-effect" style="width:7.7rem;">儲存</button>
<h5>Edit a template</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
<span class="mac">>macOS:{song}:Song name/{album}:Album name/{artist}:Artist name/composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre}</span><br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:7.7rem;">儲存</button>
<h5>Attach an Artwork of Spotify</h5>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes"
value="yes" />
<span></span>
</label>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no"
value="no" />
<span></span>
</label>
<div class="mac">
<h5>If the song has no artwork, automatic complete it(macOS)</h5>
If you nowplaying an non-artwork song, get one which seems nice through API. If you do not like the completed artwork, you can right-click it to delete.<br />
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_yes"
value="yes" />
<span></span>
</label>
<label>
<input class="with-gap" onchange="aMusicFlagSave()" name="amw" type="radio" id="amw_no"
value="no" />
<span></span>
</label>
<br>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>BouyomiChan connect</h5>
Require: BouyomiChan WebSocket Plugin<a href="https://github.com/xztaityozx/BouyomiChan-WebSocket-Plugin"
target="_blank">GitHub</a><br>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_yes"
value="yes" />
<span></span>
</label>
<label>
<input class="with-gap" onchange="voiceSettings()" name="bym" type="radio" id="bym_no" value="no" />
<span></span>
</label>
<h5>Speed</h5>
1-100(default:10)<br>
<p class="range-field"><span id="voicespeedVal">10</span><br>
<input type="range" id="voicespeed" min="1" max="100" value="10"
onchange="document.getElementById('voicespeedVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><span id="voicepitchVal">50</span><br>
<input type="range" id="voicepitch" min="0" max="100" value="50"
onchange="document.getElementById('voicepitchVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><span id="voicevolVal">100</span><br>
<input type="range" id="voicevol" min="0" max="100" value="100"
onchange="document.getElementById('voicevolVal').innerText=this.value"
style="width:40rem; max-width:100%" />
</p>
<h5>Test</h5>
<input type="text" style="width:27rem" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC.">
<button class="btn waves-effect blue" style="width:11.5rem;" onclick="voicePlay()"
id="testplay">Play/Stop</button><br>
<br>
<button class="btn waves-effect" style="width:7.7rem;" onclick="voiceSettings()">儲存</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:15rem;"><i
class="material-icons left">undo</i>上一頁</a>
<br>
<br>Keyboard shortcuts
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
<li>Alt+Enter:Secondary Toot Button</li>
<li>Ctrl+E:Make all notifications read</li>
<li>Ctrl+U:Select the top & left(No.1 column) toot</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
<li>Ctrl+Shift+C:關閉嘟文視窗</li>
<li>Ctrl+Shift+S:偏好設定</li>
<li>Ctrl+Shift+M:帳號管理</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Show next or previous image</li>
<li>Mousewheel:Zoom a image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
When a toot is selected:
<li>F:Favourite this toot</li>
<li>B:Boost this toot</li>
<li>R:Reply to this toot</li>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:40rem;"
onclick="if(confirm('Delete all data. You cannot undo. Continue?')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<button class="btn waves-effect indigo pwa" onclick="about()" style="width:100%; max-width:40rem;"><i
class="material-icons left">info</i>關於 TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">web</i>Website</a>
<a href="https://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Support(Pixiv FANBOX)</a>
<a href="https://www.patreon.com/cutls" class="btn waves-effect red darken-2"
style="width:100%; max-width:40rem;"><i class="material-icons left">trending_up</i>Support(Patreon)</a>
<a href="https://liberapay.com/cutls" class="btn waves-effect black-text"
style="width:100%; max-width:40rem; background-color: #f6c915"><i
class="material-icons left">trending_up</i>Support(Liberapay)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:40rem;"><i
class="material-icons left">list</i>幫助/Docs</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2"
style="width:100%; max-width:40rem;"><i class="fab fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@cutls.com" class="btn waves-effect blue lighten-2"
style="width:100%; max-width:40rem;"><img src="../../img/desk_full.svg" class="left" width="25"
style="padding-top:5px;">Main author: Cutls@cutls.com</a>
<br>
TheDesk @ <a href="https://github.com/cutls/TheDesk/commits/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c">89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c</a> - <a
onclick="checkupd(); return localStorage.removeItem('new-ver-skip'); location.href='index.html';"
class="pointer pwa">Check update</a><br>
<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
<a href="https://status.cutls.com/">
<img src="https://status.cutls.com/badge-service?site=thedesk.top">
</a><br>
<h5>OSS License</h5>
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2Fcutls%2FTheDesk/refs/branch/master/89b25c56e7ecf0c1c0e3b73f3138207abe1a6c9c"
alt="FOSSA Status"><img
src="https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcutls%2FTheDesk.svg?type=small" /></a>
<br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a
href="https://thedesk.top/priv.html">Privacy
Policy</a>
<br>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../node_modules/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/platform/aiscript.js"></script>
<script type="text/javascript" src="../../js/platform/plugin.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/ui/spotify.js"></script>
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/platform/pickr.js"></script>
<script type="text/javascript" src="../../js/ui/settings.js"></script>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>

View File

@ -0,0 +1,756 @@
var yesno = [
{
text: '是',
value: 'yes'
},
{
text: '否',
value: 'no'
}
]
var sound = [
{
text: '沒有',
value: 'none'
},
{
text: '預設',
value: 'default'
},
{
text: 'Custom 1',
value: 'c1'
},
{
text: 'Custom 2',
value: 'c2'
},
{
text: 'Custom 3',
value: 'c3'
},
{
text: 'Custom 4',
value: 'c4'
}
]
var envConstruction = [
{
id: 'popup',
storage: 'popup',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Popup notification',
desc: 'Hide to set "0"',
after: 'sec'
}
},
{
id: 'notf',
storage: 'nativenotf',
checkbox: true,
setValue: 'yes',
text: {
head: 'Native notification',
desc: 'This does not work on Windows Portable ver.',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'width',
storage: 'width',
width: 50,
setValue: 300,
text: { after: 'px ~ ' }
},
{
id: 'maxWidth',
storage: 'max-width',
width: 50,
setValue: 600,
text: { after: 'px' }
}
],
text: {
head: 'Width of columns',
desc: 'Scroll bar will be shown when your window size is more than ammounts of columns.'
}
},
{
id: 'margin',
storage: 'margin',
checkbox: false,
doubleText: false,
setValue: 0,
width: 50,
text: {
head: 'Margin between timelines',
desc: '',
after: 'px'
}
},
{
id: 'fixwidth',
storage: 'fixwidth',
checkbox: false,
doubleText: false,
setValue: 300,
width: 50,
text: {
head: 'Minimum width of TweetDeck browser',
desc: '',
after: 'px above'
}
},
{
id: 'size',
storage: 'size',
checkbox: false,
doubleText: false,
width: 50,
setValue: 13,
text: {
head: 'Font size',
desc: '<span style="font-size:13px">13px(absolute value)</span>',
after: 'px'
}
},
{
id: 'ha',
storage: 'ha',
checkbox: true,
setValue: false,
text: {
head: 'Disable hardware acceleration',
desc: 'Auto restarted',
checkbox: [
{
text: '是',
value: 'true'
},
{
text: '否',
value: 'false'
}
]
}
},
{
id: 'ua',
storage: 'ua_setting',
checkbox: false,
doubleText: false,
setValue: '',
width: 200,
text: {
head: 'User agent',
desc: 'Restart when changed'
}
},
{
id: 'srcUrl',
storage: 'srcUrl',
checkbox: false,
doubleText: false,
width: 200,
setValue: 'https://google.com/search?q={q}',
text: {
head: 'Search engine',
desc: '{q} will be replaced to query.',
after: ''
}
},{
id: 'download',
storage: 'dl-win',
checkbox: true,
setValue: 'no',
text: {
head: 'Versioning(o Windows downloader)',
desc: 'ex: TheDesk-1.0.0-setup.exe',
checkbox: yesno
}
}
]
var tlConstruction = [
{
id: 'time',
storage: 'datetype',
checkbox: true,
setValue: 'absolute',
text: {
head: 'Time format',
desc: 'Relative format:"1 minutes ago","3 days ago"<br>Absolute format:"23:25:21","2017/12/30 23:59:00"<br>Mixed format:toots posted today are relative-format, others are absolute-format.',
checkbox: [
{
text: 'Relative',
value: 'relative'
},
{
text: 'Absolute',
value: 'absolute'
},
{
text: 'Both relative and absolute',
value: 'double'
},
{
text: 'Mixed',
value: 'medium'
}
]
}
},
{
id: 'ul',
storage: 'locale',
checkbox: true,
setValue: 'yes',
text: {
head: 'Server\s unique locale',
desc: 'This value is available on some Japanese servers',
checkbox: yesno
}
},
{
id: 'nsfw',
storage: 'nsfw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide Mark sensitive pictures',
desc: 'Strong blur effect',
checkbox: yesno
}
},
{
id: 'cw',
storage: 'cw',
checkbox: true,
setValue: 'yes',
text: {
head: 'Hide CW contents',
desc: '',
checkbox: yesno
}
},
{
id: 'rp',
storage: 'replyct',
checkbox: true,
setValue: 'hidden',
text: {
head: 'Reply counter style',
desc: '',
checkbox: [
{
text: 'Show 1+ if the replies are more than 1.',
value: 'hidden'
},
{
text: 'Show full count(1,2...)',
value: 'all'
}
]
}
},
{
id: 'gif',
storage: 'gif',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animated GIF images animation',
desc: '',
checkbox: yesno
}
},
{
id: 'tag',
storage: 'tag-range',
checkbox: true,
setValue: 'local',
text: {
head: 'Tag TL Search',
desc: '',
checkbox: [
{
text: 'Use federated network',
value: 'all'
},
{
text: 'Use local network',
value: 'local'
}
]
}
},
{
id: 'via',
storage: 'viashow',
checkbox: true,
setValue: 'no',
text: {
head: 'Show via',
desc: '',
checkbox: yesno
}
},
{
id: 'mov',
storage: 'mouseover',
checkbox: true,
setValue: 'no',
text: {
head: 'Hide action buttons without mouseover',
desc: 'You may feel \mouseover\ is unconfortable:(',
checkbox: [
{
text: 'Mouseover to show',
value: 'yes'
},
{
text: 'Click to show',
value: 'click'
},
{
text: '否',
value: 'no'
}
]
}
},
{
id: 'notfm',
storage: 'setasread',
checkbox: true,
setValue: 'yes',
text: {
head: 'Show Notification marker, red colored bell and counter(if you show a notification column.)',
desc: '',
checkbox: yesno
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'sentence',
storage: 'sentence',
width: 50,
setValue: 500,
text: { after: 'lines above 或' }
},
{
id: 'letters',
storage: 'letters',
width: 50,
setValue: 7000,
text: { after: 'letters above' }
}
],
text: {
head: 'Auto folding',
desc: 'TheDesk does not collapse totes of 5 characters or less. Also, when collapsing, newlines are not shown. TheDesk count only newlines as the number of lines.'
}
},
{
id: 'img-height',
storage: 'img-height',
checkbox: false,
doubleText: false,
width: 80,
setValue: 200,
text: {
head: 'Height of images',
desc: 'Option:Set "full" to uncrop.',
after: 'px'
}
},
{
id: 'ticker',
storage: 'ticker_ok',
checkbox: true,
setValue: 'no',
text: {
head: 'Enable OpenSticker',
desc: 'Show the instance name and favicon of tooters <a href="https://opensticker.0px.io">About OpenSticker</a>',
checkbox: yesno
}
},
{
id: 'anime',
storage: 'animation',
checkbox: true,
setValue: 'yes',
text: {
head: 'Animation of timelines',
desc: '',
checkbox: yesno
}
},
{
id: 'markers',
storage: 'markers',
checkbox: true,
setValue: 'no',
text: {
head: 'Markers(mark as read) on HTL and notifications',
desc: 'Mastodon 3.0~. Shared on WebUI and third-party supported clients.',
checkbox: yesno
}
},
{
id: 'remote_img',
storage: 'remote_img',
checkbox: true,
setValue: 'no',
text: {
head: 'Get images from the remote server',
desc: 'All previews are got from your loginned cache server.',
checkbox: yesno
}
},
{
id: 'bkm',
storage: 'bookmark',
checkbox: true,
setValue: 'no',
text: {
head: 'Show a bookmarking toot button',
desc: '',
checkbox: yesno
}
},
{
id: 'scroll',
storage: 'scroll',
checkbox: true,
setValue: 'normalScrollBar',
text: {
head: 'Height of the scroll bar',
desc: '',
checkbox: [
{
text: 'Thick',
value: 'thickScrollBar'
},
{
text: 'Normal',
value: 'normalScrollBar'
},
{
text: 'Thin',
value: 'thinScrollBar'
}
]
}
},
{
id: 'replySound',
storage: 'replySound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Reply)',
desc: '',
checkbox: sound
}
},
{
id: 'favSound',
storage: 'favSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Fav)',
desc: '',
checkbox: sound
}
},
{
id: 'btSound',
storage: 'btSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Boost)',
desc: '',
checkbox: sound
}
},
{
id: 'followSound',
storage: 'followSound',
checkbox: true,
setValue: 'none',
text: {
head: 'Sound(Follow)',
desc: '',
checkbox: sound
}
}
]
var postConstruction = [
{
id: 'cw-text',
storage: 'cw-text',
checkbox: false,
doubleText: false,
width: 150,
setValue: '',
text: {
head: 'Default warining text',
desc: '',
after: ''
}
},
{
checkbox: false,
doubleText: true,
data: [
{
id: 'cw_sentence',
storage: 'cw_sentence',
width: 50,
setValue: 500,
text: { after: 'lines above 或' }
},
{
id: 'cw_letters',
storage: 'cw_letters',
width: 50,
setValue: 7000,
text: { after: 'letters above' }
}
],
text: {
head: 'Alert before posting a long toot.',
desc: 'Show dialog whether you make too-long text hidden.'
}
},
{
id: 'cws',
storage: 'always-cw',
checkbox: true,
setValue: 'no',
text: {
head: 'Always CW set',
desc: '',
checkbox: yesno
}
},
{
id: 'cw-continue',
storage: 'cw-continue',
checkbox: true,
setValue: 'no',
text: {
head: '@@cwContinue@@',
desc: '',
checkbox: yesno
}
},
{
id: 'vis',
storage: 'vis',
checkbox: true,
setValue: 'public',
text: {
head: 'Default visibility',
desc: '',
checkbox: [
{
text: 'Public',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Private',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Memory(memorized as each server)',
value: 'memory'
},
{
text: 'Default of your visibility(Set on preferences of Mastodon server)',
value: 'useapi'
}
]
}
},
{
id: 'img',
storage: 'img',
checkbox: true,
setValue: 'no-act',
text: {
head: 'Posting images preferences',
desc: '',
checkbox: [
{
text: 'Insert media URL',
value: 'url'
},
{
text: 'Insert nothig',
value: 'no-act'
}
]
}
},
{
id: 'box',
storage: 'box',
checkbox: true,
setValue: 'yes',
text: {
head: 'Action of posting-box',
desc: '',
checkbox: [
{
text: 'Folding',
value: 'yes'
},
{
text: 'Open after posting',
value: 'no'
},
{
text: 'Absolutely open',
value: 'absolute'
}
]
}
},
{
id: 'quote',
storage: 'quote',
checkbox: true,
setValue: 'nothing',
text: {
head: 'Quote format',
desc: '',
checkbox: [
{
text: 'Only URL',
value: 'simple'
},
{
text: 'URL and acct(mention to the user)',
value: 'mention'
},
{
text: 'URL, text and acct(mention to the user)',
value: 'full'
},
{
text: 'API(only some instances)',
value: 'apiQuote',
quote: true
},
{
text: 'Disabled(Hide buttons on TLs)',
value: 'nothing'
}
]
}
},
{
id: 'main',
storage: 'mainuse',
checkbox: true,
setValue: 'remain',
text: {
head: 'Default accounts of actions',
desc: 'Main account can be set on Account Manager.',
checkbox: [
{
text: 'Account you used recently',
value: 'remain'
},
{
text: 'Main account',
value: 'main'
}
]
}
},
{
id: 'sec',
storage: 'sec',
checkbox: true,
setValue: 'public',
text: {
head: 'Secondary Toot Button',
desc: '',
checkbox: [
{
text: 'Hidden',
value: 'nothing'
},
{
text: 'Public',
value: 'public'
},
{
text: 'Unlisted',
value: 'unlisted'
},
{
text: 'Private',
value: 'private'
},
{
text: 'Direct',
value: 'direct'
},
{
text: 'Local Only',
value: 'local',
kirishima: true,
kirishimaText: '非対応インスタンスでは「未収載」になります。'
}
]
}
},
{
id: 'zero',
storage: 'emoji-zero-width',
checkbox: true,
setValue: 'normal',
setValue: 'no',
text: {
head: 'Zero-width space when inserting emojis',
desc: '',
checkbox: yesno
}
},{
id: 'uploadCrop',
storage: 'uploadCrop',
checkbox: false,
doubleText: false,
width: 100,
setValue: '0',
text: {
head: 'Auto scale to fit',
desc: 'Max long-side px. Uploaded images are converted to JPEG(from JPEG) or PNG(from others). Set 0 and the images will not be resized. Notice: if you post an animated picture like GIF, it will be converted static one.',
after: 'px'
}
}
]

302
app/view/zh-TW/update.html Normal file
View File

@ -0,0 +1,302 @@
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<title>Update - TheDesk</title>
<link href="../../node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
<link href="../../css/master.css" type="text/css" rel="stylesheet" />
<meta charset="utf-8" />
<!--
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<style>
body {
font-family: 'Open Sans';
-webkit-app-region: drag;
cursor: move;
padding: 10px;
text-align: right;
}
#start {
display: flex;
justify-content: center;
align-items: center;
width: 100vw;
height: calc(100vh - 2.5rem);
text-align: center;
}
#checkbox {
text-align: left;
}
a,
button,
input,
label,
i {
-webkit-app-region: no-drag;
}
#updskip {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.skipbtn {
display: block;
width: 100%;
height: 100px;
border: 1px solid;
margin-left: 5px;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #c26363;
overflow: hidden;
color: #c26363;
margin-bottom: 5px;
font-size: 1.5rem;
}
.skipbtn:hover {
background-color: #c26363;
transition: all 0.3s ease-in-out;
color: white;
}
#prog {
font-size: 200%;
}
</style>
<link href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet" />
<script>var pwa = false;</script>
</head>
<body>
<script type="text/javascript" src="../../node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../node_modules/materialize-css/dist/js/materialize.js"></script>
<i class="material-icons pointer waves-effect" onclick="about();">info</i>
<i class="material-icons pointer waves-effect" onclick="skipper();">clear</i>
<!--a href="update.html">Reload</a-->
<div id="start" style="filter: brightness(100%)">
<div id="box" class="show">
<h2>TheDesk</h2>
<p>取得最新的 TheDesk</p>
<span id="now"></span><b id="ver"></b><br />
<a href="" id="github" class="btn waves-effect grey darken-1"><i class="fab fa-github left"></i>新功能?</a><br />
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left: 15px;">安裝程式 (建議)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left: 15px;">可攜式版本</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left: 15px;">zip 壓縮檔</button>
<button class="waves-effect btn linux hide" onclick="update('linuxdeb')" style="margin-left: 15px;">deb (建議於 Ubuntu 與 Debian 使用)</button>
<button class="waves-effect btn linux hide" onclick="update('linuxsnap')" style="margin-left: 15px;">snap 軟體包裹</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left: 15px;">開始</button>
<br />
有些問題嗎?<br />請於 <a href='https://thedesk.top'>Oficial HP</a> 下載。
</div>
<div id="skipper" class="hide">
<h4>掠過這個更新</h4>
您可能會失去很酷的體驗!<br />
<div id="updskip">
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light">
<div>隱藏直到下個時間軸讀取時</div>
</a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light">
<div>隱藏直到下個版本</div>
</a>
</div>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top: 5px;">持續更新</a>
</div>
<div id="dlnow" class="hide" style="width: 70%;">
<h4>正在下載...</h4>
<h4 id="prog"></h4>
<div class="progress">
<div class="determinate" style="width: 0%;"></div>
</div>
</div>
</div>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script>
function skipper() {
$('#dlnow').addClass('hide')
$('#box').toggleClass('show')
if ($('#box').hasClass('hide') && $('#skipper').hasClass('hide')) {
$('#skipper').removeClass('hide')
$('#skipper').addClass('show')
} else {
$('#box').toggleClass('hide')
$('#skipper').toggleClass('hide')
$('#skipper').toggleClass('show')
}
}
verck()
function update(sel) {
$('#box').toggleClass('show')
$('#box').toggleClass('hide')
$('#dlnow').toggleClass('hide')
$('#dlnow').toggleClass('show')
$('#prog').text('')
var bit = localStorage.getItem('bit')
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
if (sel == 'install') {
if (bit == 'x64') {
var url = json['winx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup.exe'
} else {
var file = 'TheDesk-setup.exe'
}
var filesize = json.winx64_size
} else if (bit == 'ia32') {
var url = json['winia32']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-setup-ia32.exe'
} else {
var file = 'TheDesk-setup-ia32.exe'
}
var filesize = json.winia32_size
}
} else if (sel == 'portable') {
if (bit == 'x64') {
var url = json['winx64p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '.exe'
} else {
var file = 'TheDesk.exe'
}
var filesize = json.winx64p_size
} else if (bit == 'ia32') {
var url = json['winia32p']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'TheDesk-' + json.unique + '-ia32.exe'
} else {
var file = 'TheDesk-ia32.exe'
}
var filesize = json.winia32p_size
}
} else if (sel == 'linux') {
var url = json['linuxx64']
if (localStorage.getItem('dl-win') == 'yes') {
var file = 'thedesk-' + json.unique_linux + '.zip'
} else {
var file = 'thedesk.zip'
}
var filesize = json.linuxx64_size
} else if (sel == 'linuxdeb') {
var url = json['linuxdeb']
var file = 'thedesk_' + json.unique_linux + '_amd64.deb'
var filesize = json.linuxdeb_size
} else if (sel == 'linuxsnap') {
var url = json['linuxsnap']
var file = 'thedesk_' + json.unique_linux + '_amd64.snap'
var filesize = json.linuxsnap_size
} else if (sel == 'mac') {
var url = json['mac']
var file = 'TheDesk-' + json.unique_mac + '.dmg'
var filesize = json.mac_size
}
postMessage(['downloadButton', [url, file, filesize]], '*')
})
}
function quit() {
postMessage(['sendSinmpleIpc', 'quit'], '*')
}
function updateProg(arg) {
$('.determinate').css('width', arg[0].percent * 100 + '%')
$('#prog').html(`${Math.floor(arg[0].percent * 100)}%<br />(${Math.floor(arg[0].percent*arg[1]/1024/1024*10)/10} MB / ${Math.floor(arg[1]/1024/1024*10)/10} MB)`)
}
function updateMess(arg) {
console.log(arg)
$('#prog').text(arg)
}
function verck() {
var platform = localStorage.getItem('platform')
var bit = localStorage.getItem('bit')
if (platform == 'win32') {
$('.windows').removeClass('hide')
} else if (platform == 'linux') {
$('.linux').removeClass('hide')
} else if (platform == 'darwin') {
$('.mac').removeClass('hide')
}
var start = 'https://thedesk.top/ver.json'
fetch(start, {
method: 'GET',
headers: { 'content-type': 'application/json' },
})
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
console.log(json)
if (platform == 'win32') {
$('#ver').text(json.desk)
localStorage.setItem('next-ver', json.desk)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique
} else if (platform == 'linux') {
$('#ver').text(json.desk_linux)
localStorage.setItem('next-ver', json.desk_linux)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_linux
} else if (platform == 'darwin') {
$('#ver').text(json.desk_mac)
localStorage.setItem('next-ver', json.desk_mac)
var url = 'https://github.com/cutls/TheDesk/releases/tag/v' + json.unique_mac
}
$('#github').attr('href', url)
$('#now').text(localStorage.getItem('ver'))
})
}
function nextv() {
localStorage.setItem('new-ver-skip', 'true')
window.close()
}
function enc(ver) {
var ver = ver.replace(/\s/g, '')
var ver = ver.replace(/\(/g, '-')
var ver = ver.replace(/\)/g, '')
var ver = ver.replace(/\[/g, '_')
var ver = ver.replace(/\]/g, '')
return ver
}
</script>
</body>
</html>