Stephan Bösch-Plepelits
7 years ago
33 changed files with 344 additions and 25 deletions
-
3README.md
-
2ajax.php
-
1doc/TwigJS.md
-
1lang/ast.json
-
1lang/ca.json
-
1lang/cs.json
-
1lang/da.json
-
8lang/de.json
-
1lang/el.json
-
8lang/en.json
-
1lang/es.json
-
1lang/et.json
-
1lang/fr.json
-
1lang/hu.json
-
1lang/it.json
-
1lang/ja.json
-
1lang/nl.json
-
1lang/pl.json
-
1lang/pt-br.json
-
1lang/ro.json
-
1lang/ru.json
-
1lang/sr.json
-
1lang/template.json
-
1lang/uk.json
-
1modulekit.php
-
12src/CategoryOverpass.js
-
23src/index.js
-
19src/language.js
-
17src/options.js
-
3src/twigFunctions.js
-
175src/wikipedia.js
-
41src/wikipedia.php
-
37style.css
@ -1,4 +1,5 @@ |
|||
{ |
|||
"main:options": "Opcions", |
|||
"more": "més", |
|||
"save": "Guardar" |
|||
} |
@ -1,5 +1,6 @@ |
|||
{ |
|||
"main:options": "Opciones", |
|||
"more": "más", |
|||
"options:data_lang": "Idioma de datos", |
|||
"options:data_lang:local": "Idioma local", |
|||
"options:ui_lang": "Idioma de interfaz", |
|||
|
@ -1,5 +1,6 @@ |
|||
{ |
|||
"main:options": "Beállítások", |
|||
"more": "több", |
|||
"options:data_lang": "Adatnyelv", |
|||
"options:data_lang:local": "Helyi nyelv", |
|||
"options:ui_lang": "Menünyelv", |
|||
|
@ -1,4 +1,5 @@ |
|||
{ |
|||
"more": "mais", |
|||
"save": "Salvar", |
|||
"unnamed": "sem nome" |
|||
} |
@ -0,0 +1,175 @@ |
|||
var cache = {} |
|||
|
|||
function stripLinks (dom) { |
|||
var as = dom.getElementsByTagName('a') |
|||
var as = Array.prototype.slice.call(as) |
|||
|
|||
as.forEach(function (current) { |
|||
var c |
|||
|
|||
while (c = current.firstChild) { |
|||
current.parentNode.insertBefore(c, current) |
|||
} |
|||
|
|||
current.parentNode.removeChild(current) |
|||
}) |
|||
} |
|||
|
|||
function prepare (text) { |
|||
var ret = '' |
|||
var i |
|||
|
|||
var div = document.createElement('div') |
|||
div.innerHTML = text |
|||
|
|||
var contents = div.getElementsByTagName('div') |
|||
for (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.firstChild.firstChild |
|||
while (p && p.tagName !== 'P') { |
|||
p = p.nextSibling |
|||
} |
|||
|
|||
if (!p) { |
|||
return null |
|||
} |
|||
|
|||
stripLinks(p) |
|||
|
|||
// first image
|
|||
var imgs = div.getElementsByTagName('img') |
|||
for (i = 0; i < imgs.length; i++) { |
|||
var img = imgs[i] |
|||
|
|||
// ignore icons
|
|||
if (img.width <= 64 && img.height <= 64) { |
|||
continue |
|||
} |
|||
|
|||
img.removeAttribute('width') |
|||
img.removeAttribute('height') |
|||
p.insertBefore(img, p.firstChild) |
|||
|
|||
break; |
|||
} |
|||
|
|||
return p.innerHTML |
|||
} |
|||
|
|||
function get (value, callback) { |
|||
var cacheId = options.data_lang + ':' + value |
|||
if (cacheId in cache) { |
|||
return callback(null, cache[cacheId]) |
|||
} |
|||
|
|||
ajax('wikipedia', |
|||
{ |
|||
page: value, |
|||
lang: options.data_lang |
|||
}, |
|||
function (result) { |
|||
if (!result.content) { |
|||
return callback('error', null) |
|||
} |
|||
|
|||
var text = prepare(result.content) |
|||
text += ' <a target="_blank" href="' + result.languages[result.language] + '">' + lang('more') + '</a>' |
|||
|
|||
cache[cacheId] = text |
|||
|
|||
callback(null, text) |
|||
} |
|||
) |
|||
} |
|||
|
|||
register_hook('show-details', function (data, category, dom, callback) { |
|||
var ob = data.object |
|||
var found = 0 |
|||
var finished = 0 |
|||
var errs = [] |
|||
var h |
|||
var div = document.createElement('div') |
|||
div.className = 'wikipedia' |
|||
|
|||
if ('wikipedia' in ob.tags) { |
|||
found++ |
|||
showWikipedia(ob.tags.wikipedia, div, done) |
|||
} |
|||
|
|||
for (var k in ob.tags) { |
|||
var m |
|||
if (m = k.match(/^(.*):wikipedia$/)) { |
|||
h = document.createElement('h4') |
|||
h.appendChild(document.createTextNode(lang('tag:' + m[1]))) |
|||
div.appendChild(h) |
|||
|
|||
found++ |
|||
showWikipedia(ob.tags[k], div, done) |
|||
} |
|||
|
|||
if (m = k.match(/^((.*):)?wikipedia:(.*)$/)) { |
|||
if (m[1]) { |
|||
h = document.createElement('h4') |
|||
h.appendChild(document.createTextNode(lang('tag:' + m[1]))) |
|||
div.appendChild(h) |
|||
} |
|||
|
|||
found++ |
|||
showWikipedia(m[3] + ':' + ob.tags[k], div, done) |
|||
} |
|||
} |
|||
|
|||
if (found) { |
|||
h = document.createElement('h3') |
|||
h.appendChild(document.createTextNode(lang('tag:wikipedia'))) |
|||
dom.appendChild(h) |
|||
|
|||
dom.appendChild(div) |
|||
} |
|||
|
|||
function done (err) { |
|||
finished++ |
|||
|
|||
if (err) { |
|||
errs.push(err) |
|||
} |
|||
|
|||
if (found === finished) { |
|||
callback(errs.length ? errs : null) |
|||
} |
|||
} |
|||
}) |
|||
|
|||
function showWikipedia (tagValue, dom, callback) { |
|||
var block = document.createElement('div') |
|||
block.className = 'loading' |
|||
dom.appendChild(block) |
|||
|
|||
var l = document.createElement('div') |
|||
l.innerHTML = '<i class="fa fa-spinner fa-pulse fa-fw"></i><span class="sr-only">Loading...</span>' |
|||
l.className = 'loadingIndicator' |
|||
block.appendChild(l) |
|||
|
|||
get(tagValue, 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) |
|||
}) |
|||
} |
@ -0,0 +1,41 @@ |
|||
<?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(" " => "_"))); |
|||
|
|||
$content = file_get_contents($wp_url); |
|||
|
|||
$langList = array($wp_lang => $wp_url); |
|||
|
|||
$dom = new DOMDocument(); |
|||
$dom->loadHTML($content); |
|||
|
|||
$langDiv = $dom->getElementsByTagName('li');//interlanguage-link interwiki-bar');
|
|||
for ($i = 0; $i < $langDiv->length; $i++) { |
|||
$li = $langDiv->item($i); |
|||
|
|||
if (preg_match('/^interlanguage-link interwiki-(.*)$/', $li->getAttribute('class'), $m)) { |
|||
$a = $li->firstChild; |
|||
$langList[$m[1]] = $a->getAttribute('href'); |
|||
} |
|||
} |
|||
|
|||
if ($wp_lang !== $param['lang'] && array_key_exists($param['lang'], $langList)) { |
|||
$content = file_get_contents($langList[$param['lang']]); |
|||
$wp_lang = $param['lang']; |
|||
} |
|||
|
|||
return array( |
|||
'content' => $content, |
|||
'languages' => $langList, |
|||
'language' => $wp_lang, |
|||
); |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue