Commit 9a0dc4b7 authored by Jerome Chauveau's avatar Jerome Chauveau
Browse files

dejquerisation du plugin apparat

parent ca83b80e
Loading
Loading
Loading
Loading
+119 −103
Original line number Diff line number Diff line
import {Plugin} from '../../core/ui/js/Plugin.js';

const PLUGIN_NAME = 'apparat';

class ApparatPlugin extends Plugin {
@@ -17,23 +18,27 @@ class ApparatPlugin extends Plugin{
    }

    showWitness(witnessClass) {
    document.querySelectorAll(".apparat").each((e) => e.style.display = 'none');
    document.querySelectorAll("." + witnessClass).each((e) => e.style.display = 'inline');
        document.querySelectorAll(".apparat").forEach((e) => e.style.display = 'none');
        document.querySelectorAll("." + witnessClass).forEach((e) => e.style.display = 'inline');
        this.hideLacunas(witnessClass);
    }


    witnessTooltiping() {
    $('[data-witnesses]').each(function(){
        var wlist = $(this).attr("data-witnesses").replace(" ",", "); 
        $(this).attr("title", wlist);  
        $(this).tooltip(
           {
            html:true, // allows html content
            content: "<div><em>Témoins:</em> "+wlist+"</div>"
           }
        );
    });
        document.querySelectorAll('[data-witness]').forEach((e) => {
            let wlist = e.getAttribute("data-witnesses").replace(" ", ", ");
            e.setAttribute("title", wlist);
        })
        // $('[data-witnesses]').each(function(){
        //     var wlist = $(this).attr("data-witnesses").replace(" ",", ");
        //     $(this).attr("title", wlist);
        //     $(this).tooltip(
        //        {
        //         html:true, // allows html content
        //         content: "<div><em>Témoins:</em> "+wlist+"</div>"
        //        }
        //     );
        // });

    }

@@ -44,22 +49,26 @@ class ApparatPlugin extends Plugin{
          - Si la lacunaEnd n'existe pas (elle se trouve dans un autre fragment),
           l'intégralité du texte suivant est masqué
        */
  var self = this;
  $('.lacunaStart').each(function(){
    if($(this).attr('data-lacuna-wit').indexOf('\#'+witId)>-1){
        document.querySelectorAll('.lacunaStart').forEach((lstart) => {
            if (lstart.getAttribute('data-lacuna-wit').indexOf('\#' + witId) > -1) {
                //on echappe les . et # de l'id cible de la lacunaEnd correspondante
      var searchedId = "#" + $(this).attr('data-lacuna-synch').replace(/([#.])/g,'\\$1')
      var endElement = $(searchedId)
      console.log('traitement de la lacuna '+ $(this).attr('id'));
      endElement = endElement.length === 0 ? $('#bas_de_page') : endElement
      var eltsBetween = $(self.getElementsBetweenTree(($(this))[0], endElement[0]))
      console.log("Nombre d'éléments à masquer (lacune "+$(this).attr('id')+")"+eltsBetween.length);
      eltsBetween.each(function(){
        $(this).wrap("<span class='generated_lacuna'></span>")
                let searchedId = lstart.getAttribute('data-lacuna-synch');//.replace(/([#.])/g,'\\$1');
                console.log("searchedid ", searchedId);
                let endElement = document.getElementById(searchedId);
                console.log('traitement de la lacuna ' + lstart.getAttribute('id'));
                endElement = endElement.length === 0 ? document.getElementById('bas_de_page') : endElement
                let eltsBetween = this.getElementsBetweenTree(lstart, endElement);//$(self.getElementsBetweenTree(($(this))[0], endElement[0]))
                console.log("Nombre d'éléments à masquer (lacune " + lstart.getAttribute('id') + ")" + eltsBetween.length);
                eltsBetween.forEach((elt) => {
                    let span = document.createElement("span");
                    span.classList.add('generated_lacuna');
                    span.append(elt.cloneNode(true));
                    elt.replaceWith(span);
                })
            }
        })


        /*Cas où un couple lacunaStart/lacunaEnd se trouve respectivement dans
        des fragments qui précédent et suivent le fragment courant:
        nécessite une requête sur la DB pour accedéer aux autres noeuds XML*/
@@ -67,9 +76,9 @@ class ApparatPlugin extends Plugin{
    }

    getElementsBetweenTree(start, end) {
    var ancestor= this.getCommonAncestor(start, end);
        let ancestor = this.commonAncestor(start, end);

    var before= [];
        let before = [];
        while (start.parentNode !== ancestor) {
            var el = start;
            while (el.nextSibling)
@@ -91,17 +100,24 @@ class ApparatPlugin extends Plugin{
        return before.concat(after);
    }

  // Get the innermost element that is an ancestor of two nodes.
  //
  getCommonAncestor(a, b) {
      var parents= $(a).parents().addBack();
      while (b) {
          var ix= parents.index(b);
          if (ix!==-1)
              return b;
          b= b.parentNode;

    ancestors(node) {
        let nodes = []
        for (; node; node = node.parentNode) {
            nodes.unshift(node)
        }
        return nodes
    }

    commonAncestor(node1, node2) {
        let parents1 = this.ancestors(node1)
        let parents2 = this.ancestors(node2)

        if (parents1[0] !== parents2[0]) throw "No common ancestor!"

        for (var i = 0; i < parents1.length; i++) {
            if (parents1[i] !== parents2[i]) return parents1[i - 1]
        }
      return null;
    }