Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 4 additions & 18 deletions src/chrome/src/ui/sidepanel.js
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,6 @@ const PERMISSION_REMINDER_PLACEHOLDER_KEY = 'sp.input.placeholder_tip.skip_permi
let pendingAnswerSelection = null;
let selectionAskActionRefreshFrame = null;
let selectionAskActionRefreshTimer = null;
let keepSelectionAskActionUntil = 0;
let selectionAskActionLocale = '';
let selectionAskActionLabel = '';
const SLASH_COMMANDS = [
Expand Down Expand Up @@ -10641,12 +10640,7 @@ function messageInfoClickIsInteractive(target) {

function messageInfoClickHasTextSelection() {
const selection = globalThis.getSelection?.();
if (selection && !selection.isCollapsed) return true;
return Boolean(
pendingAnswerSelection
&& selectionAskActionEl
&& !selectionAskActionEl.classList.contains('hidden'),
);
return Boolean(selection && !selection.isCollapsed);
}

function toggleMessageInfo(msgEl) {
Expand Down Expand Up @@ -10755,7 +10749,6 @@ function dismissSelectionAskAction() {
cancelAnimationFrame(selectionAskActionRefreshFrame);
selectionAskActionRefreshFrame = null;
}
keepSelectionAskActionUntil = 0;
pendingAnswerSelection = null;
selectionAskActionEl?.classList.add('hidden');
}
Expand Down Expand Up @@ -10805,12 +10798,6 @@ function refreshSelectionAskAction() {
showSelectionAskAction(selected);
return;
}
const selection = window.getSelection?.();
if (selection && !selection.isCollapsed && selection.rangeCount >= 1) {
dismissSelectionAskAction();
return;
}
if (pendingAnswerSelection) return;
dismissSelectionAskAction();
}

Expand All @@ -10822,7 +10809,6 @@ function showSelectionAskAction(selected) {
? selected.range.cloneRange()
: selected.range,
};
keepSelectionAskActionUntil = Date.now() + 2000;
applySelectionAskActionLabel();
selectionAskActionEl.classList.remove('hidden');
positionSelectionAskAction(pendingAnswerSelection.range);
Expand All @@ -10842,12 +10828,12 @@ function scheduleSelectionAskActionRefresh() {

function handleSelectionAskPointerDown(event) {
if (selectionAskActionEl?.contains(event.target)) return;
if (!event.target?.closest?.('.message.assistant')) dismissSelectionAskAction();
dismissSelectionAskAction();
}

function handleSelectionAskPointerUp() {
const selected = selectedAssistantAnswer() || pendingAnswerSelection;
if (selected?.text) {
const selected = selectedAssistantAnswer();
if (selected) {
showSelectionAskAction(selected);
return;
}
Expand Down
2 changes: 2 additions & 0 deletions src/chrome/styles/sidepanel.css
Original file line number Diff line number Diff line change
Expand Up @@ -2348,6 +2348,7 @@ body {
position: fixed;
z-index: 10000;
display: block;
opacity: 0.8;
max-width: calc(100vw - 16px);
padding: 6px 10px;
border: 1px solid var(--accent);
Expand All @@ -2372,6 +2373,7 @@ body {
.selection-ask-action:hover {
border-color: var(--accent-hover);
background: var(--accent-hover);
opacity: 1;
}

.selection-ask-action:focus-visible {
Expand Down
22 changes: 4 additions & 18 deletions src/firefox/src/ui/sidepanel.js
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,6 @@ const PERMISSION_REMINDER_PLACEHOLDER_KEY = 'sp.input.placeholder_tip.skip_permi
let pendingAnswerSelection = null;
let selectionAskActionRefreshFrame = null;
let selectionAskActionRefreshTimer = null;
let keepSelectionAskActionUntil = 0;
let selectionAskActionLocale = '';
let selectionAskActionLabel = '';
const SLASH_COMMANDS = [
Expand Down Expand Up @@ -10262,12 +10261,7 @@ function messageInfoClickIsInteractive(target) {

function messageInfoClickHasTextSelection() {
const selection = globalThis.getSelection?.();
if (selection && !selection.isCollapsed) return true;
return Boolean(
pendingAnswerSelection
&& selectionAskActionEl
&& !selectionAskActionEl.classList.contains('hidden'),
);
return Boolean(selection && !selection.isCollapsed);
}

function toggleMessageInfo(msgEl) {
Expand Down Expand Up @@ -10376,7 +10370,6 @@ function dismissSelectionAskAction() {
cancelAnimationFrame(selectionAskActionRefreshFrame);
selectionAskActionRefreshFrame = null;
}
keepSelectionAskActionUntil = 0;
pendingAnswerSelection = null;
selectionAskActionEl?.classList.add('hidden');
}
Expand Down Expand Up @@ -10426,12 +10419,6 @@ function refreshSelectionAskAction() {
showSelectionAskAction(selected);
return;
}
const selection = window.getSelection?.();
if (selection && !selection.isCollapsed && selection.rangeCount >= 1) {
dismissSelectionAskAction();
return;
}
if (pendingAnswerSelection) return;
dismissSelectionAskAction();
}

Expand All @@ -10443,7 +10430,6 @@ function showSelectionAskAction(selected) {
? selected.range.cloneRange()
: selected.range,
};
keepSelectionAskActionUntil = Date.now() + 2000;
applySelectionAskActionLabel();
selectionAskActionEl.classList.remove('hidden');
positionSelectionAskAction(pendingAnswerSelection.range);
Expand All @@ -10463,12 +10449,12 @@ function scheduleSelectionAskActionRefresh() {

function handleSelectionAskPointerDown(event) {
if (selectionAskActionEl?.contains(event.target)) return;
if (!event.target?.closest?.('.message.assistant')) dismissSelectionAskAction();
dismissSelectionAskAction();
}

function handleSelectionAskPointerUp() {
const selected = selectedAssistantAnswer() || pendingAnswerSelection;
if (selected?.text) {
const selected = selectedAssistantAnswer();
if (selected) {
showSelectionAskAction(selected);
return;
}
Expand Down
2 changes: 2 additions & 0 deletions src/firefox/styles/sidepanel.css
Original file line number Diff line number Diff line change
Expand Up @@ -2185,6 +2185,7 @@ body {
position: fixed;
z-index: 10000;
display: block;
opacity: 0.8;
max-width: calc(100vw - 16px);
padding: 6px 10px;
border: 1px solid var(--accent);
Expand All @@ -2209,6 +2210,7 @@ body {
.selection-ask-action:hover {
border-color: var(--accent-hover);
background: var(--accent-hover);
opacity: 1;
}

.selection-ask-action:focus-visible {
Expand Down
8 changes: 4 additions & 4 deletions test/run.js
Original file line number Diff line number Diff line change
Expand Up @@ -1275,8 +1275,8 @@ test('selection answer action wiring covers show, dismiss, and tab/conversation
assert.match(source, /document\.addEventListener\('pointerdown', handleSelectionAskPointerDown/);
assert.match(source, /function showSelectionAskAction\(selected\)/);
assert.match(source, /function ensureSelectionAskActionEl\(\)/);
assert.match(source, /keepSelectionAskActionUntil = Date\.now\(\) \+ 2000/);
assert.match(source, /if \(pendingAnswerSelection\) return;/);
assert.match(source, /function handleSelectionAskPointerDown\(event\) \{[\s\S]*?if \(selectionAskActionEl\?\.contains\(event\.target\)\) return;[\s\S]*?dismissSelectionAskAction\(\);/);
assert.match(source, /function refreshSelectionAskAction\(\) \{[\s\S]*?const selected = selectedAssistantAnswer\(\);[\s\S]*?showSelectionAskAction\(selected\);[\s\S]*?dismissSelectionAskAction\(\);/);
assert.match(source, /selection\.rangeCount < 1/);
assert.match(source, /document\.addEventListener\('pointercancel', handleSelectionAskPointerUp/);
assert.match(source, /document\.addEventListener\('mouseup', handleSelectionAskPointerUp/);
Expand All @@ -1289,7 +1289,7 @@ test('selection answer action wiring covers show, dismiss, and tab/conversation
assert.match(source, /chatContainerEl\?\.addEventListener\('scroll', handleSelectionAskScroll/);
assert.match(source, /document\.body\.appendChild\(selectionAskActionEl\)/);
assert.match(source, /closest\?\.\('\.message\.assistant'\)/);
assert.match(source, /function messageInfoClickHasTextSelection\(\) \{[\s\S]*?if \(selection && !selection\.isCollapsed\) return true;[\s\S]*?pendingAnswerSelection/);
assert.match(source, /function messageInfoClickHasTextSelection\(\) \{[\s\S]*?return Boolean\(selection && !selection\.isCollapsed\);/);
assert.match(source, /if \(messageInfoClickHasTextSelection\(\)\) return;/);
assert.match(source, /const text = selectionTextFromRange\(range\) \|\| String\(range\.toString\?\.\(\) \|\| ''\)\.trim\(\);/);
assert.match(source, /function applySelectionAskActionLabel\(\)/);
Expand All @@ -1309,7 +1309,7 @@ test('selection answer action wiring covers show, dismiss, and tab/conversation
assert.match(sidepanelHtmlSources[index], /id="selection-ask-action"/);
assert.doesNotMatch(sidepanelHtmlSources[index], /id="selection-ask-action"[^>]*aria-live/);
assert.doesNotMatch(sidepanelHtmlSources[index], /<div id="app"[\s\S]*id="selection-ask-action"[\s\S]*<\/div>\s*<script/);
assert.match(sidepanelStyleSources[index], /\.selection-ask-action \{[\s\S]*?z-index:\s*10000;[\s\S]*?user-select:\s*none;/);
assert.match(sidepanelStyleSources[index], /\.selection-ask-action \{[\s\S]*?z-index:\s*10000;[\s\S]*?opacity:\s*0\.8;[\s\S]*?user-select:\s*none;/);
}
});

Expand Down
Loading