mobile: Enter=newline on mobile, hide preview zoom buttons; desktop: downloads to Downloads folder (batch133)
- Mobile: the Return key now inserts a newline instead of sending (send via the button, like every native chat app). Desktop keeps Enter=send / Shift+Enter=newline. - Image preview: hide the on-screen +/- zoom buttons on mobile (pinch-to-zoom covers it). - Desktop (Electron): a will-download handler saves straight to the OS Downloads folder with no "where to save?" dialog, de-duping the name if it exists. NOTE: desktop code only — NOT published to the update feed (needs an explicit desktop rebuild/publish). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -437,6 +437,19 @@ function configureSession() {
|
|||||||
if (sys && sys !== 'en-US' && (!avail.length || avail.includes(sys))) langs.push(sys);
|
if (sys && sys !== 'en-US' && (!avail.length || avail.includes(sys))) langs.push(sys);
|
||||||
ses.setSpellCheckerLanguages(langs);
|
ses.setSpellCheckerLanguages(langs);
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
|
// Downloads go STRAIGHT to the OS Downloads folder — no "where do you want to save?" dialog. If a file of
|
||||||
|
// the same name already exists, suffix " (n)" so nothing is overwritten. (item.setSavePath suppresses the
|
||||||
|
// save dialog entirely.)
|
||||||
|
ses.on('will-download', (_e, item) => {
|
||||||
|
try {
|
||||||
|
const dir = app.getPath('downloads');
|
||||||
|
const name = item.getFilename() || 'download';
|
||||||
|
const ext = path.extname(name), base = path.basename(name, ext);
|
||||||
|
let target = path.join(dir, name), n = 1;
|
||||||
|
while (fs.existsSync(target)) target = path.join(dir, `${base} (${n++})${ext}`);
|
||||||
|
item.setSavePath(target);
|
||||||
|
} catch (_) {}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Single-instance: a tray app must not spawn a second copy. If another launch happens, focus the
|
// Single-instance: a tray app must not spawn a second copy. If another launch happens, focus the
|
||||||
|
|||||||
@@ -1100,6 +1100,7 @@
|
|||||||
Making every focusable text field exactly 16px is the only reliable prevention — and it's belt-and-
|
Making every focusable text field exactly 16px is the only reliable prevention — and it's belt-and-
|
||||||
suspenders for the native app too. autoGrow's empty-guard keeps the composer at one line despite this. */
|
suspenders for the native app too. autoGrow's empty-guard keeps the composer at one line despite this. */
|
||||||
.composer-row input, .composer-row textarea, input[type="text"], input[type="search"], input[type="email"], input[type="tel"], input[type="url"], input[type="password"], input[type="number"], input:not([type]), textarea, select{font-size:16px;}
|
.composer-row input, .composer-row textarea, input[type="text"], input[type="search"], input[type="email"], input[type="tel"], input[type="url"], input[type="password"], input[type="number"], input:not([type]), textarea, select{font-size:16px;}
|
||||||
|
.lightbox .lb-zoom{display:none;} /* mobile: pinch-to-zoom the image directly — the on-screen +/- buttons are redundant clutter */
|
||||||
/* Native-style push/pop: the conversation slides in from the right when opened and slides back out
|
/* Native-style push/pop: the conversation slides in from the right when opened and slides back out
|
||||||
when you go back, so navigation has a clear direction (like Teams/WhatsApp). */
|
when you go back, so navigation has a clear direction (like Teams/WhatsApp). */
|
||||||
/* Native-style push/pop (like iOS/Teams): the conversation (.content) slides in from the right while
|
/* Native-style push/pop (like iOS/Teams): the conversation (.content) slides in from the right while
|
||||||
@@ -1151,7 +1152,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script src="/icons.js?v=6"></script>
|
<script src="/icons.js?v=6"></script>
|
||||||
<script>window.__BUILD='2026-07-19-batch132';console.log('%cBiz Connect','color:#1F3B73;font-weight:bold','build '+window.__BUILD);
|
<script>window.__BUILD='2026-07-19-batch133';console.log('%cBiz Connect','color:#1F3B73;font-weight:bold','build '+window.__BUILD);
|
||||||
// Emoji are rendered with the OS's own (colour) emoji font — instant, zero network.
|
// Emoji are rendered with the OS's own (colour) emoji font — instant, zero network.
|
||||||
//
|
//
|
||||||
// We used to run Twemoji over every emoji, which swapped each one for an <img> pulled INDIVIDUALLY from
|
// We used to run Twemoji over every emoji, which swapped each one for an <img> pulled INDIVIDUALLY from
|
||||||
@@ -2892,7 +2893,7 @@ async function openConvo(kind,id){
|
|||||||
inpEl.addEventListener('paste', onPaste);
|
inpEl.addEventListener('paste', onPaste);
|
||||||
inpEl.addEventListener('input', ()=>{ maybeAutocorrect(inpEl); autoGrow(inpEl); setDraft(kind,id,inpEl.value); noteTyping(); }); // auto-correct common typos, keep the draft in sync + emit "typing…"
|
inpEl.addEventListener('input', ()=>{ maybeAutocorrect(inpEl); autoGrow(inpEl); setDraft(kind,id,inpEl.value); noteTyping(); }); // auto-correct common typos, keep the draft in sync + emit "typing…"
|
||||||
inpEl.addEventListener('blur', ()=>{ stopTyping(); setTimeout(()=>{ const a=document.activeElement; const stillTyping=a&&(a.tagName==='TEXTAREA'||a.tagName==='INPUT'); if(!stillTyping && window.__bzResetKb) window.__bzResetKb(); }, 120); }); // #1: composer lost focus → keyboard is closing → drop the --kb lift so no empty gap remains
|
inpEl.addEventListener('blur', ()=>{ stopTyping(); setTimeout(()=>{ const a=document.activeElement; const stillTyping=a&&(a.tagName==='TEXTAREA'||a.tagName==='INPUT'); if(!stillTyping && window.__bzResetKb) window.__bzResetKb(); }, 120); }); // #1: composer lost focus → keyboard is closing → drop the --kb lift so no empty gap remains
|
||||||
inpEl.addEventListener('keydown', (e)=>{ if(e.key==='Enter' && !e.shiftKey){ if(mentionItems && mentionItems.length) return; e.preventDefault(); sendMessage(); } }); // Enter sends, Shift+Enter = newline
|
inpEl.addEventListener('keydown', (e)=>{ if(e.key==='Enter' && !e.shiftKey && !isMobileUA()){ if(mentionItems && mentionItems.length) return; e.preventDefault(); sendMessage(); } }); // Desktop: Enter sends, Shift+Enter = newline. Mobile: the Return key inserts a newline (default) — you send with the send button, like every native chat app.
|
||||||
// Desktop: LEFT-click a red-squiggled word → native spelling suggestions right there (the shell
|
// Desktop: LEFT-click a red-squiggled word → native spelling suggestions right there (the shell
|
||||||
// pops a suggestions menu only if the clicked word is actually misspelled). No right-click needed.
|
// pops a suggestions menu only if the clicked word is actually misspelled). No right-click needed.
|
||||||
if(window.bizConnectNative && window.bizConnectNative.spellSuggestAt){
|
if(window.bizConnectNative && window.bizConnectNative.spellSuggestAt){
|
||||||
|
|||||||
Reference in New Issue
Block a user