Дозаливка

This commit is contained in:
2022-12-19 22:22:19 +02:00
parent 73d69cb0ae
commit 2f6517f5b3
22083 changed files with 494007 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
/**
* @param {boolean} showRelines
*/
export const changeStylesForRelines = (showRelines) => {
const $relineX = document.getElementById('reline1');
const $relineY = document.getElementById('reline2');
$relineX.style.zIndex = showRelines ? 1001 : -1;
$relineY.style.zIndex = showRelines ? 1000 : -1;
};

View File

@@ -0,0 +1,27 @@
import { getTextForModal } from './getTextForModal.js';
export const createModalElements = () => {
const $modalMain = document.createElement('div');
$modalMain.id = 'trainingModalMain';
$modalMain.innerHTML = `
<div id="trainingModalBackground">
<div id="trainingModalContainerHihgtlightes">
<div id="trainingModalContainer">
<div id="trainingModalContentContainer">
<p id="trainingModalCurrentStep">1/6</p>
<h3 id="trainingModalTitle">Title</h3>
<div id="trainingModalTextContainer">
<p id="trainingModalText">Text</p>
</div>
</div>
<button id="nextTrainingModal" class="trainingModalButton">TEST/<2F><><EFBFBD><EFBFBD></button>
</div>
</div>
</div>`;
document.body.append($modalMain);
};

View File

@@ -0,0 +1,14 @@
import { dataText } from '../text.js';
/**
* @param {string} key
* @returns {string}
*/
export const getTextForModal = (key) => {
if (!key) {
return '[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> value].';
}
return dataText[key] ?? `[${key}].`;
};

View File

@@ -0,0 +1,5 @@
export * from './changeStylesForRelines.js';
export * from './createModalElements.js';
export * from './getTextForModal.js';
export * from './removeStylesOfHighlightedElements.js';
export * from './setModalContent.js';

View File

@@ -0,0 +1,22 @@
export const removeStylesOfHighlightedElements = () => {
const $highlightedElements = document.getElementsByClassName('highlightedTrainingElement');
const $highlightedBackgrounds = document.getElementsByClassName('highlightedTrainingElementBackground');
const $highlightedPositions = document.getElementsByClassName('highlightedTrainingElementPosition');
const $highlightedZIndexes = document.getElementsByClassName('highlightedTrainingElementZIndex');
for (let elem of $highlightedElements) {
elem.classList.remove('highlightedTrainingElement');
}
for (let elem of $highlightedBackgrounds) {
elem.classList.remove('highlightedTrainingElementBackground');
}
for (let elem of $highlightedPositions) {
elem.classList.remove('highlightedTrainingElementPosition');
}
for (let elem of $highlightedZIndexes) {
elem.classList.remove('highlightedTrainingElementZIndex');
}
};

View File

@@ -0,0 +1,21 @@
import { getTextForModal } from './getTextForModal.js';
/**
* @param {
* {
* keyTitle: string,
* keyContent: string,
* currentStep: number
* }
* } data
*/
export const setModalContent = ({ keyTitle, keyContent, currentStep }) => {
const $step = document.getElementById('trainingModalCurrentStep');
const $title = document.getElementById('trainingModalTitle');
const $text = document.getElementById('trainingModalText');
$step.textContent = `${currentStep}/6`;
$title.textContent = getTextForModal(keyTitle);
$text.textContent = getTextForModal(keyContent);
};

View File

