ElectronicBabylonianLiterature/ebl-frontend

View on GitHub
src/common/HtmlLineType.tsx

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
function isTextLine(element: JQuery): boolean {
  return element.children().first().hasClass('Transliteration__TextLine')
}

function isLineNumber(element: JQuery): boolean {
  return element.hasClass('chapter-display__line-number')
}

function isTranslationLine(element: JQuery): boolean {
  return element.hasClass('chapter-display__translation')
}

function isNoteLine(element: JQuery): boolean {
  return element.find('div').hasClass('chapter-display__note')
}

function isParallelsLine(element: JQuery): boolean {
  return element.find('div,ul').hasClass('chapter-display__parallels')
}

function isRulingDollarLine(element: JQuery): boolean {
  return element.find('div').hasClass('Transliteration__ruling')
}

function isEmptyLine(element: JQuery): boolean {
  return element.text().length < 2
}

function isDollarAndAtLine(element: JQuery): boolean {
  return element.find('.Transliteration__DollarAndAtLine').length > 0
}

function isTransliterationLine(element: JQuery): boolean {
  return element.find('*[class^="Transliteration"]').length > 0
}

const allChecks: { type: string; check: (JQuery) => boolean }[] = [
  { check: isTextLine, type: 'textLine' },
  { check: isLineNumber, type: 'lineNumber' },
  { check: isTranslationLine, type: 'translationLine' },
  { check: isNoteLine, type: 'noteLine' },
  { check: isParallelsLine, type: 'parallelsLine' },
  { check: isRulingDollarLine, type: 'rulingDollarLine' },
  { check: isTextLine, type: 'textLine' },
  { check: isEmptyLine, type: 'emptyLine' },
  { check: isDollarAndAtLine, type: 'dollarAndAtLine' },
  { check: isTransliterationLine, type: 'transliterationLine' },
]

export function getLineTypeByHtml(element: JQuery): string {
  let lineType = 'otherLine'
  for (const typeCheck of allChecks) {
    const { check, type } = typeCheck
    if (check(element)) {
      lineType = type
      break
    }
  }
  return lineType
}