templates/Recommendations/_profile_recommendations.html.twig line 1

Open in your IDE?
  1. {# <div id="recommendationsDebug">
  2.     {!#<div id="queryData" style="display: none;"></div><a href="javascript:void(0);" id="showQueryBtn">Показать запрос</a>#!}
  3.     <div id="profileViewsData">
  4.         <h6 style="color: #1ea471">Просмотры анкет на сайте</h6>
  5.         {% set profile_debug_data = profile_recommendations_debug_views() %}
  6.         {% include "Recommendations/_profile_recommendations_debug_profile_data_table.html.twig" %}
  7.     </div>
  8.     <div id="favouritesData">
  9.         <h6 style="color: #0d5aa7">Избранные</h6>
  10.         {% set profile_debug_data = profile_recommendations_debug_favourites() %}
  11.         {% include "Recommendations/_profile_recommendations_debug_profile_data_table.html.twig" %}
  12.     </div>
  13.     {% include "Recommendations/_profile_recommendations_debug_coeffs_data_table.html.twig" %}
  14.     <h6 style="color: #bd2130">Коэффициенты</h6>
  15.     <div id="coeffsData"></div>
  16.     {% include "Recommendations/_profile_recommendations_debug_viewed_profiles_data_table.html.twig" %}
  17.     <h6 style="color: #856404">Просмотренные рекомендации</h6>
  18.     <div id="viewedRecommendationsData"></div>
  19. </div> #}
  20. <div class="recommendation{{ componentClass is defined ? ' ' ~ componentClass : '' }} mb-4" id="profileRecommendations">
  21.     <div class="recommendation-heading d-flex-c">
  22.         <h2 class="text-xxl">РЕКОМЕНДОВАННЫЕ АНКЕТЫ</h2>
  23.     </div>
  24.     <div class="recommendation-container">
  25.         <div class="recommendation-list d-grid " id="profileRecommendationsContainer">
  26.             {% for i in 1..6 %}
  27.                 <div class="recommendation-item recommendation-item--skeleton d-flex ">
  28.                     <div class="card__avatar skeleton"></div>
  29.                     <div class="recommendation-info d-flex">
  30.                         <div class="recommendation-name skeleton"></div>
  31.                         <div class="recommendation-station skeleton"></div>
  32.                         <div class="recommendation-price skeleton"> </div>
  33.                         {# <div class="recommendation-phone btn btn-fluid skeleton">  </div> #}
  34.                     </div>
  35.                 </div>
  36.             {% endfor %}
  37.         </div>
  38.     </div>
  39. </div>
  40.     <script type="text/javascript">
  41.         document.addEventListener('DOMContentLoaded', function() {
  42.             var showMorePressCount = 0;
  43.             const sortLines = (data) => {
  44.                 {#// Инициализация объекта для хранения станций в соответствии с их типом#}
  45.                 const sortedStations = data.reduce((acc, station) => {
  46.                     if (station.name.startsWith('МЦД-')) {
  47.                         acc.mcd.push(station);
  48.                     } else if (station.name === 'МЦК') {
  49.                         acc.mck.push(station);
  50.                     } else {
  51.                         acc.ordinary.push(station);
  52.                     }
  53.                     return acc;
  54.                 }, { ordinary: [], mcd: [], mck: [] });
  55.                 {#// Сортировка станций МЦД по номеру#}
  56.                 sortedStations.mcd.sort((a, b) => {
  57.                     const numA = parseInt(a.name.split('МЦД-')[1]);
  58.                     const numB = parseInt(b.name.split('МЦД-')[1]);
  59.                     return numA - numB;
  60.                 });
  61.                 {#// Объединение отсортированных станций#}
  62.                 const result = [
  63.                     ...sortedStations.ordinary,
  64.                     ...sortedStations.mcd,
  65.                     ...sortedStations.mck
  66.                 ];
  67.                 return result;
  68.             };
  69.             const iconMetroSingle = ({color, iconId, width = '18'}) => {
  70.                 return `<svg class="metro-icon" width="${width}" height="18">
  71.                     <use style="fill:#${color}" class="icon-container--element" xlink:href="#${iconId}"></use>
  72.                 </svg>`
  73.             };
  74.             const iconMetroDouble = ({color1, color2}) => `
  75.                 <svg class="metro-icon" width="17" height="16" fill="none">
  76.                     <path fill="#8E8E8E" d="M3.7 8.83h-.77v1.04h3.94V8.83H5.7l.76-2.59L8.5 9.96l2.03-3.72.76 2.6h-1.16v1.03h3.94V8.83h-.78L10.7 2 8.5 6.51 6.3 2 3.7 8.83Z"/>
  77.                     <rect width="7" height="3" x=".5" y="11.02" fill="#${color1}" rx="1.5"/>
  78.                     <rect width="7" height="3" x="9.5" y="11" fill="#${color2}" rx="1.5"/>
  79.                 </svg>`;
  80.             const iconMetroTriple = ({color1, color2, color3}) => `<svg class="metro-icon" width="17" height="16" fill="none">
  81.                     <path fill="#8E8E8E" d="M3.7 8.83h-.77v1.04h3.94V8.83H5.7l.76-2.59L8.5 9.96l2.03-3.72.76 2.6h-1.16v1.03h3.94V8.83h-.78L10.7 2 8.5 6.51 6.3 2 3.7 8.83Z"/>
  82.                     <rect width="4" height="3" x=".5" y="11.02" fill="#${color1}" rx="1.5"/>
  83.                     <rect width="4" height="3" x="6.5" y="11.02" fill="#${color2}" rx="1.5"/>
  84.                     <path fill="#${color3}" d="M12.5 12.5c0-.83.67-1.5 1.5-1.5h1a1.5 1.5 0 0 1 0 3h-1a1.5 1.5 0 0 1-1.5-1.5Z"/>
  85.                 </svg>`;
  86.             const getAllData = (s) => [s.color, s.name];
  87.             const getIconId = (name) => name.toLowerCase().includes('мцк') ? 'mck' : (name.toLowerCase().includes('мцд') ? 'mcd-' + name.split('-')[1] : 'metro');
  88.             const getIconWidth = (name) => name.toLowerCase().includes('мцд') ? '22' : '16';
  89.             const wrapperIcon = (str) => `<span class="metro-icons d-flex-c">${str}</span>`;
  90.             const wrapperLink = (html, _name) => `<a class="modal-list__icons d-flex" href="${window.siteData.stations[_name]}">${html}</a>`;
  91.             function iconGen2({name, dataLines}) {
  92.                 {#//for test#}
  93.                 const root = document.getElementById('icon-test-gen2');
  94.                 const lines = sortLines(dataLines);
  95.                 const count = lines.length;
  96.                 {#// Если линия 1шт#}
  97.                 if (count === 1){
  98.                     // Получаем данные по цветам и названиям линии
  99.                     const [color, line_name] = getAllData(lines[0]);
  100.                     {#// Иконка может быть обычным метро, мцд с номером или мцк#}
  101.                     const iconId = getIconId(line_name);
  102.                     const width = getIconWidth(line_name);
  103.                     return wrapperLink(wrapperIcon(iconMetroSingle({color, iconId, width})+ name), name);
  104.                     {#//return wrapperIcon(iconMetroSingle({color, iconId, width}));#}
  105.                 } else if (count === 2) {
  106.                     const [[color1, name1], [color2, name2]] = lines.map(getAllData);
  107.                     const iconId1 = getIconId(name1);
  108.                     const iconId2 = getIconId(name2);
  109.                     {#// Если обе иконки это метро#}
  110.                     if (iconId1 === 'metro' && iconId2 === 'metro') {
  111.                         return wrapperLink(wrapperIcon(`${iconMetroDouble({color1, color2})} ${name}`), name);
  112.                     } else {
  113.                         const width1 = getIconWidth(name1);
  114.                         const width2 = getIconWidth(name2);
  115.                         return wrapperLink(wrapperIcon(`${iconMetroSingle({ color: color1, iconId: iconId1, width: width1 })}${iconMetroSingle({ color: color2, iconId: iconId2, width: width2 })} ${name}`), name);
  116.                     }
  117.                 } else if (count === 3) {
  118.                     const [[color1, name1], [color2, name2], [color3, name3]] = lines.map(getAllData);
  119.                     const iconId1 = getIconId(name1);
  120.                     const iconId2 = getIconId(name2);
  121.                     const iconId3 = getIconId(name3);
  122.                     if (iconId1 === 'metro' && iconId2 === 'metro' && iconId3 === 'metro') {
  123.                         return wrapperLink(wrapperIcon(`${iconMetroTriple({color1, color2, color3})} ${name}`), name);
  124.                     } else if (iconId1 === 'metro' && iconId2 === 'metro') {
  125.                         const width3 = getIconWidth(name3);
  126.                         return wrapperLink(wrapperIcon(`${iconMetroDouble({color1, color2})}${iconMetroSingle({ color: color3, iconId: iconId3, width: width3 })} ${name}`), name);
  127.                     } else {
  128.                         const width1 = getIconWidth(name1);
  129.                         const width2 = getIconWidth(name2);
  130.                         const width3 = getIconWidth(name3);
  131.                         return wrapperLink(wrapperIcon(`${iconMetroSingle({ color: color1, iconId: iconId1, width: width1 })}${iconMetroSingle({ color: color2, iconId: iconId2, width: width2 })}${iconMetroSingle({ color: color3, iconId: iconId3, width: width3 })} ${name}`), name);
  132.                     }
  133.                 } else if (count === 4) {
  134.                     const [[color1, name1], [color2, name2], [color3, name3], [color4, name4]] = lines.map(getAllData);
  135.                     const iconId1 = getIconId(name1);
  136.                     const iconId2 = getIconId(name2);
  137.                     const iconId3 = getIconId(name3);
  138.                     const iconId4 = getIconId(name4);
  139.                     if (iconId1 === 'metro' && iconId2 === 'metro' && iconId3 === 'metro') {
  140.                         const width4 = getIconWidth(name4);
  141.                         return wrapperLink(wrapperIcon(`${iconMetroTriple({color1, color2, color3})}${iconMetroSingle({ color: color4, iconId: iconId4, width: width4 })} ${name}`), name);
  142.                     } else if (iconId1 === 'metro' && iconId2 === 'metro') {
  143.                         const width3 = getIconWidth(name3);
  144.                         const width4 = getIconWidth(name4);
  145.                         return wrapperLink(wrapperIcon(`${iconMetroDouble({color1, color2})}${iconMetroSingle({ color: color3, iconId: iconId3, width: width3 })}${iconMetroSingle({ color: color4, iconId: iconId4, width: width4 })} ${name}`), name);
  146.                     } else {
  147.                         const width1 = getIconWidth(name1);
  148.                         const width2 = getIconWidth(name2);
  149.                         const width3 = getIconWidth(name3);
  150.                         const width4 = getIconWidth(name4);
  151.                         return wrapperLink(wrapperIcon(`${iconMetroSingle({ color: color1, iconId: iconId1, width: width1 })}${iconMetroSingle({ color: color2, iconId: iconId2, width: width2 })}${iconMetroSingle({ color: color3, iconId: iconId3, width: width3 })}${iconMetroSingle({ color: color4, iconId: iconId4, width: width4 })} ${name}`), name);
  152.                     }
  153.                 }
  154.                 return wrapperLink(name,name);
  155.             }
  156.             function generateTagList(hasApartPrice, hasTakeoutPricing, services) {
  157.                 let tags = [];
  158.                 if (hasApartPrice && !hasTakeoutPricing) {
  159.                     tags.push('Апарты');
  160.                 }
  161.                 if (!hasApartPrice && hasTakeoutPricing) {
  162.                     tags.push('Выезд');
  163.                 }
  164.                 if (hasApartPrice && hasTakeoutPricing) {
  165.                     tags.push('Апарты и выезд');
  166.                 }
  167.                 services.forEach((service, i) => {
  168.                     switch (service.name.ru.toLowerCase()) {
  169.                         case 'секс классический':
  170.                             tags.push('Классика');
  171.                             break;
  172.                         case 'секс анальный':
  173.                             tags.push('Анал');
  174.                             break;
  175.                         case 'минет без резинки':
  176.                             tags.push('МБР');
  177.                             break;
  178.                         case 'куннилингус':
  179.                             tags.push('Куни');
  180.                             break;
  181.                         case 'окончание в рот':
  182.                             tags.push('ОВР');
  183.                             break;
  184.                         case 'массаж':
  185.                             tags.push('Массаж');
  186.                             break;
  187.                     }
  188.                     if (service.name.ru.includes('Массаж') && !tags.includes('Массаж')) {
  189.                         tags.push('Массаж');
  190.                     }
  191.                 });
  192.                 let tagsHtml = tags.length > 0 ? '<div class="profile-card__tags d-flex">' : '';
  193.                 tags.forEach((service, i) => {
  194.                     tagsHtml += `<div class="profile-card__tags-item clr-main-text">${service}</div>`
  195.                 });
  196.                 tagsHtml += tags.length > 0 ? '</div>' : '';
  197.                 return tagsHtml;
  198.             }
  199.             function fetchRecommendations() {
  200.                 {% set gender = 'profile_list.list_by_gender' in app.request.get('_route') ? app.request.get('gender')|gender_value_by_uri : gender_female() %}
  201.                 let url = '{{ path('recommendations.get', {city:app.request.get('city').uriIdentity, count: 6, imageSize: '357x500', exclude: (excludeRecommendationProfileIds is iterable ? excludeRecommendationProfileIds : [])|join(','), gender: gender }) }}';
  202.                 let filter = JSON.parse('{{ recommendationSpec is defined and recommendationSpec ? recommendationSpec.spec.toEsQueryObject|json_encode|raw : {}|json_encode|raw }}');
  203.                 const profileContainer = document.getElementById('profileRecommendations');
  204.                 window.Recommendation.updateSettings({
  205.                     rootId: 'profileRecommendations',
  206.                     url,
  207.                     filter,
  208.                     callback: (response) => {
  209.                         let template = '';
  210.                         const container = document.getElementById('profileRecommendationsContainer');
  211.                         container.innerHTML = '';
  212.                         response.profiles.forEach(function(profile) {
  213.                             const {station, price, phone, name, age, id, image, has_comments, has_selfie, has_video, height, breast_size, weight, description, services} = profile;
  214.                             let metroHtml = '';
  215.                             if (station) {
  216.                                 metroHtml = `<div class="profile-card__bio">
  217.                                     <div class="profile-card__metro">
  218.                                         <div class="card__metro-link metro-link">
  219.                                             <span class="metro-icons d-flex-c">
  220.                                                 ${iconGen2({name: station.name, dataLines: station.lines})}
  221.                                             </span>
  222.                                         </div>
  223.                                     </div>
  224.                                 </div>`;
  225.                             }
  226.                             const prices = {
  227.                                 h1: Math.min(profile.prices.in['1h'] || 999999, profile.prices.out['1h'] || 999999),
  228.                                 h2: Math.min(profile.prices.in['2h'] || 999999, profile.prices.out['2h'] || 999999),
  229.                                 night: Math.min(profile.prices.in.night || 999999, profile.prices.out.night || 999999),
  230.                             }
  231.                             const hasApartPrice = profile.prices.in['1h'] || profile.prices.in['2h'] || profile.prices.in.night;
  232.                             const hasTakeoutPricing = profile.prices.out['1h'] || profile.prices.out['2h'] || profile.prices.out.night;
  233.                             let tagsHtml = generateTagList(hasApartPrice, hasTakeoutPricing, services);
  234.                             /**
  235.                                 lines: [
  236.                                         {name: 'Калининская', color: 'FFD702'}
  237.                                         {name: 'Большая Кольцевая', color: '82C0C0'}
  238.                                         {name: 'МЦД-3', color: 'E15D29'}
  239.                                     ]
  240.                                 name: "Авиамоторная"
  241.                             */
  242.                             template = `
  243.                                 <a class="card-link" href="${profile.url}" target="_blank"><span class="visually-hidden">${name}</span></a>
  244.                                 <div class="card-layout d-grid">
  245.                                     <div class="card__avatar profile-card__avatar">
  246.                                         <div class="profile-card__avatar-link">
  247.                                             <img class="card__avatar-image profile-card__avatar-image" src="${image}" alt="Эскортница ${name}, ${age} лет, Алексеевская, снять, ${id}" width="220" height="308">
  248.                                         </div>
  249.                                         <div class="profile-card__icons d-flex-c">
  250.                                             <div data-tippy-icon="${has_selfie ? 'Есть' : 'Нет'} селфи" ${has_selfie ? '' : ' data-tippy-instance'}>
  251.                                                 <svg class="profile-card__icon${has_selfie ? '' : ' off'}" width="20" height="20"><use href="#selfie"></use></svg>
  252.                                             </div>
  253.                                             <div data-tippy-icon="${has_video ? 'Есть' : 'Нет'} видео" ${has_video ? '' : ' data-tippy-instance'}>
  254.                                                 <svg class="profile-card__icon${has_video ? '' : ' off'}" width="20" height="20"><use href="#video"></use></svg>
  255.                                             </div>
  256.                                             <div data-tippy-icon="${has_comments ? 'Есть' : 'Нет'} отзывы" ${has_comments ? '' : ' data-tippy-instance'}>
  257.                                                 <svg class="profile-card__icon${has_comments ? '' : ' off'}" width="20" height="20"><use href="#comment"></use></svg>
  258.                                             </div>
  259.                                         </div>
  260.                                     </div>
  261.                                     <div class="profile-card__info">
  262.                                         <div class="profile-card__personal clr-text-base">
  263.                                             <div class="profile-card__personal-item d-flex">
  264.                                                 <span class="profile-card__personal-title">Грудь</span>
  265.                                                 <span class="profile-card__personal-value fw-600 ml-auto">${breast_size ? breast_size : '-'}</span>
  266.                                             </div>
  267.                                             <div class="profile-card__personal-item d-flex">
  268.                                                 <span class="profile-card__personal-title">Рост</span>
  269.                                                 <span class="profile-card__personal-value fw-600 ml-auto">${height ? height : '-'}</span>
  270.                                             </div>
  271.                                             <div class="profile-card__personal-item d-flex">
  272.                                                 <span class="profile-card__personal-title">Вес</span>
  273.                                                 <span class="profile-card__personal-value fw-600 ml-auto">${weight ? weight : '-'}</span>
  274.                                             </div>
  275.                                         </div>
  276.                                         <div class="card-time profile-card-time">
  277.                                             <div class="card-time-item d-flex clr-pre-white-bg">
  278.                                                 <span class="card-time-title">Час</span>
  279.                                                 <span class="card-time-value fw-700 ml-auto clr-main-text">${prices.h1 === 999999 ? '-' : prices.h1.toLocaleString('ru') + 'р'}</span>
  280.                                             </div>
  281.                                             <div class="card-time-item d-flex clr-pre-white-bg">
  282.                                                 <span class="card-time-title">2 часа</span>
  283.                                                 <span class="card-time-value fw-700 ml-auto clr-main-text">${prices.h2 === 999999 ? '-' : prices.h2.toLocaleString('ru') + 'р'}</span>
  284.                                             </div>
  285.                                             <div class="card-time-item d-flex clr-pre-white-bg">
  286.                                                 <span class="card-time-title">Ночь</span>
  287.                                                 <span class="card-time-value fw-700 ml-auto clr-main-text">${prices.night === 999999 ? '-' : prices.night.toLocaleString('ru') + 'р'}</span>
  288.                                             </div>
  289.                                         </div>
  290.                                         ${tagsHtml}
  291.                                     </div>
  292.                                 </div>
  293.                                 <div class="card__bio-name profile-card__bio-name">
  294.                                     <div class="profile-card__bio-link fw-700">
  295.                                         <span class="profile-card__bio-text mr-1">${name}</span>
  296.                                         <span class="profile-card__bio-age mr-1">${age}</span>
  297.                                     </div>
  298.                                 </div>
  299.                                 ${metroHtml}
  300.                                 <div class="profile-card__bio profile-card__bio-with-text">
  301.                                     <p class="profile-card__bio-desc mb-2">
  302.                                         ${description}
  303.                                     </p>
  304.                                 </div>
  305.                             `;
  306.                             /*
  307.                             <div class="profile-card__bio">
  308.                                     <button class="card__phone profile-card__phone btn btn-main-border btn-fluid fw-600" type="button" onclick="this.classList.add('d-none');this.nextElementSibling.classList.remove('d-none')">
  309.                                         <svg class="btn-icon" width="21" height="20" fill="none"><path d="M6.583 2.5H3.666a.836.836 0 0 0-.833.834C2.833 11.159 9.175 17.5 17 17.5a.836.836 0 0 0 .833-.833v-2.908a.836.836 0 0 0-.833-.834 9.503 9.503 0 0 1-2.975-.475.7.7 0 0 0-.259-.041.854.854 0 0 0-.591.241l-1.834 1.834A12.625 12.625 0 0 1 5.85 8.992l1.833-1.833a.836.836 0 0 0 .208-.85 9.467 9.467 0 0 1-.475-2.975.836.836 0 0 0-.833-.834Z"></path></svg>
  310.                                         <span class="btn-text">Показать телефон</span>
  311.                                     </button><!--noindex-->
  312.                                     <a href="tel:${phone}" rel="nofollow" class="card__phone profile-card__phone btn btn-main-border btn-fluid fw-600 is-active d-none">
  313.                                         <svg class="btn-icon" width="21" height="20" fill="none">
  314.                                             <path d="M6.583 2.5H3.666a.836.836 0 0 0-.833.834C2.833 11.159 9.175 17.5 17 17.5a.836.836 0 0 0 .833-.833v-2.908a.836.836 0 0 0-.833-.834 9.503 9.503 0 0 1-2.975-.475.7.7 0 0 0-.259-.041.854.854 0 0 0-.591.241l-1.834 1.834A12.625 12.625 0 0 1 5.85 8.992l1.833-1.833a.836.836 0 0 0 .208-.85 9.467 9.467 0 0 1-.475-2.975.836.836 0 0 0-.833-.834Z"></path>
  315.                                         </svg>
  316.                                         <span class="btn-text">${phone}</span>
  317.                                     </a><!--/noindex-->
  318.                             </div>
  319.                             */
  320.                             const node = document.createElement('div');
  321.                             node.className = 'recommendation-item d-flex swiper-slide   card profile-card white-round';
  322.                             node.dataset.profileId = id;
  323.                             node.innerHTML = template;
  324.                             container.appendChild(node);
  325.                         });
  326.                         profileContainer.style.display = 'block';
  327.                         document.dispatchEvent(new CustomEvent('recommendations:loaded', {detail: {id: 'recommendations'}}));
  328.                         document.dispatchEvent(new Event('tippy:render'));
  329.                     }
  330.                 });
  331.                 window.Recommendation.loadRecommendations();
  332.             }
  333.             window.ObserverJakka({
  334.                 id: 'recommendations',
  335.                 callback: () => {
  336.                     fetchRecommendations();
  337.                 },
  338.                 options: {
  339.                     rootMargin: '150px'
  340.                 }
  341.             });
  342.             {#// iconGen2({
  343.             //     "name": "просто метро",
  344.             //     "dataLines": [
  345.             //         {
  346.             //             "name": "Калужско-Рижская",
  347.             //             "color": "ED9121"
  348.             //         }
  349.             //     ]
  350.             // });
  351.             // iconGen2({
  352.             //     "name": "мцд3",
  353.             //     "dataLines": [
  354.             //         {
  355.             //             "name": "МЦД-3",
  356.             //             "color": "E15D29"
  357.             //         }
  358.             //     ]
  359.             // });
  360.             // iconGen2({
  361.             //     "name": "мцк",
  362.             //     "dataLines": [
  363.             //         {
  364.             //             "name": "МЦК",
  365.             //             "color": "E15D29"
  366.             //         }
  367.             //     ]
  368.             // });
  369.             // iconGen2({
  370.             //     "name": "мцд+ мцк",
  371.             //     "dataLines": [
  372.             //         {
  373.             //             "name": "МЦД-3",
  374.             //             "color": "E15D29"
  375.             //         },
  376.             //         {
  377.             //             "name": "МЦК",
  378.             //             "color": "FFA8AF"
  379.             //         }
  380.             //     ]
  381.             // })
  382.             // iconGen2({
  383.             //     "name": "Только мцд",
  384.             //     "dataLines": [
  385.             //         {
  386.             //             "name": "МЦД-3",
  387.             //             "color": "E15D29"
  388.             //         },
  389.             //         {
  390.             //             "name": "МЦД-2",
  391.             //             "color": "FFA8AF"
  392.             //         }
  393.             //     ]
  394.             // })
  395.             // iconGen2({
  396.             //     "name": "Метро и мцк",
  397.             //     "dataLines": [
  398.             //         {
  399.             //             "name": "Замоскворецкая",
  400.             //             "color": "2DBE2C"
  401.             //         },
  402.             //         {
  403.             //             "name": "МЦК",
  404.             //             "color": "FFA8AF"
  405.             //         }
  406.             //     ]
  407.             // })
  408.             // iconGen2({
  409.             //     "name": "Два метро",
  410.             //     "dataLines": [
  411.             //         {
  412.             //             "name": "Замоскворецкая2",
  413.             //             "color": "2DBE2C"
  414.             //         },
  415.             //         {
  416.             //             "name": "Замороченская2",
  417.             //             "color": "FFA8AF"
  418.             //         }
  419.             //     ]
  420.             // })
  421.             // iconGen2({
  422.             //     "name": "2 метро + мцк",
  423.             //     "dataLines": [
  424.             //         {
  425.             //             "name": "Солнцевская",
  426.             //             "color": "FFD702"
  427.             //         },
  428.             //         {
  429.             //             "name": "Большая Кольцевая",
  430.             //             "color": "82C0C0"
  431.             //         },
  432.             //         {
  433.             //             "name": "МЦК",
  434.             //             "color": "FFA8AF"
  435.             //         }
  436.             //     ]
  437.             // })
  438.             // iconGen2({
  439.             //     "name": "2 метро + мцд3",
  440.             //     "dataLines": [
  441.             //         {
  442.             //             "name": "Калининская",
  443.             //             "color": "FFD702"
  444.             //         },
  445.             //         {
  446.             //             "name": "Большая Кольцевая",
  447.             //             "color": "82C0C0"
  448.             //         },
  449.             //         {
  450.             //             "name": "МЦД-3",
  451.             //             "color": "E15D29"
  452.             //         }
  453.             //     ]
  454.             // });
  455.             // iconGen2({
  456.             //     "name": "Метро + мцд2 + метро",
  457.             //     "dataLines": [
  458.             //         {
  459.             //             "name": "Калининская",
  460.             //             "color": "FFD702"
  461.             //         },
  462.             //         {
  463.             //             "name": "МЦД-2",
  464.             //             "color": "82C0C0"
  465.             //         },
  466.             //         {
  467.             //             "name": "Большая Кольцевая 2",
  468.             //             "color": "00C0C0"
  469.             //         },
  470.             //     ]
  471.             // });
  472.             // iconGen2({
  473.             //     "name": "Три метро",
  474.             //     "dataLines": [
  475.             //         {
  476.             //             "name": "Калининская",
  477.             //             "color": "FFD702"
  478.             //         },
  479.             //         {
  480.             //             "name": "Большая Кольцевая",
  481.             //             "color": "82C0C0"
  482.             //         },
  483.             //         {
  484.             //             "name": "Большая Кольцевая 2",
  485.             //             "color": "00C0C0"
  486.             //         },
  487.             //     ]
  488.             // });
  489.             // iconGen2({
  490.             //     "name": "Белорусская",
  491.             //     "dataLines": [
  492.             //         {
  493.             //             "name": "Замоскворецкая",
  494.             //             "color": "2DBE2C"
  495.             //         },
  496.             //         {
  497.             //             "name": "Кольцевая",
  498.             //             "color": "8D5B2D"
  499.             //         },
  500.             //         {
  501.             //             "name": "МЦД-4",
  502.             //             "color": "3CB183"
  503.             //         },
  504.             //         {
  505.             //             "name": "МЦД-1",
  506.             //             "color": "FAA400"
  507.             //         }
  508.             //     ]
  509.             // });#}
  510.         });
  511.     </script>