@@ -564,6 +564,17 @@ function getCompletedItemIds(elementTarget) {
564564 . filter ( ( value ) => ! Number . isNaN ( value ) ) ;
565565}
566566
567+ function getSelectedItemIds ( elementTarget ) {
568+ const hiddenInput = elementTarget . querySelector ( '.selected-item-ids' ) ;
569+ if ( ! hiddenInput || ! hiddenInput . value ) {
570+ return [ ] ;
571+ }
572+ return hiddenInput . value
573+ . split ( ',' )
574+ . map ( ( value ) => parseInt ( value . trim ( ) , 10 ) )
575+ . filter ( ( value ) => ! Number . isNaN ( value ) ) ;
576+ }
577+
567578function getTaskMetaValue ( elementTarget , selector ) {
568579 const node = elementTarget . querySelector ( selector ) ;
569580 return node ? node . value : '' ;
@@ -574,17 +585,26 @@ function getRelatedCompletedItemIds(elementTarget, taskName) {
574585 return [ ] ;
575586 }
576587
577- const allCompletedTaskNodes = document . querySelectorAll ( '.content-container.revertButton' ) ;
578- const aggregatedIds = new Set ( ) ;
588+ const currentTaskRecordedIds = new Set ( getSelectedItemIds ( elementTarget ) ) ;
589+ const allTaskNodes = document . querySelectorAll ( '.content-container' ) ;
590+ const aggregatedIds = new Set ( getCompletedItemIds ( elementTarget ) ) ;
591+
592+ allTaskNodes . forEach ( ( taskNode ) => {
593+ if ( taskNode === elementTarget ) {
594+ return ;
595+ }
579596
580- allCompletedTaskNodes . forEach ( ( taskNode ) => {
581597 const taskNameNode = taskNode . querySelector ( '.task-name' ) ;
582598 if ( ! taskNameNode || taskNameNode . value !== taskName ) {
583599 return ;
584600 }
585601
586602 const itemIds = getCompletedItemIds ( taskNode ) ;
587- itemIds . forEach ( ( itemId ) => aggregatedIds . add ( itemId ) ) ;
603+ itemIds . forEach ( ( itemId ) => {
604+ if ( ! currentTaskRecordedIds . has ( itemId ) ) {
605+ aggregatedIds . add ( itemId ) ;
606+ }
607+ } ) ;
588608 } ) ;
589609
590610 return Array . from ( aggregatedIds ) ;
@@ -820,9 +840,10 @@ function openTaskActionModal(options) {
820840 normalizedItemIds . forEach ( ( itemId ) => {
821841 const isRecorded = selectedItemIds . has ( itemId ) ;
822842 const isRelatedRecorded = relatedCompletedIds . has ( itemId ) ;
823- const isObtained = isRecorded || isRelatedRecorded ;
843+ const isRelatedOnly = ! isRecorded && isRelatedRecorded ;
844+ const isObtained = isRecorded || isRelatedOnly ;
824845 const image = document . createElement ( 'img' ) ;
825- image . className = `task-action-item ${ isObtained ? 'task-action-item-active' : 'task-action-item-muted ' } ${ isRecorded ? 'task-action-item-selected' : '' } ` ;
846+ image . className = `task-action-item ${ isObtained ? '' : ' task-action-item-muted' } ${ isRelatedOnly ? 'task-action-item-active' : ' '} ${ isRecorded ? 'task-action-item-selected' : '' } ` ;
826847 attachFallbackImage ( image , '/static/clog.png' ) ;
827848 image . src = `https://static.runelite.net/cache/item/icon/${ itemId } .png` ;
828849 image . alt = `Item ${ itemId } ` ;
@@ -902,7 +923,7 @@ $(document).ready(function(){
902923 var elementTarget = this ;
903924 var parent = elementTarget . parentElement ;
904925 const verificationItemIds = getVerificationItemIds ( elementTarget ) ;
905- const completedItemIds = getCompletedItemIds ( elementTarget ) ;
926+ const completedItemIds = getSelectedItemIds ( elementTarget ) ;
906927 const taskName = getTaskMetaValue ( elementTarget , '.task-name' ) ;
907928 const relatedCompletedItemIds = getRelatedCompletedItemIds ( elementTarget , taskName ) ;
908929 const taskTip = getTaskMetaValue ( elementTarget , '.task-tip' ) ;
@@ -943,10 +964,17 @@ $(document).ready(function(){
943964 taskTextNodes [ 1 ] . textContent = formatUserDateTime ( data . completedAtISO ) ;
944965 taskTextNodes [ 1 ] . setAttribute ( 'data-completed-at' , data . completedAtISO || '' ) ;
945966 }
946- const completedIdsNode = elementTarget . querySelector ( '.completed-item-ids' ) ;
947- if ( completedIdsNode ) {
967+ const selectedIdsNode = elementTarget . querySelector ( '.selected-item-ids' ) ;
968+ if ( selectedIdsNode ) {
969+ const returnedIds = Array . isArray ( data . completedItemIds ) ? data . completedItemIds : [ ] ;
970+ selectedIdsNode . value = returnedIds . join ( ',' ) ;
971+ }
972+ const relatedIdsNode = elementTarget . querySelector ( '.completed-item-ids' ) ;
973+ if ( relatedIdsNode ) {
974+ const existingRelatedIds = getCompletedItemIds ( elementTarget ) ;
948975 const returnedIds = Array . isArray ( data . completedItemIds ) ? data . completedItemIds : [ ] ;
949- completedIdsNode . value = returnedIds . join ( ',' ) ;
976+ const mergedIds = Array . from ( new Set ( existingRelatedIds . concat ( returnedIds ) ) ) . sort ( ( a , b ) => a - b ) ;
977+ relatedIdsNode . value = mergedIds . join ( ',' ) ;
950978 }
951979 if ( tier === 'bossPets' || tier === 'skillPets' || tier === 'otherPets' ) {
952980 updatePercent . innerHTML = data [ "allPets" ] + '%' ;
@@ -986,7 +1014,7 @@ $(document).ready(function(){
9861014 var elementTarget = this ;
9871015 var parent = elementTarget . parentElement ;
9881016 const verificationItemIds = getVerificationItemIds ( elementTarget ) ;
989- const completedItemIds = getCompletedItemIds ( elementTarget ) ;
1017+ const completedItemIds = getSelectedItemIds ( elementTarget ) ;
9901018 const taskName = getTaskMetaValue ( elementTarget , '.task-name' ) ;
9911019 const relatedCompletedItemIds = getRelatedCompletedItemIds ( elementTarget , taskName ) ;
9921020 const taskTip = getTaskMetaValue ( elementTarget , '.task-tip' ) ;
@@ -1028,10 +1056,10 @@ $(document).ready(function(){
10281056 taskTextNodes [ 1 ] . textContent = formatUserDateTime ( data . completedAtISO ) ;
10291057 taskTextNodes [ 1 ] . setAttribute ( 'data-completed-at' , data . completedAtISO || '' ) ;
10301058 }
1031- const completedIdsNode = elementTarget . querySelector ( '.completed -item-ids' ) ;
1032- if ( completedIdsNode ) {
1059+ const selectedIdsNode = elementTarget . querySelector ( '.selected -item-ids' ) ;
1060+ if ( selectedIdsNode ) {
10331061 const returnedIds = Array . isArray ( data . completedItemIds ) ? data . completedItemIds : [ ] ;
1034- completedIdsNode . value = returnedIds . join ( ',' ) ;
1062+ selectedIdsNode . value = returnedIds . join ( ',' ) ;
10351063 }
10361064 if ( tier === 'bossPets' || tier === 'skillPets' || tier === 'otherPets' ) {
10371065 updatePercent . innerHTML = data [ "allPets" ] + '%' ;
@@ -1073,9 +1101,9 @@ $(document).ready(function(){
10731101 taskTextNodes [ 1 ] . textContent = '--/--/---- --:--' ;
10741102 taskTextNodes [ 1 ] . setAttribute ( 'data-completed-at' , '' ) ;
10751103 }
1076- const completedIdsNode = elementTarget . querySelector ( '.completed -item-ids' ) ;
1077- if ( completedIdsNode ) {
1078- completedIdsNode . value = '' ;
1104+ const selectedIdsNode = elementTarget . querySelector ( '.selected -item-ids' ) ;
1105+ if ( selectedIdsNode ) {
1106+ selectedIdsNode . value = '' ;
10791107 }
10801108 if ( tier === 'bossPets' || tier === 'skillPets' || tier === 'otherPets' ) {
10811109 updatePercent . innerHTML = data [ "allPets" ] + '%' ;
0 commit comments