Skip to content

Commit 05bda29

Browse files
committed
better version of last
1 parent 6e1926e commit 05bda29

File tree

3 files changed

+55
-82
lines changed

3 files changed

+55
-82
lines changed

src/wwwroot/js/genpage/gentab/prompttools.js

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -171,43 +171,8 @@ class PromptTabCompleteClass {
171171
this.prefixes[name] = { name, description: data.description, completer: data.completer, selfStanding: data.selfStanding, isAlt: true };
172172
}
173173

174-
getPromptText(box) {
175-
if (box.tagName == 'TEXTAREA') {
176-
return box.value;
177-
}
178-
return box.innerText;
179-
}
180-
181-
setPromptText(box, text) {
182-
if (box.tagName == 'TEXTAREA') {
183-
box.value = text;
184-
}
185-
else {
186-
box.innerText = text;
187-
}
188-
}
189-
190-
setPromptSelRange(box, start, end) {
191-
if (box.tagName == 'TEXTAREA') {
192-
box.selectionStart = start;
193-
box.selectionEnd = end;
194-
}
195-
else {
196-
setSelectionRange(box, start, end);
197-
}
198-
}
199-
200-
getPromptSelRange(box) {
201-
if (box.tagName == 'TEXTAREA') {
202-
return [box.selectionStart, box.selectionEnd];
203-
}
204-
let start = getCurrentCursorPosition(box.id, false);
205-
let end = getCurrentCursorPosition(box.id, true);
206-
return [start, end];
207-
}
208-
209174
getPromptBeforeCursor(box) {
210-
return this.getPromptText(box).substring(0, this.getPromptSelRange(box)[0]);
175+
return getTextContent(box).substring(0, getTextSelRange(box)[0]);
211176
}
212177

213178
findLastWordIndex(text) {
@@ -410,9 +375,9 @@ class PromptTabCompleteClass {
410375
if (isClickable) {
411376
button.action = () => {
412377
let areaPre = prompt.substring(0, index);
413-
let areaPost = this.getPromptText(box).substring(this.getPromptSelRange(box)[0]);
414-
this.setPromptText(box, areaPre + apply + areaPost);
415-
this.setPromptSelRange(box, areaPre.length + apply.length, areaPre.length + apply.length);
378+
let areaPost = getTextContent(box).substring(getTextSelRange(box)[0]);
379+
setTextContent(box, areaPre + apply + areaPost);
380+
setTextSelRange(box, areaPre.length + apply.length, areaPre.length + apply.length);
416381
box.focus();
417382
box.dispatchEvent(new Event('input'));
418383
};
@@ -547,7 +512,7 @@ class PromptPlusButton {
547512
text += ' <';
548513
}
549514
this.altTextBox.value = text;
550-
this.setPromptSelRange(this.altTextBox, this.altTextBox.value.length, this.altTextBox.value.length);
515+
setTextSelRange(this.altTextBox, this.altTextBox.value.length, this.altTextBox.value.length);
551516
this.altTextBox.focus();
552517
triggerChangeFor(this.altTextBox);
553518
}});

src/wwwroot/js/site.js

Lines changed: 11 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -296,41 +296,10 @@ function internalSiteJsGetUserSetting(name, defaultValue) {
296296
}
297297

