مدیاویکی:Common.js: تفاوت میان نسخه‌ها

از ویکیجو | دانشنامه آزاد پارسی
(بازنویسی تمیز Common.js (رفع ریدایرکت ناخواسته + دکمهٔ شب/روز))
(فرم بازخورد سفارشی زیر مقالات)
 
(یک نسخهٔ میانیِ ایجادشده توسط همین کاربر نشان داده نشد)
خط ۵: خط ۵:
});
});


/* ===== Wikijoo night-mode toggle (2026-05-31) ===== */
/* ===== Wikijoo custom feedback form (2026-06-01) ===== */
(function () {
(function () {
   function apply(t) {
   try {
     document.documentElement.classList.toggle('wj-night', t === 'dark');
    if (mw.config.get('wgNamespaceNumber') !== 0) { return; }
     var b = document.getElementById('wj-theme-btn');
     if (mw.config.get('wgAction') !== 'view') { return; }
     if (b) {
    if (mw.config.get('wgIsMainPage')) { return; }
       b.textContent = (t === 'dark' ? '' : '');
     if (!mw.config.get('wgArticleId')) { return; }
       b.title = (t === 'dark' ? 'حالت روز' : 'حالت شب');
  } catch (e) { return; }
 
  function val(id) { var el = document.getElementById(id); return el ? el.value : ''; }
 
  function build() {
    var content = document.querySelector('.mw-parser-output');
     if (!content || document.getElementById('wj-fb')) { return; }
    var box = document.createElement('div');
    box.className = 'wj-fb';
    box.id = 'wj-fb';
    box.innerHTML =
      '<div class="wj-fb-title">به بهبود این صفحه کمک کنید</div>' +
      '<div class="wj-fb-q">آیا آنچه را که دنبالش بودید یافتید؟</div>' +
       '<div class="wj-fb-rate"><button type="button" data-r="1">بله</button><button type="button" data-r="0">خیر</button></div>' +
      '<textarea id="wj-fb-comment" placeholder="نظر یا پیشنهاد شما دربارهٔ این صفحه (اختیاری)…"></textarea>' +
      '<details class="wj-fb-contact"><summary>اطلاعات تماس (اختیاری) — اگر مایل به دریافت پاسخ هستید</summary>' +
        '<div class="wj-fb-grid">' +
          '<input id="wj-fb-name" type="text" placeholder="نام">' +
          '<input id="wj-fb-family" type="text" placeholder="نام خانوادگی">' +
          '<input id="wj-fb-email" type="email" placeholder="ایمیل">' +
          '<input id="wj-fb-phone" type="tel" placeholder="شمارهٔ تماس">' +
        '</div></details>' +
      '<input class="wj-hp" type="text" id="wj-fb-hp" tabindex="-1" autocomplete="off" aria-hidden="true">' +
       '<div class="wj-fb-actions"><button type="button" class="wj-fb-submit" id="wj-fb-submit">ثبت بازخورد</button>' +
        '<span class="wj-fb-consent">با ارسال، با ذخیرهٔ این اطلاعات و تماس احتمالی موافقت می‌کنید.</span></div>' +
      '<div class="wj-fb-done">سپاس از بازخورد شما! &#x1F33F;</div>';
    content.appendChild(box);
 
    var rating = '';
    var rbtns = box.querySelectorAll('.wj-fb-rate button');
    for (var i = 0; i < rbtns.length; i++) {
      rbtns[i].addEventListener('click', function () {
        rating = this.getAttribute('data-r');
        for (var j = 0; j < rbtns.length; j++) { rbtns[j].classList.remove('sel'); }
        this.classList.add('sel');
      });
     }
     }
  }
 
  var saved = 'light';
    document.getElementById('wj-fb-submit').addEventListener('click', function () {
  try { saved = localStorage.getItem('wj-theme') || 'light'; } catch (e) {}
      var comment = val('wj-fb-comment');
  apply(saved);
      if (rating === '' && comment.replace(/\s/g, '') === '') {
  function addBtn() {
        alert('لطفاً «بله/خیر» را انتخاب کنید یا نظری بنویسید.');
    if (document.getElementById('wj-theme-btn')) { return; }
        return;
    var host = document.querySelector('.vector-header-end') || document.querySelector('#p-personal') || document.querySelector('.vector-user-links');
      }
    if (!host) { return; }
      var btn = this; btn.disabled = true;
    var btn = document.createElement('button');
      var fd = new FormData();
    btn.id = 'wj-theme-btn';
      fd.append('rating', rating);
    btn.type = 'button';
      fd.append('comment', comment);
    btn.className = 'wj-theme-btn';
      fd.append('name', val('wj-fb-name'));
    btn.setAttribute('aria-label', 'تغییر حالت شب و روز');
      fd.append('family', val('wj-fb-family'));
    host.insertBefore(btn, host.firstChild);
      fd.append('email', val('wj-fb-email'));
    btn.addEventListener('click', function () {
      fd.append('phone', val('wj-fb-phone'));
       var cur = document.documentElement.classList.contains('wj-night') ? 'dark' : 'light';
      fd.append('website', val('wj-fb-hp'));
       var next = (cur === 'dark') ? 'light' : 'dark';
      fd.append('page_id', mw.config.get('wgArticleId'));
      try { localStorage.setItem('wj-theme', next); } catch (e) {}
       fd.append('page_title', mw.config.get('wgPageName').replace(/_/g, ' '));
      apply(next);
       fetch('/wjfeedback.php', { method: 'POST', body: fd })
        .then(function (r) { return r.json(); })
        .then(function (d) {
          if (d && d.ok) { box.className = 'wj-fb done'; }
          else { btn.disabled = false; alert('خطا در ثبت بازخورد. لطفاً دوباره تلاش کنید.'); }
        })
        .catch(function () { btn.disabled = false; alert('خطا در ارتباط. لطفاً دوباره تلاش کنید.'); });
     });
     });
    apply(document.documentElement.classList.contains('wj-night') ? 'dark' : 'light');
   }
   }
   if (document.readyState !== 'loading') { addBtn(); }
   if (document.readyState !== 'loading') { build(); }
   else { document.addEventListener('DOMContentLoaded', addBtn); }
   else { document.addEventListener('DOMContentLoaded', build); }
})();
})();

