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){