MediaWiki:Common.js: Difference between revisions
Appearance
Created page with "→========================================================== 🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - English Bridge Version) Hanya memunculkan tombol jika data tersedia di pusat. Mendukung auto-translation cerdas dari EN ke ID sebelum pengecekan. ==========================================================: $(document).ready(function() { var pageName = mw.config.get('wgPageName').replace(/_/g, ' '); var namespace = mw.config.get('wgNamespaceNumber..." Tags: Mobile edit Mobile web edit  |
No edit summary Tags: Mobile edit Mobile web edit |
||
| Line 11: | Line 11: | ||
   // Jalankan hanya di namespace artikel |    // Jalankan hanya di namespace artikel | ||
   if (namespace === 0) { |    if (namespace === 0) { | ||
     // Otak Pintar: |      // Otak Pintar Baru: Menggunakan MyMemory API yang bebas blokir CORS browser | ||
     var translateUrl = "https:// |      var translateUrl = "https://api.mymemory.translated.net/get?q=" + encodeURIComponent(pageName) + "&langpair=en|id"; | ||
     $.ajax({ |      $.ajax({ | ||
| Line 19: | Line 19: | ||
       dataType: 'json', |        dataType: 'json', | ||
       success: function(translateRes) { |        success: function(translateRes) { | ||
         var translatedTitle = pageName; // Fallback |          var translatedTitle = pageName; // Fallback awal | ||
          |           | ||
         try { |          try { | ||
           if (translateRes && translateRes.responseData && translateRes.responseData.translatedText) { | |||
           if (translateRes && translateRes |             var rawText = translateRes.responseData.translatedText; | ||
             translatedTitle = |             | ||
            // Bersihkan dari tanda baca atau karakter aneh hasil translasi jika ada | |||
             translatedTitle = rawText.replace(/[.\ sovereignty\?]/g, '').trim(); | |||
           } |            } | ||
         } catch (e) { |          } catch (e) { | ||
| Line 30: | Line 32: | ||
         } |          } | ||
         // Format |          // Format ke format halaman MediaWiki (spasi jadi underscore, huruf pertama kapital) | ||
         var targetDataPage = translatedTitle.replace(/\s+/g, '_'); |          var targetDataPage = translatedTitle.charAt(0).toUpperCase() + translatedTitle.slice(1).replace(/\s+/g, '_'); | ||
         // Cek apakah halaman hasil terjemahan tersebut ada di Mippedia Data |          // Cek apakah halaman hasil terjemahan tersebut ada di Mippedia Data | ||
| Line 47: | Line 49: | ||
             var isExist = false; |              var isExist = false; | ||
              |               | ||
             for (var id in pages) { |              for (var id in pages) { | ||
               if (parseInt(id) > 0) { |                if (parseInt(id) > 0) { | ||
| Line 55: | Line 56: | ||
             } |              } | ||
             // Jika data ditemukan, munculkan |              // Jika data ditemukan di pusat, munculkan tombolnya | ||
             if (isExist) { |              if (isExist) { | ||
               injectFloatingDataBtn(targetDataPage, dataDomain); |                injectFloatingDataBtn(targetDataPage, dataDomain); | ||
| Line 63: | Line 64: | ||
       }, |        }, | ||
       error: function() { |        error: function() { | ||
         // Jika |          // Fallback otomatis: Jika API translasi down, langsung cek pake nama aslinya | ||
        var nativePage = pageName.replace(/\s+/g, '_'); | |||
         $.ajax({ |          $.ajax({ | ||
           url: dataDomain + '/api.php', |            url: dataDomain + '/api.php', | ||
           data: { action: 'query', titles: |            data: { action: 'query', titles: nativePage, format: 'json', origin: '*' }, | ||
           dataType: 'jsonp', |            dataType: 'jsonp', | ||
           success: function(res) { |            success: function(res) { | ||
| Line 72: | Line 74: | ||
             var isExist = false; |              var isExist = false; | ||
             for (var id in pages) { if (parseInt(id) > 0) { isExist = true; break; } } |              for (var id in pages) { if (parseInt(id) > 0) { isExist = true; break; } } | ||
             if (isExist) { injectFloatingDataBtn( |              if (isExist) { injectFloatingDataBtn(nativePage, dataDomain); } | ||
           } |            } | ||
         }); |          }); | ||
| Line 90: | Line 92: | ||
     }); |      }); | ||
     var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first(); |      var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first(); | ||
      |       | ||
| Line 97: | Line 97: | ||
       $target.css('position', 'relative').append($btn); |        $target.css('position', 'relative').append($btn); | ||
     } else { |      } else { | ||
       $('#firstHeading').css('position', 'relative').append($btn); |        $('#firstHeading').css('position', 'relative').append($btn); | ||
     } |      } | ||
   } |    } | ||
}); | }); | ||
Revision as of 00:26, 27 May 2026
/* ==========================================================
🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - English Bridge Version)
Hanya memunculkan tombol jika data tersedia di pusat.
Mendukung auto-translation cerdas dari EN ke ID sebelum pengecekan.
========================================================== */
$(document).ready(function() {
var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
var namespace = mw.config.get('wgNamespaceNumber');
var dataDomain = 'https://data.mippedia.org';
// Jalankan hanya di namespace artikel
if (namespace === 0) {
// Otak Pintar Baru: Menggunakan MyMemory API yang bebas blokir CORS browser
var translateUrl = "https://api.mymemory.translated.net/get?q=" + encodeURIComponent(pageName) + "&langpair=en|id";
$.ajax({
url: translateUrl,
type: 'GET',
dataType: 'json',
success: function(translateRes) {
var translatedTitle = pageName; // Fallback awal
try {
if (translateRes && translateRes.responseData && translateRes.responseData.translatedText) {
var rawText = translateRes.responseData.translatedText;
// Bersihkan dari tanda baca atau karakter aneh hasil translasi jika ada
translatedTitle = rawText.replace(/[.\ sovereignty\?]/g, '').trim();
}
} catch (e) {
translatedTitle = pageName;
}
// Format ke format halaman MediaWiki (spasi jadi underscore, huruf pertama kapital)
var targetDataPage = translatedTitle.charAt(0).toUpperCase() + translatedTitle.slice(1).replace(/\s+/g, '_');
// Cek apakah halaman hasil terjemahan tersebut ada di Mippedia Data
$.ajax({
url: dataDomain + '/api.php',
data: {
action: 'query',
titles: targetDataPage,
format: 'json',
origin: '*'
},
dataType: 'jsonp',
success: function(res) {
var pages = res.query.pages;
var isExist = false;
for (var id in pages) {
if (parseInt(id) > 0) {
isExist = true;
break;
}
}
// Jika data ditemukan di pusat, munculkan tombolnya
if (isExist) {
injectFloatingDataBtn(targetDataPage, dataDomain);
}
}
});
},
error: function() {
// Fallback otomatis: Jika API translasi down, langsung cek pake nama aslinya
var nativePage = pageName.replace(/\s+/g, '_');
$.ajax({
url: dataDomain + '/api.php',
data: { action: 'query', titles: nativePage, format: 'json', origin: '*' },
dataType: 'jsonp',
success: function(res) {
var pages = res.query.pages;
var isExist = false;
for (var id in pages) { if (parseInt(id) > 0) { isExist = true; break; } }
if (isExist) { injectFloatingDataBtn(nativePage, dataDomain); }
}
});
}
});
}
function injectFloatingDataBtn(name, domain) {
if ($('#mippedia-data-btn').length) return;
var $btn = $('<a>', {
id: 'mippedia-data-btn',
href: domain + '/wiki/' + encodeURIComponent(name),
target: '_blank',
style: 'position: absolute; right: 10px; top: -32px; background: #36c; color: #fff; padding: 4px 10px; border-radius: 4px; font-weight: bold; font-size: 10px; text-decoration: none; z-index: 1000; box-shadow: 0 2px 4px rgba(0,0,0,0.1);',
text: 'DATA'
});
var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first();
if ($target.length) {
$target.css('position', 'relative').append($btn);
} else {
$('#firstHeading').css('position', 'relative').append($btn);
}
}
});