@@ -0,0 +1,62 @@
import { createModalElements, removeStylesOfHighlightedElements, changeStylesForRelines } from './features/index.js';
import { another, chatWindow, commonFrame, onlineList, slotsForThings, stats } from './modalSteps/index.js';
import { allowRender, cleanState, setStep } from './redux/actions.js';
import { dispatch, getState, subscribe } from './redux/store.js';
const openRegistrationTrainingModal = () => {
if (localStorage.getItem('modalTest') === 'kravich') {
createModalElements();
dispatch(allowRender());
}
};
subscribe(() => {
const { currentStep, isAllowRender } = getState();
if (!isAllowRender) {
return;
}
switch (currentStep) {
case 1:
commonFrame(currentStep);
break;
case 2:
chatWindow(currentStep);
break;
case 3:
onlineList(currentStep);
break;
case 4:
slotsForThings(currentStep);
break;
case 5:
stats(currentStep);
break;
case 6:
another(currentStep);
break;
}
if (currentStep < 6) {
const $nextButton = document.getElementById('nextTrainingModal');
$nextButton.onclick = () => {
dispatch(setStep(currentStep + 1));
};
} else {
const $modalCloseButton = document.getElementById('closeTrainingModal');
const $modalMain = document.getElementById('trainingModalMain');
$modalCloseButton.onclick = () => {
changeStylesForRelines(true);
removeStylesOfHighlightedElements();
$modalMain.remove();
dispatch(cleanState());
};
}
});
openRegistrationTrainingModal();

View File

@@ -0,0 +1,30 @@
import { getTextForModal, setModalContent, removeStylesOfHighlightedElements } from '../features/index.js';
/**
* @param {string} currentStep
*/
export const another = (currentStep) => {
removeStylesOfHighlightedElements();
const $stats = document.getElementById('anotherOfPerson');
const $modalContainer = document.getElementById('trainingModalContainer');
const $modalNextButton = document.getElementById('nextTrainingModal');
const $modalCloseButton = document.createElement('button');
$modalCloseButton.id = 'closeTrainingModal';
$modalCloseButton.classList.add('trainingModalButton');
$modalCloseButton.textContent = getTextForModal('newCombats.trainingModal.closeButton');
$modalContainer.removeChild($modalNextButton);
$modalContainer.append($modalCloseButton);
// $stats.classList.add('highlightedTrainingElement');
setModalContent({
keyTitle: 'newCombats.trainingModal.step6.title',
keyContent: 'newCombats.trainingModal.step6.text',
currentStep,
});
};

View File

@@ -0,0 +1,25 @@
import { removeStylesOfHighlightedElements, setModalContent } from '../features/index.js';
/**
* @param {string} currentStep
*/
export const chatWindow = (currentStep) => {
removeStylesOfHighlightedElements();
const $chatWindow = document.getElementById('chat_block');
const $leftIcon = document.getElementById('chatLeftIcon');
const $textInput = document.getElementById('textmsg');
const $sendButton = document.getElementById('sendButtonTextMsg');
$chatWindow.classList.add('highlightedTrainingElement', 'highlightedTrainingElementBackground');
$leftIcon.classList.add('highlightedTrainingElement', 'highlightedTrainingElementPosition');
$textInput.classList.add('highlightedTrainingElement', 'highlightedTrainingElementPosition');
$sendButton.classList.add('highlightedTrainingElement', 'highlightedTrainingElementPosition');
setModalContent({
keyTitle: 'newCombats.trainingModal.step2.title',
keyContent: 'newCombats.trainingModal.step2.text',
currentStep,
});
};

View File

@@ -0,0 +1,21 @@
import { changeStylesForRelines, setModalContent } from '../features/index.js';
/**
* @param {string} currentStep
*/
export const commonFrame = (currentStep) => {
changeStylesForRelines(false);
const $header = document.getElementById('mainHeader');
const $frame = document.getElementById('sectionTd');
$header.classList.add('highlightedTrainingElement');
$frame.classList.add('highlightedTrainingElement', 'highlightedTrainingElementPosition');
setModalContent({
keyTitle: 'newCombats.trainingModal.step1.title',
keyContent: 'newCombats.trainingModal.step1.text',
currentStep,
});
};

View File

@@ -0,0 +1,6 @@
export * from './another.js';
export * from './chatWindow.js';
export * from './commonFrame.js';
export * from './onlineList.js';
export * from './slotsForThings.js';
export * from './stats.js';

View File

