Files
split-trainer/public/data.js
T
darkoandClaude Sonnet 5.5 e897a6c5eb Развёртывание на Debian 12/13: Docker, nginx, работа за обратным прокси
- приложение перенесено в public/, инструкции в docs/
- Dockerfile (nginx без root-прав), docker-compose.yml с ограничениями
- deploy/split-trainer.conf: CSP и заголовки безопасности, no-cache по ETag,
  /healthz, реальный IP из X-Forwarded-For только от частных сетей,
  редиректы без внутреннего хоста
- deploy/install-debian.sh: установка и обновление без Docker
- docs/DEPLOY.md: требования, установка, примеры прокси (nginx, Caddy, Traefik), подпуть

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 12:35:47 +03:00

225 lines
26 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Данные тренера: раскладки, списки слов и тексты для упражнений.
В русских текстах нет "ё", "«»" и "—": их нет на клавиатуре в привычных местах. */
window.TD = {
/* Каждая клавиша - пара символов "без Shift" + "с Shift". Порядок = физические клавиши ряда. */
keyRows: {
en: [
"`~ 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) -_ =+",
"qQ wW eE rR tT yY uU iI oO pP [{ ]} \\|",
"aA sS dD fF gG hH jJ kK lL ;: '\"",
"zZ xX cC vV bB nN mM ,< .> /?"
],
ru: [
"ёЁ 1! 2\" 3№ 4; 5% 6: 7? 8* 9( 0) -_ =+",
"йЙ цЦ уУ кК еЕ нН гГ шШ щЩ зЗ хХ ъЪ \\/",
"фФ ыЫ вВ аА пП рР оО лЛ дД жЖ эЭ",
"яЯ чЧ сС мМ иИ тТ ьЬ бБ юЮ .,"
]
},
words: {
en: `
a all ask add ads as dad sad fad fads lad lads fall falls flask flasks salad alfalfa sass lass
had has gas gash hash dash lash flash slash flag flags glad glass shall hall halls half hag hags gal gals gala gall shag asks
about above across after again against age ago air almost alone along already also always among and animal another answer any appear area arm around away
baby back bad ball bank base be bear beat beautiful because bed before begin behind believe below best better between big bird black blue board boat body book both box boy bread bring brother build busy buy
call came can car care carry case cat catch cause center chair change child children city class clean clear close cold color come common cook cool corner could country course cover cross cut
dark day dead deep did different dinner do dog door down draw dream dress drink drive drop dry during
each early earth east easy eat edge egg end enough even evening ever every eye
face fact family far farm fast father feel feet few field fight find fine finger fire first fish five floor flower fly follow food foot for forest forget form found four free friend from front full fun
game garden gave get girl give go gold gone good got grass great green ground group grow guess
hair hand happy hard hat have he head hear heart heavy help her here high hill his hold home hope horse hot hour house how however hundred hurry
idea if important in inside into iron is it job join jump just keep key kind king kitchen knew know
lady lake land large last late laugh lay lead learn leave left leg less let letter life light like line lip list listen little live long look lost lot loud love low
machine made main make man many map mark matter may me mean meet melt men middle might mile milk mind minute miss money month moon more morning most mother mountain mouth move much music must my
name near need never new next night nine no noise none north nose not note nothing notice now number
object ocean of off often oil old on once one only open or order other our out over own
page paint pair paper part party pass past path pay people pick picture piece place plan plant play please point pool poor power press pretty problem pull push put
quick quiet quite race rain ran reach read ready real red rest rich ride right ring river road rock room round rule run
sad safe said salt same sand sat saw say school sea season second see seem send sentence serve set seven several shape she ship shoe shop short should show side sign simple sing sister sit six size sky sleep slow small smile snow so soft some song soon sound south space speak special spell spend spring square stand star start stay step stick still stone stop store story street strong study such summer sun sure surface sweet
table take talk tall teach tell ten than thank that the their them then there these they thick thin thing think third this those though thought three through time tiny to today together told too took top toward town tree try turn two
under until up us use usual very voice wait walk wall want warm was wash watch water way we wear weather week weight well went were west what wheel when where which while white who whole why wide will wind window winter wish with without woman wonder wood word work world would write year yellow yes yet you young your
beautiful different important mountain together everything something sometimes remember question computer keyboard practice knowledge adventure afternoon yesterday tomorrow elephant restaurant telephone chocolate wonderful education information possibility
`,
ru: `
ода вода папа дар жар вор вол вал лад ад ал ар овал аврал вдова водопад ложа падал фара дрова парад пара
яма мама имя кафе фея ива чума
торт горох голод дорого оно блюдо долго холод город ход год гол дно тон рот лорд
он она оно мы вы они мой твой наш ваш его ее их кто что где как так там тут вот вон еще уже или если но да нет не ни для про при над под без из от до за на по во об ко со бы же ли ну
дом мир год день ночь утро вечер час минута неделя месяц время дело жизнь рука нога голова глаз ухо нос рот лицо сердце слово речь место город село улица площадь двор сад парк лес поле луг гора река озеро море океан остров берег небо солнце луна звезда ветер дождь снег лед туман гроза облако земля вода огонь воздух камень песок трава цветок дерево лист корень птица рыба зверь собака кошка лошадь корова овца свинья мышь заяц волк лиса медведь
книга ручка тетрадь бумага стол стул кровать диван шкаф окно дверь стена пол потолок крыша комната кухня лампа часы телефон машина поезд самолет автобус дорога мост путь билет сумка ключ деньги цена магазин рынок хлеб молоко масло сыр мясо суп каша чай кофе сахар соль яблоко груша вишня лимон картофель морковь помидор огурец
семья мама папа брат сестра сын дочь муж жена друг подруга дед баба ребенок мальчик девочка мужчина женщина человек люди народ страна язык школа урок класс учитель ученик студент работа завод офис врач больница лекарство спорт игра футбол музыка песня танец картина фильм театр праздник подарок письмо новость вопрос ответ проблема идея мысль причина результат начало конец сила воля память мечта любовь радость страх правда сказка история
хороший плохой новый старый большой маленький высокий низкий длинный короткий широкий узкий светлый темный красный синий зеленый желтый белый черный серый быстрый медленный тихий громкий теплый холодный горячий сладкий горький кислый добрый злой умный сильный слабый веселый грустный красивый легкий трудный простой сложный свободный важный первый второй третий последний каждый другой самый такой
быть мочь сказать говорить знать стать идти хотеть видеть думать делать жить смотреть найти работать писать читать любить помнить понять ждать спросить ответить дать взять пойти начать держать слушать играть учить ходить бежать лежать сидеть стоять спать есть пить петь рисовать строить открыть закрыть купить продать помочь забыть решить спешить
когда тогда сейчас потом всегда никогда здесь там где куда откуда почему зачем очень сегодня завтра вчера рядом далеко близко быстро медленно хорошо плохо много мало
один два три четыре пять шесть семь восемь девять десять сто тысяча
клавиатура правильный интересный путешествие предложение произведение удовольствие разговаривать определенный замечательный самостоятельно образование информация возможность
объект подъезд объем съезд щука борщ товарищ площадь вещь общий пища ищу цирк цель центр цвет цена улица птица лицо юг юбка июнь июль яблоко ящик язык эхо этаж экран энергия эпоха
`
},
text: {
en: {
easy: [
"The cat sat on the mat.", "We all like to read books.", "She has a red car.", "It is a sunny day.",
"The dog runs in the park.", "He drinks tea every morning.", "Birds sing in the spring.", "I have two brothers.",
"My house is near the river.", "They are playing a game.", "We went to the shop.", "The sun is bright today.",
"Snow falls in winter.", "Please open the window."
],
caps: [
"Anna and Peter live in London.", "Yesterday John flew to Paris.", "Mary works at a school in Boston.",
"The Nile flows through Egypt.", "Tom loves New York in the fall.", "We will visit Rome in July.",
"Mount Everest is the highest peak.", "Lucy and Oliver went to Tokyo.", "Canada is north of the United States.",
"Sarah reads Shakespeare on Sundays."
],
p1: [
"In the morning I drink tea, and in the evening I drink coffee.", "He came in, sat down, and opened the book.",
"When it rained, we stayed at home.", "I like autumn, because it is beautiful.",
"We bought bread, milk, cheese, and apples.", "If you want success, you must work.",
"She knew that he would come.", "First we ate, then we went for a walk.",
"The weather is nice, but the wind is cold.", "I do not know where he is, or what he does."
],
p2: [
"What is your name?", "Where are you going?", "Hooray, we won!", "What time is it?", "What are you doing tonight?",
"Careful, the road is slippery!", "Why are you so quiet?", "Will you come tomorrow?", "What a wonderful day!",
"Where is the station?", "Please, help me!", "Is that really true?"
],
p3: [
"He bought three things: a book, a pen, and a notebook.", "One wanted to sleep; the other wanted to eat.",
"Summer - the best season of the year.", "Here is my plan: wake up early, eat, and leave.",
"We waited for a long time; nobody came.", "Remember the main thing: patience and work.",
"A cat is a pet - it is soft and warm.", "She said: come tomorrow.", "It was a well-known, old-fashioned song."
],
p4: [
"He said: \"I will be back soon.\"", "The book \"Moby Dick\" is very long.", "My friend (he lives nearby) often visits us.",
"She answered: \"Of course, come in!\"", "It's a nice day, isn't it?", "I don't know what you're talking about.",
"The store (on the corner) has fresh bread.", "They said they'd come, but they haven't."
],
p5: [
"Wait, what? You've finished already - that's impressive!", "Dear Anna, thank you for the gift (it's lovely); see you on Friday!",
"\"Why not?\" he asked. \"Because it's late,\" she said.", "Ingredients: flour, sugar, eggs, and milk (2 cups).",
"Is it true? Yes - and it's only the beginning!", "Note: the shop opens at 9:30; it closes at 6.",
"Hurry up, the train leaves at 7:45!", "She whispered, \"Don't tell anyone (not even Tom).\""
],
para: [
"Autumn came quietly. The leaves on the trees turned yellow and red, and in the mornings a light fog hangs over the river. People put on warm jackets, and children happily collect the prettiest leaves in the park.",
"A good habit is something we do every day without thinking. To learn to type fast, you do not need to practice for hours. Twenty minutes a day is enough, as long as you practice regularly and carefully.",
"A split keyboard lets you keep your hands at shoulder width. Your shoulders stay open and your wrists stay straight. At first typing feels strange, but after a couple of weeks your fingers remember the new positions of the keys.",
"There is an old library in our town. It is quiet, and it smells of paper and a little of coffee from the small cafe on the ground floor. In the evenings students come here to prepare for exams, and older people come to read the newspapers.",
"The sea was calm, and the boat slid slowly over the water. Far away we could see mountains covered with snow, and above our heads the gulls were crying. We were silent for a long time because words were not needed.",
"Every journey begins with a first step. Do not be afraid of mistakes: they show you what to work on. Accuracy is more important than speed, because speed comes by itself when your fingers know the way."
],
num: [
"In {y} there were {n} people in the hall.", "Call us at {ph} after {t}.", "The ticket costs ${p}, seat {m}, row {s}.",
"Meeting on {d} at {t}.", "Order number {n} was sent on {d}.", "Room {m} is on floor {s}.", "It is {n} miles to the town.",
"Page {s} of {m}.", "Her phone number is {ph}.", "The year {y} was long.", "We sold {n} items for ${p}."
],
sym1: [
"user@example.com", "#typing #practice #goals", "Total: $45.50 (20% off)", "Email john.doe@mail.org today",
"Save 15% on orders over $100", "@anna and @peter joined #team", "Price: $9.99 plus 8% tax", "50% of $200 is $100"
],
sym2: [
"2 + 2 = 4", "a^2 + b^2 = c^2", "Tom & Jerry", "snake_case_name = 5 * 6", "(a + b) * c = ac + bc",
"x = y + 1; z = x * 2", "R&D and Q&A teams", "total = (price * 3) + tax"
],
sym3: [
"array[0] = {1, 2, 3};", "C:\\Users\\Admin\\Documents", "a | b / c ~ d", "<div class=\"box\"></div>", "~/projects/app/src",
"if (x > 5 && y < 3) { run(); }", "use `code` for inline text", "path/to/file.txt | sort > out.txt"
],
/* Упражнения на слои: много цифр и символов, которых нет на базовом слое */
lsym: [
"a[3] = {1, 2, 3};", "x = y + 12 * (z - 4);", "path = \"C:\\\\temp\\\\log_07.txt\";", "arr[0] = arr[1] | 255;",
"total = [10, 20, 30]; sum = 60;", "if (n == 42) { ok = 1; }", "id=7&page=15&size=200", "cfg = { w: 640, h: 480 };",
"~/dev/app_2/src/main.c", "`npm run build` takes 90 sec", "a1 = [1, 2]; a2 = [3, 4]; // 14", "v = (a + b) * [c - 5] / 8;"
],
lcode: [
"for (let i = 0; i < 100; i++) { sum += arr[i]; }", "const rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];",
"if (a[2] >= 10 && b[3] <= 20) { total = a[2] + b[3]; }", "SELECT id, price FROM items WHERE price > 100;",
"x = {\"a\": 1, \"b\": [2, 3], \"c\": 4};", "let mask = (flags & 0xFF) | 0x10;", "path = `/api/v2/users/${id}/posts/5`;",
"while (n > 0) { s += n % 10; n = n / 10; }"
],
ltext: [
"In 2024 we sold 1250 books, 340 maps, and 78 posters for $4521.", "Room 214 is on floor 2; the key is in box 37.",
"Flight 805 leaves at 06:45 and lands at 09:10 on 12/05/2025.", "Call 555-0142 before 5, or 555-0187 after 6.",
"The recipe needs 3 eggs, 250 g of flour, 2 cups of milk, and 1 pinch of salt.", "Chapter 12 starts on page 187 and ends on page 203.",
"Order #4821: 6 items, total $93.50, delivery in 3 days.", "Score: 3 - 2 after 90 minutes, then 4 - 3 on penalties."
],
code: [
"for (let i = 0; i < 10; i++) { sum += i; }", "const name = 'Alex';", "function add(a, b) { return a + b; }",
"if (a >= b) { print(\"yes\"); } else { print(\"no\"); }", "SELECT * FROM users WHERE age > 18;",
"<a href=\"/home\">Home</a>", "#include <stdio.h>", "x = [1, 2, 3]; y = {\"a\": 1};",
"git commit -m \"fix bug\"", "background: #ff8800; margin: 0 auto;"
]
},
ru: {
easy: [
"Мама мыла раму.", "Это наш дом.", "Зимой идет снег.", "Кошка спит на диване.", "Мы пошли в лес.", "Солнце светит ярко.",
"Он читает интересную книгу.", "Дети играют во дворе.", "Вечером мы пили чай.", "На столе лежит хлеб.",
"Река течет медленно.", "Птицы поют весной.", "В саду растут яблони.", "Брат купил новый телефон."
],
caps: [
"Анна и Борис живут в Москве.", "Вчера Иван приехал из Казани.", "Мария Петровна работает в школе.",
"Волга впадает в Каспийское море.", "Антон любит Санкт-Петербург.", "Летом мы поедем в Сочи.",
"Дмитрий Сергеевич читает Пушкина.", "Байкал самое глубокое озеро в мире.", "Олег и Ольга пошли в Эрмитаж.",
"Россия - самая большая страна."
],
p1: [
"Утром я пью чай, а вечером кофе.", "Он вошел в комнату, сел за стол и открыл книгу.", "Когда пошел дождь, мы остались дома.",
"Я люблю осень, потому что она красивая.", "Мы купили хлеб, молоко, сыр и яблоки.", "Если хочешь успеха, надо работать.",
"Он знал, что она придет.", "Сначала мы поели, потом пошли гулять.", "Погода хорошая, но ветер холодный.",
"Я не знаю, где он, и что он делает."
],
p2: [
"Как тебя зовут?", "Куда ты идешь?", "Ура, мы победили!", "Сколько сейчас времени?", "Что ты делаешь вечером?",
"Осторожно, дорога скользкая!", "Почему ты молчишь?", "Не может быть!", "Ты придешь завтра?", "Какой прекрасный день!",
"Где находится вокзал?", "Помогите, пожалуйста!"
],
p3: [
"Он купил три вещи: книгу, ручку и тетрадь.", "Один хотел спать; другой хотел есть.", "Москва - столица России.",
"Вот мой план: встать рано, позавтракать и выйти.", "Лето - лучшее время года.", "Мы ждали долго; никто не пришел.",
"Помни главное: терпение и труд.", "Кошка - домашнее животное.", "Она сказала: приходи завтра."
],
p4: [
"Он сказал: \"Я скоро вернусь\".", "Книга \"Война и мир\" очень длинная.", "Мой друг (он живет рядом) часто заходит в гости.",
"Она ответила: \"Конечно, приходи!\"", "Фильм \"Ирония судьбы\" смотрят в Новый год.", "В магазине (на углу) есть свежий хлеб.",
"Он прочитал статью (очень длинную) за час.", "Песня \"Катюша\" известна всем."
],
p5: [
"Подожди, что? Ты уже закончил - это здорово!", "Дорогая Анна, спасибо за подарок (он прекрасен); до встречи в пятницу!",
"\"Почему бы и нет?\" - спросил он. \"Потому что поздно\", - ответила она.", "Ингредиенты: мука, сахар, яйца и молоко (2 стакана).",
"Правда ли это? Да - и это только начало!", "Внимание: магазин открывается в 9:30; закрывается в 18:00.",
"Скорее, поезд отправляется в 7:45!", "Она шепнула: \"Никому не говори (даже Тому).\""
],
para: [
"Осень пришла незаметно. Листья на деревьях стали желтыми и красными, а по утрам над рекой стоит легкий туман. Люди надели теплые куртки, а дети с радостью собирают в парке самые красивые листья.",
"Хорошая привычка - это то, что мы делаем каждый день, не думая. Чтобы научиться быстро печатать, не нужно заниматься по много часов. Достаточно двадцати минут в день, но регулярно и внимательно.",
"Сплит-клавиатура позволяет держать руки на ширине плеч. Плечи не сгибаются вперед, а запястья остаются прямыми. Сначала печатать непривычно, но через пару недель пальцы запоминают новое положение клавиш.",
"В нашем городе есть старая библиотека. В ней тихо, пахнет бумагой и немного кофе из маленькой кофейни на первом этаже. По вечерам здесь собираются студенты, чтобы подготовиться к экзаменам, и пожилые люди, чтобы почитать газеты.",
"Море было спокойным, и лодка медленно скользила по воде. Вдали виднелись горы, покрытые снегом, а над головой кричали чайки. Мы долго молчали, потому что слова были не нужны.",
"Каждый путь начинается с первого шага. Не бойтесь ошибок: они показывают, над чем стоит поработать. Точность важнее скорости, потому что скорость приходит сама, когда пальцы знают дорогу."
],
num: [
"В {y} году в зале было {n} человек.", "Звоните по телефону {ph} после {t}.", "Билет стоит {p} руб., ряд {s}, место {m}.",
"Встреча состоится {d} в {t}.", "Заказ номер {n} отправлен {d}.", "Комната {m} находится на {s} этаже.",
"До города {n} километров.", "Страница {s} из {m}.", "Ее номер телефона {ph}.", "Мы продали {n} штук за {p} руб."
],
sym1: [
"Заказ № 45 готов.", "Скидка 20% на все товары.", "Результат: 5 * 4 = 20.", "Счет матча 3 : 2 в нашу пользу.",
"Что? Где? Когда?", "(1) первый; (2) второй; (3) третий.", "100% гарантия качества!", "Билет № 17, место 24; цена 350 руб."
],
ltext: [
"В 2024 году мы продали 1250 книг, 340 карт и 78 плакатов на сумму 4521 руб.", "Комната 214 на втором этаже; ключ лежит в ячейке 37.",
"Рейс 805 вылетает в 06:45 и прилетает в 09:10 12.05.2025.", "Звоните 8-495-123-45-67 до 17:00 или 8-495-765-43-21 после 18:00.",
"Для рецепта нужно 3 яйца, 250 г муки, 2 стакана молока и 1 щепотка соли.", "Глава 12 начинается на странице 187 и заканчивается на 203.",
"Заказ № 4821: 6 товаров, итого 9350 руб. (скидка 15%), доставка через 3 дня.", "Счет 3 : 2 после 90 минут, потом 4 : 3 по пенальти."
],
sym2: [
"Звоните: 8-495-123-45-67; заказ № 7788.", "Дата: 12.05.2024; время: 14:30; зал 5.", "Выбирайте: да/нет, и/или, 50/50.",
"Формула: 2 + 3 * 4 = 14 (проверьте!).", "Цена: 1 200 руб. (скидка 15%).", "Рейс № 305: вылет 06:45, прилет 09:10.",
"Ответ: а = 5; б = 7 (всего 12).", "Адрес: ул. Ленина, д. 15, кв. 47."
]
}
}
};