Difference between revisions of "MediaWiki:Common.js"

From Data JW United
Jump to navigation Jump to search
Line 1: Line 1:
"use strict";
 
 
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
var colorForSpecialElements = '#933221'; // can be one of: <ro> <hu> <en>
+
let colorForSpecialElements = '#933221'; // can be one of: <ro> <hu> <en>
  
var configuredFor = 'ro';
+
let configuredFor = 'ro';
var roNWTURL = 'http://localhost:3001/ro/';
+
let roNWTURL = 'http://localhost:3001/ro/';
var huNWTURL = 'http://localhost:3001/hu/';
+
let huNWTURL = 'http://localhost:3001/hu/';
var enNWTURL = 'http://localhost:3001/en/'; // DOM side effects
+
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(function (verse) {
+
verses.forEach(verse => {
   verse.addEventListener("mouseover", function () {
+
   verse.addEventListener("mouseover", () => {
 
     verse.style.cursor = "pointer";
 
     verse.style.cursor = "pointer";
 
   });
 
   });
 
});
 
});
verses.forEach(function (verse) {
+
verses.forEach(verse => {
   verse.addEventListener("click", _asyncToGenerator( regeneratorRuntime.mark(function _callee() {
+
   verse.addEventListener("click", /*#__PURE__*/_asyncToGenerator(function* () {
     var newLis;
+
     toggleState(verse);
    return regeneratorRuntime.wrap(function _callee$(_context) {
 
      while (1) {
 
        switch (_context.prev = _context.next) {
 
          case 0:
 
            toggleState(verse);
 
  
            if (!areVersesAlreadyFetched(verse)) {
+
    if (areVersesAlreadyFetched(verse)) {
              _context.next = 5;
+
      return;
              break;
+
    } else {
            }
+
      verse.setAttribute('loaded', true);
 
+
      let newLis = yield createDinamicLis(verse);
            return _context.abrupt("return");
+
      clearAllChildrenAndAddElementsToParrent(verse.children[2].children[1], newLis);
 
+
     }
          case 5:
+
   }));
            verse.setAttribute('loaded', true);
 
            _context.next = 8;
 
            return createDinamicLis(verse);
 
 
 
          case 8:
 
            newLis = _context.sent;
 
            clearAllChildrenAndAddElementsToParrent(verse.children[2].children[1], newLis);
 
 
 
          case 10:
 
          case "end":
 
            return _context.stop();
 
        }
 
      }
 
     }, _callee);
 
   })));
 
 
});
 
});
  
 
function clearAllChildrenAndAddElementsToParrent(parrent, children) {
 
function clearAllChildrenAndAddElementsToParrent(parrent, children) {
 
   parrent.innerHTML = '';
 
   parrent.innerHTML = '';
   children.forEach(function (child) {
+
   children.forEach(child => parrent.appendChild(child));
    return parrent.appendChild(child);
 
  });
 
 
}
 
}
  
