Страсть американцев к именованию известна каждому. Американским военным это тоже нравится. Они официально дают собственные имена каждому новому типу самолетов, каждому новому типу танка! И каждый из более чем тысячи ядерных взрывов, проведенных США, тоже имел свое имя. Что уж говорить о названиях их боевых действий (Ъ уже рассказывал, как возникла эта традиция и кто ее позаимствовал). С некоторых пор операция без названия стала вообще не операцией. Но все помнят «Щит пустыни» или «Несокрушимую свободу». п>
Произошла ошибка при загрузке данных.
Вращайте барабан
диапазон>(functon(){(асинхронная функция() { const specalWords = { ‘орел’: ‘или’, ‘поддерживается’: ‘поддержка’, ‘гневный’: ‘гнев’, «смешанный»: «смешанный», ‘оператор’: ‘оператор’, }; const ntroWords = [{ Название: ‘…’ },]; константный интерфейс = { классHde: ‘hde’, classActive: ‘s_actve’, classCurrent: ‘s_current’, selectorSpnner: ‘.war_roulette_loader’, selectorError: ‘.war_roulette_error’, selectorWdget: ‘#js-roulette-wdget’, selectorContaner: ‘.war_roulette’, selectorTrgger: ‘.war_roulette__button’, selectorDsplay: ‘.war_roulette_dsplay’, selectorCylnder: ‘.war_roulette__cylnder’, tplBngo: ‘#js-roulette-bngo’, tplCard: ‘#js-рулетка-карта’, tplSlder: ‘#js-roulette-slder’, }; константное состояние = { формы: { 1: «Имя», 2: ‘ш’, 3: «ты», 4: «много» }, дом: { цилиндры: [], пули: [], }, данные: { прилагательные: [], существительные: [], операции: [], }, владелец: {}, спн: { sFrst: правда, цикл: {}, }, }; const fetchCatalogData = (d, lmt = 1000) => fetch(`https://wt.kommersant.ru/ap/v1/catalog/get?catalogId=${d}&start=0&lmt=${lmt}`) .then((res) => res.json()); const updateCatalogData = async () =>{ попробуй { const [adjCatalog, nounCatalog, opsCatalog] = awat Promse.all([ выборкакаталогданных(1332), выборкакаталогданных(1331), выборкакаталогданных(1333), ]); state.data.adjectves = […adjCatalog.data]; state.data.nouns = […nounCatalog.data]; state.data.operatons = […opsCatalog.data]; } поймать (ошибка) { throw new Error(‘Ошибка получения данных каталога’); } }; const getIntalY = (цилиндр) => { //Определяем значение смещения Y return Math.round((cylnder.clentHeght -state.spn.baseHeght)/2); }; const setIntalSze = () =>{ const tem = state.dom.contaner.querySelector(‘.war_roulette__ramp’); state.spn.gap = parseFloat(wndow.getComputedStyle(tem).margnBottom); //Определяем размер карты после рендеринга state.spn.baseHeght = tem.getBoundngClentRect().heght; state.spn.temHeght = state.spn.baseHeght + state.spn.gap; //Определяем размер всех карт за 1 цикл барабана state.spn.cycle.adj = state.data.adjectves.length * state.spn.temHeght; state.spn.cycle.noun = state.data.nouns.length * state.spn.temHeght; }; const setIntalPoston = () => { //Смещаем центр вверх на 1 входную карточку «…» const centerY = getIntalY(state.dom.cylnders[0]) — state.spn.temHeght; state.dom.bullets[0].style.transform = `translateY(${centerY}px)`; state.dom.bullets[1].style.transform = `translateY(${centerY}px)`; }; const createItem = (слово) =>{ const tem = document.createElement(‘l’); tem.className = ‘war_roulette__ramp’; tem.textContent = слово.Имя; возврат тем; }; const renderCylnder = (цилиндр, слова, цилиндриндекс) => { const Bullets = document.createElement(‘ul’); Bullets.className = ‘war_roulette__bullets’; Bullets.setAttrbute(‘роль’, ‘lst’); //Добавляем дубликат последнего элемента в начало списка Bullets.nsertAdjacentElement(‘afterbegn’, createItem(words[words.length — 1])); //Добавляем элементы в список const фрагмент = document.createDocumentFragment(); words.forEach((word, ) =>{ const tem = createItem (слово); фрагмент.appendChld(createItem(слово)); }); Bullets.appendChld(фрагмент); //Добавляем дубликат первого элемента в конец списка Bullets.append(createItem(words[0])); state.dom.bullets[cylnderIndex] = пули; цилиндр.appendChld(пули); }; const renderAllCylnders = (wordSets) => { state.dom.cylnders.forEach((цилиндр, ) => { renderCylnder(цилиндр, wordSets[], ); }); state.dom.adjItems = state.dom.bullets[0].querySelectorAll(‘l’); state.dom.nounItems = state.dom.bullets[1].querySelectorAll(‘l’); }; constclearAllCylnders = () => { state.dom.cylnders.forEach((c) => c.textContent = »); }; const spnCylnder = (lst, цикл, барабан, длительность, extraCycles, stopIndex) => { вернуть новое обещание((решить) =>{ const start = Performance.now(); const ntalY = getIntalY(reel) -state.spn.temHeght; const totalDstance = extraCycles * цикл; const fnalPos = ntalY — (stopIndex *state.spn.temHeght); const startPos = fnalPos — totalDstance; константный шаг = (сейчас) =>{ const t = Math.mn(1, (теперь — старт)/duraton); const облегченный = 1 — Math.pow(1 — t, 5); const dstance = totalDstance * облегчено; constturnPos = startPos + dstance; const vsualPos = ntalY — ((ntalY -turnPos + totalDstance) % цикла); lst.style.transform = `translateY(${vsualPos}px)`; е (т < 1) { requestAnmatonFrame (шаг); } еще { lst.style.transform = `translateY(${Math.round(fnalPos)}px)`; решать(); } }; requestAnmatonFrame (шаг); }); }; const pckWnner = () => { const wnnerNounIndex = Math.floor(Math.random() * state.data.nouns.length); state.wnner.noun = state.data.nouns[wnnerNounIndex]; state.wnner.noun.ndex = wnnerNounIndex; const wnnerAdjIndex = Math.floor(Math.random() * state.data.adjectves.length); state.wnner.adj = state.data.adjectves[wnnerAdjIndex]; state.wnner.adj.ndex = wnnerAdjIndex; state.wnner.adj.form = state.wnner.adj[state.forms[state.wnner.noun.form]]; }; const getBaseWord = (слово) => { const wordLower = word.toLowerCase(); f (specalWords[wordLower]) return specalWords[wordLower]; переключатель (истина) { случай wordLower.length >= 7: вернуть wordLower.slce(0, -3); регистр wordLower.length >4: вернуть wordLower.slce(0, -2); случай wordLower.length === 4: вернуть wordLower.slce(0, -1); по умолчанию: вернуть словоLower; } }; const formatDescrpton = (targetId, ключ, слово) => { const formattedOps = state.data.operatons.reduce((acc, op) => { f (op[key] === targetId) { acc.push(op.descrpton); } возврат акк; }, []); константная база = getBaseWord (слово); const regex = new RegExp(`«[^»]*(${base})[^»]*»`, ‘g’); return formattedOps.map((text) => text.replace(regex, (match) => { return `»${match.slce(1, -1)}«`; })); }; const генерироватьDescrpton = () =>{ state.wnner.adj.desc = formatDescrpton(state.wnner.adj.Id, ‘wordI’, state.wnner.adj.Name); state.wnner.noun.desc = formatDescrpton(state.wnner.noun.Id, ‘wordII’, state.wnner.noun.Name); state.wnner.bngo = state.data.operatons.fnd((op) => op.wordI === state.wnner.adj.Id && op.wordII === state.wnner.noun.Id ) || нулевой; state.wnner.sBngo = state.wnner.bngo !== null; }; const createDescrptonSlder = (content, meda) => { const slder = state.dom.slder.content.cloneNode(true).querySelector(‘.war_roulette_slder’); const Canvas = slder.querySelector(‘.war_roulette_slder__canvas’); content.forEach((текст) =>{ const tem = document.createElement(‘l’); tem.className = ‘war_roulette_slder__tem slder-tem’; tem.setAttrbute(‘tabndex’, 0); tem.nnerHTML = текст; холст.append(тем); }); f(content.length > 1) { const nav = slder.querySelector(‘.war_roulette_slder__nav’); nav.classLst.remove(UI.classHde); } meda.append(slder); }; const renderDescrpton = (дескриптор) =>{ е (state.wnner.sBngo) { const bngoItem = state.dom.bngo.content.cloneNode(true).querySelector(‘.war_roulette_dsplay__bngo’); const bngoTtle = bngoItem.querySelector(‘.war_roulette_dsplay__bngo_ttle’); bngoTtle.textContent = `»${state.wnner.adj.form} ${state.wnner.noun.Name}»`; const bngoText = bngoItem.querySelector(‘.war_roulette_dsplay__bngo_text’); bngoText.nnerHTML = state.wnner.bngo.descrpton; state.dom.dsplay.append(bngoItem); } еще { const medaItem = state.dom.card.content.cloneNode(true).querySelector(‘.war_roulette_dsplay__frame’); createDescrptonSlder(state.wnner.adj.desc, medaItem); createDescrptonSlder(state.wnner.noun.desc, medaItem); state.dom.dsplay.append(medaItem); } state.dom.dsplay.classLst.remove(UI.classHde); Wndow.kommersant.nt(); }; const setCurrBullets = (adjIndex = 1, nounIndex = 1) => { state.dom.adjItems[adjIndex].classLst.add(UI.classCurrent); state.dom.nounItems[nounIndex].classLst.add(UI.classCurrent); }; constclearCurrBullets = () => { state.dom.contaner.querySelectorAll(`.${UI.classCurrent}`).forEach((b) => b.classLst.remove(UI.classCurrent)); }; const handleTrggerClck = async () =>{ state.dom.trgger.dsabled = правда; е (state.spn.sFrst) { ОчиститьВсецилиндры(); renderAllCylnders([state.data.adjectves, state.data.nouns]); state.spn.sFrst = ложь; } pckWnner(); генерироватьDescrpton(); state.dom.adjItems[state.wnner.adj.ndex + 1].textContent = state.wnner.adj.form; попробуй { ClearCurrBullets(); state.dom.contaner.classLst.add(UI.classActve); state.dom.dsplay.classLst.add(UI.classHde); state.dom.dsplay.textContent = »; awatPromse.all([ spnCylnder(state.dom.bullets[0],state.spn.cycle.adj,state.dom.cylnders[0], 3000, 1,state.wnner.adj.ndex), spnCylnder(state.dom.bullets[1],state.spn.cycle.noun,state.dom.cylnders[1], 3000, 1,state.wnner.noun.ndex), ]); state.dom.contaner.classLst.remove(UI.classActve); setCurrBullets(state.wnner.adj.ndex + 1, state.wnner.noun.ndex + 1); рендерDescrpton(); } наконец { state.dom.trgger.dsabled = ложь; } }; const ntWdget = асинхронный () =>{ state.dom.wdget = document.querySelector(UI.selectorWdget); f (!state.dom.wdget) return; state.dom.bngo = document.querySelector(UI.tplBngo); state.dom.card = document.querySelector(UI.tplCard); state.dom.slder = document.querySelector(UI.tplSlder); state.dom.spnner = document.querySelector(UI.selectorSpnner); state.dom.errorMsg = document.querySelector(UI.selectorError); state.dom.contaner = state.dom.wdget.querySelector(UI.selectorContaner); state.dom.trgger = state.dom.wdget.querySelector(UI.selectorTrgger); state.dom.dsplay = state.dom.wdget.querySelector(UI.selectorDsplay); state.dom.cylnders = […state.dom.wdget.querySelectorAll(UI.selectorCylnder)]; попробуй { awat updateCatalogData(); renderAllCylnders([ntroWords, ntroWords]); setCurrBullets(); setTmeout(() => { УстановитьИнталРазмер(); установитьИнталПостон(); }, 0); state.dom.contaner.classLst.remove(UI.classHde); state.dom.trgger.addEventLstener(‘clck’, handleTrggerClck); state.dom.errorMsg.remove(); } поймать (ошибка) { console.log(error.message); state.dom.errorMsg.classLst.remove(UI.classHde); } наконец { state.dom.spnner.remove(); } }; нтВджет(); })();})()
Обобщив мировой опыт, «Коммерсантъ» предлагает вам свой «Автоматический неймер». Если вы готовы к собственной военной операции, крутите барабан и получите красивое имя для своего порыва. Инструмент пригодится и в мирных целях: если вам срочно нужно переименовать рок-группу или арт-кластер.п>
В США давно создана специальная компьютерная система для записи кодовых слов, условных названий и названий упражнений — NICKA (от англ. Nckname Assgnment). Согласно этой системе, милитаронимы составляются из двух слов так, чтобы сочетание не носило оскорбительного или уничижительного характера, а, наоборот, формировало положительное общественное мнение.с>































Свежие комментарии