MediaWiki

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:
// Hook in MediaViewer
// MediaViewer hook
mw.hook('mmv.metadataPanel.render').add(function(panel, imageData) {
mw.hook('mmv.metadataPanel.render').add(function(panel, imageData) {
     var fileTitle = imageData.title; // z. B. "File:Hf_1897_schr_ch001_ill1.jpg"
     var fileTitle = imageData.title;


     // API-Abfrage für die Dateiseite
     // 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;


         // Einfaches Parsen der Template-Parameter (regex)
         // 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();
         });
         });


         // Container erstellen
         // 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 als kleine Badges
         // 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:
         }
         }


         // In MediaViewer-Panel einfügen
         // 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);
    });
});