Line 69: Line 46:
  
 
function _createDinamicLis() {
 
function _createDinamicLis() {
   _createDinamicLis = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(verse) {
+
   _createDinamicLis = _asyncToGenerator(function* (verse) {
     var parsedVerse, ulElement;
+
     let parsedVerse = verse.children[0].innerText; //let parsedVerse = verse.getAttribute("verse")
    return regeneratorRuntime.wrap(function _callee2$(_context2) {
 
      while (1) {
 
        switch (_context2.prev = _context2.next) {
 
          case 0:
 
            parsedVerse = verse.children[0].innerText; //let parsedVerse = verse.getAttribute("verse")
 
  
            ulElement = verse.children[2].children[1];
+
    let ulElement = verse.children[2].children[1];
            _context2.next = 4;
+
    fetchedVerses = yield fetchNWTVerses(parseVerseAttribute(parsedVerse));
            return fetchNWTVerses(parseVerseAttribute(parsedVerse));
+
    return createLiElements(fetchedVerses, ulElement);
 
+
   });
          case 4:
 
            fetchedVerses = _context2.sent;
 
            return _context2.abrupt("return", createLiElements(fetchedVerses, ulElement));
 
 
 
          case 6:
 
          case "end":
 
            return _context2.stop();
 
        }
 
      }
 
    }, _callee2);
 
   }));
 
 
   return _createDinamicLis.apply(this, arguments);
 
   return _createDinamicLis.apply(this, arguments);
 
}
 
}
  
 
function createLiElements(fetchedVerses, ul) {
 
function createLiElements(fetchedVerses, ul) {
   var result = [];
+
   let result = [];
   fetchedVerses.forEach(function (versesGroup) {
+
   fetchedVerses.forEach(versesGroup => {
     var li = document.createElement('li');
+
     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(function (verse) {
+
     versesGroup.verseElements.forEach(verse => {
       var li = document.createElement('li');
+
       let li = document.createElement('li');
       var hr = document.createElement('hr');
+
       let hr = document.createElement('hr');
 
       hr.style.borderStyle = 'ridge';
 
       hr.style.borderStyle = 'ridge';
       var liContent = "";
+
       let liContent = "";
       verse.forEach(function (el) {
+
       verse.forEach(el => {
 
         liContent = liContent + el + '<br>';
 
         liContent = liContent + el + '<br>';
 
       });
 
       });
Line 122: Line 83:
  
 
function toggleState(verse) {
 
function toggleState(verse) {
   var verseDisplay = verse.getElementsByClassName("translations-container")[0].style.display;
+
   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(function (element) {
+
   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) {
   var result = [];
+
   let result = [];
 
   changeNumberOfTheFirstVerseWithNumberOne(mainBlock);
 
   changeNumberOfTheFirstVerseWithNumberOne(mainBlock);
   Array.from(mainBlock.children).forEach(function (verse) {
+
   Array.from(mainBlock.children).forEach(verse => {
     var verseContent = [];
+
     let verseContent = [];
  
 
     if (verse.classList.contains('verse')) {
 
     if (verse.classList.contains('verse')) {
       Array.from(verse.children).forEach(function (child) {
+
       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) {
   var re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more
+
   let re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more
  
   var m = re.exec(verseContent[0]);
+
   let m = re.exec(verseContent[0]);
  
 
   if (m != null) {
 
   if (m != null) {
Line 171: Line 132:
  
 
function changeNumberOfTheFirstVerseWithNumberOne(mainBlock) {
 
function changeNumberOfTheFirstVerseWithNumberOne(mainBlock) {
   var re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more
+
   let re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more
  
   var m = re.exec(mainBlock.getElementsByClassName('verse')[0].children[0].innerText);
+
   let m = re.exec(mainBlock.getElementsByClassName('verse')[0].children[0].innerText);
 
   mainBlock.getElementsByClassName('verse')[0].children[0].innerText = '&nbsp' + mainBlock.getElementsByClassName('verse')[0].children[0].innerText.replace(m[0], 1);
 
   mainBlock.getElementsByClassName('verse')[0].children[0].innerText = '&nbsp' + mainBlock.getElementsByClassName('verse')[0].children[0].innerText.replace(m[0], 1);
 
}
 
}
  
 
function getSpecificVerses(versesList, arrayOfSpecificVerses) {
 
function getSpecificVerses(versesList, arrayOfSpecificVerses) {
   var result = [];
+
   let result = [];
   arrayOfSpecificVerses.forEach(function (verseNumber) {
+
   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
   var arrayOfGroupsDelimiter = ';'; // 21:1-7,9
+
   let arrayOfGroupsDelimiter = ';'; // 21:1-7,9
  
   var versesGroupsDelimiter = ',';
+
   let versesGroupsDelimiter = ',';
   var book = verseString.replace(/ .*/, '');
+
   let book = verseString.replace(/ .*/, '');
   var stringWithoutBook = verseString.replace(book, '');
+
   let stringWithoutBook = verseString.replace(book, '');
   var result = {
+
   let result = {
 
     book: book,
 
     book: book,
 
     groups: processChaptersAndVerses(stringWithoutBook)
 
     groups: processChaptersAndVerses(stringWithoutBook)
Line 200: Line 161:
  
 
   function processChaptersAndVerses(stringWithoutBook) {
 
   function processChaptersAndVerses(stringWithoutBook) {
     var groups = stringWithoutBook.split(arrayOfGroupsDelimiter);
+
     let groups = stringWithoutBook.split(arrayOfGroupsDelimiter);
     var result = [];
+
     let result = [];
     groups.forEach(function (group) {
+
     groups.forEach(group => {
 
       result.push(processGroup(group));
 
       result.push(processGroup(group));
 
     });
 
     });
Line 209: Line 170:
  
 
   if (verseString.includes(";")) {
 
   if (verseString.includes(";")) {
     var _book = verseString.replace(/ .*/, '');
+
     let book = verseString.replace(/ .*/, '');
 
+
     let stringWithoutBook = verseString.replace(book, '');
     var _stringWithoutBook = verseString.replace(_book, '');
+
     let groups = stringWithoutBook.split(';');
 
+
     let parsedGroups = [];
     var groups = _stringWithoutBook.split(';');
+
     groups.forEach(group => {
 
 
     var parsedGroups = [];
 
     groups.forEach(function (group) {
 
 
       parsedGroups.push(createObjectForStringGroup(group));
 
       parsedGroups.push(createObjectForStringGroup(group));
 
     });
 
     });
Line 222: Line 180:
  
 
   function processGroup(group) {
 
   function processGroup(group) {
     var chapter = group.split(':')[0];
+
     let chapter = group.split(':')[0];
     var verses = group.split(':')[1];
+
     let verses = group.split(':')[1];
 
     return {
 
     return {
 
       chapter: parseInt(chapter),
 
       chapter: parseInt(chapter),
Line 231: Line 189:
  
 
   function processVersesGroups(verses) {
 
   function processVersesGroups(verses) {
     var versesGroups = verses.split(',');
+
     let versesGroups = verses.split(',');
     var result = [];
+
     let result = [];
     versesGroups.forEach(function (verseGroup) {
+
     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)) {
       var parsed = group.split('-');
+
       let parsed = group.split('-');
       var _result = [];
+
       let result = [];
  
       for (var i = Number(parsed[0]); i <= Number(parsed[1]); i++) {
+
       for (let i = Number(parsed[0]); i <= Number(parsed[1]); i++) {
         _result.push(Number(i));
+
         result.push(Number(i));
 
       }
 
       }
  
       return _result;
+
       return result;
 
     }
 
     }
 
   }
 
   }
  
 
   function createObjectForStringGroup(group) {
 
   function createObjectForStringGroup(group) {
     var chapter = Number(group.split(":")[0]);
+
     let chapter = Number(group.split(":")[0]);
     var verses = group.split(":")[1];
+
     let verses = group.split(":")[1];
     var parsedVerses = parseVerses(verses);
+
     let parsedVerses = parseVerses(verses);
 
     console.log('');
 
     console.log('');
 
   }
 
   }
Line 277: Line 235:
  
 
function _fetchNWTVerses() {
 
function _fetchNWTVerses() {
   _fetchNWTVerses = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(verses) {
+
   _fetchNWTVerses = _asyncToGenerator(function* (verses) {
     var book;
+
     // let roBaseURL = 'https://www.jw.org/ro/biblioteca/biblia/nwt/carti/'
    return regeneratorRuntime.wrap(function _callee3$(_context3) {
+
    if (configuredFor === 'ro') {
      while (1) {
+
      URL = roNWTURL;
        switch (_context3.prev = _context3.next) {
+
    }
          case 0:
 
            // let roBaseURL = 'https://www.jw.org/ro/biblioteca/biblia/nwt/carti/'
 
            if (configuredFor === 'ro') {
 
              URL = roNWTURL;
 
            }
 
  
            if (configuredFor === 'hu') {
+
    if (configuredFor === 'hu') {
              URL = huNWTURL;
+
      URL = huNWTURL;
            }
+
    }
  
            if (configuredFor === 'en') {
+
    if (configuredFor === 'en') {
              URL = enNWTURL;
+
      URL = enNWTURL;
            }
+
    }
  
            book = verses.book;
+
    let book = verses.book;
            return _context3.abrupt("return", new Promise(function (resolve, reject) {
+
    return new Promise((resolve, reject) => {
              var result = [];
+
      let result = [];
  
              var _loop = function _loop(i) {
+
      for (let i = 0; i < verses.groups.length; i++) {
                var url = URL + book + "/" + verses.groups[i].chapter;
+
        let url = URL + book + "/" + verses.groups[i].chapter;
                fetch(url).then(function (response) {
+
        fetch(url).then(response => response.text()).then(data => {
                  return response.text();
+
          var parser = new DOMParser();
                }).then(function (data) {
+
          var htmlDoc = parser.parseFromString(data, 'text/html');
                  var parser = new DOMParser();
+
          return htmlDoc;
                  var htmlDoc = parser.parseFromString(data, 'text/html');
+
        }).then(parser => {
                  return htmlDoc;
+
          let mainBlock = parser.getElementById('bibleText');
                }).then(function (parser) {
 
                  var mainBlock = parser.getElementById('bibleText');
 
  
                  if (verses.groups.length - 1 == i) {
+
          if (verses.groups.length - 1 == i) {
                    result.push({
+
            result.push({
                      book: clearDashSimbolFromInputString(book),
+
              book: clearDashSimbolFromInputString(book),
                      chapter: verses.groups[i].chapter,
+
              chapter: verses.groups[i].chapter,
                      verseElements: getSpecificVerses(getVersesFromMainBlock(mainBlock), verses.groups[i].verses)
+
              verseElements: getSpecificVerses(getVersesFromMainBlock(mainBlock), verses.groups[i].verses)
                    });
+
            });
                    resolve(result);
+
            resolve(result);
                  } else {
+
          } else {
                    result.push({
+
            result.push({
                      book: clearDashSimbolFromInputString(book),
+
              book: clearDashSimbolFromInputString(book),
                      chapter: verses.groups[i].chapter,
+
              chapter: verses.groups[i].chapter,
                      verseElements: getSpecificVerses(getVersesFromMainBlock(mainBlock), verses.groups[i].verses)
+
              verseElements: getSpecificVerses(getVersesFromMainBlock(mainBlock), verses.groups[i].verses)
                    });
+
            });
                  }
+
          }
                })["catch"](function (error) {
+
        }).catch(error => {
                  console.log(error);
+
          console.log(error);
                  reject();
+
          reject();
                });
+
        });
              };
 
 
 
              for (var i = 0; i < verses.groups.length; i++) {
 
                _loop(i);
 
              }
 
            }));
 
 
 
          case 5:
 
          case "end":
 
            return _context3.stop();
 
        }
 
 
       }
 
       }
     }, _callee3);
+
     });
   }));
+
   });
 
   return _fetchNWTVerses.apply(this, arguments);
 
   return _fetchNWTVerses.apply(this, arguments);
 
}
 
}
Line 351: Line 291:
  
 
function stripSymbols(symbolsToBeRemoved, verseElement) {
 
function stripSymbols(symbolsToBeRemoved, verseElement) {
   symbolsToBeRemoved.forEach(function (symbol) {
+
   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 = '&nbsp' + 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;
}