@@ -0,0 +1,19 @@
import { removeStylesOfHighlightedElements, setModalContent } from '../features/index.js';
/**
* @param {string} currentStep
*/
export const onlineList = (currentStep) => {
removeStylesOfHighlightedElements();
const $online = document.getElementById('online');
$online.classList.add('highlightedTrainingElement', 'highlightedTrainingElementPosition');
setModalContent({
keyTitle: 'newCombats.trainingModal.step3.title',
keyContent: 'newCombats.trainingModal.step3.text',
currentStep,
});
};

View File

@@ -0,0 +1,20 @@
import { removeStylesOfHighlightedElements, setModalContent } from '../features/index.js';
/**
* @param {string} currentStep
*/
export const slotsForThings = (currentStep) => {
removeStylesOfHighlightedElements();
const $blockName = document.getElementById('main');
const $stats = document.getElementsByClassName('personag')[0];
$blockName.classList.add('highlightedTrainingElementPosition', 'highlightedTrainingElementZIndex');
setModalContent({
keyTitle: 'newCombats.trainingModal.step4.title',
keyContent: 'newCombats.trainingModal.step4.text',
currentStep,
});
};

View File

@@ -0,0 +1,18 @@
import { removeStylesOfHighlightedElements, setModalContent } from '../features/index.js';
/**
* @param {string} currentStep
*/
export const stats = (currentStep) => {
removeStylesOfHighlightedElements();
const $stats = document.getElementById('statsOfPerson');
// $header.classList.add('highlightedTrainingElement')
setModalContent({
keyTitle: 'newCombats.trainingModal.step5.title',
keyContent: 'newCombats.trainingModal.step5.text',
currentStep,
});
};

View File

@@ -0,0 +1,17 @@
import { SET_STEP, ALLOW_RENDER, CLEAN_STATE } from './types.js';
/**
* @returns {{type: CLEAN_STATE}}
*/
export const cleanState = () => ({ type: CLEAN_STATE });
/**
* @returns {{type: ALLOW_RENDER}}
*/
export const allowRender = () => ({ type: ALLOW_RENDER });
/**
* @param {number} step
* @returns {{type: SET_STEP}}
*/
export const setStep = (step) => ({ type: SET_STEP, payload: step });

View File

@@ -0,0 +1,29 @@
import { ALLOW_RENDER, SET_STEP, CLEAN_STATE } from './types.js';
/**
* @param {{ currentStep: Number, isAllowRender: boolean}} state
*/
export const rootReducer = (state, action) => {
const { type, payload } = action;
switch (type) {
case ALLOW_RENDER:
return { ...state, isAllowRender: true };
case SET_STEP:
setStepToLocalStorage(payload);
return { ...state, currentStep: payload };
case CLEAN_STATE:
setStepToLocalStorage(1);
return { ...state, isAllowRender: false, currentStep: 1 };
default:
return state;
}
};
function setStepToLocalStorage(nextStep) {
localStorage.setItem('trainingModalCurrentStep', nextStep);
}

View File

@@ -0,0 +1,34 @@
import { rootReducer } from './rootReducer.js';
import { INIT_STATE } from './types.js';
/**
* @param {Function} rootReducer
* @param {number} initialState
*/
const currentStep = Number(localStorage.getItem('trainingModalCurrentStep'));
const initialState = {
currentStep: currentStep >= 1 && currentStep <= 6 ? currentStep : 1,
isAllowRender: false,
};
const createStore = (rootReducer, initialState) => {
let state = rootReducer(initialState, { type: INIT_STATE });
const subscribers = [];
return {
dispatch(action) {
state = rootReducer(state, action);
subscribers.forEach((sub) => sub());
},
subscribe(callback) {
subscribers.push(callback);
},
getState() {
return state;
},
};
};
export const { dispatch, getState, subscribe } = createStore(rootReducer, initialState);

View File

@@ -0,0 +1,4 @@
export const SET_STEP = 'SET_STEP';
export const INIT_STATE = 'INIT_STATE';
export const ALLOW_RENDER = 'ALLOW_RENDER';
export const CLEAN_STATE = 'CLEAN_STATE';

View File

@@ -0,0 +1,3 @@
export const dataText = {
'newCombats.trainingModal.nextButton': '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
};

View File

