Difference between revisions of "MediaWiki:Common.js"

From Data JW United
Jump to navigation Jump to search
Line 1: Line 1:
 
$(function () {
 
$(function () {
            // configuration
+
          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); } }
            var colorForSpecialElements = '#933221'
+
 
            // can be one of: <ro> <hu> <en>
+
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); }); }; }
            var configuredFor = 'ro'
+
 
            var roNWTURL = 'http://localhost:3001/ro/'
+
// =====================JAVASCRIPT AREA=====================
            var huNWTURL = 'http://localhost:3001/hu/'
+
// configuration
            var enNWTURL = 'http://localhost:3001/en/'
+
let colorForSpecialElements = '#933221'; // can be one of: <ro> <hu> <en>
            // DOM side effects
+
 
            var verses = Array.prototype.slice.call( document.getElementsByClassName("bible-verse"), 0 );
+
let configuredFor = 'ro';
            verses.forEach(verse => {
+
let roNWTURL = 'http://localhost:3001/ro/';
                verse.addEventListener("mouseover", () => {
+
let huNWTURL = 'http://localhost:3001/hu/';
                    verse.style.cursor = "pointer"
+
let enNWTURL = 'http://localhost:3001/en/'; // DOM side effects
                });
+
 
            });
+
var verses = Array.prototype.slice.call(document.getElementsByClassName("bible-verse"), 0);
            verses.forEach((verse) => {
+
verses.forEach(verse => {
                verse.addEventListener("click", async () => {
+
  verse.addEventListener("mouseover", () => {
                    toggleState(verse)
+
    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");
 +
}
  
                    if (areVersesAlreadyFetched(verse)) {
+
function hideAllVerses(elements) {
                        return
+
  elements.forEach(element => {
                    } else {
+
    element.getElementsByClassName("translations-container")[0].style.display = "none";
                        verse.setAttribute('loaded', true);
+
  });
                        let newLis = await createDinamicLis(verse)
+
}
                        clearAllChildrenAndAddElementsToParrent(
 
                            verse.children[2].children[1], newLis
 
                        )
 
                    }
 
                })
 
            })
 
  
            function clearAllChildrenAndAddElementsToParrent(parrent, children) {
+
function renderState(currentState, toggledState) {
                parrent.innerHTML = ''
+
  if (currentState === "none") {
                children.forEach(child => parrent.appendChild(child))
+
    return toggledState;
            }
+
  }
  
            function areVersesAlreadyFetched(verse) {
+
  return "none";
                return verse.getAttribute('loaded') == 'true'
+
}
            }
 
  
            async function createDinamicLis(verse) {
+
function getVersesFromMainBlock(mainBlock) {
                var parsedVerse = verse.children[0].innerText
+
  let result = [];
                //let parsedVerse = verse.getAttribute("verse")
+
  changeNumberOfTheFirstVerseWithNumberOne(mainBlock);
                var ulElement = verse.children[2].children[1]
+
  Array.from(mainBlock.children).forEach(verse => {
 +
    let verseContent = [];
  
                fetchedVerses = await fetchNWTVerses(parseVerseAttribute(parsedVerse));
+
    if (verse.classList.contains('verse')) {
                return createLiElements(fetchedVerses, ulElement);
+
      Array.from(verse.children).forEach(child => {
            }
+
        if (child.innerText != '') {
 +
          verseContent.push(stripSymbols(['+', '*'], child.innerText));
 +
        }
 +
      });
 +
      changeColorOfVerseNumber(verseContent);
 +
      result.push(verseContent);
 +
    }
 +
  });
 +
  return result;
 +
}
  
            function createLiElements(fetchedVerses, ul) {
+
function changeColorOfVerseNumber(verseContent) {
                var result = [];
+
  let re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more
                fetchedVerses.forEach(versesGroup=> {
 
                    var 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 => {
 
                        var li = document.createElement('li')
 
                        var hr = document.createElement('hr')
 
                        hr.style.borderStyle = 'ridge'
 
                        var liContent = ""
 
                        verse.forEach(el => {
 
                            liContent = liContent + el + '<br>'
 
                        })
 
                        li.innerHTML = liContent
 
                        result.push(li)
 
                        result.push(hr)
 
                    })
 
                });
 
                return result
 
            }
 
  
            function toggleState(verse) {
+
  let m = re.exec(verseContent[0]);
                var verseDisplay = verse.getElementsByClassName("translations-container")[0].style.display;
 
                hideAllVerses(verses);
 
                verse.getElementsByClassName("translations-container")[0].style.display = renderState(verseDisplay, "block");
 
            }
 
  
            function hideAllVerses(elements) {
+
  if (m != null) {
                elements.forEach((element) => {
+
    verseContent[0] = verseContent[0].replace(m[0], '<strong style="color: ' + colorForSpecialElements + '"' + '>' + m[0] + '</strong>');
                    element.getElementsByClassName("translations-container")[0].style.display = "none";
+
  }
                })
+
}
            }
 
  
            function renderState(currentState, toggledState) {
+
function changeNumberOfTheFirstVerseWithNumberOne(mainBlock) {
                if (currentState === "none") {
+
  let re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more
                    return toggledState
 
                }
 
                return "none"
 
            }
 
  
            function getVersesFromMainBlock(mainBlock) {
+
  let m = re.exec(mainBlock.getElementsByClassName('verse')[0].children[0].innerText);
              var result = []
+
  mainBlock.getElementsByClassName('verse')[0].children[0].innerText = '&nbsp' + mainBlock.getElementsByClassName('verse')[0].children[0].innerText.replace(m[0], 1);
 +
}
  
                changeNumberOfTheFirstVerseWithNumberOne(mainBlock)
+
function getSpecificVerses(versesList, arrayOfSpecificVerses) {
 +
  let result = [];
 +
  arrayOfSpecificVerses.forEach(verseNumber => {
 +
    result.push(versesList[verseNumber - 1]);
 +
  });
 +
  return result;
 +
} // Bussiness logic
  
                Array.from(mainBlock.children).forEach(verse => {
 
                    var verseContent = []
 
                    if (verse.classList.contains('verse')) {
 
  
                        Array.from(verse.children).forEach(child => {
+
function parseVerseAttribute(verseString) {
                            if (child.innerText != '' ) {
+
  // 21:1;22:2
                                verseContent.push(stripSymbols(['+','*'], child.innerText))
+
  let arrayOfGroupsDelimiter = ';'; // 21:1-7,9
                            }
 
                        })
 
  
                        changeColorOfVerseNumber(verseContent)
+
  let versesGroupsDelimiter = ',';
 +
  let book = verseString.replace(/ .*/, '');
 +
  let stringWithoutBook = verseString.replace(book, '');
 +
  let result = {
 +
    book: book,
 +
    groups: processChaptersAndVerses(stringWithoutBook)
 +
  };
 +
  return result;
  
                        result.push(verseContent)
+
  function processChaptersAndVerses(stringWithoutBook) {
                    }
+
    let groups = stringWithoutBook.split(arrayOfGroupsDelimiter);
                })
+
    let result = [];
                return result
+
    groups.forEach(group => {
            }
+
      result.push(processGroup(group));
 +
    });
 +
    return result;
 +
  }
  
            function changeColorOfVerseNumber(verseContent) {
+
  if (verseString.includes(";")) {
                var re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more
+
    let book = verseString.replace(/ .*/, '');
                var m = re.exec(verseContent[0])
+
    let stringWithoutBook = verseString.replace(book, '');
                if (m != null) {
+
    let groups = stringWithoutBook.split(';');
                    verseContent[0] = verseContent[0].replace(m[0], '<strong style="color: ' + colorForSpecialElements + '"' + '>' + m[0] + '</strong>')
+
    let parsedGroups = [];
                }
+
    groups.forEach(group => {
            }
+
      parsedGroups.push(createObjectForStringGroup(group));
 +
    });
 +
  }
  
            function changeNumberOfTheFirstVerseWithNumberOne(mainBlock) {
+
  function processGroup(group) {
                var re = new RegExp(/^\d+|\d+\b|\d+(?=\w)/g); //starts with digit, one or more
+
    let chapter = group.split(':')[0];
                var m = re.exec(mainBlock.getElementsByClassName('verse')[0].children[0].innerText)
+
    let verses = group.split(':')[1];
                mainBlock.getElementsByClassName('verse')[0].children[0].innerText = '&nbsp' + mainBlock.getElementsByClassName('verse')[0].children[0].innerText.replace(m[0], 1)
+
    return {
            }
+
      chapter: parseInt(chapter),
 +
      verses: processVersesGroups(verses)
 +
    };
 +
  }
  
            function getSpecificVerses(versesList, arrayOfSpecificVerses) {
+
  function processVersesGroups(verses) {
                var result = []
+
    let versesGroups = verses.split(',');
                arrayOfSpecificVerses.forEach(verseNumber => {
+
    let result = [];
                    result.push(versesList[verseNumber - 1])
+
    versesGroups.forEach(verseGroup => {
                })
+
      if (isRangeVerseGroup(verseGroup)) {
                return result
+
        Array.prototype.push.apply(result, processVerseGroup(verseGroup));
            }
+
      } else {
 +
        result.push(processVerseGroup(verseGroup));
 +
      }
 +
    });
 +
    return result;
 +
  }
  
 +
  function processVerseGroup(group) {
 +
    if (isSimpleVerseGroup(group)) {
 +
      return Number(group);
 +
    }
  
            // Bussiness logic
+
    if (isMultipleVerseGroup(group)) {
            function parseVerseAttribute(verseString) {
+
      console.log("Range verse group: " + group);
                // 21:1;22:2
+
    }
                var arrayOfGroupsDelimiter = ';'
 
                // 21:1-7,9
 
                var versesGroupsDelimiter = ','
 
  
                var book = verseString.replace(/ .*/,'')
+
    if (isRangeVerseGroup(group)) {
                var stringWithoutBook = verseString.replace(book, '')
+
      let parsed = group.split('-');
 +
      let result = [];
  
                var result = { book: book, groups: processChaptersAndVerses(stringWithoutBook)}
+
      for (let i = Number(parsed[0]); i <= Number(parsed[1]); i++) {
                return result
+
        result.push(Number(i));
 +
      }
  
                function processChaptersAndVerses(stringWithoutBook) {
+
      return result;
                    var groups = stringWithoutBook.split(arrayOfGroupsDelimiter);
+
    }
                    var esult = []
+
  }
                    groups.forEach(group => {
 
                        result.push(processGroup(group))
 
                    })
 
                    return result
 
                }
 
  
                if (verseString.includes(";")) {
+
  function createObjectForStringGroup(group) {
                    var book = verseString.replace(/ .*/,'')
+
    let chapter = Number(group.split(":")[0]);
                    var tringWithoutBook = verseString.replace(book, '')
+
    let verses = group.split(":")[1];
 +
    let parsedVerses = parseVerses(verses);
 +
    console.log('');
 +
  }
 +
}
  
                    var groups = stringWithoutBook.split(';');
+
function fetchNWTVerses(_x2) {
                    var parsedGroups = [];
+
  return _fetchNWTVerses.apply(this, arguments);
                    groups.forEach(group => {
+
}
                        parsedGroups.push(createObjectForStringGroup(group));
 
                    })
 
                }
 
  
                function processGroup(group) {
+
function _fetchNWTVerses() {
                    var chapter = group.split(':')[0]
+
  _fetchNWTVerses = _asyncToGenerator(function* (verses) {
                    var verses = group.split(':')[1]
+
    // let roBaseURL = 'https://www.jw.org/ro/biblioteca/biblia/nwt/carti/'
 +
    if (configuredFor === 'ro') {
 +
      URL = roNWTURL;
 +
    }
  
                    return {chapter: parseInt(chapter), verses: processVersesGroups(verses)};
+
    if (configuredFor === 'hu') {
                }
+
      URL = huNWTURL;
 +
    }
  
                function processVersesGroups(verses) {
+
    if (configuredFor === 'en') {
                    var versesGroups = verses.split(',')
+
      URL = enNWTURL;
                    var result = [];
+
    }
                    versesGroups.forEach(verseGroup => {
 
                        if (isRangeVerseGroup(verseGroup)) {
 
                            Array.prototype.push.apply(result, processVerseGroup(verseGroup));
 
                        } else {
 
                            result.push(processVerseGroup(verseGroup))
 
                        }
 
                    })
 
                    return result;
 
                }
 
  
                function processVerseGroup(group) {
+
    let book = verses.book;
                    if(isSimpleVerseGroup(group)) {
+
    return new Promise((resolve, reject) => {
                        return Number(group)
+
      let result = [];
                    }
 
                    if(isMultipleVerseGroup(group)) {
 
                        console.log("Range verse group: " + group);
 
                    }
 
                    if(isRangeVerseGroup(group)) {
 
                        var parsed = group.split('-')
 
                        var result = [];
 
                        for (var 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');
  
                function createObjectForStringGroup(group) {
+
          if (verses.groups.length - 1 == i) {
                    var chapter = Number(group.split(":")[0])
+
            result.push({
                    var verses = group.split(":")[1]
+
              book: clearDashSimbolFromInputString(book),
                    var parsedVerses = parseVerses(verses);
+
              chapter: verses.groups[i].chapter,
                    console.log('')
+
              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);
 +
}
  
            async function fetchNWTVerses(verses) {
+
function clearDashSimbolFromInputString(string) {
                // let roBaseURL = 'https://www.jw.org/ro/biblioteca/biblia/nwt/carti/'
+
  return string.replaceAll('-', ' ');
                if (configuredFor === 'ro') {
+
}
                    URL = roNWTURL
 
                }
 
                if (configuredFor === 'hu') {
 
                    URL = huNWTURL
 
                }
 
                if (configuredFor === 'en') {
 
                    URL = enNWTURL
 
                }
 
                var book = verses.book
 
  
                return new Promise((resolve, reject) => {
+
function stripSymbols(symbolsToBeRemoved, verseElement) {
                    var result = [];
+
  symbolsToBeRemoved.forEach(symbol => {
 +
    verseElement = verseElement.replaceAll(symbol, '');
 +
  });
 +
  return verseElement;
 +
}
  
                    for (let i = 0; i < verses.groups.length; i++) {
+
function isSimpleVerseGroup(group) {
                        var url = URL + book + "/" + verses.groups[i].chapter
+
  if (Number(group)) {
 +
    return true;
 +
  }
  
                        fetch(url)
+
  return false;
                            .then(response => response.text())
+
}
                            .then(data => {
 
                                var parser = new DOMParser();
 
                                var htmlDoc = parser.parseFromString(data, 'text/html');
 
                                return htmlDoc
 
                            })
 
                            .then(parser => {
 
                                var 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;
                return string.replaceAll('-', ' ')
+
}
            }
 
  
            function stripSymbols(symbolsToBeRemoved, verseElement) {
+
function isRangeVerseGroup(group) {
                symbolsToBeRemoved.forEach(symbol => {
+
  if (group.includes('-')) {
                    verseElement = verseElement.replaceAll(symbol, '')
+
    return true;
                })
+
  }
                return verseElement
 
            }
 
  
            function isSimpleVerseGroup(group) {
+
  return false;
                if (Number(group)) {
+
} //=====================TESTING AREA=====
                    return true
 
                }
 
                return false
 
            }
 
            function isMultipleVerseGroup(group) {
 
                if (group.includes(',')) {
 
                    return true
 
                }
 
                return false
 
            }
 
            function isRangeVerseGroup(group) {
 
                if (group.includes('-')) {
 
                    return true
 
                }
 
                return false
 
            }
 
 
}());
 
}());

Revision as of 19:44, 8 March 2021

$(function () {
          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;
} //=====================TESTING AREA=====
}());