MediaWiki:OrgActionList.js

From Linjauskone

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
ORGS_MAX_OPTIONS = 3

function updateActionView() {
    $('#org_actions').text('')
    var domains = getSelectedOptions('#domains')
    var years = getSelectedOptions('#years')
    var actors = getSelectedOptions('#actors')
    var select_orgs = getSelectedOptions('#orgs')
    console.log(domains)
    console.log(years)
    console.log(select_orgs)
    console.log(actors)

    if(select_orgs.size > 0) {
        $('#intro').hide()
    }
    else {
        $('#intro').show()
    }

    // filter actions based on selections 
    filtered_actions = filterActions(domains, years)
    console.log(filtered_actions)
    // render 
    var column_grouping = 'org' //getSelectedOptions('#col_grouping').values().next().value
    var row_grouping = 'none' // getSelectedOptions('#row_grouping').values().next().value
    console.log(row_grouping)

    console.log(column_grouping)
    // get a set of actors for each selected org
    org_actors = []
    select_orgs.forEach(businessID => {
        businessID = '' + businessID   
        console.log(orgs)
        var org_name = orgs[businessID].name
        var actors = orgs[businessID].responsible_actors.map(re => re.id)
        console.log(org_name)
        console.log(actors)
        org_actors.push({
            'name': org_name,
            'id': businessID,
            'actors': actors
        })
    })
    $('#selected-orgs-row').text('')
    if(org_actors.length > 0) {
        grouped_actions = groupActions(filtered_actions, org_actors)
        renderActionHeader(org_actors)
        renderActions(grouped_actions, org_actors)
        document.querySelectorAll('.rowgroup-header').forEach(function(e) {        
            scrollObserver.observe(e)
        });    
    }
}

function renderActions(actions, org_actors)  {
    for(var year = 2020; year < 2026; year++)  {
        if((''+year in actions)) {
            
            var group = actions[year]
            var year_container = $('<div>', {id: 'year' + year, class: 'year-container'})
            var year_header_container = $('<div>', {class: 'sticky-top', style:'z-index: 5; background-color: white'})

            var year_header = $('<div>', {id: 'year'+ year+'-header', class: 'year-header '}).html('<h1 class="year">'+year+'</h1>')
            year_container.append(year_header_container)
            year_header_container.append(year_header)
    
            $('#nav-item-year' + year).show()
            var colContainer = $('<div>', {class:'container-fluid'})
            var colRow = $('<div>', {class: 'row'})
            
            org_actors.forEach(org_actor => {
                var colTitle = org_actor.name
                var colCol = $('<div>', {class: 'col'})
                if(Array.isArray(group[colTitle])) {
                    //var colgroup_header = $('<div>', {class: 'colgroup-header'}).html('<h2>'+colTitle+'</h2>')
                    //colCol.append(colgroup_header)
                    group[colTitle].forEach(obj => {
                        action_card = renderAction(obj)
                        colCol.append(action_card)                
                    })    
                }
                colRow.append(colCol)

            })
            
            colContainer.append(colRow)
            year_container.append(colContainer)

        }
        else {
            $('#year' + year).hide()
        }
        $('#org_actions').append(year_container)
    }
}

function groupActions(actions, org_actors) {
    // group first by year
    groups = group_actions_by_year(actions)
    // then by org
    groups = group_by_org(groups, org_actors)
    return groups
}

function group_by_org(groups, org_actors) {   
    console.log(org_actors) 
    Object.keys(groups).forEach(function(key) {
        var data = groups[key]
        const parents = data.reduce((parents, item) => {
            org_actors.forEach(org_actor => {
                var value = org_actor.name
                var candidates = item['action_responsible_actor'].map(ra => ra.fulltext)
                console.log(candidates)
                
                var common_values = intersection(new Set(candidates), new Set(org_actor.actors))
                console.log(common_values)
                console.log(common_values.size)
                if(common_values.size  > 0) {
                    const c = parents[value] || []
                    console.log(c)
                    if(c.indexOf(item) < 0) {
                        
                        c.push(item)
                        console.log(c)
                    }
                    console.log(value)
                    parents[value] = c
                    
                }
            })
            return parents               

        }, {});
        groups[key] = parents
    })
    return groups
}

function filterActions(domains, years) {
    // years
    var result = actions.filter(action => {        
        return years.has(getActionYear(action))
    })
    // domains
    result = result.filter(action => {
        return domains.has(action.action_domain)
    })
    return result
}

Sivustoa ylläpitää Avoimen tieteen ja tutkimuksen (AVOTT) kansallisen koordinaation sihteeristö, joka toimii Tieteellisten seurain valtuuskunnassa (TSV) Opetus- ja kulttuuriministeriön (OKM) rahoituksella. Avoimen tieteen ja tutkimuksen koordinaatio edistää avoimen tieteen ja tutkimuksen toteutumista sekä keskustelua sen mahdollisuuksista, haasteista sekä niiden ratkaisuista Suomessa.

Webbplatsen upprätthålls av Sekretariatet för den nationella samordningen av öppen vetenskap och forskning. Sekretariatet verkar vid Vetenskapliga samfundens delegation med finansiering från undervisnings- och kulturministeriet. Samordningen främjar öppen vetenskap och forskning samt diskussion kring dess möjligheter, utmaningar och lösningar i Finland.

This website is maintained by the Secretariat of the National Coordination for Open Science and Research in Finland (AVOTT), which operates in the Federation of Finnish Learned Societies (TSV) with funding from the Ministry of Education and Culture (OKM). The Open Science and Research Coordination promotes open science and research, as well as discussion on its opportunities, challenges and their solutions in Finland.