Commit 5a5de813 authored by chauveau's avatar chauveau
Browse files

gestion de l'apparat critique natif, debug pager, prettyName d'une édition

parent bc9840bc
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -52,14 +52,14 @@ svn co --username <username> https://subversion.certic.unicaen.fr/svn/biblissima
cd max
npm update
bower install
#dans un environnement de développement uniquemennt:
#dans un environnement de développement uniquement:
gulp build
```


 * **Java 7**
 * **Tomcat 7(*)**
 * **[BaseX](http://basex.org)** dans sa version 83 ou +
 * **[BaseX](http://basex.org)** dans sa version 83 ou +, avec la librairie saxon9he.jar en complément (à ajouter au dossier **lib** de BaseX).
 * **[Nodejs](https://nodejs.org)** : Une fois installé, son gestionnaire de paquet permettra entre autres l'installation de Gulp et Bower
 * **[Bower](http://bower.io/)**: installe les dépendances javascript: **JQuery**, **Mathjax**, **[Bootstrap](http://getbootstrap.com)**, ...
 * **[Gulp](http://gulpjs.com/)** :gestionnaire de tâches (minification des fichiers js et css, compilation de css [Less](http://lesscss.org/))
@@ -401,7 +401,7 @@ La configuration d'une édition/d'un projet (noeud &lt;edition/&gt;) permet de d
			    
	     * *html* : le parcours est décrit dans un fichier HTML statique (attribut **file** du noeud &lt;routeList/&gt;)

         * *xquery* : le parcours résulte d'une XQuery définie dans un fichier (attribut **file** du noeud &lt;routeList/&gt;)
         * *xquery* : le parcours résulte d'une XQuery définie dans un fichier (attribut **file** du noeud &lt;routeList/&gt;). Cette xquery doit générer une liste html (ul) avec l'identifiant "**routeEntries**.

         * *default* :  Par défaut, MaX considére chaque document comme un parcours. La requête listant les parcours génère une liste arborescente de liens pointant vers les documents XML complet de la base de données cible. Les grammaires TEI et EAD sont nativement gérées par MaX qui utilise les titres des documents comme contenu des liens.
		 
+4 −4
Original line number Diff line number Diff line
var gulp      = require('gulp'),
    rename    = require('gulp-rename'),// Renommage des fichiers
    less      = require('gulp-less'),// Conversion LESS en CSS
    uglify    = require('gulp-uglify'); //Minification/Obfuscation des JS

    uglify    = require('gulp-uglify'), //Minification/Obfuscation des JS
    gutil = require('gulp-util');

//COMPILATION DES FICHIERS LESS
gulp.task('compile-less', function () {
@@ -53,7 +53,7 @@ gulp.task('js-uglify-addons', function()
      console.log("Minification de " + path.basename +".js")
	    path.basename = path.basename.replace(".src", ".min");
	  }))
	  .pipe(uglify())
	.pipe(uglify().on('error',gutil.log))
	.pipe(gulp.dest('./ui/js/dist/'));
});

+2 −2
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ function max:page($project, $page){
     }
   }
   catch err:config {max:max-error($err:description)}
   catch err:FODC0002 {max:max-error("Main configuration file is missing (configuration/configuration.xml).")}
   catch err:FODC0002 {<div>{$err:description} -  {$err:module} - {$err:line-number}</div>}
};


+82 −4
Original line number Diff line number Diff line
var moduleApparat = new Object();
const PLUGIN_NAME="apparat"; 

var lacunaryWitnesses = new Array();
 
moduleApparat['onTextChange'] = function() {
  
  //si le fragment courant en contient pas d'apparat
  //si le fragment courant ne contient pas d'apparat
  if(!docWithApparat())
    return;
;

  //sinon
  var route = (window.location.href.split("/" + MAX.getProjectID() +"/")[1]).split(".xml")[0] + ".xml";
  var witnessQueryURL = 
@@ -16,6 +18,11 @@ moduleApparat['onTextChange'] = function() {
        $('#options-list').append(data);
        $('#txt_options').show();
      });
      //récupération des témoins intégralement lacunaire sur le fragment courant
      $.get(MAX.getPluginsBaseURL() + "/" + PLUGIN_NAME + "/lacunarywit/"+MAX.getProjectID() +"/"+route+"/"+MAX.getFragmentId(),
       function(data){
          
      })
      showWitness("lem");     
      witnessTooltiping();
};
@@ -25,6 +32,7 @@ MAX.addModule(moduleApparat);
function showWitness(witnessClass){
  $(".apparat").hide();
  $("."+witnessClass).show();
  hideLacunas(witnessClass);
}

function witnessTooltiping(){
@@ -40,6 +48,76 @@ function witnessTooltiping(){
  });
}

function hideLacunas(witId){

  /*masque les lacunas à partir des lacunaStarts
    - cherche la lacuneEnd correspondante
    - Si la lacunaEnd n'existe pas (elle se trouve dans un autre fragment), 
     l'intégralité du texte suivant est masqué 
  */
  $('.lacunaStart').each(function(){
    if($(this).attr('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.size() === 0 ? $('#bas_de_page') : endElement
      var eltsBetween = $(getElementsBetweenTree(($(this))[0], endElement[0]))
      console.log("Nombre d'éléments à masquer (lacune "+$(this).attr('id')+")"+eltsBetween.size());
      eltsBetween.each(function(){
        $(this).wrap("<span class='generated_lacuna'></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*/
  
}


/****************************************/
function getElementsBetweenTree(start, end) {
    var ancestor= getCommonAncestor(start, end);

    var before= [];
    while (start.parentNode!==ancestor) {
        var el= start;
        while (el.nextSibling)
            before.push(el= el.nextSibling);
        start= start.parentNode;
    }

    var after= [];
    while (end.parentNode!==ancestor) {
        var el= end;
        while (el.previousSibling)
            after.push(el= el.previousSibling);
        end= end.parentNode;
    }
    after.reverse();

    while ((start= start.nextSibling)!==end)
        before.push(start);
    return before.concat(after);
}

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


function docWithApparat(){
  return $(".apparat").size() > 0
  return ($(".apparat").size() + $(".lacunaStart").size() + $(".lacunaEnd").size()) > 0
}
 No newline at end of file
+20 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ function max.plugin.apparat_critique:getRouteWitnesses($project, $route){
};

(:
Route witnesses list
Route witnesses list as html
:)
declare
%rest:GET
@@ -51,3 +51,22 @@ function max.plugin.apparat_critique:getRouteWitnessesAsHTML($project, $route)
   <li role="separator" class="divider"></li>
};

(:
Recherche des témoins intégralement lacunaires sur le fragment $fragmentId
 = un lacunaStart présent dans un fragment précédent $fragmentId couplé à un
   lacunaEnd présent dans un fragment suivant $fragmentId.
   
   Il est donc nécessaire de parcourir intégralement la collection hôte
:)
declare
%rest:GET
%output:method("html")
%rest:path("/plugins/apparat/lacunarywit/{$project}/{$route=.*\.xml}/{$fragmentId}")
function max.plugin.apparat_critique:getLacunaryWitnesses($project, $route, $fragmentId)
{

  (:"{'witnesses':{['a','b']}}":)
  for $i in collection(max.config:getProjectDBPath($project))//*[@xml:id=$fragmentId]/preceding::*
  return base-uri($i)
  
};
 No newline at end of file
Loading