From 2e9b92f0e099bce3c95f3144e99ef998223072b8 Mon Sep 17 00:00:00 2001 From: fontvielle Date: Tue, 13 Oct 2026 16:54:57 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=BA?= =?UTF-8?q?=D0=B0:=20=D0=BD=D0=B5=20=D1=81=D0=B1=D1=80=D0=B0=D1=81=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D1=8C=20=D0=B2=D1=8B=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Пока пользователь выделяет текст мышью (например, копирует M2M GUID), автообновление пропускает такт: live-опрос и перезагрузка карточки по смене подписи, а также подстановка новых строк в журнале не выполняются, пока выделение активно (window.bjSelecting). Как только выделение снято — обновление продолжается на следующем такте. Co-Authored-By: Claude Opus 4.8 --- internal/lkgateway/web/templates/layout.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/internal/lkgateway/web/templates/layout.html b/internal/lkgateway/web/templates/layout.html index 0da9395..f8665e6 100644 --- a/internal/lkgateway/web/templates/layout.html +++ b/internal/lkgateway/web/templates/layout.html @@ -837,6 +837,9 @@ button.dq-link, .dq-link { background:none !important; border:0 !important; padd // перерисовывается сама; если оператор уже начал заполнять форму — только предложение обновить. (function(){ var dirty = false; + // Пока пользователь выделяет текст мышью (например, копирует M2M GUID), автообновление + // не должно трогать страницу — иначе выделение сбрасывается. Такт пропускается, повтор — позже. + window.bjSelecting = window.bjSelecting || function(){ try { var s = window.getSelection(); return !!s && !s.isCollapsed && String(s).replace(/\s+/g, '').length > 0; } catch(e){ return false; } }; document.addEventListener('input', function(e){ if (e.target.closest('main form')) dirty = true; }, true); document.addEventListener('change', function(e){ if (e.target.closest('main form')) dirty = true; }, true); try { var u = new URL(location.href); if (u.searchParams.has('flash')) { u.searchParams.delete('flash'); history.replaceState(null, '', u.pathname + u.search + u.hash); } } catch(e){} @@ -880,6 +883,7 @@ button.dq-link, .dq-link { background:none !important; border:0 !important; padd meta(e, e.hasAttribute('data-active') ? 'обновляется автоматически' : 'заявка завершена — автообновление не требуется'); }); function tick(){ + if (window.bjSelecting && window.bjSelecting()) return; // идёт выделение текста — не трогаем страницу var els = document.querySelectorAll('.live[data-live][data-active]'); if (!els.length) return; var out = [], inn = []; @@ -930,6 +934,7 @@ button.dq-link, .dq-link { background:none !important; border:0 !important; padd return s; } function tick(){ + if (window.bjSelecting && window.bjSelecting()) return; // идёт выделение текста — новые строки подставим позже fetch('/admin/journal/rows?since=' + encodeURIComponent(maxTime()), {cache:'no-store'}) .then(function(r){ return r.json(); }) .then(function(d){