|
// Author: @vitorsilverio
// Author: @jaideraf
if (document.readyState === "complete" || (document.readyState !== "loading")) { ▼
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",
`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",
"`/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);
}
}
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 "')) {
▲ document.addEventListener( "'DOMContentLoaded "', main);
}
|