Changeset 36145


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

Added support for TK Labels

Location:
main/trunk/greenstone3/web/interfaces/default
Files:
3 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
  • main/trunk/greenstone3/web/interfaces/default/style/core.css

    r35811 r36145  
    723723}
    724724
     725.tocTextCell img {/* tklabel icon size & margin reduction */
     726    width: 3em !important;
     727    margin-right: 0.2em !important;
     728    margin-top: 0.2em !important;
     729}
     730
    725731.tableOfContentsContainer {
    726732    padding:1px;
     
    12811287    margin: 0 auto;
    12821288}
     1289
     1290/* Styling for TK Label related items */
     1291
     1292.tkPopup {
     1293    position: relative;
     1294    border: 1px solid darkgrey;
     1295    border-radius: 0.2em;
     1296    background: lightgrey;
     1297    margin: 0.2em;
     1298    padding: 0.8em;
     1299    font-size: 16px;
     1300    animation: fadein 0.4s;
     1301    box-shadow: 0px 5px 8px rgba(0,0,0,0.1);
     1302}
     1303
     1304.tkPopup a {
     1305    color: black;   
     1306    text-decoration: none;
     1307    border-bottom: 2px solid transparent;
     1308    transition: 0.2s ease;
     1309}
     1310
     1311.tkPopup a:hover {
     1312    color: black;   
     1313    border-color: black;
     1314    /* text-decoration: underline; */
     1315}
     1316
     1317.tkPopup h1 {
     1318    font-size: 22px;
     1319    margin-top: 0.2em;
     1320    margin-bottom: 0;
     1321    text-align: center;
     1322}
     1323
     1324.tkPopup h2 {
     1325    font-size: 20px;
     1326    color: rgb(24, 88, 7);
     1327    margin-top: 0.4em;
     1328    text-align: center;
     1329}
     1330
     1331.tklabels img {
     1332    width: 3em;
     1333    margin-right: 0.3em;
     1334    margin-top: 0.3em;
     1335    cursor: pointer;
     1336    opacity: 0.8;
     1337    transition: 0.2s ease;
     1338}
     1339
     1340.tklabels img:hover {
     1341    opacity: 1;
     1342}
     1343
     1344#tkCloseButton {
     1345    position: absolute;
     1346    font-weight: bold;
     1347    color: darkred;
     1348    font-size: 26px;
     1349    right: 0.5em;
     1350    top: 0.4em;
     1351    cursor: pointer;
     1352    transition: 0.1s ease;
     1353}
     1354
     1355#tkCloseButton:hover {
     1356    text-shadow: 0 0 5px rgba(139,0,0,0.5);
     1357}
     1358
     1359@keyframes fadein {
     1360    from {
     1361        opacity:0;
     1362    }
     1363    to {
     1364        opacity: 1;
     1365    }
     1366}
  • main/trunk/greenstone3/web/interfaces/default/transform/layouts/header.xsl

    r36113 r36145  
    720720       no search indexes, which is why the extra test for the presence of an index/fq-something is necessary. -->
    721721  <xsl:template name="quick-search-area">
     722
     723    <gsf:variable name="tkMetadataURL"><xsl:value-of select="$library_name"/>/sites/<xsl:value-of select="$site_name"/>/collect/<xsl:value-of select="$collNameChecked"/>/metadata/tk.mds</gsf:variable>
     724
    722725    <xsl:if test="/page/pageResponse/collection[@name=$collNameChecked]/serviceList/service[@type='query']">
    723726      <xsl:variable name="subaction" select="/page/pageRequest/@subaction"/>
     
    859862    </gsf:choose-metadata>
    860863  </xsl:template>
     864
     865<xsl:template name="choose-tklabels">
     866    <script type="text/javascript">
     867            <xsl:text disable-output-escaping="yes">
     868                $(document).ready(function() {
     869                    if (tkMetadataSetStatus == "needs-to-be-loaded") {
     870                        loadTKMetadataSet("</xsl:text><xsl:value-of select="$lang"/><xsl:text disable-output-escaping="yes">");
     871                    }
     872                })
     873            </xsl:text>
     874        </script>
     875
     876    <div class="tklabels">
     877        <gsf:switch>
     878        <gsf:metadata name="tk.Attribution"/>
     879        <gsf:when test="equals" test-value="true">
     880            <gsf:icon file="tklabels/tk_a.png"/>
     881        </gsf:when>
     882        </gsf:switch>
     883        <gsf:switch>
     884        <gsf:metadata name="tk.Clan"/>
     885        <gsf:when test="equals" test-value="true">
     886            <gsf:icon file="tklabels/tk_cl.png"/>
     887        </gsf:when>
     888        </gsf:switch>
     889        <gsf:switch>
     890        <gsf:metadata name="tk.Family"/>
     891        <gsf:when test="equals" test-value="true">
     892            <gsf:icon file="tklabels/tk_f.png"/>
     893        </gsf:when>
     894        </gsf:switch>
     895        <gsf:switch>
     896        <gsf:metadata name="tk.MultipleCommunities"/>
     897        <gsf:when test="equals" test-value="true">
     898            <gsf:icon file="tklabels/tk_mc.png"/>
     899        </gsf:when>
     900        </gsf:switch>
     901        <gsf:switch>
     902        <gsf:metadata name="tk.CommunityVoice"/>
     903        <gsf:when test="equals" test-value="true">
     904            <gsf:icon file="tklabels/tk_cv.png"/>
     905        </gsf:when>
     906        </gsf:switch>
     907        <gsf:switch>
     908        <gsf:metadata name="tk.Creative"/>
     909        <gsf:when test="equals" test-value="true">
     910            <gsf:icon file="tklabels/tk_cr.png"/>
     911        </gsf:when>
     912        </gsf:switch>
     913        <gsf:switch>
     914        <gsf:metadata name="tk.Verified"/>
     915        <gsf:when test="equals" test-value="true">
     916            <gsf:icon file="tklabels/tk_v.png"/>
     917        </gsf:when>
     918        </gsf:switch>
     919        <gsf:switch>
     920        <gsf:metadata name="tk.NonVerified"/>
     921        <gsf:when test="equals" test-value="true">
     922            <gsf:icon file="tklabels/tk_nv.png"/>
     923        </gsf:when>
     924        </gsf:switch>
     925        <gsf:switch>
     926        <gsf:metadata name="tk.Seasonal"/>
     927        <gsf:when test="equals" test-value="true">
     928            <gsf:icon file="tklabels/tk_s.png"/>
     929        </gsf:when>
     930        </gsf:switch>
     931        <gsf:switch>
     932        <gsf:metadata name="tk.WomenGeneral"/>
     933        <gsf:when test="equals" test-value="true">
     934            <gsf:icon file="tklabels/tk_wg.png"/>
     935        </gsf:when>
     936        </gsf:switch>
     937        <gsf:switch>
     938        <gsf:metadata name="tk.MenGeneral"/>
     939        <gsf:when test="equals" test-value="true">
     940            <gsf:icon file="tklabels/tk_mg.png"/>
     941        </gsf:when>
     942        </gsf:switch>
     943        <gsf:switch>
     944        <gsf:metadata name="tk.MenRestricted"/>
     945        <gsf:when test="equals" test-value="true">
     946            <gsf:icon file="tklabels/tk_mr.png"/>
     947        </gsf:when>
     948        </gsf:switch>
     949        <gsf:switch>
     950        <gsf:metadata name="tk.WomenRestricted"/>
     951        <gsf:when test="equals" test-value="true">
     952            <gsf:icon file="tklabels/tk_wr.png"/>
     953        </gsf:when>
     954        </gsf:switch>
     955        <gsf:switch>
     956        <gsf:metadata name="tk.CulturallySensitive"/>
     957        <gsf:when test="equals" test-value="true">
     958            <gsf:icon file="tklabels/tk_cs.png"/>
     959        </gsf:when>
     960        </gsf:switch>
     961        <gsf:switch>
     962        <gsf:metadata name="tk.SecretSacred"/>
     963        <gsf:when test="equals" test-value="true">
     964            <gsf:icon file="tklabels/tk_ss.png"/>
     965        </gsf:when>
     966        </gsf:switch>
     967        <gsf:switch>
     968        <gsf:metadata name="tk.OpenToCommercialization"/>
     969        <gsf:when test="equals" test-value="true">
     970            <gsf:icon file="tklabels/tk_oc.png"/>
     971        </gsf:when>
     972        </gsf:switch>
     973        <gsf:switch>
     974        <gsf:metadata name="tk.NonCommercial"/>
     975        <gsf:when test="equals" test-value="true">
     976            <gsf:icon file="tklabels/tk_nc.png"/>
     977        </gsf:when>
     978        </gsf:switch>
     979        <gsf:switch>
     980        <gsf:metadata name="tk.CommunityUseOnly"/>
     981        <gsf:when test="equals" test-value="true">
     982            <gsf:icon file="tklabels/tk_co.png"/>
     983        </gsf:when>
     984        </gsf:switch>
     985        <gsf:switch>
     986        <gsf:metadata name="tk.Outreach"/>
     987        <gsf:when test="equals" test-value="true">
     988            <gsf:icon file="tklabels/tk_o.png"/>
     989        </gsf:when>
     990        </gsf:switch>
     991        <gsf:switch>
     992        <gsf:metadata name="tk.OpenToCollaboration"/>
     993        <gsf:when test="equals" test-value="true">
     994            <gsf:icon file="tklabels/tk_cb.png"/>
     995        </gsf:when>
     996        </gsf:switch>
     997    </div>
     998    </xsl:template>
     999
     1000    <xsl:template name="choose-tklabels-small">
     1001        <style>
     1002        .tklabels img {
     1003            width: 2em;
     1004        }
     1005        </style>
     1006        <xsl:call-template name="choose-tklabels"/>
     1007    </xsl:template>
     1008
    8611009</xsl:stylesheet>
Note: See TracChangeset for help on using the changeset viewer.