1/* Global technical documents that are not yet tied to a live product card. 2 * Loaded after app.js and before documents-center.js. Synthetic records are 3 * removed on the next task so they never become catalog products. 4 * 5 * The TPE/TPE seal certificates are temporarily removed from real product 6 * records only while documents-center builds its immutable library index. 7 * They are immediately restored for product cards, and indexed through the 8 * dedicated "УплоÑниÑели" library record instead of the TATPROF section. 9 */ 10(() => { 11 'use strict'; 12 13 const products = window.SK?.data?.products; 14 if (!Array.isArray(products)) return; 15 16 const marker = '__documentRegistryOnly'; 17 const sealCertificateHrefs = new Set([ 18 '/documents/certificates/tpe-vr-plast-certificate-2025-2028.pdf', 19 '/documents/certificates/tpe-vr-plast-test-protocol-8027-1125.pdf' 20 ]); 21 22 // Keep the product cards unchanged, but stop documents-center from assigning 23 // TPE certificates to TATPROF merely because the sale card has that brand. 24 const savedSealCertificates = []; 25 for (const product of products) { 26 const certificates = Array.isArray(product.certificates) ? product.certificates : null; 27 if (!certificates || !certificates.some(doc => sealCertificateHrefs.has(doc?.href))) continue; 28 savedSealCertificates.push([product, certificates]); 29 product.certificates = certificates.filter(doc => !sealCertificateHrefs.has(doc?.href)); 30 } 31 32 const docs = [ 33 { 34 slug:'doc-only-seals-tpe-certificates', 35 article:'TPE / ТÐÐ', 36 name:'СеÑÑиÑикаÑÑ Ð½Ð° ÑплоÑниÑели ТÐÐ (TPE)', 37 category:'document-only', 38 brand:'УплоÑниÑели', 39 system:'УплоÑниÑели ТÐÐ (TPE)', 40 systemLabel:'УплоÑниÑели', 41 hardwareSection:'hardware', 42 certificates:[ 43 { 44 title:'СеÑÑиÑÐ¸ÐºÐ°Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð½Ð° ÑплоÑниÑели ТÐÐ (TPE) ÐÐР«ÐÐ -ÐлаÑÑ» · до 23.11.2028', 45 href:'/documents/certificates/tpe-vr-plast-certificate-2025-2028.pdf' 46 }, 47 { 48 title:'ÐÑоÑокол иÑпÑÑаний â 8027/1125 Ð¾Ñ 24.11.2025 · ÑплоÑниÑели ТÐÐ (TPE)', 49 href:'/documents/certificates/tpe-vr-plast-test-protocol-8027-1125.pdf' 50 } 51 ] 52 }, 53 { 54 slug:'doc-only-fural-catalog', 55 article:'', 56 name:'ÐбÑий каÑалог FURAL', 57 category:'document-only', 58 brand:'FURAL', 59 system:'ФÑÑниÑÑÑа Ð´Ð»Ñ Ð¾ÐºÐ¾Ð½ и двеÑей', 60 systemLabel:'FURAL', 61 hardwareSection:'door-hardware', 62 documents:[{ 63 title:'ÐбÑий каÑалог FURAL · пеÑли, ÑÑÑки и двеÑÐ½Ð°Ñ ÑÑÑниÑÑÑа', 64 href:'/documents/hardware/fural/fural-catalog.pdf', 65 kind:'ÐаÑалог' 66 }] 67 }, 68 { 69 slug:'doc-only-stublina-catalog', 70 article:'', 71 name:'ÐбÑий каÑалог Stublina', 72 category:'document-only', 73 brand:'Stublina', 74 system:'ФÑÑниÑÑÑа Ð´Ð»Ñ Ð¾ÐºÐ¾Ð½ и двеÑей', 75 systemLabel:'Stublina', 76 hardwareSection:'window-hardware', 77 documents:[{ 78 title:'ÐбÑий каÑалог Stublina · Ð¾ÐºÐ¾Ð½Ð½Ð°Ñ Ð¸ двеÑÐ½Ð°Ñ ÑÑÑниÑÑÑа', 79 href:'/documents/hardware/stublina/stublina-catalog.pdf', 80 kind:'ÐаÑалог' 81 }] 82 }, 83 { 84 slug:'doc-only-stn-1850-window-catalog', 85 article:'СТÐ-1850', 86 name:'Ð¢ÐµÑ Ð½Ð¸ÑеÑкий каÑалог СТÐ-1850', 87 category:'document-only', 88 brand:'СаÑÑÑн', 89 system:'СТÐ-1850', 90 systemLabel:'СТÐ-1850 · ÐвÑопаз', 91 hardwareSection:'window-hardware', 92 documents:[{ 93 title:'Ð¢ÐµÑ Ð½Ð¸ÑеÑкий каÑалог СТÐ-1850 · ÑÑÑниÑÑÑа Ð´Ð»Ñ Ð¾ÐºÐ¾Ð½ из алÑминиевого пÑоÑилÑ, ÐвÑопаз', 94 href:'/documents/hardware/stn/stn-1850-window-europaz.pdf', 95 kind:'ÐаÑалог' 96 }] 97 }, 98 { 99 slug:'doc-only-stn-1850-certificate', 100 article:'СТÐ-1850.2', 101 name:'СеÑÑиÑÐ¸ÐºÐ°Ñ Ð¡Ð¢Ð Ð½Ð° повоÑоÑнÑе, оÑкиднÑе и повоÑоÑно-оÑкиднÑе ÑÑÑÑойÑÑва', 102 category:'document-only', 103 brand:'СаÑÑÑн', 104 system:'СТÐ-1850 / СТÐ-2400', 105 systemLabel:'СТÐ', 106 hardwareSection:'window-hardware', 107 certificates:[{ 108 title:'СеÑÑиÑÐ¸ÐºÐ°Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð¤Ð¡ÐС RU.ÐС01.Ð.00068 и пÑоÑокол иÑпÑÑаний â40 Ð¾Ñ 26.05.2025 · до 27.05.2027', 109 href:'/documents/certificates/stn-1850-certificate-protocol-2025-2027.pdf' 110 }] 111 }, 112 { 113 slug:'doc-only-stn-door-hinges-certificate', 114 article:'СТÐ-0611 / 1420 / 2371 / 2746 / 2369 / 1350 / 1602 / 1605 / 3000', 115 name:'СеÑÑиÑÐ¸ÐºÐ°Ñ Ð¡Ð¢Ð Ð½Ð° двеÑнÑе пеÑли', 116 category:'document-only', 117 brand:'СаÑÑÑн', 118 system:'ÐвеÑнÑе пеÑли СТÐ', 119 systemLabel:'СТÐ', 120 hardwareSection:'door-hinges', 121 certificates:[{ 122 title:'СеÑÑиÑÐ¸ÐºÐ°Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð¤Ð¡ÐС RU.ÐС01.Ð.00067 на двеÑнÑе пеÑли СТР· до 27.05.2027', 123 href:'/documents/certificates/stn-door-hinges-certificate-2025-2027.pdf' 124 }] 125 }, 126 { 127 slug:'doc-only-kale-locks-class4-certificate', 128 article:'ФСÐС TR.ÐС01.Ð.00019', 129 name:'СеÑÑиÑÐ¸ÐºÐ°Ñ KALE на вÑезнÑе замки 4 клаÑÑа', 130 category:'document-only', 131 brand:'KALE', 132 system:'Ðамки', 133 systemLabel:'KALE', 134 hardwareSection:'door-hardware', 135 certificates:[{ 136 title:'KALE · вÑезнÑе замки 4 клаÑÑа · ФСÐС TR.ÐС01.Ð.00019 · до 28.11.2026', 137 href:'/documents/certificates/kale/kale-locks-class4-fsks-tr-os01-n00019.pdf' 138 }] 139 }, 140 { 141 slug:'doc-only-kale-cylinder-locks-certificate', 142 article:'ФСÐС TR.ÐС01.Ð.00020', 143 name:'СеÑÑиÑÐ¸ÐºÐ°Ñ KALE на ÑилиндÑовÑе замки 2 клаÑÑа', 144 category:'document-only', 145 brand:'KALE', 146 system:'Ðамки', 147 systemLabel:'KALE', 148 hardwareSection:'door-hardware', 149 certificates:[{ 150 title:'KALE · ÑилиндÑовÑе замки 2 клаÑÑа · ФСÐС TR.ÐС01.Ð.00020 · до 28.11.2026', 151 href:'/documents/certificates/kale/kale-cylinder-locks-class2-fsks-tr-os01-n00020.pdf' 152 }] 153 }, 154 { 155 slug:'doc-only-kale-cylinders-certificate', 156 article:'ФСÐС TR.ÐС01.Ð.00021', 157 name:'СеÑÑиÑÐ¸ÐºÐ°Ñ KALE на Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ ÑилиндÑовÑе Ð´Ð»Ñ Ð·Ð°Ð¼ÐºÐ¾Ð²', 158 category:'document-only', 159 brand:'KALE', 160 system:'ЦилиндÑовÑе Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ', 161 systemLabel:'KALE', 162 hardwareSection:'door-hardware', 163 certificates:[{ 164 title:'KALE · Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ ÑилиндÑовÑе Ð´Ð»Ñ Ð·Ð°Ð¼ÐºÐ¾Ð² · ФСÐС TR.ÐС01.Ð.00021 · до 28.11.2026', 165 href:'/documents/certificates/kale/kale-cylinders-fsks-tr-os01-n00021.pdf' 166 }] 167 }, 168 { 169 slug:'doc-only-kale-latch-locks-certificate', 170 article:'ФСÐС TR.ÐС01.Ð.00022', 171 name:'СеÑÑиÑÐ¸ÐºÐ°Ñ KALE на вÑезнÑе заÑÑлки Ð´Ð»Ñ Ð¼ÐµÐ¶ÐºÐ¾Ð¼Ð½Ð°ÑнÑÑ Ð´Ð²ÐµÑей', 172 category:'document-only', 173 brand:'KALE', 174 system:'Ðамки и заÑÑлки', 175 systemLabel:'KALE', 176 hardwareSection:'door-hardware', 177 certificates:[{ 178 title:'KALE · заÑÑлки вÑезнÑе Ð´Ð»Ñ Ð¼ÐµÐ¶ÐºÐ¾Ð¼Ð½Ð°ÑнÑÑ Ð´Ð²ÐµÑей · ФСÐС TR.ÐС01.Ð.00022 · до 28.11.2026', 179 href:'/documents/certificates/kale/kale-interior-latch-locks-fsks-tr-os01-n00022.pdf' 180 }] 181 }, 182 { 183 slug:'doc-only-geze-door-closers-certificate', 184 article:'', 185 name:'СеÑÑиÑÐ¸ÐºÐ°Ñ GEZE на двеÑнÑе доводÑиÐ
185ºÐ¸', 186 category:'document-only', 187 brand:'GEZE', 188 system:'ÐвеÑнÑе доводÑики', 189 systemLabel:'GEZE', 190 hardwareSection:'door-hardware', 191 certificates:[{ 192 title:'GEZE · ÑеÑÑиÑÐ¸ÐºÐ°Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð½Ð° двеÑнÑе доводÑики · до 17.03.2027', 193 href:'/documents/certificates/geze-door-closers-certificate-2024-2027.pdf' 194 }] 195 }, 196 { 197 slug:'doc-only-specdetal-stainless-handles-certificate', 198 article:'СÐÐ ', 199 name:'СеÑÑиÑÐ¸ÐºÐ°Ñ Â«Ð¡Ð¿ÐµÑдеÑалÑ» на ÑÑаÑионаÑнÑе двеÑнÑе ÑÑÑки из неÑжавеÑÑей ÑÑали', 200 category:'document-only', 201 brand:'СпеÑдеÑалÑ', 202 system:'СÑаÑионаÑнÑе двеÑнÑе ÑÑÑки', 203 systemLabel:'СпеÑдеÑалÑ', 204 hardwareSection:'door-handles', 205 certificates:[{ 206 title:'СпеÑдеÑÐ°Ð»Ñ Â· ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ð½Ð° ÑÑаÑионаÑнÑе двеÑнÑе ÑÑÑки СÐР· до 09.01.2028', 207 href:'/documents/certificates/specdetal-stainless-door-handles-certificate-2025-2028.pdf' 208 }] 209 }, 210 { 211 slug:'doc-only-dormakaba-refusal-letter', 212 article:'', 213 name:'ÐÑказное пиÑÑмо dormakaba на замки, ÑилиндÑÑ, ÑÑÑки и анÑипаникÑ', 214 category:'document-only', 215 brand:'dormakaba', 216 system:'Ðамки, ÑилиндÑÑ, ÑÑÑки и анÑипаника', 217 systemLabel:'dormakaba', 218 hardwareSection:'door-hardware', 219 certificates:[{ 220 title:'dormakaba · оÑказное пиÑÑмо на замки, ÑилиндÑÑ, двеÑнÑе ÑÑÑки и ÑÑÑÑойÑÑва «анÑипаника» · 2017', 221 href:'/documents/certificates/dormakaba-locks-cylinders-handles-antipanic-refusal-letter-2017.pdf' 222 }] 223 }, 224 { 225 slug:'doc-only-dorma-fire-closers-certificate', 226 article:'DORMA TS 68', 227 name:'ÐÑÑ Ð¸Ð²Ð½Ñй пÑоÑивопожаÑнÑй ÑеÑÑиÑÐ¸ÐºÐ°Ñ DORMA на двеÑнÑе доводÑики', 228 category:'document-only', 229 brand:'Dorma', 230 system:'ÐвеÑнÑе доводÑики', 231 systemLabel:'DORMA', 232 hardwareSection:'door-hardware', 233 certificates:[{ 234 title:'DORMA · пÑоÑивопожаÑнÑй ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ð½Ð° двеÑнÑе доводÑики · аÑÑ Ð¸Ð²Ð½Ñй, ÑÑок дейÑÑÐ²Ð¸Ñ Ð´Ð¾ 14.12.2025', 235 href:'/documents/certificates/dormakaba-door-closers-fire-certificate-2020-2025.pdf' 236 }] 237 }, 238 { 239 slug:'doc-only-dormakaba-floor-closers-certificate', 240 article:'BTS 60 / BTS 65 / BTS 75 V / BTS 80 / BTS 84 / RTS 85', 241 name:'СеÑÑиÑÐ¸ÐºÐ°Ñ dormakaba на наполÑнÑе доводÑики', 242 category:'document-only', 243 brand:'dormakaba', 244 system:'ÐаполÑнÑе доводÑики', 245 systemLabel:'dormakaba', 246 hardwareSection:'door-hardware', 247 certificates:[{ 248 title:'dormakaba · ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ð½Ð° наполÑнÑе доводÑики и акÑеÑÑÑаÑÑ Â· до 08.10.2028', 249 href:'/documents/certificates/dormakaba-floor-closers-certificate-2025-2028.pdf' 250 }] 251 }, 252 { 253 slug:'doc-only-fasteners-certificate', 254 article:'', 255 name:'СеÑÑиÑÐ¸ÐºÐ°Ñ Ð½Ð° кÑепÑжнÑе Ð¸Ð·Ð´ÐµÐ»Ð¸Ñ Ð¸ меÑизÑ', 256 category:'document-only', 257 brand:'СÐÐЦÐÐ ÐÐÐÐ', 258 system:'ÐÑепÑжнÑе изделиÑ', 259 systemLabel:'ÐеÑизÑ', 260 hardwareSection:'hardware', 261 certificates:[{ 262 title:'СеÑÑиÑÐ¸ÐºÐ°Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð ÐСС RU.ÐÐ10.Ð05881 на кÑепÑжнÑе Ð¸Ð·Ð´ÐµÐ»Ð¸Ñ Ð¸ меÑÐ¸Ð·Ñ Â· до 27.07.2028', 263 href:'/documents/certificates/fasteners-speckrepezh-certificate-2025-2028.pdf' 264 }] 265 } 266 ]; 267 268 for (const item of docs) { 269 item[marker] = true; 270 products.push(item); 271 } 272 273 // documents-center.js builds its own immutable index synchronously on load. 274 // Remove temporary records and restore the actual product-card certificates 275 // immediately afterwards so the catalog stays limited to real products. 276 setTimeout(() => { 277 for (let i = products.length - 1; i >= 0; i -= 1) { 278 if (products[i]?.[marker]) products.splice(i, 1); 279 } 280 for (const [product, certificates] of savedSealCertificates) { 281 product.certificates = certificates; 282 } 283 }, 0); 284 285 // Give "УплоÑниÑели" its own visible certificate section. The immutable 286 // documents-center index still uses its existing generic grouping internally; 287 // this presentation layer exposes seals as a first-class section and keeps 288 // them out of the TATPROF branch. 289 const main = document.getElementById('main'); 290 const sealBrand = 'ÑплоÑниÑели'; 291 const sealHref = `#documents?type=certificates&group=hardware&brand=${encodeURIComponent(sealBrand)}`; 292 293 function enhanceCertificateNavigation() { 294 const currentRoute = window.SK_STOREFRONT_ROUTE ? '#'+window.SK_STOREFRONT_ROUTE.current() : location.hash; 295 if (!main || !currentRoute.startsWith('#documents')) return; 296 const params = new URLSearchParams(currentRoute.split('?')[1] || ''); 297 if (params.get('type') !== 'certificates') return; 298 299 const group = params.get('group') || ''; 300 const brand = params.get('brand') || ''; 301 302 if (!group && !brand) { 303 const groups = main.querySelector('.dc-groups'); 304 if (groups && !groups.querySelector('[data-seal-certificates]')) { 305 const card = document.createElement('a'); 306 card.className = 'dc-group'; 307 card.href = sealHref; 308 card.setAttribute('data-dc-route', ''); 309 card.setAttribute('data-seal-certificates', ''); 310 card.innerHTML = '<div class="dc-group-icon"><i data-lucide="badge-check" aria-hidden="true"></i></div><div><h3>УплоÑниÑели</h3><p>СеÑÑиÑикаÑÑ Ð¸ пÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¸ÑпÑÑаний на ÑплоÑниÑели ТÐÐ (TPE) и EPDM</p></div><span>2</span><i data-lucide="chevron-right" aria-hidden="true"></i>'; 311 groups.insertBefore(card, groups.children[1] || null); 312 window.lucide?.createIcons({attrs:{width:20,height:20,'stroke-width':1.7}}); 313 } 314 } 315
316 // Do not duplicate the dedicated seals section inside the generic 317 // "ФÑÑниÑÑÑа и комплекÑÑÑÑие" manufacturer selector. 318 if (group === 'hardware' && !brand) { 319 for (const link of main.querySelectorAll('.dc-group[href]')) { 320 try { 321 const url = new URL(link.href, location.href); 322 if ((url.hash || '').includes(`brand=${encodeURIComponent(sealBrand)}`)) link.remove(); 323 } catch (_) {} 324 } 325 } 326 327 if (brand === sealBrand) { 328 const crumbs = main.querySelector('.dc-breadcrumbs'); 329 if (crumbs) { 330 crumbs.innerHTML = '<a data-dc-route href="#documents">ÐÑе докÑменÑÑ</a><b>/</b><a data-dc-route href="#documents?type=certificates">СеÑÑиÑикаÑÑ</a><b>/</b><span aria-current="page">УплоÑниÑели</span>'; 331 } 332 } 333 } 334 335 if (main && 'MutationObserver' in window) { 336 const observer = new MutationObserver(enhanceCertificateNavigation); 337 observer.observe(main, {childList:true, subtree:true}); 338 addEventListener('pagehide', () => observer.disconnect(), {once:true}); 339 } 340 addEventListener('hashchange', () => setTimeout(enhanceCertificateNavigation, 0)); 341 addEventListener('popstate', () => setTimeout(enhanceCertificateNavigation, 0)); 342 setTimeout(enhanceCertificateNavigation, 0); 343})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.