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

Userlogin: register-panel now shows community stats + CTA
(CreateAccount: inject Thanks + login hint into benefits panel)
(Userlogin: register-panel now shows community stats + CTA)
Рядок 162: Рядок 162:


/* ========================================
/* ========================================
   Auth pages: інжект правої панелі реєстрації
   Userlogin: панель реєстрації зі статистикою спільноти
  поряд з лівою панеллю входу (Special:UserLogin / Special:CreateAccount)
   ======================================== */
   ======================================== */
mw.loader.using(["mediawiki.util"], function () {
mw.loader.using(["mediawiki.util", "mediawiki.api"], function () {
   $(function () {
   $(function () {
     var specialName = mw.config.get("wgCanonicalSpecialPageName");
     var specialName = mw.config.get("wgCanonicalSpecialPageName");
     if (specialName !== "Userlogin" && specialName !== "CreateAccount") return;
     if (specialName !== "Userlogin") return;


     var loginCard = document.querySelector(".mw-body");
     var loginCard = document.querySelector(".mw-body");
     if (!loginCard) return;
     if (!loginCard) return;
    // Якщо вже додано — не дублюємо
     if (document.querySelector(".mw-register-panel")) return;
     if (document.querySelector(".mw-register-panel")) return;


    var isLogin = (specialName === "Userlogin");
    // Створити правy панель
     var panel = document.createElement("aside");
     var panel = document.createElement("aside");
     panel.className = "mw-register-panel";
     panel.className = "mw-register-panel";
Рядок 184: Рядок 178:
     var title = document.createElement("div");
     var title = document.createElement("div");
     title.className = "mw-register-panel__title";
     title.className = "mw-register-panel__title";
     title.textContent = isLogin ? "Створити акаунт" : "Вже з нами?";
     title.textContent = "Долучайтесь до спільноти";


     var sub = document.createElement("div");
     var sub = document.createElement("div");
     sub.className = "mw-register-panel__sub";
     sub.className = "mw-register-panel__sub";
     sub.textContent = isLogin
     sub.textContent = "Українці допомагають українцям за кордоном";
       ? "Долучайтесь до спільноти українців за кордоном"
 
       : "Увійдіть у свій акаунт";
    var statsList = document.createElement("div");
    statsList.className = "mw-createacct-benefits-list";
 
    var stats = [
       { label: "редагувань", cls: "icon-edits" },
      { label: "сторінки", cls: "icon-pages" },
       { label: "дописувачі цього місяця", cls: "icon-contributors" }
    ];
    var nodes = stats.map(function (s) {
      var item = document.createElement("div");
      item.className = "mw-number-text " + s.cls;
      var h3 = document.createElement("h3");
      h3.textContent = "—";
      var p = document.createElement("p");
      p.textContent = s.label;
      item.appendChild(h3);
      item.appendChild(p);
      return item;
    });
    nodes.forEach(function (n) { statsList.appendChild(n); });


     var btn = document.createElement("a");
     var btn = document.createElement("a");
     btn.className = "mw-register-panel__cta";
     btn.className = "mw-register-panel__cta";
     if (isLogin) {
     btn.href = mw.util.getUrl("Special:CreateAccount");
      btn.href = mw.util.getUrl("Special:CreateAccount");
    btn.textContent = "Зареєструватись";
      btn.textContent = "Зареєструватись";
    } else {
      btn.href = mw.util.getUrl("Special:UserLogin");
      btn.textContent = "Увійти";
    }


     panel.appendChild(title);
     panel.appendChild(title);
     panel.appendChild(sub);
     panel.appendChild(sub);
    panel.appendChild(statsList);
     panel.appendChild(btn);
     panel.appendChild(btn);


    // Вставити одразу після лівої картки
     loginCard.parentNode.insertBefore(panel, loginCard.nextSibling);
     loginCard.parentNode.insertBefore(panel, loginCard.nextSibling);
    // Підтягнути живу статистику
    new mw.Api().get({
      action: "query",
      meta: "siteinfo",
      siprop: "statistics",
      format: "json"
    }).then(function (data) {
      var s = data && data.query && data.query.statistics;
      if (!s) return;
      nodes[0].querySelector("h3").textContent = String(s.edits);
      nodes[1].querySelector("h3").textContent = String(s.pages);
      nodes[2].querySelector("h3").textContent = String(s.activeusers);
    });
   });
   });
});
});
/* ========================================
/* ========================================
   CreateAccount: "Дякуємо за участь!" + посилання на вхід
   CreateAccount: "Дякуємо за участь!" + посилання на вхід
Рядок 238: Рядок 261:
     benefits.appendChild(hint);
     benefits.appendChild(hint);
   });
   });
});