Open main menu

Changes

MediaWiki:Common.js

2,442 bytes added, 19:53, 8 March 2021
no edit summary
// configuration
let colorForSpecialElements = '#933221'
// can be one of: <ro> <hu> <en>
let configuredFor = 'ro'
let roNWTURL = 'http://localhost:3001/ro/'
let huNWTURL = 'http://localhost:3001/hu/'
let enNWTURL = 'http://localhost:3001/en/'
// DOM side effects
var verses = Array.prototype.slice.call( document.getElementsByClassName("bible-verse"), 0 );
verses.forEach(verse => {
verse.addEventListener("mouseover", () => {
verse.style.cursor = "pointer"
});
});
verses.forEach((verse) => {
verse.addEventListener("click", async () => {
toggleState(verse)
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }; // =====================JAVASCRIPT AREA=====================// configurationvar colorForSpecialElements = '#933221'; // can be one of: <ro> <hu> <en> var configuredFor = 'ro';let roNWTURL = 'http://localhost:3001/ro/';let huNWTURL = 'http://localhost:3001/hu/';let enNWTURL = 'http://localhost:3001/en/'; // DOM side effects var verses = Array.prototype.slice.call(document.getElementsByClassName("bible-verse"), 0);verses.forEach(verse => { verse.addEventListener("mouseover", () => { verse.style.cursor = "pointer"; });});verses.forEach(verse => { verse.addEventListener("click", /*#__PURE__*/_asyncToGenerator(function* () { toggleState(verse);  if (areVersesAlreadyFetched(verse)) { return; } else { verse.setAttribute('loaded', true); let newLis = yield await createDinamicLis(verse); clearAllChildrenAndAddElementsToParrent( verse.children[2].children[1], newLis); } }));}); function clearAllChildrenAndAddElementsToParrent(parrent, children) { parrent.innerHTML = ''; children.forEach(child => parrent.appendChild(child));} function areVersesAlreadyFetched(verse) { return verse.getAttribute('loaded') == 'true';} function createDinamicLis(_x) { return _createDinamicLis.apply(this, arguments ); function _createDinamicLis() { _createDinamicLis = _asyncToGenerator(function* (verse) { let parsedVerse = verse.children[0].innerText; //let parsedVerse = verse.getAttribute("verse")  let ulElement = verse.children[2].children[1]; fetchedVerses = yield fetchNWTVerses(parseVerseAttribute(parsedVerse)); return createLiElements(fetchedVerses, ulElement); }); return _createDinamicLis.apply(this, arguments); function createLiElements(fetchedVerses, ul) { let result = []; fetchedVerses.forEach(versesGroup => { let li = document.createElement('li'); li.style.color = colorForSpecialElements; li.style.fontSize = '1.5em'; li.style.textTransform = 'capitalize'; li.style.paddingBottom = '0.3em'; li.innerHTML = versesGroup.book + ' ' + versesGroup.chapter; result.push(li); versesGroup.verseElements.forEach(verse => { let li = document.createElement('li'); let hr = document.createElement('hr'); hr.style.borderStyle = 'ridge'; let liContent = ""; verse.forEach(el => { liContent = liContent + el + '<br>'; }); li.innerHTML = liContent; result.push(li); result.push(hr); }); }); return result;} function toggleState(verse) { let verseDisplay = verse.getElementsByClassName("translations-container")[0].style.display; hideAllVerses(verses); verse.getElementsByClassName("translations-container")[0].style.display = renderState(verseDisplay, "block");} function hideAllVerses(elements) { elements.forEach(element => { element.getElementsByClassName("translations-container")[0].style.display = "none"; });}
function renderStateclearAllChildrenAndAddElementsToParrent(currentStateparrent, toggledStatechildren) { if parrent.innerHTML = '' children.forEach(currentState child === "none"> parrent.appendChild(child)) { return toggledState; }
function areVersesAlreadyFetched(verse) { return "none";verse.getAttribute('loaded') == 'true' }
async function getVersesFromMainBlockcreateDinamicLis(mainBlockverse) { let result parsedVerse = verse.children[0];.innerText changeNumberOfTheFirstVerseWithNumberOne //let parsedVerse = verse.getAttribute(mainBlock"verse"); Array let ulElement = verse.from(mainBlockchildren[2].children).forEach(verse => { let verseContent = [1];
if (verse.classList.contains('verse')) { Array.from(verse.children).forEach(child fetchedVerses => { if await fetchNWTVerses(child.innerText !== '') { verseContent.push(stripSymbolsparseVerseAttribute(['+', '*'], child.innerTextparsedVerse)); } }); changeColorOfVerseNumber return createLiElements(verseContent); result.push(verseContent); } }fetchedVerses, ulElement); return result; }
function changeColorOfVerseNumbercreateLiElements(verseContentfetchedVerses, ul) { let result = []; fetchedVerses.forEach(versesGroup=> { let re li = new RegExpdocument.createElement(/^\d'li') li.style.color = colorForSpecialElements li.style.fontSize = '1.5em' li.style.textTransform = 'capitalize' li.style.paddingBottom = '0.3em' li.innerHTML = versesGroup.book + ' ' +|\dversesGroup.chapter result.push(li) versesGroup.verseElements.forEach(verse => { let li = document.createElement('li') let hr = document.createElement('hr') hr.style.borderStyle = 'ridge' let liContent = "" verse.forEach(el => { liContent = liContent +\b|\del +'<br>' }) li.innerHTML = liContent result.push(li) result.push(?=\whr) })/g }); //starts with digit, one or more return result }
function toggleState(verse) { let m verseDisplay = reverse.execgetElementsByClassName(verseContent"translations-container")[0].style.display; hideAllVerses(verses); verse.getElementsByClassName("translations-container")[0].style.display = renderState(verseDisplay, "block"); }
if function hideAllVerses(m != nullelements) { verseContent[0] elements.forEach((element) = verseContent[0]> { element.replacegetElementsByClassName(m"translations-container")[0], '<strong .style.display ="color: ' + colorForSpecialElements + 'none"' + '>' + m[0] + '</strong>'); }) }
function changeNumberOfTheFirstVerseWithNumberOnerenderState(mainBlockcurrentState, toggledState) { let re if (currentState == new RegExp(/^\d+|\d+\b|\d+(?=\w"none")/g); //starts with digit, one or more{ return toggledState } return "none" }
let m = re.exec function getVersesFromMainBlock(mainBlock.getElementsByClassName('verse')[0].children[0].innerText);{ mainBlock.getElementsByClassName('verse')[0].children[0].innerText let result = '&nbsp' + mainBlock.getElementsByClassName('verse')[0].children[0].innerText.replace(m[0], 1);}
function getSpecificVerses changeNumberOfTheFirstVerseWithNumberOne(versesList, arrayOfSpecificVersesmainBlock) { let result = []; arrayOfSpecificVerses.forEach(verseNumber => { result.push(versesList[verseNumber - 1]); }); return result;} // Bussiness logic
Array.from(mainBlock.children).forEach(verse => {
let verseContent = []
if (verse.classList.contains('verse')) {
function parseVerseAttribute Array.from(verseStringverse.children) .forEach(child => { // 21:1;22:2 if (child.innerText != '' ) { let arrayOfGroupsDelimiter = verseContent.push(stripSymbols(['+',';*'; // 21:1-7],9child.innerText)) } })
let versesGroupsDelimiter = ','; let book = verseString.replace changeColorOfVerseNumber(/ .*/, ''verseContent); let stringWithoutBook = verseString.replace(book, ''); let result = { book: book, groups: processChaptersAndVerses(stringWithoutBook) }; return result;
function processChaptersAndVerses(stringWithoutBook) { let groups = stringWithoutBook.split(arrayOfGroupsDelimiter); let result = []; groups.forEach(group => { result.push(processGroup(groupverseContent)); } }); return result; }
if function changeColorOfVerseNumber(verseString.includes(";")verseContent) { let book re = verseString.replacenew RegExp(/ .*^\d+|\d+\b|\d+(?=\w)/, ''g);//starts with digit, one or more let stringWithoutBook m = verseStringre.replaceexec(book, ''verseContent[0]); let groups if (m != stringWithoutBook.split(';'null);{ let parsedGroups verseContent[0] = verseContent[0]; groups.forEachreplace(group m[0], '<strong style="color: ' + colorForSpecialElements + '"' + '> { parsedGroups.push(createObjectForStringGroup(group)' + m[0] + '</strong>'); }); }
function processGroupchangeNumberOfTheFirstVerseWithNumberOne(groupmainBlock) { let chapter re = groupnew RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more let m = re.splitexec(mainBlock.getElementsByClassName(':verse')[0];.children[0].innerText) let verses mainBlock.getElementsByClassName('verse')[0].children[0].innerText = group'&nbsp' + mainBlock.splitgetElementsByClassName(':verse')[10].children[0]; return { chapter: parseInt.innerText.replace(chapter)m[0], verses: processVersesGroups(verses1) }; }
function processVersesGroupsgetSpecificVerses(versesversesList, arrayOfSpecificVerses) { let versesGroups = verses.split(','); let result = []; versesGroups arrayOfSpecificVerses.forEach(verseGroup verseNumber => { if (isRangeVerseGroup(verseGroup)) { Array.prototype.push.apply(result, processVerseGroup(verseGroup)); } else { result.push(processVerseGroup(verseGroup)versesList[verseNumber - 1]); } }); return result; }
function processVerseGroup(group) {
if (isSimpleVerseGroup(group)) {
return Number(group);
}
if // Bussiness logic function parseVerseAttribute(isMultipleVerseGroup(group)verseString) { console.log("Range verse group // 21:1;22: " + group)2 let arrayOfGroupsDelimiter = ';' // 21:1-7,9 } let versesGroupsDelimiter = ','
if let book = verseString.replace(isRangeVerseGroup(group/ .*/,'')) { let parsed stringWithoutBook = groupverseString.splitreplace(book, '-'); let result = [];
for ( let i result = Number{ book: book, groups: processChaptersAndVerses(parsed[0]stringWithoutBook); i <= Number(parsed[1]); i++) {} return result.push(Number(i)); }
return function processChaptersAndVerses(stringWithoutBook) { let groups = stringWithoutBook.split(arrayOfGroupsDelimiter); let result = [] groups.forEach(group => { result;.push(processGroup(group)) }) return result }
function createObjectForStringGroup if (group) { let chapter = Number(groupverseString.splitincludes(":;")[0]);{ let verses book = groupverseString.splitreplace(":"/ .*/,'')[1]; let parsedVerses stringWithoutBook = parseVerses(verses); consoleverseString.logreplace(book, ''); }}
function fetchNWTVerses let groups = stringWithoutBook.split(_x2';') ; let parsedGroups = []; groups.forEach(group => { return _fetchNWTVerses parsedGroups.applypush(createObjectForStringGroup(this, argumentsgroup)); }) }
function _fetchNWTVersesprocessGroup(group) { _fetchNWTVerses let chapter = _asyncToGeneratorgroup.split(function* (verses':') {[0] // let roBaseURL verses = 'https://wwwgroup.jw.org/ro/biblioteca/biblia/nwt/carti/' if split(configuredFor === 'ro:') { URL = roNWTURL; }[1]
if return {chapter: parseInt(configuredFor === 'hu'chapter) { URL = huNWTURL, verses: processVersesGroups(verses)}; }
if function processVersesGroups(configuredFor verses) { let versesGroups =verses.split(',') let result =[]; versesGroups.forEach(verseGroup = 'en'> { if (isRangeVerseGroup(verseGroup)) { Array.prototype.push.apply(result, processVerseGroup(verseGroup)) ; } else { URL = enNWTURL result.push(processVerseGroup(verseGroup)) } }) return result; }
let book = verses function processVerseGroup(group) { if(isSimpleVerseGroup(group)) { return Number(group) } if(isMultipleVerseGroup(group)) { console.booklog("Range verse group: " + group); return new Promise } if(isRangeVerseGroup(resolve, rejectgroup)) { let parsed => {group.split('-') let result = []; for (let i = Number(parsed[0]); i <= Number(parsed[1]); i++) { result.push(Number(i)) } return result } }
for (let i = 0; i < verses.groups.length; i++) {
let url = URL + book + "/" + verses.groups[i].chapter;
fetch(url).then(response => response.text()).then(data => {
var parser = new DOMParser();
var htmlDoc = parser.parseFromString(data, 'text/html');
return htmlDoc;
}).then(parser => {
let mainBlock = parser.getElementById('bibleText');
if function createObjectForStringGroup(verses.groups.length - 1 == igroup) { result let chapter = Number(group.pushsplit({ book": clearDashSimbolFromInputString(book"), chapter: verses.groups[i0].chapter,) verseElements: getSpecificVerses(getVersesFromMainBlock(mainBlock), let verses= group.groups[i].verses) }); resolve(result); } else { result.pushsplit({ book": clearDashSimbolFromInputString(book"), chapter: verses.groups[i1].chapter, verseElements: getSpecificVerses let parsedVerses = parseVerses(getVersesFromMainBlock(mainBlock), verses.groups[i].verses) }); } }).catch(error => { console.log(error''); reject(); }); } }); }); return _fetchNWTVerses.apply(this, arguments); }
async function clearDashSimbolFromInputStringfetchNWTVerses(stringverses) { return string // let roBaseURL = 'https://www.replaceAlljw.org/ro/biblioteca/biblia/nwt/carti/' if (configuredFor === 'ro') { URL = roNWTURL } if (configuredFor === '-hu', ) { URL = huNWTURL } if (configuredFor === ' en');{ URL = enNWTURL } let book = verses.book
function stripSymbols return new Promise((symbolsToBeRemovedresolve, verseElementreject) { symbolsToBeRemoved.forEach(symbol => { verseElement let result = verseElement.replaceAll(symbol, '')[]; }); return verseElement;}
function isSimpleVerseGroup for (group) { if (Number(group)let i = 0; i < verses.groups.length; i++) { return true; } let url = URL + book + "/" + verses.groups[i].chapter
fetch(url) .then(response => response.text()) .then(data => { var parser = new DOMParser(); var htmlDoc = parser.parseFromString(data, 'text/html'); return false;htmlDoc }) .then(parser => { let mainBlock = parser.getElementById('bibleText') if((verses.groups.length -1) == i) { result.push({book: clearDashSimbolFromInputString(book), chapter: verses.groups[i].chapter, verseElements:getSpecificVerses(getVersesFromMainBlock(mainBlock), verses.groups[i].verses)}) resolve(result) } else { result.push({book: clearDashSimbolFromInputString(book), chapter: verses.groups[i].chapter, verseElements:getSpecificVerses(getVersesFromMainBlock(mainBlock), verses.groups[i].verses)}) } }) .catch(error => { console.log(error) reject();
function isMultipleVerseGroup(group }) { if (group.includes(',' } })) { return true; }
function clearDashSimbolFromInputString(string) { return false;string.replaceAll('-', ' ') }
function isRangeVerseGroupstripSymbols(groupsymbolsToBeRemoved, verseElement) { if symbolsToBeRemoved.forEach(groupsymbol => { verseElement = verseElement.includesreplaceAll(symbol, '-') }) { return true;verseElement }
function isSimpleVerseGroup(group) { if (Number(group)) { return true } return false } function isMultipleVerseGroup(group) { if (group.includes(',')) { return true } return false } function isRangeVerseGroup(group) { if (group.includes('-')) { return true } return false; } //=====================TESTING AREA=====