Chaster Translator Simplified Chinese
Versione datata
// ==UserScript==
// @name Chaster Translator zh-cn
// @namespace chaster_translator_zh-cn
// @version 0.1
// @description Chaster Translator Simplified Chinese
// @author HBcao
// @match https://*.chaster.app/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=chaster.app
// @grant none
// @require https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @license GNU General Public License v3.0
// ==/UserScript==
(function () {
'use strict';
function wait(selector, func, times, interval) {
var _times = times || -1,
_interval = interval || 20, //20毫秒每次
_self,
_iIntervalID; //定时器id
_iIntervalID = setInterval(function () {
if (!_times) { //是0就退出
clearInterval(_iIntervalID);
}
_times <= 0 || _times--; //如果是正数就 --
_self = $(selector);
if (_self.length) {
clearInterval(_iIntervalID);
func && func.call(_self);
}
}, _interval);
return _self;
}
$.fn.wait = function (selector, func, times, interval) {
var parent = this, _times = times || -1,
_interval = interval || 20, //20毫秒每次
_self,
_iIntervalID; //定时器id
_iIntervalID = setInterval(function () {
if (!_times) { //是0就退出
clearInterval(_iIntervalID);
}
_times <= 0 || _times--; //如果是正数就 --
_self = $(parent).find(selector);
if (_self.length) {
try {
func && func.call(_self);
} catch (e) {
console.warn(e);
return false;
}
clearInterval(_iIntervalID);
}
}, _interval);
return parent;
}
function waitIf(funcIf, func, times, interval) {
if (!funcIf) return false;
var _times = times || -1,
_interval = interval || 20, //20毫秒每次
_iIntervalID; // 定时器id
_iIntervalID = setInterval(function () {
if (!_times) {
clearInterval(_iIntervalID);
}
_times <= 0 || _times--; //如果是正数就 --
if (funcIf()) {
clearInterval(_iIntervalID);
func && func.call();
}
}, _interval);
return true;
}
$(function () {
function main() {
try {
var s = $(location).attr("href")
.replace(/https:\/\/.*chaster.app\//g, '')
.replace(/#.*/g, '');
var ss = s.split('/');
console.log(ss);
loading()
if (ss[0] == 'locks' || ss[0] == 'shared-locks' || ss[0] == 'keyholder' || ss[0] == 'explore' ||
ss[0] == 'activity' || ss[0] == 'users' || ss[0] == 'verifications' || ss[0] == 'user') {
head();
left();
}
switch (ss[0]) {
case '':
home(); break;
case 'auth':
login(); break;
case 'register':
register(); break;
case 'locks':
switch (ss[1]) {
case undefined:
case '':
locks(); break;
case 'new':
locks_new(); break;
default:
switch (ss[2]) {
case 'history':
locks_history(); break;
case 'extensions':
locks_extensions(); break;
case 'settings':
switch (ss[3]) {
case undefined:
case '':
locks_settings(); break;
case 'extensions':
if (ss[4] == 'edit') {
locks_settings_extensions_edit();
} else {
locks_settings_extensions();
}
break;
case 'keyholder':
locks_settings_keyholder(); break;
}
break;
}
}
break;
case 'verifications':
verifications(); break;
case 'shared-locks':
switch (ss[1]) {
case undefined:
case '':
shared_locks(); break;
case 'new':
shared_locks_new(); break;
default:
shared_locks_lock(); break;
}
break;
case 'keyholder':
keyholder(ss);
break;
case 'explore':
switch (ss[1]) {
case undefined:
case '':
explore(); break;
case 'search':
explore_search(); break;
default:
explore_lock(); break;
}
break;
}
} catch (e) {
console.warn(e)
}
}
main()
const _historyWrap = function (type) {
const orig = history[type];
const e = new Event(type);
return function () {
const rv = orig.apply(this, arguments);
e.arguments = arguments;
window.dispatchEvent(e);
return rv;
};
};
window.addEventListener('popstate', function (event) {
console.log('change popstate');
main()
})
history.pushState = _historyWrap('pushState');
history.replaceState = _historyWrap('replaceState');
window.addEventListener('pushState', function (e) {
console.log('change pushState');
main()
});
window.addEventListener('replaceState', function (e) {
console.log('change replaceState');
});
})
function loading() {
wait('#root .full-page-loader', function () {
var _iIntervalID;
_iIntervalID = setInterval(function () {
let c = $('#root .full-page-loader .caption');
let t = c.text();
let tt;
switch (t) {
case 'Loading...':
tt = '加载中...'; break;
case 'Loading account...':
tt = '加载账号中...'; break;
case 'Loading settings...':
tt = '加载账号中...'; break;
case 'Loading profile...':
tt = '加载数据中...'; break;
}
c.text(tt);
if (c.length == 0) {
clearInterval(_iIntervalID);
}
})
}, 20);
}
function home() {
wait('#root .wrapper .navbar-collapse', function () {
try {
let $visitor_navbar = $(this);
let $visitor_navbar0 = $($visitor_navbar.children()[0]);
let $visitor_navbar1 = $($visitor_navbar.children()[1]);
try {
$($visitor_navbar0.children()[0]).text('探索');
$($visitor_navbar0.children()[1]).text('公开锁');
$visitor_navbar0.children()[2].innerHTML = $visitor_navbar0.children()[2].innerHTML.replace('Plus', '会员');
} catch (e) { }
$($visitor_navbar1.find('>a')[0]).text('登录');
$($visitor_navbar1.find('>a')[1]).text('注册');
head()
} catch (e) {
console.warn(e)
}
})
wait('#root .Home', function () {
try {
$($(this).children()[0].children[0].children[0].children[1]).text('终极贞操体验');
let signup = $(this).children()[0].children[0].children[0].children[2].children[0].children[0];
signup.innerHTML = signup.innerHTML
.replace('Sign up', '注册')
.replace('Access the application', '访问应用程序');
let a = $(this).children()[1].children[0].children[0].children;
$(a[0]).text('Time-based locks - 时间锁计划');
$(a[1]).text('探索新的贞操体验,定制时间锁计划和为您打造的新冒险。使用Chaster,使用社区锁计划中的一个,或者创建自己的自定义锁计划。');
a = $(this).children()[2].children[0].children[0].children[0].children;
$(a[0]).text('Keyholders - 钥匙管理者');
$(a[1]).text('创建共享锁计划(shared locks)并控制其他用户的锁。管理他人锁的持续时间,并通过扩展(extensions)带来挑战。');
a = $(this).children()[3].children[0].children[0].children;
$(a[0]).text('Extensions - 拓展');
$(a[1]).text('无限的可能性的锁扩展。为你的锁添加扩展,添加新功能,体验终极贞洁体验。包括但不限于分享加时链接(Shared links)、角色(Role)、随机事件(Random Events)等诸多功能。');
a = $(this).children()[4].children[0].children[0].children;
$(a[0]).text('Chaster 功能');
$(a[1]).text('许多功能能带来卓越体验');
let b = a[2].children[1].children[0].children;
b[0].children[1].children[0].innerText = "图片锁盒密码";
b[0].children[1].children[1].innerText = "为你的锁盒拍照,或者生成一个密码。";
b[1].children[1].children[0].innerText = "锁计划和冒险";
b[1].children[1].children[1].innerText = "在数百个锁计划中选择一个计划,无论您是初学者还是高级用户。";
b[2].children[1].children[0].innerText = "拓展(Extensions)";
b[2].children[1].children[1].innerText = "添加新功能以自定义您的锁。";
b[3].children[1].children[0].innerText = "事件(Events)";
b[3].children[1].children[1].innerText = "参加由Chaster团队或社区创建的每日或每周活动。";
if ($(this).children().length > 5) {
a = $(this).children()[5].children[0].children[0].children;
a[0].innerText = '加入Chaster社区';
a[1].innerText = '注册并加入Chaster社区,即可访问所有功能,体验终极贞操体验!';
a[2].children[0].children[0].innerText = '在Chaster注册';
a[3].children[0].innerText = '我已有账号';
}
}
catch (e) {
console.warn(e);
}
})
wait('#root .Footer .container .row', function () {
try {
let a = $(this).children();
a[0].children[1].children[0].innerText = '与Chaster一起探索新的贞操体验。';
a[1].children[0].innerText = 'Resources - 资源';
let b = $(a[1].children[1]).find('a');
b[0].innerText = '文档';
b[1].innerText = '隐私政策';
b[2].innerText = '用户条款';
a[2].children[0].innerText = 'Application - 应用';
b = $(a[2].children[1]).find('a');
b[0].innerText = '文档';
b[1].innerText = '更新日志';
b[2].innerText = '反馈';
b[3].innerText = '开发';
} catch (e) {
console.warn(e);
}
})
}
function register() {
wait('.Register .register-col', function () {
$('.wrapper > div:nth-child(2) > div:nth-child(1) > div:nth-child(1) > .caption').text('终极贞操体验');
let a = $(this).children();
a[0].innerText = '注册';
a[1].innerText = '在Chaster上注册以获得新的贞操体验。';
a[4].innerHTML = a[4].innerHTML
.replace('Have an account?', '已有账号?')
.replace('Log in', '登录');
a = a[3].children;
a[0].children[0].innerText = '用户名';
a[1].children[0].innerText = '邮箱地址';
a[2].children[0].innerText = '密码';
a[4].innerHTML = a[4].innerHTML
.replace('By registering, you agree to our', '一经注册即代表你同意我们的')
.replace('terms<', '用户条款<')
.replace('and', '和')
.replace('privacy policy', '隐私政策');
})
}
function login() {
wait('.main', function () {
try {
$(this).children()[0].children[0].children[1].innerText = '终极贞操体验';
$(this).children()[1].children[0].children[1].children[0].innerText = '登录您的帐户';
$(this).children()[1].children[0].children[1].children[1].innerText = '登录Chaster,探索终极贞操体验。';
let form = $($(this).children()[1].children[0].children[2]).find('form')[0];
form.children[0].children[0].innerText = '用户名或邮箱';
form.children[1].children[0].innerText = '密码';
form.children[2].children[1].children[0].children[0].innerText = '忘记密码?';
$(form.children[3].children[1]).val('登录');
} catch (e) {
console.warn(e);
}
})
}
function head() {
wait('.navbar-nav .profile-dropdown a', function () {
setTimeout(function () {
try {
$('.navbar-nav .profile-dropdown a').click(function () {
setTimeout(function () {
let a = $('.navbar-nav .profile-dropdown a').next().children();
a[1].innerText = '账号';
a[2].innerText = '保存的锁';
a[3].innerText = '设置';
a[5].innerText = '登出';
}, 10);
})
} catch (e) {
console.warn(e)
}
}, 1000)
})
}
function left() {
wait('.wrapper .p-4', function () {
function _left() {
try {
setTimeout(function () {
let a = $('.wrapper .p-4')[0].children;
if (a.length > 1 && a[1].innerText == 'MENU') {
a[1].innerText = '菜单';
let b = a[2].children;
b[0].children[0].children[0].children[1].innerText = '锁计划';
b[1].children[0].children[0].children[1].innerText = '共享锁计划';
// b[2].children[0].children[0].children[1].innerText = '钥匙管理者';
b[3].children[0].children[0].children[1].innerText = '探索';
b[4].children[0].children[0].children[1].innerText = '公示锁';
b[5].children[0].children[0].children[1].innerText = 'Chaster Plus会员';
a[4].innerText = '社区';
b = a[5].children;
b[0].children[0].children[0].children[1].innerText = '成员';
b[1].children[0].children[0].children[1].innerText = '核查锁照';
let $b = $(a[7].children[1]).find('>a');
$b[0].innerText = '文档';
$b[1].innerText = '开发';
$b[2].innerText = '更新日志';
$b[3].innerText = '用户条款';
$b[4].innerText = '隐私政策';
$('.wrapper .p-4 .align-items-center button').click(_left);
}
}, 100)
} catch (e) {
console.warn(e)
}
}
setTimeout(_left, 100);
setTimeout(_left, 1000);
setTimeout(_left, 2000);
})
}
function dialog() {
function _penalty_option(a) {
let $a = $(a);
let options = $a.find('select option');
for (let i = 0; i < options.length; i++) {
let $option = $(options[i]);
let v = String($option.val()).trim();
switch (v) {
case 'add_time':
$option.text('加时');
break;
case 'freeze':
$option.text('冻结');
break;
case 'pillory':
$option.text('公示');
break;
}
}
}
function _penalty_box($p) {
try {
let b = $p.children();
b[0].innerText = '放弃任务时的惩罚';
if (b[1].children.length > 0) _penalty_option(b[1]);
$(b[1]).on('click', '.mt-3 button', function () {
setTimeout(() => {
_penalty_option(b[1]);
}, 10);
})
$(b[1]).on('change', 'select', function () {
setTimeout(() => {
_penalty_option(b[1]);
}, 10);
})
$(b[1]).on('click', '.actions span:nth-child(1)', function () {
setTimeout(() => {
_penalty_option(b[1]);
}, 10);
})
$(b[1]).on('mouseover', '.ml-3 .text-warning', function () {
wait('.tooltip-inner', function () {
$(this).text('确保你有办法解冻自己(keyholder、其他扩展插件等),否则你将面临无限期冻结的风险!');
})
})
} catch (e) {
console.warn(e)
}
}
function _input(input) {
let $section = $(input).find('~div');
$section.children().hide();
$(input).find('~div .trans').remove();
let title_list = [
'Self-training - 自我训练',
'CBT - 认知行为治疗',
'Teasing - 挑逗',
'Oral - 口',
'Exercice - 体育锻炼'
]
let item_li_list = [
[
{
id: 0,
text: '佩戴肛塞 (30 分钟) (Wear a buttplug (30 min))',
fulltext: '佩戴肛塞 (30 分钟) Wear a buttplug (30 min) peidaigangsai pdgs',
},
{
id: 1,
text: '抽插假阳具 (30 分钟) (Fuck a dildo (30 min))',
fulltext: '抽插假阳具 (30 分钟) Fuck a dildo (30 min) chouchajiayangju ccjyj',
},
{
id: 2,
text: '充气肛塞 (30 分钟) (Inflatable plug (30 min))',
fulltext: '充气肛塞 (30 分钟) Inflatable plug (30 min) chongqigangsai cqgs',
},
{
id: 3,
text: '两指叠放抽插你的屁股 (Put one finger after the other in your ass)',
fulltext: '两指叠放抽插你的屁股 Put one finger after the other in your ass',
}
],
[
{
id: 0,
text: '电击 (Electro-stimulation)',
fulltext: '电击 Electro-stimulation dianji dj',
},
{
id: 1,
text: '拍打蛋蛋 30 次 (Slap balls 30 times)',
fulltext: '拍打蛋蛋 30 次 Slap balls 30 times paidadandan pddd',
},
{
id: 2,
text: '拳击蛋蛋 10 次 (Punch balls 10 times)',
fulltext: '拳击蛋蛋 10 次 Punch balls 10 times quanjidandan qjdd',
},
{
id: 3,
text: '拳击贞操锁 20 次 (Punch your cage 20 times)',
fulltext: '拳击贞操锁 20 次 Punch your cage 20 times quanjizhencaosuo qjzcs',
},
{
id: 4,
text: '冰敷蛋蛋 (Put ice on your balls)',
fulltext: '冰敷蛋蛋 Put ice on your balls bingfudandan bfdd',
}
],
[
{
id: 0,
text: '不触碰下体看涩涩 (20 分钟) (Watch porn without touching (20 min))',
fulltext: '不触碰下体看涩涩 (20 分钟) Watch porn without touching (20 min) buchupengxiatikansese bcpxtkss',
},
{
id: 1,
text: '边看涩涩边摩擦抱枕 (20 分钟)Watch porn while humping a pillow (20 min)',
fulltext: '边看涩涩边摩擦抱枕 (20 分钟) Watch porn while humping a pillow (20 min) biankansesebianmocabaozhen bkssbmcbz',
},
{
id: 2,
text: '边看涩涩边用振动器 (20 分钟)Watch porn while using a vibrator (20 min)',
fulltext: '边看涩涩边用振动器 (20 分钟) Watch porn while using a vibrator (20 min) biankansesebianyongzhendongqi bkssbyzdq',
},
{
id: 3,
text: '边看涩涩,边撸动放置在贞操锁上的假阴茎 (Watch porn while stroking a dildo)',
fulltext: '边看涩涩,边撸动放置在贞操锁上的假阴茎 Watch porn while stroking a dildo beside your cage biankansese bianludongfangzhizaizhencaosuoshangdejiayinjing bkss bldfzzzcssdjyj',
}
],
[
{
id: 0,
text: '吮吸假阴茎 (10 分钟) (Suck on a dildo (10 min))',
fulltext: '吮吸假阴茎 (10 分钟) Suck on a dildo (10 min) shunxijiayinjing sxjyj',
},
{
id: 1,
text: '40次深喉 (40 deepthroats)',
fulltext: '40次深喉 40 deepthroats sishicishenhou sscsh',
},
{
id: 2,
text: '20次深喉 (每次至少保持10秒) (20 deepthroats held for at least 10s)',
fulltext: '20次深喉 (每次至少保持10秒) 20 deepthroats held for at least 10 seconds ershicishenhou escsh',
},
],
[
{
id: 0,
text: '30个深蹲 (30 squats)',
fulltext: '30个深蹲 30 squats sanshigeshendun ssgsd',
},
{
id: 1,
text: '30个俯卧撑 (30 push-ups)',
fulltext: '30个俯卧撑 30 push-ups sanshigefuwocheng ssgfwc',
},
{
id: 2,
text: '30个仰卧起坐 (30 sit-ups)',
fulltext: '30个仰卧起坐 30 sit-ups sanshigeyangwoqizuo ssgywqz',
},
]
]
let item_li_list_show = [
[], [], [], [], []
];
let v = String($(input).val());
let flag = false;
if (v.trim() != '') {
for (let i = 0; i < item_li_list.length; i++) {
for (let j = 0; j < item_li_list[i].length; j++) {
let fulltext = String(item_li_list[i][j].fulltext);
if (fulltext.indexOf(v.trim()) != -1) {
item_li_list_show[i].push(item_li_list[i][j]);
flag = true;
}
}
}
} else {
item_li_list_show = item_li_list;
}
if (flag) $section.addClass('react-autosuggest__suggestions-container--open');
for (let i = 0; i < item_li_list_show.length; i++) {
if (item_li_list_show[i].length > 0) {
let $item = $('<div class="react-autosuggest__section-container trans"></div>');
if (i == 0) $item.addClass('react-autosuggest__section-container--first');
$item.append($('<div class="react-autosuggest__section-title">' + title_list[i] + '</div>'));
let $ul = $('<ul class="react-autosuggest__suggestions-list"></ul>');
for (let j = 0; j < item_li_list_show[i].length; j++) {
let $li = $('<li role="option" class="react-autosuggest__suggestion">' + item_li_list_show[i][j].text + '</li>');
if (j == 0) $li.addClass('react-autosuggest__suggestion--first');
$li.attr({
'id': 'react-autowhatever-1-section-' + i + '-item-' + item_li_list_show[i][j].id,
'aria-selected': false,
})
$ul.append($li);
}
$item.append($ul);
$section.append($item);
$item.find('li').click(function () {
let id = $(this).attr('id');
let $parent = $(this).parent().parent().parent();
$parent.find('div:not(.trans) #' + id).click();
setTimeout(() => {
$(input).val(this.innerText);
}, 10);
})
}
}
}
wait('.modal-dialog .modal-content', function () {
try {
let $title = $(this).find('.modal-header>.modal-title>.modal-title'),
$body = $(this).find('.modal-body'),
$footer = $(this).find('.modal-footer');
if ($title.length == 0) {
$title = $(this).find('.modal-header>.modal-title');
}
let b1, b2, f, a, b, c, btns, $o, o_children, $a;
let title_text = $title.text().trim();
function extensions_mode($body, modes_info) {
let a, modes, $o, o_children;
if (!modes_info) {
modes_info = [
{
'text': '不累积',
'tooltip': '在每次操作之后,您必须等待一定的时间才能重用扩展。',
'caption': '使用扩展后,您必须等待此时间才能再次使用它。',
},
{
'text': '累积',
'tooltip': '扩展的可使用次数会随时间累积。',
'caption': '每过此时间扩展的可使用次数将会加 1。',
},
{
'text': '无限制的',
'tooltip': '您可以随意多次使用扩展。',
}
]
}
a = $body.find('.d-sm-flex').children();
a[0].children[0].children[0].innerText = '模式';
a[0].children[0].children[1].innerText = '选择拓展模式';
modes = a[0].children[0].children[2].children;
for (let i = 0; i < modes.length; i++) {
$(modes[i]).click(function () {
wait('.modal-dialog .modal-body .d-sm-flex .flex-even:nth-child(2) .caption span', function () {
if (modes_info[i].caption) this.text(modes_info[i].caption);
})
})
$o = $(modes[i]).find('label > span:not(.ml-2)');
o_children = $o.children();
$o.empty();
$o.append(modes_info[i].text);
$(o_children[0]).hover(function () {
wait('.tooltip-inner', function () {
$(this).text(modes_info[i].tooltip);
})
})
$o.append($(o_children[0]));
}
$body.find('.d-sm-flex .flex-even:nth-child(2) .caption span').text(modes_info[0].caption);
}
switch (title_text) {
case 'Lock limit reached':
$title.text('锁计划拥有上限已达到')
b1 = $body.children()[0];
b2 = $body.children()[1];
$body.text('您已达到启用锁计划的最大数量。将您当前的锁存档以创建一个新锁,或成为Chaster Plus会员。');
$(b2).find('.caption')[0].innerText = $(b2).find('.caption')[0].innerText.replace('per month', '每月');
f = $(b2).find('.features')[0].children;
f[0].innerHTML = f[0].innerHTML.replace('Unlimited locks and extensions', '无限制的锁计划和拓展');
$(b2).find('.sub-subscribe button')[0].innerText = '订阅';
$body.append(b1);
$body.append(b2);
$footer.find('button span').text('关闭');
break;
case 'Add more time':
$title.text('增加时间');
$body.children()[0].innerText = '你可以在这里给你的锁添加时间';
a = $body.find('.DurationSelector')[0].children;
a[0].children[2].innerText = '天';
a[1].children[2].innerText = '时';
a[2].children[2].innerText = '分';
b = $footer[0].children;
b[0].innerHTML = b[0].innerHTML.replace('Close', '关闭');
b[1].innerHTML = b[1].innerHTML.replace('Add more time', '添加时间');
break;
case 'Update lock duration':
$title.text('更新锁的时长');
$body.children()[0].children[0].innerText = '你可以给锁增加或减少时间。';
a = $($body.children()[0].children[1]).find('label');
a[0].children[0].innerText = '加时';
a[1].innerText = '减时';
break;
case 'Unlock your lock':
$title.text('解锁你的锁');
$body.children()[0].innerText = '你的锁已经可以打开了。您可以现在打开它并显示密码,或者添加时间。';
let btns = $footer.find('button');
let btns_span = $footer.find('button span');
btns_span[0].innerHTML = btns_span[0].innerHTML.replace('Add more time', '增加时间');
btns_span[1].innerHTML = btns_span[1].innerHTML.replace('Unlock my lock', '解锁');
$(btns[0]).click(function () {
var _timeid;
_timeid = setInterval(() => {
$title = $('.modal-dialog .modal-content').find('.modal-header>.modal-title');
if ($title.text() == 'Add more time') {
dialog();
clearInterval(_timeid);
}
}, 20)
})
break;
case 'Archive your lock':
$title.text('归档你的锁');
$body.children()[0].innerText = '是否要归档您的锁?你仍然可以从你的锁历史记录中看到它。';
if ($body.children()[1]) {
$body.children()[1].innerHTML = '警告:您的锁仍在运行。通过存档此锁,<strong>您将无法再访问您的密码</strong>。您的会话将被视为已放弃。';
}
b = $footer[0].children;
b[0].innerHTML = b[0].innerHTML.replace('Cancel', '取消');
b[1].innerHTML = b[1].innerHTML.replace('Archive my lock', '归档我的锁');
break;
case 'Put in pillory':
$title.text('公示');
$body.children()[0].innerText = '选择公示的时长和原因。';
$body.children()[1].children[0].innerText = '公示时长';
$body.children()[1].children[1].innerText = '访问者可以在这段时间内投票加时';
$body.children()[2].children[0].innerText = '公示原因';
$body.children()[3].innerText = '加时投票将被发布到 公开锁(Activity) 页面';
break;
case 'Configure Share links':
$title.text('配置-分享链接');
$body.children()[0].innerText = '与他人分享您锁的加时投票链接';
a = $body.find('.mb-2').children();
a[0].children[0].innerText = '增加的时间';
a[0].children[1].innerText = '访问者投票增加时间时,所增加的时间。';
a[1].children[0].innerText = '减少的时间';
a[1].children[1].innerText = '访问者投票减少时间时,所减少的时间。';
$o = $($body.find('.mb-3').children()[0]);
o_children = $o.children();
$o.empty();
$o.append($(o_children[0]));
$o.append('提供随机选项');
$(o_children[1]).hover(function () {
wait('.tooltip-inner', function () {
$(this).text('投票此选项将会在增加和减少时间之间随机选择。');
})
})
$o.append($(o_children[1]));
$body.find('form').children()[0].children[0].innerText = '所需投票次数';
$body.find('form').children()[0].children[1].innerText = '你需要获得一定数量的投票才能解锁你的锁。';
$o = $($body.find('form').children()[1].children[0]);
o_children = $o.children();
$o.empty();
$o.append($(o_children[0]));
$o.append('只允许登录的人投票');
$(o_children[1]).hover(function () {
wait('.tooltip-inner', function () {
$(this).text('如果启用此选项,访问者将需要登录才能增加或减少时间。');
})
})
$o.append($(o_children[1]));
break;
case 'Configure Pillory':
$title.text('配置 公开加时');
$body.children()[0].innerText = '当您受到处罚时,将会在指定的时间段内公开显示。其他用户将能够为您的锁增加时间。';
a = $body.children()[3].children;
a[0].innerText = '每票加时';
a[1].innerText = '访问者每次投票增加的时间';
a[4].innerText = '我怎么会被公开加时?';
b = a[5].children;
b[0].innerText = '你可能会因为以下原因而被公开加时:';
b[2].innerText = '注意:你不能自己公开。';
c = b[1].children;
c[0].innerText = '幸运转盘拓展(Wheel of Fortune Extensions):指针落在公开格子上';
c[1].innerText = 'Keyholder:你的Keyholder把你的锁公开';
c[2].innerText = '惩罚拓展(Penalties Extensions):你受到了惩罚';
c[3].innerText = '验证锁照:你的验证锁照被多数拒绝';
break;
case 'Configure Hygiene opening':
$title.text('配置-日常清洁');
$body.children()[0].innerText = '因为卫生很重要,所以定期解锁自己来清洁你的贞操设备。要小心,如果你解锁超过了允许的时间,你将受到处罚。';
$body.children()[2].children[0].children[0].children[0].innerText = 'Regularity - 间隔时间';
$body.children()[2].children[0].children[0].children[1].children[0].innerText = '解锁后,您必须等待此时间才能再次解锁。';
$body.children()[4].children[0].innerText = '每次允许解锁时间';
$body.children()[4].children[1].innerText = '每次允许打开锁的最长时间。';
$body.children()[5].children[0].innerText = '超时惩罚时间';
$body.children()[5].children[1].innerText = '如果您没有在允许的时间之前锁回去,那么您的锁将增加此时间。';
$o = $($body.children()[6].children[0]);
o_children = $o.children();
$o.empty();
$o.append($(o_children[0]));
$o.append('只允许keyholder打开锁清洁');
$(o_children[1]).hover(function () {
wait('.tooltip-inner', function () {
$(this).text('您将无法自己打开锁清洁,只有钥匙持有者(keyholder)才能打开。注意:启用此选项后,间隔时间将失效。');
})
})
$o.append($(o_children[1]));
$o.click(function () {
wait('.modal-dialog .modal-body .text-warning', function () {
this[0].innerHTML = this[0].innerHTML
.replace('By enabling this option, you will need to have a keyholder to unlock yourself temporarily.', '启用此选项后,您将需要一个keyholder才能清洁解锁。');
})
})
break;
case 'Configure Dice':
$title.text('配置-骰子');
$body.children()[0].innerText = '每一次你和机器人都会掷骰子。如果你掷的比机器人多,时间就会减少。如果机器人掷得更多,时间就会增加。';
extensions_mode($body)
$body.children()[3].children[0].innerText = '时间倍数';
$body.children()[3].children[1].innerText = '两个骰子之间的差值将乘以这个时间。';
break;
case 'Configure Wheel of Fortune':
$title.text('配置-幸运转盘');
$body.children()[0].innerText = '转动幸运转盘,更改锁的持续时间。为幸运转盘的每个格子配置操作:增加或减少时间、冻结锁或自定义文本。';
extensions_mode($body);
$body.children()[4].innerText = '转盘格子';
$body.children()[5].innerText = '配置幸运转盘的格子';
function _option($body) {
setTimeout(() => {
let a = $($body.children()[6]).find('form .card-content');
for (let i = 0; i < a.length; i++) {
let options = $(a[i]).find('select option');
for (let j = 0; j < options.length; j++) {
let $option = $(options[j]);
switch ($option.val()) {
case 'add-time':
$option.text('加时');
break;
case 'remove-time':
$option.text('减时');
break;
case 'add-remove-time':
$option.text('加时或减时');
break;
case 'text':
$option.text('文本');
break;
case 'freeze':
$option.text('冻结 / 解冻');
break;
case 'set-freeze':
$option.text('冻结');
break;
case 'set-unfreeze':
$option.text('解冻');
break;
case 'pillory':
$option.text('公示');
break;
}
}
$(a[i]).find('select').change(function () {
let self = this;
setTimeout(function () {
switch ($(self).find(':selected').val()) {
case 'text':
wait('.invalid-feedback', function () {
$(this).text('请输入文本');
})
$(a[i]).find('.flex-grow-1 .ml-2 input').bind('input propertychange', function () {
if ($(this).val() == '') {
wait('.invalid-feedback', function () {
$(this).text('请输入文本');
})
}
})
break;
case 'freeze':
$(a[i]).find('.flex-grow-1 .ml-3 .ml-2').hover(function () {
wait('.tooltip-inner', function () {
$(this).text('如果指针落在这个选项上,你的锁将被冻结 (即暂停时间),你必须再次降落在这个选项或解冻选项上才能解冻!不建议初学者使用。');
})
})
break;
}
}, 10)
})
}
}, 10);
}
_option($body);
$($body.children()[6]).find('.mt-3 button').click(function () {
_option($body);
});
break;
case 'Configure Tasks':
$title.text('配置-任务');
$body.children()[0].innerText = '通过做任务来增加训练的趣味性。配置您要执行的任务,然后接收一个随机任务,或让其他用户投票决定任务。';
extensions_mode($body);
a = $body.find('form').children();
a[0].innerText = '任务积分';
a[1].innerText = '通过配置任务积分,可以为每个任务分配点数。获得更多积分,并设定解锁所需的积分数量。';
$o = $(a[2].children[0]);
o_children = $o.children();
$o.empty()
$o.append($(o_children[0]));
$o.append("启用任务积分");
$(o_children[1]).hover(function () {
wait('.tooltip-inner', function () {
$(this).text('为每项任务分配分数,并设定一个分数目标。');
})
})
$o.append($(o_children[1]));
$o.click(function () {
let self = this;
setTimeout(function () {
let a = $(self).parent().next().children();
if (a.length > 0) {
a[0].innerText = '所需积分';
a[1].innerText = '你需要获得一定数量的积分才能解锁你的锁。';
}
}, 10)
})
b = $($body.find('form').find('hr')[0]).next().children();
b[0].innerText = '任务';
b[1].innerText = '配置上锁期间要执行的任务。(点击任务建议选项后请手动输入空格使中文生效)';
if ($(b[2]).find('button')[0]) {
$(b[2]).find('button')[0].innerHTML =
$(b[2]).find('button')[0].innerHTML
.replace('Add a task', '添加任务');
if ($(b[2]).find('button')[0].innerText == 'Configure the task list myself') {
$(b[2]).find('button')[0].innerText = '我自己配置任务列表';
$($(b[2]).find('button')[0]).parent().prev().text('使用者将在第一次使用扩展时配置任务列表。');
}
}
if ($(b[2]).find('button')[1]) {
$(b[2]).find('button')[1].innerText = '或者让使用者自行编辑任务';
let $c = $(b[2]).parent();
$c.on('click', 'button:nth-child(2)', function () {
setTimeout(() => {
$c.find('div div div.mb-2').text('使用者将在第一次使用扩展时配置任务列表。');
$c.find('div div div button').text('我自己配置任务列表');
}, 10)
})
$c.on('click', 'button:nth-child(1)', function () {
setTimeout(() => {
$c.find('button')[0].innerHTML = $c.find('button')[0].innerHTML.replace('Add a task', '添加任务');
$c.find('button')[1].innerText = '或者让使用者自行编辑任务';
}, 10)
})
}
$(b[2]).on('click input propertychange', '.react-autosuggest__input', function (e) {
_input(e.target);
})
$(b[2]).on('blur', '.react-autosuggest__input', function (e) {
$(e.target).find('~div .trans').remove();
})
$(b[2]).on('mousedown', '.react-autosuggest__input ~ div', function (e) {
e.preventDefault();
})
$(b[2]).on('mousewheel', 'input.form-control', function (e) {
setTimeout(function () {
e.preventDefault();
}, 10)
})
$a = $($body.find('form').find('hr')[1]).next();
$a.text('Assign and edit votes - 任务获取、任务修改选项');
$a.next().text('是否允许修改任务及任务获取方式');
b = $($a.next().find('~ .mb-3 .CheckboxGroupItem'));
for (let i = 0; i < b.length; i++) {
let $o = $(b[i]);
let o_children = $o.children();
let o_text = $o.text().trim();
let tooltip;
switch (o_text) {
case 'Allow editing tasks while you are locked':
$o.empty();
$o.append($(o_children[0]));
$o.append('允许上锁时编辑任务');
$o.append($(o_children[1]));
tooltip = '您将能够创建、编辑和删除任务。';
break;
case 'Allow wearers to edit tasks while they are locked':
$o.empty();
$o.append($(o_children[0]));
$o.append('允许使用者上锁时编辑任务');
$o.append($(o_children[1]));
tooltip = '使用者将能够创建、编辑和删除任务。';
break;
case 'Allow you to assign a task randomly or by creating a vote':
$o.empty();
$o.append($(o_children[0]));
$o.append('允许您随机分配任务或创建一个公开投票选择任务');
$o.append($(o_children[1]));
tooltip = '如果未选中该选项,则只有您的密钥持有者才能为您分配任务。';
$o.click(function () {
let self = this;
setTimeout(function () {
if ($(self).next().length > 0) {
$(self).next()[0].innerHTML = $(self).next()[0].innerHTML
.replace('By disabling this option, you will need to have a keyholder to receive tasks.', '禁用此选项后,您将需要一个keyholder来接收任务。');
}
let $o1 = $($(self).parent().next().children()[0]);
if ($o1.text().trim() == 'Allow you to choose your own task from the list') {
let o1_children = $o1.children();
$o1.empty();
$o1.append($(o1_children[0]));
$o1.append('允许您从任务列表中自行选择任务');
$o1.append($(o1_children[1]));
$(o1_children[1]).hover(function () {
wait('.tooltip-inner', function () {
$(this).text('您将能够自行选择任务。');
})
})
}
}, 10)
})
break;
case 'Allow wearers to assign tasks to themselves':
$o.empty();
$o.append($(o_children[0]));
$o.append('允许使用者随机分配任务或创建一个公开投票选择任务');
$o.append($(o_children[1]));
tooltip = '如果未选中该选项,只有您能够给使用者分配任务。';
$o.click(function () {
let self = this;
setTimeout(function () {
let $o1 = $($(self).parent().next().children()[0]);
if ($o1.text().trim() == 'Allow wearers to choose their own task from the list') {
let o1_children = $o1.children();
$o1.empty();
$o1.append($(o1_children[0]));
$o1.append('允许您从任务列表中自行选择任务');
$o1.append($(o1_children[1]));
$(o1_children[1]).hover(function () {
wait('.tooltip-inner', function () {
$(this).text('您将能够自行选择任务。');
})
})
}
}, 10)
})
break;
case 'Allow you to choose your own task from the list':
$o.empty();
$o.append($(o_children[0]));
$o.append('允许您从任务列表中自行选择任务');
$o.append($(o_children[1]));
tooltip = '您将能够自行选择任务。';
break;
case 'Allow wearers to choose their own task from the list':
$o.empty();
$o.append($(o_children[0]));
$o.append('允许使用者从任务列表中自行选择任务');
$o.append($(o_children[1]));
tooltip = '使用者能够自行选择任务。';
break;
case 'Give a penalty when a task is abandoned':
$o.empty();
$o.append($(o_children[0]));
$o.append('放弃任务时给予惩罚');
$o.append($(o_children[1]));
tooltip = '如果你放弃任务,你将受到惩罚。';
if ($o.parent().next().length > 0) {
_penalty_box($o.parent().next());
}
$o.click(function () {
setTimeout(function () {
_penalty_box($o.parent().next());
}, 10)
});
break;
}
$(o_children[1]).hover(function () {
wait('.tooltip-inner', function () {
$(this).text(tooltip);
})
})
}
break;
case 'Configure tasks':
$title.text('配置 任务列表');
a = $body.children()[0].children[0].children;
a[0].innerText = '任务';
a[1].innerText = '配置上锁期间要执行的任务。';
$(a[2]).on('click input propertychange', '.react-autosuggest__input', function (e) {
_input(e.target);
})
$(a[2]).on('blur', '.react-autosuggest__input', function (e) {
$(e.target).find('~div .trans').remove();
})
$(a[2]).on('mousedown', '.react-autosuggest__input ~ div', function (e) {
e.preventDefault();
})
break;
case 'Configure Penalties':
$title.text('配置-惩罚');
$body.children()[0].innerText = '如果您不按时执行操作,将受到惩罚。';
wait('.modal-body .form-group .select', function () {
let $form = $(this).parent();
$form.children()[0].innerText = '添加新的惩罚行为';
$form.children()[1].children[1].innerText = '首先启用扩展以选择惩罚。';
function _options() {
let options = $($form.children()[1].children[0]).find('option');
for (let i = 0; i < options.length; i++) {
let $option = $(options[i]);
let v = String($option.text()).trim();
switch (v) {
case 'Select a punishable action...':
$option.text('选择一个惩罚行为');
break;
case 'Roll the dice':
$option.text('掷骰子-未达次数惩罚');
break;
case 'Roll the dice ✓':
$option.text('掷骰子-未达次数惩罚 ✓');
break;
case 'Turn the Wheel of Fortune':
$option.text('幸运转盘-未达次数惩罚');
break;
case 'Turn the Wheel of Fortune ✓':
$option.text('幸运转盘-未达次数惩罚 ✓');
break;
case 'Do the tasks':
$option.text('任务-未达次数惩罚');
break;
case 'Do the tasks ✓':
$option.text('任务-未达次数惩罚 ✓');
break;
case 'Delay to do a task':
$option.text('任务-超时惩罚');
break;
case 'Delay to do a task ✓':
$option.text('任务-超时惩罚 ✓');
break;
case 'Open temporarily your lock':
$option.text('日常清洁-未达次数惩罚');
break;
case 'Open temporarily your lock ✓':
$option.text('日常清洁-未达次数惩罚 ✓');
break;
case 'Maximum opening time':
$option.text('日常清洁-超时惩罚');
break;
case 'Maximum opening time ✓':
$option.text('日常清洁-超时惩罚 ✓');
break;
case 'Verify your session':
$option.text('验证锁照-未达次数惩罚');
break;
case 'Verify your session ✓':
$option.text('验证锁照-未达次数惩罚 ✓');
break;
}
}
}
$body.on('click', '.card-content .btn-danger', function () {
setTimeout(() => {
_options();
}, 10)
})
function _content() {
wait('.modal-body .card-content', function () {
_options()
for (let i = 0; i < $(this).length; i++) {
let $card = $($(this)[i]);
let title = $card.find('h6').text();
$card.on('mousewheel', 'input.form-control', function (e) {
setTimeout(function () {
e.preventDefault();
}, 10)
})
function _times_options(options) {
for (let j = 0; j < options.length; j++) {
let $option = $(options[j]);
let v = String($option.text()).trim();
switch (v) {
case 'Daily':
$option.text('每天');
break;
case 'Every 2 days':
$option.text('每两天');
break;
case 'Weekly':
$option.text('每周');
break;
case 'Monthly':
$option.text('每月');
break;
}
}
}
let options;
switch (title) {
case 'Roll the dice':
$card.find('h6').text('掷骰子-未达次数惩罚');
$card.find('.caption')[0].innerText = '所需掷骰子次数';
$card.find('hr ~ .caption')[0].innerText = '次数未及时达标惩罚';
options = $($card.children()[1]).find('select option');
_times_options(options);
break;
case 'Turn the Wheel of Fortune':
$card.find('h6').text('幸运转盘-未达次数惩罚');
$card.find('.caption')[0].innerText = '所需转转盘次数';
$card.find('hr ~ .caption')[0].innerText = '次数未及时达标惩罚';
options = $($card.children()[1]).find('select option');
_times_options(options);
break;
case 'Do the tasks':
$card.find('h6').text('任务-未达次数惩罚');
$card.find('.caption')[0].innerText = '所需完成任务数';
$card.find('hr ~ .caption')[0].innerText = '数量未及时达标惩罚';
options = $($card.children()[1]).find('select option');
_times_options(options);
break;
case 'Delay to do a task':
$card.find('h6').text('任务-超时惩罚');
$card.find('.caption')[0].innerText = '每个任务限时时间';
$card.find('hr ~ .caption')[0].innerText = '超时惩罚';
break;
case 'Open temporarily your lock':
$card.find('h6').text('日常清洁-未达次数惩罚');
$card.find('.caption')[0].innerText = '所需次数';
$card.find('hr ~ .caption')[0].innerText = '次数未及时达标惩罚';
options = $($card.children()[1]).find('select option');
_times_options(options);
break;
case 'Maximum opening time':
$card.find('h6').text('日常清洁-超时惩罚');
$card.find('.caption')[0].innerText = '每次清洁最长解锁时间';
$card.find('hr ~ .caption')[0].innerText = '超时惩罚';
break;
case 'Verify your session':
$card.find('h6').text('验证锁照-未达次数惩罚');
$card.find('.caption')[0].innerText = '所需验证次数';
$card.find('hr ~ .caption')[0].innerText = '次数未及时达标惩罚';
options = $($card.children()[1]).find('select option');
_times_options(options);
break;
}
let a = $card.children()[4];
_penalty_option(a);
$(a).on('change', 'select', function () {
setTimeout(() => {
_penalty_option(a);
}, 10);
})
$(a).on('click', '.actions span:nth-child(1)', function () {
setTimeout(() => {
_penalty_option(a);
}, 10);
})
$(a).on('mouseover', '.ml-3 .text-warning', function () {
wait('.tooltip-inner', function () {
$(this).text('确保你有办法解冻自己(keyholder、其他扩展插件等),否则你将面临无限期冻结的风险!');
})
})
}
})
}
_options()
_content();
$form.find('select').change(function () {
_content()
})
})
break;
case 'Configure Verification picture':
$title.text('配置-验证锁照');
$body.children()[0].innerText = '定期为您的锁拍照,以证明您已上锁。';
extensions_mode($body, [
{
'text': '非累积的',
'tooltip': '在每次操作之后,您必须等待一定的时间才能重用扩展。',
'caption': '使用扩展后,您必须等待此时间才能再次使用它。',
},
{
'text': '无限制的',
'tooltip': '您可以随意多次使用扩展插件。',
}
]);
a = $body.find('hr ~ div')[1].children;
a[0].innerText = '验证锁照的可视性';
a[1].innerText = '指明谁可以看到你的锁照。';
b = a[2].children;
for (let i = 0; i < b.length; i++) {
let $option = $(b[i]);
let v = $option.val();
switch (v) {
case 'all':
$option.text('每个人都可以看到我的锁照');
break;
case 'keyholder':
$option.text('只有我和我的keyholder才能看到锁照');
break;
}
}
a = $body.find('hr ~ div')[2].children;
$o = $(a[0].children[0]);
o_children = $o.children();
$o.empty()
$o.append($(o_children[0]));
$o.append("启用验证惩罚")
$o.append($(o_children[1]));
$(o_children[1]).mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text('其他用户必须多数验证通过您的锁照,否则您将会受到处罚。')
})
})
if ($o.parent().next().length > 0) {
_penalty_box($o.parent().next());
}
$o.click(function () {
setTimeout(function () {
$o.parent().next().find('caption').innerText = '验证被多数拒绝时的惩罚';
_penalty_box($o.parent().next());
}, 10)
});
break;
case 'Configure Random Events':
$title.text('配置-随机事件');
$body.children()[0].innerText = '随机事件可能发生并更改您的计时器。时间增加或减少,冻结锁定,许多事情都可能发生。你不知道什么时候会发生,这会是一个惊喜。';
a = $body.children()[3].children;
a[0].innerText = '事件难度';
a[1].innerHTML = '您可以在这里找到有关此扩展如何工作的更多信息 → <a href="https://docs.chaster.app/extensions/random-events/" target="_blank" rel="noopener noreferrer">文档 <i class="far fa-external-link-alt"></i></a>.';
let buttons = $($body.children()[3]).find('button');
for (let i = 0; i < buttons.length; i++) {
let $button = $(buttons[i]);
let $button_title = $button.find('.action-title');
let $button_description = $button.find('.action-description');
let v = String($button_title.text()).trim();
switch (v) {
case 'Easy':
$button_title.text('简单');
$button_description.text('给新手准备,事件频繁,但对锁时间的影响很小(little impact)。');
break;
case 'Normal':
$button_title.text('普通');
$button_description.text('更多事件,对锁时间的有一些影响(some impact)。');
break;
case 'Hard':
$button_title.text('困难');
$button_description.text('更长的事件,您的锁可能会比预期的时间长得多。');
break;
case 'Expert':
$button_title.text('专家');
$button_description.text('你喜欢冒险!给那些不会因惧怕而放弃的人。');
break;
}
}
break;
case 'Configure Guess the Timer':
$title.text('配置-时间竞猜');
$body.children()[0].innerText = '正确猜测计时器,否则添加时间。计时器将会被隐藏,当你认为计时器结束时按下解锁按钮。如果计时器仍在运行,则会添加随机时间!';
a = $body.children()[3].children;
a[0].innerText = '增加的随机时间';
a[1].innerText = '如果您试图在计时器结束前解锁,将会增加随机时间。';
b = a[2].children[0].children;
b[0].children[0].innerText = '最小时间';
b[0].children[1].innerText = '增加的时间将会大于这个时间';
b[1].children[0].innerText = '最大时间';
b[1].children[1].innerText = '增加的时间不会超过此时间';
break;
}
switch (title_text) {
case 'Configure Share links':
case 'Configure Pillory':
case 'Configure Hygiene opening':
case 'Configure Dice':
case 'Configure Wheel of Fortune':
case 'Configure Tasks':
case 'Configure Penalties':
case 'Configure Verification picture':
case 'Configure Random Events':
case 'Configure Guess the Timer':
btns = $footer.find('button');
$(btns[0]).text('取消');
btns[1].children[0].innerText = '保存';
break;
}
} catch (e) {
console.warn(e)
}
})
}
function right_panel() {
wait('.panel-wrapper-right .panel-content', function () {
let $title = $(this).find('.panel-content-title .text-lg');
let title = String($title.text()).trim();
switch (title) {
case 'View a lock':
$title.text('查看锁');
$(this).wait('.panel-content-children > div:nth-child(3) > div', function () {
let a = $(this).children();
for (let i = 0; i < a.length; i++) {
let $group = $(a[i]);
let $group_title = $($group.children()[0]);
let $group_content = $group_title.find('~ div');
let group_title = $group_title.text();
let b;
switch (group_title) {
case 'Actions':
$group_title.text('操作');
b = $group_content.children();
for (let j = 0; j < b.length; j++) {
let $item = $(b[j]);
let item_title = b[j].children[1];
let v = item_title.innerText.trim();
switch (v) {
case 'Add or remove time':
item_title.innerText = '增加或减少时间';
$item.click(dialog);
break;
case 'Freeze the lock':
item_title.innerText = '冻结锁';
break;
case 'Unfreeze the lock':
item_title.innerText = '解冻锁';
break;
case 'Hide the timer':
item_title.innerText = '隐藏时间';
break;
case 'Unlock the wearer':
item_title.innerText = '为他解锁';
$item.click(dialog);
break;
case 'Lock settings':
item_title.innerText = '锁设置';
break;
}
}
break;
case 'Information':
$group_title.text('信息');
b = $group_content.children();
for (let j = 0; j < b.length; j++) {
let item_title = b[j].children[1];
let v = item_title.innerText.trim();
switch (v) {
case 'View combination':
item_title.innerText = '查看密码';
break;
case 'View history':
item_title.innerText = '查看更改历史';
break;
}
}
break;
case 'Community features':
$group_title.text('社区特征');
b = $group_content.children();
for (let j = 0; j < b.length; j++) {
if ($(b[j]).hasClass('card-content')) {
let card_title = b[j].children[1].children[0];
let card_caption = b[j].children[1].children[1];
waitIf(() => { return card_caption.innerText != '' }, function () {
let v = card_title.innerText.trim();
switch (v) {
case 'Share links':
card_title.innerText = '分享链接';
card_caption.innerText = '与他人分享您锁的加时投票链接';
break;
case 'Pillory':
card_title.innerText = '公开加时';
card_caption.innerText = '受到处罚时公开展示加时';
break;
case 'Hygiene opening':
card_title.innerText = '日常清洁';
card_caption.innerText = '暂时解锁用以清洁';
break;
}
})
} else {
b[j].children[0].children[1].innerText = '修改社区属性';
}
}
break;
case 'Extensions':
$group_title.text('扩展');
$group_content.find('.text-center a span').text('修改拓展');
$group_content.wait('.card-content', function () {
for (let j = 0; j < $(this).length; j++) {
let card_title = $(this)[j].children[1].children[0];
let card_caption = $(this)[j].children[1].children[1];
waitIf(() => { return card_caption.innerText != '' }, function () {
let v = card_title.innerText.trim();
switch (v) {
case 'Dice':
card_title.innerText = '骰子';
card_caption.innerText = '掷骰子尝试减少锁定时间';
break;
case 'Wheel of Fortune':
card_title.innerText = '幸运转盘';
card_caption.innerText = '转动幸运转盘试试你的运气';
break;
case 'Tasks':
card_title.innerText = '任务';
card_caption.innerText = '完成任务获得用来解锁的积分';
break;
case 'Penalties':
card_title.innerText = '惩罚';
card_caption.innerText = '如果您不按时执行操作,将受到惩罚';
break;
case 'Verification picture':
card_title.innerText = '验证锁照';
card_caption.innerText = '定期为您的锁拍照,以证明您已上锁';
break;
case 'Random Events':
card_title.innerText = '随机事件';
card_caption.innerText = '为你的锁带来随机性';
break;
case 'Guess the Timer':
card_title.innerText = '时间竞猜';
card_caption.innerText = '隐藏计时器,猜测计时器何时结束';
break;
}
})
}
});
break;
}
}
})
break;
}
})
}
function locks() {
wait('.Home', function () {
try {
$(this).children()[0].children[0].children[0].innerText = '我的锁计划';
} catch (e) {
console.warn(e)
}
})
wait('.btn-primary', function () {
$(this)[0].innerHTML = $(this)[0].innerHTML.replace('Create a lock', '创建新的锁计划');
$(this).click(function () {
dialog()
})
if ($(this).prev().text() == "You don't have any locks. Start a session now!") {
$(this).prev().text('你当前还没有正在执行的锁计划。立刻创建!');
$(this).parent().next().children().children().text('探索社区锁计划');
}
})
wait('.LockCard', function () {
try {
$(this).css('width', 'auto');
let a = $(this).find('.lock-card-content')[0].children;
// console.log(a[0].children[1].children[0].children[0].innerText)
let l = a[0].children[1].children[0].children[0];
l.innerText = l.innerText
.replace('Locked for', '已经锁了')
.replace('days', '天')
.replace('hours', '时')
.replace('mins', '分')
.replace('secs', '秒');
if ($(a[1]).find('.h5').text() == 'Tasks required to unlock') {
let $o = $(a[1]).find('.h5');
let o_children = $o.children();
$(o_children[0]).mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text('某些扩展要求您在解锁锁之前完成任务。');
})
})
$o.empty().append("需要完成任务才能解锁").append($(o_children[0]));
$(a[1]).find('.h5 ~ div div')[0].innerHTML =
$(a[1]).find('.h5 ~ div div')[0].innerHTML
.replace('Reach your task points goal', '达到你的任务积分目标');
}
a[2].children[0].innerHTML = a[2].children[0].innerHTML
.replace('Locked by', '管理者')
.replace('Test lock', '测试锁');
} catch (e) {
console.warn(e)
}
})
wait('.home-actions-col', function () {
try {
let a, b;
if ($($(this).children()[0]).hasClass('action-list-group')) {
b = $(this).children()[0].children;
for (let j = 0; j < b.length; j++) {
let $btn = $(b[j]);
let $btn_title = $btn.find('.action-info .action-title');
let $btn_description = $btn.find('.action-info .action-description');
let v = String($btn_title.text()).trim();
switch (v) {
case 'Ready to unlock':
$btn_title.text('已经可以解锁');
$btn_description.text('点这里解锁或增加时间');
$btn.click(function () {
dialog()
})
break;
}
}
}
a = $(this).find('h5');
for (let i = 0; i < a.length; i++) {
let title = a[i].innerText.trim();
b = $(a[i]).next().children();
switch (title) {
case 'Actions':
a[i].innerText = a[i].innerText.replace('Actions', '操作');
for (let j = 0; j < b.length; j++) {
let $btn = $(b[j]);
let $btn_title = $btn.find('.action-info .action-title');
let $btn_description = $btn.find('.action-info .action-description');
let v = String($btn_title.text()).trim();
switch (v) {
case 'Add more time':
$btn_title.text('添加时间');
$btn_description.text('给你的锁增加时间');
$btn.click(dialog);
break;
case 'Tasks to be completed':
$btn_title.text('待完成的任务');
$btn_description.text('完成你的任务以防止受到惩罚');
break;
case 'Submit a verification picture':
$btn_title.text('提交验证锁照');
$btn_description.text('你必须验证你是否上锁');
break;
case 'View the combination':
$btn_title.text('查看密码');
$btn_description.text('查看你锁盒的密码');
break;
case 'Archive lock':
$btn_title.text('归档锁');
$btn_description.text('从主页移除该锁');
$btn.click(dialog);
break;
case 'Complete your task':
$btn_title.text('完成你的任务');
$btn_description.text('你接取了一个任务');
break;
}
}
break;
case 'Extensions':
a[i].innerText = a[i].innerText.replace('Extensions', '扩展');
for (let j = 0; j < b.length; j++) {
let t1 = b[j].children[1].children[0],
t2 = b[j].children[1].children[1];
switch (t1.innerText) {
case 'Share links':
t1.innerText = '分享链接';
t2.innerText = '给他人发送加/减时投票链接';
break;
case 'Pillory':
t1.innerText = '公示加时';
t2.innerText = '受到处罚时公开展示加时';
break;
case 'Hygiene opening':
t1.innerText = '日常清洁';
t2.innerText = '暂时解锁用以清洁';
break;
case 'Dice':
t1.innerText = '骰子';
t2.innerText = '掷骰子尝试减少锁定时间';
break;
case 'Wheel of Fortune':
t1.innerText = '幸运转盘';
t2.innerText = '转动幸运转盘试试你的运气';
break;
case 'Tasks':
t1.innerText = '任务';
t2.innerText = '完成任务获得用来解锁的积分';
break;
case 'Penalties':
t1.innerText = '惩罚';
t2.innerText = '如果您不按时执行操作,将受到惩罚';
break;
case 'Verification picture':
t1.innerText = '验证锁照';
t2.innerText = '定期为您的锁拍照,以证明您已上锁';
break;
case 'Random Events':
t1.innerText = '随机事件';
t2.innerText = '为你的锁带来随机性';
break;
case 'Guess the Timer':
t1.innerText = '时间竞猜';
t2.innerText = '隐藏计时器,猜测计时器何时结束';
break;
}
}
break;
case 'Lock':
a[i].innerText = a[i].innerText.replace('Lock', '锁管理');
for (let j = 0; j < b.length; j++) {
let t1 = b[j].children[1].children[0],
t2 = b[j].children[1].children[1];
switch (t1.innerText) {
case 'Lock history':
t1.innerText = '修改历史';
t2.innerText = '查看锁修改历史';
break;
case 'Verifications':
t1.innerText = '核查锁照';
t2.innerText = '检查他人的任务和锁照';
break;
case 'Extensions':
t1.innerText = '拓展';
t2.innerText = '查看扩展信息';
break;
case 'Settings':
t1.innerText = '设置';
t2.innerText = '修改锁设置';
break;
}
}
break;
}
}
} catch (e) {
console.warn(e)
}
})
wait('.Home .mb-4 .caption', function () {
$(this).text('查看已归档的锁');
})
}
function combinationContent() {
setTimeout(() => {
let c = $('.lock-type-selector').next()[0].children;
let t = c[0].innerText;
if (t == 'Upload your combination picture') {
c[0].innerText = '上传您的密码照片';
c[1].innerText = '上传你的密码照片,一旦锁计划结束,你就可以再次看到它';
$(c[2]).find('.FileDropzone .dropzone-content div .mt-2').text('拖入图片或单击上传');
} else if (t == 'Generate a combination') {
c[0].innerText = '生成密码';
c[1].innerText = '生成一个密码用以设置在您的锁盒上';
let d = c[2].children[0].children;
d[0].innerText = '密码的位数';
d[4].innerText = '以下是要在您的锁盒上设置的生成代码。';
d[6].children[0].innerHTML = d[6].children[0].innerHTML.replace('Generate', '生成');
d[6].children[1].innerHTML = d[6].children[1].innerHTML.replace('Hide', '隐藏');
}
}, 100)
}
function _FE() {
try {
let a = $(this)[0].children;
// Features
a[1].innerHTML = a[1].innerHTML.replace('Community features', '社区特征');
let b = a[2].children[0].children;
for (let i = 0; i < b.length; i++) {
let $t = $(b[i].children[0].children[0].children[1].children[0].children[0]),
$ml = $($t.children()[0]),
$caption = $(b[i].children[0].children[1]),
tooltip = '',
title = $t[0].innerText.trim();
switch (title) {
case 'Share links':
$t.text('分享链接');
$t.append($ml);
$caption.text('与他人分享您锁的加时投票链接');
tooltip = '与其他人分享投票链接,要求他们给您的锁增加或减少时间。';
break;
case 'Pillory':
$t.text('公示加时');
$t.append($ml);
$caption.text('受到处罚时公开展示加时');
tooltip = '当您受到处罚时,将会在指定的时间段内公开显示。其他用户将能够为您的锁增加时间。';
break;
case 'Hygiene opening':
$t.text('日常清洁');
$t.append($ml);
$caption.text('暂时解锁用以清洁');
tooltip = '因为卫生很重要,所以定期解锁自己来清洁你的贞操设备。要小心,如果你解锁超过了允许的时间,你将受到处罚。';
break;
}
$ml.hover(function () {
wait('.tooltip-inner', function () {
$(this).text(tooltip);
})
});
$(b[i]).on('click', '.mt-2 button', dialog);
if ($(b[i]).find('.mt-2').length > 0) {
$(b[i]).find('.mt-2 button span').text('配置');
}
$(b[i]).find('label span').click(function () {
$(b[i]).wait('.mt-2', function () {
this.find('button span').text('配置');
})
})
}
let $ml = $(a[3]).find('.TooltipIconBadge').parent().parent();
$ml.hover(function () {
wait('.tooltip-inner', function () {
$(this).text('成为Plus会员可无限添加扩展。');
})
});
// Extensions
$(a[3]).find('.caption')[0].innerText = $(a[3]).find('.caption')[0].innerText
.replace('Infinite customizations', '无限定制');
b = a[4].children[0].children;
for (let i = 0; i < b.length; i++) {
let $t = $(b[i].children[0].children[0].children[1].children[0].children[0]),
$ml = $($t.children()[0]),
$caption = $(b[i].children[0].children[1]),
tooltip = '',
title = $t[0].innerText.trim();
switch (title) {
case 'Dice':
$t.text('骰子');
$t.append($ml);
$caption.text('掷骰子尝试减少锁定时间');
tooltip = '每一次你和机器人都会掷骰子。如果你掷的比机器人多,时间就会减少。如果机器人掷得更多,时间就会增加。';
break;
case 'Wheel of Fortune':
$t.text('幸运转盘');
$t.append($ml);
$caption.text('转动幸运转盘试试你的运气');
tooltip = '转动幸运转盘,更改锁的持续时间。为幸运转盘的每个格子配置操作:增加或减少时间、冻结锁或自定义文本。';
break;
case 'Tasks':
$t.text('任务');
$t.append($ml);
$caption.text('完成任务获得用来解锁的积分');
tooltip = '通过做任务来增加训练的趣味性。配置您要执行的任务,然后接收一个随机任务,或让其他用户投票决定任务。';
break;
case 'Penalties':
$t.text('惩罚');
$t.append($ml);
$caption.text('如果您不按时执行操作,将受到惩罚');
tooltip = '如果您不按时执行操作,将受到惩罚。';
break;
case 'Verification picture':
$t.text('验证锁照');
$t.append($ml);
$caption.text('定期为您的锁拍照,以证明您已上锁');
tooltip = '定期为您的锁拍照,以证明您已上锁。';
break;
case 'Random Events':
$t.text('随机事件');
$t.append($ml);
$caption.text('为你的锁带来随机性');
tooltip = '随机事件可能发生并更改您的计时器。时间增加或减少,冻结锁定,许多事情都可能发生。你不知道什么时候会发生,这会是一个惊喜。';
break;
case 'Guess the Timer':
$t.text('时间竞猜');
$t.append($ml);
$caption.text('隐藏计时器,猜测计时器何时结束');
tooltip = '正确猜测计时器,否则添加时间。计时器将会被隐藏,当你认为计时器结束时按下解锁按钮。如果计时器仍在运行,则会添加随机时间!';
break;
}
$ml.hover(function () {
wait('.tooltip-inner', function () {
$(this).text(tooltip);
})
});
$(b[i]).on('click', '.mt-2 button', dialog);
if ($(b[i]).find('.mt-2').length > 0) {
$(b[i]).find('.mt-2 button span').text('配置');
}
$(b[i]).find('label span').click(function () {
$(b[i]).wait('.mt-2', function () {
this.find('button span').text('配置');
})
})
}
} catch (e) {
console.warn(e)
}
}
function _new_lock(self) {
try {
var a = $(self)[0].children;
switch (a[0].innerText.trim()) {
case 'Create a new lock':
a[0].innerText = '创建新的锁计划';
a[1].innerHTML = '您正在给自己创建锁。<br>想给别人创建锁计划?<a href="/shared-locks/new">创建一个共享锁计划</a>';
break;
case 'Create a shared lock':
a[0].innerText = '创建共享锁计划';
a[1].innerHTML = '<div class="caption mb-4">您正在创建一个可以与其他人共享的锁计划。<br>想为自己创建一个锁计划吗? <a href="/locks/new">创建锁计划</a></div>';
break;
}
if (a[0].children[0] && a[0].children[0].innerText == 'Edit a shared lock') {
a[0].children[0].innerText = '编辑共享锁计划';
a[0].children[1].children[0].innerText = '操作';
$(a[0].children[1].children[0]).click(function () {
$(this).wait('~ .dropdown-menu', function () {
let a = $(this).children();
a[0].innerText = '预览';
let $o = $(a[1]);
let o_children = $o.children();
$o.text('以此为模版创建锁计划');
$o.append($(o_children[0]));
})
})
a[1].children[0].innerText = '复制并分享此链接以邀请其他用户加入您的共享锁计划。';
// a[1].children[2].innerHTML = a[1].children[2].innerHTML
// .replace('You can also', '你也可以')
// .replace('create an image', '生成一个图片')
// .replace('to share on social networks.', '在社交媒体上分享。');
}
let $btn_submit_span = $(self).find('button:submit span');
$btn_submit_span.text($btn_submit_span.text().replace('Create the lock', '创建锁计划'));
$(self).wait('form', function () {
if ($(this).parents('.EditSharedLock').length > 0) {
a = $(self).find('h4');
if (a[0] && a[0].innerText.trim() == 'General') {
a[0].innerHTML = a[0].innerHTML.replace('General', '信息');
$(a[0]).next().text('描述你的共享锁');
let $section = $(a[0]).next().next();
let b = $section.children();
for (let i = 0; i < b.length; i++) {
let item = b[i];
let subtitle = item.children[0].innerText.trim();
switch (subtitle) {
case 'Lock name':
item.children[0].innerText = '锁计划名';
break;
case 'Lock description':
item.children[0].innerText = '锁计划介绍';
break;
case 'Lock photo':
item.children[0].innerText = '锁计划图片';
break;
}
}
}
}
a = $(this).find('h4');
for (let i = 0; i < a.length; i++) {
let title = a[i].innerText.trim();
let $description = $(a[i]).next();
let $section = $description.next();
let c;
switch (title) {
case 'Initial duration':
a[i].innerHTML = a[i].innerHTML.replace('Initial duration', '初始时间');
$description.text('将在最小时间和最大时间之间选择一个随机时间。');
$section.find('.MinMaxDurationSelector h5')[0].innerText = '最小时间';
$section.find('.MinMaxDurationSelector h5')[1].innerText = '最大时间';
$section.find('.MinMaxDurationSelector .caption')[0].innerText = '最短时间';
$section.find('.MinMaxDurationSelector .caption')[1].innerText = '初始时间不会超过此时间';
break;
case 'Options':
a[i].innerHTML = a[i].innerHTML.replace('Options', '选项');
$description.text('配置您的锁');
c = $section.children();
for (let j = 0; j < c.length; j++) {
let t0 = c[j].children[0].children[1].children[0],
t1 = c[j].children[0].children[1].children[1];
let $ml;
let v = t0.innerText.trim();
switch (v) {
case 'Display remaining time':
t0.innerText = '显示剩余时间';
t1.innerText = '将显示剩余时间。';
break;
case 'Display time information from history':
t0.innerText = '显示时间更改历史信息';
t1.innerText = '时间更改将显示在锁历史记录中。';
break;
case 'Limit lock time':
t0.innerText = '限制锁的时间';
t1.innerText = '锁定不能超过下面设置的最长时间。';
$(c[j].children[0]).click(function () {
$(this).wait('~ .checkbox-list-group-footer', function () {
$(this).find('.form-label').text('自定义最长时间');
$(this).find('.caption').text('在这段时间之后,您将能够释放自己,而不考虑扩展。');
})
})
break;
case 'Offer your session':
$ml = $(t0.children[0]);
t0.innerText = '设置keyholder';
t1.innerText = '请求另一个用户控制你的锁';
$ml.hover(function () {
wait('.tooltip-inner', function () {
$(this).text('所选的钥匙持有者(keyholder)将能够修改锁的时间、冻结锁定或修改扩展。')
})
});
$(t0).append($ml);
$(c[j].children[0]).click(function () {
wait('.checkbox-list-group-item:nth-child(' + (j + 1) + ') .checkbox-list-group-footer', function () {
try {
$(this).find('.form-label').text('输入keyholder的用户名');
$(this).find('.caption').text('您也可以将其留空,稍后选择一个keyholder,或者向某人发送邀请链接。');
} catch (e) {
console.warn(e)
}
})
})
break;
case 'Test lock':
$ml = $(t0.children[0]);
t0.innerText = '测试锁';
t1.innerText = '测试锁不计入您的统计数据。';
$ml.hover(function () {
wait('.tooltip-inner', function () {
$(this).text('在不影响统计数据的情况下尝试Chaster。')
})
});
$(t0).append($ml);
break;
case 'Limit the number of locked users':
t0.innerText = '限制上锁的人数';
t1.innerText = '限制同时锁定的用户数。';
break;
case 'This is a findom lockPlus':
let $o = $(t0);
let o_children = $o.children();
t0.innerText = '付费锁计划';
t1.innerText = '如果你使用该锁计划需要费用,你必须选择这个选项。';
$(t0).append($(o_children[0]));
$(t0).append($(o_children[1]));
$(o_children[0]).hover(function () {
wait('.tooltip-inner', function () {
$(this).text('让佩戴者知道你的锁计划要求支付费用。');
})
});
$(o_children[1]).hover(function () {
wait('.tooltip-inner', function () {
$(this).text('你必须订阅Chaster Plus才能获取付费贞操计划的收入');
})
});
break;
}
}
break;
case 'Security':
a[i].innerHTML = a[i].innerHTML.replace('Security', '安全性');
$description.text('保护您的锁计划');
c = $section.children();
for (let j = 0; j < c.length; j++) {
let $item = $(c[j]);
let $subtitle = $item.find('.checkbox-label-title');
let $caption = $item.find('.checkbox-label-title ~ .caption');
let v = $subtitle[0].innerText.trim();
switch (v) {
case 'Hide this lock from your public profile':
$subtitle.text('在您的个人介绍中隐藏此锁');
$caption.text('共享锁不会出现在您的个人资料或 “探索” 界面。');
break;
case 'The user must contact me before loading the lock':
$subtitle.text('用户必须在加入该锁计划之前与我联系');
$caption.text('这纯粹是指示性的,并要求用户在加入锁计划之前与您联系。');
break;
case 'Set a password':
$subtitle.text('设置一个密码');
$caption.text('用户必须使用密码才能加入锁计划。');
if (c[j].children[1]) {
$(c[j].children[1]).find('.form-label').text('密码');
}
$(c[j].children[0]).click(function () {
$(this).wait('~ .checkbox-list-group-footer', function () {
$(this).find('.form-label').text('密码');
})
})
break;
}
}
break;
case 'Actions':
a[i].innerHTML = a[i].innerHTML.replace('Actions', '操作');
$description.text('编辑你的共享锁');
c = $section.children();
for (let j = 0; j < c.length; j++) {
let $item = $(c[j]);
let $subtitle = $($item.children()[0].children[0]);
let $caption = $($item.children()[0].children[1]);
let v = $subtitle[0].innerText.trim();
switch (v) {
case 'Archive your lock':
$subtitle.text('归档你的锁');
$caption.text('你将会在归档锁界面看到它');
break;
}
}
break;
}
}
// Features and Extensions
if ($(self).parents('.CreateLock').length > 0) {
$(self).wait('div:nth-child(7):not(.loader-container):not(.card-content)', _FE);
}
if ($(self).parents('.EditSharedLock').length > 0) {
$(self).wait('div:nth-child(10):not(.loader-container):not(.card-content)', _FE);
}
// Lock combination
if ($(self).parents('.CreateLock').length > 0) {
wait('.CombinationFormView .caption', function () {
combinationContent()
let c = $(this).parent()[0].children;
c[1].innerText = '选择您的密码类型';
c[2].children[0].children[0].children[1].children[0].innerText = '密码照片';
c[2].children[0].children[0].children[1].children[1].innerText = '上传你的密码照片,我们会在解锁时给你看。';
c[2].children[1].children[0].children[1].children[0].innerText = '生成密码';
c[2].children[1].children[0].children[1].children[1].innerText = '该应用程序将生成一个密码用以设置在您的锁盒上。';
$(c[2]).find('.list-group').click(combinationContent)
})
}
})
} catch (e) {
console.warn(e)
}
}
function locks_new() {
wait('.CreateLock>div>div>div', function () {
_new_lock(this);
})
}
function locks_history() {
wait('.LockSidebarView', function () {
$(this).prev().find('div h3').text('锁更改历史');
})
wait('.LockSidebarView .card-content', function () {
$(this).find('h4').text('历史');
$(this).find('.caption').text('以下是您的锁更改的历史记录。');
})
}
function locks_settings() {
wait('.LockSidebarView', function () {
$(this).prev().find('div h3').text('锁设置');
let a = $(this)[0].children[0].children[0].children[1].children;
for (let ai = 0; ai < a.length; ai++) {
switch (a[ai].innerText.trim()) {
case 'Lock settings':
a[ai].innerText = '锁设置';
break;
case 'Manage your lock here.':
a[ai].innerText = '在此处管理您的锁。';
let b = a[ai + 1].children;
for (let i = 0; i < b.length; i++) {
let t0 = b[i].children[0].children[0],
t1 = b[i].children[0].children[1];
switch (t0.innerText.trim()) {
case 'Maximum lock date':
t0.innerText = '最长锁期';
t1.innerText = '您的锁不能超过定义的日期。';
break;
case 'Initial unlock date':
t0.innerHTML = t0.innerHTML.replace('Initial unlock date', '最初解锁时间');
break;
}
}
break;
case 'Permissions':
a[ai].innerText = '权限';
break;
case 'Trust your keyholder':
a[ai].innerText = '信任你的keyholder';
a[ai + 1].children[0].children[0].children[0].innerText = '信任我的keyholder';
a[ai + 1].children[0].children[0].children[1].innerText = '您的keyholder可以更改锁的设置。';
if (a[ai + 1].children[0].children[1].children[0].children[0].innerText == 'Trusted') {
a[ai + 1].children[0].children[1].children[0].children[0].innerText = '已信任';
}
break;
case 'Advanced options':
a[ai].innerText = '高级设置';
break;
case 'Archive your lock':
a[ai].innerText = '归档你的锁';
a[ai + 1].children[0].children[0].children[0].innerText = '归档你的锁';
a[ai + 1].children[0].children[0].children[1].innerText = '在主页中隐藏您的锁';
a[ai + 1].children[0].children[1].children[0].innerText = '归档';
$(a[ai + 1]).find('button').click(dialog)
break;
}
}
})
}
function locks_settings_keyholder() {
wait('.LockSidebarView > div > div > div:nth-child(2) > form', function () {
$('.LockSidebarView').prev().find('h3.mb-0').text('锁设置');
$(this).find('button span').text('保存设置');
})
wait('.LockSidebarView > div > div > div:nth-child(2) > form div', function () {
let a = $(this).children();
for (let i = 0; i < a.length; i++) {
let text = a[i].innerText.trim();
switch (text) {
case 'Lock settings':
a[i].innerText = '锁设置';
break;
case 'Manage the lock':
a[i].innerText = '管理锁';
$(a[i + 1]).find('.checkbox-label-title').text('在历史记录中显示时间信息');
$(a[i + 1]).find('.checkbox-label-title ~ .caption').text('时间改变将会显示在锁改变历史记录中');
break;
}
}
})
}
function _mode($mode) {
let mode_icon = $($mode.children()[0]);
let t = $mode.text();
let tip;
if (t.indexOf('Non cumulative') != -1) {
t = t.replace('Non cumulative: Next action after', '不累计: 间隔');
tip = '在每次操作之后,您必须等待一定的时间才能重用扩展。';
} else if (t.indexOf('Cumulative') != -1) {
t = t.replace('Cumulative: New chance every', '累计: 增加使用次数每');
tip = '扩展的可使用次数会随时间累积。';
} else if (t.indexOf('Unlimited actions') != -1) {
t = t.replace('Unlimited actions', '无限制的');
tip = '您可以随意多次使用扩展。';
}
$mode.parent().parent().mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text(tip);
})
})
$mode.empty().append(mode_icon).append(t);
}
function locks_settings_extensions() {
wait('.LockSidebarView', function () {
$(this).prev().find('div h3').text('拓展设置');
})
wait('.LockSidebarView>div>div > div:nth-child(2) > div', function () {
try {
let a, b;
a = $(this)[0].children;
if (a.length > 0) {
a[0].innerText = '社区特征';
b = a[1].children;
for (let i = 0; i < b.length; i++) {
let $card = $(b[i]);
let $title = $card.find('.h5');
let $ml = $card.find('.h5 ~ .ml-2');
let $caption = $card.find('.mb-2 ~ .caption');
let v = String($title.text()).trim();
let tooltip;
switch (v) {
case 'Share links':
$title.text('分享链接');
tooltip = '与其他人分享投票链接,要求他们给您的锁增加或减少时间。';
for (let j = 0; j < $caption.children().length; j++) {
$caption.children()[j].innerHTML = $caption.children()[j].innerHTML
.replace('Add time', '加时')
.replace('Remove time', '减时')
.replace('Random option enabled', '随机选项启用');
}
break;
case 'Pillory':
$title.text('公示加时');
tooltip = '当您受到处罚时,将会在指定的时间段内公开显示。其他用户将能够为您的锁增加时间。';
$caption.children()[0].innerText = '每票增加 ' + $caption.children()[0].innerText.replace(' added per vote', '');
break;
case 'Hygiene opening':
$title.text('日常清洁');
tooltip = '因为卫生很重要,所以定期解锁自己来清洁你的贞操设备。要小心,如果你解锁超过了允许的时间,你将受到处罚。';
let $mode = $card.find('.mb-2 .caption-dark span span');
_mode($mode);
$caption.children()[0].innerText = $caption.children()[0].innerText
.replace('Time allowed', '允许解锁时间')
.replace('penalty for exceeding time', '超时惩罚');
break;
}
$ml.mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text(tooltip);
})
});
}
}
a = $(this)[1].children;
if (a.length > 0) {
a[0].innerText = '扩展';
b = a[1].children;
for (let i = 0; i < b.length; i++) {
let $card = $(b[i]);
let $title = $card.find('.h5');
let $ml = $card.find('.h5 ~ .ml-2');
let $caption = $($card.find('.mb-2 ~ .caption')[0]);
let v = String($title.text()).trim();
let tooltip;
let $mode;
let lis;
let c;
switch (v) {
case 'Dice':
$title.text('骰子');
tooltip = '每一次你和机器人都会掷骰子。如果你掷的比机器人多,时间就会减少。如果机器人掷得更多,时间就会增加。';
$mode = $card.find('.mb-2 .caption-dark span span');
_mode($mode);
$caption.children()[0].innerText = $caption.children()[0].innerText.replace('Time multiplier', '时间倍数');
break;
case 'Wheel of Fortune':
$title.text('幸运转盘');
tooltip = '转动幸运转盘,更改锁的持续时间。为幸运转盘的每个格子配置操作:增加或减少时间、冻结锁或自定义文本。';
$mode = $card.find('.mb-2 .caption-dark span span');
_mode($mode);
lis = $caption.children()[0].children;
for (let j = 0; j < lis.length; j++) {
let li = lis[j];
let v = li.innerText.trim();
switch (v) {
case 'Freeze / unfreeze':
li.innerText = '冻结 / 解冻';
break;
case 'Freeze':
li.innerText = '冻结';
break;
case 'Unfreeze':
li.innerText = '解冻';
break;
}
if (v.indexOf('Pillory') != -1) {
li.innerText = li.innerText.replace('Pillory', '公示');
}
}
break;
case 'Tasks':
$title.text('任务');
tooltip = '通过做任务来增加训练的趣味性。配置您要执行的任务,然后接收一个随机任务,或让其他用户投票决定任务。';
$mode = $card.find('.mb-2 .caption-dark span span');
_mode($mode);
lis = $caption.children()[0].children;
for (let j = 0; j < lis.length; j++) {
let $a = $(lis[j]);
let t = $a[0].innerText.trim();
switch (t) {
case 'Assign yourself a random task':
$a[0].innerHTML = $a[0].innerHTML.replace('Assign yourself a random task', '随机分配任务');
break;
case 'Choose your task':
$a[0].innerHTML = $a[0].innerHTML.replace('Choose your task', '自行选择任务');
break;
case 'Edit the list of tasks':
$a[0].innerHTML = $a[0].innerHTML.replace('Edit the list of tasks', '可编辑任务列表');
break;
case 'Tasks assigned by the keyholder':
$a[0].innerHTML = $a[0].innerHTML.replace('Tasks assigned by the keyholder', '任务由keyholder分配');
break;
}
if (t.indexOf('points required') != -1) {
$a[0].innerHTML = $a[0].innerHTML.replace('points required', '积分需要')
}
}
for (let k = 0; k < $caption.find('~h6').length; k++) {
let t = $caption.find('~h6')[k];
let v = t.innerText.trim();
switch (v) {
case 'List of tasks':
t.innerText = '任务列表';
break;
case 'Penalty for abandoning a task':
t.innerText = '放弃惩罚';
let lis = $(t).next().children()[0].children;
for (let j = 0; j < lis.length; j++) {
let li = lis[j];
li.innerText = li.innerText
.replace('Add', '加时')
.replace('Freeze the lock', '冻结')
.replace('Pillory for', '公示');
}
break;
}
}
if ($caption.next().text() == 'Configure the tasks you want to do.') {
$caption.next().text('自行配置你想做的任务');
}
break;
case 'Penalties':
$title.text('惩罚');
tooltip = '如果您不按时执行操作,将受到惩罚。';
c = $card.find('.mb-2 ~ div')[0].children;
for (let j = 0; j < c.length; j++) {
let $item = $(c[j]);
let d = $item.find('.mb-2 .mb-2').children();
let title = d[0].innerText.trim();
switch (title) {
case 'Number of dice rolls required':
d[0].innerText = '掷骰子次数要求'; break;
case 'Number of times you will have to turn the wheel of fortune':
d[0].innerText = '转动幸运转盘次数要求'; break;
case 'Number of to-do tasks required':
d[0].innerText = '做任务数量要求'; break;
case 'Time required to do an action':
d[0].innerText = '做任务限时'; break;
case 'Number of temporary openings required':
d[0].innerText = '日常清洁次数要求'; break;
case 'Maximum opening time allowed':
d[0].innerText = '清洁解锁限时'; break;
case 'Number of verifications required':
d[0].innerText = '上传验证锁照次数要求'; break;
}
d[1].innerText = d[1].innerText
.replace('daily', '每天');
let e = $item.find('.mb-2 .mb-2').next()[0];
let text = e.innerText.trim();
switch (text) {
case 'Penalty for not rolling the dice in time':
e.innerText = '掷骰子-未达次数惩罚'; break;
case 'Penalty for not turning the wheel of fortune enough times':
e.innerText = '幸运转盘-未达次数惩罚'; break;
case 'Penalty for failing to complete all required tasks':
e.innerText = '任务-未达次数惩罚'; break;
case 'Penalty for not completing the task in time':
e.innerText = '任务-超时惩罚'; break;
case 'Penalty for not opening your lock the required number of times':
e.innerText = '日常清洁-未达次数惩罚'; break;
case 'Penalty for not relocking in time':
e.innerText = '日常清洁-超时惩罚'; break;
case 'Penalty for not verifying your session enough times':
e.innerText = '验证锁照-未达次数惩罚'; break;
}
let lis = $item.find('ul li');
for (let k = 0; k < lis.length; k++) {
let li = lis[k];
li.innerText = li.innerText
.replace('Add', '加时')
.replace('Freeze the lock', '冻结')
.replace('Pillory for', '公示');
}
}
break;
case 'Verification picture':
$title.text('验证锁照');
tooltip = '定期为您的锁拍照,以证明您已上锁';
$mode = $card.find('.mb-2 .caption-dark span span');
_mode($mode);
c = $card.find('.mb-2 ~ div').children();
for (let j = 0; j < c.length; j++) {
let $item = $(c[j]);
if ($item.find('span span span').text() == 'Peer verification') {
$item.find('span span span').text('启用验证惩罚');
$item.find('span span span').parent().parent().mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text('您的图片将由其他成员验证。');
})
})
}
if ($item.hasClass('caption') && String($item.find('span').text()).trim() == 'Visible to everyone') {
$item.find('span')[0].innerHTML = $item.find('span')[0].innerHTML.replace('Visible to everyone', '对所有人可见');
} if ($item.hasClass('caption') && String($item.find('span').text()).trim() == 'Only visible to the keyholder') {
$item.find('span')[0].innerHTML = $item.find('span')[0].innerHTML.replace('Only visible to the keyholder', '仅对keyholder可见');
}
if ($item.hasClass('mt-3') && $item.text() == 'Penalty for having a rejected picture') {
$item.text('验证锁照被多数拒绝时的惩罚');
}
if ($item.find('ul li').length > 0) {
for (let k = 0; k < $item.find('ul li').length; k++) {
let li = $item.find('ul li')[k];
li.innerText = li.innerText
.replace('Add', '加时')
.replace('Freeze the lock', '冻结')
.replace('Pillory for', '公示');
}
}
}
break;
case 'Random Events':
$title.text('随机事件');
tooltip = '随机事件可能发生并更改您的计时器。时间增加或减少,冻结锁定,许多事情都可能发生。你不知道什么时候会发生,这会是一个惊喜。';
$mode = $card.find('.mb-2 .caption-dark span span');
_mode($mode);
let text = $caption.find('p').text();
if (text.indexOf('Easy') != -1) {
$caption.find('p').text('简单: 给新手准备,事件频繁,但对锁时间的影响很小(little impact)。');
} else if (text.indexOf('Normal') != -1) {
$caption.find('p').text('普通: 更多事件,对锁时间的有一些影响(some impact)。');
} else if (text.indexOf('Hard') != -1) {
$caption.find('p').text('困难: 更长的事件,您的锁可能会比预期的时间长得多。');
} else if (text.indexOf('Expert') != -1) {
$caption.find('p').text('专家: 你喜欢冒险!给那些不会因惧怕而放弃的人。');
}
break;
case 'Guess the Timer':
$title.text('时间竞猜');
tooltip = '正确猜测计时器,否则添加时间。计时器将会被隐藏,当你认为计时器结束时按下解锁按钮。如果计时器仍在运行,则会添加随机时间!';
$mode = $card.find('.mb-2 .caption-dark span span');
_mode($mode);
$caption.find('p').text(
$caption.find('p').text()
.replace('Random time between', '随机加时')
.replace('and', '到')
);
break;
}
$ml.mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text(tooltip);
})
});
}
}
} catch (e) {
console.warn(e)
}
})
}
function locks_settings_extensions_edit() {
wait('.LockSidebarView', function () {
$(this).prev().find('h3.mb-0').text('编辑拓展');
})
wait('.LockSidebarView > div > div > div:nth-child(2)', function () {
$(this).find('button.btn span').text('保存扩展设置');
})
wait('.LockSidebarView > div > div > div:nth-child(2) > div:nth-child(1):not(.loader-container)', _FE)
}
function locks_extensions() {
wait('.LockSidebarView', function () {
let $title = $(this).prev().find('div h3');
let title = String($title.text()).trim();
let a, b;
switch (title) {
case 'Share links':
$title.text('分享链接');
wait('.LockSidebarView .LinkExtension', function () {
a = $(this).children();
a[0].innerText = '目标';
a[1].innerText = '当前投票数量 / 最少投票数量';
if (a[4].innerText == 'Share your link') {
a[4].innerText = '分享链接';
a[5].innerText = '复制并分享以下链接以邀请其他人给您的锁加时投票。';
}
})
break;
case 'Pillory':
$title.text('公示');
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container)', function () {
a = $(this).children();
a[0].innerText = '公示';
a[1].innerText = '当您受到处罚时,将会在指定的时间段内公开显示。';
b = $(this).find('.card-content');
for (let i = 0; i < b.length; i++) {
let $card = $(b[i]);
let $title = $card.children()[0];
let $caption = $card.children()[1];
let title = $title.innerText;
switch (title) {
case 'Information':
$title.innerText = '信息';
if ($caption.innerText == 'You are not currently pilloried.') {
$caption.innerText = '你目前没有被公示。';
} else if ($caption.innerText == 'Here is the information about the pillory.') {
$caption.innerText = '下面是你的公示信息。';
}
break;
case 'Put in pillory':
$title.innerText = '信息';
$caption.innerText = $caption.innerText
.replace('You can put ', '你可以让')
.replace('on the pillory at any time if you wish.', '公示任意时间,只要你愿意');
let btn = $($card.children()[2]).find('button.btn')[0];
btn.innerHTML = btn.innerHTML.replace('Put in pillory', '公示');
$(btn).click(dialog);
$card.children()[3].innerText = '它将在您指定的时间内显示在 公开锁(Activity) 页面上,访问者可以给锁增加时间。';
break;
}
}
});
break;
case 'Hygiene opening':
$title.text('日常清洁');
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container)', function () {
a = $(this).children();
a[0].innerText = '日常清洁';
a[1].innerText = '因为卫生很重要,所以定期解锁自己来清洁你的贞操设备。';
b = a[2].children;
b[0].innerText = b[0].innerText
.replace('You will have', '你将会有')
.replace('to clean yourself before closing the lock.', '去清理你的锁');
b[1].innerText = b[1].innerText
.replace('Be careful, if you exceed the allowed time,', '要小心,如果你解锁超过了允许的时间,你的锁时间将会增加')
.replace('will be added to your lock.', '');
if (a[3].children[0].innerText == 'Only your keyholder can temporarily open your lock.') {
a[3].children[0].innerText = '只有你的keyholder能够给你打开日常清洁';
}
});
break;
case 'Dice':
$title.text('日常清洁');
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container)', function () {
a = $(this).children();
a[0].innerText = '骰子';
a[1].innerText = '每一次你和机器人都会掷骰子。如果你掷的比机器人多,时间就会减少。如果机器人掷得更多,时间就会增加。';
b = $(this).find('.dices .dice-col');
b[0].children[1].innerText = '你';
b[1].children[1].innerText = '机器人';
$(this).find('.mt-4 button').text('掷骰子');
let self = this;
$(this).find('.mt-4 button').click(function () {
let t = $(self).find('.mt-4 .alert span')[0];
t.innerText = t.innerText.replace('Added', '增加了').replace('Removed', '减少了');
})
});
break;
case 'Wheel of Fortune':
$title.text('幸运转盘');
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container)', function () {
a = $(this).children();
a[0].innerText = '幸运转盘';
a[1].innerText = '转动幸运转盘试试你的运气!';
// $(this).find('.mb-4 button').text('转动');
});
break;
case 'Tasks':
$title.text('任务');
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container)', function () {
a = $(this).children();
if (a[0].innerText == 'Tasks') {
a[0].innerText = '任务';
a[1].innerText = a[1].innerText
.replace('Receive a random task, or ask other users to vote!', '随机接取任务,或让其他用户投票!');
b = $(a[2]).find('button');
b.click(dialog);
for (let i = 0; i < b.length; i++) {
let $btn = $(b[i]);
let v = String($btn.find('span').text()).trim();
let text = String($btn.text()).trim();
if (v == 'Get a random task') {
$btn.find('span').text('随机获取任务');
}
if (text == 'Let other users choose') {
$btn[0].innerHTML = $btn[0].innerHTML.replace('Let other users choose', '让其他用户投票决定');
}
}
// points_card
if ($(this).parent().prev().find('.card-content h5').text() == 'Points') {
let $points_card = $(this).parent().prev().find('.card-content h5').parent();
// $points_card.find('h5').text('积分');
if ($points_card.find('h5 ~ .caption').text() == 'Earn more points by completing tasks.') {
$points_card.find('h5 ~ .caption').text('通过完成任务赚取更多积分。');
}
}
a[4].innerText = '操作';
a[5].innerText = a[5].innerText
.replace('Receive a random task, or ask other users to vote!', '随机接取任务,或让其他用户投票!');
let $tasks = $(a[7]);
if ($(a[6]).hasClass('mb-3')) {
if ($(a[6]).find('button').text() == 'Configure tasks') {
$(a[6]).find('button').text('修改任务');
}
} else {
$tasks = $(a[6]);
}
$tasks.find('button').css('white-space', 'nowrap');
$tasks.find('button span').text('接取');
$tasks.find('button').click(dialog)
} else if (a[0].innerText == 'Current task') {
a[0].innerText = '当前任务';
a[1].children[0].innerText = '你已经接取了一个任务!'
a[3].innerText = '完成你的任务,并指示你是否完成了任务。';
$(a[4]).find('button span')[0].innerText = '我已完成任务';
$(a[4]).find('button span')[1].innerText = '放弃任务';
$($(a[4]).find('button')[1]).mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text('如果你放弃任务,你将不会得到积分点');
})
})
}
});
break;
case 'Penalties':
$title.text('惩罚');
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container)', function () {
let a = $(this).children();
a[0].children[0].innerText = '我的任务';
a[0].children[1].innerText = '以下是为了避免受到惩罚而要执行的任务。';
});
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container) .basic-grid .card-content', function () {
try {
for (let i = 0; i < $(this).length; i++) {
let $card = $($(this)[i]);
let $title = $card.find('h5');
let $caption = $card.find('h5 ~ .caption');
let $a = $card.find('a');
let $time = $card.find('.mb-2:nth-child(2) span');
let title = String($title.text()).trim();
switch (title) {
case 'Dice':
$title.text('骰子');
$caption.text('掷骰子');
$a.text('跳转骰子页面');
break;
case 'Wheel of Fortune':
$title.text('幸运转盘');
$caption.text('转转盘');
$a.text('跳转幸运转盘页面');
break;
case 'Tasks':
$title.text('任务');
$caption.text('做任务');
$a.text('跳转任务页面');
break;
case 'Hygiene opening':
$title.text('日常清洗');
$caption.text('打开你的锁清洁');
$a.text('跳转日常清洗页面');
break;
case 'Verification picture':
$title.text('验证锁照');
$caption.text('上传锁照');
$a.text('跳转验证锁照页面');
break;
}
$time[0].innerHTML = $time[0].innerHTML.replace('remaining', '剩余');
let $view = $card.find('.text-link');
$view.text('查看惩罚');
$view.click(function () {
wait('.popover-body > div', function () {
let a = $(this)[$(this).length - 1].children;
let t = a[0].innerText.trim();
switch (t) {
case 'Penalty for not rolling the dice in time':
a[0].innerText = '掷骰子-未达次数惩罚';
break;
case 'Penalty for not turning the wheel of fortune enough times':
a[0].innerText = '幸运转盘-未达次数惩罚';
break;
case 'Penalty for failing to complete all required tasks':
a[0].innerText = '任务-未达次数惩罚';
break;
case 'Penalty for not completing the task in time':
a[0].innerText = '任务-超时惩罚';
break;
case 'Penalty for not opening your lock the required number of times':
a[0].innerText = '日常清洁-未达次数惩罚';
break;
case 'Penalty for not relocking in time':
a[0].innerText = '日常清洁-超时惩罚';
break;
case 'Penalty for not verifying your session enough times':
a[0].innerText = '验证锁照-未达次数惩罚';
break;
}
let lis = $(this).find('ul li');
for (let j = 0; j < lis.length; j++) {
let li = lis[j];
li.innerText = li.innerText
.replace('Add', '加时')
.replace('Freeze the lock', '冻结')
.replace('Pillory for', '公示');
}
})
})
}
} catch (e) {
console.warn(e)
}
})
break;
case 'Verification picture':
$title.text('验证锁照');
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container)', function () {
a = $(this).children()[0].children;
a[0].innerText = '验证锁照';
a[1].innerText = '定期为您的锁拍照,以证明您已上锁。';
$(a[2]).find('button span').text('提交一个新的锁照');
function _v($p) {
let $o = $p.find('>.mb-4');
let o_children = $o.children();
$(o_children).children()[0].innerText = '验证码:';
$o.empty().append($(o_children)).append('请把验证码写在一张纸上,然后放在你的贞操设备旁边拍张照片。这将证明你刚刚拍了这张照片。');
$p.find('>hr ~ h4').text('上传您的验证锁照');
$p.find('>hr ~ h4').next().text('拍下你带验证码的贞操设备的照片,然后上传到这里。');
}
$($(this).children()[0]).on('click', 'button', function () {
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container) .card-content div:nth-child(3) .mb-4', function () {
_v($(this).parent());
})
})
if ($(a[2]).find('>.mb-4').length > 0) {
_v($(a[2]));
}
});
break;
case 'Random Events':
$title.text('随机事件');
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container)', function () {
a = $(this).children()[0].children;
a[0].innerText = '随机事件';
a[1].innerText = '以下是发生的随机事件的历史。';
});
break;
case 'Guess the Timer':
$title.text('时间竞猜');
wait('.LockSidebarView >div>div >div:nth-child(2) >div:not(.loader-container)', function () {
a = $(this).children();
a[0].innerText = '猜猜看!';
a[1].innerText = '当你认为时间已到时按下按钮。如果没有,时间将被增加!';
});
break;
}
})
}
function verifications() {
wait('.title-row', function () {
$(this)[0].children[0].children[0].innerText = '用户核查';
$(this)[0].children[0].children[1].innerText = '检查他人的任务和锁照';
})
wait('.verification-row', function () {
let a = $(this)[0].children[0].children[1].children;
a[0].innerText = '什么需要检查?';
a[1].innerText = '验证图片';
a[2].children[1].children[0].innerText = '验证码';
a[2].children[1].children[1].innerText = '图片中的验证码是否和给出的相同';
a[3].children[1].children[0].innerText = '贞操锁';
a[3].children[1].children[1].innerText = '贞操锁是否锁好';
let btns = $(this)[0].children[1].children[0].children[1].children;
btns[0].children[1].innerText = '拒绝';
btns[1].children[1].innerText = '通过';
let prev = $(this)[0].children[1].children[1].children[0];
prev.innerHTML = prev.innerHTML.replace('Previous', '上一个');
let next = $(this)[0].children[1].children[1].children[2];
next.innerHTML = next.innerHTML.replace('Next', '下一个');
})
}
function shared_locks() {
wait('.SharedLocks', function () {
let spans = $(this).find('.TabHeader .selector-title span');
spans[0].innerText = spans[0].innerText
.replace('Shared locks', '共享锁');
spans[1].innerText = spans[1].innerText
.replace('Archived locks', '归档锁')
$(this).find('a.btn')[0].innerHTML = $(this).find('a.btn')[0].innerHTML
.replace('Create a shared lock', '创建共享锁计划');
})
}
function shared_locks_lock() {
wait('.EditSharedLock>div>div>div', function () {
_new_lock(this);
})
}
function shared_locks_new() {
wait('.EditSharedLock>div>div>div', function () {
_new_lock(this);
})
}
function keyholder(ss) {
wait('.Keyholder>div>div', function () {
let spans = $(this).find('.TabHeader .selector-title span');
for (let i = 0; i < spans.length; i++) {
let span = spans[i];
let v = span.innerText.trim();
switch (v) {
case 'Locked':
span.innerText = '上锁中';
break;
case 'Unlocked':
span.innerText = '已解锁';
break;
case 'Deserted':
span.innerText = '已放弃';
break;
case 'Archived':
span.innerText = '已归档';
break;
}
}
if (ss[1]) {
right_panel()
}
})
}
function explore() {
wait('.Explore>div .mt-4', function () {
$(this).children()[0].innerText = '查看所有共享锁计划';
})
wait('.Explore>div .mb-4', function () {
$($(this)[0]).find('.mb-2 .flex-grow-1 .explore-item-title').text('社区锁计划');
$($(this)[0]).find('.mb-2 .flex-grow-1 .caption').text('社区用户创建的锁');
$($(this)[1]).find('.mb-2 .flex-grow-1 .explore-item-title').text('给新手的锁计划');
$($(this)[1]).find('.mb-2 .flex-grow-1 .caption').text('初次接触贞洁世界');
$(this).find('a button').text('查看更多');
})
}
function explore_search() {
wait('.ExploreSearch', function () {
let $a = $(this).prev();
$a.find('.mr-2').text('筛选');
let btns = $a.find('button');
$(btns[0]).append($('<span> 初始时间 </span>'));
$(btns[1]).append($('<span> 拓展 </span>'));
btns[2].children[0].innerText = '是否付费';
$(btns[0]).click(function () {
wait('.popover-body', function () {
let $pop = $($(this)[$(this).length - 1]);
$pop.find('.caption').text('选择初始时间');
$pop.find('.form-label')[0].innerText = '最小初始时间';
$pop.find('.form-label')[1].innerText = '最大初始时间';
$pop.next().find('button')[0].innerText = '清除';
$pop.next().find('button')[1].innerText = '保存';
})
})
$(btns[1]).click(function () {
wait('.popover-body', function () {
let $pop = $($(this)[$(this).length - 1]);
let a = $pop.find('>div>div');
for (let i = 0; i < a.length; i++) {
let $item = $(a[i]);
let $title = $item.find('.text-break');
let $caption = $item.find('.caption');
let title = $title[0].innerText.trim();
switch (title) {
case 'Share links':
$title.text('分享链接');
$caption.text('给他人分享你的加时投票链接');
break;
case 'Pillory':
$title.text('公示');
$caption.text('当受到惩罚时公开展示');
break;
case 'Dice':
$title.text('骰子');
$caption.text('掷骰子尝试减少锁定时间');
break;
case 'Wheel of Fortune':
$title.text('幸运转盘');
$caption.text('转动幸运转盘试试你的运气');
break;
case 'Tasks':
$title.text('任务');
$caption.text('完成任务获得用来解锁的积分');
break;
case 'Penalties':
$title.text('惩罚');
$caption.text('如果您不按时执行操作,将受到惩罚');
break;
case 'Hygiene opening':
$title.text('日常清洁');
$caption.text('暂时打开你的贞操锁用于清洁');
break;
case 'Verification picture':
$title.text('验证锁照');
$caption.text('定期为您的锁拍照,以证明您已上锁');
break;
case 'Random Events':
$title.text('随机事件');
$caption.text('为你的锁带来随机性');
break;
case 'Guess the Timer':
$title.text('时间竞猜');
$caption.text('隐藏计时器,猜测计时器何时结束');
break;
}
}
$pop.next().find('button')[0].innerText = '清除';
$pop.next().find('button')[1].innerText = '保存';
$pop.next().find('label').text('包含所有选中');
})
})
$(btns[2]).click(function () {
wait('.popover-body', function () {
let $pop = $($(this)[$(this).length - 1]);
$pop.find('.caption').text('筛选锁计划是否需要费用');
$pop.find('.form-check label')[0].innerText = '显示所有';
$pop.find('.form-check label')[1].innerText = '仅显示需要付费的';
$pop.find('.form-check label')[2].innerText = '排除付费';
$pop.next().find('button')[0].innerText = '清除';
$pop.next().find('button')[1].innerText = '保存';
})
})
$a = $a.prev();
$a.find('.col-md-6').children()[0].innerText = '社区锁计划';
$a.find('.col-md-6').children()[1].innerText = '社区用户创建的锁';
})
}
function explore_lock() {
wait('.PublicLockView > div:nth-child(2) > div', function () {
$(this).find('button.btn').text('加入锁计划');
$(this).find('button.btn').click(function () {
wait('.CombinationFormView .caption', function () {
combinationContent()
let c = $(this).parent()[0].children;
c[1].innerText = '选择您的密码类型';
c[2].children[0].children[0].children[1].children[0].innerText = '密码照片';
c[2].children[0].children[0].children[1].children[1].innerText = '上传你的密码照片,我们会在解锁时给你看。';
c[2].children[1].children[0].children[1].children[0].innerText = '生成密码';
c[2].children[1].children[0].children[1].children[1].innerText = '该应用程序将生成一个密码用以设置在您的锁盒上。';
$(c[2]).find('.list-group').click(combinationContent);
setTimeout(() => {
let $a = $(this).parent().next().next();
if ($a.find('.checkbox-label-title').text() == 'I confirm that I have made contact with the owner.') {
$a.find('.checkbox-label-title').text('我保证我已联系了keyholder');
$a.find('.checkbox-label-title ~ .caption').text('所有者要求在加入锁计划之前与其联系。');
}
$a = $a.next().next();
if ($($a.children()[0]).text() == 'Lock password') {
$($a.children()[0]).text('锁密码');
}
}, 10)
})
})
let hrs = $(this).find('hr');
for (let i = 0; i < hrs.length; i++) {
let $section = $(hrs[i]).next(),
$title = $section.find('> h4.mb-3'),
title = String($title.text()).trim();
let a;
switch (title) {
case 'Initial lock duration':
let o_children = $title.children();
$title.text('初始锁定时间');
$title.append($(o_children[0]));
$(o_children[0]).mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text('初始锁定时间将会在最小时间和最大时间之间随机生成。');
})
})
a = $section.find('.LockInfoItem');
for (let j = 0; j < a.length; j++) {
let $card = $(a[j]);
let $card_title = $card.find('.lock-info-title');
let $card_text = $card.find('.lock-info-text');
let v = $card_title[0].innerText.trim();
switch (v) {
case 'Min initial duration':
$card_title.text('最小初始时间');
break;
case 'Max initial duration':
$card_title.text('最大初始时间');
break;
case 'Timer':
$card_title.text('计时器');
if ($card_text.text() == 'Hidden timer') {
$card_text.text('隐藏时间');
} else if ($card_text.text() == 'Visible timer') {
$card_text.text('时间可视');
}
break;
}
}
break;
case 'Community features':
$title.text('社区特征');
a = $section.find('.card-content');
for (let j = 0; j < a.length; j++) {
let $card = $(a[j]);
let $card_title = $card.find('.h5');
let $card_caption = $($card.find('.mb-2 ~ .caption')[0]);
let $ml = $card.find('.h5 ~ .ml-2');
let v = $card_title[0].innerText.trim();
let tip;
let b;
switch (v) {
case 'Share links':
$card_title.text('分享链接');
tip = '与其他人分享投票链接,要求他们给您的锁增加或减少时间。';
b = $card_caption.children();
for (let k = 0; k < b.length; k++) {
let li = b[k];
li.innerHTML = li.innerHTML
.replace('Add time', '加时')
.replace('Remove time', '减时')
.replace('Random option enabled', '随机选项启用')
.replace('visits required', '投票人数需要')
.replace('Only connected users can vote', '仅登录用户可投票');
}
break;
case 'Pillory':
$card_title.text('公示加时');
tip = '当您受到处罚时,将会在指定的时间段内公开显示。其他用户将能够为您的锁增加时间。';
$card_caption.find('p')[0].innerText = $card_caption.find('p')[0].innerText
.replace('added per vote', '每票加时');
break;
case 'Hygiene opening':
$card_title.text('日常清洁');
tip = '因为卫生很重要,所以定期解锁自己来清洁你的贞操设备。要小心,如果你解锁超过了允许的时间,你将受到处罚。';
$card_caption.find('p')[0].innerText = $card_caption.find('p')[0].innerText
.replace('Time allowed', '允许解锁时间')
.replace('penalty for exceeding time', '超时惩罚');
_mode($card.find('.caption-dark span span'));
break;
}
$ml.mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text(tip);
})
})
}
$section = $section.next();
$title = $section.find('> h4.mb-3');
title = String($title.text()).trim();
if (title == 'Extensions') {
$title.text('拓展');
a = $section.find('.card-content');
for (let j = 0; j < a.length; j++) {
let $card = $(a[j]);
let $card_title = $card.find('.h5');
let $card_caption = $($card.find('.mb-2 ~ .caption')[0]);
let $ml = $card.find('.h5 ~ .ml-2');
let v = $card_title[0].innerText.trim();
let tip;
let c;
let lis;
switch (v) {
case 'Dice':
$card_title.text('骰子');
tip = '每一次你和机器人都会掷骰子。如果你掷的比机器人多,时间就会减少。如果机器人掷得更多,时间就会增加。';
_mode($card.find('.caption-dark span span'));
$card_caption.children()[0].innerText = $card_caption.children()[0].innerText
.replace('Time multiplier', '时间倍数');
break;
case 'Wheel of Fortune':
$card_title.text('幸运转盘');
tip = '转动幸运转盘,更改锁的持续时间。为幸运转盘的每个格子配置操作:增加或减少时间、冻结锁或自定义文本。';
_mode($card.find('.caption-dark span span'));
lis = $card_caption.children()[0].children;
for (let j = 0; j < lis.length; j++) {
let li = lis[j];
let v = li.innerText.trim();
switch (v) {
case 'Freeze / unfreeze':
li.innerText = '冻结 / 解冻';
break;
case 'Freeze':
li.innerText = '冻结';
break;
case 'Unfreeze':
li.innerText = '解冻';
break;
}
if (v.indexOf('Pillory') != -1) {
li.innerText = li.innerText.replace('Pillory', '公示');
}
}
break;
case 'Tasks':
$card_title.text('任务');
tip = '通过做任务来增加训练的趣味性。配置您要执行的任务,然后接收一个随机任务,或让其他用户投票决定任务。';
_mode($card.find('.caption-dark span span'));
lis = $card_caption.children()[0].children;
for (let j = 0; j < lis.length; j++) {
let $a = $(lis[j]);
let t = $a[0].innerText.trim();
switch (t) {
case 'Assign yourself a random task':
$a[0].innerHTML = $a[0].innerHTML.replace('Assign yourself a random task', '随机分配任务');
break;
case 'Choose your task':
$a[0].innerHTML = $a[0].innerHTML.replace('Choose your task', '自行选择任务');
break;
case 'Edit the list of tasks':
$a[0].innerHTML = $a[0].innerHTML.replace('Edit the list of tasks', '可编辑任务列表');
break;
case 'Tasks assigned by the keyholder':
$a[0].innerHTML = $a[0].innerHTML.replace('Tasks assigned by the keyholder', '任务由keyholder分配');
break;
}
if (t.indexOf('points required') != -1) {
$a[0].innerHTML = $a[0].innerHTML.replace('points required', '积分需要')
}
}
for (let k = 0; k < $card_caption.find('~h6').length; k++) {
let t = $card_caption.find('~h6')[k];
let v = t.innerText.trim();
switch (v) {
case 'List of tasks':
t.innerText = '任务列表';
break;
case 'Penalty for abandoning a task':
t.innerText = '放弃惩罚';
let lis = $(t).next().children()[0].children;
for (let j = 0; j < lis.length; j++) {
let li = lis[j];
li.innerText = li.innerText
.replace('Add', '加时')
.replace('Freeze the lock', '冻结')
.replace('Pillory for', '公示');
}
break;
}
}
if ($card_caption.next().text() == 'Configure the tasks you want to do.') {
$card_caption.next().text('自行配置你想做的任务');
}
break;
case 'Penalties':
$card_title.text('惩罚');
tip = '如果您不按时执行操作,将受到惩罚。';
_mode($card.find('.caption-dark span span'));
c = $card.find('.mb-2 ~ div')[0].children;
for (let j = 0; j < c.length; j++) {
let $item = $(c[j]);
let d = $item.find('.mb-2 .mb-2').children();
let title = d[0].innerText.trim();
switch (title) {
case 'Number of dice rolls required':
d[0].innerText = '掷骰子次数要求'; break;
case 'Number of times you will have to turn the wheel of fortune':
d[0].innerText = '转动幸运转盘次数要求'; break;
case 'Number of to-do tasks required':
d[0].innerText = '做任务数量要求'; break;
case 'Time required to do an action':
d[0].innerText = '做任务限时'; break;
case 'Number of temporary openings required':
d[0].innerText = '日常清洁次数要求'; break;
case 'Maximum opening time allowed':
d[0].innerText = '清洁解锁限时'; break;
case 'Number of verifications required':
d[0].innerText = '上传验证锁照次数要求'; break;
}
d[1].innerText = d[1].innerText
.replace('daily', '每天');
let e = $item.find('.mb-2 .mb-2').next()[0];
let text = e.innerText.trim();
switch (text) {
case 'Penalty for not rolling the dice in time':
e.innerText = '掷骰子-未达次数惩罚'; break;
case 'Penalty for not turning the wheel of fortune enough times':
e.innerText = '幸运转盘-未达次数惩罚'; break;
case 'Penalty for failing to complete all required tasks':
e.innerText = '任务-未达次数惩罚'; break;
case 'Penalty for not completing the task in time':
e.innerText = '任务-超时惩罚'; break;
case 'Penalty for not opening your lock the required number of times':
e.innerText = '日常清洁-未达次数惩罚'; break;
case 'Penalty for not relocking in time':
e.innerText = '日常清洁-超时惩罚'; break;
case 'Penalty for not verifying your session enough times':
e.innerText = '验证锁照-未达次数惩罚'; break;
}
let lis = $item.find('ul li');
for (let k = 0; k < lis.length; k++) {
let li = lis[k];
li.innerText = li.innerText
.replace('Add', '加时')
.replace('Freeze the lock', '冻结')
.replace('Pillory for', '公示');
}
}
break;
case 'Verification picture':
$card_title.text('验证锁照');
tip = '定期为您的锁拍照,以证明您已上锁。';
_mode($card.find('.caption-dark span span'));
c = $card.find('.mb-2 ~ div').children();
for (let j = 0; j < c.length; j++) {
let $item = $(c[j]);
if ($item.find('span span span').text() == 'Peer verification') {
$item.find('span span span').text('启用验证惩罚');
$item.find('span span span').parent().parent().mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text('您的图片将由其他成员验证。');
})
})
}
if ($item.hasClass('caption') && String($item.find('span').text()).trim() == 'Visible to everyone') {
$item.find('span')[0].innerHTML = $item.find('span')[0].innerHTML.replace('Visible to everyone', '对所有人可见');
} if ($item.hasClass('caption') && String($item.find('span').text()).trim() == 'Only visible to the keyholder') {
$item.find('span')[0].innerHTML = $item.find('span')[0].innerHTML.replace('Only visible to the keyholder', '仅对keyholder可见');
}
if ($item.hasClass('mt-3') && $item.text() == 'Penalty for having a rejected picture') {
$item.text('验证锁照被多数拒绝时的惩罚');
}
if ($item.find('ul li').length > 0) {
for (let k = 0; k < $item.find('ul li').length; k++) {
let li = $item.find('ul li')[k];
li.innerText = li.innerText
.replace('Add', '加时')
.replace('Freeze the lock', '冻结')
.replace('Pillory for', '公示');
}
}
}
break;
case 'Random Events':
$card_title.text('随机事件');
tip = '随机事件可能发生并更改您的计时器。时间增加或减少,冻结锁定,许多事情都可能发生。你不知道什么时候会发生,这会是一个惊喜。';
_mode($card.find('.caption-dark span span'));
let text = $card_caption.find('p').text();
if (text.indexOf('Easy') != -1) {
$card_caption.find('p').text('简单: 给新手准备,事件频繁,但对锁时间的影响很小(little impact)。');
} else if (text.indexOf('Normal') != -1) {
$card_caption.find('p').text('普通: 更多事件,对锁时间的有一些影响(some impact)。');
} else if (text.indexOf('Hard') != -1) {
$card_caption.find('p').text('困难: 更长的事件,您的锁可能会比预期的时间长得多。');
} else if (text.indexOf('Expert') != -1) {
$card_caption.find('p').text('专家: 你喜欢冒险!给那些不会因惧怕而放弃的人。');
}
break;
case 'Guess the Timer':
$card_title.text('时间竞猜');
tip = '正确猜测计时器,否则添加时间。计时器将会被隐藏,当你认为计时器结束时按下解锁按钮。如果计时器仍在运行,则会添加随机时间!';
_mode($card.find('.caption-dark span span'));
$card_caption.find('p').text(
$card_caption.find('p').text()
.replace('Random time between', '随机加时')
.replace('and', '到')
);
break;
}
$ml.mouseover(function () {
wait('.tooltip-inner', function () {
$(this).text(tip);
})
})
}
}
break;
}
if ($section.hasClass('lock-notable-items')) {
a = $section[0].children;
for (let j = 0; j < a.length; j++) {
let $item = $(a[j]);
let $item_title = $item.find('.lock-notable-title');
let $description = $item.find('.lock-notable-description');
let item_title = $item_title[0] && $item_title[0].innerText.trim();
switch (item_title) {
case 'No time limit':
$item_title.text('无时间限制的');
$description.text('锁定时间可以无限制地增加。');
break;
case 'Password required':
$item_title.text('需要密码');
$description.text('需要密码才能加入该锁计划');
break;
case 'Contact required':
$item_title.text('加入前需要联系作者');
$description.find('.mb-1').text('你必须在加入该锁计划前联系 keyholder');
$description.find('a')[0].innerHTML = $item.find('a')[0].innerHTML
.replace('Send a message', '发信息');
break;
case 'Findom lock':
$item_title.text('付费锁计划');
$description.text('该锁计划需要支付费用');
break;
case 'Maximum lock duration':
$item_title.text('最大锁定时间');
$description.text(
$description.text()
.replace('The lock duration cannot exceed', '这个锁计划的时间不会超过')
);
break;
case 'Time information hidden from the lock history':
$item_title.text('从锁更改历史记录中隐藏时间信息');
$description.text('你将无法看到时间增加和删除记录');
break;
}
}
}
}
})
}
})();