Codebase
Jump to navigation
Jump to search
Navigate the codebase
Components
- method wikidocumentaries
- $store.state.wikidocumentaries
store/store.js
const wikidocumentaries = { title: 'Vapaamuurarin hauta', description: 'Muistomerkki Helsingissä', headerImageURL: 'https://upload.wikimedia.org/wikipedia/commons/b/bf/Helsinki_Kaisaniemi_Freemason%27s_grave_1908_I_K_Inha.png', wikipedia: { excerptHTML: null, remainingHTML: null, wikipediaURL: 'https://fi.wikipedia.org/wiki/Vapaamuurarin_hauta' }, wikidata: { id: 'Q5501061', instance_of: { id: 'Q5003624', value: 'muistomerkki', url: 'https://www.wikidata.org/wiki/Q5003624' }, statements: [ { id: 'P361', label: 'osa kohdetta', value: 'Kaisaniemen puisto ja kasvitieteellinen puutarha', url: 'https://www.wikidata.org/wiki/Q30506322' }, dates: [], }, images: [ { id: 'musketti.M012:HK19670603:7117', source: 'finna', imageURL: "https://www.finna.fi/Cover/Show?id=musketti.M012:HK19670603:7117&index=0&size=large", title: "Vapaamuurarin hauta Kaisaniemessä", authors: "Pietinen", institutions: "Museovirasto", infoURL: "https://www.finna.fi/Record/musketti.M012:HK19670603:7117", location: "Helsinki,", geoLocations: ["POLYGON((24.7828131 60.0999549, 24.8356577 60.130414, 24.8513844 60.2249765, 24.8419098 60.2212043, 24.8347825 60.2585099, 24.8677628 60.2523073, 24.9473908 60.2784652, 24.9731653 60.2643801, 25.0209862 60.2893227, 25.0882105 60.2713417, 25.0823359 60.2496391, 25.1358461 60.2372286, 25.1598757 60.2488133, 25.1425242 60.2697779, 25.2545116 60.2952274, 25.2509121 60.2734979, 25.2273451 60.2611057, 25.240926 60.246305, 25.2014099 60.2181613, 25.2204176 60.1997262, 25.1800446 60.0987408, 25.1693516 59.9434386, 24.9423061 59.922486, 24.7828131 60.0999549))"], year: 1932, license: "CC BY 4.0" }, ], geo: { location: "POINT(24.943752 60.176013)", admin: "Helsinki" }, topicStartYear: 1784, } export default new Vuex.Store({ state: { wikidocumentariesDataState: WIKI.STATES.UNINITIALIZED, wikidocumentaries: wikidocumentaries, shownImages: [], timelineImages: [], historicalMapSearchPageMap: null, historicalMaps: [], basemaps: basemaps, selectedBasemaps: [], selectedBasemapOpacity: 0.7, shouldFitMapToBasemap: false, photoOfTheDay: "https://upload.wikimedia.org/wikipedia/commons/a/ad/Kulutusosuuskuntien_Keskusliiton_kokoelma_D1974_11333A_%2830804608561%29.jpg", mapOfTheDay: { id: "File:1900_Plan_af_Helsingfors_stad.tif", warperID: 148, server: "http://warper.wmflabs.org/", coordinates: [24.9351, 60.1658], }, nearbyWikiItems: [], }, getters: { topicStartYear: state => { var startYear = (new Date()).getFullYear(); if (state.wikidocumentaries.topicStartYear != undefined) { startYear = state.wikidocumentaries.topicStartYear; } if (state.wikidocumentaries.images.length > 0) { for (var i = 0; i < state.wikidocumentaries.images.length; i++) { //console.log("state.wikidocumentaries.images[i]", state.wikidocumentaries.images[i]); //console.log("state.wikidocumentaries.images[i].year", state.wikidocumentaries.images[i].year); if (state.wikidocumentaries.images[i].year != null && startYear > state.wikidocumentaries.images[i].year) { if (!isWikidataBasedUnchangableStartYear(state.wikidocumentaries)) { startYear = state.wikidocumentaries.images[i].year; } } } } //console.log(startYear); return startYear; } }, mutations: { resetState(state) { state.wikidocumentariesDataState = WIKI.STATES.UNINITIALIZED; state.wikidocumentaries = { title: null, description: null, headerImageURL: null, wikipedia: { excerptHTML: null, remainingHTML: null, wikipediaURL: null, }, wikidata: { id: null, instance_of: { id: null, value: null, url: null }, statements: [], dates: [], }, images: [], geo: { location: null, scale: null, admin: null }, topicStartYear: null }; state.shownImages = []; state.timelineImages = []; state.historicalMapSearchPageMap = null; state.historicalMaps = []; state.basemaps = basemaps; state.selectedBasemaps = []; state.selectedBasemapOpacity = 0.7; state.shouldFitMapToBasemap = false; state.nearbyWikiItems = []; }, setImagesShownOnMap(state, images) { state.shownImages = images; }, setImagesShownOnTimeline(state, images) { //console.log("setImagesShownOnTimeline"); state.timelineImages = images; }, setHistoricalMapSearchPageMap(state, map) { state.historicalMapSearchPageMap = map; }, setHistoricalMaps(state, maps) { state.historicalMaps = maps; }, setSelectedBasemap(state, mapInfo) { state.selectedBasemaps = [mapInfo]; }, setSelectedBasemaps(state, mapInfos) { //console.log("setSelectedBasemaps"); state.selectedBasemaps = mapInfos; }, setSelectedBasemapOpacity(state, opacity) { // 0 - 1 state.selectedBasemapOpacity = opacity; }, setShouldFitMapToBasemap(state, value) { state.shouldFitMapToBasemap = value; }, setWikidocumentariesTopicTitle(state, title) { state.wikidocumentaries.title = title; }, setWikidocumentariesTopicDescription(state, description) { state.wikidocumentaries.description = description; }, setWikidata(state, wikidata) { state.wikidocumentaries.wikidata = wikidata; }, setWikidataId(state, wikidataId) { state.wikidocumentaries.wikidataId = wikidataId; }, setHeaderImageURL(state, URL) { state.wikidocumentaries.headerImageURL = URL; }, setWikipediaExcerptHTML(state, html) { state.wikidocumentaries.wikipedia.excerptHTML = html; }, setWikipediaRemainingHTML(state, html) { state.wikidocumentaries.wikipedia.remainingHTML = html; }, setWikipediaURL(state, URL) { state.wikidocumentaries.wikipedia.wikipediaURL = URL; }, setTopicGeoLocation(state, coordinates) { //console.log("setTopicGeoLocation", coordinates); state.wikidocumentaries.geo.location = "POINT(" + coordinates.lon + " " + coordinates.lat + ")" }, setWikidocumentariesDataState(state, value) { state.wikidocumentariesDataState = value; }, setWikidocumentariesImages(state, images) { state.wikidocumentaries.images = images; }, setTopicStartYear(state, year) { //console.log('setTopicStartYear'); state.wikidocumentaries.topicStartYear = year; }, setHistoricalBasemaps(state, basemaps) { state.basemaps = basemaps; if (basemaps.length > 0) { state.selectedBasemaps = [basemaps[0]]; } }, setNearbyWikiItems(state, items) { state.nearbyWikiItems = items; } }, actions: { updateWikidocumentaries({dispatch, commit}, params) { //console.log('actions.updateWikidocumentaries'); commit('resetState'); commit('setWikidocumentariesDataState', WIKI.STATES.LOADING_WIKI_EXTERNAL); commit('setWikidocumentariesTopicTitle', params.topic); commit('setWikidataId', params.wikidata); var promiseWiki = dispatch('getWikiDocumentariesData', params); //var promiseImages = dispatch('getTopicImages', params) promiseWiki.then((data) => { //console.log(data); if (data.wikidata == null ) { commit('setWikidocumentariesDataState', WIKI.STATES.FAIL_WIKI_EXTERNAL); } else { params.wiki = data; params.topic = data.wikidata.title; commit('setWikidocumentariesTopicTitle', params.topic); params.wikidata = data.wikidata.id; commit('setWikidataId', params.wikidata); commit('setWikidocumentariesDataState', WIKI.STATES.LOADING_IMAGES_EXTERNAL); dispatch('getTopicImages', params).then((result) => { commit('setWikidocumentariesDataState', WIKI.STATES.READY); //console.log(result); //console.log(data.wikipedia.originalimage); if ( data.wikipedia.originalimage != undefined && data.wikipedia.originalimage.source != null) { commit('setHeaderImageURL', data.wikipedia.originalimage.source); } else if (result.length > 0) { // Set the first image (not pdf) in the results as header image for (var i = 0; i < result.length; i++) { if (result[i].imageURL.indexOf('.pdf') == -1) { commit('setHeaderImageURL', result[i].imageURL); break; } } } //console.log(this.state.wikidocumentaries.geo); // If the geo location could not be set from Wikipedia or Wikidata then // try to calculate it from the image locations if (this.state.wikidocumentaries.geo.location == null) { var location = calculateLocationFromImages(result); if (location != null) { commit('setTopicGeoLocation', location); } else { // TODO } } }); } }); }, async getWikiDocumentariesData(context, params) { //console.log('getWikiDocumentariesData'); return new Promise((resolve, reject) => { var requestConfig = { baseURL: BASE_URL, url: "/wiki", method: "get", params: { topic: params.topic, wikidata: params.wikidata, language: params.language } }; axios.request(requestConfig). then(function (response) { //console.log(response.data); if (response.data.wikidata == null ) { console.log("response.data.wikipedia == null"); context.commit('setWikidocumentariesDataState', WIKI.STATES.FAIL_WIKI_EXTERNAL); } else { //console.log(response.data); context.commit('setWikidata', response.data.wikidata); context.commit('setWikidocumentariesTopicTitle', response.data.wikidata.title); context.commit('setWikidocumentariesTopicDescription', response.data.wikidata.description); //console.log(response.data.wikidata.statements); var startYear = calculateTopicStartYearFromWikidata(response.data.wikidata, context.state.wikidocumentaries.topicStartYear); context.commit('setTopicStartYear', startYear); context.commit('setWikipediaExcerptHTML', response.data.wikipediaExcerptHTML); context.commit('setWikipediaRemainingHTML', response.data.wikipediaRemainingHTML); if (response.data.wikipedia != undefined ) { context.commit('setWikipediaURL', response.data.wikipedia.content_urls.desktop.page); } else { context.commit('setWikipediaURL', ""); } if (response.data.wikipedia != undefined && response.data.wikipedia.coordinates != undefined ) { context.commit('setTopicGeoLocation', response.data.wikipedia.coordinates); } else if (response.data.wikidata != undefined) { if (response.data.wikidata.geo.lat != null && response.data.wikidata.geo.lon != null) { context.commit('setTopicGeoLocation', response.data.wikidata.geo); } else { // guessTopicGeoLocationFromWikidata(params.topic, response.data.wikidata).then(data => { // //console.log(data); // if (data != null && data.result != null && data.result.point != null && data.result.point.coordinates != null) { // commit('setTopicGeoLocation', { // lon: data.result.point.coordinates[1], // lat: data.result.point.coordinates[0] // }); // } // // if (location != null) { // // commit('setTopicGeoLocation', location); // // } // }); } } else { // // TODO // commit('setTopicGeoLocation', { // lat: 0, // lon: 0 // }); } } resolve(response.data); }) .catch(function (error) { console.log(error); reject(error); }); }); }, async getTopicImages({dispatch, commit}, params) { //console.log('getTopicImages', params); return new Promise((resolve, reject) => { //console.log(params); var requestConfig = { baseURL: BASE_URL, url: "/images", method: "get", params: { topic: params.topic, language: params.language } }; if (params.wiki.wikidata != null) { var statements = params.wiki.wikidata.statements; for (var i = 0; i < statements.length; i++) { if (statements[i].id == "P373") { requestConfig.params.commons_category = statements[i].values[0].value; break; } } } if (params.wiki.wikipedia != undefined && params.wiki.wikipedia.coordinates != undefined) { requestConfig.params.lat = params.wiki.wikipedia.coordinates.lat; requestConfig.params.lon = params.wiki.wikipedia.coordinates.lon; requestConfig.params.maxradius = 2000; // meters } else if (params.wiki.wikidata != undefined && params.wiki.wikidata.geo.lat != null && params.wiki.wikidata.geo.lon != null) { requestConfig.params.lat = params.wiki.wikidata.geo.lat; requestConfig.params.lon = params.wiki.wikidata.geo.lon; requestConfig.params.maxradius = 2000; } axios.request(requestConfig). then(function (response) { //console.log(response.data); commit('setWikidocumentariesImages', response.data); commit('setImagesShownOnTimeline', response.data); resolve(response.data); }).catch(function (error) { console.log(error); reject(error); }); }); }, async getHistoricalBasemaps({dispatch, commit}, params) { var requestConfig = { baseURL: BASE_URL, url: "/basemaps", method: "get", params: params }; axios.request(requestConfig). then(function (response) { //console.log(response.data); commit('setHistoricalBasemaps', response.data); }).catch(function (error) { console.log(error); }); }, async getHistoricalMaps({dispatch, commit}, locationParams) { //commit('setHistoricalMaps', maps); commit('setHistoricalMaps', await dispatch('getHistoricalMapsFromCommons', { locationParams: locationParams, maps: [] }) .then((maps) => dispatch('getHistoricalMapsFromFinna', { locationParams: locationParams, maps: maps }))); }, async getHistoricalMapsFromCommons(context, params) { return new Promise((resolve, reject) => { //console.log(params); //resolve(params.maps); var category = ""; switch (params.locationParams.municipality) { case "Helsinki": category = "Old_maps_of_Helsinki"; break; case "Forssa": category = "Old_maps_of_Forssa"; break; case "Hämeenlinna": category = "Old_maps_of_Hämeenlinna"; break; case "Kemi": category = "Old_maps_of_Kemi"; break; case "Loimaa": category = "Old_maps_of_Loimaa"; break; case "Lohja": category = "Old_maps_of_Lohja"; break; case "Salo": category = "Old_maps_of_Salo"; break; case "Oulu": category = "Old_maps_of_Oulu"; break; case "Somero": category = "Old_maps_of_Somero"; break; case "Turku": category = "Old_maps_of_Turku"; break; default: category = "Old_maps_of_cities_in_Finland"; } var url = "https://commons.wikimedia.org/w/api.php?action=query" + "&list=categorymembers&cmtype=file&cmtitle=Category:" + category + "&format=json" + "&callback=callback"; jsonp(url, null, (error, data) => { if (error) { console.log(error); reject(error); } else { //console.log(data); var tasks = []; for (var i = 0; i < data.query.categorymembers.length; i++) { var fileName = data.query.categorymembers[i].title; var task = createGetCommonsMapInfoTask(fileName); tasks.push(task); } Promise.all(tasks).then(allInfo => { //console.log(allInfo); var maps = params.maps; for (var i = 0; i < allInfo.length; i++) { var info = Object.values(allInfo[i].query.pages)[0]; //console.log(info); var imageURL = info.imageinfo[0].url; var thumbURL = info.imageinfo[0].thumburl; var parts = imageURL.split('.'); var imageExtension = parts[parts.length - 1].toLowerCase(); if (imageExtension == 'bmp' || imageExtension == 'jpg' || imageExtension == 'jpeg' || imageExtension == 'png' || imageExtension == 'gif') { // nothing to do } else { imageURL = "/static/pngs/map_placeholder.png"; } var map = { id: info.pageid, title: info.title, geoLocations: [], images: [info.imageinfo[0].url], imageURL: imageURL, thumbURL: thumbURL, year: (info.imageinfo[0].extmetadata.DateTimeOriginal != undefined ? info.imageinfo[0].extmetadata.DateTimeOriginal.value : undefined), publisher: (info.imageinfo[0].extmetadata.Credit != undefined ? info.imageinfo[0].extmetadata.Credit.value.replace(/<\/?[^>]+(>|$)/g, "") : undefined), authors: (info.imageinfo[0].extmetadata.Artist != undefined ? info.imageinfo[0].extmetadata.Artist.value.replace(/<\/?[^>]+(>|$)/g, "") : undefined), institutions: (info.imageinfo[0].extmetadata.Credit != undefined ? info.imageinfo[0].extmetadata.Credit.value.replace(/<\/?[^>]+(>|$)/g, "") : undefined), license: (info.imageinfo[0].extmetadata.LicenseShortName != undefined ? info.imageinfo[0].extmetadata.LicenseShortName.value : undefined), summary: (info.imageinfo[0].extmetadata.ImageDescription != undefined ? info.imageinfo[0].extmetadata.ImageDescription.value : undefined), source: "Wikimedia Commons", infoURL: info.imageinfo[0].descriptionurl } maps.push(map); } context.commit('setHistoricalMaps', maps); resolve(maps); }); } }); }); }, async getHistoricalMapsFromFinna(context, params) { return new Promise((resolve, reject) => { //resolve(params.maps); //return; var requestConfig = { baseURL: "https://api.finna.fi/", url: "/v1/search", method: "get", params: { limit: 50, type: "AllFields", "filter[0]": '~format:"0/Map/"', "filter[1]": 'online_boolean:"1"', // "filter[2]": '{!bbox sfield=location_geo pt=' + // params.locationParams.centerLon + ',' + params.locationParams.centerLat + ' d=' + params.locationParams.distance + '}', // "filter[2]": '~geographic_facet:"' + params.locationParams.municipality + '"', "field[0]": 'id', "field[1]": 'title', "field[2]": 'geoLocations', "field[3]": 'images', "field[4]": 'year', "field[5]": 'publisher', "field[6]": 'authors', "field[7]": 'institutions', "field[8]": 'events', "field[9]": 'imageRights', "field[10]": 'summary', "field[11]": 'onlineUrls', "field[12]": 'nonPresenterAuthors', } }; axios.request(requestConfig). then(function (response) { //console.log(response); var maps = params.maps; if (response.data.resultCount > 0) { for (var i = 0; i < response.data.records.length; i++) { var record = response.data.records[i]; if (record.images != undefined && record.images.length > 0) { var images = []; for (var j = 0; j < record.images.length; j++) { images.push("https://api.finna.fi" + record.images[j]); } var authors = ""; if (record.authors != undefined) { for (var author in record.authors) { if (record.authors.hasOwnProperty(author)) { //console.log(author); for (var key in record.authors[author]) { //console.log(key); if (record.authors[author].hasOwnProperty(key)) { authors += key + ", "; } } } } authors = authors.slice(0, -2); } var institutions = ""; if (record.institutions != undefined) { for (var j = 0; j < record.institutions.length; j++) { institutions += record.institutions[j].translated + ', '; } institutions = institutions.slice(0, -2); } //console.log(images); var map = { id: record.id, title: record.title, //geoLocations: record.geoLocations, images: images, thumbURL: images[0], imageURL: images[0], year: record.year, publisher: record.publisher, authors: authors, institutions: institutions, events: record.events, imageRights: (record.imageRights != undefined ? record.imageRights.copyright : undefined), license: record.imageRights.copyright, summary: record.summary, source: "Finna", infoURL: "https://www.finna.fi/Record/" + encodeURIComponent(record.id) } maps.push(map); } else { // Handle Doria Fennica maps differently if (record.onlineUrls != undefined && record.onlineUrls[0].source != undefined && record.onlineUrls[0].source.value != undefined && record.onlineUrls[0].source.value == "fennica" && record.onlineUrls[0].url != undefined ) { var images = []; images.push("/static/pngs/map_placeholder.png"); //images.push("/static/wikifont/svgs/uniE032 - map.svg"); var authors = ""; if (record.nonPresenterAuthors != undefined && record.nonPresenterAuthors[0].name != undefined) { authors = record.nonPresenterAuthors[0].name } var institutions = ""; if (record.institutions != undefined) { for (var j = 0; j < record.institutions.length; j++) { institutions += record.institutions[j].translated + ', '; } institutions = institutions.slice(0, -2); } var map = { id: record.id, title: record.title, year: record.year, authors: authors, institutions: institutions, infoURL: record.onlineUrls[0].url, images: images, thumbURL: images[0], imageURL: images[0], source: "finna_fennica", license: "Ks. lähde" } maps.push(map); } } } } context.commit('setHistoricalMaps', maps); resolve(maps); }) .catch(function (error) { console.log(error); reject(error); }); }); }, async getNearbyPlaces(context, params) { var requestConfig = { baseURL: BASE_URL, url: "/wiki/items/by/latlon", method: "get", params: params }; axios.request(requestConfig). then(function (response) { //console.log(response.data); context.commit('setNearbyWikiItems', response.data); }).catch(function (error) { console.log(error); }); } } }); function isWikidataBasedUnchangableStartYear(wikidocumentaries) { var isUnchangable = false; // See also https://www.wikidata.org/w/index.php?title=Special:ListProperties/time var unchangableStartYearProperties = [ 'P569', // date of birth 'P580', // start time ]; if (wikidocumentaries.wikidata != undefined) { var wikidataDates = wikidocumentaries.wikidata.dates; for (var i = 0; i < wikidataDates.length; i++) { if (unchangableStartYearProperties.indexOf(wikidataDates[i].wikidata_property) != -1) { isUnchangable = true; break; } } } return isUnchangable; } function calculateTopicStartYearFromWikidata(wikidata, currentStartYear) { // See also https://www.wikidata.org/wiki/Help:Dates and // https://www.wikidata.org/w/index.php?title=Special:ListProperties/time&limit=50&offset=0 var minYear = (currentStartYear != null ? currentStartYear : (new Date()).getFullYear()); wikidata.dates.forEach(dateItem => { //console.log(dateItem); var timeString = dateItem.value.time; var year = parseInt((timeString.indexOf('-') != 0 ? timeString.substring(1, timeString.indexOf('-')) : timeString.substring(0, timeString.indexOf('-', 1))), 10); if (year < minYear) { minYear = year; } // if (mainsnak.property == 'P569') { // dateItem.type = "date_of_birth"; // } // else if (mainsnak.property == 'P570') { // dateItem.type = "date_of_death"; // } // else if (mainsnak.property == 'P571') { // dateItem.type = "inception"; // date founded // } }); return minYear; } function createGetCommonsMapInfoTask(fileName) { return new Promise((resolve, reject) => { var url = "https://commons.wikimedia.org/w/api.php?" + "action=query" + "&titles=" + fileName + "&prop=imageinfo" + "&iiprop=user|url|extmetadata" + "&iiurlwidth=400" + "&iiurlheight=400" + "&redirects=resolve" + "&format=json" + "&callback=callback"; jsonp(url, null, (error, data) => { if (error) { console.log(error); reject(error); } else { //console.log(data); resolve(data); } }); }); }