MediaWiki:MarcEditorDynamicLinks.js: mudanças entre as edições
Ir para navegação
Ir para pesquisar
Esta mensagem desaparecerá após todas as tarefas relevantes terem sido resolvidas.
Semantic MediaWiki
Há 1 tarefa incompleta ou pendente para finalizar a instalação do Semantic MediaWiki. Um administrador ou usuário com permissões suficientes pode completá-la. Isso deve ser feito antes da adição de novos dados para evitar inconsistências. (fix link) |
(replace jquery) |
||
Linha 1: | Linha 1: | ||
// Author: @vitorsilverio |
// Author: @vitorsilverio |
||
// Author: @jaideraf |
// Author: @jaideraf |
||
if (document.readyState === 'complete' || (document.readyState !== 'loading')) { |
|||
main(); |
|||
} else { |
|||
document.addEventListener('DOMContentLoaded', main); |
|||
} |
|||
function main() { |
|||
/////////////////////////////////////////////////////////////////// |
|||
/////////////////////////////////////////////////////////////////// |
|||
// make collapsible CSS clickable (space or enter to click) |
|||
// make collapsible CSS clickable (space or enter to click) |
|||
// from: https://alligator.io/css/collapsible/ |
|||
// from: https://alligator.io/css/collapsible/ |
|||
"use strict"; |
|||
"use strict"; |
|||
let myCollapsibleLabels = document.querySelectorAll(".lbl-toggle"); |
|||
let myCollapsibleLabels = document.querySelectorAll(".lbl-toggle"); |
|||
Array.from(myCollapsibleLabels).forEach(label => { |
Array.from(myCollapsibleLabels).forEach(label => { |
||
label.addEventListener("keydown", e => { |
label.addEventListener("keydown", e => { |
||
// 32 === spacebar |
// 32 === spacebar |
||
// 13 === enter |
// 13 === enter |
||
if (e.which === 32 || e.which === 13) { |
if (e.which === 32 || e.which === 13) { |
||
e.preventDefault(); |
e.preventDefault(); |
||
label.click(); |
label.click(); |
||
} |
} |
||
}); |
|||
}); |
}); |
||
/////////////////////////////////////////////////////////////////// |
|||
}); |
|||
let tag = ""; |
|||
/////////////////////////////////////////////////////////////////// |
|||
let |
let tagFromDropdown = ""; |
||
let tagFromDropdown = ""; |
|||
function createMarcFieldHelpLink() { |
function createMarcFieldHelpLink() { |
||
const tagInputs = document.body.querySelectorAll('.tagInput'); |
const tagInputs = document.body.querySelectorAll('.tagInput'); |
||
tagInputs.forEach(elem => { |
tagInputs.forEach(elem => { |
||
const marcFieldHelpLink = document.createElement('a'); |
const marcFieldHelpLink = document.createElement('a'); |
||
marcFieldHelpLink.setAttribute('target', '_blank'); |
marcFieldHelpLink.setAttribute('target', '_blank'); |
||
marcFieldHelpLink.innerText = `(?)`; |
marcFieldHelpLink.innerText = `(?)`; |
||
const marcFieldHelpLinkClass = elem.closest('table').querySelector('.marcFieldHelpLink'); |
const marcFieldHelpLinkClass = elem.closest('table').querySelector('.marcFieldHelpLink'); |
||
marcFieldHelpLinkClass.appendChild(marcFieldHelpLink); |
marcFieldHelpLinkClass.appendChild(marcFieldHelpLink); |
||
// find the tag value from the chosen dropdown |
// find the tag value from the chosen dropdown |
||
marcFieldHelpLinkClass.addEventListener('mouseover', event => { |
marcFieldHelpLinkClass.addEventListener('mouseover', event => { |
||
tagFromDropdown = event.target.closest('.instanceMain').querySelector('.select2-selection__rendered').getAttribute('title'); |
tagFromDropdown = event.target.closest('.instanceMain').querySelector('.select2-selection__rendered').getAttribute('title'); |
||
tagFromDropdown = tagFromDropdown.substring(0, 3); |
tagFromDropdown = tagFromDropdown.substring(0, 3); |
||
marcFieldHelpLink.setAttribute('title', |
marcFieldHelpLink.setAttribute('title', |
||
`Documentação do campo ${tagFromDropdown}`); |
`Documentação do campo ${tagFromDropdown}`); |
||
// build the URL |
// build the URL |
||
if (window.location.href.match(/A\d{6}/) || |
if (window.location.href.match(/A\d{6}/) || |
||
window.location.href.match(/AutRecord/)) { |
window.location.href.match(/AutRecord/)) { |
||
marcFieldHelpLink.setAttribute('href', 'http://marc.febab.org/a' + tagFromDropdown); |
marcFieldHelpLink.setAttribute('href', 'http://marc.febab.org/a' + tagFromDropdown); |
||
} else { |
} else { |
||
marcFieldHelpLink.setAttribute('href', `https://www.loc.gov/marc/bibliographic/bd${tagFromDropdown}.html`); |
marcFieldHelpLink.setAttribute('href', `https://www.loc.gov/marc/bibliographic/bd${tagFromDropdown}.html`); |
||
} |
} |
||
}); |
|||
}); |
}); |
||
} |
} |
||
} |
|||
function createAuthorityLinks() { |
function createAuthorityLinks() { |
||
const textareas = document.body.querySelectorAll('textarea.has-authority-control'); |
const textareas = document.body.querySelectorAll('textarea.has-authority-control'); |
||
textareas.forEach(elem => { |
textareas.forEach(elem => { |
||
let authorityLink = document.createElement('a'); |
let authorityLink = document.createElement('a'); |
||
authorityLink.setAttribute('title', 'Abre uma nova aba para criar ou editar um registro de autoridade'); |
authorityLink.setAttribute('title', 'Abre uma nova aba para criar ou editar um registro de autoridade'); |
||
authorityLink.setAttribute('target', '_blank'); |
authorityLink.setAttribute('target', '_blank'); |
||
authorityLink.innerText = 'Criar autoridade'; |
authorityLink.innerText = 'Criar autoridade'; |
||
authorityLink.style.display = 'none'; |
authorityLink.style.display = 'none'; |
||
let createAuthorityLink = elem.closest('table').querySelector('.createAuthorityLink'); |
let createAuthorityLink = elem.closest('table').querySelector('.createAuthorityLink'); |
||
createAuthorityLink.appendChild(authorityLink); |
createAuthorityLink.appendChild(authorityLink); |
||
let pattern1 = /\$0\sA\d{6}/; |
let pattern1 = /\$0\sA\d{6}/; |
||
let pattern2 = /\$0\s\(BN\)\d{9}/; |
let pattern2 = /\$0\s\(BN\)\d{9}/; |
||
elem.addEventListener('focusout', () => { |
elem.addEventListener('focusout', () => { |
||
// if already recorded |
// if already recorded |
||
if (pattern1.test(elem.value)) { |
if (pattern1.test(elem.value)) { |
||
// build the URL for Wikincat aut record edit |
// build the URL for Wikincat aut record edit |
||
authorityLink.innerText = 'Editar autoridade'; |
authorityLink.innerText = 'Editar autoridade'; |
||
authorityLink.setAttribute('href', |
authorityLink.setAttribute('href', |
||
'/wiki/Special:FormEdit/AutRecord/Autoridade:' + |
'/wiki/Special:FormEdit/AutRecord/Autoridade:' + |
||
elem.value.match(/A\d{6}/)); |
elem.value.match(/A\d{6}/)); |
||
} else if (pattern2.test(elem.value)) { |
} else if (pattern2.test(elem.value)) { |
||
// build the URL for BN aut record view |
// build the URL for BN aut record view |
||
authorityLink.innerText = 'Ver autoridade na BN'; |
authorityLink.innerText = 'Ver autoridade na BN'; |
||
authorityLink.setAttribute('href', |
authorityLink.setAttribute('href', |
||
'http://acervo.bn.br/sophia_web/autoridade/detalhe/' + |
'http://acervo.bn.br/sophia_web/autoridade/detalhe/' + |
||
elem.value.match(/\d{9}/)); |
elem.value.match(/\d{9}/)); |
||
} else { |
} else { |
||
// find the tag value from the chosen dropdown |
// find the tag value from the chosen dropdown |
||
tagFromDropdown = elem.closest(".instanceMain") |
tagFromDropdown = elem.closest(".instanceMain") |
||
// PageForms 4.8 |
// PageForms 4.8 |
||
// .find(".select2-chosen").text(); |
// .find(".select2-chosen").text(); |
||
// Page forms 4.9.1 |
// Page forms 4.9.1 |
||
.querySelector('.select2-selection__rendered') |
.querySelector('.select2-selection__rendered') |
||
.getAttribute('title'); |
.getAttribute('title'); |
||
tagFromDropdown = tagFromDropdown.substring(0, 3); |
tagFromDropdown = tagFromDropdown.substring(0, 3); |
||
// find the tag value from checked radio button |
// find the tag value from checked radio button |
||
let tagFromRadio = elem.closest('.instanceMain') |
let tagFromRadio = elem.closest('.instanceMain') |
||
.querySelector("input[origname='Field[authorityType]']:checked") |
.querySelector("input[origname='Field[authorityType]']:checked") |
||
.value; |
.value; |
||
let authorityTypes = { |
let authorityTypes = { |
||
"Pessoa": "100", |
"Pessoa": "100", |
||
"Entidade coletiva": "110", |
"Entidade coletiva": "110", |
||
"Evento": "111", |
"Evento": "111", |
||
"Título uniforme": "130", |
"Título uniforme": "130", |
||
"Tópico": "150", |
"Tópico": "150", |
||
"Local": "151" |
"Local": "151" |
||
}; |
}; |
||
if (tagFromRadio in authorityTypes) { |
if (tagFromRadio in authorityTypes) { |
||
tag = authorityTypes[tagFromRadio]; |
tag = authorityTypes[tagFromRadio]; |
||
} |
} |
||
// declare the indicators default values |
// declare the indicators default values |
||
let ind1 = elem.closest(".instanceMain") |
let ind1 = elem.closest(".instanceMain") |
||
.querySelector("select[origname='Field[ind1]'] option:checked") |
.querySelector("select[origname='Field[ind1]'] option:checked") |
||
.value; |
.value; |
||
let ind2 = elem.closest(".instanceMain") |
let ind2 = elem.closest(".instanceMain") |
||
.querySelector("select[origname='Field[ind2]'] option:checked") |
.querySelector("select[origname='Field[ind2]'] option:checked") |
||
.value; |
.value; |
||
// declare the 008 field default values |
// declare the 008 field default values |
||
let directOrIndirectGeogSubdiv = "", // 06 |
let directOrIndirectGeogSubdiv = "", // 06 |
||
kindOfRecord = "", // 09 |
kindOfRecord = "", // 09 |
||
descriptiveCatalogingRules = "c", // 10 |
descriptiveCatalogingRules = "c", // 10 |
||
subjectHeadingSystem = "n", // 11 |
subjectHeadingSystem = "n", // 11 |
||
typeOfSeries = "n", // 12 |
typeOfSeries = "n", // 12 |
||
numberedOrUnnumberedSeries = "n", // 13 |
numberedOrUnnumberedSeries = "n", // 13 |
||
headingUseMainOrAddedEntry = "a", // 14 |
headingUseMainOrAddedEntry = "a", // 14 |
||
headingUseSubjectAddedEntry = "a", // 15 |
headingUseSubjectAddedEntry = "a", // 15 |
||
headingUseSeriesAddedEntry = "b", // 16 |
headingUseSeriesAddedEntry = "b", // 16 |
||
typeOfSubjectSubdivision = "n", // 17 |
typeOfSubjectSubdivision = "n", // 17 |
||
undifferentiatedPersonalName = "n", // 32 |
undifferentiatedPersonalName = "n", // 32 |
||
levelOfEstablishment = "a"; // 33 |
levelOfEstablishment = "a"; // 33 |
||
// set the 008 field and indicadors specific values |
// set the 008 field and indicadors specific values |
||
if (tag === "100") { |
if (tag === "100") { |
||
undifferentiatedPersonalName = "a"; |
undifferentiatedPersonalName = "a"; |
||
ind2 = ""; |
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"; |
|||
} |
} |
||
if (tag === "110") { |
|||
// in case of autocomplete of 260 |
|||
if ( |
if (tagFromDropdown === "260") { |
||
directOrIndirectGeogSubdiv = "n"; |
|||
kindOfRecord = "b"; |
|||
headingUseMainOrAddedEntry = "b"; |
|||
headingUseSubjectAddedEntry = "b"; |
|||
levelOfEstablishment = "n"; |
|||
ind1 = "1"; |
|||
} |
|||
ind2 = ""; |
|||
tagFromDropdown === "630" || |
|||
tagFromDropdown === "730") { |
|||
ind2 = ind1; // an inverted value happens here, see and |
|||
ind1 = ""; // compare bib. and auth. 130 MARC definitions |
|||
} |
} |
||
if (tag === "111") { |
|||
ind1 = "2"; |
|||
ind2 = ""; |
|||
descriptiveCatalogingRules = "n"; |
|||
subjectHeadingSystem = "z"; |
|||
headingUseMainOrAddedEntry = "b"; |
|||
ind1 = ""; // 150 and 151 indicators must be empty in |
|||
ind2 = ""; // authority MARC records |
|||
if (tag === "151") { |
|||
typeOfSubjectSubdivision = "d"; |
|||
} |
} |
||
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 |
||
"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+" |
|||
} |
} |
||
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 |
|||
let 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 " |
|||
} |
|||
} |
|||
}; |
|||
let url = new URL(location.origin + '/wiki/Special:FormEdit/AutRecord'); |
let url = new URL(location.origin + '/wiki/Special:FormEdit/AutRecord'); |
||
const makeUrlParams = (obj) => { |
const makeUrlParams = (obj) => { |
||
for (const [key, value] of Object.entries(obj)) { |
for (const [key, value] of Object.entries(obj)) { |
||
if (typeof value === 'object') { |
if (typeof value === 'object') { |
||
for (const [key2, value2] of Object.entries(value)) { |
for (const [key2, value2] of Object.entries(value)) { |
||
if (typeof value2 === 'object') { |
if (typeof value2 === 'object') { |
||
for (const [key3, value3] of Object.entries(value2)) { |
for (const [key3, value3] of Object.entries(value2)) { |
||
url.searchParams.set(`${key}[${key2}][${key3}]`, value3); |
url.searchParams.set(`${key}[${key2}][${key3}]`, value3); |
||
} |
|||
} else { |
|||
url.searchParams.set(`${key}[${key2}]`, value2); |
|||
} |
} |
||
} else { |
|||
url.searchParams.set(`${key}[${key2}]`, value2); |
|||
} |
} |
||
} else { |
|||
url.searchParams.set(key, value); |
|||
} |
} |
||
} else { |
|||
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 => { |
|||
makeUrlParams(autRecordParams); |
|||
elem.value = elem.value.replace(" ", ""); |
|||
authorityLink.setAttribute("href", url.pathname + url.search); |
|||
} |
|||
authorityLink.style.display = ''; |
|||
}); |
}); |
||
} |
} |
||
} |
|||
function |
function rmHtmlTags() { |
||
const textareas = document.body.querySelectorAll('textarea'); |
const textareas = document.body.querySelectorAll('textarea'); |
||
textareas.forEach(elem => { |
textareas.forEach(elem => { |
||
elem.value = elem.value.replace(" |
elem.value = elem.value.replace(/<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g, ""); |
||
}); |
}); |
||
} |
|||
} |
|||
function |
function rmTxtFromHiddenTexareas() { |
||
const textareas = document.body.querySelectorAll(' |
const textareas = document.body.querySelectorAll('span.hiddenByPF'); |
||
textareas.forEach(elem => { |
textareas.forEach(elem => { |
||
elem.querySelectorAll('textarea').forEach(elem => { |
|||
elem.value = elem.value.replace(/<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g, ""); |
|||
elem.value = ''; |
|||
}); |
|||
}); |
|||
} |
|||
}); |
|||
} |
|||
function |
function normalizeInput() { |
||
const textareas = document.body.querySelectorAll(' |
const textareas = document.body.querySelectorAll('textarea'); |
||
textareas.forEach(elem => { |
textareas.forEach(elem => { |
||
let normalizedInput = elem.value; |
|||
elem.querySelectorAll('textarea').forEach(elem => { |
|||
normalizedInput = elem.value |
|||
// "$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"); |
|||
elem.value = normalizedInput; |
|||
}); |
}); |
||
} |
} |
||
} |
|||
function normalizeInput() { |
|||
const textareas = document.body.querySelectorAll('textarea'); |
|||
textareas.forEach(elem => { |
|||
let normalizedInput = elem.value; |
|||
normalizedInput = elem.value |
|||
// "$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"); |
|||
elem.value = normalizedInput; |
|||
}); |
|||
} |
|||
$(document).ready(function () { |
|||
// calls main functions |
// calls main functions |
||
createMarcFieldHelpLink(); |
createMarcFieldHelpLink(); |
||
Linha 319: | Linha 324: | ||
normalizeInput(); |
normalizeInput(); |
||
}); |
}); |
||
} |
|||
}); |
Edição das 14h11min de 9 de agosto de 2022
// Author: @vitorsilverio
// Author: @jaideraf
if (document.readyState === 'complete' || (document.readyState !== 'loading')) {
main();
} else {
document.addEventListener('DOMContentLoaded', main);
}
function main() {
///////////////////////////////////////////////////////////////////
// make collapsible CSS clickable (space or enter to click)
// from: https://alligator.io/css/collapsible/
"use strict";
let myCollapsibleLabels = document.querySelectorAll(".lbl-toggle");
Array.from(myCollapsibleLabels).forEach(label => {
label.addEventListener("keydown", e => {
// 32 === spacebar
// 13 === enter
if (e.which === 32 || e.which === 13) {
e.preventDefault();
label.click();
}
});
});
///////////////////////////////////////////////////////////////////
let tag = "";
let tagFromDropdown = "";
function createMarcFieldHelpLink() {
const tagInputs = document.body.querySelectorAll('.tagInput');
tagInputs.forEach(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', 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}`);
// build the URL
if (window.location.href.match(/A\d{6}/) ||
window.location.href.match(/AutRecord/)) {
marcFieldHelpLink.setAttribute('href', 'http://marc.febab.org/a' + tagFromDropdown);
} else {
marcFieldHelpLink.setAttribute('href', `https://www.loc.gov/marc/bibliographic/bd${tagFromDropdown}.html`);
}
});
});
}
function createAuthorityLinks() {
const textareas = document.body.querySelectorAll('textarea.has-authority-control');
textareas.forEach(elem => {
let 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';
let createAuthorityLink = elem.closest('table').querySelector('.createAuthorityLink');
createAuthorityLink.appendChild(authorityLink);
let pattern1 = /\$0\sA\d{6}/;
let pattern2 = /\$0\s\(BN\)\d{9}/;
elem.addEventListener('focusout', () => {
// 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)) {
// build the URL for BN aut record view
authorityLink.innerText = 'Ver autoridade na BN';
authorityLink.setAttribute('href',
'http://acervo.bn.br/sophia_web/autoridade/detalhe/' +
elem.value.match(/\d{9}/));
} else {
// find the tag value from the chosen dropdown
tagFromDropdown = elem.closest(".instanceMain")
// PageForms 4.8
// .find(".select2-chosen").text();
// Page forms 4.9.1
.querySelector('.select2-selection__rendered')
.getAttribute('title');
tagFromDropdown = tagFromDropdown.substring(0, 3);
// find the tag value from checked radio button
let tagFromRadio = elem.closest('.instanceMain')
.querySelector("input[origname='Field[authorityType]']:checked")
.value;
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 = 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
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
let 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 "
}
}
};
let url = new URL(location.origin + '/wiki/Special:FormEdit/AutRecord');
const makeUrlParams = (obj) => {
for (const [key, value] of Object.entries(obj)) {
if (typeof value === 'object') {
for (const [key2, value2] of Object.entries(value)) {
if (typeof value2 === 'object') {
for (const [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);
}
authorityLink.style.display = '';
});
});
}
function rmCarriageReturn() {
const textareas = document.body.querySelectorAll('textarea');
textareas.forEach(elem => {
elem.value = elem.value.replace(" ", "");
});
}
function rmHtmlTags() {
const textareas = document.body.querySelectorAll('textarea');
textareas.forEach(elem => {
elem.value = elem.value.replace(/<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g, "");
});
}
function rmTxtFromHiddenTexareas() {
const textareas = document.body.querySelectorAll('span.hiddenByPF');
textareas.forEach(elem => {
elem.querySelectorAll('textarea').forEach(elem => {
elem.value = '';
});
});
}
function normalizeInput() {
const textareas = document.body.querySelectorAll('textarea');
textareas.forEach(elem => {
let normalizedInput = elem.value;
normalizedInput = elem.value
// "$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");
elem.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), 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
createMarcFieldHelpLink();
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 clicking save...
const saveBtn = document.body.querySelector('#wpSave');
saveBtn.addEventListener('click', () => {
observer.disconnect();
rmTxtFromHiddenTexareas();
rmCarriageReturn();
rmHtmlTags();
normalizeInput();
});
}