MediaWiki:Shared.js
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.
API_URL = 'https://164-92-142-113.nip.io/api.php'
class_map = {
'Tutkimusjulkaisut': 'field-border-1',
'Toimintakulttuuri': 'field-border-2',
'Oppiminen' : 'field-border-3',
'Data' : 'field-border-4'
}
color_map = {
'Tutkimusjulkaisut': '#007ECA',
'Toimintakulttuuri': '#53BD9D',
'Oppiminen' : '#93A0FF',
'Data' : '#003EAD'
}
const observer = new IntersectionObserver(
([e]) => e.target.classList.toggle('stuck', e.intersectionRatio < 1),
{threshold: [1]}
)
function getSelectedCheckboxes(selector) {
var selected = new Set()
$(selector + ' input:checked').each(function () {
selected.add($(this).val());
});
return selected
}
function getSelectedRadio(selector) {
return $(selector + ' input:checked').val()
}
function getSelectedOptions(selector) {
var selected = new Set();
$(selector + ' option:selected').each(function () {
selected.add($(this).val());
});
return selected
}
async function updateProgressData(data) {
console.log(data)
items = {}
data.forEach(function (r) {
progressID = Object.keys(r)[0]
obj = r[progressID]
console.log(obj)
date = ''
if (obj.printouts['Date'].length > 0 && obj.printouts['Date'][0].timestamp) {
date = new Date(parseInt(obj.printouts['Date'][0].timestamp) * 1000)
}
actionID = obj.printouts.Action[0].fulltext.replace('#', '').replace(/\s/g, '').replace(':', '').replace('/', '')
progressUrl = obj.printouts.Action[0].fullurl
name = obj.printouts.Name || ''
desc = obj.printouts.Description || ''
orgName = obj.printouts.OrgName || ''
if (!(actionID in items)) {
items[actionID] = []
}
items[actionID].push({
url: obj.fullurl,
fulltext: obj.fulltext,
actionID: actionID,
url: progressUrl,
date: date,
name: name,
desc: desc,
org: orgName
})
})
progressItems = items
}
function updateActions(data) {
console.log(data)
actions = []
data.forEach(function (r) {
progressID = Object.keys(r)[0]
obj = r[progressID]
var section_desc = obj.printouts['sectionDesc'][0] || '' // footnotes!
section_desc = section_desc.replace(/\[\[.*\]\]/g, "");
var action_description = obj.printouts['Description'][0] || ''
//action_description = action_description.replace(/<\/?[^>]+(>|$)/g, "")
actions.push(
{
'policy_name': obj.printouts['policyName'][0] || '',
'policy_endyear': obj.printouts['policyEndYear'][0] || null,
'section_name': obj.printouts['sectionName'][0] || '',
'section_desc': section_desc,
'section_deadline': obj.printouts['Section deadline'][0] || null,
'section_ordinal': obj.printouts['sectionOrdinal'][0] || null,
'section_type': obj.printouts['sectionType'][0].fulltext || '',
'section_type_name': obj.printouts['sectionTypeName'][0] || '',
'action_deadline': obj.printouts['Action deadline'][0] || null,
'action_description': action_description,
'action_field': obj.printouts['Field'][0] || '',
'action_domain': obj.printouts['Domain'][0].fulltext || '',
'action_name': obj.printouts['Name'][0] || '',
'action_responsible_actor': obj.printouts['Responsible actor'],
'action_id': obj.fulltext.replace('#', '').replace(/\s/g, '').replace(':', '').replace('/', ''),
'action_id_raw': obj.fulltext
}
)
})
}
function updateOrgs(data) {
console.log(data)
actions = []
data.forEach(function (r) {
progressID = Object.keys(r)[0]
obj = r[progressID]
console.log(obj)
var businessID = obj.printouts['BusinessID'][0] || ''
// handle localized string queries and separate properties - todo refactor this out
var actors = []
var actor_ids = obj.printouts['Responsible actor']
var actors_fi = obj.printouts['actors_fi']
var actors_sv = obj.printouts['actors_sv']
var actors_en = obj.printouts['actors_en']
for (let i = 0; i < actor_ids.length; i++) {
actors.push({
id: actor_ids[i].fulltext,
fi: actors_fi[i],
sv: actors_sv[i],
en: actors_en[i]
})
}
orgs[businessID] = {
'name': obj.printouts['Name'][0] || '',
'businessID': businessID,
'responsible_actors': actors,
}
})
console.log(orgs)
}
function updateActors(data) {
console.log(data)
data.forEach(function (r) {
id = Object.keys(r)[0]
var name = r[id].printouts['Name'][0]
$('#actors').append('<option value="'+id+'">'+name+'</option>')
console.log('test')
})
}
async function fetch_data(lang) {
// get all Actions
console.log(lang)
const actionQuery = '[[Category:Action]]|?Part of document.Name ' + lang + '=sectionName|?Part of document.Type=sectionType|?Part of document.Type.Name ' + lang + '=sectionTypeName|?Part of document.Description ' + lang + '=sectionDesc|?Part of document.Ordinal=sectionOrdinal|?Part of document.Document.Name ' + lang + '=policyName|?Part of document.Document.Validity end=policyEndYear|?Part of document.Document.Field.Name ' + lang + '=Field|?Part of document.Document.Field=Domain|?Name ' + lang + '=Name|?Description ' + lang + '=Description|?Responsible actor|?Deadline year=Action deadline|?Part of document.Name ' + lang + '=Section name|?Part of document.Deadline year=Section deadline|limit=50'
const progressQuery = '[[Category:Progress]]|?Name|?Description|?Date|?Action|?Organization.Name=OrgName'
const orgQuery = '[[Category:Organization]]|?Name|?BusinessID|?Responsible actor|?Responsible actor.Name fi=actors_fi|?Responsible actor.Name sv=actors_sv|?Responsible actor.Name en=actors_en|limit=500'
const actorQuery = '[[Category:Actor]]|?Name ' + lang + '=Name|limit=500'
$('#spinner').show()
$('#error').hide()
return Promise.all([
executeAsk(progressQuery)
.then(updateProgressData),
executeAsk(actionQuery)
.then(updateActions),
executeAsk(actorQuery)
.then(updateActors)
])
.then(() => {
console.log('data loaded')
$('#spinner').hide()
console.log(actions)
console.log(progressItems)
$('#actors').selectpicker({
actionsBox: true,
selectedTextFormat: 'count',
liveSearch: true,
multiple: true
})
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
if(urlParams.has('actors')) {
$('#actors').selectpicker('selectAll');
}
$('#filters').collapse('show')
})
}
async function executeAsk(query) {
var results = [];
var res = null;
var offset = 0
try {
while (res == null || res.query.results.length == 50) {
_query = query + '|offset=' + offset
console.log(_query)
res = await $.ajax({
url: API_URL,
data: {
action: 'ask',
format: 'json',
api_version: 3,
query: _query
},
xhrFields: {
withCredentials: false
},
dataType: 'json'
})
offset = offset + 50
results = results.concat(res.query.results)
}
return results
} catch (error) {
$('#spinner').hide()
$('#error').text(error)
$('#error').show()
console.log(error)
}
}