{"id":1817,"date":"2025-08-11T11:47:25","date_gmt":"2025-08-11T09:47:25","guid":{"rendered":"https:\/\/roberttraczyk.art\/?page_id=1817"},"modified":"2025-08-11T15:45:22","modified_gmt":"2025-08-11T13:45:22","slug":"przeszczep-tekstu","status":"publish","type":"page","link":"https:\/\/roberttraczyk.art\/en\/przeszczep-tekstu\/","title":{"rendered":"PRZESZCZEP TEKSTU"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1817\" class=\"elementor elementor-1817\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-983b33a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"983b33a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-601df22\" data-id=\"601df22\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c881fff elementor-widget elementor-widget-html\" data-id=\"c881fff\" 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<!doctype html>\n<html lang=\"pl\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Noun Mixer \u2013 GUI<\/title>\n<style>\n  :root { --bg:#0b1020; --panel:#121833; --muted:#99a3ff; --text:#e8ebff; --line:#233; }\n  *{box-sizing:border-box}\n  body{margin:0; font:16px\/1.45 system-ui,Segoe UI,Roboto,Helvetica,Arial; color:var(--text);}\n  .wrap{max-width:1100px;margin:24px auto;padding:0 12px}\n  .card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:16px;box-shadow:0 8px 24px rgba(0,0,0,.25)}\n  h1{margin:0 0 12px;font-size:22px;letter-spacing:.2px}\n  .grid{display:grid;gap:12px;grid-template-columns:1fr}\n  @media(min-width:900px){ .grid{grid-template-columns:1fr 1fr} }\n  label{display:flex;align-items:center;gap:8px;font-weight:600;color:var(--muted);margin-bottom:6px}\n  .counter{margin-left:auto;font-weight:500;opacity:.8}\n  textarea{width:100%;min-height:180px;background:#0e1430;border:1px solid var(--line);color:var(--text);padding:12px;border-radius:12px;resize:vertical}\n  textarea[readonly]{opacity:.9}\n  .controls{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:12px}\n  .range{display:flex;align-items:center;gap:10px;flex:1 1 auto}\n  input[type=\"range\"]{width:260px}\n  .btn{appearance:none;border:1px solid var(--line);background:linear-gradient(180deg,#10173a,#0c1230);color:#e8ebff;\n       padding:10px 16px;border-radius:12px;cursor:pointer;font-weight:600}\n  .btn[disabled]{opacity:.6;cursor:progress}\n  .badge{display:inline-block;background:#101a46;border:1px solid #2a355e;border-radius:999px;padding:4px 10px;font-size:12px;color:#c9d2ff}\n  .row{display:flex;gap:10px;flex-wrap:wrap}\n  .status{font-size:13px;opacity:.9}\n<\/style>\n<\/head>\n<body>\n<div class=\"wrap\">\n  <div class=\"card\">\n    <h1>Podmiana rzeczownik\u00f3w (Morfeusz na serwerze)<\/h1>\n\n    <div class=\"grid\">\n      <div>\n        <label for=\"tRecipient\">Tekst biorca <span id=\"cR\" class=\"counter\">0\/2000<\/span><\/label>\n        <textarea id=\"tRecipient\" maxlength=\"2000\" placeholder=\"Wklej tekst biorcy (max 2000 znak\u00f3w)\u2026\"><\/textarea>\n      <\/div>\n      <div>\n        <label for=\"tDonor\">Tekst dawca <span id=\"cD\" class=\"counter\">0\/2000<\/span><\/label>\n        <textarea id=\"tDonor\" maxlength=\"2000\" placeholder=\"Wklej tekst dawcy (max 2000 znak\u00f3w)\u2026\"><\/textarea>\n      <\/div>\n    <\/div>\n\n    <div class=\"controls\">\n      <div class=\"range\">\n        <label for=\"strength\">Si\u0142a<\/label>\n        <input id=\"strength\" type=\"range\" min=\"0\" max=\"1\" step=\"0.05\" value=\"0.5\" aria-label=\"Si\u0142a podmiany\">\n        <span id=\"sVal\" class=\"badge\">0.50<\/span>\n      <\/div>\n      <div class=\"row\">\n        <button id=\"btnGenerate\" class=\"btn\">Generuj wynik<\/button>\n        <button id=\"btnCopy\" class=\"btn\" type=\"button\">Kopiuj wynik<\/button>\n        <span id=\"status\" class=\"status\"><\/span>\n      <\/div>\n    <\/div>\n\n    <div style=\"margin-top:12px\">\n      <label for=\"tOutput\">Wynik<\/label>\n      <textarea id=\"tOutput\" readonly placeholder=\"Tu pojawi si\u0119 wynik\u2026\"><\/textarea>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(() => {\n  \/\/ === KONFIGURACJA: URL Twojego API na Railway ===\n  const API_URL = \"https:\/\/web-production-e2cc6.up.railway.app\/mix\";\n\n  const $ = s => document.querySelector(s);\n  const tR = $('#tRecipient'), tD = $('#tDonor'), tO = $('#tOutput');\n  const sld = $('#strength'), sVal = $('#sVal');\n  const btn = $('#btnGenerate'), btnCopy = $('#btnCopy'), st = $('#status');\n  const cR = $('#cR'), cD = $('#cD');\n\n  const limit = 2000;\n  const updateCounter = () => { cR.textContent = `${tR.value.length}\/${limit}`; cD.textContent = `${tD.value.length}\/${limit}`; };\n  const enforceLimit = el => { if (el.value.length > limit) el.value = el.value.slice(0, limit); updateCounter(); };\n\n  tR.addEventListener('input', () => enforceLimit(tR));\n  tD.addEventListener('input', () => enforceLimit(tD));\n  updateCounter();\n\n  sld.addEventListener('input', e => sVal.textContent = (+e.target.value).toFixed(2));\n\n  async function callMixer() {\n    \/\/ walidacja prosta\n    if (!tR.value.trim()) { tO.value = \"\"; st.textContent = \"Wklej tekst biorcy.\"; return; }\n    if (!tD.value.trim()) { tO.value = \"\"; st.textContent = \"Wklej tekst dawcy.\"; return; }\n\n    btn.disabled = true; st.textContent = \"Przetwarzanie\u2026\";\n    try {\n      const payload = {\n        recipient: tR.value.slice(0, limit),\n        donor: tD.value.slice(0, limit),\n        strength: parseFloat(sld.value)\n      };\n      const r = await fetch(API_URL, {\n        method: \"POST\",\n        headers: {\"Content-Type\":\"application\/json\"},\n        body: JSON.stringify(payload)\n      });\n      if (!r.ok) throw new Error(\"B\u0142\u0105d serwera\");\n      const data = await r.json();\n      tO.value = data.result || \"\";\n      st.textContent = \"Gotowe.\";\n    } catch (e) {\n      console.error(e);\n      st.textContent = \"Nie uda\u0142o si\u0119. Sprawd\u017a po\u0142\u0105czenie\/CORS.\";\n    } finally {\n      btn.disabled = false;\n      setTimeout(() => st.textContent = \"\", 2500);\n    }\n  }\n\n  btn.addEventListener('click', callMixer);\n\n  btnCopy.addEventListener('click', async () => {\n    try {\n      await navigator.clipboard.writeText(tO.value || \"\");\n      st.textContent = \"Skopiowano wynik.\";\n      setTimeout(() => st.textContent = \"\", 1800);\n    } catch {\n      st.textContent = \"Nie uda\u0142o si\u0119 skopiowa\u0107.\";\n    }\n  });\n})();\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Noun Mixer \u2013 GUI Podmiana rzeczownik\u00f3w (Morfeusz na serwerze) Tekst biorca 0\/2000 Tekst dawca 0\/2000 Si\u0142a 0.50 Generuj wynik Kopiuj wynik Wynik<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1817","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/roberttraczyk.art\/en\/wp-json\/wp\/v2\/pages\/1817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/roberttraczyk.art\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/roberttraczyk.art\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/roberttraczyk.art\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/roberttraczyk.art\/en\/wp-json\/wp\/v2\/comments?post=1817"}],"version-history":[{"count":37,"href":"https:\/\/roberttraczyk.art\/en\/wp-json\/wp\/v2\/pages\/1817\/revisions"}],"predecessor-version":[{"id":1861,"href":"https:\/\/roberttraczyk.art\/en\/wp-json\/wp\/v2\/pages\/1817\/revisions\/1861"}],"wp:attachment":[{"href":"https:\/\/roberttraczyk.art\/en\/wp-json\/wp\/v2\/media?parent=1817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}