@@ -0,0 +1,20 @@
.highlightedTrainingElement {
z-index: 1150;
opacity: 0.83;
}
.highlightedTrainingElementZIndex {
z-index: 1;
}
.highlightedTrainingElementPosition {
position: relative;
}
.highlightedTrainingElementBackground {
background: #e2e0e1;
}
.pseudoElement {
background: red;
}

View File

@@ -0,0 +1,72 @@
#trainingModalMain {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
}
#trainingModalBackground {
height: 100%;
width: 100%;
background: rgb(0, 0, 0, 0.5);
z-index: 1100;
}
#trainingModalContainerHihgtlightes {
position: relative;
height: 100%;
width: 100%;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
z-index: 1200;
}
#trainingModalContainer {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
background: #e2e0e1;
padding: 30px;
border: 2px solid black;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
}
#trainingModalContentContainer {
width: 350px;
height: 200px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
margin-bottom: 30px;
}
#trainingModalTitle {
font-size: 16px;
font-weight: 600;
margin-bottom: 20px;
}
#trainingModalCurrentStep {
margin-bottom: 10px;
}
#trainingModalTextContainer {
display: flex;
overflow-y: scroll;
}
#trainingModalText {
white-space: pre-line;
}
.trainingModalButton {
width: 100px;
}

View File

