MediaWiki:MarcEditorDynamicLinks.js: mudanças entre as edições

De Wikincat
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(64 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
/* jshint esversion: 10 */
// Author: @vitorsilverio
function main() {
// Author: @jaideraf
// calling main functions
makeMarcFieldHelpLink();
authorityLinks();
setIndicators();
rmCarriageReturn();
rmHtmlTags();


// Como instâncias do formulário são criadas pelo botão "Adicionar campo",
///////////////////////////////////////////////////////////////////
// é necessário observar o DOM a partir da classe ".multipleTemplateList".
// make collapsible CSS clickable (space or enter to click)
// Toda vez que o DOM é alterado (mais especificamente, quando uma nova
// from: https://alligator.io/css/collapsible/
// child de ".multipleTemplateList" é criada), as funções
let myCollapsibleLabels = document.querySelectorAll(".lbl-toggle");
// makeMarcFieldHelpLink() e authorityLinks() são novamente chamadas.
// https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver


// create an observer instance
Array.from(myCollapsibleLabels).forEach(label => {
const observer = new MutationObserver((mutations) => {
label.addEventListener("keydown", e => {
mutations.forEach((mutation) => {
// 32 === spacebar
const newNodes = mutation.addedNodes; // DOM NodeList
// 13 === enter
if (e.which === 32 || e.which === 13) {
if (newNodes.length !== 0) {
// if there are new nodes added
e.preventDefault();
label.click();
makeMarcFieldHelpLink();
authorityLinks();
}
setIndicators();
}
});
});
});
});
///////////////////////////////////////////////////////////////////
let tag = "";
let tagFromDropdown = "";


// select the target node
function createMarcFieldHelpLinks() {
const target = document.querySelector('.multipleTemplateList');
"use strict";
$(".tagInput").each(function() {
let marcFieldHelpLink = $("<a>", {
target: "_blank",
text: "(?)"
});
marcFieldHelpLink.hide();
$(this).closest("table").find(".marcFieldHelpLink").html(marcFieldHelpLink);
$(this).closest("table").find("select").change(function() {


// configuration of the observer
// find the tag value from the chosen dropdown
const config = {
tagFromDropdown = $(this).closest(".instanceMain").find(".select2-selection__rendered").attr("title");
childList: true,
tagFromDropdown = tagFromDropdown.substring(0, 3);
attributes: false,
subtree: false,
};


// pass in the target node, as well as the observer options
// build the URL
observer.observe(target, config);
marcFieldHelpLink.attr("title", "Documentação do campo " + tagFromDropdown);
if (window.location.href.match(/A\d{6}/) ||
window.location.href.match(/AutRecord/)) {
marcFieldHelpLink.attr("href", "http://marc.febab.org/a" + tagFromDropdown);
} else {
marcFieldHelpLink.attr("href", "https://www.loc.gov/marc/bibliographic/bd" + tagFromDropdown + ".html");
}
marcFieldHelpLink.show();
});
});
}


// when clicking save...
function createAuthorityLinks() {
const saveBtn = document.body.querySelector('#wpSave');
"use strict";
saveBtn.addEventListener('click', () => {
$("textarea").each(function() {
observer.disconnect();
let authorityLink = $("<a>", {
rmTxtFromHiddenFields();
title: "Abre uma nova aba para criar ou editar um registro de autoridade",
rmCarriageReturn();
target: "_blank",
rmHtmlTags();
text: "Criar autoridade"
});
normalizeInput();
});
let pattern1 = /\$0\sA\d{6}/;
let pattern2 = /\$0\s\(BN\)\d{9}/;
authorityLink.hide();
$(this).closest("table").find(".createAuthorityLink").html(authorityLink);
$(this).focusout(function() {
// if already recorded
if (pattern1.test($(this).val())) {
// build the URL for Wikincat aut record edit
authorityLink.text("Editar autoridade");
authorityLink.attr("href", "/wiki/Special:FormEdit/AutRecord/Autoridade:" +
$(this).val().match(/A\d{6}/));
} else if (pattern2.test($(this).val())) {
// build the URL for BN aut record view
authorityLink.text("Ver autoridade na BN");
authorityLink.attr("href", "http://acervo.bn.br/sophia_web/autoridade/detalhe/" +
$(this).val().match(/\d{9}/));
} else {
// find the tag value from the chosen dropdown
tagFromDropdown = $(this).closest(".instanceMain")
// PageForms 4.8
// .find(".select2-chosen").text();
// Page forms 4.9.1
.find(".select2-selection__rendered").attr("title");
tagFromDropdown = tagFromDropdown.substring(0, 3);

// find the tag value from checked radio button
let tagFromRadio = $(this).closest(".instanceMain")
.find("input[origname='Field[authorityType]']:checked").val();
let authorityTypes = {
"Pessoa": "100",
"Entidade coletiva": "110",
"Evento": "111",
"Título uniforme": "130",
"Tópico": "150",
"Local": "151"
};
if (tagFromRadio in authorityTypes) {
tag = authorityTypes[tagFromRadio];
}

// declare the indicators default values
let ind1 = $(this).closest(".instanceMain")
.find("select[origname='Field[ind1]'] option:selected").val();
let ind2 = $(this).closest(".instanceMain")
.find("select[origname='Field[ind2]'] option:selected").val();

// declare the 008 field default values
let directOrIndirectGeogSubdiv = "", // 06
kindOfRecord = "", // 09
descriptiveCatalogingRules = "c", // 10
subjectHeadingSystem = "n", // 11
typeOfSeries = "n", // 12
numberedOrUnnumberedSeries = "n", // 13
headingUseMainOrAddedEntry = "a", // 14
headingUseSubjectAddedEntry= "a", // 15
headingUseSeriesAddedEntry = "b", // 16
typeOfSubjectSubdivision = "n", // 17
undifferentiatedPersonalName = "n", // 32
levelOfEstablishment = "a"; // 33

// set the 008 field and indicadors specific values
if (tag === "100") {
undifferentiatedPersonalName = "a";
ind2 = "";
}
if (tag === "110") {
// in case of autocomplete of 260
if (tagFromDropdown === "260") {
directOrIndirectGeogSubdiv = "n";
kindOfRecord = "b";
headingUseMainOrAddedEntry = "b";
headingUseSubjectAddedEntry = "b";
levelOfEstablishment = "n";
ind1 = "1";
}
ind2 = "";
}
if (tag === "111") {
ind1 = "2";
ind2 = "";
}
if (tag === "130") {
typeOfSeries = "a";
numberedOrUnnumberedSeries = "b";
headingUseSeriesAddedEntry = "a";
if (tagFromDropdown === "130" ||
tagFromDropdown === "630" ||
tagFromDropdown === "730") {
ind2 = ind1; // an inverted value happens here, see and
ind1 = ""; // compare bib. and auth. 130 MARC definitions
}
ind1 = "";
}
if (tag === "150" || tag === "151") {
descriptiveCatalogingRules = "n";
subjectHeadingSystem = "z";
headingUseMainOrAddedEntry = "b";
ind1 = ""; // 150 and 151 indicators must be empty in
ind2 = ""; // authority MARC records
if (tag === "151") {
typeOfSubjectSubdivision = "d";
}
}

// build the URL
authorityLink.attr("href", "/wiki/Special:FormEdit/AutRecord?" +
decodeURIComponent($.param({
"AutRecord": {
"directOrIndirectGeogSubdiv": directOrIndirectGeogSubdiv,
"kindOfRecord": kindOfRecord,
"descriptiveCatalogingRules": descriptiveCatalogingRules,
"subjectHeadingSystem": subjectHeadingSystem,
"typeOfSeries": typeOfSeries,
"numberedOrUnnumberedSeries": numberedOrUnnumberedSeries,
"headingUseMainOrAddedEntry": headingUseMainOrAddedEntry,
"headingUseSubjectAddedEntry": headingUseSubjectAddedEntry,
"headingUseSeriesAddedEntry": headingUseSeriesAddedEntry,
"typeOfSubjectSubdivision": typeOfSubjectSubdivision,
"undifferentiatedPersonalName": undifferentiatedPersonalName,
"levelOfEstablishment": levelOfEstablishment
},
"Field": {
"1": {
"tag": "040",
"data": encodeURIComponent("$a BR-FlWIK $b por $c BR-FlWIK $d BR-FlUSC")
},
"2": {
"tag": tag,
"ind1": encodeURIComponent(ind1),
"ind2": encodeURIComponent(ind2),
"data": encodeURIComponent($(this).val())
},
"3": {
"tag": "670",
"data": "$a+"
}
}
})));
}
authorityLink.show();
});
});
}
}


document.addEventListener('DOMContentLoaded', () => main());
$(document).ready(function(){
"use strict";
// remove carriage return
$("span.inputSpan").find("textarea").each(function() {
let input = $(this).val();
input = input.replace("&#13;", "")
// remove any html tags
.replace(/<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g, "");
$(this).val(input);
});


// for no obvious reason to me, the first call to the "main" function is not
// calls main functions
// occurring, so wait 3 seconds and call it anyway.
createMarcFieldHelpLinks();
setTimeout(main, 3000);
createAuthorityLinks();

// Como instâncias do formulário são criadas pelo botão "Adicionar campo",
// é necessário observar o DOM a partir da classe ".multipleTemplateList".
// Toda vez que o DOM é alterado (mais especificamente, quando uma nova
// child de ".multipleTemplateList" é criada), a função
// marcEditorDynamicLinks() é novamente chamada.
// https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

// create an observer instance
let observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
let newNodes = mutation.addedNodes; // DOM NodeList
if(newNodes.length !== 0) { // if there are new nodes added
createMarcFieldHelpLinks();
createAuthorityLinks();
}
});
});

