@@ -318,9 +318,76 @@ class AddonViews extends AddonBase {
318318 ) ;
319319 } ) ;
320320 } ) ;
321+
322+ let updateButton = _window . document . getElementById ( "update-note-link" ) ;
323+ if ( updateButton ) {
324+ updateButton . remove ( ) ;
325+ }
326+ updateButton = _window . document . createElement ( "button" ) ;
327+ updateButton . setAttribute ( "id" , "update-note-link" ) ;
328+ updateButton . setAttribute (
329+ "title" ,
330+ `Update Linked Note: ${ note . getNoteTitle ( ) } `
331+ ) ;
332+ updateButton . innerHTML = `<svg t="1652685521153" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7063" width="16" height="16"><path d="M271.914667 837.418667C182.314667 756.522667 128 637.653333 128 508.714667 128 304.896 263.338667 129.834667 450.986667 85.333333L469.333333 170.026667c-150.016 35.584-258.304 175.658667-258.304 338.688 0 106.069333 45.866667 203.562667 121.258667 268.373333L426.666667 682.666667v256H170.666667l101.248-101.248zM727.082667 168.917333C831.530667 249.045333 896 377.088 896 517.077333c0 202.922667-135.338667 377.258667-322.986667 421.589334L554.666667 854.357333c150.016-35.456 258.304-174.933333 258.304-337.322666 0-117.12-56.405333-223.786667-146.901334-287.146667L554.666667 341.333333V85.333333h256l-83.584 83.584z" p-id="7064"></path></svg>` ;
333+ updateButton . addEventListener ( "click" , async ( e ) => {
334+ Zotero . debug ( "Update Linked Note" ) ;
335+ const noteLines = this . _Addon . knowledge . getLinesInNote ( ) ;
336+ let line = noteLines [ this . _Addon . knowledge . currentLine ] ;
337+ Zotero . debug ( line ) ;
338+
339+ let linkStart = line . search ( / < a / g) ;
340+ let linkEnd = line . search ( / < \/ a > / g) + 4 ;
341+ let beforeLink = line . slice ( 0 , linkStart ) ;
342+ let afterLink = line . slice ( linkEnd ) ;
343+ let linkPart = line . slice ( linkStart , linkEnd ) ;
344+ let link = this . _Addon . knowledge . getLinkFromText ( linkPart ) ;
345+ let currentNote : ZoteroItem ;
346+ Zotero . debug ( link ) ;
347+ if ( link ) {
348+ currentNote = ( await this . _Addon . knowledge . getNoteFromLink ( link ) )
349+ . item ;
350+ }
351+
352+ while (
353+ linkPart &&
354+ ( ! link || ! currentNote || currentNote . id !== note . id )
355+ ) {
356+ line = afterLink ;
357+ beforeLink = beforeLink + linkPart ;
358+ line = afterLink ;
359+
360+ linkStart = line . search ( / < a / g) ;
361+ linkEnd = line . search ( / < \/ a > / g) + 4 ;
362+ beforeLink = beforeLink + line . slice ( 0 , linkStart ) ;
363+ afterLink = line . slice ( linkEnd ) ;
364+ linkPart = line . slice ( linkStart , linkEnd ) ;
365+ link = this . _Addon . knowledge . getLinkFromText ( linkPart ) ;
366+ if ( link ) {
367+ currentNote = ( await this . _Addon . knowledge . getNoteFromLink ( link ) )
368+ . item ;
369+ }
370+ Zotero . debug ( "----" ) ;
371+ Zotero . debug ( link ) ;
372+ Zotero . debug ( linkPart ) ;
373+ }
374+ if ( ! linkPart ) {
375+ return ;
376+ }
377+ beforeLink = beforeLink + linkPart . slice ( 0 , linkPart . search ( / > / ) + 1 ) ;
378+ afterLink = "</a>" + afterLink ;
379+ const newLine = `${ beforeLink } ${ currentNote . getNoteTitle ( ) } ${ afterLink } ` ;
380+ Zotero . debug ( newLine ) ;
381+ noteLines [ this . _Addon . knowledge . currentLine ] = newLine ;
382+
383+ this . _Addon . knowledge . setLinesToNote ( undefined , noteLines ) ;
384+ this . _Addon . knowledge . scrollWithRefresh (
385+ this . _Addon . knowledge . currentLine
386+ ) ;
387+ } ) ;
321388 _window . document
322389 . getElementsByClassName ( "link-popup" ) [ 0 ]
323- . appendChild ( insertButton ) ;
390+ . append ( insertButton , updateButton ) ;
324391 }
325392 }
326393
0 commit comments