@@ -0,0 +1,321 @@
class Features {
textData = {
'newCombats.trainingModal.nextButton': '<27><><EFBFBD><EFBFBD><EFBFBD>',
'newCombats.trainingModal.closeButton': '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'newCombats.trainingModal.step1.title': '<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>!',
'newCombats.trainingModal.step1.text':
'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.\n<><6E><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n<><6E> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD> ), <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20>.<2E>.\n<><6E><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.',
'newCombats.trainingModal.step2.title': '<27><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'newCombats.trainingModal.step2.text':
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n<><6E><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "Enter" <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 3-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n<><6E> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>.\n<><6E> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>.',
'newCombats.trainingModal.step3.title': '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'newCombats.trainingModal.step3.text':
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.\n<><6E><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>.\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ), <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.',
'newCombats.trainingModal.step4.title': '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>',
'newCombats.trainingModal.step4.text': '<27> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 9 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 4 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:\n <20><><EFBFBD><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ) - <20><><EFBFBD><EFBFBD>.\n <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n <20><><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD> ) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n <20><><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> ) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. \n <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n <20><><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 2 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>". \n \n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD> <20><> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n <20><><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" > "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>". ',
'newCombats.trainingModal.step5.title': '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!',
'newCombats.trainingModal.step5.text':
'<27><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> > <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>".\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>", <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> "<22><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>!\n<><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10 <20><><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!',
};
memoCountSteps = 0;
constructor() {}
getTextForModal(key) {
if (!key) {
return '[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>].';
}
return this.textData[key] || `[${key}].`;
}
getCountSteps() {
if (this.memoCountSteps > 0) {
return this.memoCountSteps;
}
let countSteps = 1;
while (true) {
if (!this.textData[`newCombats.trainingModal.step${countSteps}.title`]) {
countSteps -= 1;
break;
}
countSteps++;
}
this.memoCountSteps = countSteps;
return countSteps;
}
}
class TrainingCookie {
static cookieName = 'registrationModal';
static isExistCookie() {
let matches = document.cookie.match(
new RegExp('(?:^|; )' + this.cookieName.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + '=([^;]*)')
);
return matches ? decodeURIComponent(matches[1]) : undefined;
}
static deleteCookie() {
document.cookie = `${this.cookieName}=true; max-age=0`;
}
}
class ModalLocalStorage {
stepItemName = 'trainingModalCurrentStep';
hideRegistrationModal = 'hideRegistrationModal';
develop = 'trainingModalDevelop';
constructor() {}
get getStep() {
return localStorage.getItem(this.stepItemName);
}
get getHideRegistrationModal() {
return localStorage.getItem(this.hideRegistrationModal);
}
get isDevelop() {
return localStorage.getItem(this.develop);
}
set changeStep(step) {
localStorage.setItem(this.stepItemName, step);
}
addHideRegistrationModal() {
localStorage.setItem(this.hideRegistrationModal, true);
}
removeData(name) {
if (name === 'step') {
localStorage.removeItem(this.stepItemName);
} else if (name === 'hide') {
localStorage.removeItem(this.hideRegistrationModal);
}
}
}
class ModalWindowRender {
featuresService = undefined;
localStorageService = undefined;
externalStylesService = undefined;
step = 1;
$modalMain = document.createElement('div');
$step = null;
$title = null;
$text = null;
$button = null;
constructor(featuresService, localStorageService, externalStylesService) {
this.featuresService = featuresService;
this.localStorageService = localStorageService;
this.externalStylesService = externalStylesService;
}
createModal() {
this.$modalMain.id = 'trainingModalMain';
this.$modalMain.innerHTML = `
<div id="trainingModalBackground">
<div id="trainingModalContainerHihgtlightes">
<div id="trainingModalContainer">
<div id="trainingModalContentContainer">
<p id="trainingModalCurrentStep"></p>
<h3 id="trainingModalTitle"></h3>
<div id="trainingModalTextContainer">
<p id="trainingModalText"></p>
</div>
</div>
<button id="trainingModalButton"></button>
</div>
</div>
</div>`;
document.body.append(this.$modalMain);
}
removeModal() {
this.$modalMain.remove();
}
initializeModalContent() {
this.$step = document.getElementById('trainingModalCurrentStep');
this.$title = document.getElementById('trainingModalTitle');
this.$text = document.getElementById('trainingModalText');
this.$button = document.getElementById('trainingModalButton');
this.externalStylesService.changeStylesForRelines = false;
this.changeModalContent = Number(this.localStorageService.getStep) || 1;
}
get button() {
return this.$button;
}
set changeModalContent(step) {
const countSteps = this.featuresService.getCountSteps();
switch (step) {
case 1:
this.externalStylesService.addStylesForStep1();
break;
case 2:
this.externalStylesService.removeStylesOfHighlightedElements();
this.externalStylesService.addStylesForStep2();
break;
case 3:
this.externalStylesService.removeStylesOfHighlightedElements();
this.externalStylesService.addStylesForStep3();
break;
case 4:
this.externalStylesService.removeStylesOfHighlightedElements();
break;
case 5:
this.externalStylesService.removeStylesOfHighlightedElements();
break;
}
this.$step.textContent = `${step}/${countSteps}`;
this.$title.textContent = this.featuresService.getTextForModal(`newCombats.trainingModal.step${step}.title`);
this.$text.innerText = this.featuresService.getTextForModal(`newCombats.trainingModal.step${step}.text`);
this.localStorageService.changeStep = step;
this.$button.textContent = this.featuresService.getTextForModal(
`newCombats.trainingModal.${step < countSteps ? 'nextButton' : 'closeButton'}`
);
}
}
class ExternalStyles {
$relineX = document.getElementById('reline1');
$relineY = document.getElementById('reline2');
constructor() {}
set changeStylesForRelines(showRelines) {
this.$relineX.style.zIndex = showRelines ? 1001 : -1;
this.$relineY.style.zIndex = showRelines ? 1000 : -1;
}
removeStylesOfHighlightedElements() {
const $highlightedElements = document.getElementsByClassName('highlightedTrainingElement');
const $highlightedBackgrounds = document.getElementsByClassName('highlightedTrainingElementBackground');
const $highlightedPositions = document.getElementsByClassName('highlightedTrainingElementPosition');
const $highlightedZIndexes = document.getElementsByClassName('highlightedTrainingElementZIndex');
for (let elem of $highlightedElements) {
elem.classList.remove('highlightedTrainingElement');
}
for (let elem of $highlightedBackgrounds) {
elem.classList.remove('highlightedTrainingElementBackground');
}
for (let elem of $highlightedPositions) {
elem.classList.remove('highlightedTrainingElementPosition');
}
for (let elem of $highlightedZIndexes) {
elem.classList.remove('highlightedTrainingElementZIndex');
}
}
addStylesForStep1() {
const $header = document.getElementById('mainHeader');
const $frame = document.getElementById('sectionTd');
$header.classList.add('highlightedTrainingElement');
$frame.classList.add('highlightedTrainingElement', 'highlightedTrainingElementPosition');
}
addStylesForStep2() {
const $chatWindow = document.getElementById('chat_block');
const $leftIcon = document.getElementById('chatLeftIcon');
const $textInput = document.getElementById('textmsg');
const $sendButton = document.getElementById('sendButtonTextMsg');
$chatWindow.classList.add('highlightedTrainingElement', 'highlightedTrainingElementBackground');
$leftIcon.classList.add('highlightedTrainingElement', 'highlightedTrainingElementPosition');
$textInput.classList.add('highlightedTrainingElement', 'highlightedTrainingElementPosition');
$sendButton.classList.add('highlightedTrainingElement', 'highlightedTrainingElementPosition');
}
addStylesForStep3() {
const $online = document.getElementById('online');
$online.classList.add('highlightedTrainingElement', 'highlightedTrainingElementPosition');
}
}
function* stepForwardGenerator({ countSteps, renderInstance, localStorageInstance, externalStylesInstance }) {
let currentStep = Number(localStorageInstance.getStep);
while (true) {
if (currentStep < countSteps) {
currentStep += 1;
externalStylesInstance.removeStylesOfHighlightedElements();
renderInstance.changeModalContent = currentStep;
} else {
externalStylesInstance.changeStylesForRelines = true;
externalStylesInstance.removeStylesOfHighlightedElements();
renderInstance.removeModal();
localStorageInstance.removeData('step');
TrainingCookie.deleteCookie();
}
yield;
}
}
document.addEventListener('DOMContentLoaded', () => {
setTimeout(() => {
const modalLocalStorage = new ModalLocalStorage();
const isDevelop = modalLocalStorage.isDevelop;
if (TrainingCookie.isExistCookie() || isDevelop) {
if (modalLocalStorage.getHideRegistrationModal && !modalLocalStorage.getStep && !isDevelop) {
return;
}
modalLocalStorage.addHideRegistrationModal();
const features = new Features();
const externalStyles = new ExternalStyles();
const modalWindowRender = new ModalWindowRender(features, modalLocalStorage, externalStyles);
modalWindowRender.createModal();
modalWindowRender.initializeModalContent();
const changeStep = stepForwardGenerator({
countSteps: features.getCountSteps(),
renderInstance: modalWindowRender,
localStorageInstance: modalLocalStorage,
externalStylesInstance: externalStyles,
});
const $button = modalWindowRender.button;
$button.onclick = () => {
changeStep.next();
};
} else {
modalLocalStorage.removeData('step');
modalLocalStorage.removeData('hide');
}
}, 1000);
});