// select the target node
let target = document.querySelector(".multipleTemplateList");

// configuration of the observer
let config = {
childList: true,
attributes: false,
subtree: false
};

// pass in the target node, as well as the observer options
observer.observe(target, config);

// when save, remove text form hidden textareas
$("#wpSave").click(function(){
observer.disconnect();
$("span.hiddenByPF").find("textarea").val("");
$("textarea").each(function() {
let input = $(this).val();
// normalize input
let normalizedInput = input
// "$a Bar \n$b Baz" > " $a Bar $b Baz"
.replace(/\s*(\$[a-z0-8])\s*/g, " $1 ")
// "$a Bar\nFoo" > "$a Bar Foo" ou "$a Bar Foo" > "$a Bar Foo"
.replace(/\n|\s\s+|\t/g, " ")
// replace "|" by "%7C" (Ex.: http://viaf.org/processed/WKP|Q2484404)
.replace("|", "%7C");
$(this).val(normalizedInput);
});
});
});

Edição atual tal como às 14h03min de 19 de agosto de 2024

/* jshint esversion: 10 */
function main() {
  // calling main functions
  makeMarcFieldHelpLink();
  authorityLinks();
  setIndicators();
  rmCarriageReturn();
  rmHtmlTags();

  // Como instâncias do formulário são criadas pelo botão "Adicionar campo",
  // é necessário observar o DOM a partir da classe ".multipleTemplateList".
  // Toda vez que o DOM é alterado (mais especificamente, quando uma nova
  // child de ".multipleTemplateList" é criada), as funções
  // makeMarcFieldHelpLink() e authorityLinks() são novamente chamadas.
  // https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

  // create an observer instance
  const observer = new MutationObserver((mutations) => {
    mutations.forEach((mutation) => {
      const newNodes = mutation.addedNodes; // DOM NodeList
      if (newNodes.length !== 0) {
        // if there are new nodes added
        makeMarcFieldHelpLink();
        authorityLinks();
        setIndicators();
      }
    });
  });

  // select the target node
  const target = document.querySelector('.multipleTemplateList');

  // configuration of the observer
  const config = {
    childList: true,
    attributes: false,
    subtree: false,
  };

  // pass in the target node, as well as the observer options
  observer.observe(target, config);

  // when clicking save...
  const saveBtn = document.body.querySelector('#wpSave');
  saveBtn.addEventListener('click', () => {
    observer.disconnect();
    rmTxtFromHiddenFields();
    rmCarriageReturn();
    rmHtmlTags();
    normalizeInput();
  });
}

document.addEventListener('DOMContentLoaded', () => main());

// for no obvious reason to me, the first call to the "main" function is not
// occurring, so wait 3 seconds and call it anyway.
setTimeout(main, 3000);