MediaWiki:Common.js: відмінності між версіями

cities sidebar v6: insert portlet into DOM before addPortletLink
(Common.js v5: diagnostic + manual fallback)
(cities sidebar v6: insert portlet into DOM before addPortletLink)
Рядок 1: Рядок 1:
/* Per-page sidebar portlets via official mw.util.addPortlet API */
mw.loader.using(["mediawiki.util"], function () {
mw.loader.using(['mediawiki.util'], function () {
   $(function () {
   $(function () {
     var pageName = mw.config.get('wgPageName') || '';
     var pageName = mw.config.get("wgPageName") || "";
     console.log('[nomadica] common.js v5, wgPageName =', pageName);
     console.log("[nomadica] common.js v6, wgPageName =", pageName);
     console.log('[nomadica] mw.util.addPortlet available:', typeof mw.util.addPortlet === 'function');
     if (pageName !== "🇷🇴_Румунія") return;


     if (pageName === '🇷🇴_Румунія') {
     var cities = [
       console.log('[nomadica] matched Romania, creating cities portlet');
      { title: "Бухарест", page: "Румунія/Бухарест" },
      { title: "Клуж-Напока", page: "Румунія/Клуж-Напока" },
      { title: "Тімішоара", page: "Румунія/Тімішоара" },
      { title: "Брашов", page: "Румунія/Брашов" },
       { title: "Ясси", page: "Румунія/Ясси" },
      { title: "Сібіу", page: "Румунія/Сібіу" }
    ];


      var cities = [
     // Спробувати вставити перед #p-tb (TOOLBOX) — стандартний хвостовий портлет.
        { title: 'Бухарест',     page: 'Румунія/Бухарест'    },
    // Якщо нема — після #p-navigation.
        { title: 'Клуж-Напока',  page: 'Румунія/Клуж-Напока' },
    var portlet = null;
        { title: 'Тімішоара',    page: 'Румунія/Тімішоара'  },
    if (document.getElementById("p-tb")) {
        { title: 'Брашов',      page: 'Румунія/Брашов'      },
      portlet = mw.util.addPortlet("p-cities", "Міста", "#p-tb");
        { title: 'Ясси',        page: 'Румунія/Ясси'        },
      console.log("[nomadica] inserted before #p-tb");
        { title: 'Сібіу',        page: 'Румунія/Сібіу'      }
    }
      ];
    if (!portlet) {
 
      portlet = mw.util.addPortlet("p-cities", "Міста");
      if (typeof mw.util.addPortlet === 'function') {
      var nav = document.getElementById("p-navigation");
        var portlet = mw.util.addPortlet('p-cities', 'Міста');
      if (nav && nav.parentNode) {
        console.log('[nomadica] portlet created:', portlet);
        nav.parentNode.insertBefore(portlet, nav.nextSibling);
        cities.forEach(function (city) {
        console.log("[nomadica] manually inserted after #p-navigation");
          var link = mw.util.addPortletLink('p-cities', mw.util.getUrl(city.page), city.title);
          console.log('[nomadica] added link:', city.title, link);
        });
       } else {
       } else {
         console.warn('[nomadica] mw.util.addPortlet NOT available — fallback to manual DOM');
         console.log("[nomadica] FAILED to find anchor for portlet");
        // Fallback: clone navigation portlet structure
         return;
        var $nav = $('#p-navigation');
         if (!$nav.length) {
          console.warn('[nomadica] #p-navigation also not found');
          return;
        }
        var $portlet = $('<div>')
          .attr('id', 'p-cities')
          .addClass('vector-menu mw-portlet mw-portlet-cities');
        var $heading = $('<div>').addClass('vector-menu-heading').text('Міста');
        var $content = $('<div>').addClass('vector-menu-content');
        var $ul = $('<ul>').addClass('vector-menu-content-list');
        cities.forEach(function (city) {
          var $li = $('<li>').addClass('mw-list-item');
          var $a = $('<a>').attr('href', mw.util.getUrl(city.page)).append($('<span>').text(city.title));
          $li.append($a);
          $ul.append($li);
        });
        $content.append($ul);
        $portlet.append($heading).append($content);
        $nav.after($portlet);
        console.log('[nomadica] fallback portlet inserted after #p-navigation');
       }
       }
     }
     }
    cities.forEach(function (city) {
      var link = mw.util.addPortletLink("p-cities", mw.util.getUrl(city.page), city.title);
      console.log("[nomadica] addPortletLink", city.title, "→", link ? "OK" : "FAIL");
    });
   });
   });
});
});