{"id":952,"date":"2026-04-13T08:59:24","date_gmt":"2026-04-13T08:59:24","guid":{"rendered":"http:\/\/localhost\/projects\/toners\/?page_id=952"},"modified":"2026-04-14T05:36:39","modified_gmt":"2026-04-14T05:36:39","slug":"brands","status":"publish","type":"page","link":"https:\/\/toners.tradecopiers.co.uk\/index.php\/brands\/","title":{"rendered":"Brands"},"content":{"rendered":"    <style>\n    .pb-wrap { font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; padding: 10px 0; }\n    .pb-nav { display: flex; align-items: center; gap: 8px; font-size: 13px; color: #888; margin-bottom: 1.5rem; flex-wrap: wrap; }\n    .pb-nav a { color: #0073aa; text-decoration: none; cursor: pointer; }\n    .pb-nav a:hover { text-decoration: underline; }\n    .pb-nav .sep { color: #ccc; }\n    .pb-heading { font-size: 20px; font-weight: 600; color: #111; margin-bottom: 4px; }\n    .pb-sub { font-size: 13px; color: #888; margin-bottom: 1.5rem; }\n\n    .pb-search-wrap { position: relative; margin-bottom: 1.5rem; }\n    .pb-search-input { width: 100%; box-sizing: border-box; padding: 10px 16px 10px 40px; font-size: 14px; border: 1px solid #e5e5e5; border-radius: 25px; outline: none; font-family: inherit; color: #111; background: #fff; transition: border-color 0.15s, box-shadow 0.15s; }\n    .pb-search-input:focus { border-color: #0073aa; box-shadow: 0 0 0 3px rgba(0,115,170,0.1); }\n    .pb-search-icon { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); color: #aaa; font-size: 15px; pointer-events: none; }\n    .pb-search-clear { position: absolute; right: 14px; top: 50%; transform: translateY(-50%); color: #aaa; font-size: 18px; cursor: pointer; display: none; background: none; border: none; padding: 0; line-height: 1; }\n    .pb-search-clear:hover { color: #555; }\n\n    .pb-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; }\n    .pb-card { background: #fff; border: 1px solid #e5e5e5; border-radius: 12px; padding: 1.1rem 1.25rem; display: flex; flex-direction: column; gap: 10px; transition: border-color 0.15s, box-shadow 0.15s; }\n    .pb-card:hover { border-color: #0073aa; box-shadow: 0 2px 10px rgba(0,115,170,0.08); }\n    .pb-card-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 600; }\n    .pb-card-name { font-size: 15px; font-weight: 600; color: #111; }\n    .pb-card-count { font-size: 12px; color: #888; }\n    .pb-card-type { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; padding: 2px 8px; border-radius: 10px; display: inline-block; }\n    .pb-type-brand   { background: #e8f4fb; color: #0073aa; }\n    .pb-type-printer { background: #fef4e8; color: #b35c00; }\n\n    .pb-btn-row { display: flex; gap: 8px; margin-top: 4px; flex-wrap: wrap; }\n    .pb-btn { display: inline-block; font-size: 12px; font-weight: 500; padding: 6px 14px; border-radius: 20px; text-decoration: none; border: 1px solid; white-space: nowrap; transition: background 0.15s; font-family: inherit; cursor: pointer; }\n    .pb-btn-primary { background: #0073aa; color: #fff !important; border-color: #0073aa; }\n    .pb-btn-primary:hover { background: #005f8d; border-color: #005f8d; }\n    .pb-btn-outline { background: #fff; color: #0073aa !important; border-color: #b3d9ed; }\n    .pb-btn-outline:hover { background: #e8f4fb; }\n\n    .pb-colors-0 { background: #e8f4fb; color: #0073aa; }\n    .pb-colors-1 { background: #e8f7ee; color: #1a7a3f; }\n    .pb-colors-2 { background: #fef4e8; color: #b35c00; }\n\n    .pb-skeleton-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; }\n    .pb-skeleton-card { background: #fff; border: 1px solid #e5e5e5; border-radius: 12px; padding: 1.1rem 1.25rem; display: flex; flex-direction: column; gap: 10px; }\n    .pb-shimmer { background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: pb-shimmer 1.2s infinite; border-radius: 6px; }\n    .pb-shimmer-icon { width: 40px; height: 40px; border-radius: 10px; }\n    .pb-shimmer-title { height: 16px; width: 70%; }\n    .pb-shimmer-count { height: 12px; width: 50%; }\n    .pb-shimmer-btn { height: 28px; width: 90px; border-radius: 20px; }\n    @keyframes pb-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }\n\n    .pb-empty { color: #999; font-size: 14px; padding: 2rem 0; }\n    .pb-error { color: #c00; font-size: 14px; padding: 2rem 0; }\n    .pb-no-results { display: none; color: #999; font-size: 14px; padding: 2rem 0; text-align: center; }\n    .pb-section-title { font-size: 13px; font-weight: 600; color: #888; text-transform: uppercase; letter-spacing: 0.5px; margin: 1.5rem 0 0.75rem; }\n    .pb-section-title:first-child { margin-top: 0; }\n\n    .pb-load-sentinel { height: 40px; display: flex; align-items: center; justify-content: center; margin-top: 10px; }\n    .pb-spinner { width: 24px; height: 24px; border: 3px solid #e5e5e5; border-top-color: #0073aa; border-radius: 50%; animation: pb-spin 0.7s linear infinite; display: none; }\n    .pb-load-sentinel.loading .pb-spinner { display: block; }\n    .pb-all-loaded { font-size: 13px; color: #ccc; text-align: center; margin-top: 10px; display: none; }\n    @keyframes pb-spin { to { transform: rotate(360deg); } }\n    <\/style>\n\n    <div class=\"pb-wrap\" id=\"pbWrap\">\n\n        <div class=\"pb-search-wrap\">\n            <input class=\"pb-search-input\" type=\"text\" id=\"pbSearch\" placeholder=\"Search brands or printers...\" autocomplete=\"off\">\n            <button class=\"pb-search-clear\" id=\"pbClear\" title=\"Clear\">&#215;<\/button>\n        <\/div>\n        <div class=\"pb-no-results\" id=\"pbNoResults\">No results found.<\/div>\n\n        <div id=\"pbSearchResults\" style=\"display:none;\"><\/div>\n\n        <div id=\"pbBrowse\">\n            <div id=\"pbSkeleton\">\n                <div style=\"height:28px;width:200px;margin-bottom:8px;\" class=\"pb-shimmer\"><\/div>\n                <div style=\"height:14px;width:150px;margin-bottom:1.5rem;\" class=\"pb-shimmer\"><\/div>\n                <div class=\"pb-skeleton-grid\">\n                                        <div class=\"pb-skeleton-card\">\n                        <div class=\"pb-shimmer pb-shimmer-icon\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-title\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-count\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-btn\"><\/div>\n                    <\/div>\n                                        <div class=\"pb-skeleton-card\">\n                        <div class=\"pb-shimmer pb-shimmer-icon\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-title\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-count\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-btn\"><\/div>\n                    <\/div>\n                                        <div class=\"pb-skeleton-card\">\n                        <div class=\"pb-shimmer pb-shimmer-icon\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-title\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-count\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-btn\"><\/div>\n                    <\/div>\n                                        <div class=\"pb-skeleton-card\">\n                        <div class=\"pb-shimmer pb-shimmer-icon\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-title\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-count\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-btn\"><\/div>\n                    <\/div>\n                                        <div class=\"pb-skeleton-card\">\n                        <div class=\"pb-shimmer pb-shimmer-icon\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-title\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-count\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-btn\"><\/div>\n                    <\/div>\n                                        <div class=\"pb-skeleton-card\">\n                        <div class=\"pb-shimmer pb-shimmer-icon\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-title\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-count\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-btn\"><\/div>\n                    <\/div>\n                                        <div class=\"pb-skeleton-card\">\n                        <div class=\"pb-shimmer pb-shimmer-icon\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-title\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-count\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-btn\"><\/div>\n                    <\/div>\n                                        <div class=\"pb-skeleton-card\">\n                        <div class=\"pb-shimmer pb-shimmer-icon\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-title\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-count\"><\/div>\n                        <div class=\"pb-shimmer pb-shimmer-btn\"><\/div>\n                    <\/div>\n                                    <\/div>\n            <\/div>\n            <div id=\"pbContent\" style=\"display:none;\"><\/div>\n        <\/div>\n\n    <\/div>\n\n    <script>\n    (function() {\n        var PAGE_URL = \"https:\\\/\\\/toners.tradecopiers.co.uk\\\/index.php\\\/brands\\\/\";\n        var AJAX_URL = \"https:\\\/\\\/toners.tradecopiers.co.uk\\\/wp-admin\\\/admin-ajax.php\";\n        var PER_PAGE = 12;\n\n        var allData      = null;\n        var currentView  = 'brands'; \/\/ brands | printers\n        var currentBrand = null;\n\n        var urlParams = new URLSearchParams(window.location.search);\n        var initBrand = parseInt(urlParams.get('brand')) || 0;\n\n        var skeleton    = document.getElementById('pbSkeleton');\n        var content     = document.getElementById('pbContent');\n        var searchInput = document.getElementById('pbSearch');\n        var clearBtn    = document.getElementById('pbClear');\n        var searchRes   = document.getElementById('pbSearchResults');\n        var browseDiv   = document.getElementById('pbBrowse');\n        var noResults   = document.getElementById('pbNoResults');\n\n        function initials(name) {\n            return name.split(' ').slice(0,2).map(function(w){ return w[0] ? w[0].toUpperCase() : ''; }).join('') || '?';\n        }\n        function colorClass(name) { return 'pb-colors-' + (name.charCodeAt(0) % 3); }\n        function esc(str) {\n            var d = document.createElement('div');\n            d.appendChild(document.createTextNode(str));\n            return d.innerHTML;\n        }\n        function countStr(parts) { return parts.filter(Boolean).join(' &nbsp;\u00b7&nbsp; '); }\n\n        function brandCard(b, forSearch) {\n            var parts = [];\n            if (b.printer_count > 0) parts.push(b.printer_count + ' printer'  + (b.printer_count !== 1 ? 's' : ''));\n            if (b.product_count > 0) parts.push(b.product_count + ' product' + (b.product_count !== 1 ? 's' : ''));\n            var iconHtml = forSearch\n                ? '<div style=\"display:flex;align-items:center;gap:8px;\"><div class=\"pb-card-icon ' + colorClass(b.name) + '\">' + esc(initials(b.name)) + '<\/div><span class=\"pb-card-type pb-type-brand\">Brand<\/span><\/div>'\n                : '<div class=\"pb-card-icon ' + colorClass(b.name) + '\">' + esc(initials(b.name)) + '<\/div>';\n            var btns = '';\n            if (b.product_count > 0 && b.term_link) {\n                btns += '<a class=\"pb-btn pb-btn-primary\" href=\"' + esc(b.term_link) + '\">View products<\/a>';\n            }\n            if (b.printer_count > 0) {\n                btns += '<button class=\"pb-btn pb-btn-outline\" onclick=\"pbNav(\\'printers\\',' + b.id + ')\">View printers<\/button>';\n            }\n            return '<div class=\"pb-card\" data-name=\"' + b.name.toLowerCase() + '\">'\n                + iconHtml\n                + '<div class=\"pb-card-name\">' + esc(b.name) + '<\/div>'\n                + (parts.length ? '<div class=\"pb-card-count\">' + countStr(parts) + '<\/div>' : '')\n                + '<div class=\"pb-btn-row\">' + btns + '<\/div>'\n                + '<\/div>';\n        }\n\n        function printerCard(p, forSearch) {\n            var iconHtml = forSearch\n                ? '<div style=\"display:flex;align-items:center;gap:8px;\"><div class=\"pb-card-icon ' + colorClass(p.name) + '\">' + esc(initials(p.name)) + '<\/div><span class=\"pb-card-type pb-type-printer\">Printer<\/span><\/div>'\n                : '<div class=\"pb-card-icon ' + colorClass(p.name) + '\">' + esc(initials(p.name)) + '<\/div>';\n            var parentHtml = (forSearch && p.parent_name) ? '<div class=\"pb-card-count\" style=\"color:#aaa;\">in ' + esc(p.parent_name) + '<\/div>' : '';\n            return '<div class=\"pb-card\" data-name=\"' + p.name.toLowerCase() + '\">'\n                + iconHtml\n                + '<div class=\"pb-card-name\">' + esc(p.name) + '<\/div>'\n                + parentHtml\n                + '<div class=\"pb-card-count\">' + p.product_count + ' product' + (p.product_count !== 1 ? 's' : '') + '<\/div>'\n                + '<div class=\"pb-btn-row\"><a class=\"pb-btn pb-btn-primary\" href=\"' + esc(p.term_link) + '\">View products<\/a><\/div>'\n                + '<\/div>';\n        }\n\n        function renderBreadcrumb(view, brandId) {\n            var html = '';\n            if (view === 'brands') {\n                html = '<strong style=\"color:#111\">All brands<\/strong>';\n            } else {\n                html = '<a href=\"#\" onclick=\"pbNav(\\'brands\\');return false;\">All brands<\/a>';\n            }\n            if (brandId) {\n                var b = allData.brands.find(function(x){ return x.id == brandId; });\n                html += '<span class=\"sep\">&rsaquo;<\/span><strong style=\"color:#111\">' + esc(b ? b.name : '') + '<\/strong>';\n            }\n            return '<div class=\"pb-nav\">' + html + '<\/div>';\n        }\n\n        var scrollObserver = null;\n        function setupScrollPagination(cards, gridId) {\n            var grid      = document.getElementById(gridId);\n            var sentinel  = document.getElementById('pbSentinel');\n            var allLoaded = document.getElementById('pbAllLoaded');\n            var remaining = cards.slice(PER_PAGE);\n            var loading   = false;\n\n            if (scrollObserver) scrollObserver.disconnect();\n\n            if (remaining.length === 0) {\n                if (sentinel)  sentinel.style.display  = 'none';\n                if (allLoaded) allLoaded.style.display = 'block';\n                return;\n            }\n            function loadBatch() {\n                if (loading || remaining.length === 0) return;\n                loading = true;\n                sentinel.classList.add('loading');\n                setTimeout(function() {\n                    var batch = remaining.splice(0, PER_PAGE);\n                    batch.forEach(function(html) {\n                        var tmp = document.createElement('div');\n                        tmp.innerHTML = html;\n                        while (tmp.firstChild) grid.appendChild(tmp.firstChild);\n                    });\n                    loading = false;\n                    sentinel.classList.remove('loading');\n                    if (remaining.length === 0) {\n                        sentinel.style.display  = 'none';\n                        allLoaded.style.display = 'block';\n                    }\n                }, 300);\n            }\n            if ('IntersectionObserver' in window) {\n                scrollObserver = new IntersectionObserver(function(entries) {\n                    if (entries[0].isIntersecting) loadBatch();\n                }, { rootMargin: '200px' });\n                scrollObserver.observe(sentinel);\n            } else {\n                remaining.splice(0).forEach(function(html) {\n                    var tmp = document.createElement('div');\n                    tmp.innerHTML = html;\n                    while (tmp.firstChild) grid.appendChild(tmp.firstChild);\n                });\n                sentinel.style.display  = 'none';\n                allLoaded.style.display = 'block';\n            }\n        }\n\n        function renderBrands() {\n            currentView  = 'brands';\n            currentBrand = null;\n\n            var cards = allData.brands.map(function(b){ return brandCard(b, false); });\n            var total = cards.length;\n\n            if (total === 0) {\n                content.innerHTML = renderBreadcrumb('brands', null)\n                    + '<div class=\"pb-heading\">All brands<\/div>'\n                    + '<div class=\"pb-sub\">Browse by brand<\/div>'\n                    + '<p class=\"pb-empty\">No brands found.<\/p>';\n                return;\n            }\n            var initial = cards.slice(0, PER_PAGE);\n            content.innerHTML = renderBreadcrumb('brands', null)\n                + '<div class=\"pb-heading\">All brands<\/div>'\n                + '<div class=\"pb-sub\">Browse by brand<\/div>'\n                + '<div class=\"pb-grid\" id=\"pbBrandGrid\">' + initial.join('') + '<\/div>'\n                + '<div class=\"pb-load-sentinel\" id=\"pbSentinel\"><div class=\"pb-spinner\"><\/div><\/div>'\n                + '<div class=\"pb-all-loaded\" id=\"pbAllLoaded\">All ' + total + ' brands loaded<\/div>';\n            setupScrollPagination(cards, 'pbBrandGrid');\n        }\n\n        function renderPrinters(brandId) {\n            currentView  = 'printers';\n            currentBrand = brandId;\n\n            var brand   = allData.brands.find(function(b){ return b.id == brandId; });\n            var prnList = allData.printers.filter(function(p){ return p.parent_id == brandId; });\n\n            if (prnList.length === 0) {\n                content.innerHTML = renderBreadcrumb('printers', brandId)\n                    + '<div class=\"pb-heading\">' + esc(brand ? brand.name : '') + '<\/div>'\n                    + '<div class=\"pb-sub\">Printers under this brand<\/div>'\n                    + '<p class=\"pb-empty\">No printers with products found.<\/p>';\n                return;\n            }\n            var cards = prnList.map(function(p){ return printerCard(p, false); });\n            var total = cards.length;\n            var initial = cards.slice(0, PER_PAGE);\n            content.innerHTML = renderBreadcrumb('printers', brandId)\n                + '<div class=\"pb-heading\">' + esc(brand ? brand.name : '') + '<\/div>'\n                + '<div class=\"pb-sub\">Printers under this brand<\/div>'\n                + '<div class=\"pb-grid\" id=\"pbPrinterGrid\">' + initial.join('') + '<\/div>'\n                + '<div class=\"pb-load-sentinel\" id=\"pbSentinel\"><div class=\"pb-spinner\"><\/div><\/div>'\n                + '<div class=\"pb-all-loaded\" id=\"pbAllLoaded\">All ' + total + ' printers loaded<\/div>';\n            setupScrollPagination(cards, 'pbPrinterGrid');\n        }\n\n        window.pbNav = function(view, brandId) {\n            searchInput.value       = '';\n            searchRes.style.display = 'none';\n            browseDiv.style.display = 'block';\n            noResults.style.display = 'none';\n            clearBtn.style.display  = 'none';\n\n            if (view === 'brands')   renderBrands();\n            if (view === 'printers') renderPrinters(brandId);\n\n            window.scrollTo({ top: document.getElementById('pbWrap').offsetTop - 20, behavior: 'smooth' });\n        };\n\n        function renderSearchResults(query) {\n            var html = '';\n            var bCards = allData.brands\n                .filter(function(b){ return b.name.toLowerCase().indexOf(query) > -1; })\n                .map(function(b){ return brandCard(b, true); });\n            if (bCards.length) html += '<div class=\"pb-section-title pb-search-section\">Brands<\/div><div class=\"pb-grid\">' + bCards.join('') + '<\/div>';\n\n            var pCards = allData.printers\n                .filter(function(p){ return p.name.toLowerCase().indexOf(query) > -1; })\n                .map(function(p){ return printerCard(p, true); });\n            if (pCards.length) html += '<div class=\"pb-section-title pb-search-section\">Printers<\/div><div class=\"pb-grid\">' + pCards.join('') + '<\/div>';\n\n            searchRes.innerHTML     = html;\n            searchRes.style.display = html ? 'block' : 'none';\n            noResults.style.display = html ? 'none'  : 'block';\n        }\n\n        searchInput.addEventListener('input', function() {\n            var q = this.value.toLowerCase().trim();\n            if (q === '') {\n                searchRes.style.display = 'none';\n                browseDiv.style.display = 'block';\n                noResults.style.display = 'none';\n                clearBtn.style.display  = 'none';\n                return;\n            }\n            clearBtn.style.display  = 'block';\n            browseDiv.style.display = 'none';\n            renderSearchResults(q);\n        });\n        clearBtn.addEventListener('click', function() {\n            searchInput.value       = '';\n            searchRes.style.display = 'none';\n            browseDiv.style.display = 'block';\n            noResults.style.display = 'none';\n            clearBtn.style.display  = 'none';\n            searchInput.focus();\n        });\n\n        fetch(AJAX_URL + '?action=pb_get_data')\n            .then(function(r){ return r.json(); })\n            .then(function(res) {\n                if (!res.success) throw new Error('Failed');\n                allData = res.data;\n                skeleton.style.display = 'none';\n                content.style.display  = 'block';\n                if (initBrand) renderPrinters(initBrand);\n                else           renderBrands();\n            })\n            .catch(function() {\n                skeleton.style.display = 'none';\n                content.style.display  = 'block';\n                content.innerHTML = '<p class=\"pb-error\">Failed to load data. Please refresh the page.<\/p>';\n            });\n    })();\n    <\/script>\n    \n\n\n\n<p><\/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":{"_acf_changed":false,"footnotes":""},"class_list":["post-952","page","type-page","status-publish","hentry"],"blocksy_meta":[],"acf":[],"_links":{"self":[{"href":"https:\/\/toners.tradecopiers.co.uk\/index.php\/wp-json\/wp\/v2\/pages\/952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/toners.tradecopiers.co.uk\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/toners.tradecopiers.co.uk\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/toners.tradecopiers.co.uk\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/toners.tradecopiers.co.uk\/index.php\/wp-json\/wp\/v2\/comments?post=952"}],"version-history":[{"count":2,"href":"https:\/\/toners.tradecopiers.co.uk\/index.php\/wp-json\/wp\/v2\/pages\/952\/revisions"}],"predecessor-version":[{"id":955,"href":"https:\/\/toners.tradecopiers.co.uk\/index.php\/wp-json\/wp\/v2\/pages\/952\/revisions\/955"}],"wp:attachment":[{"href":"https:\/\/toners.tradecopiers.co.uk\/index.php\/wp-json\/wp\/v2\/media?parent=952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}