Ignore:
Timestamp:
2022-04-14T17:13:54+12:00 (2 years ago)
Author:
davidb
Message:

Added support for TK Labels

File:
1 edited

Legend:

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

    r33544 r36145  
    166166    $.ajax(url);
    167167}
     168
     169var tkMetadataSetStatus = "needs-to-be-loaded";
     170var tkMetadataElements = null;
     171
     172
     173function addTKLabelToImage(labelName, definition, name, comment) {
     174   // lists of tkLabels and their corresponding codes, in order
     175   let tkLabels = ["Attribution","Clan","Family","MultipleCommunities","CommunityVoice","Creative","Verified","NonVerified","Seasonal","WomenGeneral","MenGeneral",
     176      "MenRestricted","WomenRestricted","CulturallySensitive","SecretSacred","OpenToCommercialization","NonCommercial","CommunityUseOnly","Outreach","OpenToCollaboration"];
     177   let tkCodes = ["tk_a","tk_cl","tk_f","tk_mc","tk_cv","tk_cr","tk_v","tk_nv","tk_s","tk_wg","tk_mg","tk_mr","tk_wr","tk_cs","tk_ss","tk_oc","tk_nc","tk_co","tk_o","tk_cb"];
     178   for (let i = 0; i < tkLabels.length; i++) {
     179      if (labelName == tkLabels[i]) {
     180         let labeldiv = document.querySelectorAll(".tklabels img");
     181         for (image of labeldiv) {
     182            let labelCode = image.src.substr(image.src.lastIndexOf("/") + 1).replace(".png", ""); // get tk label code from image file name
     183            if (labelCode == tkCodes[i]) {
     184               image.title = "TK " + name + ": " + definition + " Click for more details."; // set tooltip
     185               if (image.parentElement.parentElement.parentElement.classList[0] != "tocSectionTitle") { // disable onclick event in favourites section
     186                  image.addEventListener("click", function(e) {
     187                     let currPopup = document.getElementsByClassName("tkPopup")[0];
     188                     if (currPopup == undefined || (currPopup != undefined && currPopup.id != labelCode)) {
     189                        let popup = document.createElement("div");
     190                        popup.classList.add("tkPopup");
     191                        popup.id = labelCode;
     192                        let popupText = document.createElement("span");
     193                        let heading = "<h1>Traditional Knowledge Label:<br><h2>" + name + "</h2></h1>";
     194                        let moreInformation = "<br> For more information about TK Labels, <a href='https://localcontexts.org/labels/traditional-knowledge-labels/' target='_blank'>click here.</a>";
     195                        popupText.innerHTML = heading + comment + moreInformation;
     196                        let closeButton = document.createElement("span");
     197                        closeButton.innerHTML = "&#215;";
     198                        closeButton.id = "tkCloseButton";
     199                        closeButton.title = "Click to close window."
     200                        closeButton.addEventListener("click", function(e) {
     201                           closeButton.parentElement.remove();
     202                        });
     203                        popup.appendChild(closeButton);
     204                        popup.appendChild(popupText);
     205                        e.target.parentElement.appendChild(popup);
     206                     }
     207                     if (currPopup) currPopup.remove(); // remove existing popup div
     208                  });
     209               }
     210            }
     211         }
     212      }
     213   }
     214}
     215
     216function addTKLabelsToImages(lang) {
     217   if (tkMetadataElements == null) {
     218      console.error("ajax call not yet loaded tk label metadata set");
     219   } else {
     220      for (label of tkMetadataElements) { // for each tklabel element in tk.mds
     221         let tkLabelName = label.attributes.name.value; // Element name=""
     222         let attributes = label.querySelectorAll("[code=" + lang + "] Attribute"); // gets attributes for selected language
     223         let tkName = attributes[0].textContent; // name="label"
     224         let tkDefinition = attributes[1].textContent; // name="definition"
     225         let tkComment = attributes[2].textContent; // name="comment"
     226         addTKLabelToImage(tkLabelName, tkDefinition, tkName, tkComment);       
     227      } 
     228   }
     229}
     230
     231function loadTKMetadataSet(lang) {
     232   tkMetadataSetStatus = "loading";
     233   $.ajax({
     234      url: gs.variables["tkMetadataURL"],
     235      success: function(xml) {
     236         tkMetadataSetStatus = "loaded";
     237         let parser = new DOMParser();
     238         let tkmds = parser.parseFromString(xml, "text/xml");
     239         tkMetadataElements = tkmds.querySelectorAll("Element");
     240         if (document.readyState === "complete") {
     241            addTKLabelsToImages(lang);
     242         } else {
     243            window.onload = function() {
     244               addTKLabelsToImages(lang);
     245            }
     246         }
     247      },
     248      error: function() {
     249         tkMetadataSetStatus = "no-metadata-set-for-this-collection";
     250         console.log("No TK Label Metadata-set found for this collection");
     251      }
     252   });
     253};
     254
     255
Note: See TracChangeset for help on using the changeset viewer.