1+ let edit_url = new URL ( document . URL ) ;
2+ chat_id = edit_url . searchParams . get ( 'chat_id' ) ?. trim ( ) ;
3+ let chat_data = localStorage . getItem ( chat_id ) ;
4+ let form_ele = document . createElement ( 'div' ) ;
5+ form_ele . id = 'my_form' ;
6+ let edit_task = document . querySelector ( '#edit_task' ) ;
7+
8+ if ( chat_data ) {
9+ chat_data = JSON . parse ( chat_data ) ;
10+ let txt_area , delete_btn , block ;
11+ let idx = 0 ;
12+ chat_data . messages . forEach ( data => {
13+ block = document . createElement ( 'div' ) ;
14+ block . innerHTML = data . role + ":" ;
15+ block . classList . add ( 'block' ) ;
16+ txt_area = document . createElement ( 'textarea' ) ;
17+ txt_area . oninput = ( ) => {
18+ document . querySelector ( "#save_changes" ) . classList . add ( 'save' )
19+ }
20+ delete_btn = document . createElement ( 'button' ) ;
21+ delete_btn . innerText = 'Delete' ;
22+ let part_id = idx ;
23+ let block_rm = block ;
24+ delete_btn . addEventListener ( 'click' , ( ) => {
25+ removeChatPart ( part_id , block_rm ) ;
26+ } )
27+ idx ++ ;
28+
29+ let tot_lines = data . content . match ( / \n / g) ?. length ?? 0 ;
30+ if ( tot_lines > 2 ) {
31+ let px = tot_lines * 16 ;
32+ if ( px > 90 ) {
33+ px = 90 ;
34+ }
35+ txt_area . style . height = `${ px } px` ;
36+ }
37+ txt_area . value = data . content ;
38+ txt_area . setAttribute ( 'data-role' , data . role ) ;
39+ block . appendChild ( txt_area ) ;
40+ block . append ( delete_btn ) ;
41+ form_ele . append ( block )
42+ } )
43+ edit_task . append ( form_ele )
44+
45+ } else {
46+ console . log ( 'no chat data' )
47+ }
48+
49+ function removeChatPart ( id , block ) {
50+ block . remove ( ) ;
51+ chat_data . messages . splice ( id , 1 ) ;
52+ localStorage . setItem ( chat_id , JSON . stringify ( chat_data ) ) ;
53+ }
54+
55+ function saveChanges ( ) {
56+ let all_inputs = document . querySelectorAll ( '#my_form textarea' ) ;
57+ let new_messages = [ ] ;
58+ all_inputs . forEach ( input => {
59+ if ( input . value . trim ( ) !== "" ) {
60+ let role = input . getAttribute ( 'data-role' ) ;
61+ let part = { 'role' : role , content : input . value } ;
62+ new_messages . push ( part ) ;
63+ }
64+ } )
65+ chat_data . messages = new_messages ;
66+ localStorage . setItem ( chat_id , JSON . stringify ( chat_data ) ) ;
67+ window . open ( '../../#' + chat_id , '_self' ) ;
68+
69+ }
70+
71+
72+ function addField ( ) {
73+ const all_textarea = document . querySelectorAll ( '#edit_task textarea' ) ;
74+ const lastTextarea = all_textarea [ all_textarea . length - 1 ] ;
75+ let role = 'user' ;
76+ if ( lastTextarea . getAttribute ( 'data-role' ) === 'user' ) {
77+ role = 'assistant' ;
78+ }
79+ let ta , del_button , div_block ;
80+ let idx = chat_data . messages . length - 1 ;
81+ div_block = document . createElement ( 'div' ) ;
82+ div_block . innerHTML = role + ":" ;
83+ div_block . classList . add ( 'block' ) ;
84+ ta = document . createElement ( 'textarea' ) ;
85+ ta . oninput = ( ) => {
86+ document . querySelector ( "#save_changes" ) . classList . add ( 'save' )
87+ }
88+ del_button = document . createElement ( 'button' ) ;
89+ del_button . innerText = 'Delete' ;
90+ let part_id = idx ;
91+ del_button . addEventListener ( 'click' , ( ) => {
92+ removeChatPart ( part_id , div_block ) ;
93+ } )
94+ idx ++ ;
95+
96+ ta . setAttribute ( 'data-role' , role ) ;
97+ div_block . appendChild ( ta ) ;
98+ div_block . append ( del_button ) ;
99+ form_ele . append ( div_block )
100+ ta . scrollIntoView ( ) ;
101+ }
0 commit comments