Browse Source

Load first abstract from Wikipedia page and show on details page

master
parent
commit
abd3655a2c
  1. 3
      lang/de.json
  2. 3
      lang/en.json
  3. 1
      modulekit.php
  4. 1
      src/index.js
  5. 94
      src/wikipedia.js
  6. 17
      src/wikipedia.php

3
lang/de.json

@ -12,5 +12,6 @@
"save": "Speichern",
"toggle_fullscreen": "(De-)aktiviere Vollbildmodus",
"unknown": "unbekannt",
"unnamed": "Namenlos"
"unnamed": "Namenlos",
"wikipedia:no-url-parse": "Konnte Wikipedia Adresse nicht erkennen"
}

3
lang/en.json

@ -13,5 +13,6 @@
"save": "Save",
"toggle_fullscreen": "Toggle full screen mode",
"unknown": "unknown",
"unnamed": "unnamed"
"unnamed": "unnamed",
"wikipedia:no-url-parse": "Could not parse Wikipedia URL"
}

1
modulekit.php

@ -14,6 +14,7 @@ $include = array(
'src/options.php',
'src/language.php',
'src/ip-location.php',
'src/wikipedia.php',
),
'css' => array(
'style.css',

1
src/index.js

@ -26,6 +26,7 @@ require('./fullscreen')
require('./mapLayers')
require('./twigFunctions')
require('./categories')
require('./wikipedia')
window.onload = function () {
initState = config.defaultView

94
src/wikipedia.js

@ -0,0 +1,94 @@
function stripLinks (dom) {
var current = dom.firstChild
while (current) {
var next = current.nextSibling
if (current.tagName === 'A') {
var c
while (c = current.firstChild) {
dom.insertBefore(c, current)
}
dom.removeChild(current)
}
current = next
}
}
function prepare (text) {
var ret = ''
var div = document.createElement('div')
div.innerHTML = text
var contents = div.getElementsByTagName('div')
for (var i = 0; i < contents.length; i++) {
if (contents[i].id === 'mw-content-text') {
var content = contents[i]
break
}
}
if (!content) {
return null
}
var p = content.getElementsByTagName('p')
if (!p.length) {
return null
}
p = p[0]
stripLinks(p)
return p.innerHTML
}
function get (value, callback) {
ajax('wikipedia',
{
page: value,
lang: lang
},
function (result) {
if (!result.content) {
callback('error', null)
}
callback(null, prepare(result.content))
}
)
}
register_hook('show-details', function (data, category, dom, callback) {
var ob = data.object
if (!('wikipedia' in ob.tags)) {
return
}
var block = document.createElement('div')
block.className = 'loading'
dom.appendChild(block)
var h = document.createElement('h3')
h.appendChild(document.createTextNode(lang('tag:wikipedia')))
block.appendChild(h)
get(ob.tags.wikipedia, function (err, text) {
if (!text) {
block.appendChild(document.createTextNode(lang('wikipedia:no-url-parse')))
}
var div = document.createElement('div')
div.innerHTML = text
block.appendChild(div)
block.className = ''
callback(err)
})
})

17
src/wikipedia.php

@ -0,0 +1,17 @@
<?php
function ajax_wikipedia ($param) {
if (preg_match("/^([^:]+):(.*)$/", $param['page'], $m)) {
$wp_lang = $m[1];
$wp_page = $m[2];
}
if (!isset($wp_lang) || !isset($wp_page)) {
return false;
}
$wp_url = "https://{$wp_lang}.wikipedia.org/wiki/" . urlencode(strtr($wp_page, array(" " => "_")));
return array(
'content' => file_get_contents($wp_url),
);
}
Loading…
Cancel
Save