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

Ir para navegação Ir para pesquisar
sem sumário de edição
imported>Jaideraf
Sem resumo de edição
imported>Jaideraf
Sem resumo de edição
// Author: @vitorsilverio
// Author: @jaideraf
if (document.readyState === "complete" || (document.readyState !== "loading")) {
main();
} else {
document.addEventListener("DOMContentLoaded", main);
 
function main() {
let tag = ""'';
let tagFromDropdown = ""'';
 
function createMarcFieldHelpLink() {
const tagInputs = document.body.querySelectorAll("'.tagInput"');
tagInputs.forEach(function (elem) => {
const marcFieldHelpLink = document.createElement("'a"');
marcFieldHelpLink.setAttribute("'target"', "'_blank"');
marcFieldHelpLink.innerText = `'(?)`';
 
const marcFieldHelpLinkClass = elem.closest("'table"')
.querySelector("'.marcFieldHelpLink"');
marcFieldHelpLinkClass.appendChild(marcFieldHelpLink);
 
// find the tag value from the chosen dropdown
marcFieldHelpLinkClass.addEventListener("'mouseover"', function (event) => {
tagFromDropdown = event.target.closest("'.instanceMain"')
.querySelector("'.select2-selection__rendered"')
.getAttribute("'title"');
tagFromDropdown = tagFromDropdown.substring(0, 3);
marcFieldHelpLink.setAttribute("title",
};'title',
`Documentação do campo ${tagFromDropdown}`);
`Documentação do campo // build the URL${tagFromDropdown}`
});
if (window.location.href.match(/A\d{6}/) ||
// build the URL for BN aut record view
window.location.href.match(/AutRecord/)) {
if (window.location.href.match(/A\d{6}/) ||
marcFieldHelpLink.setAttribute("href",
|| "http://marcwindow.febablocation.orghref.match(/a"AutRecord/)) + tagFromDropdown);{
} else {marcFieldHelpLink.setAttribute(
marcFieldHelpLink.setAttribute("'href"',
`httpshttp://wwwmarc.locfebab.govorg/marc/bibliographic/bda${tagFromDropdown}.html`);
});
} else });{
marcFieldHelpLink.setAttribute("href",
});
} 'href',
`https://www.loc.gov/marc/bibliographic/bd${tagFromDropdown}.html`
} );
}
});
});
}
 
