[wip] Open reasoning editor
| @@ -6265,6 +6265,9 @@ | |||
| 6265 | <summary class="mes_reasoning_summary"> | 6265 | <summary class="mes_reasoning_summary"> |
| 6266 | <span data-i18n="Reasoning">Reasoning</span> | 6266 | <span data-i18n="Reasoning">Reasoning</span> |
| 6267 | <div class="mes_reasoning_actions"> | 6267 | <div class="mes_reasoning_actions"> |
| 6268 | <div class="mes_reasoning_edit_done mes_button fa-solid fa-check" title="Confirm" data-i18n="[title]Confirmedit"></div> | ||
| 6269 | <div class="mes_reasoning_edit_cancel mes_button fa-solid fa-xmark" title="Cancel edit" data-i18n="[title]Cancel edit"></div> | ||
| 6270 | <div class="mes_reasoning_edit mes_button fa-solid fa-pencil" title="Edit reasoning" data-i18n="[title]Edit reasoning"></div> | ||
| 6268 | <div class="mes_reasoning_copy mes_button fa-solid fa-copy" title="Copy reasoning" data-i18n="[title]Copy reasoning"></div> | 6271 | <div class="mes_reasoning_copy mes_button fa-solid fa-copy" title="Copy reasoning" data-i18n="[title]Copy reasoning"></div> |
| 6269 | <div class="mes_reasoning_delete mes_button fa-solid fa-trash-can" title="Remove reasoning" data-i18n="[title]Remove reasoning"></div> | 6272 | <div class="mes_reasoning_delete mes_button fa-solid fa-trash-can" title="Remove reasoning" data-i18n="[title]Remove reasoning"></div> |
| 6270 | </div> | 6273 | </div> |
| @@ -11274,7 +11274,7 @@ jQuery(async function () { | |||
| 11274 | 11274 | ||
| 11275 | $(document).keyup(function (e) { | 11275 | $(document).keyup(function (e) { |
| 11276 | if (e.key === 'Escape') { | 11276 | if (e.key === 'Escape') { |
| 11277 | const isEditVisible = $('#curEditTextarea').is(':visible'); | 11277 | const isEditVisible = $('#curEditTextarea').is(':visible') || $('.reasoning_edit_textarea').length; |
| 11278 | if (isEditVisible && power_user.auto_save_msg_edits === false) { | 11278 | if (isEditVisible && power_user.auto_save_msg_edits === false) { |
| 11279 | closeMessageEditor(); | 11279 | closeMessageEditor(); |
| 11280 | $('#send_textarea').focus(); | 11280 | $('#send_textarea').focus(); |
| @@ -1474,6 +1474,18 @@ export class PromptReasoning { | |||
| 1474 | } | 1474 | } |
| 1475 | 1475 | ||
| 1476 | jQuery(function () { | 1476 | jQuery(function () { |
| 1477 | /** | ||
| 1478 | * Gets a message from a jQuery element. | ||
| 1479 | * @param {Element} element | ||
| 1480 | * @returns {{messageId: number, message: object, messageBlock: JQuery<HTMLElement>}} | ||
| 1481 | */ | ||
| 1482 | const getMessageFromJquery = function (element) { | ||
| 1483 | const messageBlock = $(element).closest('.mes'); | ||
| 1484 | const messageId = Number(messageBlock.attr('mesid')); | ||
| 1485 | const message = chat[messageId]; | ||
| 1486 | return { messageId: messageId, message, messageBlock }; | ||
| 1487 | }; | ||
| 1488 | |||
| 1477 | $(document).on('click', '.mes_hide', async function () { | 1489 | $(document).on('click', '.mes_hide', async function () { |
| 1478 | const messageBlock = $(this).closest('.mes'); | 1490 | const messageBlock = $(this).closest('.mes'); |
| 1479 | const messageId = Number(messageBlock.attr('mesid')); | 1491 | const messageId = Number(messageBlock.attr('mesid')); |
| @@ -1629,11 +1641,25 @@ jQuery(function () { | |||
| 1629 | e.preventDefault(); | 1641 | e.preventDefault(); |
| 1630 | }); | 1642 | }); |
| 1631 | 1643 | ||
| 1644 | $(document).on('click', '.mes_reasoning_edit', function (e) { | ||
| 1645 | e.stopPropagation(); | ||
| 1646 | e.preventDefault(); | ||
| 1647 | const { message, messageBlock } = getMessageFromJquery(this); | ||
| 1648 | if (!message?.extra) { | ||
| 1649 | return; | ||
| 1650 | } | ||
| 1651 | |||
| 1652 | const reasoning = message?.extra?.reasoning; | ||
| 1653 | const textarea = document.createElement('textarea'); | ||
| 1654 | const reasoningBlock = messageBlock.find('.mes_reasoning'); | ||
| 1655 | textarea.classList.add('reasoning_edit_textarea'); | ||
| 1656 | textarea.value = reasoning === PromptReasoning.REASONING_PLACEHOLDER ? '' : reasoning; | ||
| 1657 | $(textarea).insertBefore(reasoningBlock); | ||
| 1658 | }); | ||
| 1659 | |||
| 1632 | $(document).on('click', '.mes_edit_add_reasoning', async function () { | 1660 | $(document).on('click', '.mes_edit_add_reasoning', async function () { |
| 1633 | const mesBlock = $(this).closest('.mes'); | 1661 | const { message, messageId } = getMessageFromJquery(this); |
| 1634 | const mesId = Number(mesBlock.attr('mesid')); | 1662 | if (!message?.extra) { |
| 1635 | const message = chat[mesId]; | ||
| 1636 | if (!message?.extra){ | ||
| 1637 | return; | 1663 | return; |
| 1638 | } | 1664 | } |
| 1639 | 1665 | ||
| @@ -1645,7 +1671,7 @@ jQuery(function () { | |||
| 1645 | message.extra.reasoning = PromptReasoning.REASONING_PLACEHOLDER; | 1671 | message.extra.reasoning = PromptReasoning.REASONING_PLACEHOLDER; |
| 1646 | await saveChatConditional(); | 1672 | await saveChatConditional(); |
| 1647 | closeMessageEditor(); | 1673 | closeMessageEditor(); |
| 1648 | updateMessageBlock(mesId, message); | 1674 | updateMessageBlock(messageId, message); |
| 1649 | }); | 1675 | }); |
| 1650 | 1676 | ||
| 1651 | $(document).on('click', '.mes_reasoning_delete', async function (e) { | 1677 | $(document).on('click', '.mes_reasoning_delete', async function (e) { |
| @@ -1658,21 +1684,17 @@ jQuery(function () { | |||
| 1658 | return; | 1684 | return; |
| 1659 | } | 1685 | } |
| 1660 | 1686 | ||
| 1661 | const mesBlock = $(this).closest('.mes'); | 1687 | const { message, messageId } = getMessageFromJquery(this); |
| 1662 | const mesId = Number(mesBlock.attr('mesid')); | 1688 | if (!message?.extra) { |
| 1663 | const message = chat[mesId]; | ||
| 1664 | if (!message?.extra){ | ||
| 1665 | return; | 1689 | return; |
| 1666 | } | 1690 | } |
| 1667 | message.extra.reasoning = ''; | 1691 | message.extra.reasoning = ''; |
| 1668 | await saveChatConditional(); | 1692 | await saveChatConditional(); |
| 1669 | updateMessageBlock(mesId, message); | 1693 | updateMessageBlock(messageId, message); |
| 1670 | }); | 1694 | }); |
| 1671 | 1695 | ||
| 1672 | $(document).on('pointerup', '.mes_reasoning_copy', async function () { | 1696 | $(document).on('pointerup', '.mes_reasoning_copy', async function () { |
| 1673 | const mesBlock = $(this).closest('.mes'); | 1697 | const { message } = getMessageFromJquery(this); |
| 1674 | const mesId = Number(mesBlock.attr('mesid')); | ||
| 1675 | const message = chat[mesId]; | ||
| 1676 | const reasoning = message?.extra?.reasoning; | 1698 | const reasoning = message?.extra?.reasoning; |
| 1677 | 1699 | ||
| 1678 | if (!reasoning) { | 1700 | if (!reasoning) { |
| @@ -353,9 +353,18 @@ input[type='checkbox']:focus-visible { | |||
| 353 | .mes_reasoning_summary { | 353 | .mes_reasoning_summary { |
| 354 | cursor: pointer; | 354 | cursor: pointer; |
| 355 | position: relative; | 355 | position: relative; |
| 356 | margin: 2px; | ||
| 356 | } | 357 | } |
| 357 | 358 | ||
| 358 | .mes_reasoning_details:not([open]) .mes_reasoning_actions { | 359 | .mes_bias:empty, |
| 360 | .mes_reasoning:empty, | ||
| 361 | .mes_reasoning_details:has(.mes_reasoning:empty), | ||
| 362 | .mes_block:has(.edit_textarea) .mes_reasoning_details, | ||
| 363 | .mes_reasoning_details:not([open]) .mes_reasoning_actions, | ||
| 364 | .mes_reasoning_details:has(.reasoning_edit_textarea) .mes_reasoning, | ||
| 365 | .mes_reasoning_details:not(:has(.reasoning_edit_textarea)) .mes_reasoning_actions .mes_button.mes_reasoning_edit_done, | ||
| 366 | .mes_reasoning_details:not(:has(.reasoning_edit_textarea)) .mes_reasoning_actions .mes_button.mes_reasoning_edit_cancel, | ||
| 367 | .mes_reasoning_details:has(.reasoning_edit_textarea) .mes_reasoning_actions .mes_button:not(.mes_reasoning_edit_done, .mes_reasoning_edit_cancel) { | ||
| 359 | display: none; | 368 | display: none; |
| 360 | } | 369 | } |
| 361 | 370 | ||
| @@ -373,21 +382,14 @@ input[type='checkbox']:focus-visible { | |||
| 373 | padding: 1px; | 382 | padding: 1px; |
| 374 | } | 383 | } |
| 375 | 384 | ||
| 376 | .mes_reasoning_summary > span { | 385 | .mes_reasoning_summary>span { |
| 377 | margin-left: 0.5em; | 386 | margin-left: 0.5em; |
| 378 | } | 387 | } |
| 379 | 388 | ||
| 380 | .mes_reasoning_details:has(.mes_reasoning:empty), | ||
| 381 | .mes_block:has(.edit_textarea) .mes_reasoning_details, | ||
| 382 | .mes_bias:empty, | ||
| 383 | .mes_reasoning:empty { | ||
| 384 | display: none; | ||
| 385 | } | ||
| 386 | |||
| 387 | .mes_text i, | 389 | .mes_text i, |
| 388 | .mes_text em, | 390 | .mes_text em, |
| 389 | .mes_reasoning i, | 391 | .mes_reasoning i, |
| 390 | .mes_reasoning em { | 392 | .mes_reasoning em { |
| 391 | color: var(--SmartThemeEmColor); | 393 | color: var(--SmartThemeEmColor); |
| 392 | } | 394 | } |
| 393 | 395 | ||
| @@ -408,7 +410,7 @@ input[type='checkbox']:focus-visible { | |||
| 408 | .mes_reasoning font[color] em, | 410 | .mes_reasoning font[color] em, |
| 409 | .mes_reasoning font[color] i, | 411 | .mes_reasoning font[color] i, |
| 410 | .mes_reasoning font[color] u, | 412 | .mes_reasoning font[color] u, |
| 411 | .mes_reasoning font[color] q { | 413 | .mes_reasoning font[color] q { |
| 412 | color: inherit; | 414 | color: inherit; |
| 413 | } | 415 | } |
| 414 | 416 | ||
| @@ -4213,10 +4215,12 @@ input[type="range"]::-webkit-slider-thumb { | |||
| 4213 | align-items: center; | 4215 | align-items: center; |
| 4214 | } | 4216 | } |
| 4215 | 4217 | ||
| 4218 | .mes_reasoning_edit_cancel, | ||
| 4216 | .mes_edit_cancel.menu_button { | 4219 | .mes_edit_cancel.menu_button { |
| 4217 | background-color: var(--crimson70a); | 4220 | background-color: var(--crimson70a); |
| 4218 | } | 4221 | } |
| 4219 | 4222 | ||
| 4223 | .mes_reasoning_edit_done, | ||
| 4220 | .mes_edit_done.menu_button { | 4224 | .mes_edit_done.menu_button { |
| 4221 | background-color: var(--okGreen70a); | 4225 | background-color: var(--okGreen70a); |
| 4222 | } | 4226 | } |
| @@ -4225,6 +4229,7 @@ input[type="range"]::-webkit-slider-thumb { | |||
| 4225 | opacity: 1; | 4229 | opacity: 1; |
| 4226 | } | 4230 | } |
| 4227 | 4231 | ||
| 4232 | .reasoning_edit_textarea, | ||
| 4228 | .edit_textarea { | 4233 | .edit_textarea { |
| 4229 | padding: 5px; | 4234 | padding: 5px; |
| 4230 | margin: 0; | 4235 | margin: 0; |