Skip to content

Commit

Permalink
Merge pull request #857 from camille-hdl/master
Browse files Browse the repository at this point in the history
v1.5.0 déplacer unitdate hors de unittitle
  • Loading branch information
camille-hdl committed Oct 6, 2023
2 parents 3479ddf + 0b32e26 commit e5e61b9
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 2 deletions.
17 changes: 17 additions & 0 deletions cypress/fixtures/example-ffas.xml
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,23 @@
<genreform>val2</genreform>
</controlaccess>
</c>
<c id="test-unitdate-1">
<did>
<unittitle>test-unitdate-1 <unitdate normal="1900">Année 1900</unitdate></unittitle>
</did>
<c id="test-unitdate-2">
<did>
<unittitle>test-unitdate-2 <unitdate type="test" normal="2000">Année 2000</unitdate></unittitle>
<unitdate normal="2000">Année 2000</unitdate>
</did>
</c>
<c id="test-unitdate-3">
<did>
<unittitle>test-unitdate-3 <unitdate type="test" normal="3000">Année 3000</unitdate></unittitle>
<unitdate type="test" normal="3000">Année 3000</unitdate>
</did>
</c>
</c>
</dsc>
</archdesc>
</ead>
38 changes: 38 additions & 0 deletions cypress/integration/recipes.js
Original file line number Diff line number Diff line change
Expand Up @@ -374,4 +374,42 @@ describe("Recipe unit test", function () {
expect(xpathFilter(doc, '//c[@id="test-genreform-physdesc"]/did/physdesc/genreform[@role="test"]').length).to.be.equal(1);
expect(xpathFilter(doc, '//c[@id="test-genreform-physdesc"]/did/physdesc/genreform[@source="genreform"]').length).to.be.equal(2);
});
it("deplacer_unitdate_unittitle", function () {
const ficheC1 = xpathFilter(doc, '//c[@id="test-unitdate-1"]')[0];
expect(xpathFilter(doc, ficheC1, 'did/unittitle/unitdate').length).to.be.equal(1);
expect(xpathFilter(doc, ficheC1, 'did/unitdate').length).to.be.equal(0);

const ficheC2 = xpathFilter(doc, '//c[@id="test-unitdate-2"]')[0];
expect(xpathFilter(doc, ficheC2, 'did/unittitle/unitdate').length).to.be.equal(1);
expect(xpathFilter(doc, ficheC2, 'did/unitdate').length).to.be.equal(1);

const ficheC3 = xpathFilter(doc, '//c[@id="test-unitdate-3"]')[0];
expect(xpathFilter(doc, ficheC3, 'did/unittitle/unitdate').length).to.be.equal(1);
expect(xpathFilter(doc, ficheC3, 'did/unitdate').length).to.be.equal(1);

doc = recipes.deplacer_unitdate_unittitle()(doc);

expect(xpathFilter(doc, ficheC1, 'did/unittitle/unitdate').length).to.be.equal(0);
expect(xpathFilter(doc, ficheC1, 'did/unitdate').length).to.be.equal(1);
expect(xpathFilter(doc, ficheC1, 'did/unitdate')[0].getAttribute("normal")).to.be.equal("1900");
expect(xpathFilter(doc, ficheC1, 'did/unitdate')[0].textContent).to.be.equal("Année 1900");
expect(xpathFilter(doc, ficheC1, 'did/unittitle')[0].textContent).to.be.equal("test-unitdate-1 Année 1900");

expect(xpathFilter(doc, ficheC2, 'did/unittitle/unitdate').length).to.be.equal(0);
expect(xpathFilter(doc, ficheC2, 'did/unitdate').length).to.be.equal(2);
expect(xpathFilter(doc, ficheC2, 'did/unitdate')[0].getAttribute("normal")).to.be.equal("2000");
expect(xpathFilter(doc, ficheC2, 'did/unitdate')[0].hasAttribute("type")).to.be.false;
expect(xpathFilter(doc, ficheC2, 'did/unitdate')[1].getAttribute("normal")).to.be.equal("2000");
expect(xpathFilter(doc, ficheC2, 'did/unitdate')[1].hasAttribute("type")).to.be.true;
expect(xpathFilter(doc, ficheC2, 'did/unitdate')[1].getAttribute("type")).to.be.equal("test");
expect(xpathFilter(doc, ficheC2, 'did/unitdate')[1].textContent).to.be.equal("Année 2000");
expect(xpathFilter(doc, ficheC2, 'did/unittitle')[0].textContent).to.be.equal("test-unitdate-2 Année 2000");

expect(xpathFilter(doc, ficheC3, 'did/unittitle/unitdate').length).to.be.equal(0);
expect(xpathFilter(doc, ficheC3, 'did/unitdate').length).to.be.equal(1);
expect(xpathFilter(doc, ficheC3, 'did/unitdate')[0].getAttribute("normal")).to.be.equal("3000");
expect(xpathFilter(doc, ficheC3, 'did/unitdate')[0].getAttribute("type")).to.be.equal("test");
expect(xpathFilter(doc, ficheC3, 'did/unitdate')[0].textContent).to.be.equal("Année 3000");
expect(xpathFilter(doc, ficheC3, 'did/unittitle')[0].textContent).to.be.equal("test-unitdate-3 Année 3000");
});
});
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cuisine-ead",
"version": "1.4.0",
"version": "1.5.0",
"description": "",
"main": "public/index.html",
"scripts": {
Expand Down
2 changes: 2 additions & 0 deletions src/lib/recipes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ import separerControlaccessLb from "./individual-recipes/separer-controlaccess-l
import separerControlaccessSeparator from "./individual-recipes/separer-controlaccess-separator.js";
import deplacerGenreformPhysdesc from "./individual-recipes/deplacer-genreform-physdesc.js";
import insertIntoDocument from "./insert-into-document.js";
import deplacerUnitdateUnittitle from "./individual-recipes/deplacer-unitdate-unittitle.js";

/**
* Returns an array of 'simple' recipes creators : functions that create functions that take a single DOM `Document` as argument and returns
Expand Down Expand Up @@ -156,6 +157,7 @@ export const getRecipes = () => {
{ key: "remplace_dao_href", fn: remplaceDaoHref },
{ key: "separer_controlaccess_lb", fn: separerControlaccessLb },
{ key: "separer_controlaccess_separator", fn: separerControlaccessSeparator },
{ key: "deplacer_unitdate_unittitle", fn: deplacerUnitdateUnittitle },
];
};

Expand Down
53 changes: 53 additions & 0 deletions src/lib/recipes/individual-recipes/deplacer-unitdate-unittitle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
//@flow
import { xpathFilter } from "../../xml.js";
import { each, getAttributesMap } from "../utils.js";
import { last, head } from "ramda";

/**
* Si on trouve un unitdate dans le unittitle,
* on le déplace dans le did en laissant juste la valeur texte dans le unittitle,
* S'il y a déjà un unitdate avec exactement la même valeur dans le did, on ne rajoute pas un doublon.
*/
export default () => (doc: Document): Document => {
const unitdatesDansTitle = xpathFilter(doc, "//c/did/unittitle/unitdate");
console.log("unitdatesDansTitle", unitdatesDansTitle.length);
each(unitdatesDansTitle, (elem) => {
const attributesMap = getAttributesMap(elem);
const textContent = (""+elem?.textContent).trim();
const did = head(xpathFilter(doc, elem, "ancestor::c/did"));
console.log(elem, attributesMap, textContent);
/**
* Pour qu'on considère que 2 unitdates sont identiques, ils doivent avoir la même valeur texte, la même valeur normalisée
* et le même type (s'il y en a un).
*/
const existingDidUnitdate = xpathFilter(doc, did, "unitdate").find((didUnitdate) => {
const didUnitdateAttributesMap = getAttributesMap(didUnitdate);
return (
didUnitdateAttributesMap?.type === attributesMap?.type &&
didUnitdateAttributesMap?.normal === attributesMap?.normal &&
(""+didUnitdate?.textContent).trim() === textContent
);
});
console.log("existing = ", existingDidUnitdate);
if (!existingDidUnitdate) {
// ajouter le unitdate au did
if (!did) {
console.log("Pas de did pour créer le unitdate.");
} else {
const newElem = elem.cloneNode(true);
did.appendChild(newElem);
console.log("append dans did", newElem);
}
}
// remplacer elem dans son parent par textContent
const parent = elem.parentNode;
if (!parent) {
console.log("Pas de parent pour remplacer le unitdate.");
return;
}
const textNode = doc.createTextNode(textContent);
parent.replaceChild(textNode, elem);
console.log("replace", elem, "by", textNode, "in", parent);
});
return doc;
};
8 changes: 8 additions & 0 deletions src/lib/recipes/recipes-lib.js
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,14 @@ const availables: Array<[string, RecipeInfo]> = [
category: "Spécifique",
},
],
[
"deplacer_unitdate_unittitle",
{
label: "Sortir les unitdate des unittitles",
complement: "Le texte de l'unitdate est laissé dans le unittitle. Si une unitdate existe déjà dans le did avec la même valeur normale et type, on ne rajoute pas un doublon.",
category: "Spécifique",
},
],
[
"supprimer_internal",
{
Expand Down
2 changes: 1 addition & 1 deletion src/sw.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const { CacheableResponsePlugin } = workbox.cacheableResponse;
const { ExpirationPlugin } = workbox.expiration;
const { skipWaiting, clientsClaim, setCacheNameDetails } = workbox.core;

var VERSION = "v1.4.0";
var VERSION = "v1.5.0";
setCacheNameDetails({
prefix: "cuisine-ead",
suffix: VERSION,
Expand Down

0 comments on commit e5e61b9

Please sign in to comment.