Changeset 38411 for main/trunk


Ignore:
Timestamp:
2023-11-20T21:13:41+13:00 (7 months ago)
Author:
anupama
Message:

Store the usercomments edits and deletes in a hashmap keyed by docid, as in theory we can make edits/deletes over multiple documents using the doc editor before rebuilding the collection. Another problem has surfaced: doing both deletes and edits to a doc before a single rebuild will shift metapos, as deletes are processed first before edits. Needs some thinking to optimally fix this.

Location:
main/trunk/greenstone3/web/interfaces/default/js
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/web/interfaces/default/js/documentedit_scripts_usercomments.js

    r38410 r38411  
    44// This function should return all the doc sections' (actually only root section's) usercomments data so that
    55// setArchivesMetadata can be called for root section and the entire collection rebuilt with the changes
    6 function getUserCommentsEditDataForSaving(userCommentsMetaFields, userCommentsRowsChanged) {   
    7     var docArray = [];
    8 
     6function getUserCommentsEditDataForSaving(userCommentsMetaFields, userCommentsRowsChanged) {
     7    // https://medium.com/@martin.crabtree/javascript-tracking-key-value-pairs-using-hashmaps-7de6df598257
     8    // Just using JS object. Not using Map in case it's not always compatible with older
     9    // browsers we still support on 32 bit linux.
     10    var docIDs_to_metatable_map = {};   
     11
     12   
    913    var i = 0;
    1014    for (i = 0; i < userCommentsRowsChanged.length; i++) {
     
    1519   
    1620    var metaval = changedElem.value; //changedElem.textContent; // gets orig value
    17     metaval = metaval.replace(/&nbsp;/g, " ");
     21    metaval = metaval.replace(/&nbsp;/g, " "); // copied from docedit_scripts_utl, when procsesing the array called changes.
    1822   
    1923    var currentElem = changedElem;
     
    3741    //alert("docid: " + docID + " metaname: " + metaname + " metaval: " + metaval + " metapos: " + metapos);
    3842
     43    // https://dmitripavlutin.com/check-if-object-has-property-javascript/
     44    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/null
     45    if(docIDs_to_metatable_map[docID] === undefined) {
     46        docIDs_to_metatable_map[docID] = [];       
     47    }
     48    docIDs_to_metatable_map[docID].push({metaname:metaname,metavalue:metaval,metapos:metapos});
     49    }
     50   
     51    var docids = Object.keys(docIDs_to_metatable_map);
     52    i = 0;
     53    var docArray = [];
     54    for(i = 0; i < docids.length; i++) {
     55    var docid = docids[i];
     56    var metatable = docIDs_to_metatable_map[docid];
    3957    docArray.push({
    40         docid:docID,
    41         metatable:[{metaname:metaname,metavalue:metaval,metapos:metapos}],
     58        docid:docid,
     59        metatable:metatable,
    4260        metamode:"override"
    4361    });
    4462    }
    45 
     63   
    4664    return docArray;
    4765}
     
    5068    cell = $(cell);
    5169    var doc_id = cell.attr("id").substring(6);
    52 //console.log("HERE I AM: id = " + doc_id);
    5370   
    5471    var edit_usercomments_table = document.getElementById("usercomments-"+doc_id);   
  • main/trunk/greenstone3/web/interfaces/default/js/documentedit_scripts_util.js

    r38410 r38411  
    445445    var metadataChanges = new Array();
    446446
    447     var delCommentsMetapositions = [];
     447    var docids_to_delCommentsMetapositions = {};
     448   
     449    //var delCommentsMetapositions = [];
    448450    var userCommentsMetaFields = [];
    449451    var _docid;
     
    451453    //addCollectionToBuild(collection);
    452454
    453     for(var i = 0; i < _deletedMetadata.length; i++) {
     455      var i;
     456    for(i = 0; i < _deletedMetadata.length; i++) {
    454457     
    455458      var currentRow = _deletedMetadata[i];
     
    471474        // get metapos; collumn names in first row are metanames
    472475        var metapos = currentRow.firstElementChild.textContent;
    473         delCommentsMetapositions.push(metapos);
     476        if(docids_to_delCommentsMetapositions[docID] === undefined) {
     477        docids_to_delCommentsMetapositions[docID] = [];
     478        }
     479        //delCommentsMetapositions.push(metapos);
     480        docids_to_delCommentsMetapositions[docID].push(metapos);
     481       
     482       
    474483        //console.log("docID : " + docID + " - metapos: " + metapos);
    475484    }
     
    492501    removeFromParent(currentRow);
    493502    }
     503
     504    var docids = Object.keys(docids_to_delCommentsMetapositions);
     505    var docArray = [];
     506    for(i = 0; i < docids.length; i++) { //if(docids.length > 0) {
     507      var _docid = docids[i];
     508      var delCommentsMetapositions = docids_to_delCommentsMetapositions[_docid];
     509     
    494510
    495511      // build up the data structure for all the usercomments to be deleted
     
    512528      var doc_rec = {
    513529          docid: _docid,
    514           metatable: [username_rec, timestamp_rec, comment_rec],
    515           //metamode: "accumulate"
     530          metatable: [username_rec, timestamp_rec, comment_rec]
    516531      };
    517    
    518       var docArray = [doc_rec];
    519       metadataChanges.push({type:'deleteUserComments', docID:docID, docArray:docArray});
    520       addCollectionToBuild(collection); 
     532
     533      docArray.push(doc_rec);   
    521534      }
     535    }
     536
     537    if(docArray.length > 0) {// or if(docids.length > 0)
     538    metadataChanges.push({type:'deleteUserComments', docArray:docArray});
     539    addCollectionToBuild(collection);
     540    }
     541    // clear used up vars https://bobbyhadz.com/blog/javascript-clear-object-delete-all-properties
     542    docArray = [];
     543    docids_to_delCommentsMetapositions = {};
     544    docids = [];
    522545  }
    523546
     
    611634    metadataChanges.push({type:'editUserComments',collection:collection,docArray:docArray});
    612635    addCollectionToBuild(collection);
     636    docArray = []; // clear it
    613637    }
    614638   
Note: See TracChangeset for help on using the changeset viewer.