Skip to content
Snippets Groups Projects
code.js 5.3 KiB
Newer Older
AA2875's avatar
AA2875 committed
function init() {
    let infoText = document.getElementById('infoText')
    infoText.innerHTML = 'Ladataan tehtävälista palvelimelta, odota...'
AA2875's avatar
AA2875 committed
    loadJumps()
AA2875's avatar
AA2875 committed
}

AA2875's avatar
AA2875 committed
async function loadJumps() {
AA2875's avatar
AA2875 committed
    let response = await fetch('http://localhost:3000/jumps')
    let jumps = await response.json()
    console.log(jumps)
AA2875's avatar
AA2875 committed
    showJumps(jumps)
AA2875's avatar
AA2875 committed
}

AA2875's avatar
AA2875 committed
function createJumpListItem(jump) {    
AA2875's avatar
AA2875 committed
    let li = document.createElement('li')
AA2875's avatar
AA2875 committed
    let li_attr_id = document.createAttribute('id')
    let li_attr_class = document.createAttribute('class')
    li_attr_class.value = 'jumpItem'
    li.setAttributeNode(li_attr_class)
    li_attr_id.value = jump._id
    li.setAttributeNode(li_attr_id)
AA2875's avatar
AA2875 committed

AA2875's avatar
AA2875 committed
    let spanDate = document.createElement('span')
    let spanClassDate = document.createAttribute('class')
    spanClassDate.value = 'headerJumpDate'
    spanDate.setAttributeNode(spanClassDate)
AA2875's avatar
AA2875 committed
    let jumpDate = document.createTextNode(jump.date)
AA2875's avatar
AA2875 committed
    spanDate.appendChild(jumpDate)
    let jumpHeader = document.createTextNode('#' + jump.number)
    li.appendChild(jumpHeader)
    li.appendChild(spanDate)
AA2875's avatar
AA2875 committed

AA2875's avatar
AA2875 committed
    let spanMore = document.createElement('span')
    let spanClassMore = document.createAttribute('class')
    spanClassMore.value = 'headerMore'
    spanMore.setAttributeNode(spanClassMore)
    let moreButton = document.createTextNode('')
    spanMore.appendChild(moreButton)
    li.appendChild(spanMore)
AA2875's avatar
AA2875 committed

    li.appendChild(jumpItemFullInfo(jump))  // KORJAA piilottus tuplaklikkaus

    // Shows and hides rest of the jump info
    li.onclick = function() {
        let clickedItem = document.getElementById(jump._id).getElementsByClassName('fullJumpInfo')[0]
        if (clickedItem.style.display != 'none') {
            clickedItem.style.display = 'none'
        }
        else {
            clickedItem.style.display = 'list-item'
        }
    }
AA2875's avatar
AA2875 committed
    return li
}
AA2875's avatar
AA2875 committed

AA2875's avatar
AA2875 committed

function jumpItemFullInfo(jump) {
    const specs = [
        jump.height,
        jump.falltime
    ]
    let ul = document.createElement('ul')
    let ulClass = document.createAttribute('class')
    ulClass.value = 'fullJumpInfo'
    ul.setAttributeNode(ulClass)
    specs.forEach(spec => {
        let li = document.createElement('li')
        let jumpSpec = document.createTextNode(spec)
        li.appendChild(jumpSpec)
        ul.appendChild(li)
    });
    return ul
}
AA2875's avatar
AA2875 committed

AA2875's avatar
AA2875 committed
function showJumps(jumps) {
AA2875's avatar
AA2875 committed
    let jumpsList = document.getElementById('jumpsList')
    let infoText = document.getElementById('infoText')
    // no jumps
    if (jumps.length === 0) {
AA2875's avatar
AA2875 committed
        infoText.innerHTML = 'Ei hyppyjä'
AA2875's avatar
AA2875 committed
    } else {    
AA2875's avatar
AA2875 committed
        jumps.slice().reverse().forEach(jump => {
AA2875's avatar
AA2875 committed
            let li = createJumpListItem(jump)        
AA2875's avatar
AA2875 committed
            jumpsList.appendChild(li)
        })
    infoText.innerHTML = ''
    }
}

async function addJump() {
    let newJumpNumber = document.getElementById('newJumpNumber')
    let newJumpDate = document.getElementById('newJumpDate')
AA2875's avatar
AA2875 committed
    let newJumpHeight = document.getElementById('newJumpHeight')
    let newJumpFalltime = document.getElementById('newJumpFalltime')
AA2875's avatar
AA2875 committed
    const data = { 
        'number': newJumpNumber.value,
AA2875's avatar
AA2875 committed
        'date': newJumpDate.value,
        'height': newJumpHeight.value,
        'falltime':newJumpFalltime.value
AA2875's avatar
AA2875 committed
    }
    const response = await fetch('http://localhost:3000/jumps', {
        method: 'POST',
        headers: {
        'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    })
    let jump = await response.json()
    let jumpsList = document.getElementById('jumpsList')
AA2875's avatar
AA2875 committed
    let li = createJumpListItem(jump)
AA2875's avatar
AA2875 committed
    jumpsList.appendChild(li)
  
    let infoText = document.getElementById('infoText')
    infoText.innerHTML = ''
AA2875's avatar
AA2875 committed
    newJumpNumber.value = ''
    newJumpDate.value = ''
AA2875's avatar
AA2875 committed
    newJumpHeight.value = ''
    newJumpFalltime.value = ''
AA2875's avatar
AA2875 committed
}

AA2875's avatar
AA2875 committed
function editJump(id){
AA2875's avatar
AA2875 committed
    let li = document.getElementById(id)
AA2875's avatar
AA2875 committed
    let number = document.getElementById("newJumpNumber")
AA2875's avatar
AA2875 committed
    let jump_content = li.innerHTML.slice(0, -63)
AA2875's avatar
AA2875 committed
    number.value = jump_content
    let button = document.getElementById("addJumpBtn")
AA2875's avatar
AA2875 committed
    button.style.backgroundColor = "yellow"
    button.innerHTML = "Tallenna"
AA2875's avatar
AA2875 committed
    button.onclick = function() { saveJump(id) }
AA2875's avatar
AA2875 committed
}

AA2875's avatar
AA2875 committed
async function saveJump(id){  // Erheitä esim text newJump.value
AA2875's avatar
AA2875 committed
    let newJump = document.getElementById('newJump')
    const data = { 'text': newJump.value }
AA2875's avatar
AA2875 committed
    const response = await fetch('http://localhost:3000/jumps/'+id, {
        method: 'PUT',
        headers: {
        'Content-Type': 'application/json'
        },
    body: JSON.stringify(data)
    })
    let jump = await response.json()
    document.getElementById(jump._id).firstChild.nodeValue = jump.text
    let addButton = document.getElementById('btn')
    addButton.setAttribute('onclick', "addJump()")
    addButton.innerHTML = "Lissee"
    addButton.style.backgroundColor = ""
    let infoText = document.getElementById('infoText')
    infoText.innerHTML = ''
AA2875's avatar
AA2875 committed
    newJump.value = ''
AA2875's avatar
AA2875 committed
}

AA2875's avatar
AA2875 committed
async function removeJump(id) {
AA2875's avatar
AA2875 committed
    const response = await fetch('http://localhost:3000/jumps/'+id, {
        method: 'DELETE'
    })
    let responseJson = await response.json()
    let li = document.getElementById(id)
    li.parentNode.removeChild(li)
  
    let jumpsList = document.getElementById('jumpsList')
    if (!jumpsList.hasChildNodes()) {
        let infoText = document.getElementById('infoText')
        infoText.innerHTML = 'Ei tehtäviä'
    }
}