MediaWiki:Common.js: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 773: Line 773:
     function openModal(cardElement, event) {
     function openModal(cardElement, event) {
         event.stopPropagation();  
         event.stopPropagation();  
       
         var pageTitle = $(cardElement).data('page') || null;
         var pageTitle = $(cardElement).data('page') || null;
         window.currentEntryTitle = pageTitle;  
         window.currentEntryTitle = pageTitle;


         var isRelatedArticle = $(cardElement).hasClass('related-article');
         var isRelatedArticle = $(cardElement).hasClass('related-article');
Line 1,050: Line 1,049:
     $('#print-button').on('click', function () {
     $('#print-button').on('click', function () {
         var pageTitle = window.currentEntryTitle;
         var pageTitle = window.currentEntryTitle;
         if (!pageTitle) {
         if (!pageTitle) { console.warn('[print] no currentEntryTitle'); window.print(); return; }
            console.warn('[print] No currentEntryTitle; printing whole page fallback.');
            window.print();
            return;
        }


         var api = mw.util.wikiScript('api');
         var apiUrl = (mw.config.get('wgScriptPath') || '') + '/api.php';
         console.log('[print] Fetching parsed HTML for:', pageTitle, 'via', api);
         console.log('[print] fetching:', pageTitle, 'via', apiUrl);


         $.getJSON(api, {
         $.getJSON(apiUrl, {
             action: 'parse',
             action: 'parse',
             page: pageTitle,          // exact page title, e.g. "040"
             page: pageTitle,          // e.g. "090"
             prop: 'text',
             prop: 'text',
             format: 'json',
             format: 'json',
             origin: '*'              // safe for CORS if needed
             formatversion: 2          // html at res.parse.text
            // origin not needed same-origin
         }).done(function (res) {
         }).done(function (res) {
             var html = res && res.parse && res.parse.text && res.parse.text['*'];
             if (!res || !res.parse || !res.parse.text) {
            if (!html) {
             console.warn('[print] parse API returned no text for:', pageTitle, res);
             console.warn('[print] No HTML returned from parse API; fallback print.');
             window.print();
             window.print();
             return;
             return;
             }
             }


            var html = res.parse.text;
             var $tmp = $('<div>').html(html);
             var $tmp = $('<div>').html(html);
             var $print = $tmp.find('.print-only').first();
             var $print = $tmp.find('.print-only').first();
             console.log('[print] .print-only found:', $print.length);
             console.log('[print] .print-only found:', $print.length);


             if (!$print.length) {
             if (!$print.length) { console.warn('[print] no .print-only in parsed HTML'); window.print(); return; }
            console.warn('[print] No .print-only in parsed HTML; fallback print.');
            window.print();
            return;
            }


             // Build hidden iframe
             // Hidden iframe
             var iframe = document.createElement('iframe');
             var iframe = document.createElement('iframe');
             iframe.style.position = 'fixed';
             iframe.style.position = 'fixed';
Line 1,096: Line 1,088:
             var printCssUrl = mw.util.getUrl('MediaWiki:Print.css', { action: 'raw', ctype: 'text/css' });
             var printCssUrl = mw.util.getUrl('MediaWiki:Print.css', { action: 'raw', ctype: 'text/css' });


            console.log('[print] Using print CSS:', printCssUrl);
            // Write minimal document with ONLY the print block + print CSS
             doc.open();
             doc.open();
             doc.write(
             doc.write(
Line 1,108: Line 1,097:
             doc.close();
             doc.close();


            // Give the iframe a moment, then print
             iframe.onload = function () {
             iframe.onload = function () {
             try {
             try {
Line 1,118: Line 1,106:
             };
             };
         }).fail(function (xhr) {
         }).fail(function (xhr) {
             console.warn('[print] API request failed:', xhr && xhr.status, xhr && xhr.statusText);
             console.warn('[print] API fail:', xhr && xhr.status, xhr && xhr.statusText);
             window.print();
             window.print();
         });
         });

Navigation menu