fix: improve goView media import and context selection
This commit is contained in:
parent
437193787b
commit
97a2eccc92
@ -152,8 +152,8 @@ export function Canvas(props: CanvasProps) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Editor parity: right-click on empty space clears selection (unless additive).
|
// Selection parity: right-click on empty space should NOT implicitly clear selection.
|
||||||
if (!additive) props.onSelectSingle(undefined);
|
// (Left-click on background already clears unless additive via box-select.)
|
||||||
}
|
}
|
||||||
|
|
||||||
props.onOpenContextMenu({ clientX: e.clientX, clientY: e.clientY, worldX: p.x, worldY: p.y, targetId });
|
props.onOpenContextMenu({ clientX: e.clientX, clientY: e.clientY, worldX: p.x, worldY: p.y, targetId });
|
||||||
|
|||||||
@ -178,9 +178,40 @@ function looksLikeImageOption(option: unknown): boolean {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function looksLikeTextOption(option: unknown): boolean {
|
||||||
|
if (!option || typeof option !== 'object') return false;
|
||||||
|
const o = option as Record<string, unknown>;
|
||||||
|
|
||||||
|
// goView TextCommon exports usually include a string dataset plus some typography-ish keys.
|
||||||
|
if (typeof o.dataset !== 'string') return false;
|
||||||
|
|
||||||
|
for (const key of [
|
||||||
|
'fontSize',
|
||||||
|
'fontColor',
|
||||||
|
'fontWeight',
|
||||||
|
'letterSpacing',
|
||||||
|
'paddingX',
|
||||||
|
'paddingY',
|
||||||
|
'textAlign',
|
||||||
|
'backgroundColor',
|
||||||
|
'borderWidth',
|
||||||
|
'borderColor',
|
||||||
|
'borderRadius',
|
||||||
|
'writingMode',
|
||||||
|
]) {
|
||||||
|
if (key in o) return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function looksLikeIframeOption(option: unknown): boolean {
|
function looksLikeIframeOption(option: unknown): boolean {
|
||||||
if (!option) return false;
|
if (!option) return false;
|
||||||
|
|
||||||
|
// Avoid false positives: some TextCommon widgets carry a link URL (or other URL-ish fields)
|
||||||
|
// but are still clearly text.
|
||||||
|
if (looksLikeTextOption(option)) return false;
|
||||||
|
|
||||||
if (typeof option === 'string') {
|
if (typeof option === 'string') {
|
||||||
const trimmed = option.trim();
|
const trimmed = option.trim();
|
||||||
if (trimmed.startsWith('<') && trimmed.includes('>')) return true;
|
if (trimmed.startsWith('<') && trimmed.includes('>')) return true;
|
||||||
@ -219,6 +250,9 @@ function looksLikeIframeOption(option: unknown): boolean {
|
|||||||
function looksLikeVideoOption(option: unknown): boolean {
|
function looksLikeVideoOption(option: unknown): boolean {
|
||||||
if (!option) return false;
|
if (!option) return false;
|
||||||
|
|
||||||
|
// Avoid false positives: some TextCommon widgets carry link-like fields.
|
||||||
|
if (looksLikeTextOption(option)) return false;
|
||||||
|
|
||||||
// Prefer explicit video-ish keys when option is an object.
|
// Prefer explicit video-ish keys when option is an object.
|
||||||
if (typeof option === 'object') {
|
if (typeof option === 'object') {
|
||||||
const o = option as Record<string, unknown>;
|
const o = option as Record<string, unknown>;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user