Difference between revisions of "MediaWiki:Common.js"

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

Revision as of 19:53, 8 March 2021

           // 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)

                    if (areVersesAlreadyFetched(verse)) {
                        return
                    } else {
                        verse.setAttribute('loaded', true);
                        let newLis = 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'
            }

            async function createDinamicLis(verse) {
                let parsedVerse = verse.children[0].innerText
                //let parsedVerse = verse.getAttribute("verse")
                let ulElement = verse.children[2].children[1]

                fetchedVerses = await fetchNWTVerses(parseVerseAttribute(parsedVerse));
                return createLiElements(fetchedVerses, ulElement);
            }

            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('')
                }
            }

            async function fetchNWTVerses(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();

                            })
                    }
                })
            }

            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
            }