MediaViewerDisplay.js: Difference between revisions
From Illustrations in German Translations of Mark Twain's Works
Created page with "// Hook in MediaViewer mw.hook('mmv.metadataPanel.render').add(function(panel, imageData) { var fileTitle = imageData.title; // z. B. "File:Hf_1897_schr_ch001_ill1.jpg" // API-Abfrage für die Dateiseite new mw.Api().get({ action: 'parse', page: fileTitle, prop: 'wikitext', formatversion: 2 }).done(function(data) { if (!data.parse || !data.parse.wikitext) return; var wikitext = data.parse.wikitext;..." |
No edit summary |
||
| Line 1: | Line 1: | ||
// | // MediaViewer hook | ||
mw.hook('mmv.metadataPanel.render').add(function(panel, imageData) { | mw.hook('mmv.metadataPanel.render').add(function(panel, imageData) { | ||
var fileTitle = imageData.title; | var fileTitle = imageData.title; | ||
// API | // API call to get wikitext | ||
new mw.Api().get({ | new mw.Api().get({ | ||
action: 'parse', | action: 'parse', | ||
| Line 13: | Line 13: | ||
var wikitext = data.parse.wikitext; | var wikitext = data.parse.wikitext; | ||
// | // Parse template parameters | ||
var fields = {}; | var fields = {}; | ||
['title','chapter','illustration','illustrator','year','tags'].forEach(function(key) { | ['title','chapter','illustration','illustrator','year','tags'].forEach(function(key) { | ||
var regex = new RegExp(key + '\\s*=\\s*( | var regex = new RegExp(key + '\\s*=\\s*([^\\n|}]*)'); | ||
var match = wikitext.match(regex); | var match = wikitext.match(regex); | ||
if (match) fields[key] = match[1].trim(); | if (match) fields[key] = match[1].trim(); | ||
}); | }); | ||
// | // Build container | ||
var $container = $('<div>').addClass('mmv-custom-metadata'); | var $container = $('<div>').addClass('mmv-custom-metadata'); | ||
if (fields.title) $container.append($('<div>').addClass('mmv-title').text(fields.title)); | if (fields.title) $container.append($('<div>').addClass('mmv-title').text(fields.title)); | ||
var infoParts = []; | var infoParts = []; | ||
if (fields.chapter) infoParts.push('Chapter: ' + fields.chapter); | if (fields.chapter) infoParts.push('Chapter: ' + fields.chapter); | ||
| Line 32: | Line 33: | ||
if (infoParts.length) $container.append($('<div>').addClass('mmv-info').text(infoParts.join(' • '))); | if (infoParts.length) $container.append($('<div>').addClass('mmv-info').text(infoParts.join(' • '))); | ||
// Tags | // Tags as badges | ||
if (fields.tags) { | if (fields.tags) { | ||
var $tags = $('<div>').addClass('mmv-tags'); | var $tags = $('<div>').addClass('mmv-tags'); | ||
| Line 41: | Line 42: | ||
} | } | ||
// | // Insert into MediaViewer | ||
panel.$el.append($container); | panel.$el.append($container); | ||
}); | }); | ||
}); | }); | ||
Latest revision as of 19:06, 9 September 2025
// MediaViewer hook
mw.hook('mmv.metadataPanel.render').add(function(panel, imageData) {
var fileTitle = imageData.title;
// API call to get wikitext
new mw.Api().get({
action: 'parse',
page: fileTitle,
prop: 'wikitext',
formatversion: 2
}).done(function(data) {
if (!data.parse || !data.parse.wikitext) return;
var wikitext = data.parse.wikitext;
// Parse template parameters
var fields = {};
['title','chapter','illustration','illustrator','year','tags'].forEach(function(key) {
var regex = new RegExp(key + '\\s*=\\s*([^\\n|}]*)');
var match = wikitext.match(regex);
if (match) fields[key] = match[1].trim();
});
// Build container
var $container = $('<div>').addClass('mmv-custom-metadata');
if (fields.title) $container.append($('<div>').addClass('mmv-title').text(fields.title));
var infoParts = [];
if (fields.chapter) infoParts.push('Chapter: ' + fields.chapter);
if (fields.illustration) infoParts.push('Illustration: ' + fields.illustration);
if (fields.illustrator) infoParts.push('Illustrator: ' + fields.illustrator);
if (fields.year) infoParts.push('Year: ' + fields.year);
if (infoParts.length) $container.append($('<div>').addClass('mmv-info').text(infoParts.join(' • ')));
// Tags as badges
if (fields.tags) {
var $tags = $('<div>').addClass('mmv-tags');
fields.tags.split(',').forEach(function(tag){
$tags.append($('<span>').addClass('mmv-tag').text(tag.trim()));
});
$container.append($tags);
}
// Insert into MediaViewer
panel.$el.append($container);
});
});