{"id":15148,"date":"2025-09-03T12:40:37","date_gmt":"2025-09-03T10:40:37","guid":{"rendered":"https:\/\/bxswiss-website-test.bxs-dev.ch\/?page_id=15148"},"modified":"2026-04-30T09:54:30","modified_gmt":"2026-04-30T07:54:30","slug":"marktdaten-sprachwechsel","status":"publish","type":"page","link":"https:\/\/bxswiss-website-test.bxs-dev.ch\/en\/marktdaten-sprachwechsel\/","title":{"rendered":"Marktdaten Sprachwechsel"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;--awb-flex-wrap-medium:wrap;--awb-flex-wrap-small:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1320px + 30px );margin-left: calc(-30px \/ 2 );margin-right: calc(-30px \/ 2 );\"><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;--awb-flex-wrap-medium:wrap;--awb-flex-wrap-small:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1320px + 30px );margin-left: calc(-30px \/ 2 );margin-right: calc(-30px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-color:#ffffff;--awb-bg-color-hover:#ffffff;--awb-bg-size:cover;--awb-border-color:var(--awb-custom_color_4);--awb-border-style:solid;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:15px;--awb-margin-bottom-large:20px;--awb-spacing-left-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:15px;--awb-spacing-left-medium:15px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:15px;--awb-spacing-left-small:15px;\" data-scroll-devices=\"small-visibility,medium-visibility,large-visibility\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><header>\n    <h1 id=\"pageTitle\"><\/h1>\n    <div id=\"subTitle\"><\/div>\n<\/header>\n\n<div>\n    <input type=\"text\" id=\"globalSearch\" placeholder=\"Search\" style=\"width: 100%; height: 30px; padding: 2px;\">\n<\/div>\n\n<nav id=\"menu\"><\/nav>\n\n<main>\n    <div id=\"resultsContainer\" style=\"overflow-x: hidden; overflow-wrap: break-word;\"><\/div>\n    <div id=\"searchResults\" style=\"overflow-x: hidden; overflow-wrap: break-word;\"><\/div>\n<\/main>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/papaparse@5.4.1\/papaparse.min.js\"><\/script>\n\n<script type=\"text\/javascript\">\n\/* ============================================================================\n   Globale Variablen\n   ============================================================================ *\/\n\nlet allData = [];\nlet currentLanguage = \"de\";\nlet currentSort = { column: \"ShortName\", asc: true };\nlet currentPage = 1;\nlet currentTableData = [];\n\nconst rowsPerPage = 100;\nconst ISIN_COLUMN = \"ISIN \";\nconst ALLOWED_LANGUAGES = [\"de\", \"en\", \"fr\", \"it\"];\n\n\/* ============================================================================\n   Konfiguration\n   ============================================================================ *\/\n\nconst csvPath = \"https:\/\/bxswiss-website-test.bxs-dev.ch\/wp-content\/uploads\/csvdata\/full_universe.csv\";\n\nconst visibleColumns = [\n    \"ShortName\",\n    \"ISIN\",\n    \"TradingCurrency\",\n    \"Symbol\",\n    \"IssuerName\"\n];\n\nconst columnMapping = {\n    ISIN: { de: \"ISIN\", en: \"ISIN\", it: \"ISIN\", fr: \"ISIN\" },\n    ShortName: { de: \"Kurzname\", en: \"Short Name\", it: \"Nome breve\", fr: \"Nom court\" },\n    TradingCurrency: { de: \"Handelsw\u00e4hrung\", en: \"Trading Currency\", it: \"Valuta di negoziazione\", fr: \"Devise de n\u00e9gociation\" },\n    Symbol: { de: \"Symbol\", en: \"Symbol\", it: \"Simbolo\", fr: \"Symbole\" },\n    IssuerName: { de: \"Emittent\", en: \"Issuer\", it: \"Emittente\", fr: \"\u00c9metteur\" }\n};\n\nconst segmentMapping = {\n    \"BXSC\": { de:\"01 SME Main Market\", en:\"01 SME Main Market\", it:\"01 SME Main Market\", fr:\"01 SME Main Market\" },\n    \"BXWC\": { de:\"02 Sponsored Shares\", en:\"02 Sponsored Shares\", it:\"02 Sponsored Shares\", fr:\"02 Sponsored Shares\" },\n    \"BXSF\": { de:\"03 Listed ETFs\", en:\"03 Listed ETFs\", it:\"03 Listed ETFs\", fr:\"03 Listed ETFs\" },\n    \"BXWF\": { de:\"04 Sponsored ETFs\", en:\"04 Sponsored ETFs\", it:\"04 Sponsored ETFs\", fr:\"04 Sponsored ETFs\" },\n    \"BXEP\": { de:\"05 Listed ETPs\", en:\"05 Listed ETPs\", it:\"05 Listed ETPs\", fr:\"05 Listed ETPs\" },\n    \"BXWP\": { de:\"06 Sponsored ETPs\", en:\"06 Sponsored ETPs\", it:\"06 Sponsored ETPs\", fr:\"06 Sponsored ETPs\" },\n    \"BXAC\": { de:\"07 Listed AMCs\", en:\"07 Listed AMCs\", it:\"07 Listed AMCs\", fr:\"07 Listed AMCs\" },\n    \"BXSP\": { de:\"08 deriBX (Structured Products)\", en:\"08 deriBX (Structured Products)\", it:\"08 deriBX (Structured Products)\", fr:\"08 deriBX (Structured Products)\" },\n    \"BXSB\": { de:\"09 Listed Bonds\", en:\"09 Listed Bonds\", it:\"09 Listed Bonds\", fr:\"09 Listed Bonds\" },\n    \"BXWB\": { de:\"10 Sponsored Bonds\", en:\"10 Sponsored Bonds\", it:\"10 Sponsored Bonds\", fr:\"10 Sponsored Bonds\" },\n    \"BXSI\": { de:\"11 Listed Funds\", en:\"11 Listed Funds\", it:\"11 Listed Funds\", fr:\"11 Listed Funds\" },\n    \"BXWI\": { de:\"12 Sponsored Funds\", en:\"12 Sponsored Funds\", it:\"12 Sponsored Funds\", fr:\"12 Sponsored Funds\" },\n    \"BXQF\": { de:\"13 Sponsored Qualified Investor Funds (QIF-KKA)\", en:\"13 Sponsored Qualified Investor Funds (QIF-KKA)\", it:\"13 Sponsored Qualified Investor Funds (QIF-KKA)\", fr:\"13 Sponsored Qualified Investor Funds (QIF-KKA)\" }\n};\n\nconst translations = {\n    de: {\n        title: \"BX Swiss Markt\u00fcbersicht\",\n        subtitle: `\n            <p>Finden Sie passende Aktien in diesen 3 Kategorien<\/p>\n            <ul>\n                <li><b>Aktien in Heimatw\u00e4hrung:<\/b> Ausgew\u00e4hlte Aktien, die in ihrer Heimatw\u00e4hrung handelbar sind<\/li>\n                <li><b>SME Main Markt:<\/b> Aktien von an der BX Swiss kotierten Unternehmen<\/li>\n                <li><b>Sponsored Shares:<\/b> Schweizer und Internationale Aktien<\/li>\n            <\/ul>\n        `,\n        searchPlaceholder: \"Suche...\",\n        tableSearch: \"In Ergebnissen suchen...\",\n        noResults: \"Keine Ergebnisse gefunden\",\n        multiISIN: \"Aktien in Heimatw\u00e4hrung\",\n        allRecords: \"Alle Instrumente\"\n    },\n    en: {\n        title: \"BX Swiss Market Overview\",\n        subtitle: `\n            <p>Find suitable stocks in these 3 categories<\/p>\n            <ul>\n                <li><b>Shares in home currency:<\/b> Selected shares that are tradeable in their home currency<\/li>\n                <li><b>SME Main Market:<\/b> Stocks of companies listed on BX Swiss<\/li>\n                <li><b>Sponsored Shares:<\/b> Swiss and international stocks<\/li>\n            <\/ul>\n        `,\n        searchPlaceholder: \"Search...\",\n        tableSearch: \"Search in results...\",\n        noResults: \"No results found\",\n        multiISIN: \"Shares in home currency\",\n        allRecords: \"All instruments\"\n    },\n    it: {\n        title: \"Panoramica del mercato BX Swiss\",\n        subtitle: `\n            <p>Trova i titoli adatti in queste 3 categorie<\/p>\n            <ul>\n                <li><b>Azioni nella valuta di origine:<\/b> Azioni selezionate negoziabili nella loro valuta di origine<\/li>\n                <li><b>SME Main Market:<\/b> Azioni di societ\u00e0 quotate su BX Swiss<\/li>\n                <li><b>Sponsored Shares:<\/b> Azioni svizzere e internazionali<\/li>\n            <\/ul>\n        `,\n        searchPlaceholder: \"Cerca...\",\n        tableSearch: \"Cerca nei risultati...\",\n        noResults: \"Nessun risultato trovato\",\n        multiISIN: \"Azioni nella valuta di origine\",\n        allRecords: \"Tutti gli strumenti\"\n    },\n    fr: {\n        title: \"Aper\u00e7u du march\u00e9 BX Swiss\",\n        subtitle: `\n            <p>Trouvez les actions appropri\u00e9es dans ces 3 cat\u00e9gories<\/p>\n            <ul>\n                <li><b>Actions dans la devise d\u2019origine :<\/b> Actions s\u00e9lectionn\u00e9es n\u00e9gociables dans leur devise d\u2019origine<\/li>\n                <li><b>SME Main Market :<\/b> Actions de soci\u00e9t\u00e9s cot\u00e9es \u00e0 la BX Swiss<\/li>\n                <li><b>Sponsored Shares :<\/b> Actions suisses et internationales<\/li>\n            <\/ul>\n        `,\n        searchPlaceholder: \"Rechercher...\",\n        tableSearch: \"Rechercher dans les r\u00e9sultats...\",\n        noResults: \"Aucun r\u00e9sultat trouv\u00e9\",\n        multiISIN: \"Actions dans la devise d\u2019origine\",\n        allRecords: \"Tous les instruments\"\n    }\n};\n\n\/* ============================================================================\n   Hilfsfunktionen\n   ============================================================================ *\/\n\nfunction getCookieValue(name) {\n    const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n\n    for (const cookie of cookies) {\n        const parts = cookie.split(\"=\");\n        const cookieName = decodeURIComponent(parts.shift());\n        const cookieValue = parts.join(\"=\");\n\n        if (cookieName === name) {\n            return decodeURIComponent(cookieValue);\n        }\n    }\n\n    return null;\n}\n\nfunction getLanguageFromCookie() {\n    const lang = (getCookieValue(\"wp-wpml_current_language\") || \"\").toLowerCase();\n    return ALLOWED_LANGUAGES.includes(lang) ? lang : \"de\";\n}\n\nfunction getRowValue(row, col) {\n    return col === \"ISIN\" ? (row[ISIN_COLUMN] || \"\") : (row[col] || \"\");\n}\n\nfunction getInstrumentLocale(lang) {\n    const localeMap = {\n        de: \"de-CH\",\n        en: \"en-EN\",\n        it: \"it-IT\",\n        fr: \"fr-FR\"\n    };\n\n    return localeMap[lang] || \"de-CH\";\n}\n\nfunction getInstrumentDetailUrl(lang, isin, tradingCurrency) {\n    const locale = getInstrumentLocale(lang);\n    return `https:\/\/bxswiss-website-test.bxs-dev.ch\/instrument-details?locale=${locale}&instrumentid=${isin}-${tradingCurrency}`;\n}\n\nfunction sortData(data, column, asc) {\n    const sortCol = column === \"ISIN\" ? ISIN_COLUMN : column;\n\n    data.sort((a, b) => {\n        const valA = (a[sortCol] || \"\").toString();\n        const valB = (b[sortCol] || \"\").toString();\n        return asc ? valA.localeCompare(valB) : valB.localeCompare(valA);\n    });\n}\n\nfunction resetDefaultSort() {\n    currentSort = { column: \"ShortName\", asc: true };\n}\n\nfunction resetSearchFields() {\n    const globalSearch = document.getElementById(\"globalSearch\");\n    if (globalSearch) {\n        globalSearch.value = \"\";\n    }\n\n    document.querySelectorAll(\".table-search\").forEach(input => {\n        input.value = \"\";\n    });\n}\n\nfunction setActiveMenuButton(clickedButton) {\n    document.querySelectorAll(\"#menu button\").forEach(btn => btn.classList.remove(\"active\"));\n    clickedButton.classList.add(\"active\");\n}\n\nfunction updateStaticTexts() {\n    document.getElementById(\"pageTitle\").textContent = translations[currentLanguage].title;\n    document.getElementById(\"subTitle\").innerHTML = translations[currentLanguage].subtitle;\n    document.getElementById(\"globalSearch\").placeholder = translations[currentLanguage].searchPlaceholder;\n}\n\nfunction getSegmentLabel(segment) {\n    return segmentMapping[segment]?.[currentLanguage] || segment;\n}\n\nfunction getMenuLabel(segment) {\n    const label = getSegmentLabel(segment);\n    return label.length > 3 ? label.substring(3) : label;\n}\n\nfunction getMultiCurrencyData(data) {\n    const isinCounts = {};\n\n    data.forEach(row => {\n        const isin = (row[ISIN_COLUMN] || \"\").trim().toUpperCase();\n        if (!isin) return;\n        isinCounts[isin] = (isinCounts[isin] || 0) + 1;\n    });\n\n    return data.filter(row => {\n        const isin = (row[ISIN_COLUMN] || \"\").trim().toUpperCase();\n        const currency = (row.TradingCurrency || \"\").trim().toUpperCase();\n        return isinCounts[isin] > 1 && currency !== \"CHF\";\n    });\n}\n\nfunction isMaskedIsin(isin) {\n    const prefix = (isin || \"\").substring(0, 2);\n    return [\"US\", \"CA\", \"KY\", \"BM\", \"AN\"].includes(prefix);\n}\n\n\/* ============================================================================\n   CSV laden\n   ============================================================================ *\/\n\nasync function loadCSV() {\n    const response = await fetch(csvPath);\n    const text = await response.text();\n    return Papa.parse(text, { header: true, skipEmptyLines: true }).data;\n}\n\n\/* ============================================================================\n   Men\u00fc\n   ============================================================================ *\/\n\nfunction buildMenu(data) {\n    const menu = document.getElementById(\"menu\");\n    menu.innerHTML = \"\";\n\n    const counts = {};\n    data.forEach(row => {\n        const seg = row.SegmentID;\n        if (!seg) return;\n        counts[seg] = (counts[seg] || 0) + 1;\n    });\n\n    const allButton = document.createElement(\"button\");\n    allButton.textContent = `(${data.length}) ${translations[currentLanguage].allRecords}`;\n    allButton.addEventListener(\"click\", () => {\n        currentTableData = data;\n        currentPage = 1;\n        resetDefaultSort();\n        resetSearchFields();\n        setActiveMenuButton(allButton);\n        renderTable(currentTableData, \"resultsContainer\");\n    });\n    menu.appendChild(allButton);\n\n    const multiCurrencyData = getMultiCurrencyData(data);\n    const multiButton = document.createElement(\"button\");\n    multiButton.textContent = `(${multiCurrencyData.length}) ${translations[currentLanguage].multiISIN}`;\n    multiButton.addEventListener(\"click\", () => {\n        currentTableData = multiCurrencyData;\n        currentPage = 1;\n        resetDefaultSort();\n        resetSearchFields();\n        setActiveMenuButton(multiButton);\n        renderTable(currentTableData, \"resultsContainer\");\n    });\n    menu.appendChild(multiButton);\n\n    const segments = Object.keys(counts).sort((a, b) => {\n        const labelA = getSegmentLabel(a).toLowerCase();\n        const labelB = getSegmentLabel(b).toLowerCase();\n        return labelA.localeCompare(labelB);\n    });\n\n    segments.forEach(segment => {\n        const button = document.createElement(\"button\");\n        button.textContent = `(${counts[segment]}) ${getMenuLabel(segment)}`;\n\n        button.addEventListener(\"click\", () => {\n            currentTableData = data.filter(row => row.SegmentID === segment);\n            currentPage = 1;\n            resetDefaultSort();\n            resetSearchFields();\n            setActiveMenuButton(button);\n            renderTable(currentTableData, \"resultsContainer\");\n        });\n\n        menu.appendChild(button);\n    });\n}\n\n\/* ============================================================================\n   Tabelle\n   ============================================================================ *\/\n\nfunction renderTable(data, containerId) {\n    const container = document.getElementById(containerId);\n    container.innerHTML = \"\";\n\n    if (!data.length) {\n        container.textContent = translations[currentLanguage].noResults;\n        return;\n    }\n\n    const tableSearch = document.createElement(\"input\");\n    tableSearch.type = \"text\";\n    tableSearch.className = \"table-search\";\n    tableSearch.placeholder = translations[currentLanguage].tableSearch;\n    tableSearch.style = \"width: 100%; height: 30px; padding: 2px;\";\n    container.appendChild(tableSearch);\n\n    const table = document.createElement(\"table\");\n    table.className = \"results-table\";\n    table.style = \"table-layout: fixed; width: 100%;\";\n    container.appendChild(table);\n\n    const paginationContainer = document.createElement(\"div\");\n    paginationContainer.className = \"pagination\";\n    paginationContainer.style = \"overflow: hidden;\";\n    container.appendChild(paginationContainer);\n\n    const isinGroups = {};\n    data.forEach(row => {\n        const isin = row[ISIN_COLUMN] || \"\";\n        if (!isinGroups[isin]) isinGroups[isin] = new Set();\n        isinGroups[isin].add(row.TradingCurrency || \"\");\n    });\n\n    let filteredData = [...data];\n    sortData(filteredData, currentSort.column, currentSort.asc);\n\n    tableSearch.addEventListener(\"input\", () => {\n        const query = tableSearch.value.toLowerCase();\n\n        filteredData = data.filter(row =>\n            visibleColumns.some(col =>\n                getRowValue(row, col).toString().toLowerCase().includes(query)\n            )\n        );\n\n        currentPage = 1;\n        sortData(filteredData, currentSort.column, currentSort.asc);\n        renderPage();\n    });\n\n    function createPageButton(page, label = page, disabled = false) {\n        const btn = document.createElement(\"button\");\n        btn.textContent = label;\n\n        if (disabled) {\n            btn.disabled = true;\n            btn.classList.add(\"disabled\");\n            paginationContainer.appendChild(btn);\n            return;\n        }\n\n        if (page === currentPage && typeof label === \"number\") {\n            btn.classList.add(\"active\");\n        }\n\n        btn.addEventListener(\"click\", () => {\n            currentPage = page;\n            renderPage();\n        });\n\n        paginationContainer.appendChild(btn);\n    }\n\n    function createDots() {\n        const span = document.createElement(\"span\");\n        span.textContent = \" \u2026 \";\n        span.style.padding = \"0 6px\";\n        paginationContainer.appendChild(span);\n    }\n\n    function renderPagination() {\n        paginationContainer.innerHTML = \"\";\n        const totalPages = Math.ceil(filteredData.length \/ rowsPerPage);\n\n        if (totalPages < 10) {\n            for (let i = 1; i <= totalPages; i++) {\n                createPageButton(i);\n            }\n            return;\n        }\n\n        const range = 2;\n\n        createPageButton(1, \"\u23ee\", currentPage === 1);\n        createPageButton(Math.max(1, currentPage - 1), \"\u2039\", currentPage === 1);\n\n        if (currentPage > range + 2) {\n            createDots();\n        }\n\n        const startPage = Math.max(1, currentPage - range);\n        const endPage = Math.min(totalPages, currentPage + range);\n\n        for (let i = startPage; i <= endPage; i++) {\n            createPageButton(i);\n        }\n\n        if (currentPage < totalPages - (range + 1)) {\n            createDots();\n        }\n\n        createPageButton(Math.min(totalPages, currentPage + 1), \"\u203a\", currentPage === totalPages);\n        createPageButton(totalPages, \"\u23ed\", currentPage === totalPages);\n    }\n\n    function renderPage() {\n        table.innerHTML = \"\";\n\n        const thead = document.createElement(\"thead\");\n        const headerRow = document.createElement(\"tr\");\n        headerRow.style = \"height: auto;\";\n\n        visibleColumns.forEach(col => {\n            const th = document.createElement(\"th\");\n            th.style = \"max-width: 30%; cursor: pointer; word-break: break-word; overflow-wrap: break-word; overflow: hidden;\";\n            th.textContent = columnMapping[col]?.[currentLanguage] || col;\n\n            const sortIcon = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"svg\");\n            sortIcon.setAttribute(\"width\", \"10\");\n            sortIcon.setAttribute(\"height\", \"10\");\n            sortIcon.setAttribute(\"viewBox\", \"0 0 10 10\");\n\n            const path = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"path\");\n            path.setAttribute(\n                \"d\",\n                currentSort.column === col && !currentSort.asc\n                    ? \"M0 7 L5 2 L10 7 Z\"\n                    : \"M0 3 L5 8 L10 3 Z\"\n            );\n            sortIcon.appendChild(path);\n            sortIcon.style.marginLeft = \"5px\";\n            th.appendChild(sortIcon);\n\n            th.addEventListener(\"click\", () => {\n                if (currentSort.column === col) {\n                    currentSort.asc = !currentSort.asc;\n                } else {\n                    currentSort.column = col;\n                    currentSort.asc = true;\n                }\n\n                sortData(filteredData, currentSort.column, currentSort.asc);\n                currentPage = 1;\n                renderPage();\n            });\n\n            headerRow.appendChild(th);\n        });\n\n        thead.appendChild(headerRow);\n        table.appendChild(thead);\n\n        const tbody = document.createElement(\"tbody\");\n        const start = (currentPage - 1) * rowsPerPage;\n        const end = start + rowsPerPage;\n        const pageData = filteredData.slice(start, end);\n\n        pageData.forEach(row => {\n            const tr = document.createElement(\"tr\");\n            const isin = row[ISIN_COLUMN] || \"\";\n            const tradingCurrency = row.TradingCurrency || \"\";\n            const currencyCount = isinGroups[isin] ? isinGroups[isin].size : 0;\n            const hasDifferentCurrencies = currencyCount > 1;\n\n            visibleColumns.forEach(col => {\n                const td = document.createElement(\"td\");\n                td.style = \"height: auto; max-width: 30%; word-break: break-word; overflow-wrap: break-word;\";\n\n                if (col === \"ShortName\") {\n                    const link = document.createElement(\"a\");\n                    link.href = getInstrumentDetailUrl(currentLanguage, isin, tradingCurrency);\n                    link.textContent = row.ShortName || \"\";\n                    link.target = \"_blank\";\n                    link.style = hasDifferentCurrencies\n                        ? \"overflow-wrap: break-all; word-break: break-word; word-wrap: break-all;\"\n                        : \"overflow-wrap: break-word; word-break: break-word;\";\n                    td.appendChild(link);\n                } else if (col === \"ISIN\") {\n                    td.textContent = isMaskedIsin(isin) ? \"-\" : isin;\n                } else {\n                    td.textContent = row[col] || \"\";\n                }\n\n                tr.appendChild(td);\n            });\n\n            tbody.appendChild(tr);\n        });\n\n        table.appendChild(tbody);\n        renderPagination();\n    }\n\n    renderPage();\n}\n\n\/* ============================================================================\n   Sprache anwenden\n   ============================================================================ *\/\n\nfunction applyLanguageFromCookie() {\n    currentLanguage = getLanguageFromCookie();\n    updateStaticTexts();\n    buildMenu(allData);\n\n    if (currentTableData.length > 0) {\n        renderTable(currentTableData, \"resultsContainer\");\n    }\n}\n\n\/* ============================================================================\n   Initialisierung\n   ============================================================================ *\/\n\ndocument.addEventListener(\"DOMContentLoaded\", async () => {\n    allData = await loadCSV();\n\n    currentLanguage = getLanguageFromCookie();\n    updateStaticTexts();\n    buildMenu(allData);\n\n    const firstMenuButton = document.querySelector(\"#menu button\");\n    if (firstMenuButton) {\n        firstMenuButton.classList.add(\"active\");\n    }\n\n    document.getElementById(\"globalSearch\").addEventListener(\"input\", e => {\n        const query = e.target.value.toLowerCase();\n\n        currentTableData = allData.filter(row =>\n            Object.values(row).some(val =>\n                (val || \"\").toString().toLowerCase().includes(query)\n            )\n        );\n\n        currentPage = 1;\n        renderTable(currentTableData, \"resultsContainer\");\n    });\n});\n<!-- wpml:html_fragment <\/script> --><\/div><\/div><\/div><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-15148","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/bxswiss-website-test.bxs-dev.ch\/en\/wp-json\/wp\/v2\/pages\/15148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bxswiss-website-test.bxs-dev.ch\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bxswiss-website-test.bxs-dev.ch\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bxswiss-website-test.bxs-dev.ch\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bxswiss-website-test.bxs-dev.ch\/en\/wp-json\/wp\/v2\/comments?post=15148"}],"version-history":[{"count":13,"href":"https:\/\/bxswiss-website-test.bxs-dev.ch\/en\/wp-json\/wp\/v2\/pages\/15148\/revisions"}],"predecessor-version":[{"id":15151,"href":"https:\/\/bxswiss-website-test.bxs-dev.ch\/en\/wp-json\/wp\/v2\/pages\/15148\/revisions\/15151"}],"wp:attachment":[{"href":"https:\/\/bxswiss-website-test.bxs-dev.ch\/en\/wp-json\/wp\/v2\/media?parent=15148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}