298298
function textPromptAddKeydownHandler(elem) {
299-
let getValue = () => {
300-
if (elem.tagName == 'TEXTAREA') {
301-
return elem.value;
302-
}
303-
return elem.innerText;
304-
}
305-
let setValue = (text) => {
306-
if (elem.tagName == 'TEXTAREA') {
307-
elem.value = text;
308-
}
309-
else {
310-
elem.innerText = text;
311-
}
312-
}
313-
let setSelRange = (start, end) => {
314-
if (elem.tagName == 'TEXTAREA') {
315-
elem.selectionStart = start;
316-
elem.selectionEnd = end;
317-
}
318-
else {
319-
setSelectionRange(elem, start, end);
320-
}
321-
}
322-
let getSelRange = () => {
323-
if (elem.tagName == 'TEXTAREA') {
324-
return [elem.selectionStart, elem.selectionEnd];
325-
}
326-
let start = getCurrentCursorPosition(elem.id, false);
327-
let end = getCurrentCursorPosition(elem.id, true);
328-
return [start, end];
329-
}
330299
let shiftText = (up) => {
331-
let [selStart, selEnd] = getSelRange();
300+
let [selStart, selEnd] = getTextSelRange(elem);
332301
if (selStart == selEnd) {
333-
let simpleText = getValue();
302+
let simpleText = getTextContent(elem);
334303
for (let char of ['\n', '\t', ',', '.']) {
335304
simpleText = simpleText.replaceAll(char, ' ');
336305
}
@@ -349,7 +318,7 @@ function textPromptAddKeydownHandler(elem) {
349318
selEnd = simpleText.length;
350319
}
351320
}
352-
let text = getValue();
321+
let text = getTextContent(elem);
353322
let before = text.substring(0, selStart);
354323
let after = text.substring(selEnd);
355324
let mid = text.substring(selStart, selEnd);
@@ -397,18 +366,18 @@ function textPromptAddKeydownHandler(elem) {
397366
strength += up ? 0.1 : -0.1;
398367
strength = `${formatNumberClean(strength, 5)}`;
399368
if (strength == "1") {
400-
setValue(`${before}${mid}${after}`);
401-
setSelRange(before.length, before.length + mid.length);
369+
setTextContent(elem, `${before}${mid}${after}`);
370+
setTextSelRange(elem, before.length, before.length + mid.length);
402371
}
403372
else {
404-
setValue(`${before}(${mid}:${strength})${after}`);
405-
setSelRange(before.length + 1, before.length + mid.length + 1);
373+
setTextContent(elem, `${before}(${mid}:${strength})${after}`);
374+
setTextSelRange(elem, before.length + 1, before.length + mid.length + 1);
406375
}
407376
triggerChangeFor(elem);
408377
}
409378
let moveCommaSeparatedElement = (left) => {
410-
let [cursor, cursorEnd] = getSelRange();
411-
let parts = getValue().split(',');
379+
let [cursor, cursorEnd] = getTextSelRange(elem);
380+
let parts = getTextContent(elem).split(',');
412381
let textIndex = 0;
413382
let index = -1;
414383
for (let i = 0; i < parts.length; i++) {
@@ -439,8 +408,8 @@ function textPromptAddKeydownHandler(elem) {
439408
}
440409
newValue += parts[i];
441410
}
442-
setValue(newValue);
443-
setSelRange(newCursor, newCursor + (cursorEnd - cursor));
411+
setTextContent(elem, newValue);
412+
setTextSelRange(elem, newCursor, newCursor + (cursorEnd - cursor));
444413
triggerChangeFor(elem);
445414
}
446415
elem.addEventListener('keydown', (e) => {

src/wwwroot/js/util.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,45 @@ function getCurrentCursorPosition(parentId, getEnd = false) {
403403
return charCount;
404404
}
405405

406+
/** Returns the text content of the given element, compatible with both textareas and contenteditable spans. */
407+
function getTextContent(box) {
408+
if (box.tagName == 'TEXTAREA') {
409+
return box.value;
410+
}
411+
return box.innerText;
412+
}
413+
414+
/** Sets the text content of the given element, compatible with both textareas and contenteditable spans. */
415+
function setTextContent(box, text) {
416+
if (box.tagName == 'TEXTAREA') {
417+
box.value = text;
418+
}
419+
else {
420+
box.innerText = text;
421+
}
422+
}
423+
424+
/** Sets the selection range of the given element, compatible with both textareas and contenteditable spans. */
425+
function setTextSelRange(box, start, end) {
426+
if (box.tagName == 'TEXTAREA') {
427+
box.selectionStart = start;
428+
box.selectionEnd = end;
429+
}
430+
else {
431+
setSelectionRange(box, start, end);
432+
}
433+
}
434+
435+
/** Returns the selection range of the given element, compatible with both textareas and contenteditable spans. */
436+
function getTextSelRange(box) {
437+
if (box.tagName == 'TEXTAREA') {
438+
return [box.selectionStart, box.selectionEnd];
439+
}
440+
let start = getCurrentCursorPosition(box.id, false);
441+
let end = getCurrentCursorPosition(box.id, true);
442+
return [start, end];
443+
}
444+
406445
/** Downloads the data at the given URL and returns a 'data:whatever,base64:...' URL. */
407446
function toDataURL(url, callback) {
408447
var xhr = new XMLHttpRequest();

0 commit comments

Comments
 (0)