{"id":10642,"date":"2025-10-27T14:47:47","date_gmt":"2025-10-27T13:47:47","guid":{"rendered":"https:\/\/retrofixer.it\/?page_id=10642"},"modified":"2025-10-28T13:01:06","modified_gmt":"2025-10-28T12:01:06","slug":"simulatore-porte-logiche","status":"publish","type":"page","link":"https:\/\/retrofixer.it\/en\/simulatore-porte-logiche\/","title":{"rendered":"Simulatore Porte logiche"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10642\" class=\"elementor elementor-10642\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-989bb23 e-con-full e-flex e-con e-parent\" data-id=\"989bb23\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a1cc04c elementor-widget elementor-widget-text-editor\" data-id=\"a1cc04c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Trascina i componenti sul canvas o clicca per posizionarli al centro. Collegali e divertiti!<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a87c1e0 elementor-widget elementor-widget-html\" data-id=\"a87c1e0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"mybody\">\r\n<div id=\"sidebar\">\r\n        <h4>Componenti<\/h4>\r\n        <div class=\"component-item\" data-type=\"button\">PULSANTE<\/div>\r\n        <div class=\"component-item\" data-type=\"led\">LED<\/div>\r\n        <div class=\"component-item\" data-type=\"and\">AND<\/div>\r\n        <div class=\"component-item\" data-type=\"or\">OR<\/div>\r\n        <div class=\"component-item\" data-type=\"not\">NOT<\/div>\r\n        <div class=\"component-item\" data-type=\"nand\">NAND<\/div>\r\n        <div class=\"component-item\" data-type=\"nor\">NOR<\/div>\r\n        <div class=\"component-item\" data-type=\"xor\">XOR<\/div>\r\n        <div class=\"component-item\" data-type=\"xnor\">XNOR<\/div>\r\n    <\/div>\r\n    \r\n    <div id=\"canvas-container\">\r\n        <svg id=\"wires\"><\/svg>\r\n        <div id=\"canvas\"><\/div>\r\n    <\/div>\r\n<\/div>\r\n    <script>\r\n        const canvas = document.getElementById('canvas');\r\n        const canvasContainer = document.getElementById('canvas-container');\r\n        const wiresContainer = document.getElementById('wires');\r\n        let components = [];\r\n        let connections = [];\r\n        let draggedElement = null;\r\n        let dragOffset = { x: 0, y: 0 };\r\n        let connectingFrom = null;\r\n        let tempWire = null;\r\n        let componentIdCounter = 0;\r\n        let isDragging = false;\r\n\r\n\t\tcanvasContainer.addEventListener('dragover', (e) => {\r\n\t\t\te.preventDefault(); \/\/ permette il drop\r\n\t\t});\r\n\r\n\t\tcanvasContainer.addEventListener('drop', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tconst type = e.dataTransfer.getData('type');\r\n\t\t\tconst pos = getCanvasPosition(e.clientX, e.clientY);\r\n\t\t\tcreateComponent(type, pos.x - 40, pos.y - 40);\r\n\t\t});\r\n\r\n        \/\/ Configurazione porte logiche\r\n        const gateConfig = {\r\n            and: { inputs: 2, symbol: '&', label: 'AND' },\r\n            or: { inputs: 2, symbol: '\u22651', label: 'OR' },\r\n            not: { inputs: 1, symbol: '1', label: 'NOT' },\r\n            nand: { inputs: 2, symbol: '&', label: 'NAND', inverted: true },\r\n            nor: { inputs: 2, symbol: '\u22651', label: 'NOR', inverted: true },\r\n            xor: { inputs: 2, symbol: '=1', label: 'XOR' },\r\n            xnor: { inputs: 2, symbol: '=1', label: 'XNOR', inverted: true }\r\n        };\r\n\r\n        \/\/ Funzioni logiche\r\n        function evaluateGate(type, inputs) {\r\n            switch(type) {\r\n                case 'and': return inputs.every(v => v);\r\n                case 'or': return inputs.some(v => v);\r\n                case 'not': return !inputs[0];\r\n                case 'nand': return !inputs.every(v => v);\r\n                case 'nor': return !inputs.some(v => v);\r\n                case 'xor': return inputs.filter(v => v).length === 1;\r\n                case 'xnor': return inputs.filter(v => v).length !== 1;\r\n                default: return false;\r\n            }\r\n        }\r\n\r\n        \/\/ Ottieni posizione relativa al canvas\r\n        function getCanvasPosition(clientX, clientY) {\r\n            const rect = canvasContainer.getBoundingClientRect();\r\n            return {\r\n                x: clientX - rect.left,\r\n                y: clientY - rect.top\r\n            };\r\n        }\r\n\r\n        \/\/ Click sulla sidebar per creare componenti\r\n        document.querySelectorAll('.component-item').forEach(item => {\r\n\t\t\titem.setAttribute('draggable', true);\r\n\t\t\titem.addEventListener('dragstart', (e) => {\r\n\t\t\t\te.dataTransfer.setData('type', item.dataset.type);\r\n\t\t\t});\r\n            item.addEventListener('click', e => {\r\n                const type = item.dataset.type;\r\n                const rect = canvasContainer.getBoundingClientRect();\r\n                \/\/ Posiziona al centro del canvas\r\n                createComponent(type, rect.width \/ 2 - 40, rect.height \/ 2 - 40);\r\n            });\r\n        }); \r\n\r\n\/\/ per mobile, non funziona bene il drag e comunque con lo scroll non si riesce\r\n\/*let draggingType = null;\r\n\r\ndocument.querySelectorAll('.component-item').forEach(item => {\r\n    \/\/ desktop\r\n    item.addEventListener('dragstart', (e) => {\r\n        e.dataTransfer.setData('type', item.dataset.type);\r\n    });\r\n    \/\/ mobile\/touch\r\n    item.addEventListener('pointerdown', (e) => {\r\n        draggingType = item.dataset.type;\r\n    });\r\n}); *\/\r\n\r\ncanvasContainer.addEventListener('pointerup', (e) => {\r\n    if (draggingType) {\r\n        const pos = getCanvasPosition(e.clientX, e.clientY);\r\n        createComponent(draggingType, pos.x - 40, pos.y - 40);\r\n        draggingType = null;\r\n    }\r\n});\r\n\r\n        function createComponent(type, x, y) {\r\n            const component = {\r\n                id: componentIdCounter++,\r\n                type: type,\r\n                x: x,\r\n                y: y,\r\n                inputs: [],\r\n                outputs: [],\r\n                state: type === 'button' ? false : null\r\n            };\r\n\r\n            if (type === 'button') {\r\n                component.outputs = [false];\r\n            } else if (type === 'led') {\r\n                component.inputs = [false];\r\n            } else {\r\n                const config = gateConfig[type];\r\n                component.inputs = new Array(config.inputs).fill(false);\r\n                component.outputs = [false];\r\n            }\r\n\r\n            components.push(component);\r\n            renderComponent(component);\r\n        }\r\n\r\n        function renderComponent(comp) {\r\n            const existing = document.getElementById(`comp-${comp.id}`);\r\n            if (existing) existing.remove();\r\n\r\n            const el = document.createElement('div');\r\n            el.id = `comp-${comp.id}`;\r\n            el.className = 'gate';\r\n            el.style.left = comp.x + 'px';\r\n            el.style.top = comp.y + 'px';\r\n\r\n            if (comp.type === 'button') {\r\n                el.innerHTML = `\r\n\t\t\t\t\t<div class=\"gate-label\">TASTO<\/div>\r\n                    <div class=\"button-component ${comp.state ? 'active' : ''}\" id=\"btn-${comp.id}\">\u25cf<\/div>\r\n                `;\r\n                const portY = 40;\r\n                el.innerHTML += `<div class=\"port output-port ${comp.outputs[0] ? 'active' : ''}\" \r\n                    style=\"top: ${portY}px;\" data-comp=\"${comp.id}\" data-type=\"output\" data-index=\"0\"><\/div>`;\r\n                \r\n                const btn = el.querySelector('.button-component');\r\n\t\t\t\tbtn.addEventListener('click', (e) => {\r\n\t\t\t\t\talert('click');\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tcomp.state = !comp.state;\r\n\t\t\t\t\tcomp.outputs[0] = comp.state;\r\n\t\t\t\t\trenderComponent(comp);\r\n\t\t\t\t\tupdateCircuit();\r\n\t\t\t\t});\r\n\t\t\t\t\r\n            } else if (comp.type === 'led') {\r\n                el.innerHTML = `\r\n\t\t\t\t\t<div class=\"gate-label\">LED<\/div>\r\n                    <div class=\"led-component ${comp.inputs[0] ? 'active' : ''}\" id=\"led-${comp.id}\"><\/div>\r\n                `;\r\n                const portY = 40;\r\n                el.innerHTML += `<div class=\"port input-port ${comp.inputs[0] ? 'active' : ''}\" \r\n                    style=\"top: ${portY}px;\" data-comp=\"${comp.id}\" data-type=\"input\" data-index=\"0\"><\/div>`;\r\n            } else {\r\n                const config = gateConfig[comp.type];\r\n                el.innerHTML = `\r\n\t\t\t\t\t<div class=\"gate-label\">${config.label}<\/div>\r\n\t\t\t\t\t<div class=\"gate-symbol\">\r\n\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/retrofixer.it\/wp-content\/uploads\/2025\/10\/${comp.type}.png\" alt=\"${config.label}\" style=\"width:60px;height:40px;object-fit:contain;pointer-events:none;\">\r\n\t\t\t\t\t<\/div>\r\n                `;\r\n\r\n                const spacing = 50 \/ (config.inputs + 1);\r\n                for (let i = 0; i < config.inputs; i++) {\r\n                    const portY = (i + 1) * spacing + 17;\r\n                    el.innerHTML += `<div class=\"port input-port ${comp.inputs[i] ? 'active' : ''}\" \r\n                        style=\"top: ${portY}px;\" data-comp=\"${comp.id}\" data-type=\"input\" data-index=\"${i}\"><\/div>`;\r\n                }\r\n\r\n                el.innerHTML += `<div class=\"port output-port ${comp.outputs[0] ? 'active' : ''}\" \r\n                    style=\"top: 40px;\" data-comp=\"${comp.id}\" data-type=\"output\" data-index=\"0\"><\/div>`;\r\n            }\r\n\r\n            el.innerHTML += `<button class=\"delete-btn\">\u00d7<\/button>`;\r\n            canvas.appendChild(el);\r\n\r\n\t\t\tif (comp.type === 'button') {\r\n\t\t\t\tconst btn = el.querySelector('.button-component');\r\n\t\t\t\tbtn.addEventListener('click', (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tcomp.state = !comp.state;\r\n\t\t\t\t\tcomp.outputs[0] = comp.state;\r\n\t\t\t\t\trenderComponent(comp);\r\n\t\t\t\t\tupdateCircuit();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n            \/\/ Eventi per eliminazione\r\n            const deleteBtn = el.querySelector('.delete-btn');\r\n            deleteBtn.addEventListener('click', (e) => {\r\n                e.stopPropagation();\r\n\t\t\t\t\/\/alert('click');\r\n                deleteComponent(comp.id);\r\n            });\r\n\r\n            \/\/ Eventi per drag del componente\r\n            el.addEventListener('pointerdown', (e) => {\r\n                if (e.target.classList.contains('port')) {\r\n                    return;\r\n                }\r\n                if (e.target.classList.contains('delete-btn')) {\r\n                    return;\r\n                }\r\n                if (e.target.classList.contains('button-component')) {\r\n                    return;\r\n                }\r\n                \r\n                isDragging = true;\r\n                draggedElement = comp;\r\n                const rect = el.getBoundingClientRect();\r\n                const canvasRect = canvasContainer.getBoundingClientRect();\r\n                dragOffset.x = e.clientX - rect.left;\r\n                dragOffset.y = e.clientY - rect.top;\r\n                e.preventDefault();\r\n            });\r\n\r\n            \/\/ Eventi per connessioni\r\n            el.querySelectorAll('.port').forEach(port => {\r\n                port.addEventListener('pointerdown', (e) => {\r\n                    e.stopPropagation();\r\n                    startConnection(port, e);\r\n                });\r\n            });\r\n        }\r\n\r\n        document.addEventListener('pointermove', (e) => {\r\n            if (draggedElement) {\r\n                const pos = getCanvasPosition(e.clientX, e.clientY);\r\n                draggedElement.x = pos.x - dragOffset.x;\r\n                draggedElement.y = pos.y - dragOffset.y;\r\n                renderComponent(draggedElement);\r\n                updateWires();\r\n            }\r\n            \r\n            if (connectingFrom && tempWire) {\r\n                const pos = getCanvasPosition(e.clientX, e.clientY);\r\n                tempWire.setAttribute('x2', pos.x);\r\n                tempWire.setAttribute('y2', pos.y);\r\n            }\r\n        });\r\n\r\n        document.addEventListener('pointerup', (e) => {\r\n            if (draggedElement) {\r\n                setTimeout(() => {\r\n                    isDragging = false;\r\n                }, 50);\r\n                draggedElement = null;\r\n            }\r\n            \r\n            if (connectingFrom) {\r\n                const target = e.target;\r\n                if (target.classList.contains('port')) {\r\n                    finishConnection(target);\r\n                }\r\n                if (tempWire) {\r\n                    tempWire.remove();\r\n                    tempWire = null;\r\n                }\r\n                connectingFrom = null;\r\n            }\r\n        });\r\n\r\n        function startConnection(port, e) {\r\n            connectingFrom = {\r\n                comp: parseInt(port.dataset.comp),\r\n                type: port.dataset.type,\r\n                index: parseInt(port.dataset.index)\r\n            };\r\n\r\n            const rect = port.getBoundingClientRect();\r\n            const canvasRect = canvasContainer.getBoundingClientRect();\r\n            const x = rect.left + rect.width \/ 2 - canvasRect.left;\r\n            const y = rect.top + rect.height \/ 2 - canvasRect.top;\r\n\r\n            tempWire = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'line');\r\n            tempWire.classList.add('wire');\r\n            tempWire.setAttribute('x1', x);\r\n            tempWire.setAttribute('y1', y);\r\n            tempWire.setAttribute('x2', x);\r\n            tempWire.setAttribute('y2', y);\r\n            wiresContainer.appendChild(tempWire);\r\n        }\r\n\r\n        function finishConnection(targetPort) {\r\n            const target = {\r\n                comp: parseInt(targetPort.dataset.comp),\r\n                type: targetPort.dataset.type,\r\n                index: parseInt(targetPort.dataset.index)\r\n            };\r\n\r\n            if (connectingFrom.type === 'output' && target.type === 'input') {\r\n                addConnection(connectingFrom.comp, connectingFrom.index, target.comp, target.index);\r\n            } else if (connectingFrom.type === 'input' && target.type === 'output') {\r\n                addConnection(target.comp, target.index, connectingFrom.comp, connectingFrom.index);\r\n            }\r\n        }\r\n\r\n        function addConnection(fromComp, fromIndex, toComp, toIndex) {\r\n            connections = connections.filter(c => !(c.toComp === toComp && c.toIndex === toIndex));\r\n            connections.push({ fromComp, fromIndex, toComp, toIndex });\r\n            updateCircuit();\r\n        }\r\n\r\n        function updateCircuit() {\r\n            components.forEach(comp => {\r\n                if (comp.type !== 'button') {\r\n                    comp.inputs.fill(false);\r\n                }\r\n            });\r\n\r\n            let changed = true;\r\n            let iterations = 0;\r\n            while (changed && iterations < 100) {\r\n                changed = false;\r\n                iterations++;\r\n\r\n                connections.forEach(conn => {\r\n                    const from = components.find(c => c.id === conn.fromComp);\r\n                    const to = components.find(c => c.id === conn.toComp);\r\n                    \r\n                    if (from && to) {\r\n                        const newValue = from.outputs[conn.fromIndex];\r\n                        if (to.inputs[conn.toIndex] !== newValue) {\r\n                            to.inputs[conn.toIndex] = newValue;\r\n                            changed = true;\r\n                        }\r\n                    }\r\n                });\r\n\r\n                components.forEach(comp => {\r\n                    if (comp.type !== 'button' && comp.type !== 'led') {\r\n                        const newOutput = evaluateGate(comp.type, comp.inputs);\r\n                        if (comp.outputs[0] !== newOutput) {\r\n                            comp.outputs[0] = newOutput;\r\n                            changed = true;\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n\r\n            components.forEach(comp => renderComponent(comp));\r\n            updateWires();\r\n        }\r\n\r\n        function updateWires() {\r\n            wiresContainer.querySelectorAll('line:not(.temp)').forEach(line => line.remove());\r\n\r\n            connections.forEach(conn => {\r\n                const from = components.find(c => c.id === conn.fromComp);\r\n                const to = components.find(c => c.id === conn.toComp);\r\n                \r\n                if (from && to) {\r\n                    const fromEl = document.querySelector(`#comp-${conn.fromComp} .output-port[data-index=\"${conn.fromIndex}\"]`);\r\n                    const toEl = document.querySelector(`#comp-${conn.toComp} .input-port[data-index=\"${conn.toIndex}\"]`);\r\n                    \r\n                    if (fromEl && toEl) {\r\n                        const fromRect = fromEl.getBoundingClientRect();\r\n                        const toRect = toEl.getBoundingClientRect();\r\n                        const canvasRect = canvasContainer.getBoundingClientRect();\r\n                        \r\n                        const x1 = fromRect.left + fromRect.width \/ 2 - canvasRect.left;\r\n                        const y1 = fromRect.top + fromRect.height \/ 2 - canvasRect.top;\r\n                        const x2 = toRect.left + toRect.width \/ 2 - canvasRect.left;\r\n                        const y2 = toRect.top + toRect.height \/ 2 - canvasRect.top;\r\n\r\n                        const line = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'line');\r\n                        line.classList.add('wire');\r\n                        if (from.outputs[conn.fromIndex]) {\r\n                            line.classList.add('active');\r\n                        }\r\n                        line.setAttribute('x1', x1);\r\n                        line.setAttribute('y1', y1);\r\n                        line.setAttribute('x2', x2);\r\n                        line.setAttribute('y2', y2);\r\n                        wiresContainer.appendChild(line);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n\r\n        function deleteComponent(id) {\r\n            connections = connections.filter(c => c.fromComp !== id && c.toComp !== id);\r\n            components = components.filter(c => c.id !== id);\r\n            document.getElementById(`comp-${id}`).remove();\r\n            updateCircuit();\r\n        }\r\n    <\/script>\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-708024e e-flex e-con-boxed e-con e-parent\" data-id=\"708024e\" 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-428ee5d elementor-widget elementor-widget-text-editor\" data-id=\"428ee5d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-size: 1.1em;\">In questa pagina potete simulare il funzionamento delle porte logiche realizzando voi un piccolo schema.<\/span><\/p><p>Trascinate i componenti dalla barra a sinistra sul canvas e collegateli fra loro cliccando sul pallino corrispondente tra una uscita e l&#8217;ingresso di un&#8217;altra porta o un eventuale LED.<\/p><p>I pulsanti generano dei segnali che possono essere alti o bassi e questo lo si pu\u00f2 cambiare premendo su di esso. Hanno una sola uscita. <br \/>I LED hanno un solo ingresso e segnalano visivamente il suo stato.<br \/>Le porte logiche effettuano un&#8217;operazione in base ai segnali in ingresso e danno il risultato in uscita.<\/p><p>Potete collegare pi\u00f9 ingressi alle stesse uscite ma non pi\u00f9 uscite allo stesso ingresso.<br \/>Per eliminare un modulo, basta passarci sopra e cliccare sulla x in alto a destra.<br \/>Le connessioni non si possono eliminare se non collegando una uscita diversa allo stesso ingresso o eliminando il modulo<\/p><p>Se non conoscete il funzionamento di queste porte logiche, visitate questa pagina<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d001fc0 elementor-widget elementor-widget-button\" data-id=\"d001fc0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/porte-logiche\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-link\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Le porte logiche<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\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>Trascina i componenti sul canvas o clicca per posizionarli al centro. Collegali e divertiti! Componenti PULSANTE LED AND OR NOT NAND NOR XOR XNOR In questa<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[19,15,507],"tags":[559,565,563,554,555,556,557,99,553,564,561,562],"class_list":["post-10642","page","type-page","status-publish","hentry","category-computer","category-console","category-pcb","tag-559","tag-canvas","tag-circuito","tag-didattica","tag-elettronica","tag-funzionamento","tag-io","tag-logic-port","tag-porte-logiche","tag-schema","tag-segnali","tag-simulatore"],"_links":{"self":[{"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages\/10642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/comments?post=10642"}],"version-history":[{"count":106,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages\/10642\/revisions"}],"predecessor-version":[{"id":10767,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages\/10642\/revisions\/10767"}],"wp:attachment":[{"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/media?parent=10642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/categories?post=10642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/tags?post=10642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}