Фото: Министерство жилищной политики Московской области
18 июля 2024
В Одинцовском парке культуры, спорта и отдыха 20 июля пройдёт фитнес-марафон в рамках акции «Ночь в парк…
18 июля 2024
Музей-заповедник А.С.Пушкина var globalSetups = {};globalSetups["searchPlaceholder"] = "поиск по справочнику культурных объектов";globalSetups["inTheCity"] = "В городе";globalSetups["inTheTheme"] = "В категории";globalSetups["no-found"] = "<span style='padding: 10px'>не найдено</span>";globalSetups["tgIncFreeName"] = "свободно:"; window.TgWidget5Settings={"schema_version":1,"texts":[],"layout":"expanded","palette":"light","colors":{"background":"#fafafa","surface":"#ffffff","text":"#4b4d55","accent":"#81bb25","button_text":"#ffffff","muted":"#4b4d55"},"placement":"standalone","embed_context":"catalog","width":0,"show_header":true,"show_images":true,"show_search":true,"hide_event_tags":false,"custom_css_url":"","show_venues":true,"show_categories":true,"show_home_calendar":true,"use_global_themes":false,"theme_layout":"default","venue_layout":"chips","catalog_page_size":12,"tariff_layout":"default","show_tariff_category":false,"show_tariff_description":false,"show_price_rule_name":false,"checkout_layout":"stacked","show_tariff_sector":true,"show_tariff_availability":true,"card_fields":{"description":true,"venue":true,"hall":true,"category":true,"age":true,"dates":true,"price":false,"pushka":true},"session_layout":"auto","show_session_availability":true,"show_session_hints":true,"catalog_date_mode":"auto_range","short_description_mode":"all","catalog_cache_ttl":60,"transparent_background":true,"external_auth_providers":["vkid","mail_ru","ok_ru"]}; var openEvent = null; var lang_code = ''; (function(m,e,t,r,i,k,a){ m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a) })(window, document,'script','https://mc.yandex.ru/metrika/tag.js', 'ym'); ym(58983796, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce: "dataLayer" }); window.dataLayer = window.dataLayer || []; var userinfo = {}; var currency_code = '&#8381;'; lang_code = '0'; function tgOnlyTidNormalize(str) { return String(str == null ? '' : str) .toLowerCase() .replace(/ё/g, 'е') .replace(/\s+/g, ' ') .trim(); } function tgOnlyTidDateTs(dateStr) { let p = String(dateStr || '').split('.'); if (p.length !== 3) { return 0; } return new Date( parseInt(p[2], 10), parseInt(p[1], 10) - 1, parseInt(p[0], 10) ).getTime(); } function tgOnlyTidDateLabel(dateStr) { let p = String(dateStr || '').split('.'); if (p.length !== 3) { return dateStr; } let date = new Date( parseInt(p[2], 10), parseInt(p[1], 10) - 1, parseInt(p[0], 10) ); let months = ['янв', 'фев', 'мар', 'апр', 'мая', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек']; let week = ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб']; return '' + '<span class="tg-onlytid-date-day">' + parseInt(p[0], 10) + '</span>' + '<span class="tg-onlytid-date-meta">' + months[date.getMonth()] + ' · ' + week[date.getDay()] + '</span>'; } function tgInitOnlyTidFilters($root) { $root = ($root && $root.length) ? $root : $('.step-onlytid'); let $filters = $root.find('.tg-onlytid-filters'); if (!$filters.length) { return; } let $list = $root.children('.container').first(); let $cards = $list.find('.tg-event-element'); let $calendar = $filters.find('.tg-onlytid-calendar'); $filters.show(); // Календарь строим всегда, даже если список мероприятий пустой let themeToday = $filters.attr('data-theme-today') === '1'; if ( $calendar.length && $filters.attr('data-has-calendar') === '1' && !themeToday ) { tgBuildOnlyTidCalendar($calendar, $cards); } else { $calendar.hide().empty(); } // Кнопка Пушкинской карты только если в списке реально есть значок let hasPushka = $cards.find('.tg-pushka-name').length > 0; $filters .find('.tg-onlytid-pushka') .toggle(hasPushka) .removeClass('active'); function refreshSeparators() { let $currentSep = null; let hasVisibleAfterSep = false; function flushSep() { if ($currentSep) { if ($currentSep.is('[data-theme-id]')) { $currentSep[0].style.setProperty('display', hasVisibleAfterSep ? 'block' : 'none', 'important'); return; } if (hasVisibleAfterSep) { $currentSep.show(); } else { $currentSep.hide(); } } } $list.children('.tg-event-theme_separate, .tg-event-element').each(function() { let $el = $(this); if ($el.hasClass('tg-event-theme_separate')) { flushSep(); $currentSep = $el; hasVisibleAfterSep = false; $el.hide(); return; } // Initial rendering may precede activation of the parent purchase // step. Only the card's filter state determines its category heading. if ($currentSep && $currentSep.is('[data-theme-id]') ? $el.css('display') !== 'none' : $el.is(':visible')) { hasVisibleAfterSep = true; } }); flushSep(); } function tgFilterShow($el) { $el.each(function() { this.style.removeProperty('display'); }); } function tgFilterHide($el) { $el.each(function() { this.style.setProperty('display', 'none', 'important'); }); } function applyFilters() { let q = tgOnlyTidNormalize($filters.find('.tg-onlytid-search').val()); let onlyPushka = $filters.find('.tg-onlytid-pushka').hasClass('active'); let visible = 0; let total = $cards.length; $cards.each(function() { let $card = $(this); let text = tgOnlyTidNormalize( ($card.attr('data-search') || '') + ' ' + $card.text() ); let okSearch = !q || text.indexOf(q) !== -1; let okPushka = !onlyPushka || $card.find('.tg-pushka-name').length > 0; let ok = okSearch && okPushka; if (ok) { tgFilterShow($card); visible++; } else { tgFilterHide($card); } }); $filters.find('.tg-onlytid-count').text(visible + ' из ' + total); if (total === 0) { $filters.find('.tg-onlytid-empty') .show() .text('На выбранную дату мероприятий нет. Выберите другую дату в календаре.'); } else { $filters.find('.tg-onlytid-empty') .toggle(visible === 0) .text('По выбранным фильтрам ничего не найдено'); } refreshSeparators(); } $filters.off('.tgOnlyTid'); $filters.on('input.tgOnlyTid', '.tg-onlytid-search', function() { applyFilters(); }); $filters.on('click.tgOnlyTid', '.tg-onlytid-pushka', function(e) { e.preventDefault(); $(this).toggleClass('active'); applyFilters(); }); $filters.on('click.tgOnlyTid', '.tg-onlytid-clear', function(e) { e.preventDefault(); $filters.find('.tg-onlytid-search').val(''); $filters.find('.tg-onlytid-pushka').removeClass('active'); applyFilters(); }); applyFilters(); } globalSetups["step-hall"] = "Выберите свой билет"; globalSetups["step-user"] = "Укажите Заказчика"; //console.log('globalSetups', globalSetups); var device_vk = ''; var hash = ''; var globalStep = 0; var activeDates = []; var device_ym = 0; maxTicket = 9; device_ym = 26816901; ym(26816901, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true }); var hallPreviewScope = "1:1:0"; var sidhash = '04582fae-adba-44a3-8285-4ee3617c67d1'; var port = 1444; var deviceType = 'pc'; var userinfo = {}; var hs = 'f1c1592588411002af340cbaedd6fc33'; var utm_source = getParameterByName('utm_source'); // Optional tracking must never prevent the widget opening, even when a // browser blocks cookies or contains an old malformed percent-encoded one. (function(){ try{ var cookie=function(name,raw){ var part; try{part=(document.cookie||'').split(';').filter(function(item){return item.trim().indexOf(name+'=')===0;})[0];} catch(_){return '';} if(!part)return ''; var item=part.trim().slice(name.length+1); if(raw)return item; try{return decodeURIComponent(item);}catch(_){return item;} }; var saved=null; try{saved=JSON.parse(cookie('tgutm',true));} catch(_){try{saved=JSON.parse(cookie('tgutm'));}catch(__){}} if(!saved||typeof saved!=='object'||Array.isArray(saved))saved=null; var trackingId=function(value,gaId){ if(typeof value!=='string'&&typeof value!=='number')return ''; value=String(value); if(gaId)value=value.replace(/^GA[0-9]+\.[0-9]+\./,''); return /^[A-Za-z0-9._-]{1,24}$/.test(value)?value:''; }; var tgWidgetPageTracking = {"source":"","medium":"","campaign":"","term":"","content":"","referrer":"","landing":"","findreq":"","ga":"","ya":""}; var tgWidgetHasPageCampaign=['utm_source','utm_medium','utm_campaign','utm_term','utm_content'].some(function(key){return !!getParameterByName(key);}); if(tgWidgetHasPageCampaign||!saved){ tgWidgetPageTracking.ga=trackingId(tgWidgetPageTracking.ga,true)||trackingId(cookie('_ga'),true); var ymCookie=cookie('_ym_uid'); if(!ymCookie){try{ymCookie=GetYMCID();}catch(_){}} tgWidgetPageTracking.ya=trackingId(tgWidgetPageTracking.ya,false)||trackingId(ymCookie,false); var encoded=encodeURIComponent(JSON.stringify(tgWidgetPageTracking)); // Use the same bounded legacy cookie contract as the parent // SDK, without adding storage or changing session identity. while(encoded.length>3800){ var key=Object.keys(tgWidgetPageTracking).reduce(function(a,b){ return encodeURIComponent(tgWidgetPageTracking[a]).length>encodeURIComponent(tgWidgetPageTracking[b]).length?a:b; }); tgWidgetPageTracking[key]=tgWidgetPageTracking[key].slice(0,Math.floor(tgWidgetPageTracking[key].length/2)).replace(/[\uD800-\uDBFF]$/,''); encoded=encodeURIComponent(JSON.stringify(tgWidgetPageTracking)); } document.cookie='tgutm='+encoded+'; path=/; SameSite=Lax'; } }catch(_){ /* Tracking is best effort; checkout continues unchanged. */ } })(); ym(58983796,'reachGoal','tg_startView'); if(device_ym) ym(device_ym,'reachGoal','tg_startView'); if (device_ym && typeof ga === 'function') ga('send', 'event', 'tg', 'startView'); if (device_vk) { window._tmr = window._tmr || []; window._tmr.push({ type: 'reachGoal', id: device_vk, goal: 'tg_startView' }); } globalTHEATER = '';globalStep = 1;globalTID='2'; let arr = []; arr[0] = "f1c1592588411002af340cbaedd6fc33"; arr[1] = '0'; arr[2] = '0'; arr[3] = '2'; arr[4] = '0'; arr[5] = '0'; arr[6] = '0'; arr[7] = ''; function tgPad2(n) { n = parseInt(n, 10); return n < 10 ? '0' + n : '' + n; } function tgDateDotFromAny(dateStr) { dateStr = String(dateStr || '').trim(); // 05.07.2026 if (/^\d{2}\.\d{2}\.\d{4}$/.test(dateStr)) { return dateStr; } // 05-07-2026 if (/^\d{2}-\d{2}-\d{4}$/.test(dateStr)) { let p = dateStr.split('-'); return p[0] + '.' + p[1] + '.' + p[2]; } // 2026-07-05 if (/^\d{4}-\d{2}-\d{2}/.test(dateStr)) { let p = dateStr.substr(0, 10).split('-'); return p[2] + '.' + p[1] + '.' + p[0]; } return dateStr; } function tgBuildOnlyTidCalendar($calendar, $cards) { let activeDates = {}; $cards.each(function() { let dates = String($(this).attr('data-dates') || '').split('|'); dates.forEach(function(date) { date = tgDateDotFromAny(date); if (date) { activeDates[date] = true; } }); }); let monthNames = [ 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь' ]; let weekNames = ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб']; let $filters = $calendar.closest('.tg-onlytid-filters'); let numOfDays = parseInt($filters.attr('data-days'), 10); if (isNaN(numOfDays) || numOfDays < 1) { numOfDays = 30; } if (numOfDays > 180) { numOfDays = 180; } let startDate = new Date(); startDate.setHours(0, 0, 0, 0); let lastMonth = -1; let lastYear = -1; let html = '' + '<button type="button" class="tg-onlytid-calendar-arrow tg-onlytid-calendar-prev" aria-label="Назад">‹</button>' + '<div class="tg-onlytid-calendar-viewport">' + '<div class="tg-onlytid-calendar-scroll">'; while (numOfDays--) { let year = startDate.getFullYear(); let month = startDate.getMonth(); let day = tgPad2(startDate.getDate()); let monthNum = tgPad2(month + 1); if (lastYear !== year) { lastYear = year; html += '<div class="tg-onlytid-calendar-year">' + year + '</div>'; } if (lastMonth !== month) { lastMonth = month; html += '<div class="tg-onlytid-calendar-month">' + monthNames[month] + '</div>'; } let dotDate = day + '.' + monthNum + '.' + year; let dashDate = day + '-' + monthNum + '-' + year; let isWeekend = startDate.getDay() % 6 === 0; let hasEvents = !!activeDates[dotDate]; let href = '/tickets/f1c1592588411002af340cbaedd6fc33/' + arr[1] + '/' + arr[2] + '/' + arr[3] + '/' + dashDate + ':' + dashDate + '/' + '0/' + (arr[6] ? arr[6] : '') + '/' + (arr[7] ? arr[7] : '') + '/widget4'; html += '' + '<a class="tg-onlytid-calendar-day' + (isWeekend ? ' weekend' : '') + (hasEvents ? ' has-events' : ' no-events') + '" href="' + href + '" data-date="' + dotDate + '">' + '<span class="tg-onlytid-calendar-week">' + weekNames[startDate.getDay()] + '</span>' + '<span class="tg-onlytid-calendar-number">' + day + '</span>' + (hasEvents ? '<span class="tg-onlytid-calendar-dot"></span>' : '') + '</a>'; addDay(startDate); } html += '' + '</div>' + '</div>' + '<button type="button" class="tg-onlytid-calendar-arrow tg-onlytid-calendar-next" aria-label="Вперёд">›</button>'; $calendar.html(html).show(); tgInitOnlyTidCalendarArrows($calendar); } function tgInitOnlyTidCalendarArrows($calendar) { let $viewport = $calendar.find('.tg-onlytid-calendar-viewport'); let $prev = $calendar.find('.tg-onlytid-calendar-prev'); let $next = $calendar.find('.tg-onlytid-calendar-next'); function getStep() { let $day = $calendar.find('.tg-onlytid-calendar-day').first(); if (!$day.length) { return 280; } let dayWidth = $day.outerWidth(true); // примерно 5 дней за одно нажатие return dayWidth * 5; } function updateArrows() { let el = $viewport.get(0); if (!el) { return; } let maxScroll = el.scrollWidth - el.clientWidth; $prev.toggleClass('disabled', el.scrollLeft <= 2); $next.toggleClass('disabled', el.scrollLeft >= maxScroll - 2); } $prev.off('click.tgCalendar').on('click.tgCalendar', function(e) { e.preventDefault(); $viewport.stop(true).animate({ scrollLeft: $viewport.scrollLeft() - getStep() }, 220, updateArrows); }); $next.off('click.tgCalendar').on('click.tgCalendar', function(e) { e.preventDefault(); $viewport.stop(true).animate({ scrollLeft: $viewport.scrollLeft() + getStep() }, 220, updateArrows); }); $viewport.off('scroll.tgCalendar').on('scroll.tgCalendar', updateArrows); setTimeout(updateArrows, 50); } $(document).ready(function() { let $stepEvent = $('.step-event'); let $eventsContain = $stepEvent.children('.container').not('[data-tg5-event-tags]').first(); let $events = $('.tg-events', $eventsContain); let $pageTitle = $('.page-title', $stepEvent); let nuHallPreview = null; let nuLoading = true; let $l = $('<div class="loading128"></div>').appendTo('body'); function showNuHallPreview() { if (!nuLoading || nuHallPreview || !window.TgHallPreview || !window.TgHallPreview.mountInitial || typeof globalSID === 'undefined' || typeof globalEID === 'undefined') return; nuHallPreview = window.TgHallPreview.mountInitial({sid: globalSID, eid: globalEID}); } function finishNuHallPreview() { nuLoading = false; document.removeEventListener('tg-hall-preview-ready', showNuHallPreview); if (nuHallPreview) { nuHallPreview.destroy(); nuHallPreview = null; } } // The bundle loads hall-step in its own ready callback, after this one. document.addEventListener('tg-hall-preview-ready', showNuHallPreview); showNuHallPreview(); const nuZipLevel = 6; const nuZipDebug = false || new URLSearchParams(window.location.hash.slice(1)).get('nu_test') === '1'; const nuStartedAt = performance.now(); function showNuMetrics(xhr, status) { if (!nuZipDebug) return; const nuUrl = new URL(this.url, document.baseURI).href; setTimeout(function() { const entries = performance.getEntriesByName(nuUrl).filter(entry => entry.initiatorType === 'xmlhttprequest' && entry.startTime >= nuStartedAt); const timing = entries[entries.length - 1]; const readNumber = name => { const value = xhr.getResponseHeader(name); return value !== null && value !== '' && Number.isFinite(Number(value)) ? Number(value) : null; }; const metric = { status: xhr.status + ' ' + status, level: xhr.getResponseHeader('X-NU-Gzip-Level') || 'нет данных', json: readNumber('X-NU-Json-Bytes'), body: timing && timing.encodedBodySize > 0 ? timing.encodedBodySize : readNumber('X-NU-Body-Bytes'), request: timing && timing.responseEnd > 0 ? timing.responseEnd - timing.startTime : null, wait: timing && timing.responseStart > 0 ? timing.responseStart - timing.requestStart : null, download: timing && timing.responseStart > 0 ? timing.responseEnd - timing.responseStart : null, api: readNumber('X-NU-Api-Ms'), server: readNumber('X-NU-Server-Ms'), gzip: readNumber('X-NU-Gzip-Ms') }; // Explicit diagnostics remain inspectable without console noise. window.TgNuMetrics = metric; }, 0); } if (window.TgWidget5EventTags) window.TgWidget5EventTags.render(null); $.ajax({ url: "nu", type: "POST", data: {payload: 'eyJ0aGVtZXMiOlsyXSwiZGF0ZV9mcm9tIjoiMzEtMTAtMjAyNiIsImRhdGVfdG8iOiIyOS0wMS0yMDI3IiwiZGF0ZV9hdXRvIjoiWSIsImVpZCI6WzBdLCJzaWQiOlswXSwiaXAiOiIxODUuMTkyLjExMS4xMzAiLCJicm93c2VyIjoidW5rbm93biIsImJyb3dzZXJfdmVyc2lvbiI6InVua25vd24iLCJwbGF0Zm9ybSI6InVua25vd24iLCJkZXZpY2VfdHlwZSI6InBjIiwiZ2EiOiIiLCJxdWVyeSI6IiIsImZpbmRyZXEiOiIiLCJjdXJyZW5jeV9pZCI6IjEiLCJ5YSI6IiIsInNvdXJjZV9tYWluIjoiIiwibWVkaXVtX21haW4iOiIiLCJjYW1wYWlnbl9tYWluIjoiIiwicmVmZXJlciI6IiIsInV0bSI6bnVsbCwiZ2VvX2NvdW50cnkiOiJSVSIsImdlb19yZWdpb24iOiJTdC4tUGV0ZXJzYnVyZyIsImdlb19jaXR5IjoiU3QgUGV0ZXJzYnVyZyIsInNob3dfc2Vzc2lvbnMiOiJ0IiwiZmlyc3RfdGhlYXRlciI6ImFsbCIsImNhdGFsb2dfbmF2aWdhdGlvbiI6IjEiLCJjYXRhbG9nX3RoZWF0ZXJzIjoiMCIsImNhdGFsb2dfdGhlbWVzIjoiMiJ9', zip_level: nuZipLevel, zip_debug: nuZipDebug ? 1 : 0}, dataType: "json", timeout: 30000, complete: [$.ajaxSettings.complete, showNuMetrics] }).done((d) => { // Destroy before the live renderer binds its document/window handlers. finishNuHallPreview(); window.tgVirtualSessions = Array.isArray(d.virtual_sessions) ? d.virtual_sessions : []; window.tgVirtualSessionBounds = {"from":"31-10-2026","to":"29-01-2027","calendarDays":30}; //cl(d, "nu"); // console.log(d, 'nu'); $l.remove(); //hs let currentThemeAll = {}; const catalogSummary = false; const catalogPage = true; const catalogNavigation = catalogPage && d.catalog_navigation && d.catalog_navigation.version === 1 ? d.catalog_navigation : null; const catalogScope = {"catalogTheaters":"0","catalogThemes":"2","catalogEvents":"0"}; const useGlobalThemes = catalogPage && false; const themeFlag = value => ['1', 't', 'true', 'y'].includes(String(value).toLowerCase()); const themeView = theme => { const globalId = String(theme.global_theme_id || ''); const mapped = useGlobalThemes && /^[1-9][0-9]*$/.test(globalId) && theme.global_theme_name && themeFlag(theme.global_theme_visible); return {id: mapped ? 'global-' + globalId : String(theme.theme_id), name: mapped ? theme.global_theme_name : theme.themes_name}; }; if (catalogPage) { const options = String(arr[7] || '').split(';').filter(option => option && !/^catalog(?:Theaters|Themes|Events):/.test(option)); options.push('catalogTheaters:' + catalogScope.catalogTheaters, 'catalogThemes:' + catalogScope.catalogThemes); if (catalogScope.catalogEvents !== '0') options.push('catalogEvents:' + catalogScope.catalogEvents); arr[7] = options.join(';') + ';'; } let displayedTheaters = catalogNavigation && Array.isArray(catalogNavigation.theaters) ? catalogNavigation.theaters : (Array.isArray(d.theaters) ? d.theaters : []); if (catalogNavigation && Array.isArray(catalogNavigation.themes)) d.themes = catalogNavigation.themes; const venueScope = catalogPage ? catalogScope.catalogTheaters : arr[2]; const requestedVenueIds = !venueScope || venueScope === '0' || venueScope === 'all' ? null : new Set(String(venueScope).split(',')); displayedTheaters = displayedTheaters.filter(theater => !requestedVenueIds || requestedVenueIds.has(String(theater.id))); if((d.theaters || arr[2]=='all' || arr[2].indexOf(',') !== -1) && true && true){ let $stepTheaters = $('.step-theaters').toggle(true && (!catalogPage || displayedTheaters.length > 0)); if (catalogPage) $stepTheaters.removeClass('tg-selected'); let $theaters = $('.container', $stepTheaters); let s = ''; if(!d.theaters) s = 'Площадки недоступны'; else for(const theater of displayedTheaters){ s += '<div class="theaterContainer transition shadow-md'+(theater.id==arr[2]?' active':'')+'"><a href="/tickets/f1c1592588411002af340cbaedd6fc33/'+ arr[1]+'/'+ theater.id+'/'+(catalogPage ? arr[3] : '0')+'/'+(catalogPage ? arr[4] : '0')+'/'+(catalogPage ? arr[5] : '0')+'/'+(arr[6]?arr[6]:'')+'/' +(arr[7]?arr[7]:'')+'/widget4"><div>'; s += '<div data-id="64" class="tg-theater-element" style="background:url(/api/tickets/files/'+sidhash+'/'+theater.file_id+'_ws.jpg) no-repeat center;"></div>'; s += '<div class="name">'+theater.name+'</div>'; s += '<div class="category">'+theater.thname+'</div>'; s += '<div class="city">'+theater.city+' <span class="address">'+theater.address+'</span></div></div></a>'; s += '<div class="code"><a href="https://'+theater.code+'.muscom.ru" target="_blank"><span>'+theater.code+'.muscom.ru</span></a></div>'; //s += '<div class="preview_text"> <span>'+theater.preview_text+'</span></div>'; s += '</div>'; } if (catalogPage && String(arr[2]) !== catalogScope.catalogTheaters) { const allVenuesUrl = '/tickets/' + arr[0] + '/' + arr[1] + '/' + catalogScope.catalogTheaters + '/' + arr[3] + '/' + arr[4] + '/' + arr[5] + '/0/' + arr[7] + '/widget4'; s += '<div class="tg-theater-all"><a href="' + tgEscapeHtml(allVenuesUrl) + '">Все площадки</a></div>'; } $theaters.html(s); $theaters.find('.theaterContainer.active > a').attr('aria-current', 'true'); if (catalogPage && window.TgCatalogNavigation) window.TgCatalogNavigation.renderLinks($theaters[0], { kind: 'venues', layout: "chips", label: 'Площадки', selector: '.theaterContainer > a,.tg-theater-all > a', allLabel: 'Все площадки', allSelected: String(arr[2]) === catalogScope.catalogTheaters, nameSelector: '.name', imageSelector: '.tg-theater-element', descriptionSelector: '.city' }); if(!catalogPage && arr[3] === '0' && (arr[2] == 'all' || arr[2].indexOf(',') !== -1)){ $('.step-themes').hide(); return; } } let selectedThemeToday = false; if(d.themes){ let $stepThemes = $('.step-themes'); let $themes = catalogPage ? $('.step-onlytid [data-catalog-themes]') : $('.container', $stepThemes); if (catalogPage) $stepThemes.hide().removeClass('step-show'); let s = '<div class="page-subtitle"></div>'; s += '<div class="tg-themes tg-theme-menu">'; if (catalogPage && String(arr[3]) !== catalogScope.catalogThemes) { const allThemesUrl = '/tickets/' + arr[0] + '/' + arr[1] + '/' + arr[2] + '/' + catalogScope.catalogThemes + '/' + arr[4] + '/' + arr[5] + '/0/' + arr[7] + '/widget4'; s += '<a class="tg-theme-cnt-1" href="' + tgEscapeHtml(allThemesUrl) + '"><div class="tg-theme-element-container"><div class="tg-theme-name">Все категории</div></div></a>'; } let menuThemes = d.themes; if (useGlobalThemes && Array.isArray(d.themes)) { const groups = new Map(); const allowed = catalogScope.catalogThemes === '0' ? null : new Set(String(catalogScope.catalogThemes).split(',')); const selected = String(arr[3]).split(',').filter(id => /^[1-9][0-9]*$/.test(id)); for (const theme of d.themes) { currentThemeAll[theme.theme_id] = theme; if (selected.includes(String(theme.theme_id)) && themeFlag(theme.today)) selectedThemeToday = true; if ((allowed && !allowed.has(String(theme.theme_id))) || (theme.cnt !== undefined && Number(theme.cnt) <= 0) || (themeFlag(theme.hide) && !selected.includes(String(theme.theme_id)))) continue; const view = themeView(theme); if (!groups.has(view.id)) groups.set(view.id, {...theme, themes_name:view.name, localIds:[], cnt:0}); const group = groups.get(view.id); group.localIds.push(String(theme.theme_id)); group.cnt += theme.cnt === undefined ? 1 : Number(theme.cnt); } menuThemes = [...groups.values()].map(group => ({...group, theme_id:group.localIds.join(','), ui_selected:selected.length > 0 && selected.every(id => group.localIds.includes(id))})); } if (typeof d.themes === "undefined") { }else for (let theme of menuThemes){ if (catalogPage && theme.cnt !== undefined && Number(theme.cnt) <= 0) continue; if (catalogSummary && ['t', 'true', '1', 'y'].includes(String(theme.hide).toLowerCase())) continue; if (!useGlobalThemes) currentThemeAll[theme.theme_id] = theme; if (typeof theme.cnt === "undefined") theme.cnt =1; if(theme.theme_id=='2'){ if ( String(theme.today).toLowerCase() === 't' ) { selectedThemeToday = true; } // currentTheme = theme; }//show_sessions:Y;hide_sessions:Y; s += '<a class="tg-theme-cnt-' + (theme.cnt?theme.cnt:'0') + '" href="/tickets/f1c1592588411002af340cbaedd6fc33/'+ arr[1]+'/'+arr[2]+'/' +theme.theme_id+'/'+(catalogPage ? arr[4] : '0')+'/'+(catalogPage ? arr[5] : '0')+'/'+(arr[6]?arr[6]:'')+'/' + (theme.period?"":"" ) +(arr[7]?arr[7]:'')+'/widget4"><div style="'+ (theme.color?'--theme-color:#'+theme.color+';':'')+'" class="tg-theme-element-container '+((theme.ui_selected || theme.theme_id == arr[3])?'active-theme':'') +'"><div data-id="'+theme.theme_id+'" class="tg-theme-element '+((theme.ui_selected || theme.theme_id == arr[3])?'active-theme':'') +'" style="'+ (theme.color?'border-color: #'+theme.color+';box-shadow: inset 1px 1px 2px 1px #'+theme.color+';':'') +( parseInt(theme.file_id)? 'background:url(/api/tickets/files/'+sidhash+'/'+theme.file_id+'_ws.'+theme.ext+') no-repeat center;':'' /*'background:url(http://194.50.143.85/api/tickets/uploads/files/'+theme.dir+'/ws_'+theme.file_id+'.webp) no-repeat center;'*/ )+'"></div><div class="tg-theme-name">' + (useGlobalThemes ? tgEscapeHtml(theme.themes_name) : theme.themes_name) + '</div>'+ ( theme.preview_text ? '<div class="tg-theme-desc">' + (theme.preview_text) + '</div>' : '' )+'</div></a>'; } s += '</div>'; $themes.html(s); $themes.find('.active-theme').closest('a').attr('aria-current', 'true'); if (catalogPage && window.TgCatalogNavigation) window.TgCatalogNavigation.renderLinks($themes[0], { kind: 'themes', layout: "default", label: 'Категории мероприятий', selector: '.tg-themes > a', allLabel: 'Все категории', allSelected: String(arr[3]) === catalogScope.catalogThemes, nameSelector: '.tg-theme-name', imageSelector: '.tg-theme-element', descriptionSelector: '.tg-theme-desc' }); if (catalogPage) $themes.toggle(true); } $('.step-onlytid .tg-onlytid-filters') .attr('data-theme-today', selectedThemeToday ? '1' : '0'); if (selectedThemeToday) { $('.step-onlytid .tg-onlytid-calendar').hide().empty(); } if(d.errorEvents){ if( d.errorEvents == "Билет" || d.errorEvents == "К сожалению, все билеты на данное мероприятие распроданы"){ d.errorEvents = d.errorEvents; } $('.step-event .container').html(d.errorEvents); $('.step-hall .container').html(d.errorEvents); $('.step-onlytid .container').html( '<div class="tg-onlytid-no-events">' + d.errorEvents + '</div>' ); if (typeof tgInitOnlyTidFilters === 'function') { tgInitOnlyTidFilters($('.step-onlytid')); } return; } if(d.error){ let errorText = "Ошибка при загрузке"; if( d.error == "http-code: 0"){ errorText = 'Сервер недоступен. Повторите через несколько минут.'; } $('.step-event .container').html(errorText); $('.step-hall .container').html(errorText); $('.step-onlytid .container').html( '<div class="tg-onlytid-no-events">' + errorText + '</div>' ); if (typeof tgInitOnlyTidFilters === 'function') { tgInitOnlyTidFilters($('.step-onlytid')); } return; } var last_date = ''; function showSesName(session, type){ let s = ''; let t = ''; if(last_date!=session.session_date) { s += '<div class="tg-ses-date-name">'+session.session_date+'</div>'; last_date = session.session_date; } t = session.session_time; let price_text = "0"; if(session.prices){ let p_arr = session.prices.split("-"); if(p_arr[0] == p_arr[1]) price_text = (p_arr[0]/ 100).format(2); else price_text = (p_arr[0]/ 100).format(2) + ' - '+(p_arr[1]/ 100).format(2); } const sessionUrl = '/tickets/' + arr[0] + '/' + arr[1] + '/' + arr[2] + '/' + session.theme_id + '/' + arr[4] + '/' + session.eid + '/' + session.sid + '/' + arr[7] + '/widget4'; const available = Number(session.tg_free) > 0 && !['1', 't', 'true', 'y'].includes(String(session.is_presale).toLowerCase()); const label = [session.session_date || session.start_date, t || session.sname].filter(Boolean).join(', '); const tag = available ? 'a' : 'span'; return '<' + tag + ' class="tg-event-catalog-session"' + (available ? ' href="' + tgEscapeHtml(sessionUrl) + '"' : ' aria-disabled="true"') + '><strong>' + tgEscapeHtml(label || 'Выбрать сеанс') + '</strong>' + (Object.keys(halls).length > 1 && session.hall_name ? '<span>' + tgEscapeHtml(session.hall_name) + '</span>' : '') + (available ? (session.prices ? '<span>' + tgEscapeHtml(price_text) + ' &#8381;</span>' : '') : '<span>Недоступно</span>') + '</' + tag + '>'; s += '<div class="tg-events-session-element-cont"><div><a href="#null"><div eid="'+session.eid+'" sid="'+session.sid+'" hid="'+session.hall_id+'" class="tg-events-session-element tg-open-event'+ ( (session.events_type_id == 2 || session.events_type_id == 4) ? ' complex':'') + '" data-id="'+session.sid+'">'+t+(Object.keys(halls).length > 1?' '+halls[session.hall_id]:'')+'</div></a></div><div class="tg-events-session-element-right"><div class="tg-events-session-element-theater"><div>'+session.t_name+'</div><div class="tg-events-session-element-hall">'+session.hall_name+'</div></div>'+(session.prices?'<div class="tg-events-session-element-price">'+price_text+' &#8381;</div>':'')+'<div class="tg-events-session-element-free">Свободно: '+session.tg_free+'</div></div><div class="tg-events-session-element-button"><a href="#null"><div eid="'+session.eid+'" sid="'+session.sid+'" hid="'+session.hall_id+'" class="tg-events-session-element tg-open-event'+ ( (session.events_type_id == 2 || session.events_type_id == 4) ? ' complex':'') + '" data-id="'+session.sid+'">Купить</div></a></div></div>'; return s; } let events = {}; let halls = {}; let currentTheme = {}; const catalogRows = []; const virtualRows = window.TgVirtualSessions ? window.tgVirtualSessions.map(window.TgVirtualSessions.rules).filter(Boolean) : []; let $stepThemes = $('.step-onlytid'); let $themes = $('.container', $stepThemes); let s = ''; if((d.r && d.r.length) || catalogRows.length || virtualRows.length){ let eventsPos = {}; for (let k in d.r){ let event = d.r[k]; if(!events [event.eid]){ eventsPos[k] = event.eid; events [event.eid] = {}; events [event.eid]["sessions"] = []; events [event.eid]["ename"] = event.ename; events [event.eid]["age_category"] = event.age_category; events [event.eid]["theme_id"] = event.theme_id; events [event.eid]["short_description"] = event.short_description; events [event.eid]["preview_text"] = event.preview_text; events [event.eid]["detail_text"] = event.detail_text; events [event.eid]["event_tags"] = /^[1-9][0-9]*$/.test(String(globalEID)) && Number(globalEID) <= 2147483647 && Number(event.eid) === Number(globalEID) && Array.isArray(d.event_tags) ? d.event_tags : []; events [event.eid]["session_date"] = event.session_date; events [event.eid]["session_time"] = event.session_time; events [event.eid]["event_type_name"] = event.event_type_name; events [event.eid]["eid"] = event.eid; events [event.eid]["g"] = event.g; events [event.eid]["widget5_session_naming"] = event.widget5_event_naming; events [event.eid]["pushka"] = event.pushka; if(event.is_presale) events [event.eid]["presale_text"] = event.presale_text; if(event.file_id){ //events [event.eid]["preview_file"] = event.file_id+'.'+event.ext; events [event.eid]["preview_file"] = event.file_id+'_wxm.'+event.ext; events [event.eid]["preview_file_300"] = event.file_id+'_ws.'+event.ext; } } if(event.hall_id){ halls[event.hall_id] = event.hall_name; } events [event.eid]["sessions"].push(event); } // Authenticated schedule metadata can describe an event before // its first real session exists. Never put a synthetic SID in r. for (const rule of virtualRows) { const eid = String(rule.event_id), tid = String(rule.theme_id); if (!currentThemeAll[tid]) currentThemeAll[tid] = {theme_id:tid, themes_name:rule.theme_name || '', calendar:'t', period:0}; if (!events[eid]) { eventsPos['virtual-' + eid] = eid; events[eid] = {eid:eid, ename:rule.name || 'Мероприятие', theme_id:tid, sessions:[], age_category:'', short_description:'', detail_text:'', preview_text:'', event_tags:[], session_date:'', session_time:'', event_type_name:'сеанс', pushka:false}; } events[eid].virtualSchedule = rule; } //console.log('currentThemeAll', currentThemeAll); // Keep event order within a category, but render each category once. const eventsByTheme = new Map(); for (const eid of Object.values(eventsPos)) { const themeId = themeView(currentThemeAll[events[eid].theme_id] || {theme_id:events[eid].theme_id}).id; if (!eventsByTheme.has(themeId)) eventsByTheme.set(themeId, []); eventsByTheme.get(themeId).push(eid); } eventsPos = [].concat(...eventsByTheme.values()); let lastTheme = ""; for (let ik in eventsPos){ k = eventsPos[ik]; let event = events[k]; let sessions = event.sessions; // console.log('event.theme_id', event.theme_id); //if(!currentThemeAll [ event.theme_id ]) // continue; currentTheme = currentThemeAll [ event.theme_id ]?currentThemeAll [ event.theme_id ]:{ "id":event.theme_id }; let eventFilterDates = []; let eventFilterDateMap = {}; let eventFilterHalls = event.catalogSummary ? event.catalogHalls.slice() : []; let eventFilterTimes = []; for (let fs of sessions) { if (fs.start_date && !eventFilterDateMap[fs.start_date]) { eventFilterDateMap[fs.start_date] = true; eventFilterDates.push(fs.start_date); } if (fs.hall_name && eventFilterHalls.indexOf(fs.hall_name) === -1) { eventFilterHalls.push(fs.hall_name); } if (fs.session_time && eventFilterTimes.indexOf(fs.session_time) === -1) { eventFilterTimes.push(fs.session_time); } } let eventPushka = ( event.pushka && ['0', 'f', 'false', 'n', 'no'].indexOf(String(event.pushka).toLowerCase()) === -1 ) ? 1 : 0; let eventDescSearch = $('<div>') .html(event.preview_text ? event.preview_text : event.short_description) .text(); let eventFilterSearch = [ event.ename, event.age_category, currentTheme.themes_name || '', eventDescSearch, eventFilterHalls.join(' '), eventFilterTimes.join(' ') ].join(' '); let eventFilterSearchAttr = (typeof tgEscapeHtml === 'function') ? tgEscapeHtml(eventFilterSearch) : String(eventFilterSearch) .replace(/&/g, '&amp;') .replace(/"/g, '&quot;') .replace(/</g, '&lt;') .replace(/>/g, '&gt;'); //if(sessions.length==1){ // arr[6] = sessions[0].sid; //}else arr[6] = 0; const displayCategory = themeView({...currentTheme, theme_id:event.theme_id}); const categoryId = displayCategory.id; if (categoryId !== lastTheme) { lastTheme = categoryId; if (String(arr[3]) !== categoryId) { const categoryName = displayCategory.name || event.themes_name || 'Мероприятия'; s += '<h2 data-id="' + tgEscapeHtml(categoryId) + '" data-theme-id="' + tgEscapeHtml(categoryId) + '" class="tg-event-theme_separate"><span>' + tgEscapeHtml(categoryName) + '</span></h2>'; } } //console.log(currentTheme, 'currentThemeAll11'); //"/api/tickets/files/"+d.sidhash+'/'+hall.file_id+'.'+hall.ext s += '<div data-id="'+k+'" class="tg-event-element" data-pushka="'+eventPushka+'" data-dates="'+eventFilterDates.join('|')+'"' +(event.catalogSummary ? ' data-date-ranges="'+tgEscapeHtml(JSON.stringify(event.catalogRanges))+'"' : '') +' data-search="'+eventFilterSearchAttr+'">'; let a = '<a href="/tickets/f1c1592588411002af340cbaedd6fc33/'+arr[1]+'/'+arr[2]+'/' +(currentTheme.theme_id?currentTheme.theme_id:event.theme_id)+'/' + (arr[4] == '0'?( (event.catalogSummary ? event.catalogToday : (currentTheme.today == 't' || ( event["sessions"] && event["sessions"][0] && event["sessions"][0]["today"] == 't')))?'today':'0' ):arr[4])+'/'+k+'/'+(arr[6]?arr[6]:'') // +'/'+(currentTheme.today == 't'?'0':'0') +'/'+(arr[7]?arr[7]:'')+'/widget4">'; let a_event = '<a href="/tickets/f1c1592588411002af340cbaedd6fc33/'+arr[1]+'/'+arr[2]+'/' +(currentTheme.theme_id?currentTheme.theme_id:event.theme_id)+'/' + (arr[4] == '0'?( (event.catalogSummary ? event.catalogToday : (currentTheme.today == 't' || ( event["sessions"] && event["sessions"][0] && event["sessions"][0]["today"] == 't')))?'today':'0' ):arr[4])+'/'+k+'/'+(currentTheme.today == 't'?'0':'0') +'/'+(arr[7]?arr[7]:'')+'/widget4">'; s += '<div class="tg-event-element-name-tr"><div '; if(event.preview_file_300) s += 'style="background:url(/api/tickets/files/'+sidhash+'/'+event.preview_file_300+') no-repeat center;"'; s += ' class="tg-event-element-name"><div class="tg-event-image"'; if(event.preview_file_300) s += 'style="background-image:url(/api/tickets/files/'+sidhash+'/'+event.preview_file_300+');"'; s += '></div><div class="tg-event-flex"><div class="tg-event-theme">' + (useGlobalThemes ? tgEscapeHtml(themeView(currentTheme).name || '') : currentTheme.themes_name)+ '</div>' + a + '<h2 class="tg-event-name">' +event.ename+ '</h2><span class="age_category"><span class="age_category_title">Возрастная категория: ' +event.age_category+ '</span></span>'+(eventPushka?'<div class="tg-pushka-name"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-lucide="credit-card" class="lucide lucide-credit-card w-4 h-4"><rect width="20" height="14" x="2" y="5" rx="2"></rect><line x1="2" x2="22" y1="10" y2="10"></line></svg> Пушкинская карта</div>':'')+'</a><div class="tg-event-elements-desc">' +(event.preview_text?event.preview_text:event.short_description)+ '</div>'; s += '<div class="tg-event-elements-sessions-group">'; let allHalls = event.catalogSummary ? event.catalogHalls.slice() : []; let $dc = $('.tg-calendar'); const months = [ 'января','февраля','марта','апреля','мая','июня', 'июля','августа','сентября','октября','ноября','декабря' ]; let dates = []; let dateMap = {}; // собираем уникальные даты for(let session of sessions){ if(allHalls.indexOf(session.hall_name) === -1) allHalls.push(session.hall_name); let dt = session.start_date.split("."); let date = new Date(dt[2], dt[1]-1, dt[0]); let ts = date.getTime(); if(!dateMap[ts]){ dateMap[ts] = true; dates.push({ ts: ts, d: date.getDate(), m: date.getMonth() }); } $('.day[data-date="'+session.start_date+'"]', $dc).addClass('checked'); } dates.sort((a,b)=>a.ts-b.ts); // строим диапазоны let ranges = []; if(dates.length){ let start = dates[0]; let prev = dates[0]; for(let i=1;i<dates.length;i++){ let d = dates[i]; if(d.ts - prev.ts === 86400000){ prev = d; continue; } ranges.push({start:start,end:prev}); start = d; prev = d; } ranges.push({start:start,end:prev}); } // группируем по месяцам let monthGroups = {}; ranges.forEach(r => { let m = r.start.m; if(!monthGroups[m]) monthGroups[m] = []; if(r.start.ts === r.end.ts) monthGroups[m].push(r.start.d.toString()); else monthGroups[m].push(r.start.d + '–' + r.end.d); }); let out = []; for(let m in monthGroups){ out.push( monthGroups[m].join(' • ') + ' ' + months[m] ); } s += '📅 ' + (event.catalogSummary ? event.catalogDateLabel : out.join(' • ')); if(event.presale_text) s += '<div class="tg-event-elements-sessions-presale">'+event.presale_text+'</div>'; s += '<div class="tg-event-elements-sessions-group-halls">'; for(let hall of allHalls){ s += '<div>'+hall+'</div>'; } s += '</div>'; s += '</div>'; s += '<div class="tg-event-buttons">'; if(event.presale_text) s += '<div class="tg-event-button">'+a_event+'Информация</a></div>'; else if(event.preview_text) s += '<div class="tg-event-button">'+a_event+'Подробнее</a></div>'; else s += '<div class="tg-event-button">'+a+'Купить</a></div>' s += '</div>'; s += '</div></div></div></div>'; } s += ''; $themes.html(s); const cardFields = {"description":true,"venue":true,"hall":true,"category":true,"age":true,"dates":true,"price":false,"pushka":true}; const cardSelectors = {description: '.tg-event-elements-desc', category: '.tg-event-theme', age: '.age_category', hall: '.tg-event-elements-sessions-group-halls,.tg-events-session-element-hall', price: '.tg-events-session-element-price', pushka: '.tg-pushka-name'}; Object.keys(cardSelectors).forEach(field => { if (cardFields[field] === false) $themes.find(cardSelectors[field]).hide(); }); if (catalogPage) $stepThemes.show(); if (typeof tgInitOnlyTidFilters === 'function') { tgInitOnlyTidFilters($stepThemes); } if (catalogSummary) return; //console.log(s); const firstRealSession = Array.isArray(d.r) ? d.r[0] : null; let event = events[String(globalEID)] || events[firstRealSession ? firstRealSession.eid : virtualRows[0].event_id]; if (window.TgWidget5Naming) { window.TgWidget5Naming.session(null); window.TgWidget5Naming.event(globalEID && String(globalEID) === String(event.eid) ? event : null); } s = ''; let se = ''; if(!globalSID && (globalEID && globalEID.indexOf(',')==-1) ){ /*document.querySelector('meta[name="description"]').setAttribute("content", (event.preview_text?event.preview_text:event.short_description)); document.querySelector('meta[name="keywords"]').setAttribute("content", event.ename); $('meta[property=og\\:title]').attr('content', event.ename); $('meta[property=og\\:url]').attr('content', 'https://widget.telegreen.ru/tickets/'+hs+'/'+arr[1]+'/'+arr[2]+'/'+arr[3]+'/'+ arr[4]+'/'+arr[5]+'/0/'+arr[7]+'/widget4'); */ if(event.preview_file){ //$('meta[property=og\\:image]').attr('content', 'https://widget.telegreen.ru/api/tickets/files/'+sidhash+'/'+event.preview_file); $('.col-lg-6', $stepEvent) .css({ 'width': '100%', 'max-width': '100%', 'flex': '0 0 100%' }); se += '<div class="tg-event-detail-img" style="background:url(/api/tickets/files/'+sidhash+'/'+event.preview_file+');"></div><div class="tg-event-detail-image" style="background:url(/api/tickets/files/'+sidhash+'/'+event.preview_file+') center;">'; se += '<h2 class="tg-event-name-image">' +event.ename+ ' <span class="age_category">' +event.age_category+ '</span>'+(event.pushka?'<div class="tg-pushka-name">Возможна оплата по Пушкинской карте</div>':'')+'</h2>'; se += '</div>'; se += '<div class="tg-event-buy-button-scroll" onclick="buyButtonScroll()">Выберите '+(event.event_type_name?event.event_type_name:'сеанс')+'</div>'; }else{ se += '' +event.ename+ ' <span class="age_category">' +event.age_category+ '</span>'; } }else if(globalSID){ //('meta[property=og\\:title]').attr('content', event.ename); //$('meta[property=og\\:url]').attr('content', 'https://widget.telegreen.ru/tickets/'+hs+'/'+arr[1]+'/'+arr[2]+'/'+arr[3]+'/'+ arr[4]+'/'+arr[5]+'/0/0/widget4'); // document.querySelector('meta[name="og:title"]').setAttribute("content", event.ename); //document.querySelector('meta[name="description"]').setAttribute("content", (event.preview_text?event.preview_text:event.short_description)); //document.querySelector('meta[name="keywords"]').setAttribute("content", event.ename); //document.querySelector('meta[name="og:url"]').setAttribute("content", '/tickets/'+hs+'/'+arr[1]+'/'+arr[2]+'/'+arr[3]+'/'+ arr[4]+'/'+arr[5]+'/0/'+arr[7]+'/widget4'); if(event.preview_file){ //$('meta[property=og\\:image]').attr('content', 'https://widget.telegreen.ru/api/tickets/files/'+sidhash+'/'+event.preview_file_300); se += '<div class="tg-event-element-name-tr2"><div class="tg-event-element-name"><div class="tg-event-image"'; if(event.preview_file_300) se += 'style="background-image:url(/api/tickets/files/'+sidhash+'/'+event.preview_file_300+');"'; se += '></div><div class="tg-event-flex"><div class="tg-event-elements-desc">' +(event.preview_text?event.preview_text:event.short_description)+ '</div>'; }else{ se += '' +event.ename+ ' <span class="age_category">' +event.age_category+ '</span>'; } }else{ se += '' +event.ename+ ' <span class="age_category">' +event.age_category+ '</span>'; } $pageTitle.html( se ); $('.eventName').html( event.ename +' <span class="tg-event-session-date">'+event.session_date+'</span> <span class="tg-event-session-time">'+event.session_time +'</span>'); $('.tg-event--short-description').html( event.short_description ); let add = ''; if(d.openEvent && d.openEvent.hall){ add += '<div class="tg-detail-box tg-detail-box-hall">'; add += '<div>Место проведения: <div>'+d.openEvent.hall[0].theater_name+'</div></div>'; add += '<div>Адрес: <span class="ymaps-geolink">'+d.openEvent.hall[0].theater_address+'</span></div>'; add += '</div>'; } if(d.openEvent && d.openEvent.hall){ let hall = d.openEvent.hall[0]; let coords = ''; if(hall.theater_coords){ coords = hall.theater_coords.replace(/[()]/g,''); } let fullAddress = ''; if(hall.city_name) fullAddress += hall.city_name + ', '; if(hall.theater_address) fullAddress += hall.theater_address; add += '<div class="tg-detail-box tg-detail-box-hall">'; add += '<div>Место проведения: <div>'+hall.theater_name; if(hall.theater_code && hall.theater_code !== ''){ add += ` <a href="https://${hall.theater_code}.muscom.ru/" target="_blank" class="tg-hall-more" title="Подробнее о площадке"> <span class="tg-hall-more-icon"></span> </a> `; } add += '</div></div>'; add += '<div>Адрес: '; add += '<span class="ymaps-geolink" '+ 'data-type="geo" '+ 'data-description="'+hall.theater_name+'" '+ 'data-coordinates="'+coords+'">'+ fullAddress+ '</span>'; add += '</div>'; add += '</div>'; } if( d.infoBLocks ) { for (let block of d.infoBLocks){ add += '<div class="tg-detail-box tg-detail-box-type-'+block.type+'">'; add += '<div class="tg-detail-box-title tg-detail-box-type-'+block.type+'-title">'+block.name+'</div>'; add += '<div class="tg-detail-box-name tg-detail-box-type-'+block.type+'-name">'+block.value+'</div>'; add += '</div>'; } } let gridEv = 'grid-template-columns:unset !IMPORTANT'; if(add){ gridEv = ''; add = '<div class="tg-detail-add"><div class="tg-detail-boxs">' + add + '</div></div>'; } s+= (event.detail_text?'<div class="tg-detail-container" style="'+gridEv+'"><div class="tg-detail-text">'+event.detail_text+'</div>'+add+'</div>'+ '<div class="tg-sessions-check-tilte">Выберите '+(event.event_type_name?event.event_type_name:'сеанс')+'</div>':event.short_description) ; //for (let theme of d.themes){ // console.log(theme); //} s += ''; if (event.virtualSchedule && !globalSID && window.TgVirtualSessions) { window.TgVirtualSessions.calendar(window.tgVirtualSessions, window.tgVirtualSessionBounds); } else { let selectedSession = d.r[0]; if( globalSID && (globalEID && globalEID.indexOf(',')==-1) ){ if(d.openEvent){ openEvent = d.openEvent; openEvent.sidhash = d.sidhash; //console.log(openEvent, 'openEvent3'); } let session = selectedSession; /*s += '<h3>'+session.ename+'</h3><div class=""><button class="select-time-item'+( (session.events_type_id == 2 || session.events_type_id == 4) ? ' complex':'')+'" data-value="'+session.sid+'" data-hid="'+session.hall_id+'"><span>'+session.sname+'</span></button></div>'; $eventsContain.html(s);*/ $stepEvent.addClass("step-one"); $('<button>') .addClass('select-time-item'+( (session.events_type_id == 2 || session.events_type_id == 4) ? ' complex':'')+'') .data('value', session.sid) .data('hid', session.hall_id) .html("Вернуться") .appendTo( $eventsContain ) .click(); }else $stepEvent.removeClass("step-one"); if( !globalSID && (globalEID && globalEID.indexOf(',')==-1) ){ s += ''; s += '<div class="tg-event-elements-sessions"><div class="tg-event-elements-session-data">'; last_date = ''; for(let session of d.r){ s += showSesName(session); } s += '</div></div>'; } $events .hide() .html(s) .slideDown(); if (window.TgWidget5EventTags) window.TgWidget5EventTags.render(event); } }else{ let emptyText = 'К сожалению, активные мероприятия в данной категории отсутствуют'; $pageTitle.html(emptyText); $themes.html('<div class="tg-onlytid-no-events">' + emptyText + '</div>'); if (typeof tgInitOnlyTidFilters === 'function') { tgInitOnlyTidFilters($stepThemes); } } }).fail(function(xhr, textStatus) { finishNuHallPreview(); $l.remove(); $('.loading128').remove(); let errorText = 'Не удалось загрузить билеты. Проверьте соединение и повторите попытку.'; if (textStatus === 'timeout') { errorText = 'Билетный сервер не ответил вовремя. Повторите попытку.'; } let $error = $('<div class="tg-load-error"></div>').text(errorText); let $retry = $('<button type="button" class="btn btn-primary"></button>') .text('Повторить') .on('click', function() { window.location.reload(); }); $error.append('<br>').append($retry); $('.pages').prepend($error); }); }); Музей-заповедник А.С.Пушкина .... Вернуться к выбору площадки Выберите категорию билета Вернуться к выбору категории Выберите билет ⌕ Пушкинская карта По выбранным фильтрам ничего не найдено Вернуться к выбору мероприятия Вернуться к выбору сеанса Выберите свой билет Вы выбрали 0 билетов Итого 0 ₽ Сервисный сбор: 0 ₽ Оформить Вернуться к выбору билетов Укажите Заказчика Не авторизован Контакты технической поддержки по электронным билетам +7(495) 204-23-30 support@telegreen.ru Правовая информация Политика обработки ПД Политика cookie {!help!} Оплатить TeleGreen - билетная система Техническая поддержкаБилетная система TeleGreen+7 (495) 204-23-30support@telegreen.ru
17 июля 2024
Мама троих детей Юлия Журавлева рассказала, как проходили ее роды в стенах Одинцовского роддома.
17 июля 2024
Фотовыставка «Знаменитые люди Звенигорода» открылась в сквере имени Чехова в центре Звенигорода.
17 июля 2024
Официальная трансляция турнира будет доступна на телеканале «Матч ТВ».
17 июля 2024
В деревне Зайцево Одинцовского округа 13 июля прошла экологическая акция «Чистый лес».
17 июля 2024
Московская область сохраняет статус одного из наиболее перспективных и развивающихся регионов России.
17 июля 2024
В городе Одинцово в рамках губернаторской программы «100 прудов и озер» стартовала очистка Комсомольског…
17 июля 2024
«После реконструкции движение общественного транспорта на площади станет упорядоченным.
16 июля 2024
Отличившимся работникам почты вручили благодарственные письма и цветы.
16 июля 2024
Одинцовский предприниматель получил субсидию на открытие по франшизе мультиспортивного детского клуба
16 июля 2024
Организатором забега является МБУ «Одинцовский Молодёжный центр». Ссылка на регистрацию.
16 июля 2024
«Гражданам следует помнить, что строительные отходы и ТБО утилизируются по-разному.
16 июля 2024
С подробной инструкцией можно ознакомиться по ссылке.
15 июля 2024
В Одинцово сотрудники полиции совместно с волонтерами провели акцию «Осторожно, мошенники!»
15 июля 2024
С 2020 года работала врачом-инфекционистом в городской больнице Курска.
15 июля 2024
Одинцовские спортсмены заняли призовые места на Всероссийских соревнованиях по стрельбе из лука
15 июля 2024
Воспитанники спортивной школы «Одинцово» вновь подтвердили высокий уровень одинцовского бадминтона.
15 июля 2024
Сделать это можно в комментариях под постом, а Телеграм-канале железнодорожников.
15 июля 2024