function createAuthorityLinks() {
const textareas = document.body.querySelectorAll("'textarea.has-authority-control"');
textareas.forEach(function (elem) => {
letconst authorityLink = document.createElement("'a"');
authorityLink.setAttribute("'title"', "'Abre uma nova aba para criar ou editar um registro de autoridade"');
authorityLink.setAttribute("'target"', "'_blank"');
authorityLink.innerText = "'Criar autoridade"';
authorityLink.style.display = "'none"';
 
letconst createAuthorityLink = elem.closest("'table"')
.querySelector("'.createAuthorityLink"');
 
createAuthorityLink.appendChild(authorityLink);
 
const pattern1 = /\$0\sA\d{6}/;
const pattern2 = /\$0\s\(BN\)\d{9}/;
 
elem.addEventListener("'focusout"', function () => {
// if already recorded
if (pattern1.test(elem.value)) {
// build the URL for Wikincat aut record edit
authorityLink.innerText = "'Editar autoridade"';
authorityLink.setAttribute("href",
}'href',
"`/wiki/Special:FormEdit/AutRecord/Autoridade:" +${
elem.value.match(/A\d{6}/));
} else if (pattern2.test(elem.value.match(/A\d{6}/)) {}`
);
// build the URL for BN aut record view
} else if (pattern2.test(elem.value)) {
authorityLink.innerText = "Ver autoridade na BN";
// build the URL for BN aut record authorityLink.setAttribute("href",view
authorityLink.innerText = "'Ver autoridade na BN"';
"http://acervo.bn.br/sophia_web/autoridade/detalhe/" +
elemauthorityLink.value.matchsetAttribute(/\d{9}/));
} else {'href',
`http:// find the tag value from the chosen dropdownacervo.bn.br/sophia_web/autoridade/detalhe/${
tagFromDropdown = elem.closest("value.instanceMain"match(/\d{9}/)}`
// PageForms 4.8);
} else {
// .find(".select2-chosen").text();
// find the tag value from the chosen // Page forms 4.9.1dropdown
tagFromDropdown = elem.closest('.instanceMain')
.querySelector(".select2-selection__rendered")
// PageForms 4.getAttribute("title");8
// .find(".select2-chosen").text();
tagFromDropdown = tagFromDropdown.substring(0, 3);
// find the tag value from checkedPage radioforms button4.9.1
.querySelector("'.select2-selection__rendered"')
.getAttribute('title');
tagFromDropdown = tagFromDropdown.substring(0, 3);
// find the tag value from checked radio button
 
letconst tagFromRadio = elem.closest("'.instanceMain"')
.querySelector("'input[origname=\'Field[authorityType]\']:checked"')
.value;
 
const 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 = elem.closest("'.instanceMain"')
.querySelector("'select[origname=\'Field[ind1]\'] option:checked"')
.value;
let ind2 = elem.closest("'.instanceMain"')
.querySelector("'select[origname=\'Field[ind2]\'] option:checked"')
.value;
 
// declare the 008 field default values
let directOrIndirectGeogSubdiv = "",''; // 06
let kindOfRecord = "",''; // 09
let descriptiveCatalogingRules = "'c",'; // 10
let subjectHeadingSystem = "'n",'; // 11
let typeOfSeries = "'n",'; // 12
let numberedOrUnnumberedSeries = "'n",'; // 13
let headingUseMainOrAddedEntry = "'a",'; // 14
let headingUseSubjectAddedEntry = "'a",'; // 15
let headingUseSeriesAddedEntry = "'b",'; // 16
let typeOfSubjectSubdivision = "'n",'; // 17
let undifferentiatedPersonalName = "'n",'; // 32
let 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
const autRecordParams = {
"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": "'$a BR-FlWIK $b por $c BR-FlWIK $d BR-FlUSC"'
},
"'2"': {
"tag": tag,
"ind1": ind1,
"ind2": ind2,
"data": elem.value
},
"'3"': {
"tag": "'670"',
"data": "'$a "'
}
}
};
 
letconst url = new URL(`${window.location.origin + "}/wiki/Special:FormEdit/AutRecord"`);
// function to transform a 3rd level object to URL query strings
const makeUrlParams = (obj) => {
for (letconst [key, value] of Object.entries(obj)) {
if (typeof value === "'object"') {
for (letconst [key2, value2] of Object.entries(value)) {
if (typeof value2 === "'object"') {
for (letconst [key3, value3] of Object.entries(value2)) {
url.searchParams.set(`${key}[${key2}][${key3}]`, value3);
}
} else {
url.searchParams.set(`${key}[${key2}]`, value2);
}
}
} else {
url.searchParams.set(key, value);
}
 
}
};
makeUrlParams(autRecordParams);
authorityLink.innerText = "Criar autoridade";
authorityLink.setAttribute("href", url.pathname + url.search);
}
} else authorityLink.style.display = "";{
} url.searchParams.set(key, value);
});
}
};
makeUrlParams(autRecordParams);
authorityLink.innerText = "'Criar autoridade"';
authorityLink.setAttribute("'href"', url.pathname + url.search);
}
authorityLink.style.display = '';
});
});
}
 
function rmCarriageReturn() {
const textareas = document.body.querySelectorAll("'textarea"');
textareas.forEach(elem(textarea) => {
elemtextarea.value = elemtextarea.value.replace("'
"', ""'');
});
}
 
function rmHtmlTags() {
const textareas = document.body.querySelectorAll("'textarea"');
textareas.forEach(elem(textarea) => {
elemtextarea.value = elemtextarea.value.replace(/<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g, ""'');
});
}
 
function rmTxtFromHiddenTexareas() {
const textareas = document.body.querySelectorAll("'span.hiddenByPF"');
textareas.forEach((elem) => {
elem.querySelectorAll("'textarea"').forEach(elem(textarea) => {
elemtextarea.value = ""'';
});
});
}
 
function normalizeInput() {
const textareas = document.body.querySelectorAll("'textarea"');
textareas.forEach(elem(textarea) => {
let normalizedInput = elemtextarea.value;
normalizedInput = elem.valuenormalizedInput
// "$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"');
elemtextarea.value = normalizedInput;
});
}
 
// calls main functions
createMarcFieldHelpLink();
createAuthorityLinks();
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
// createMarcFieldHelpLink() e createAuthorityLinks() são novamente chamadas.
// https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
 
// create an observer instance
letconst observer = new MutationObserver(function (mutations) => {
mutations.forEach((mutation) => {
letconst newNodes = mutation.addedNodes; // DOM NodeList
if (newNodes.length !== 0) { // if there are new nodes added
createMarcFieldHelpLink();
createAuthorityLinks();
}
});
});
});
 
// select the target node
const target = document.querySelector("'.multipleTemplateList"');
 
// configuration of the observer
letconst 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();
rmTxtFromHiddenTexareas();
rmCarriageReturn();
rmHtmlTags();
normalizeInput();
});
 
if (document.readyState === "'complete"' || (document.readyState !== "'loading"')) {
main();
} else {
document.addEventListener("'DOMContentLoaded"', main);
}
Usuário anônimo

Menu de navegação