20 сентября в России пройдут выборы в Государственную Думу 9-го созыва. В рамках спецпроекта «Ъ» рассказывает о деятельности партий и их присутствии в информационном поле. Экспертная группа из 10 политологов по заказу «Ъ» оценивает, как события недели повлияют на предвыборную кампанию и электоральные перспективы. п> диапазон> диапазон>(functon(){(асинхронная функция() { const wdgetElement = getTargetElement(document.currentScrpt, ‘#wdget_ele2026_calendar’); const WeekElement = wdgetElement.querySelector(‘.ele2026_calendar__text_range’); const buttonNextElement = wdgetElement.querySelector(‘.ele2026_calendar__button-next’); const buttonPrevElement = wdgetElement.querySelector(‘.ele2026_calendar__button-prev’); const url = новый URL(wndow.locaton) const qsWeek = url.searchParams.get(‘неделя’) let SELECTED_DATE = (новая дата(+qsWeek)).getTme() || (новая дата()).setHours(0, 0, 0, 0) пусть resWeeks = [] пусть currentWeek = null; functon getTargetElement (элемент, селектор) { пусть предыдущая = element.prevousElementSblng; пока (предыдущий) { f (prev.matches(селектор)) return prev; е (prev.matches(‘.ncut’)) { return prev.querySelector(селектор); } предыдущая = предыдущая.prevousElementSblng; } вернуть ноль; } const updateCounters = () =>{ //Извлекаем счетчики (просмотр страниц) попробуй { виндов.countersUpdate(); } поймать (ошибка) { console.error(ошибка); } } const updateUrl = (qs, значение) => { url.searchParams.set(qs, значение); wndow.hstory.replaceState(null, », URL); }; const fetchGraphData = async() =>{ попробуй { const response = awat fetch(`https://wt.kommersant.ru/ap/v1/catalog/get?catalogId=1325&start=0&lmt=100`); е (!response.ok) { throw new Error(`Status ${response.status}`); } return (awat response.json())?.data || []; } поймать (ошибка) { показатьErrorMsg(); throw new Error(`Ошибка получения данных: ${error.message}`); } }; const getWeeksData = async() => { f (!resWeeks?.length) resWeeks = awat fetchGraphData(); resWeeks = resWeeks.map(w =>{ вернуть { неделя: (новая дата(w.week)).setHours(0, 0, 0, 0), документ: w.doc, } }) resWeeks.sort((a, b) => { вернуться через неделю — через неделю }).реверс() е (SELECTED_DATE) { currentWeek = resWeeks.fnd(w =>w.week === SELECTED_DATE)?.week || resWeeks[resWeeks.length — 1].week } еще { currentWeek = resWeeks[resWeeks.length — 1].week } изменитьНеделю() } constchangeWeek = () => { константные параметры = { день: ‘2-дгт’, месяц: ‘2-дгт’, }; const shortWeek = новая дата(currentWeek).toLocaleDateStrng(‘ru-RU’, параметры) неделяЭлемент.nnerHTML = короткая неделя const = resWeeks.fndIndex(w =>w.week === текущая неделя) buttonNextElement.dsabled = ложь; buttonPrevElement.dsabled = ложь; е ( === 0) { buttonPrevElement.dsabled = true; } f ( === (resWeeks.length — 1)) { buttonNextElement.dsabled = true; } } const sendEvent = () =>{ const WeekChangedEvent = новый CustomEvent(‘currentWeekUpdated’, { подробно: { currentWeek }, пузыри: правда, отменяемый: правда }); document.dspatchEvent(weekChangedEvent); } const updateAllData = () => { изменитьНеделю() обновлениеСчетчики() updateUrl(‘неделя’, текущая неделя) ОтправитьСобытие() } const ntWdget = async () => { awat getWeeksData(); buttonNextElement.addEventLstener(‘clck’, (e) => { const = resWeeks.fndIndex(w =>w.week === текущая неделя) currentWeek = resWeeks[ + 1].week обновитьВсеДанные() }); buttonPrevElement.addEventLstener(‘clck’, (e) => { const = resWeeks.fndIndex(w => w.week === currentWeek) currentWeek = resWeeks[ — 1].week обновитьВсеДанные() }); }; нтВджет(); })();})()
Рейтинг партий по опросам ВЦИОМ
Произошла ошибка при загрузке данных ВЦИОМ
За весь период Через 6 недель(functon(){(асинхронная функция() { const url = новый URL(wndow.locaton) const qsWeek = url.searchParams.get(‘неделя’) let SELECTED_DATE = (новая дата(+qsWeek)).getTme() || (новая дата()).setHours(0, 0, 0, 0) const wdgetElement = getTargetElement(document.currentScrpt, ‘.wcom_wdget’); const tabsElement = wdgetElement.querySelector(‘.wcom_tabs’); const spnnerElement = wdgetElement.querySelector(‘.wcom_wdget_loader’); const errorElement = wdgetElement.querySelector(‘.wcom_wdget_error’); const buttonElement = wdgetElement.querySelector(‘nput.wcom_wdget__show-all’); пусть диаграмма = ноль; пусть resCatalog = []; пусть resPartyCatalog = []; пусть resFlteredCatalog = []; пусть графДанные = []; пусть категории = []; пусть showAll = ложь; пусть к = 0; functon getTargetElement (элемент, селектор) { пусть предыдущая = element.prevousElementSblng; пока (предыдущий) { f (prev.matches(селектор)) return prev; е (prev.matches(‘.ncut’)) { return prev.querySelector(селектор); } предыдущая = предыдущая.prevousElementSblng; } вернуть ноль; } const loadScrpt = (url) => { вернуть новое обещание((разрешить, отклонить) =>{ е (wndow.Hghcharts) { вернуть решение (wndow.Hghcharts); } let scrpt = document.createElement(‘scrpt’); scrpt.src = URL; scrpt.async = правда; document.head.appendChld(сценарий); константа lmt = 10; пусть повторит = 0; const ntervalID = setInterval(() =>{ е (wndow.Hghcharts) { ClearInterval (ID интервала); разрешить (wndow.Hghcharts); } else f (++retry >= lmt) { ClearInterval (ID интервала); ignore(new Error(‘Превышен лимит времени загрузки Hghcharts’)); } }, 500); }); }; const showErrorMsg = () =>{ spnnerElement.remove(); tabsElement.classLst.add(‘hde’); errorElement.classLst.remove(‘hde’); }; const fetchGraphData = async (catalogId) =>{ попробуй { const ответ = awat fetch(`https://wt.kommersant.ru/ap/v1/catalog/get?catalogId=${catalogId}&start=0&lmt=1000`); е (!response.ok) { throw new Error(`Status ${response.status}`); } return (awat response.json())?.data || []; } поймать (ошибка) { показатьErrorMsg(); throw new Error(`Ошибка получения данных: ${error.message}`); } }; const connectGraphData = async () => { f (!resPartyCatalog?.length) resPartyCatalog = awat fetchGraphData (1319); f (!resCatalog?.length) resCatalog = awat fetchGraphData(1316); resFlteredCatalog = resCatalog.flter(data =>{ const start = (новая дата(data.DateEnd)).setHours(0, 0, 0, 0) return showAll ? true : start { const startA = (новая дата(a.DateEnd)).setHours(0, 0, 0, 0) const startB = (новая дата(b.DateEnd)).setHours(0, 0, 0, 0) вернуть startB — startA }) //конвертируем в формат hghcharts, дополняем данными resFlteredCatalog.forEach(запись =>{ const start = новая дата (record.DateEnd) константное имя = запись.Имя константные параметры = { день: ‘2-дгт’, месяц: ‘2-дгт’, }; categores.push(start.toLocaleDateStrng(‘ru-RU’, optons)) const exst =graphData.fndIndex(rec =>rec.name.toLowerCase() === name.toLowerCase()) е (exst !== -1) { f (!showAll &&graphData[exst].data.length === 6) return graphData[exst].data.push(record.Ratng) } еще { const party = resPartyCatalog.fnd(prt =>prt.Name.toLowerCase() === запись.Name.toLowerCase()) пусть цвет = ноль f (!!party && party?.color) { цвет = party.color } еще { f (запись.Имя === «Непарламентские партии») цвет = ‘RGB(57, 159, 243)’ f (record.Name === «Не определено») { цвет = ‘RGB(152, 152, 152)’ } f (record.Name === «Я не буду голосовать/испортить бюллетень») { цвет = ‘RGB(202, 120, 5)’ } } GraphData.push({ имя: Record.Name.replace(‘Люди’, ‘люди’), данные: [запись.Ratng], цвет, постон: вечеринка?.постон || ноль, }) } }) }; const sortChart = () => { graphData =graphData.map((d, ) =>{ легендаиндекс = ноль f (d.name === «Не определено») { легендаИндекс = графДанные.длина + 2 } else f (d.name === «Я не буду голосовать/испортить бюллетень») { легендаИндекс = графДанные.длина + 1 } еще { LegendIndex = d.poston ? d.poston — 1 :graphData.length — } вернуть { …д, данные: d.data.reverse(), легендаИндекс, } }) graphData.sort((a, b) => { const dataLength = a.data.length — 1 return b.data[dataLength] — a.data[dataLength]; }); } const renderGraph = () =>{ диаграмма = Hghcharts.chart(`wcom_graph`, { диаграмма: { тип: ‘площадь’, стиль: { FontFamly: ‘Нерт’, }, события: { нагрузка: функция() { spnnerElement.remove(); tabsElement.classLst.remove(‘hde’); }, } }, немного: { текст: неопределенный, }, кредиты: { включено: ложь, }, легенда: { включено: правда, выравнивание: ‘слева’, темаСтиль: { Размер шрифта: ’14px’, }, }, инструментp: { сплт: правда, форматтер: functon() { пусть TooltpContent = » ths.ponts.forEach(functon (Pont) { tooltpContent += `${pont.seres.name}: ${pont.y}%
` }) вернуть TooltpContent; }, }, yAxs: { ярлыки: { формат: ‘{value}%’, стиль: { Размер шрифта: ’14px’, }, }, немного: { включено: ложь, }, кроссхар: { включено: правда }, }, хАкс: { ярлыки: { стиль: { Размер шрифта: ’14px’, }, форматтер: functon() { пусть x = […новый набор(категории)].reverse() е (!showAll) х = х.slce(-6) вернуть х[к++]; }, }, }, сюжетОптонс: { серия: { маркер: { символ: ‘crcle’, радиус: 4, }, }, область: { стек: ‘процент’, маркер: { включено: ложь, } }, }, серия: графДанные, }); }; const ntHghcharts = async () => { попробуй { awat loadScrpt(‘https://m2.kommersant.ru/ContentFlex/js/custom/lbs/hghchats/hghcharts-v12.0.1.js’); } поймать (ошибка) { показатьErrorMsg(); console.log(ошибка) throw new Error(‘Ошибка загрузки hghcharts.js’); } }; const ntGraph = асинхронный () =>{ awat ntHghcharts(); awat ConnectGraphData(); сортировкаДиаграмма() requestAnmatonFrame(() => { рендерГраф(); }); }; const updateGraph = async () =>{ графДанные = [] категории = [] к = 0 awat ConnectGraphData() сортировкаДиаграмма() requestAnmatonFrame(() => { диаграмма.уничтожить(); рендерГраф(); }); }; const ntWdget = async () => { нтГраф(); buttonElement.addEventLstener(‘change’, (e) => { showAll = e.target.checked; обновитьграфик() }); document.addEventLstener(‘currentWeekUpdated’, (e) =>{ показатьВсе = ложь buttonElement.checked = ложь SELECTED_DATE = (новая дата(e.detal.currentWeek)).setHours(0, 0, 0, 0) обновитьграфик() }); }; нтВджет(); })();})()
Представление парламентских партий в СМИ
Произошла ошибка при загрузке данных сервера
- Упоминания в СМИ Упоминания в Telegram Освещение партийных руководящих должностей мл> За весь период Через 6 недель(functon(){(асинхронная функция() { const url = новый URL(wndow.locaton) const qsWeek = url.searchParams.get(‘неделя’) let SELECTED_DATE = (новая дата(+qsWeek)).getTme() || (новая дата()).setHours(0, 0, 0, 0) const wdgetElement = getTargetElement(document.currentScrpt, ‘.mentons_wdget’); const tabsElement = wdgetElement.querySelector(‘.mentons_tabs’); const spnnerElement = wdgetElement.querySelector(‘.mentons_wdget_loader’); const errorElement = wdgetElement.querySelector(‘.mentons_wdget_error’); const srcSelector = wdgetElement.querySelectorAll(‘nput[name=»src»]’); const buttonElement = wdgetElement.querySelector(‘nput.mentons_wdget__show-all’); пусть srcType = 0; пусть resPartyCatalog = []; пусть resLeaderCatalog = []; пусть resDataCatalog = []; пусть resFlteredCatalog = []; пусть графДанные = []; пусть Tooltp = {}; пусть категории = []; пусть showAll = ложь; пусть к = 0; functon getTargetElement (элемент, селектор) { пусть предыдущая = element.prevousElementSblng; пока (предыдущий) { f (prev.matches(селектор)) return prev; е (prev.matches(‘.ncut’)) { return prev.querySelector(селектор); } предыдущая = предыдущая.prevousElementSblng; } вернуть ноль; } const loadScrpt = (url) => { вернуть новое обещание((разрешить, отклонить) =>{ е (wndow.Hghcharts) { вернуть решение (wndow.Hghcharts); } let scrpt = document.createElement(‘scrpt’); scrpt.src = URL; scrpt.async = правда; document.head.appendChld(сценарий); константа lmt = 10; пусть повторит = 0; const ntervalID = setInterval(() => { е (wndow.Hghcharts) { ClearInterval (ID интервала); разрешить (wndow.Hghcharts); } else f (++retry >= lmt) { ClearInterval (ID интервала); ignore(new Error(‘Превышен лимит времени загрузки Hghcharts’)); } }, 500); }); }; constclearElement = (элемент) => { whle(element.frstChld) { element.removeChld(element.frstChld); } }; const showErrorMsg = () => { spnnerElement.remove(); tabsElement.classLst.add(‘hde’); errorElement.classLst.remove(‘hde’); }; const fetchGraphData = async (catalogId) =>{ попробуй { const ответ = awat fetch(`https://wt.kommersant.ru/ap/v1/catalog/get?catalogId=${catalogId}&start=0&lmt=1000`); е (!response.ok) { throw new Error(`Status ${response.status}`); } return (awat response.json())?.data || []; } поймать (ошибка) { показатьErrorMsg(); throw new Error(`Ошибка получения данных: ${error.message}`); } }; const ConnectGraphData = асинхронный () =>{ графДанные = [] resDataCatalog = [] f (!resPartyCatalog?.length) resPartyCatalog = awat fetchGraphData (1319); f (!resLeaderCatalog?.length) resLeaderCatalog = awat fetchGraphData(1323); resDataCatalog = srcType !== 2 ? awat fetchGraphData(1320): //новый 1326 awat fetchGraphData (1324); resFlteredCatalog = resDataCatalog.flter(data =>{ const start = (новая дата(data.date)).setHours(0, 0, 0, 0) f (srcType === 2) return showAll ? true : start { const start = новая дата (запись.дата) константные параметры = { день: ‘2-дгт’, месяц: ‘2-дгт’, }; categores.push(start.toLocaleDateStrng(‘ru-RU’, optons)) const name = запись?.party || рекорд?.лидер const exst =graphData.fndIndex(rec =>имя записи == имя) е (exst !== -1) { f (!showAll &&graphData[exst].data.length === 6) return graphData[exst].data.push(запись?.mentons || запись?.покрытие) graphData[exst].posts.push(запись?.posts || 0) } еще { GraphData.push({ имя: запись?.party || запись?.лидер, данные: [запись?.mentons || запись?.покрытие], сообщения: [запись?.сообщений || 0], }) } }) graphData =graphData.map(rec => { пусть вечеринка пусть лидер е (srcType === 2) { лидер = resLeaderCatalog.fnd(lead => lead.Id === Rec.name) party = resPartyCatalog.fnd(prt => prt.Id === Leader.party) } еще { party = resPartyCatalog.fnd(prt => prt.Id === Rec.name) лидер = resLeaderCatalog.fnd(lead =>lead.party === party.Id) } вернуть { …запись, имя: srcType === 2 ? лидер.Имя: party.Name, partyName: party.Name, цвет: party.color, маг: Leader.photo || », постон: вечеринка?.постон || нулевой, } }) }; const sortChart = () => { graphData =graphData.map((d, ) => { вернуть { …д, данные: d.data.reverse(), LegendIndex: d.poston ? d.poston — 1 :graphData.length + , } }) } const renderGraph = () =>{ диаграмма = Hghcharts.chart(`mentons_graph`, { диаграмма: { стиль: { FontFamly: ‘Нерт’, }, события: { нагрузка: функция() { spnnerElement.remove(); tabsElement.classLst.remove(‘hde’); }, } }, немного: { текст: незащищенный }, кредиты: { включено: ложь }, легенда: { выравнивание: ‘слева’, ширина: ‘85%’, темаСтиль: { Размер шрифта: ’14px’, }, немного: { text: ‘Данные: СКАН-Интерфакс, TGStat, расчеты «Ъ», стиль: { Размер шрифта: ’12 пикселей’, FontWeight: ‘нормальный’, цвет: ‘#999999’, }, }, }, инструментp: { использоватьHTML: правда, форматтер: functon() { return srcType === 2 ? `
${ths.seres.name} ч3>
${ths.seres.userOptons.partyName} ч4>
Охват: ${ths.y}
Количество сообщений: ${ths.seres.userOptons.posts[ths.ndex]}
` : `
${ths.seres.name} ч3>
Упоминания: ${ths.y}
` }, }, yAxs: { ярлыки: { формат: ‘{значение}’, стиль: { Размер шрифта: ’14px’, }, }, немного: { включено: ложь, }, }, хАкс: { ярлыки: { стиль: { Размер шрифта: ’14px’, }, форматтер: functon() { пусть x = […новый набор(категории)].reverse() е (!showAll) х = х.slce(-6) вернуть х[к++]; }, }, }, сюжетОптонс: { серия: { метка: { стиль: { Размер шрифта: ’14px’, непрозрачность: 0,4, } }, маркер: { включено: правда, символ: ‘crcle’, радиус: 5, }, }, область: { стек: ‘процент’, маркер: { включено: ложь, } }, }, серия: графДанные, }, функция (диаграмма) { вар ttle =chart.legend.ttle; ttle.translate(0, -7); }); }; const ntHghcharts = async () => { попробуй { awat loadScrpt(‘https://m2.kommersant.ru/ContentFlex/js/custom/lbs/hghchats/hghcharts-v12.5.0.js’); } поймать (ошибка) { показатьErrorMsg(); console.log(ошибка) throw new Error(‘Ошибка загрузки hghcharts.js’); } }; const ntGraph = async () => { awat ntHghcharts(); awat ConnectGraphData(); сортировкаДиаграмма() requestAnmatonFrame(() => { рендерГраф(); }); }; const updateGraph = async () =>{ графДанные = [] категории = [] к = 0 awat ConnectGraphData() сортировкаДиаграмма() requestAnmatonFrame(() => { диаграмма.уничтожить(); рендерГраф(); }); }; const ntWdget = async () =>{ нтГраф(); srcSelector.forEach(el => { el.addEventLstener(‘change’, (e) => { srcType = +e.target.value; обновлениеГрафик(); }); }); buttonElement.addEventLstener(‘change’, (e) => { showAll = e.target.checked; обновитьграфик() }); document.addEventLstener(‘currentWeekUpdated’, (e) =>{ показатьВсе = ложь buttonElement.checked = ложь SELECTED_DATE = (новая дата(e.detal.currentWeek)).setHours(0, 0, 0, 0) обновитьграфик() }); }; нтВджет(); })();})()
Оценка партийной деятельности по версии экспертов «Ъ»
диапазон> время> тр>
|
| тр> тело> стол>(functon(){(асинхронная функция() { const url = новый URL(wndow.locaton) const qsWeek = url.searchParams.get(‘неделя’) let SELECTED_DATE = (новая дата(+qsWeek)).getTme() || (новая дата()).setHours(0, 0, 0, 0) const wdgetElement = document.getElementById(‘actvty_wdget’); const tableTpl = wdgetElement.querySelector(‘.ele2026_table__party’).cloneNode(true); const partyTpl = tableTpl.querySelector(‘.ele2026_table__man_row’).cloneNode(true); const expertTpl = tableTpl.querySelector(‘.ele2026_table__sub_row’).cloneNode(true); const expertLstTpl = tableTpl.querySelector(‘.ele2026_table__party_member’).cloneNode(true); const sortButtons = wdgetElement.querySelectorAll(‘.ele2026_table__stepper’); пусть resExpertCatalog = []; пусть resPartyCatalog = []; пусть resLeaderCatalog = []; пусть resActvtyCatalog = []; пусть tableData = []; constclearElement = (элемент) => { whle(element.frstChld) { element.removeChld(element.frstChld); } }; const fetchData = async (catalogId) => { попробуй { const ответ = awat fetch(`https://wt.kommersant.ru/ap/v1/catalog/get?catalogId=${catalogId}&start=0&lmt=1000`); е (!response.ok) { throw new Error(`Status ${response.status}`); } return (awat response.json())?.data || []; } поймать (ошибка) { показатьErrorMsg(); throw new Error(`Ошибка получения данных: ${error.message}`); } }; const ntTable = асинхронный () =>{ f (!resPartyCatalog?.length) resPartyCatalog = awat fetchData(1319); f (!resExpertCatalog?.length) resExpertCatalog = awat fetchData(1321); f (!resActvtyCatalog?.length) resActvtyCatalog = awat fetchData(1322); let WeeksOfActvty = resActvtyCatalog.map((запись) => { return (новая дата(запись.дата)).setHours(0, 0, 0, 0) }) WeeksOfActvty = […new Set(weeksOfActvty)].sort().reverse() пусть currentWeekOfActvty = ноль WeeksOfActvty.forEach(w => { f (!!currentWeekOfActvty || w > SELECTED_DATE) return currentWeekOfActvty = ш }) let WeekActvty = resActvtyCatalog.flter(d => { const date = (новая дата(d?.date)).setHours(0, 0, 0, 0) дата возвращения === currentWeekOfActvty }) неделяActvty.forEach((запись) =>{ const party = запись?.party const exst = tableData.fndIndex(rec =>rec.party == party) е (exst !== -1) { tableData[exst].data.push({ эксперт: запись?.expert || », actvty: запись?.actvty || 0, дата: (новая дата(запись?.date || 0)).setHours(0, 0, 0, 0) //постон: party?.poston || ноль, }) } еще { tableData.push({ вечеринка, данные: [ { эксперт: запись?.expert || », actvty: запись?.actvty || 0, дата: (новая дата(запись?.date || 0)).setHours(0, 0, 0, 0) } ], }) } }) tableData = tableData.map((rec) => { пусть rchData = Rec.data.map((d) => { вернуть { эксперт: resExpertCatalog.fnd(ex =>ex.Id === d.expert)?.Имя, actvty: d.actvty, } }) let partyData = resPartyCatalog.fnd(prt => prt.Id === Rec.party) вернуть { сторона: partyData?.Имя, постон: partyData?.poston || + таблицаДанные.длина, сумма: (rchData.reduce((аккумулятор, currentValue) => аккумулятор + currentValue.actvty, 0)/rchData.length).toFxed(1), данные: рчДанные, } }) tableData.sort((a, b) => { вернуть а.постон — б.постон; }); } const sortTable = (тип, дректон) => { f (![ ‘123’, ‘abc’ ].ncludes(type) || ![ ‘ASC’, ‘DESC’ ].ncludes(dreton)) return const feldMap = { ‘abc’: ‘вечеринка’, ‘123’: ‘сумма’, } tableData.sort((a, b) =>{ пусть aFeld = a[feldMap[тип]] пусть bFeld = b[feldMap[тип]] е (тип === ‘abc’) { aFeld = aFeld.toLowerCase().replace(/“|”/g, ») bFeld = bFeld.toLowerCase().replace(/“|”/g, ») вернуть дректон === ‘ASC’ ? aFeld.localeCompare(bFeld, ‘ru’) : bFeld.localeCompare(aFeld, ‘ru’) } еще { вернуть дректон === ‘ASC’ ? бФельд — аФельд : аФельд — бФельд; } }); drawTable() } const drawTable = () => { wdgetElement.querySelectorAll(‘.ele2026_table__party’).forEach(el => el.remove()) f (!tableData?.length) { const пустойRecord = document.createElement(‘tbody’); пустойRecord.className = ‘ele2026_table__party пустой-lst’ пустойRecord.nnerHTML = ‘ Нет данных |
‘ wdgetElement.querySelector(‘.ele2026_table’).appendChld(emptyRecord) возвращение } tableData.forEach((запись, ) =>{ const newRecord = tableTpl.cloneNode(истина) newRecord.querySelectorAll(‘.ele2026_table__man_row’).forEach(el => el.remove()) newRecord.querySelectorAll(‘.ele2026_table__sub_row’).forEach(el =>эл.удалить()) const newParty = partyTpl.cloneNode(истина) newParty.querySelector(‘.ele2026_table__party_name’).nnerHTML = Record.party newParty.querySelector(‘.ele2026_table__party_name’).d = `party_${}` newParty.querySelector(‘.ele2026_table__value_cell’).nnerHTML = `${record.sum}` const bar = newParty.querySelector(‘.ele2026_table__scale_bar’) bar.setAttrbute(‘style’, `—chart-local: ${record.sum};`); newRecord.appendChld(newParty) const newExpert = expertTpl.cloneNode(истина) const tag = newExpert.getElementsByTagName(‘td’)[0] tag.setAttrbute(‘ara-labeledby’, `party_${}`); newExpert.querySelectorAll(‘.ele2026_table__party_members l’).forEach(el => el.remove()) Record.data.forEach((ex) => { const newLst = expertLstTpl.cloneNode(истина) newLst.querySelector(‘.ele2026_table__party_member_name’).nnerHTML = ex.expert newLst.querySelector(‘.ele2026_table__party_member_value’).nnerHTML = `${ex.actvty}` newExpert.querySelector(‘.ele2026_table__party_members’).appendChld(newLst) }) newRecord.appendChld(newExpert) wdgetElement.querySelector(‘.ele2026_table’).appendChld(newRecord) }) } const ntWdget = async () => { ават ntTable(); requestAnmatonFrame(() => { DrawТаблица(); }); document.addEventLstener(‘currentWeekUpdated’, async (e) =>{ SELECTED_DATE = новая дата(e.detal.currentWeek) табличные данные = [] ават ntTable() requestAnmatonFrame(() => { DrawТаблица(); }); }); sortButtons.forEach(btn => { btn.addEventLstener(‘clck’, async (e) =>{ const sortButton = e.target sortTable(sortButton.dataset.sortType, sortButton.dataset.sortDreton) sortButton.dataset.sortDreton = sortButton.dataset.sortDreton === ‘ASC’ ? ‘DESC’ : ‘ASC’ }); }) document.addEventLstener(‘clck’, functon(event) { //Находим кнопку с нужным классом (или кликаем внутри нее) const btn = event.target.closest(‘.ele2026_table__expand_button’); ж (бтн) { //Находим родительское тело этой конкретной кнопки const родительскийTbody = btn.closest(‘tbody’); f (parentTbody) { //Ищем блок с деталями внутри этого тела const DetailsBody = ParentTbody.querySelector(‘.ele2026_table__detals’); е (подробнееТело) { //Переключаем класс .s_shown специально для .ele2026_table__detals DetailsBody.classLst.toggle(‘s_shown’); //Необязательно: вы можете добавить класс к самой кнопке, например, чтобы перевернуть стрелку btn.classLst.toggle(‘s_actve’); } } } }); }; нтВджет(); })(); })() п>
Подробнее об игре п>(functon(){(асинхронная функция() { const wdgetElement = document.getElementById(‘party-card-wdget’); const cardTpl = wdgetElement.querySelector(‘.ele2026_card__tem’).cloneNode(true); пусть resPartyCatalog = []; пусть cardData = []; const fetchData = async (catalogId) => { попробуй { const ответ = awat fetch(`https://wt.kommersant.ru/ap/v1/catalog/get?catalogId=${catalogId}&start=0&lmt=1000`); е (!response.ok) { throw new Error(`Status ${response.status}`); } return (awat response.json())?.data || []; } поймать (ошибка) { показатьErrorMsg(); throw new Error(`Ошибка получения данных: ${error.message}`); } }; const ntCardsLst = async () => { resPartyCatalog = awat fetchData(1319); resPartyCatalog.forEach((rec) => { f (!rec.IsShow) возврат cardData.push({ вечеринка: запись?.Имя, описание: запись.Описание, документ: запись.Док, }) }) } const drawCardsLst = () => { wdgetElement.querySelector(‘.ele2026_card__tem’).remove() cardData.forEach((запись) => { const newRecord = cardTpl.cloneNode(истина) newRecord.querySelector(‘.ele2026_card__ttle’).nnerHTML = Record.party newRecord.querySelector(‘.ele2026_card__ntro’).nnerHTML = Record.descrpton newRecord.querySelector(‘.lnk_overlay’).setAttrbute(‘href’, `/doc/${record.doc}`) wdgetElement.appendChld(newRecord) }) } const ntWdget = async () => { ават ntCardsLst() drawCardsLst() }; нтВджет(); })();})()
Вам может быть интересно:КультураМОСКВА, 8 мар. Народный артист России Стас Михайлов представил дуэт «Никто не знает» с заслуженной артисткой РФ Наташей Королевой на концерте в Москве в... ПолитикаДетективная повесть, основанная на реальных событиях Фрагмент из новой книги, который вы сейчас прочтете, интересен хотя бы тем, что одним из авторов предисловия к... КультураМОСКВА, 2 мар. Новая экранизация произведения Александра Пушкина «Сказка о царе Салтане» режиссера Сарика Андреасяна снова возглавила российский кинопрокат, заработав 255,2 миллиона рублей в... ОбществоBaza: туристы из РФ застряли в Таиланде из-за отмен рейсов Фото: Наталия Губернаторова тестовый баннер под заглавное изображение Российские туристы не могут вылететь из... | |||||||
































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