|
75 | 75 | function getPanel() { return document.getElementById('rex-lp-panel'); } |
76 | 76 | function getIframe() { return document.getElementById('rex-lp-iframe'); } |
77 | 77 |
|
| 78 | + /** |
| 79 | + * Fügt lp_anchors=1 an eine Frontend-URL an (für SLICE_SHOW-Anker im iframe). |
| 80 | + * Bestehende lp_anchors-Parameter werden vorher entfernt. |
| 81 | + */ |
| 82 | + function addLpAnchors(url) { |
| 83 | + if (!url || url === 'about:blank') { return url; } |
| 84 | + var base = url.split('#')[0].replace(/([?&])lp_anchors=\d+&?/, function(m, sep) { |
| 85 | + return sep === '?' ? '?' : ''; |
| 86 | + }).replace(/[?&]$/, ''); |
| 87 | + return base + (base.indexOf('?') !== -1 ? '&' : '?') + 'lp_anchors=1'; |
| 88 | + } |
| 89 | + |
78 | 90 | // ------------------------------------------------------------------------- |
79 | 91 | // Float-Panel – Drag-to-detach |
80 | 92 | // ------------------------------------------------------------------------- |
|
485 | 497 | function refreshIframe() { |
486 | 498 | var iframe = getIframe(); |
487 | 499 | if (!iframe) { return; } |
488 | | - try { |
489 | | - iframe.contentWindow.location.reload(); |
490 | | - } catch (e) { |
491 | | - // Cross-Origin-Fallback: src neu setzen |
492 | | - var src = iframe.src; |
493 | | - iframe.src = ''; |
494 | | - setTimeout(function () { iframe.src = src; }, 50); |
| 500 | + |
| 501 | + var baseUrl = iframe.dataset.src || ''; |
| 502 | + if (!baseUrl) { |
| 503 | + // Fallback wenn data-src nicht gesetzt |
| 504 | + try { |
| 505 | + iframe.contentWindow.location.reload(); |
| 506 | + } catch (e) { |
| 507 | + var old = iframe.src; |
| 508 | + iframe.src = ''; |
| 509 | + setTimeout(function () { iframe.src = old; }, 50); |
| 510 | + } |
| 511 | + return; |
495 | 512 | } |
| 513 | + |
| 514 | + // slice_id aus der aktuellen Backend-URL lesen: |
| 515 | + // Nach Klick auf "Bearbeiten" steht die ID im URL-Parameter. |
| 516 | + var params = new window.URLSearchParams(window.location.search); |
| 517 | + var sliceId = params.get('slice_id'); |
| 518 | + iframe.src = addLpAnchors(baseUrl) + (sliceId ? '#rex-slice-' + sliceId : ''); |
496 | 519 | } |
497 | 520 |
|
498 | 521 | function scheduleRefresh(delay) { |
|
987 | 1010 | $.getJSON(apiUrl, { article_id: articleId, clang: clang }) |
988 | 1011 | .done(function (data) { |
989 | 1012 | if (data && data.url) { |
990 | | - iframe.src = data.url; |
| 1013 | + // dataset.src aktuell halten (clean URL ohne lp_anchors/hash) |
| 1014 | + iframe.dataset.src = data.url; |
| 1015 | + iframe.src = addLpAnchors(data.url); |
991 | 1016 |
|
992 | 1017 | // Modal-iframe ebenfalls aktualisieren wenn offen |
993 | 1018 | var modal = document.getElementById('rex-lp-modal'); |
|
1041 | 1066 | if (iframe) { |
1042 | 1067 | if (enabled) { |
1043 | 1068 | // Kein Reload nötig: data-src ist immer aktuell |
1044 | | - iframe.src = iframe.dataset.src || ''; |
| 1069 | + iframe.src = addLpAnchors(iframe.dataset.src || ''); |
1045 | 1070 | } else { |
1046 | 1071 | iframe.src = 'about:blank'; |
1047 | 1072 | } |
|
0 commit comments