بۆ ناوەڕۆک بازبدە

بەکارھێنەر:Sakura emad/mediawiki:test.js

لە ئینسایکڵۆپیدیای ئازادی ویکیپیدیاوە
تێبینی: دوای پاشەکەوتکردن، پێویستە کاشی وێبگەڕەکەت پاک بکەیتەوە تا گۆڕانکارییەکان ببینیت. بۆ گووگڵ کڕۆم، فایەرفۆکس، مایکرۆسۆفت ئێج و سافاری: پەنجە لەسەر دوگمەی ⇧ Shift ڕاگرە و کرتە لەسەر Reload بکە. بۆ وردەکاری و ڕێنمایییەکان لەسەر وێبگەڕەکانی تر، بڕوانە ئێرە.
// <nowiki>
(function($) {
  /*
   ****************************************
   *** friendlytalkback.js: Talkback module
   ****************************************
   * Mode of invocation:     Tab ("TB")
   * Active on:              Existing user talk pages
   * Config directives in:   FriendlyConfig
   */

  const Twinkle = {
    talkback: {},
    addPortletLink(callback, text, id, tooltip) {
      // Add portlet link function implementation
      // Assuming this is already implemented
    },
    getPref(prefName) {
      // Placeholder for getting preference
      return ""; // Assuming this returns the user's preferences
    },
    getFriendlyPref(prefName) {
      // Placeholder for getting friendly preference
      return ""; // Assuming this returns the user's friendly preferences
    }
  };

  Twinkle.talkback.init = function() {
    if (!mw.config.get('wgRelevantUserName')) {
      return;
    }

    Twinkle.addPortletLink(Twinkle.talkback.callback, "وەڵامدانەوە", "friendly-talkback", "وەڵامدانەوەی ئاسان");
  };

  Twinkle.talkback.callback = function() {
    const userName = mw.config.get('wgRelevantUserName');
    const currentUserName = mw.config.get("wgUserName");

    if (userName === currentUserName && !confirm("تۆ خەریکە وەڵامی خۆت دەدەیتەوە، دڵنیایت دەتەوێت بەردەوام بیت؟")) {
      return;
    }

    const Window = new Morebits.simpleWindow(600, 350);
    Window.setTitle("وەڵامدانەوە");
    Window.setScriptName("توینکڵ");
    Window.addFooterLink("لەبارەی وەڵامدانەوە", "داڕێژە:وەڵام بۆ");
    Window.addFooterLink("یارمەتیی توینکڵ", "وپ:تو/DOC#وەڵامدانەوە");

    const form = new Morebits.quickForm(callback_evaluate);

    form.append({
      type: "radio",
      name: "tbtarget",
      list: [
        { label: "وەڵامدانەوە: پەڕەی لێدوانەکەم", value: "mytalk", checked: "true" },
        { label: "وەڵامدانەوە: پەڕەی لێدوانی بەکارھێنەرێکی تر", value: "usertalk" },
        { label: "وەڵامدانەوە: پەڕەی تر", value: "other" },
        { label: "\«تکایە ببینە\»", value: "see" },
        { label: "ھۆشداری تەختەی ئاگاداری", value: "notice" },
        { label: "\«ئیمەیڵت ھەیە\»", value: "mail" }
      ],
      event: callback_change_target
    });

    form.append({
      type: "field",
      label: "ناوچەی کار",
      name: "work_area"
    });

    form.append({ type: "submit", label: 'ناردن' });

    const result = form.render();
    Window.setContent(result);
    Window.display();

    // Trigger change event
    const evt = new Event("change");
    result.tbtarget[0].dispatchEvent(evt);

    // Check whether the user has opted out from talkback
    const query = {
      action: 'query',
      prop: 'extlinks',
      titles: mw.config.get('wgPageName'),
      elquery: 'userjs.invalid/noTalkback',
      ellimit: '1'
    };
    const wpapi = new Morebits.wiki.api("بەدەستھێنانی حاڵەتی دەرچوون لە بەدەستھێنانی وەڵامدانەوە", query, Twinkle.talkback.callback.optoutStatus);
    wpapi.post();
  };

  Twinkle.talkback.optout = null;

  Twinkle.talkback.callback.optoutStatus = function(apiobj) {
    const xml = apiobj.getXML();
    const $el = $(xml).find('el');

    if ($el.length) {
      Twinkle.talkback.optout = `${mw.config.get('wgRelevantUserName')} حەز ناکات بەم جۆرە وەڵامی بدرێتەوە`;
      const url = $el.text();
      if (url.indexOf("reason=") > -1) {
        Twinkle.talkback.optout += `: ${decodeURIComponent(url.substring(url.indexOf("reason=") + 7))}.`;
      } else {
        Twinkle.talkback.optout += ".";
      }
    } else {
      Twinkle.talkback.optout = false;
    }

    const $status = $("#twinkle-talkback-optout-message");
    if ($status.length && Twinkle.talkback.optout) {
      $status.text(Twinkle.talkback.optout);
    }
  };

  let prev_page = "";
  let prev_section = "";
  let prev_message = "";

  const callback_change_target = function(e) {
    const value = e.target.value;
    const root = e.target.form;
    const old_area = Morebits.quickForm.getElements(root, "work_area")[0];

    if (root.section) {
      prev_section = root.section.value;
    }
    if (root.message) {
      prev_message = root.message.value;
    }
    if (root.page) {
      prev_page = root.page.value;
    }

    const work_area = new Morebits.quickForm.element({
      type: "field",
      label: "زانیاریی وەڵامدانەوە",
      name: "work_area"
    });

    switch (value) {
      case "mytalk":
      default:
        work_area.append({
          type: "div",
          label: "",
          style: "color: red",
          id: "twinkle-talkback-optout-message"
        });
        work_area.append({
          type: "input",
          name: "section",
          label: "بەشی بەستەردراو (دڵخواز)",
          tooltip: "ئەو بەشەی پەیامەکەت تێدا نووسیوە. ئەگەر بە واڵایی بەجێی بھێڵیت ھیچ بەشێک بەستەر نادرێت.",
          value: prev_section
        });
        break;
      case "usertalk":
        work_area.append({
          type: "div",
          label: "",
          style: "color: red",
          id: "twinkle-talkback-optout-message"
        });
        work_area.append({
          type: "input",
          name: "page",
          label: "بەکارھێنەر",
          tooltip: "ناوی ئەو بەکارھێنەرەی لەسەر پەڕەی وتووێژەکەی پەیامت داناوە.",
          value: prev_page
        });
        work_area.append({
          type: "input",
          name: "section",
          label: "بەستەری بەش (دڵخواز)",
          tooltip: "ئەو بەشەی پەیامەکەت تێدا نووسیوە. ئەگەر بە واڵایی بەجێی بھێڵیت ھیچ بەشێک بەستەر نادرێت",
          value: prev_section
        });
        break;
      case "notice":
        const noticeboard = work_area.append({
          type: "select",
          name: "noticeboard",
          label: "تەختەی ئاگاداری:",
          event: function(e) {
            if (e.target.value === "afchd") {
              Morebits.quickForm.overrideElementLabel(e.target.form.section, "ناونیشانی درافت (بەبێ پێشگر): ");
              Morebits.quickForm.setElementTooltipVisibility(e.target.form.section, false);
            } else {
              Morebits.quickForm.resetElementLabel(e.target.form.section);
              Morebits.quickForm.setElementTooltipVisibility(e.target.form.section, true);
            }
          }
        });
        noticeboard.append({
          type: "option",
          label: "وپ:تب (تەختەی ئاگاداریی بەڕێوەبەران)",
          value: "an"
        });
        noticeboard.append({
          type: "option",
          label: "وپ:تب٣ (تەختەی ئاگاداریی بەڕێوەبەران/شەڕە دەستکاری)",
          value: "an3"
        });
        noticeboard.append({
          type: "option",
          label: "وپ:تبڕ (تەختەی ئاگاداریی بەڕێوەبەران/ڕووداوەکان)",
          selected: true,
          value: "ani"
        });
        noticeboard.append({
          type: "option",
          label: "وپ:وبدمز (داخوازی دروستکردنی وتار/مێزی زانیاری/Help desk)",
          value: "afchd"
        });
        noticeboard.append({
          type: "option",
          label: "وپ:قە (وتووێژی ھەڵبژاردنی بەڕێوەبەر)",
          value: "bn"
        });

        work_area.append({
          type: "input",
          name: "section",
          label: "بەستەری بەش (دڵخواز)",
          tooltip: "ئەو بەشەی پەیامەکەت تێدا نووسیوە. ئەگەر بە واڵایی بەجێی بھێڵیت ھیچ بەشێک بەستەر نادرێت",
          value: prev_section
        });
        break;
      case "see":
        work_area.append({
          type: "input",
          name: "page",
          label: "پەڕە",
          tooltip: "پەڕەیەکی دیاری کراو.",
          value: prev_page
        });
        work_area.append({
          type: "input",
          name: "section",
          label: "بەستەری بەش (دڵخواز)",
          tooltip: "ئەو بەشەی پەیامەکەت تێدا نووسیوە. ئەگەر بە واڵایی بەجێی بھێڵیت ھیچ بەشێک بەستەر نادرێت",
          value: prev_section
        });
        work_area.append({
          type: "textarea",
          name: "message",
          label: "پەیام (دڵخواز)",
          tooltip: "ناردنی پەیامێکی دڵخواز."
        });
        break;
      case "mail":
        work_area.append({
          type: "div",
          label: "تکایە زانیاری دیاریکراوی خۆی بەکارھێنەر تێبینەوە"
        });
        work_area.append({
          type: "textarea",
          name: "message",
          label: "پەیام",
          tooltip: "پەیامێکی دڵخواز.",
          value: prev_message
        });
        break;
      case "other":
        work_area.append({
          type: "input",
          name: "page",
          label: "پەڕە",
          tooltip: "پەڕەیەکی دیاری کراو.",
          value: prev_page
        });
        work_area.append({
          type: "input",
          name: "section",
          label: "بەستەری بەش (دڵخواز)",
          tooltip: "ئەو بەشەی پەیامەکەت تێدا نووسیوە. ئەگەر بە واڵایی بەجێی بھێڵیت ھیچ بەشێک بەستەر نادرێت",
          value: prev_section
        });
        work_area.append({
          type: "textarea",
          name: "message",
          label: "پەیام (دڵخواز)",
          tooltip: "پەیامێکی دڵخواز.",
          value: prev_message
        });
        break;
    }

    root.replaceChild(work_area.render(), old_area);
    if (Twinkle.talkback.optout) {
      $("#twinkle-talkback-optout-message").text(Twinkle.talkback.optout);
    }
  };

  const callback_evaluate = function(e) {
    const form = e.target;
    const value = form.tbtarget.value;
    let pageName, section, message;
    let editSummary, talkPageMessage, link;

    const username = mw.config.get("wgRelevantUserName");
    const usertalk = `User talk:${username}`;
    const mytalk = `User talk:${mw.config.get("wgUserName")}`;
    const talkLink = (section) => `[[${form.page.value}#${section}|پەیامەکەت]]`;
    const noticeboardLinks = {
      an: `[[Wikipedia:Administrators' noticeboard#${form.section.value}|پەیامەکەت]]`,
      an3: `[[Wikipedia:Administrators' noticeboard/Edit warring#${form.section.value}|پەیامەکەت]]`,
      ani: `[[Wikipedia:Administrators' noticeboard/Incidents#${form.section.value}|پەیامەکەت]]`,
      afchd: `[[Wikipedia:Help desk#${form.section.value}|پەیامەکەت]]`,
      bn: `[[Wikipedia:Bureaucrats' noticeboard#${form.section.value}|پەیامەکەت]]`
    };

    if (value === "mytalk") {
      pageName = mytalk;
      section = form.section.value;
      editSummary = "وەڵامدانەوە.";
      talkPageMessage = `== وەڵامدانەوە ==\n{{جاوبەخشی|${username}}}، تۆ بەتەواوی لە پەڕەی وتووێژەکەم وەڵامی تۆ داناوە [[:${mytalk}#${section}|پەیامەکەت]]. ~~~~`;
    } else if (value === "usertalk") {
      pageName = usertalk;
      section = form.section.value;
      editSummary = `وەڵامدانەوە لە پەڕەی لێدوانی بەکارھێنەرەکی تر.`;
      talkPageMessage = `== وەڵامدانەوە ==\n{{جاوبەخشی|${username}}}، تۆ بەتەواوی لە پەڕەی وتووێژەکەم وەڵامی تۆ داناوە ${talkLink(section)}. ~~~~`;
    } else if (value === "notice") {
      pageName = usertalk;
      section = form.section.value;
      const noticeboard = form.noticeboard.value;
      editSummary = `وەڵامدانەوە لە ${noticeboard} تەختەی ئاگاداری.`;
      talkPageMessage = `== وەڵامدانەوە ==\n{{جاوبەخشی|${username}}}، تۆ بەتەواوی لە ${noticeboard} وەڵامی تۆ داناوە ${noticeboardLinks[noticeboard]}. ~~~~`;
    } else if (value === "see") {
      pageName = usertalk;
      section = form.section.value;
      message = form.message.value;
      editSummary = `تکایە ببینەیەک لە پەڕەی دیاری کراو.`;
      talkPageMessage = `== تکایە ببینە ==\n{{جاوبەخشی|${username}}}، تکایە بەڵامەکەت لە پەڕەیەکی دیاری کراو داناوە ${talkLink(section)}. ~~~~\n${message}`;
    } else if (value === "mail") {
      pageName = usertalk;
      message = form.message.value;
      editSummary = `وەڵامدانەوەی ئیمەیڵ.`;
      talkPageMessage = `== وەڵامدانەوەی ئیمەیڵ ==\n{{جاوبەخشی|${username}}}، ئیمەیڵێکی دڵخواز داناوە. ~~~~\n${message}`;
    } else if (value === "other") {
      pageName = usertalk;
      section = form.section.value;
      message = form.message.value;
      editSummary = `وەڵامدانەوە لە پەڕەی دیاری کراو.`;
      talkPageMessage = `== وەڵامدانەوە ==\n{{جاوبەخشی|${username}}}، تۆ بەتەواوی لە پەڕەی دیاری کراو وەڵامی تۆ داناوە ${talkLink(section)}. ~~~~\n${message}`;
    }

    Morebits.wiki.actionCompleted.redirect = pageName;
    Morebits.wiki.actionCompleted.notice = `وەڵامدانەوەی تۆ لە پەڕەی ${pageName} نووسرا.`;

    const page = new Morebits.wiki.page(pageName, `وەڵامدانەوە بۆ ${username}`);
    page.setEditSummary(editSummary);
    page.setAppendText(talkPageMessage);
    page.setCreateOption("recreate");
    page.setWatchlist(Twinkle.getPref("watchTalkback"));
    page.setFollowRedirect(true);
    page.append();
  };

  Twinkle.talkback.init();
})(jQuery);
// </nowiki>