{"id":3237,"date":"2025-07-19T11:42:27","date_gmt":"2025-07-19T15:42:27","guid":{"rendered":"https:\/\/optical.mfp-host-2.ca\/vendors\/"},"modified":"2026-04-07T16:42:29","modified_gmt":"2026-04-07T20:42:29","slug":"retailer-list","status":"publish","type":"page","link":"https:\/\/mfp-host-2.ca\/dev\/retailer-list\/","title":{"rendered":"Retailer List"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3237\" class=\"elementor elementor-3237\">\n\t\t\t\t<div class=\"elementor-element elementor-element-454ac0e e-con-full e-flex cmsmasters-block-default e-con e-parent\" data-id=\"454ac0e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-a940000 e-con-full e-flex cmsmasters-block-default e-con e-child\" data-id=\"a940000\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b20f12b cmsmasters-block-default cmsmasters-sticky-default elementor-widget elementor-widget-heading\" data-id=\"b20f12b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Archives<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0f75e13 e-flex e-con-boxed cmsmasters-block-default e-con e-parent\" data-id=\"0f75e13\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-559ec94 cmsmasters-block-default cmsmasters-sticky-default elementor-widget elementor-widget-text-editor\" data-id=\"559ec94\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>These retailers can fulfill your order for prescription glasses, sunglasses or contact lenses. We\u2019ll match you with the nearest retailer that carries the brand you\u2019ve chosen.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3b2f286 cmsmasters-block-default cmsmasters-sticky-default elementor-widget elementor-widget-shortcode\" data-id=\"3b2f286\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"tk-retailer-controls\" style=\"display:flex; gap:20px; margin-bottom:1rem;\">\n        <div>\n            <label><strong>Filter by Brand:<\/strong><\/label><br>\n            <select id=\"tk-brand-filter\">\n                <option value=\"\">All Brands<\/option>\n                                    <option value=\"Alcon\">\n                        Alcon                    <\/option>\n                                    <option value=\"Etnia Barcelona\">\n                        Etnia Barcelona                    <\/option>\n                                    <option value=\"Lafont\">\n                        Lafont                    <\/option>\n                                    <option value=\"Silhouette\">\n                        Silhouette                    <\/option>\n                            <\/select>\n        <\/div>\n\n        <div>\n            <label><strong>Search Retailers:<\/strong><\/label><br>\n            <input type=\"text\" id=\"tk-search\" placeholder=\"Search by name, city, brand...\">\n        <\/div>\n    <\/div>\n\n    <table class=\"tk-retailer-table\" id=\"tk-retailer-table\">\n        <thead>\n            <tr>\n                <th data-sort=\"company\">Company \u25b2\u25bc<\/th>\n                <th data-sort=\"city\">City \u25b2\u25bc<\/th>\n                <th data-sort=\"brands\">Brands \u25b2\u25bc<\/th>\n            <\/tr>\n        <\/thead>\n        <tbody>\n                            <tr \n                    data-company=\"beaverton optical\"\n                    data-city=\"beaverton\"\n                    data-brands=\"silhouette,alcon\"\n                >\n                    <td>Beaverton Optical<\/td>\n                    <td>Beaverton<\/td>\n                    <td>Silhouette, Alcon<\/td>\n                <\/tr>\n                            <tr \n                    data-company=\"spectacle vendor\"\n                    data-city=\"toronto\"\n                    data-brands=\"lafont,silhouette,etnia barcelona,alcon\"\n                >\n                    <td>Spectacle Vendor<\/td>\n                    <td>Toronto<\/td>\n                    <td>Lafont, Silhouette, Etnia Barcelona, Alcon<\/td>\n                <\/tr>\n                            <tr \n                    data-company=\"toronto optical\"\n                    data-city=\"toronto\"\n                    data-brands=\"lafont,alcon\"\n                >\n                    <td>Toronto Optical<\/td>\n                    <td>Toronto<\/td>\n                    <td>Lafont, Alcon<\/td>\n                <\/tr>\n                    <\/tbody>\n    <\/table>\n\n    <script>\n    document.addEventListener('DOMContentLoaded', function() {\n\n        const table = document.getElementById('tk-retailer-table');\n        const rows = Array.from(table.querySelectorAll('tbody tr'));\n        const brandFilter = document.getElementById('tk-brand-filter');\n        const searchInput = document.getElementById('tk-search');\n\n        \/\/ -------------------------\n        \/\/ LIVE SEARCH + BRAND FILTER\n        \/\/ -------------------------\n        function applyFilters() {\n            const brand = brandFilter.value.toLowerCase();\n            const search = searchInput.value.toLowerCase();\n\n            rows.forEach(row => {\n                const company = row.dataset.company;\n                const city = row.dataset.city;\n                const brands = row.dataset.brands;\n\n                const matchesBrand = !brand || brands.includes(brand);\n                const matchesSearch =\n                    company.includes(search) ||\n                    city.includes(search) ||\n                    brands.includes(search);\n\n                row.style.display = (matchesBrand && matchesSearch) ? '' : 'none';\n            });\n        }\n\n        brandFilter.addEventListener('change', applyFilters);\n        searchInput.addEventListener('input', applyFilters);\n\n        \/\/ -------------------------\n        \/\/ COLUMN SORTING\n        \/\/ -------------------------\n        let sortDirection = 1; \/\/ 1 = ASC, -1 = DESC\n\n        table.querySelectorAll('th[data-sort]').forEach(th => {\n            th.addEventListener('click', () => {\n                const key = th.dataset.sort;\n\n                rows.sort((a, b) => {\n                    const valA = a.dataset[key];\n                    const valB = b.dataset[key];\n                    return valA.localeCompare(valB) * sortDirection;\n                });\n\n                sortDirection *= -1; \/\/ toggle ASC\/DESC\n\n                const tbody = table.querySelector('tbody');\n                rows.forEach(row => tbody.appendChild(row));\n            });\n        });\n\n    });\n    <\/script>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>These retailers can fulfill your order for prescription glasses, sunglasses or contact lenses. We\u2019ll match you with the nearest retailer that carries the brand you\u2019ve chosen.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-3237","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/mfp-host-2.ca\/dev\/wp-json\/wp\/v2\/pages\/3237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mfp-host-2.ca\/dev\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mfp-host-2.ca\/dev\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mfp-host-2.ca\/dev\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mfp-host-2.ca\/dev\/wp-json\/wp\/v2\/comments?post=3237"}],"version-history":[{"count":51,"href":"https:\/\/mfp-host-2.ca\/dev\/wp-json\/wp\/v2\/pages\/3237\/revisions"}],"predecessor-version":[{"id":44247,"href":"https:\/\/mfp-host-2.ca\/dev\/wp-json\/wp\/v2\/pages\/3237\/revisions\/44247"}],"wp:attachment":[{"href":"https:\/\/mfp-host-2.ca\/dev\/wp-json\/wp\/v2\/media?parent=3237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}