نسخهٔ کنونی تا ‏۲ ژوئن ۲۰۲۶، ساعت ۱۹:۲۹

mw.loader.using('mediawiki.util', function () {
  var ribbon = document.createElement("div");
  ribbon.className = "ribbon";
  document.body.appendChild(ribbon);
});

/* ===== Wikijoo custom feedback form (2026-06-01) ===== */
(function () {
  try {
    if (mw.config.get('wgNamespaceNumber') !== 0) { return; }
    if (mw.config.get('wgAction') !== 'view') { return; }
    if (mw.config.get('wgIsMainPage')) { return; }
    if (!mw.config.get('wgArticleId')) { return; }
  } catch (e) { return; }

  function val(id) { var el = document.getElementById(id); return el ? el.value : ''; }

  function build() {
    var content = document.querySelector('.mw-parser-output');
    if (!content || document.getElementById('wj-fb')) { return; }
    var box = document.createElement('div');
    box.className = 'wj-fb';
    box.id = 'wj-fb';
    box.innerHTML =
      '<div class="wj-fb-title">به بهبود این صفحه کمک کنید</div>' +
      '<div class="wj-fb-q">آیا آنچه را که دنبالش بودید یافتید؟</div>' +
      '<div class="wj-fb-rate"><button type="button" data-r="1">بله</button><button type="button" data-r="0">خیر</button></div>' +
      '<textarea id="wj-fb-comment" placeholder="نظر یا پیشنهاد شما دربارهٔ این صفحه (اختیاری)…"></textarea>' +
      '<details class="wj-fb-contact"><summary>اطلاعات تماس (اختیاری) — اگر مایل به دریافت پاسخ هستید</summary>' +
        '<div class="wj-fb-grid">' +
          '<input id="wj-fb-name" type="text" placeholder="نام">' +
          '<input id="wj-fb-family" type="text" placeholder="نام خانوادگی">' +
          '<input id="wj-fb-email" type="email" placeholder="ایمیل">' +
          '<input id="wj-fb-phone" type="tel" placeholder="شمارهٔ تماس">' +
        '</div></details>' +
      '<input class="wj-hp" type="text" id="wj-fb-hp" tabindex="-1" autocomplete="off" aria-hidden="true">' +
      '<div class="wj-fb-actions"><button type="button" class="wj-fb-submit" id="wj-fb-submit">ثبت بازخورد</button>' +
        '<span class="wj-fb-consent">با ارسال، با ذخیرهٔ این اطلاعات و تماس احتمالی موافقت می‌کنید.</span></div>' +
      '<div class="wj-fb-done">سپاس از بازخورد شما! &#x1F33F;</div>';
    content.appendChild(box);

    var rating = '';
    var rbtns = box.querySelectorAll('.wj-fb-rate button');
    for (var i = 0; i < rbtns.length; i++) {
      rbtns[i].addEventListener('click', function () {
        rating = this.getAttribute('data-r');
        for (var j = 0; j < rbtns.length; j++) { rbtns[j].classList.remove('sel'); }
        this.classList.add('sel');
      });
    }

    document.getElementById('wj-fb-submit').addEventListener('click', function () {
      var comment = val('wj-fb-comment');
      if (rating === '' && comment.replace(/\s/g, '') === '') {
        alert('لطفاً «بله/خیر» را انتخاب کنید یا نظری بنویسید.');
        return;
      }
      var btn = this; btn.disabled = true;
      var fd = new FormData();
      fd.append('rating', rating);
      fd.append('comment', comment);
      fd.append('name', val('wj-fb-name'));
      fd.append('family', val('wj-fb-family'));
      fd.append('email', val('wj-fb-email'));
      fd.append('phone', val('wj-fb-phone'));
      fd.append('website', val('wj-fb-hp'));
      fd.append('page_id', mw.config.get('wgArticleId'));
      fd.append('page_title', mw.config.get('wgPageName').replace(/_/g, ' '));
      fetch('/wjfeedback.php', { method: 'POST', body: fd })
        .then(function (r) { return r.json(); })
        .then(function (d) {
          if (d && d.ok) { box.className = 'wj-fb done'; }
          else { btn.disabled = false; alert('خطا در ثبت بازخورد. لطفاً دوباره تلاش کنید.'); }
        })
        .catch(function () { btn.disabled = false; alert('خطا در ارتباط. لطفاً دوباره تلاش کنید.'); });
    });
  }
  if (document.readyState !== 'loading') { build(); }
  else { document.addEventListener('DOMContentLoaded', build); }
})();