Difference between revisions of "MediaWiki:Common.js"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
− | |||
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 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); } } | ||
Line 6: | Line 5: | ||
// =====================JAVASCRIPT AREA===================== | // =====================JAVASCRIPT AREA===================== | ||
// configuration | // 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); | var verses = Array.prototype.slice.call(document.getElementsByClassName("bible-verse"), 0); | ||
− | verses.forEach | + | verses.forEach(verse => { |
− | verse.addEventListener("mouseover", | + | verse.addEventListener("mouseover", () => { |
verse.style.cursor = "pointer"; | verse.style.cursor = "pointer"; | ||
}); | }); | ||
}); | }); | ||
− | verses.forEach | + | verses.forEach(verse => { |
− | verse.addEventListener("click", _asyncToGenerator | + | verse.addEventListener("click", /*#__PURE__*/_asyncToGenerator(function* () { |
− | + | toggleState(verse); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | if (areVersesAlreadyFetched(verse)) { | |
− | + | return; | |
− | + | } else { | |
− | + | verse.setAttribute('loaded', true); | |
− | + | let newLis = yield createDinamicLis(verse); | |
− | + | clearAllChildrenAndAddElementsToParrent(verse.children[2].children[1], newLis); | |
− | + | } | |
− | + | })); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
− | } | ||
}); | }); | ||
function clearAllChildrenAndAddElementsToParrent(parrent, children) { | function clearAllChildrenAndAddElementsToParrent(parrent, children) { | ||
parrent.innerHTML = ''; | parrent.innerHTML = ''; | ||
− | children.forEach | + | children.forEach(child => parrent.appendChild(child)); |
− | |||
− | |||
} | } | ||
Line 69: | Line 46: | ||
function _createDinamicLis() { | function _createDinamicLis() { | ||
− | _createDinamicLis = _asyncToGenerator( | + | _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); | return _createDinamicLis.apply(this, arguments); | ||
} | } | ||
function createLiElements(fetchedVerses, ul) { | function createLiElements(fetchedVerses, ul) { | ||
− | + | let result = []; | |
− | fetchedVerses.forEach | + | fetchedVerses.forEach(versesGroup => { |
− | + | let li = document.createElement('li'); | |
li.style.color = colorForSpecialElements; | li.style.color = colorForSpecialElements; | ||
li.style.fontSize = '1.5em'; | li.style.fontSize = '1.5em'; | ||
Line 105: | Line 66: | ||
li.innerHTML = versesGroup.book + ' ' + versesGroup.chapter; | li.innerHTML = versesGroup.book + ' ' + versesGroup.chapter; | ||
result.push(li); | result.push(li); | ||
− | versesGroup.verseElements.forEach | + | versesGroup.verseElements.forEach(verse => { |
− | + | let li = document.createElement('li'); | |
− | + | let hr = document.createElement('hr'); | |
hr.style.borderStyle = 'ridge'; | hr.style.borderStyle = 'ridge'; | ||
− | + | let liContent = ""; | |
− | verse.forEach | + | verse.forEach(el => { |
liContent = liContent + el + '<br>'; | liContent = liContent + el + '<br>'; | ||
}); | }); | ||
Line 122: | Line 83: | ||
function toggleState(verse) { | function toggleState(verse) { | ||
− | + | let verseDisplay = verse.getElementsByClassName("translations-container")[0].style.display; | |
hideAllVerses(verses); | hideAllVerses(verses); | ||
verse.getElementsByClassName("translations-container")[0].style.display = renderState(verseDisplay, "block"); | verse.getElementsByClassName("translations-container")[0].style.display = renderState(verseDisplay, "block"); | ||
Line 128: | Line 89: | ||
function hideAllVerses(elements) { | function hideAllVerses(elements) { | ||
− | elements.forEach | + | elements.forEach(element => { |
element.getElementsByClassName("translations-container")[0].style.display = "none"; | element.getElementsByClassName("translations-container")[0].style.display = "none"; | ||
}); | }); | ||
Line 142: | Line 103: | ||
function getVersesFromMainBlock(mainBlock) { | function getVersesFromMainBlock(mainBlock) { | ||
− | + | let result = []; | |
changeNumberOfTheFirstVerseWithNumberOne(mainBlock); | changeNumberOfTheFirstVerseWithNumberOne(mainBlock); | ||
− | Array.from(mainBlock.children).forEach | + | Array.from(mainBlock.children).forEach(verse => { |
− | + | let verseContent = []; | |
if (verse.classList.contains('verse')) { | if (verse.classList.contains('verse')) { | ||
− | Array.from(verse.children).forEach | + | Array.from(verse.children).forEach(child => { |
if (child.innerText != '') { | if (child.innerText != '') { | ||
verseContent.push(stripSymbols(['+', '*'], child.innerText)); | verseContent.push(stripSymbols(['+', '*'], child.innerText)); | ||
Line 161: | Line 122: | ||
function changeColorOfVerseNumber(verseContent) { | function changeColorOfVerseNumber(verseContent) { | ||
− | + | let re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more | |
− | + | let m = re.exec(verseContent[0]); | |
if (m != null) { | if (m != null) { | ||
Line 171: | Line 132: | ||
function changeNumberOfTheFirstVerseWithNumberOne(mainBlock) { | function changeNumberOfTheFirstVerseWithNumberOne(mainBlock) { | ||
− | + | let re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more | |
− | + | let m = re.exec(mainBlock.getElementsByClassName('verse')[0].children[0].innerText); | |
mainBlock.getElementsByClassName('verse')[0].children[0].innerText = ' ' + mainBlock.getElementsByClassName('verse')[0].children[0].innerText.replace(m[0], 1); | mainBlock.getElementsByClassName('verse')[0].children[0].innerText = ' ' + mainBlock.getElementsByClassName('verse')[0].children[0].innerText.replace(m[0], 1); | ||
} | } | ||
function getSpecificVerses(versesList, arrayOfSpecificVerses) { | function getSpecificVerses(versesList, arrayOfSpecificVerses) { | ||
− | + | let result = []; | |
− | arrayOfSpecificVerses.forEach | + | arrayOfSpecificVerses.forEach(verseNumber => { |
result.push(versesList[verseNumber - 1]); | result.push(versesList[verseNumber - 1]); | ||
}); | }); | ||
Line 188: | Line 149: | ||
function parseVerseAttribute(verseString) { | function parseVerseAttribute(verseString) { | ||
// 21:1;22:2 | // 21:1;22:2 | ||
− | + | let arrayOfGroupsDelimiter = ';'; // 21:1-7,9 | |
− | + | let versesGroupsDelimiter = ','; | |
− | + | let book = verseString.replace(/ .*/, ''); | |
− | + | let stringWithoutBook = verseString.replace(book, ''); | |
− | + | let result = { | |
book: book, | book: book, | ||
groups: processChaptersAndVerses(stringWithoutBook) | groups: processChaptersAndVerses(stringWithoutBook) | ||
Line 200: | Line 161: | ||
function processChaptersAndVerses(stringWithoutBook) { | function processChaptersAndVerses(stringWithoutBook) { | ||
− | + | let groups = stringWithoutBook.split(arrayOfGroupsDelimiter); | |
− | + | let result = []; | |
− | groups.forEach | + | groups.forEach(group => { |
result.push(processGroup(group)); | result.push(processGroup(group)); | ||
}); | }); | ||
Line 209: | Line 170: | ||
if (verseString.includes(";")) { | if (verseString.includes(";")) { | ||
− | + | let book = verseString.replace(/ .*/, ''); | |
− | + | let stringWithoutBook = verseString.replace(book, ''); | |
− | + | let groups = stringWithoutBook.split(';'); | |
− | + | let parsedGroups = []; | |
− | + | groups.forEach(group => { | |
− | |||
− | |||
− | groups.forEach | ||
parsedGroups.push(createObjectForStringGroup(group)); | parsedGroups.push(createObjectForStringGroup(group)); | ||
}); | }); | ||
Line 222: | Line 180: | ||
function processGroup(group) { | function processGroup(group) { | ||
− | + | let chapter = group.split(':')[0]; | |
− | + | let verses = group.split(':')[1]; | |
return { | return { | ||
chapter: parseInt(chapter), | chapter: parseInt(chapter), | ||
Line 231: | Line 189: | ||
function processVersesGroups(verses) { | function processVersesGroups(verses) { | ||
− | + | let versesGroups = verses.split(','); | |
− | + | let result = []; | |
− | versesGroups.forEach | + | versesGroups.forEach(verseGroup => { |
if (isRangeVerseGroup(verseGroup)) { | if (isRangeVerseGroup(verseGroup)) { | ||
Array.prototype.push.apply(result, processVerseGroup(verseGroup)); | Array.prototype.push.apply(result, processVerseGroup(verseGroup)); | ||
Line 253: | Line 211: | ||
if (isRangeVerseGroup(group)) { | if (isRangeVerseGroup(group)) { | ||
− | + | let parsed = group.split('-'); | |
− | + | let result = []; | |
− | for ( | + | for (let i = Number(parsed[0]); i <= Number(parsed[1]); i++) { |
− | + | result.push(Number(i)); | |
} | } | ||
− | return | + | return result; |
} | } | ||
} | } | ||
function createObjectForStringGroup(group) { | function createObjectForStringGroup(group) { | ||
− | + | let chapter = Number(group.split(":")[0]); | |
− | + | let verses = group.split(":")[1]; | |
− | + | let parsedVerses = parseVerses(verses); | |
console.log(''); | console.log(''); | ||
} | } | ||
Line 277: | Line 235: | ||
function _fetchNWTVerses() { | function _fetchNWTVerses() { | ||
− | _fetchNWTVerses = _asyncToGenerator( | + | _fetchNWTVerses = _asyncToGenerator(function* (verses) { |
− | + | // let roBaseURL = 'https://www.jw.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; | |
− | + | return new Promise((resolve, reject) => { | |
− | + | let 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 (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(); | |
− | + | }); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | } | + | }); |
− | } | + | }); |
return _fetchNWTVerses.apply(this, arguments); | return _fetchNWTVerses.apply(this, arguments); | ||
} | } | ||
Line 351: | Line 291: | ||
function stripSymbols(symbolsToBeRemoved, verseElement) { | function stripSymbols(symbolsToBeRemoved, verseElement) { | ||
− | symbolsToBeRemoved.forEach | + | symbolsToBeRemoved.forEach(symbol => { |
verseElement = verseElement.replaceAll(symbol, ''); | verseElement = verseElement.replaceAll(symbol, ''); | ||
}); | }); |
Revision as of 20:28, 8 March 2021
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=====================
// 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", /*#__PURE__*/_asyncToGenerator(function* () {
toggleState(verse);
if (areVersesAlreadyFetched(verse)) {
return;
} else {
verse.setAttribute('loaded', true);
let newLis = yield 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 renderState(currentState, toggledState) {
if (currentState === "none") {
return toggledState;
}
return "none";
}
function getVersesFromMainBlock(mainBlock) {
let result = [];
changeNumberOfTheFirstVerseWithNumberOne(mainBlock);
Array.from(mainBlock.children).forEach(verse => {
let verseContent = [];
if (verse.classList.contains('verse')) {
Array.from(verse.children).forEach(child => {
if (child.innerText != '') {
verseContent.push(stripSymbols(['+', '*'], child.innerText));
}
});
changeColorOfVerseNumber(verseContent);
result.push(verseContent);
}
});
return result;
}
function changeColorOfVerseNumber(verseContent) {
let re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more
let m = re.exec(verseContent[0]);
if (m != null) {
verseContent[0] = verseContent[0].replace(m[0], '<strong style="color: ' + colorForSpecialElements + '"' + '>' + m[0] + '</strong>');
}
}
function changeNumberOfTheFirstVerseWithNumberOne(mainBlock) {
let re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more
let m = re.exec(mainBlock.getElementsByClassName('verse')[0].children[0].innerText);
mainBlock.getElementsByClassName('verse')[0].children[0].innerText = ' ' + mainBlock.getElementsByClassName('verse')[0].children[0].innerText.replace(m[0], 1);
}
function getSpecificVerses(versesList, arrayOfSpecificVerses) {
let result = [];
arrayOfSpecificVerses.forEach(verseNumber => {
result.push(versesList[verseNumber - 1]);
});
return result;
} // Bussiness logic
function parseVerseAttribute(verseString) {
// 21:1;22:2
let arrayOfGroupsDelimiter = ';'; // 21:1-7,9
let versesGroupsDelimiter = ',';
let book = verseString.replace(/ .*/, '');
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(group));
});
return result;
}
if (verseString.includes(";")) {
let book = verseString.replace(/ .*/, '');
let stringWithoutBook = verseString.replace(book, '');
let groups = stringWithoutBook.split(';');
let parsedGroups = [];
groups.forEach(group => {
parsedGroups.push(createObjectForStringGroup(group));
});
}
function processGroup(group) {
let chapter = group.split(':')[0];
let verses = group.split(':')[1];
return {
chapter: parseInt(chapter),
verses: processVersesGroups(verses)
};
}
function processVersesGroups(verses) {
let versesGroups = verses.split(',');
let result = [];
versesGroups.forEach(verseGroup => {
if (isRangeVerseGroup(verseGroup)) {
Array.prototype.push.apply(result, processVerseGroup(verseGroup));
} else {
result.push(processVerseGroup(verseGroup));
}
});
return result;
}
function processVerseGroup(group) {
if (isSimpleVerseGroup(group)) {
return Number(group);
}
if (isMultipleVerseGroup(group)) {
console.log("Range verse group: " + group);
}
if (isRangeVerseGroup(group)) {
let parsed = group.split('-');
let result = [];
for (let i = Number(parsed[0]); i <= Number(parsed[1]); i++) {
result.push(Number(i));
}
return result;
}
}
function createObjectForStringGroup(group) {
let chapter = Number(group.split(":")[0]);
let verses = group.split(":")[1];
let parsedVerses = parseVerses(verses);
console.log('');
}
}
function fetchNWTVerses(_x2) {
return _fetchNWTVerses.apply(this, arguments);
}
function _fetchNWTVerses() {
_fetchNWTVerses = _asyncToGenerator(function* (verses) {
// let roBaseURL = 'https://www.jw.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;
return new Promise((resolve, reject) => {
let 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 (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();
});
}
});
});
return _fetchNWTVerses.apply(this, arguments);
}
function clearDashSimbolFromInputString(string) {
return string.replaceAll('-', ' ');
}
function stripSymbols(symbolsToBeRemoved, verseElement) {
symbolsToBeRemoved.forEach(symbol => {
verseElement = verseElement.replaceAll(symbol, '');
});
return 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;
}