View File

@@ -0,0 +1,95 @@
/* MODAL STYLES */
#trainingModalMain {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
}
#trainingModalBackground {
height: 100%;
width: 100%;
background: rgb(0, 0, 0, 0.5);
z-index: 1100;
}
#trainingModalContainerHihgtlightes {
position: relative;
height: 100%;
width: 100%;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
z-index: 1200;
}
#trainingModalContainer {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
background: #e2e0e1;
padding: 30px;
border: 2px solid black;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
}
#trainingModalContentContainer {
width: 600px;
height: 300px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
margin-bottom: 20px;
}
#trainingModalTitle {
font-size: 16px;
font-weight: 600;
margin-bottom: 20px;
}
#trainingModalCurrentStep {
margin-bottom: 10px;
}
#trainingModalTextContainer {
display: flex;
overflow-y: scroll;
}
#trainingModalText {
white-space: pre-line;
}
#trainingModalButton {
width: 100px;
}
/* ANOTHER STYLES */
.highlightedTrainingElement {
z-index: 1150;
opacity: 0.83;
}
.highlightedTrainingElementZIndex {
z-index: 1;
}
.highlightedTrainingElementPosition {
position: relative;
}
.highlightedTrainingElementBackground {
background: #e2e0e1;
}
.pseudoElement {
background: red;
}