মিডিয়াউইকি:Gadget-twinklewarn.js

লক্ষ্য করুন: প্রকাশ করার পর, পরিবর্তনগুলো দেখতে আপনাকে আপনার ব্রাউজারের ক্যাশে পরিষ্কার করার প্রয়োজন হতে পারে।

  • ফায়ারফক্স / সাফারি: পুনরায় লোড-এ ক্লিক করার সময় শিফট টিপে ধরে রাখুন, অথবা হয় Ctrl-F5 বা Ctrl-R টিপুন (ম্যাকে ⌘-R টিপুন)
  • গুগল ক্রোম: Ctrl-Shift-R (ম্যাকে ⌘-Shift-R) টিপুন
  • ইন্টারনেট এক্সপ্লোরার / এজ: Ctrl ধরে রাখা অবস্থায় Refresh-এ ক্লিক করুন, অথবা Ctrl-F5 টিপুন
  • অপেরা: Ctrl-F5 টিপুন।
// <nowiki>
/*
অনুবাদ কৃতজ্ঞতা:
**মোঃ মারুফ হাসান
**Yahya
**MdsShakil
*/

  /*
     ****************************************
     *** twinklewarn.js: সতর্কবার্তা মডিউল
     ****************************************
     * Mode of invocation:     Tab ("সতর্কবার্তা")
     * Active on:              Any page with relevant user name (userspace, contribs,
     *                         etc.) (not IP ranges), as well as the rollback success page
     
     *caution কে ‘দ্বিতীয় স্তরের সতর্কতা’ এবং warning কে ‘তৃতীয় স্তরের সতর্কতা’ অনুবাদ করা হয়েছে। --Yahya
    *[[টেমপ্লেট:বাংলায় সম্পাদনা সারাংশ দিন (টুইংকল)]] একক সমস্যার বার্তা অংশে যুক্ত করা হলো --MdsShakil
     */
     
(function ($) {

  Twinkle.warn = function twinklewarn() {
    // Users and IPs but not IP ranges
    if (
      mw.config.exists("wgRelevantUserName") &&
      !Morebits.ip.isRange(mw.config.get("wgRelevantUserName"))
    ) {
      Twinkle.addPortletLink(
        Twinkle.warn.callback,
        "সতর্ক করুন",
        "tw-warn",
        "সতর্ক করুন/ব্যবহারকারীকে অবহিত করুন"
      );
      if (
        Twinkle.getPref("autoMenuAfterRollback") &&
        mw.config.get("wgNamespaceNumber") === 3 &&
        mw.util.getParamValue("vanarticle") &&
        !mw.util.getParamValue("friendlywelcome") &&
        !mw.util.getParamValue("noautowarn")
      ) {
        Twinkle.warn.callback();
      }
    }

    // Modify URL of talk page on rollback success pages, makes use of a
    // custom message box in [[MediaWiki:Rollback-success]]
    if (mw.config.get("wgAction") === "rollback") {
      var $vandalTalkLink = $("#mw-rollback-success")
        .find(".mw-usertoollinks a")
        .first();
      if ($vandalTalkLink.length) {
        $vandalTalkLink.css("font-weight", "bold");
        $vandalTalkLink.wrapInner(
          $("<span/>").attr(
            "title",
            "উপযুক্ত হলে, আপনি এই পৃষ্ঠায় ব্যবহারকারীদের তাদের সম্পাদনা সম্পর্কে সতর্ক করতে টুইঙ্কল ব্যবহার করতে পারেন।"
          )
        );

        // Can't provide vanarticlerevid as only wgCurRevisionId is provided
        var extraParam =
          "vanarticle=" + mw.util.rawurlencode(Morebits.pageNameNorm);
        var href = $vandalTalkLink.attr("href");
        if (href.indexOf("?") === -1) {
          $vandalTalkLink.attr("href", href + "?" + extraParam);
        } else {
          $vandalTalkLink.attr("href", href + "&" + extraParam);
        }
      }
    }
  };

  // Used to close window when switching to ARV in autolevel
  Twinkle.warn.dialog = null;

  Twinkle.warn.callback = function twinklewarnCallback() {
    if (
      mw.config.get("wgRelevantUserName") === mw.config.get("wgUserName") &&
      !confirm(
        "আপনি নিজেকে সতর্ক করতে চলেছেন! আপনি কি নিশ্চিত আপনি এটাই করতে চান?"
      )
    ) {
      return;
    }

    var dialog;
    Twinkle.warn.dialog = new Morebits.simpleWindow(600, 440);
    dialog = Twinkle.warn.dialog;
    dialog.setTitle("সতর্ক করুন/ব্যবহারকারীকে অবহিত করুন");
    dialog.setScriptName("টুইংকল");
    dialog.addFooterLink("একটি সতর্কতা স্তর নির্বাচন করা", "WP:UWUL#Levels");
    dialog.addFooterLink("সতর্কতার পছন্দসমূহ", "WP:TW/PREF#warn");
    dialog.addFooterLink("টুইংকল সাহায্য", "WP:TW/DOC#warn");
    dialog.addFooterLink("প্রতিক্রিয়া জানান", "WT:TW");

    var form = new Morebits.quickForm(Twinkle.warn.callback.evaluate);
    var main_select = form.append({
      type: "field",
      label: "প্রদান করার জন্য সতর্কতার ধরন/বিজ্ঞপ্তি বেছে নিন",
      tooltip:
        "প্রথমে একটি প্রধান সতর্কতা গ্রুপ নির্বাচন করুন, তারপরে প্রদান করার জন্য একটি নির্দিষ্ট সতর্কতা বাছাই করুন।",
    });

    var main_group = main_select.append({
      type: "select",
      name: "main_group",
      tooltip:
        "আপনি আপনার টুইঙ্কল পছন্দগুলিতে ডিফল্ট নির্বাচনটি কাস্টমাইজ করতে পারেন",
      event: Twinkle.warn.callback.change_category,
    });

    var defaultGroup = parseInt(Twinkle.getPref("defaultWarningGroup"), 10);
    main_group.append({
      type: "option",
      label: "স্বয়ংক্রিয় স্তর নির্বাচন (১-৪)",
      value: "autolevel",
      selected: defaultGroup === 11,
    });
    main_group.append({
      type: "option",
      label: "১: সাধারণ বিজ্ঞপ্তি",
      value: "level1",
      selected: defaultGroup === 1,
    });
    main_group.append({
      type: "option",
      label: "২: দ্বিতীয় স্তরের সতর্কবার্তা",
      value: "level2",
      selected: defaultGroup === 2,
    });
    main_group.append({
      type: "option",
      label: "৩: তৃতীয় স্তরের সতর্কবার্তা",
      value: "level3",
      selected: defaultGroup === 3,
    });
    main_group.append({
      type: "option",
      label: "৪: সর্বশেষ সতর্কবার্তা",
      value: "level4",
      selected: defaultGroup === 4,
    });
    main_group.append({
      type: "option",
      label: "4im: একমাত্র সতর্কবার্তা",
      value: "level4im",
      selected: defaultGroup === 5,
    });
    if (Twinkle.getPref("combinedSingletMenus")) {
      main_group.append({
        type: "option",
        label: "একক সমস্যার বার্তা",
        value: "singlecombined",
        selected: defaultGroup === 6 || defaultGroup === 7,
      });
    } else {
      main_group.append({
        type: "option",
        label: "একক সমস্যার বার্তা",
        value: "singlenotice",
        selected: defaultGroup === 6,
      });
      main_group.append({
        type: "option",
        label: "একক সমস্যার সতর্কবার্তা",
        value: "singlewarn",
        selected: defaultGroup === 7,
      });
    }
    if (Twinkle.getPref("customWarningList").length) {
      main_group.append({
        type: "option",
        label: "স্বনির্ধারিত সতর্কবার্তা",
        value: "custom",
        selected: defaultGroup === 9,
      });
    }
    main_group.append({
      type: "option",
      label: "সকল সতর্কবার্তা টেমপ্লেট",
      value: "kitchensink",
      selected: defaultGroup === 10,
    });

    main_select.append({
      type: "select",
      name: "sub_group",
      event: Twinkle.warn.callback.change_subcategory,
    }); // Will be empty to begin with.

    form.append({
      type: "input",
      name: "article",
      label: "সংযুক্ত পাতা",
      value: mw.util.getParamValue("vanarticle") || "",
      tooltip:
        "একটি পাতা বিজ্ঞপ্তির সাথে সংযুক্ত করা যেতে পারে, কারণ সম্ভবত আপনি উল্লিখিত পাতায় সম্পাদনা পুনর্বহাল করেছিলেন যে কারণে এই বিজ্ঞপ্তিটি পাঠাচ্ছেন।  কোন পৃষ্ঠা সংযুক্ত না করতে এটি খালি রাখুন।",
    });

    form.append({
      type: "div",
      label: "",
      style: "color: red",
      id: "twinkle-warn-warning-messages",
    });

    var more = form.append({
      type: "field",
      name: "reasonGroup",
      label: "সতর্কীকরণ তথ্য",
    });
    more.append({
      type: "textarea",
      label: "ঐচ্ছিক বার্তা:",
      name: "reason",
      tooltip:
        "সম্ভবত একটি কারণ, অথবা আরো বিস্তারিত বিজ্ঞপ্তি সংযুক্ত করা আবশ্যক",
    });

    var previewlink = document.createElement("a");
    $(previewlink).click(function () {
      Twinkle.warn.callbacks.preview(result); // |result| is defined below
    });
    previewlink.style.cursor = "pointer";
    previewlink.textContent = "প্রাকদর্শন";
    more.append({ type: "div", id: "warningpreview", label: [previewlink] });
    more.append({
      type: "div",
      id: "twinklewarn-previewbox",
      style: "display: none",
    });

    more.append({ type: "submit", label: "জমা দিন" });

    var result = form.render();
    dialog.setContent(result);
    dialog.display();
    result.main_group.root = result;
    result.previewer = new Morebits.wiki.preview(
      $(result).find("div#twinklewarn-previewbox").last()[0]
    );

    // Potential notices for staleness and missed reverts
    var vanrevid = mw.util.getParamValue("vanarticlerevid");
    if (vanrevid) {
      var message = "";
      var query = {};

      // If you tried reverting, check if *you* actually reverted
      if (
        !mw.util.getParamValue("noautowarn") &&
        mw.util.getParamValue("vanarticle")
      ) {
        // Via fluff link
        query = {
          action: "query",
          titles: mw.util.getParamValue("vanarticle"),
          prop: "revisions",
          rvstartid: vanrevid,
          rvlimit: 2,
          rvdir: "newer",
          rvprop: "user",
          format: "json",
        };

        new Morebits.wiki.api(
          "আপনি পাতাটি সফলভাবে সম্পাদনা পুনর্বহাল করেছেন কিনা তা পরীক্ষা করা হচ্ছে",
          query,
          function (apiobj) {
            var rev = apiobj.getResponse().query.pages[0].revisions;
            var revertUser = rev && rev[1].user;
            if (revertUser && revertUser !== mw.config.get("wgUserName")) {
              message +=
                " অন্য কেউ পাতাটিতে পুনর্বহাল করেছেন এবং ইতিমধ্যেই ব্যবহারকারীকে সতর্ক করেছে।";
              $("#twinkle-warn-warning-messages").text("বিজ্ঞপ্তি:" + message);
            }
          }
        ).post();
      }

      // Confirm edit wasn't too old for a warning
      var checkStale = function (vantimestamp) {
        var revDate = new Morebits.date(vantimestamp);
        if (vantimestamp && revDate.isValid()) {
          if (revDate.add(24, "hours").isBefore(new Date())) {
            message +=
              " এই সম্পাদনাটি ২৪ ঘন্টারও বেশি আগে করা হয়েছিল তাই একটি সতর্কতা পুরনো হতে পারে।";
            $("#twinkle-warn-warning-messages").text("বিজ্ঞপ্তি:" + message);
          }
        }
      };

      var vantimestamp = mw.util.getParamValue("vantimestamp");
      // Provided from a fluff module-based revert, no API lookup necessary
      if (vantimestamp) {
        checkStale(vantimestamp);
      } else {
        query = {
          action: "query",
          prop: "revisions",
          rvprop: "timestamp",
          revids: vanrevid,
          format: "json",
        };
        new Morebits.wiki.api(
          "সংস্করণ টাইমস্ট্যাম্প আনা হচ্ছে",
          query,
          function (apiobj) {
            var rev = apiobj.getResponse().query.pages[0].revisions;
            vantimestamp = rev && rev[0].timestamp;
            checkStale(vantimestamp);
          }
        ).post();
      }
    }

    // We must init the first choice (General Note);
    var evt = document.createEvent("Event");
    evt.initEvent("change", true, true);
    result.main_group.dispatchEvent(evt);
  };

  // This is all the messages that might be dispatched by the code
  // Each of the individual templates require the following information:
  //   label (required): A short description displayed in the dialog
  //   summary (required): The edit summary used. If an article name is entered, the summary is postfixed with "on [[article]]", and it is always postfixed with "."
  //   suppressArticleInSummary (optional): Set to true to suppress showing the article name in the edit summary. Useful if the warning relates to attack pages, or some such.
  Twinkle.warn.messages = {
    levels: {
      "Common warnings": {
        "uw-vandalism": {
          level1: {
            label: "ধ্বংসপ্রবণতা",
            summary: "সাধারণ বিজ্ঞপ্তি: অগঠনমূলক সম্পাদনা",
          },
          level2: {
            label: "ধ্বংসপ্রবণতা",
            summary: "দ্বিতীয় স্তরের সতর্কতা: অগঠনমূলক সম্পাদনা",
          },
          level3: {
            label: "ধ্বংসপ্রবণতা",
            summary: "তৃতীয় স্তরের সতর্কতা: ধ্বংসপ্রবণতা",
          },
          level4: {
            label: "ধ্বংসপ্রবণতা",
            summary: "সর্বশেষ সতর্কতা: ধ্বংসপ্রবণতা",
          },
          level4im: {
            label: "ধ্বংসপ্রবণতা",
            summary: "একমাত্র সতর্কতা: ধ্বংসপ্রবণতা",
          },
        },
        "uw-disruptive": {
          level1: {
            label: "অগঠনমূলক সম্পাদনা",
            summary: "সাধারণ বিজ্ঞপ্তি: অগঠমূলক সম্পাদনা",
          },
          level2: {
            label: "অগঠনমূলক সম্পাদনা",
            summary: "দ্বিতীয় স্তরের সতর্কতা: অগঠমূলক সম্পাদনা",
          },
          level3: {
            label: "অগঠনমূলক সম্পাদনা",
            summary: "তৃতীয় স্তরের সতর্কতা: অগঠনমূলক সম্পাদনা",
          },
        },
        "uw-test": {
          level1: {
            label: "পরীক্ষামূলক সম্পাদনা",
            summary: "সাধারণ বিজ্ঞপ্তি: পরীক্ষামূলক সম্পাদনা",
          },
          level2: {
            label: "পরীক্ষামূলক সম্পাদনা",
            summary: "দ্বিতীয় স্তরের সতর্কতা: পরীক্ষামূলক সম্পাদনা",
          },
          level3: {
            label: "পরীক্ষামূলক সম্পাদনা",
            summary: "তৃতীয় স্তরের সতর্কতা: পরীক্ষামূলক সম্পাদনা",
          },
        },
        "uw-delete": {
          level1: {
            label: "পাতার বিষয়বস্তু অপসারণ বা খালি করা",
            summary: "সাধারণ বিজ্ঞপ্তি: পাতার বিষয়বস্তু অপসারণ বা খালি করা",
          },
          level2: {
            label: "পাতার বিষয়বস্তু অপসারণ বা খালি করা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: পাতার বিষয়বস্তু অপসারণ বা খালি করা",
          },
          level3: {
            label: "পাতার বিষয়বস্তু অপসারণ বা খালি করা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: পাতার বিষয়বস্তু অপসারণ বা খালি করা",
          },
          level4: {
            label: "পাতার বিষয়বস্তু অপসারণ বা খালি করা",
            summary: "সর্বশেষ সতর্কতা: পাতার বিষয়বস্তু অপসারণ বা খালি করা",
          },
          level4im: {
            label: "পাতার বিষয়বস্তু অপসারণ বা খালি করা",
            summary: "একমাত্র সতর্কতা: পাতার বিষয়বস্তু অপসারণ বা খালি করা",
          },
        },
        "uw-generic": {
          level4: {
            label:
              "জেনেরিক সতর্কতা (৪র্থ স্তরের অনুপস্থিত টেমপ্লেট সিরিজের জন্য)",
            summary: "সর্বশেষ সতর্কতা বিজ্ঞপ্তি",
          },
        },
      },
      "Behavior in articles": {
        "uw-biog": {
          level1: {
            label:
              "জীবিত ব্যক্তিদের সম্পর্কে তথ্যসূত্রবিহীন বিতর্কিত তথ্য যোগ করা",
            summary:
              "সাধারণ বিজ্ঞপ্তি: জীবিত ব্যক্তিদের সম্পর্কে তথ্যসূত্রবিহীন বিতর্কিত তথ্য যোগ করা",
          },
          level2: {
            label:
              "জীবিত ব্যক্তিদের সম্পর্কে তথ্যসূত্রবিহীন বিতর্কিত তথ্য যোগ করা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: জীবিত ব্যক্তিদের সম্পর্কে তথ্যসূত্রবিহীন বিতর্কিত তথ্য যোগ করা",
          },
          level3: {
            label:
              "জীবিত ব্যক্তিদের সম্পর্কে তথ্যসূত্রবিহীন বিতর্কিত/মানহানীকর তথ্য যোগ করা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: জীবিত ব্যক্তিদের সম্পর্কে তথ্যসূত্রবিহীন বিতর্কিত তথ্য যোগ করা",
          },
          level4: {
            label:
              "জীবিত ব্যক্তিদের সম্পর্কে তথ্যসূত্র বিহীন মানহানিকর তথ্য যোগ করা",
            summary:
              "সর্বশেষ সতর্কতা: জীবিত ব্যক্তিদের সম্পর্কে তথ্যসূত্রবিহীন বিতর্কিত তথ্য যোগ করা",
          },
          level4im: {
            label:
              "জীবিত ব্যক্তিদের সম্পর্কে তথ্যসূত্র বিহীন মানহানিকর তথ্য যোগ করা",
            summary:
              "একমাত্র সতর্কতা: জীবিত ব্যক্তিদের সম্পর্কে তথ্যসূত্রবিহীন বিতর্কিত তথ্য যোগ করা",
          },
        },
        "uw-defamatory": {
          level1: {
            label: "মানহানিকর বিষয়বস্তুর সংযোজন",
            summary: "সাধারণ বিজ্ঞপ্তি: মানহানিকর বিষয়বস্তুর সংযোজন",
          },
          level2: {
            label: "মানহানিকর বিষয়বস্তুর সংযোজন",
            summary: "দ্বিতীয় স্তরের সতর্কতা: মানহানিকর বিষয়বস্তুর সংযোজন",
          },
          level3: {
            label: "মানহানিকর বিষয়বস্তুর সংযোজন",
            summary: "তৃতীয় স্তরের সতর্কতা: মানহানিকর বিষয়বস্তুর সংযোজন",
          },
          level4: {
            label: "মানহানিকর বিষয়বস্তুর সংযোজন",
            summary: "সর্বশেষ সতর্কতা: মানহানিকর বিষয়বস্তুর সংযোজন",
          },
          level4im: {
            label: "মানহানিকর বিষয়বস্তুর সংযোজন",
            summary: "একমাত্র সতর্কতা: মানহানিকর বিষয়বস্তুর সংযোজন",
          },
        },
        "uw-error": {
          level1: {
            label: "ইচ্ছাকৃত বাস্তবভিত্তিক ত্রুটি যোগ করা",
            summary: "সাধারণ বিজ্ঞপ্তি: ইচ্ছাকৃত বাস্তবভিত্তিক ত্রুটি যোগ",
          },
          level2: {
            label: "ইচ্ছাকৃত বাস্তবভিত্তিক ত্রুটি যোগ করা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: ইচ্ছাকৃত বাস্তবভিত্তিক ত্রুটি যোগ",
          },
          level3: {
            label: "ইচ্ছাকৃত বাস্তবভিত্তিক ত্রুটি যোগ করা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: ইচ্ছাকৃত বাস্তবভিত্তিক ত্রুটি যোগ করা",
          },
          level4: {
            label: "ইচ্ছাকৃত বাস্তবভিত্তিক ত্রুটি যোগ করা",
            summary: "সর্বশেষ সতর্কতা: ইচ্ছাকৃত বাস্তবভিত্তিক ত্রুটি যোগ করা",
          },
        },
        "uw-genre": {
          level1: {
            label: "ঐকমত্য বা তথ্যসূত্র ছাড়া ঘরানার ঘন ঘন বা গণ পরিবর্তন",
            summary:
              "সাধারণ বিজ্ঞপ্তি: ঐকমত্য বা তথ্যসূত্র ছাড়া ঘরানার ঘন ঘন বা গণ পরিবর্তন",
          },
          level2: {
            label: "ঐকমত্য বা তথ্যসূত্র ছাড়া ঘরানার ঘন ঘন বা গণ পরিবর্তন",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: ঐকমত্য বা তথ্যসূত্র ছাড়া ঘরানার ঘন ঘন বা গণ পরিবর্তন",
          },
          level3: {
            label: "ঐকমত্য বা তথ্যসূত্র ছাড়া ঘরানার ঘন ঘন বা গণ পরিবর্তন",
            summary:
              "তৃতীয় স্তরের সতর্কতা: ঐকমত্য বা তথ্যসূত্র ছাড়া ঘরানার ঘন ঘন বা গণ পরিবর্তন",
          },
          level4: {
            label: "ঐকমত্য বা তথ্যসূত্র ছাড়া ঘরানার ঘন ঘন বা গণ পরিবর্তন",
            summary:
              "সর্বশেষ সতর্কতা: ঐকমত্য বা তথ্যসূত্র ছাড়া ঘরানার ঘন ঘন বা গণ পরিবর্তন",
          },
        },
        "uw-image": {
          level1: {
            label: "নিবন্ধে চিত্র-সংক্রান্ত ধ্বংসাত্মক সম্পাদনা",
            summary:
              "সাধারণ বিজ্ঞপ্তি: নিবন্ধে চিত্র-সংক্রান্ত ধ্বংসাত্মক সম্পাদনা",
          },
          level2: {
            label: "নিবন্ধে চিত্র-সংক্রান্ত ধ্বংসাত্মক সম্পাদনা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: নিবন্ধে চিত্র-সংক্রান্ত ধ্বংসাত্মক সম্পাদনা",
          },
          level3: {
            label: "নিবন্ধে চিত্র-সংক্রান্ত ধ্বংসাত্মক সম্পাদনা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: নিবন্ধে চিত্র-সংক্রান্ত ধ্বংসাত্মক সম্পাদনা",
          },
          level4: {
            label: "নিবন্ধে চিত্র-সংক্রান্ত ধ্বংসাত্মক সম্পাদনা",
            summary:
              "সর্বশেষ সতর্কতা: নিবন্ধে চিত্র-সংক্রান্ত ধ্বংসাত্মক সম্পাদনা",
          },
          level4im: {
            label: "চিত্র-সংক্রান্ত ধ্বংসপ্রবণতা",
            summary: "একমাত্র সতর্কতা: চিত্র-সংক্রান্ত ধ্বংসাত্মক সম্পাদনা",
          },
        },
        "uw-joke": {
          level1: {
            label: "নিবন্ধে অনুপযুক্ত হাস্যরস ব্যবহার করা",
            summary: "সাধারণ বিজ্ঞপ্তি: নিবন্ধে অনুপযুক্ত হাস্যরস ব্যবহার করা",
          },
          level2: {
            label: "নিবন্ধে অনুপযুক্ত হাস্যরস ব্যবহার করা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: নিবন্ধে অনুপযুক্ত হাস্যরস ব্যবহার করা",
          },
          level3: {
            label: "নিবন্ধে অনুপযুক্ত হাস্যরস ব্যবহার করা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: নিবন্ধে অনুপযুক্ত হাস্যরস ব্যবহার করা",
          },
          level4: {
            label: "নিবন্ধে অনুপযুক্ত হাস্যরস ব্যবহার করা",
            summary: "সর্বশেষ সতর্কতা: নিবন্ধে অনুপযুক্ত হাস্যরস ব্যবহার করা",
          },
          level4im: {
            label: "অনুপযুক্ত হাস্যরস ব্যবহার",
            summary: "একমাত্র সতর্কতা: অনুপযুক্ত হাস্যরস ব্যবহার",
          },
        },
        "uw-nor": {
          level1: {
            label: "উৎসের অপ্রকাশিত বিশ্লেষণ সহ ব্যক্তিগত গবেষণা যোগ করা",
            summary:
              "সাধারণ বিজ্ঞপ্তি: উৎসের অপ্রকাশিত বিশ্লেষণ সহ ব্যক্তিগত গবেষণা যোগ করা",
          },
          level2: {
            label: "উৎসের অপ্রকাশিত বিশ্লেষণ সহ ব্যক্তিগত গবেষণা যোগ করা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: উৎসের অপ্রকাশিত বিশ্লেষণ সহ ব্যক্তিগত গবেষণা যোগ করা",
          },
          level3: {
            label: "উৎসের অপ্রকাশিত বিশ্লেষণ সহ ব্যক্তিগত গবেষণা যোগ করা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: উৎসের অপ্রকাশিত বিশ্লেষণ সহ ব্যক্তিগত গবেষণা যোগ করা",
          },
          level4: {
            label: "উৎসের অপ্রকাশিত বিশ্লেষণ সহ ব্যক্তিগত গবেষণা যোগ করা",
            summary:
              "সর্বশেষ সতর্কতা: উৎসের অপ্রকাশিত বিশ্লেষণ সহ ব্যক্তিগত গবেষণা যোগ করা",
          },
        },
        "uw-notcensored": {
          level1: {
            label: "উপাদান সেন্সরশিপ",
            summary: "সাধারণ বিজ্ঞপ্তি: উপাদান সেন্সরশিপ",
          },
          level2: {
            label: "উপাদান সেন্সরশিপ",
            summary: "দ্বিতীয় স্তরের সতর্কতা: উপাদান সেন্সরশিপ",
          },
          level3: {
            label: "উপাদান সেন্সরশিপ",
            summary: "তৃতীয় স্তরের সতর্কতা: উপাদান সেন্সরশিপ",
          },
        },
        "uw-own": {
          level1: {
            label: "নিবন্ধের মালিকানা",
            summary: "সাধারণ বিজ্ঞপ্তি: নিবন্ধের মালিকানা",
          },
          level2: {
            label: "নিবন্ধের মালিকানা",
            summary: "দ্বিতীয় স্তরের সতর্কতা: নিবন্ধের মালিকানা",
          },
          level3: {
            label: "নিবন্ধের মালিকানা",
            summary: "তৃতীয় স্তরের সতর্কতা: নিবন্ধের মালিকানা",
          },
          level4: {
            label: "নিবন্ধের মালিকানা",
            summary: "সর্বশেষ সতর্কতা: নিবন্ধের মালিকানা",
          },
          level4im: {
            label: "নিবন্ধের মালিকানা",
            summary: "একমাত্র সতর্কতা: নিবন্ধের মালিকানা",
          },
        },
        "uw-subtle": {
          level1: {
            label: "সূক্ষ্ম ধ্বংপ্রবণতা",
            summary: "সাধারণ বিজ্ঞপ্তি: সম্ভবত অগঠনমূলক সম্পাদনা",
          },
          level2: {
            label: "সূক্ষ্ম ধ্বংপ্রবণতা",
            summary: "দ্বিতীয় স্তরের সতর্কতা: সম্ভাব্য অগঠনমূলক সম্পাদনা",
          },
          level3: {
            label: "সূক্ষ্ম ধ্বংপ্রবণতা",
            summary: "তৃতীয় স্তরের সতর্কতা: সূক্ষ্ম ধ্বংপ্রবণতা",
          },
          level4: {
            label: "সূক্ষ্ম ধ্বংপ্রবণতা",
            summary: "সর্বশেষ সতর্কতা: সূক্ষ্ম ধ্বংপ্রবণতা",
          },
        },
        "uw-tdel": {
          level1: {
            label: "রক্ষণাবেক্ষণ টেমপ্লেট অপসারণ",
            summary: "সাধারণ বিজ্ঞপ্তি: রক্ষণাবেক্ষণ টেমপ্লেট অপসারণ",
          },
          level2: {
            label: "রক্ষণাবেক্ষণ টেমপ্লেট অপসারণ",
            summary: "দ্বিতীয় স্তরের সতর্কতা: রক্ষণাবেক্ষণ টেমপ্লেট অপসারণ",
          },
          level3: {
            label: "রক্ষণাবেক্ষণ টেমপ্লেট অপসারণ",
            summary: "তৃতীয় স্তরের সতর্কতা: রক্ষণাবেক্ষণ টেমপ্লেট অপসারণ",
          },
          level4: {
            label: "রক্ষণাবেক্ষণ টেমপ্লেট অপসারণ",
            summary: "সর্বশেষ সতর্কতা: রক্ষণাবেক্ষণ টেমপ্লেট অপসারণ",
          },
        },
        "uw-unsourced": {
          level1: {
            label: "তথ্যসূত্র বিহীন বা অনুপযুক্ত উদ্ধৃতি সহ উপাদান যোগ করা",
            summary:
              "সাধারণ বিজ্ঞপ্তি: তথ্যসূত্র বিহীন বা অনুপযুক্ত উদ্ধৃতি সহ উপাদান যোগ করা",
          },
          level2: {
            label: "তথ্যসূত্র বিহীন বা অনুপযুক্ত উদ্ধৃতি সহ উপাদান যোগ করা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: তথ্যসূত্র বিহীন বা অনুপযুক্ত উদ্ধৃতি সহ উপাদান যোগ করা",
          },
          level3: {
            label: "তথ্যসূত্র বিহীন বা অনুপযুক্ত উদ্ধৃতি সহ উপাদান যোগ করা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: তথ্যসূত্র বিহীন বা অনুপযুক্ত উদ্ধৃতি সহ উপাদান যোগ করা",
          },
          level4: {
            label: "তথ্যসূত্র বিহীন বা অনুপযুক্ত উদ্ধৃতি সহ উপাদান যোগ করা",
            summary:
              "সর্বশেষ সতর্কতা: তথ্যসূত্র বিহীন বা অনুপযুক্ত উদ্ধৃতি সহ উপাদান যোগ করা",
          },
        },
      },
      "প্রচারণা ও স্প্যাম": {
        "uw-advert": {
          level1: {
            label: "বিজ্ঞাপন বা প্রচারনার উদ্দেশ্যে উইকিপিডিয়া ব্যবহার করা",
            summary:
              "সাধারণ বিজ্ঞপ্তি: বিজ্ঞাপন বা প্রচারনার উদ্দেশ্যে উইকিপিডিয়া ব্যবহার করা",
          },
          level2: {
            label: "বিজ্ঞাপন বা প্রচারনার উদ্দেশ্যে উইকিপিডিয়া ব্যবহার করা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: বিজ্ঞাপন বা প্রচারনার উদ্দেশ্যে উইকিপিডিয়া ব্যবহার করা",
          },
          level3: {
            label: "বিজ্ঞাপন বা প্রচারনার উদ্দেশ্যে উইকিপিডিয়া ব্যবহার করা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: বিজ্ঞাপন বা প্রচারনার উদ্দেশ্যে উইকিপিডিয়া ব্যবহার করা",
          },
          level4: {
            label: "বিজ্ঞাপন বা প্রচারনার উদ্দেশ্যে উইকিপিডিয়া ব্যবহার করা",
            summary:
              "সর্বশেষ সতর্কতা: বিজ্ঞাপন বা প্রচারনার উদ্দেশ্যে উইকিপিডিয়া ব্যবহার করা",
          },
          level4im: {
            label: "বিজ্ঞাপন বা প্রচারনার উদ্দেশ্যে উইকিপিডিয়া ব্যবহার করা",
            summary:
              "একমাত্র সতর্কতা: বিজ্ঞাপন বা প্রচারনার উদ্দেশ্যে উইকিপিডিয়া ব্যবহার করা",
          },
        },
        "uw-npov": {
          level1: {
            label: "নিরপেক্ষ দৃষ্টিভঙ্গি মেনে চলে না",
            summary: "সাধারণ বিজ্ঞপ্তি: নিরপেক্ষ দৃষ্টিভঙ্গি মেনে চলে না",
          },
          level2: {
            label: "নিরপেক্ষ দৃষ্টিভঙ্গি মেনে চলে না",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: নিরপেক্ষ দৃষ্টিভঙ্গি মেনে চলে না",
          },
          level3: {
            label: "নিরপেক্ষ দৃষ্টিভঙ্গি মেনে চলে না",
            summary: "তৃতীয় স্তরের সতর্কতা: নিরপেক্ষ দৃষ্টিভঙ্গি মেনে চলে না",
          },
          level4: {
            label: "নিরপেক্ষ দৃষ্টিভঙ্গি মেনে চলে না",
            summary: "সর্বশেষ সতর্কতা: নিরপেক্ষ দৃষ্টিভঙ্গি মেনে চলে না",
          },
        },
        "uw-paid": {
          level1: {
            label:
              "উইকিমিডিয়া ব্যবহারের শর্তাবলীর অধীনে পূর্ব ঘোষণা ছাড়াই অর্থের বিনিময়ে সম্পাদনা",
            summary:
              "সাধারণ বিজ্ঞপ্তি: উইকিমিডিয়া ব্যবহারের শর্তাবলীর অধীনে পূর্ব ঘোষণা ছাড়াই অর্থের বিনিময়ে সম্পাদনা",
          },
          level2: {
            label:
              "উইকিমিডিয়া ব্যবহারের শর্তাবলীর অধীনে পূর্ব ঘোষণা ছাড়াই অর্থের বিনিময়ে সম্পাদনা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: উইকিমিডিয়া ব্যবহারের শর্তাবলীর অধীনে পূর্ব ঘোষণা ছাড়াই অর্থের বিনিময়ে সম্পাদনা",
          },
          level3: {
            label:
              "উইকিমিডিয়া ব্যবহারের শর্তাবলীর অধীনে পূর্ব ঘোষণা ছাড়াই অর্থের বিনিময়ে সম্পাদনা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: উইকিমিডিয়া ব্যবহারের শর্তাবলীর অধীনে পূর্ব ঘোষণা ছাড়াই অর্থের বিনিময়ে সম্পাদনা",
          },
          level4: {
            label:
              "উইকিমিডিয়া ব্যবহারের শর্তাবলীর অধীনে পূর্ব ঘোষণা ছাড়াই অর্থের বিনিময়ে সম্পাদনা",
            summary:
              "সর্বশেষ সতর্কতা: উইকিমিডিয়া ব্যবহারের শর্তাবলীর অধীনে পূর্ব ঘোষণা ছাড়াই অর্থের বিনিময়ে সম্পাদনা",
          },
        },
        "uw-spam": {
          level1: {
            label: "অনুপযুক্ত বহিঃসংযোগ যোগ করা",
            summary: "সাধারণ বিজ্ঞপ্তি: অনুপযুক্ত বহিঃসংযোগ যোগ করা",
          },
          level2: {
            label: "স্প্যাম লিংক সংযোজন",
            summary: "দ্বিতীয় স্তরের সতর্কতা: স্প্যাম লিংক সংযোজন",
          },
          level3: {
            label: "স্প্যাম লিংক সংযোজন",
            summary: "তৃতীয় স্তরের সতর্কতা: স্প্যাম লিংক সংযোজন",
          },
          level4: {
            label: "স্প্যাম লিংক সংযোজন",
            summary: "সর্বশেষ সতর্কতা: স্প্যাম লিংক সংযোজন",
          },
          level4im: {
            label: "স্প্যাম লিংক সংযোজন",
            summary: "একমাত্র সতর্কতা: স্প্যাম লিংক সংযোজন",
          },
        },
      },
      "অন্য ব্যবহারকারীর প্রতি আচরণ": {
        "uw-agf": {
          level1: {
            label: "অন্য ব্যবহারকারীর উপর আস্থা না রাখা",
            summary: "সাধারণ বিজ্ঞপ্তি: অন্য ব্যবহারকারীর উপর আস্থা না রাখা",
          },
          level2: {
            label: "অন্য ব্যবহারকারীর উপর আস্থা না রাখা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: অন্য ব্যবহারকারীর উপর আস্থা না রাখা",
          },
          level3: {
            label: "অন্য ব্যবহারকারীর উপর আস্থা না রাখা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: অন্য ব্যবহারকারীর উপর আস্থা না রাখা",
          },
        },
        "uw-harass": {
          level1: {
            label: "অন্য ব্যবহারকারীদের হয়রানি",
            summary: "সাধারণ বিজ্ঞপ্তি: অন্য ব্যবহারকারীদের হয়রানি",
          },
          level2: {
            label: "অন্য ব্যবহারকারীদের হয়রানি",
            summary: "দ্বিতীয় স্তরের সতর্কতা: অন্য ব্যবহারকারীদের হয়রানি",
          },
          level3: {
            label: "অন্য ব্যবহারকারীদের হয়রানি",
            summary: "তৃতীয় স্তরের সতর্কতা: অন্য ব্যবহারকারীদের হয়রানি",
          },
          level4: {
            label: "অন্য ব্যবহারকারীদের হয়রানি",
            summary: "সর্বশেষ সতর্কতা: অন্য ব্যবহারকারীদের হয়রানি",
          },
          level4im: {
            label: "অন্য ব্যবহারকারীদের হয়রানি",
            summary: "একমাত্র সতর্কতা: অন্য ব্যবহারকারীদের হয়রানি",
          },
        },
        "uw-npa": {
          level1: {
            label: "একজন নির্দিষ্ট সম্পাদককে লক্ষ্য করে ব্যক্তিগত আক্রমণ",
            summary:
              "সাধারণ বিজ্ঞপ্তি: একজন নির্দিষ্ট সম্পাদককে লক্ষ্য করে ব্যক্তিগত আক্রমণ",
          },
          level2: {
            label: "একজন নির্দিষ্ট সম্পাদককে লক্ষ্য করে ব্যক্তিগত আক্রমণ",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: একজন নির্দিষ্ট সম্পাদককে লক্ষ্য করে ব্যক্তিগত আক্রমণ",
          },
          level3: {
            label: "একজন নির্দিষ্ট সম্পাদককে লক্ষ্য করে ব্যক্তিগত আক্রমণ",
            summary:
              "তৃতীয় স্তরের সতর্কতা: একজন নির্দিষ্ট সম্পাদককে লক্ষ্য করে ব্যক্তিগত আক্রমণ",
          },
          level4: {
            label: "একজন নির্দিষ্ট সম্পাদককে লক্ষ্য করে ব্যক্তিগত আক্রমণ",
            summary:
              "সর্বশেষ সতর্কতা: একজন নির্দিষ্ট সম্পাদককে লক্ষ্য করে ব্যক্তিগত আক্রমণ",
          },
          level4im: {
            label: "একজন নির্দিষ্ট সম্পাদককে লক্ষ্য করে ব্যক্তিগত আক্রমণ",
            summary:
              "একমাত্র সতর্কতা: একজন নির্দিষ্ট সম্পাদককে লক্ষ্য করে ব্যক্তিগত আক্রমণ",
          },
        },
        "uw-tempabuse": {
          level1: {
            label: "সতর্কতা ও বাধা দান টেমপ্লেটের অনুপযুক্ত ব্যবহার",
            summary:
              "সাধারণ বিজ্ঞপ্তি: সতর্কতা ও বাধা দান টেমপ্লেটের অনুপযুক্ত ব্যবহার",
          },
          level2: {
            label: "সতর্কতা ও বাধা দান টেমপ্লেটের অনুপযুক্ত ব্যবহার",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: সতর্কতা ও বাধা দান টেমপ্লেটের অনুপযুক্ত ব্যবহার",
          },
        },
      },
      "অপসারণ ট্যাগ অপসারণ": {
        "uw-afd": {
          level1: {
            label: "{{নিবন্ধ অপসারণের প্রস্তাবনা}} টেমপ্লেট অপসারণ",
            summary:
              "সাধারণ বিজ্ঞপ্তি: {{নিবন্ধ অপসারণের প্রস্তাবনা}} টেমপ্লেট অপসারণ",
          },
          level2: {
            label: "{{নিবন্ধ অপসারণের প্রস্তাবনা}} টেমপ্লেট অপসারণ",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: {{নিবন্ধ অপসারণের প্রস্তাবনা}} টেমপ্লেট অপসারণ",
          },
          level3: {
            label: "{{নিবন্ধ অপসারণের প্রস্তাবনা}} টেমপ্লেট অপসারণ",
            summary:
              "তৃতীয় স্তরের সতর্কতা: {{নিবন্ধ অপসারণের প্রস্তাবনা}} টেমপ্লেট অপসারণ",
          },
          level4: {
            label: "{{নিবন্ধ অপসারণের প্রস্তাবনা}} টেমপ্লেট অপসারণ",
            summary:
              "সর্বশেষ সতর্কতা: {{নিবন্ধ অপসারণের প্রস্তাবনা}} টেমপ্লেট অপসারণ",
          },
        },
        "uw-blpprod": {
          level1: {
            label: "{{Prod blp}} টেমপ্লেট অপসারণ",
            summary: "সাধারণ বিজ্ঞপ্তি: {{Prod blp}} টেমপ্লেট অপসারণ",
          },
          level2: {
            label: "{{Prod blp}} টেমপ্লেট অপসারণ",
            summary: "দ্বিতীয় স্তরের সতর্কতা: {{Prod blp}} টেমপ্লেট অপসারণ",
          },
          level3: {
            label: "{{Prod blp}} টেমপ্লেট অপসারণ",
            summary: "তৃতীয় স্তরের সতর্কতা: {{Prod blp}} টেমপ্লেট অপসারণ",
          },
          level4: {
            label: "{{Prod blp}} টেমপ্লেট অপসারণ",
            summary: "সর্বশেষ সতর্কতা: {{Prod blp}} টেমপ্লেট অপসারণ",
          },
        },
        "uw-idt": {
          level1: {
            label: "ফাইল অপসারন ট্যাগ অপসারণ",
            summary: "সাধারণ বিজ্ঞপ্তি: ফাইল অপসারন ট্যাগ অপসারণ",
          },
          level2: {
            label: "ফাইল অপসারন ট্যাগ অপসারণ",
            summary: "দ্বিতীয় স্তরের সতর্কতা: ফাইল অপসারন ট্যাগ অপসারণ",
          },
          level3: {
            label: "ফাইল অপসারন ট্যাগ অপসারণ",
            summary: "তৃতীয় স্তরের সতর্কতা: ফাইল অপসারন ট্যাগ অপসারণ",
          },
          level4: {
            label: "ফাইল অপসারন ট্যাগ অপসারণ",
            summary: "সর্বশেষ সতর্কতা: ফাইল অপসারন ট্যাগ অপসারণ",
          },
        },
			'uw-tfd': {
				level1: {
					label: 'টেমপ্লেট অপসারন ট্যাগ অপসারণ',
					summary: 'সাধারণ বিজ্ঞপ্তি: টেমপ্লেট অপসারন ট্যাগ অপসারণ'
				},
				level2: {
					label: 'টেমপ্লেট অপসারন ট্যাগ অপসারণ',
					summary: 'দ্বিতীয় স্তরের সতর্কতা: টেমপ্লেট অপসারন ট্যাগ অপসারণ'
				},
				level3: {
					label: 'টেমপ্লেট অপসারন ট্যাগ অপসারণ',
					summary: 'তৃতীয় স্তরের সতর্কতা: টেমপ্লেট অপসারন ট্যাগ অপসারণ'
				},
				level4: {
					label: 'টেমপ্লেট অপসারন ট্যাগ অপসারণ',
					summary: 'সর্বশেষ সতর্কতা: টেমপ্লেট অপসারন ট্যাগ অপসারণ'
          },
        },
        "uw-speedy": {
          level1: {
            label: "দ্রুত অপসারণ ট্যাগ অপসারণ",
            summary: "সাধারণ বিজ্ঞপ্তি: দ্রুত অপসারণ ট্যাগ অপসারণ",
          },
          level2: {
            label: "দ্রুত অপসারণ ট্যাগ অপসারণ",
            summary: "দ্বিতীয় স্তরের সতর্কতা: দ্রুত অপসারণ ট্যাগ অপসারণ",
          },
          level3: {
            label: "দ্রুত অপসারণ ট্যাগ অপসারণ",
            summary: "তৃতীয় স্তরের সতর্কতা: দ্রুত অপসারণ ট্যাগ অপসারণ",
          },
          level4: {
            label: "দ্রুত অপসারণ ট্যাগ অপসারণ",
            summary: "সর্বশেষ সতর্কতা: দ্রুত অপসারণ ট্যাগ অপসারণ",
          },
        },
      },
      Other: {
        "uw-attempt": {
          level1: {
            label: "সম্পাদনা ছাঁকনি ট্রিগার করা",
            summary: "সাধারণ বিজ্ঞপ্তি: সম্পাদনা ছাঁকনি ট্রিগার করা",
          },
          level2: {
            label: "সম্পাদনা ছাঁকনি ট্রিগার করা",
            summary: "দ্বিতীয় স্তরের সতর্কতা: সম্পাদনা ছাঁকনি ট্রিগার করা",
          },
          level3: {
            label: "সম্পাদনা ছাঁকনি ট্রিগার করা",
            summary: "তৃতীয় স্তরের সতর্কতা: সম্পাদনা ছাঁকনি ট্রিগার করা",
          },
          level4: {
            label: "সম্পাদনা ছাঁকনি ট্রিগার করা",
            summary: "সর্বশেষ সতর্কতা: সম্পাদনা ছাঁকনি ট্রিগার করা",
          },
          level4im: {
            label: "সম্পাদনা ছাঁকনি ট্রিগার করা",
            summary: "শুধুমাত্র সতর্কতা: সম্পাদনা ছাঁকনি ট্রিগার করা",
          },
        },
        "uw-chat": {
          level1: {
            label: "আলাপ পাতাকে ফোরাম হিসেবে ব্যবহার",
            summary: "সাধারণ বিজ্ঞপ্তি: আলাপ পাতাকে ফোরাম হিসেবে ব্যবহার",
          },
          level2: {
            label: "আলাপ পাতাকে ফোরাম হিসেবে ব্যবহার",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: আলাপ পাতাকে ফোরাম হিসেবে ব্যবহার",
          },
          level3: {
            label: "আলাপ পাতাকে ফোরাম হিসেবে ব্যবহার",
            summary: "তৃতীয় স্তরের সতর্কতা: আলাপ পাতাকে ফোরাম হিসেবে ব্যবহার",
          },
          level4: {
            label: "আলাপ পাতাকে ফোরাম হিসেবে ব্যবহার",
            summary: "সর্বশেষ সতর্কতা: আলাপ পাতাকে ফোরাম হিসেবে ব্যবহার",
          },
        },
        "uw-create": {
          level1: {
            label: "অনুপযুক্ত পাতা তৈরি",
            summary: "সাধারণ বিজ্ঞপ্তি: অনুপযুক্ত পাতা তৈরি",
          },
          level2: {
            label: "অনুপযুক্ত পাতা তৈরি",
            summary: "দ্বিতীয় স্তরের সতর্কতা: অনুপযুক্ত পাতা তৈরি",
          },
          level3: {
            label: "অনুপযুক্ত পাতা তৈরি",
            summary: "তৃতীয় স্তরের সতর্কতা: অনুপযুক্ত পাতা তৈরি",
          },
          level4: {
            label: "অনুপযুক্ত পাতা তৈরি",
            summary: "সর্বশেষ সতর্কতা: অনুপযুক্ত পাতা তৈরি",
          },
          level4im: {
            label: "অনুপযুক্ত পাতা তৈরি",
            summary: "একমাত্র সতর্কতা: অনুপযুক্ত পাতা তৈরি",
          },
        },
        "uw-mos": {
          level1: {
            label: "রচনাশৈলী",
            summary:
              "সাধারণ বিজ্ঞপ্তি: ফরম্যাটিং, তারিখ, ভাষা ইত্যাদি (রচনাশৈলী)",
          },
          level2: {
            label: "রচনাশৈলী",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: ফরম্যাটিং, তারিখ, ভাষা ইত্যাদি (রচনাশৈলী)",
          },
          level3: {
            label: "রচনাশৈলী",
            summary:
              "তৃতীয় স্তরের সতর্কতা: ফরম্যাটিং, তারিখ, ভাষা ইত্যাদি (রচনাশৈলী)",
          },
          level4: {
            label: "রচনাশৈলী",
            summary:
              "সর্বশেষ সতর্কতা: ফরম্যাটিং, তারিখ, ভাষা ইত্যাদি (রচনাশৈলী)",
          },
        },
        "uw-move": {
          level1: {
            label: "নামকরণ রীতি বা ঐকমত্যের বিরুদ্ধে পাতা স্থানান্তর",
            summary:
              "সাধারণ বিজ্ঞপ্তি: নামকরণ রীতি বা ঐকমত্যের বিরুদ্ধে পাতা স্থানান্তর",
          },
          level2: {
            label: "নামকরণ রীতি বা ঐকমত্যের বিরুদ্ধে পাতা স্থানান্তর",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: নামকরণ রীতি বা ঐকমত্যের বিরুদ্ধে পাতা স্থানান্তর",
          },
          level3: {
            label: "নামকরণ রীতি বা ঐকমত্যের বিরুদ্ধে পাতা স্থানান্তর",
            summary:
              "তৃতীয় স্তরের সতর্কতা: নামকরণ রীতি বা ঐকমত্যের বিরুদ্ধে পাতা স্থানান্তর",
          },
          level4: {
            label: "নামকরণ রীতি বা ঐকমত্যের বিরুদ্ধে পাতা স্থানান্তর",
            summary:
              "সর্বশেষ সতর্কতা: নামকরণ রীতি বা ঐকমত্যের বিরুদ্ধে পাতা স্থানান্তর",
          },
          level4im: {
            label: "নামকরণ রীতি বা ঐকমত্যের বিরুদ্ধে পাতা স্থানান্তর",
            summary:
              "একমাত্র সতর্কতা: নামকরণ রীতি বা ঐকমত্যের বিরুদ্ধে পাতা স্থানান্তর",
          },
        },
        "uw-tpv": {
          level1: {
            label: "অন্যদের আলাপ পাতার মন্তব্যসমূহের পুনর্বিন্যস করা", //Refactoring others' talk page comments
            summary:
              "সাধারণ বিজ্ঞপ্তি: অন্যদের আলাপ পাতার মন্তব্যসমূহের পুনর্বিন্যস করা",
          },
          level2: {
            label: "অন্যদের আলাপ পাতার মন্তব্যসমূহের পুনর্বিন্যস করা",
            summary:
              "দ্বিতীয় স্তরের সতর্কতা: অন্যদের আলাপ পাতার মন্তব্যসমূহের পুনর্বিন্যস করা",
          },
          level3: {
            label: "অন্যদের আলাপ পাতার মন্তব্যসমূহের পুনর্বিন্যস করা",
            summary:
              "তৃতীয় স্তরের সতর্কতা: অন্যদের আলাপ পাতার মন্তব্যসমূহের পুনর্বিন্যস করা",
          },
          level4: {
            label: "অন্যদের আলাপ পাতার মন্তব্যসমূহের পুনর্বিন্যস করা",
            summary:
              "সর্বশেষ সতর্কতা: অন্যদের আলাপ পাতার মন্তব্যসমূহের পুনর্বিন্যস করা",
          },
          level4im: {
            label: "অন্যদের আলাপ পাতার মন্তব্যসমূহের পুনর্বিন্যস করা",
            summary:
              "একমাত্র সতর্কতা: অন্যদের আলাপ পাতার মন্তব্যসমূহের পুনর্বিন্যস করা",
          },
        },
        "uw-upload": {
          level1: {
            label: "অবিশ্বকোষীয় চিত্র আপলোড",
            summary: "সাধারণ বিজ্ঞপ্তি: অবিশ্বকোষীয় চিত্র আপলোড",
          },
          level2: {
            label: "অবিশ্বকোষীয় চিত্র আপলোড",
            summary: "দ্বিতীয় স্তরের সতর্কতা: অবিশ্বকোষীয় চিত্র আপলোড",
          },
          level3: {
            label: "অবিশ্বকোষীয় চিত্র আপলোড",
            summary: "তৃতীয় স্তরের সতর্কতা: অবিশ্বকোষীয় চিত্র আপলোড",
          },
          level4: {
            label: "অবিশ্বকোষীয় চিত্র আপলোড",
            summary: "সর্বশেষ সতর্কতা: অবিশ্বকোষীয় চিত্র আপলোড",
          },
          level4im: {
            label: "অবিশ্বকোষীয় চিত্র আপলোড",
            summary: "একমাত্র সতর্কতা: অবিশ্বকোষীয় চিত্র আপলোড",
          },
        },
      },
    },

    singlenotice: {
      "uw-agf-sock": {
        label: "একাধিক অ্যাকাউন্টের ব্যবহার (আস্থা রেখে)",
        summary: "বিজ্ঞপ্তি: একাধিক অ্যাকাউন্টের ব্যবহার",
      },

      /** 'uw-aiv': {
                label: 'Bad AIV report',
                summary: 'বিজ্ঞপ্তি: Bad AIV report'
            }, **/

      "uw-autobiography": {
        label: "আত্মজীবনী তৈরি",
        summary: "বিজ্ঞপ্তি: আত্মজীবনী তৈরি",
      },
      "uw-badcat": {
        label: "ভুল বিষয়শ্রেণী যোগ",
        summary: "বিজ্ঞপ্তি: ভুল বিষয়শ্রেণী যোগ",
      },
      "বাংলায় সম্পাদনা সারাংশ দিন (টুইংকল)": {
        label: "ইংরেজিতে সম্পাদনা সারাংশ দেওয়া",
        summary: "বিজ্ঞপ্তি: ইংরেজিতে সম্পাদনা সারাংশ দেওয়া",
      },
      "Uw-np": {
        label: "অ-উল্লেখযোগ্য ব্যক্তির নাম যোগ",
        summary: "বিজ্ঞপ্তি: অ-উল্লেখযোগ্য ব্যক্তির নাম যোগ",
      },
      "Uw-patrol": {
       label: "টহলদান নীতিমালা লঙ্ঘন",
       summery: "বিজ্ঞপ্তি: নিবন্ধ তৈরির ৪৮ ঘন্টা পার হওয়ার পূর্বেই রক্ষণাবেক্ষণ ট্যাগ যোগ",
       },
      "uw-badlistentry": {
        label: "তালিকায় অনুপযুক্ত ভুক্তি যোগ",
        summary: "বিজ্ঞপ্তি: তালিকায় অনুপযুক্ত ভুক্তি যোগ",
      },
      "uw-bite": {
        label: 'নবাগতদের "জ্বালাতন"',
        summary: 'বিজ্ঞপ্তি: "নবাগতদের জ্বালাতন',
        suppressArticleInSummary: true, // non-standard (user name, not article), and not necessary
      },
      "uw-coi": {
        label: "স্বার্থের সংঘাত",
        summary: "বিজ্ঞপ্তি: স্বার্থের সংঘাত",
        heading: "একটি স্বার্থের সংঘাত ব্যবস্থাপনা",
      },
      "uw-controversial": {
        label: "বিতর্কিত উপাদান যোগ",
        summary: "বিজ্ঞপ্তি: বিতর্কিত উপাদান যোগ",
      },
      "uw-copying": {
        label: "অন্য পাতায় লেখা অনুলিপি",
        summary: "বিজ্ঞপ্তি: অন্য পাতায় লেখা অনুলিপি",
      },
      "uw-crystal": {
        label: "অনুমাননির্ভর বা অনিশ্চিত তথ্য যোগ করা",
        summary: "বিজ্ঞপ্তি: অনুমাননির্ভর বা অনিশ্চিত তথ্য যোগ করা",
      },
      "uw-c&pmove": {
        label: "অনুলিপি প্রতিলিপি করে পাতা স্থানান্তর",
        summary: "বিজ্ঞপ্তি: অনুলিপি প্রতিলিপি করে পাতা স্থানান্তর",
      },
      "uw-dab": {
        label: "দ্ব্যর্থতা নিরসন পাতায় ভুল সম্পাদনা",
        summary: "বিজ্ঞপ্তি: দ্ব্যর্থতা নিরসন পাতায় ভুল সম্পাদনা",
      },
      "uw-date": {
        label: "অপ্রয়োজনে তারিখের বিন্যাস পরিবর্তন করা",
        summary: "বিজ্ঞপ্তি: অপ্রয়োজনে তারিখের বিন্যাস পরিবর্তন করা",
      },
      "uw-deadlink": {
        label: "অকার্যকর সংযোগ সম্বলিত সঠিক উৎস সরানো",
        summary: "বিজ্ঞপ্তি: অকার্যকর সংযোগ সম্বলিত সঠিক উৎস সরানো",
      },
      "uw-displaytitle": {
        label: "DISPLAYTITLE এর ভুল ব্যবহার",
        summary: "বিজ্ঞপ্তি: DISPLAYTITLE এর ভুল ব্যবহার",
      },
      "uw-draftfirst": {
        label:
          "দ্রুত মুছে ফেলার ঝুঁকি এড়াতে ব্যবহারকারীর ব্যবহারকারী নামস্থানে খসড়া তৈরি করা উচিত",
        summary:
          "বিজ্ঞপ্তি: দয়া করে [[Help:Userspace draft|ব্যবহারকারী নামস্থানে]] খসড়া তৈরি করুন",
      },
      "uw-editsummary": {
        label: "নতুন ব্যবহারকারী সম্পাদনা সারাংশ ব্যবহার করছে না",
        summary: "বিজ্ঞপ্তি: সম্পাদনা সারাংশ ব্যবহার না করা",
      },
      "uw-editsummary2": {
        label: "অভিজ্ঞ ব্যবহারকারী সম্পাদনা সারাংশ ব্যবহার করছে না",
        summary: "বিজ্ঞপ্তি: সম্পাদনা সারাংশ ব্যবহার না করা",
      },
      "uw-elinbody": {
        label: "একটি নিবন্ধের মূল অংশে বহিঃসংযোগ যোগ করা",
        summary:
          "বিজ্ঞপ্তি: বহিঃসংযোগ নিবন্ধের নিচে বহিঃসংযোগ অনুচ্ছেদে যোগ করুন",
      },
      "uw-bangla": {
        label: "বাংলায় যোগাযোগ না করা",
        summary: "বিজ্ঞপ্তি: বাংলায় যোগাযোগ না করা",
      },
      "uw-hasty": {
        label: "তাড়াহুড়ো করে দ্রুত অপসারণ ট্যাগ যোগ",
        summary:
          "বিজ্ঞপ্তি: অপসারণ ট্যাগ যোগ করার আগে প্রণেতাকে নিবন্ধটির মানোন্নয়নের সময় দিন",
      },
      "uw-italicize": {
        label:
          "নিবন্ধের মধ্যে বই, চলচ্চিত্র, অ্যালবাম, ম্যাগাজিন, টিভি সিরিজ ইত্যাদির নাম ইটালিক করুন",
        summary:
          "বিজ্ঞপ্তি: নিবন্ধের মধ্যে বই, চলচ্চিত্র, অ্যালবাম, ম্যাগাজিন, টিভি সিরিজ ইত্যাদির নাম ইটালিক করুন",
      },
      /**'uw-lang': {
                label: 'Unnecessarily changing between British and American English',
                summary: 'বিজ্ঞপ্তি: Unnecessarily changing between British and American English',
                heading: 'National varieties of English'
            }, **/ //দরকার নেই
      "uw-linking": {
        label: "লাল লিংকের অত্যধিক কিংবা বার বার নীল লিংকের ব্যবহার",
        summary:
          "বিজ্ঞপ্তি: লাল লিংকের অত্যধিক কিংবা বার বার নীল লিংকের ব্যবহার",
      },
      "uw-minor": {
        label: "অনুল্লেখ্য সম্পাদনা চেক বক্সের ভুল ব্যবহার",
        summary: "বিজ্ঞপ্তি: অনুল্লেখ্য সম্পাদনা চেক বক্সের ভুল ব্যবহার",
      },
      "uw-notbangla": {
        label: "বাংলা নয় এমন নিবন্ধ তৈরি",
        summary: "বিজ্ঞপ্তি: বাংলা নয় এমন নিবন্ধ তৈরি",
      },
      "uw-notbanglaedit": {
        label: "নিবন্ধে বাংলা নয় এমন বিষয়বস্তু সংযোজন",
        summary: "বিজ্ঞপ্তি: নিবন্ধে বাংলা নয় এমন বিষয়বস্তু সংযোজন",
      },
      "uw-notvote": {
        label: "আমরা ঐকমত্য ব্যবহার করি, ভোট নয়",
        summary: "বিজ্ঞপ্তি: আমরা ঐকমত্য ব্যবহার করি, ভোট নয়",
      },
      "uw-plagiarism": {
        label: "অ্যাট্রিবিউশন ছাড়াই পাবলিক ডোমেইন উৎস থেকে কপি করা",
        summary:
          "বিজ্ঞপ্তি: অ্যাট্রিবিউশন ছাড়াই পাবলিক ডোমেইন উৎস থেকে কপি করা",
      },
      "uw-preview": {
        label: "ভুল এড়াতে প্রাকদর্শন বাটন ব্যবহার করুন",
        summary: "বিজ্ঞপ্তি: ভুল এড়াতে প্রাকদর্শন বাটন ব্যবহার করুন",
      },
      "uw-redlink": {
        label: "নির্বিচারে লাল লিংক অপসারণ",
        summary: "বিজ্ঞপ্তি: লাল লিংক অপসারণ করার সময় সতর্ক হোন",
      },
      "uw-selfrevert": {
        label: "নিজের পরীক্ষা-নিরীক্ষা পুনর্বহাল করা",
        summary: "বিজ্ঞপ্তি: নিজের পরীক্ষা-নিরীক্ষা পুনর্বহাল করা",
      },
      "uw-socialnetwork": {
        label: "উইকিপিডিয়া সামাজিক যোগাযোগমাধ্যম নয়",
        summary: "বিজ্ঞপ্তি: উইকিপিডিয়া সামাজিক যোগাযোগমাধ্যম নয়",
      },
      "uw-sofixit": {
        label: "সাহসী হোন এবং নিজেই কোনো কিছু সংশোধন করুন",
        summary: "বিজ্ঞপ্তি: সাহস করে নিজেই কোনো কিছু সংশোধন করতে পারেন",
      },
      "uw-spoiler": {
        label: "স্পয়লার সতর্কতা যোগ অথবা যথাযথ অনুচ্ছেদ থেকে স্পয়লার অপসারণ",
        summary:
          "বিজ্ঞপ্তি: উইকিপিডিয়া নিবন্ধে সম্ভাব্য 'স্পয়লার' মুছবেন না বা পতাকাঙ্কিত করবেন না",
      },
      "uw-talkinarticle": {
        label: "নিবন্ধের ভেতরে বার্তা",
        summary: "বিজ্ঞপ্তি: নিবন্ধের ভেতরে বার্তা",
      },
      "uw-tilde": {
        label: "পোস্টে স্বাক্ষর না করা",
        summary: "বিজ্ঞপ্তি: পোস্টে স্বাক্ষর না করা",
      },
      "uw-toppost": {
        label: "আলাপ পাতার শীর্ষে বার্তা প্রদান",
        summary: "বিজ্ঞপ্তি: আলাপ পাতার শীর্ষে বার্তা প্রদান",
      },
      "uw-unattribcc": {
        label: "নির্দেশ ছাড়াই উপযুক্ত-লাইসেন্সযুক্ত উৎস থেকে অনুলিপি করা",
        summary:
          "বিজ্ঞপ্তি: নির্দেশ ছাড়াই উপযুক্ত-লাইসেন্সযুক্ত উৎস থেকে অনুলিপি করা", //Copying from compatibility-licensed sources without attribution
      },
      "uw-userspace draft finish": {
        label: "অনেক পুরাতন ব্যবহারকারী খসড়া",
        summary: "বিজ্ঞপ্তি: অনেক পুরাতন ব্যবহারকারী খসড়া",
      },
      "uw-vgscope": {
        label: "ভিডিও গেম প্লে, প্রতারণা বা নির্দেশাবলী যোগ করা",
        summary: "বিজ্ঞপ্তি: ভিডিও গেম প্লে, প্রতারণা বা নির্দেশাবলী যোগ করা",
      },
      "uw-warn": {
        label:
          "ধ্বংসপ্রবণতা পুনর্বহাল করার সময় ব্যবহারকারীকে সতর্ক বার্তা দিন",
        summary:
          "বিজ্ঞপ্তি: ধ্বংসপ্রবণতা পুনর্বহাল করার সময় ব্যবহারকারীকে সতর্কতা বার্তা দিন",
      },
      "uw-wrongsummary": {
        label: "ভুল বা অনুপযুক্ত সম্পাদনা সারাংশ ব্যবহার করা",
        summary: "সতর্কতা: ভুল বা অনুপযুক্ত সম্পাদনা সারাংশ ব্যবহার করা",
      },
    },

    singlewarn: {
      "uw-3rr": {
        label: "সম্ভাব্য তিন-প্রত্যাবর্তন নিয়ম লঙ্ঘন; uw-ew ও দেখুন",
        summary: "সতর্কতা: তিন-প্রত্যাবর্তন নিয়ম",
      },
      "uw-affiliate": {
        label: "অ্যাফিলিয়েট মার্কেটিং",
        summary: "সতর্কতা: অ্যাফিলিয়েট মার্কেটিং",
      },
      "uw-attack": {
        label: "আক্রমণাত্বক পাতা তৈরি",
        summary: "সতর্কতা: আক্রমণাত্বক পাতা তৈরি",
        suppressArticleInSummary: true,
      },
      "uw-botun": {
        label: "বট ব্যবহারকারী নাম",
        summary: "সতর্কতা: বট ব্যবহারকারী নাম",
      },
      "uw-canvass": {
        label: "ক্যানভাসিং",
        summary: "সতর্কতা: ক্যানভাসিং",
      },
      "uw-copyright": {
        label: "কপিরাইট লঙ্ঘন",
        summary: "সতর্কতা: কপিরাইট লঙ্ঘন",
      },
      "uw-copyright-link": {
        label: "কপিরাইটযুক্ত কাজের লঙ্ঘনের সাথে সংযোগ স্থাপন করা হচ্ছে", //Linking to copyrighted works violation
        summary:
          "সতর্কতা: কপিরাইটযুক্ত কাজের লঙ্ঘনের সাথে সংযোগ স্থাপন করা হচ্ছে",
      },
      "uw-copyright-new": {
        label: "কপিরাইট নীতি লঙ্ঘন (নতুন ব্যবহারকারীদের জন্য ব্যাখ্যা সহ)",
        summary: "বিজ্ঞপ্তি: কপিরাইট সমস্যা এড়ানো",
        heading: "উইকিপিডিয়া ও কপিরাইট",
      },
      "uw-copyright-remove": {
        label: "নিবন্ধ থেকে {{copyvio}} টেমপ্লেট অপসারণ",
        summary: "সতর্কতা: {{copyvio}} টেমপ্লেট অপসারণ",
      },
      "uw-efsummary": {
        label: "সম্পাদনা সারাংশে সম্পাদনা ছাঁকনি ট্রিগার করা",
        summary: "সতর্কতা: সম্পাদনা সারাংশে সম্পাদনা ছাঁকনি ট্রিগার করা",
      },
      "uw-ew": {
        label: "সম্পাদনা যুদ্ধ (শক্তিশালী শব্দ)", // Edit warring
        summary: "সতর্কতা: সম্পাদনা যুদ্ধ",
      },
      "uw-ewsoft": {
        label: "সম্পাদনা যুদ্ধ (নতুনদের জন্য নরম শব্দ)",
        summary: "সতর্কতা: সম্পাদনা যুদ্ধ",
      },
      "uw-hijacking": {
        label: "নিবন্ধ ছিনতাই", // Hijacking articles
        summary: "সতর্কতা: নিবন্ধ ছিনতাই",
      },
      "uw-hoax": {
        label: "প্রতারণা তৈরি করা", // Creating hoaxes
        summary: "সতর্কতা: প্রতারণা তৈরি করা",
      },
      "uw-legal": {
        label: "আইনি হুমকি প্রদান",
        summary: "সতর্কতা: আইনি হুমকি প্রদান",
      },
      "uw-login": {
        label: "লগ আউট অবস্থায় সম্পাদনা",
        summary: "সতর্কতা: লগ আউট অবস্থায় সম্পাদনা",
      },
      "uw-multipleIPs": {
        label: "একাধিক আইপি ব্যবহার",
        summary: "সতর্কতা: একাধিক আইপি ব্যবহার করে ধ্বংসপ্রবণতা",
      },
      "uw-pinfo": {
        label: "ব্যক্তিগত তথ্য (outing)",
        summary: "সতর্কতা: ব্যক্তিগত তথ্য",
      },
      "uw-salt": {
        label: "ভিন্ন শিরোনামের অধীনে সুরক্ষিত নিবন্ধগুলি পুনরায় তৈরি করা",
        summary:
          "বিজ্ঞপ্তি: একটি ভিন্ন শিরোনামের অধীনে সুরক্ষিত নিবন্ধগুলি পুনরায় তৈরি করা হচ্ছে",
      },
      "uw-socksuspect": {
        label: "সকপাপেট্রি",
        summary: "সতর্কতা: আপনি একজন সন্দেহভাজন [[WP:SOCK|সকপাপেট]]", // of User:...
      },
      "uw-upv": {
        label: "ব্যবহারকারী পাতা ধ্বংসপ্রবণতা",
        summary: "সতর্কতা: ব্যবহারকারী পাতা ধ্বংসপ্রবণতা",
      },
      "uw-username": {
        label: "ব্যবহারকারী নাম নীতিমালা বিরোধী",
        summary: "সতর্কতা: আপনার ব্যবহারকারী নাম সম্ভবত নীতিমালা বিরোধী",
        suppressArticleInSummary: true, // not relevant for this template
      },
      "uw-coi-username": {
        label: "ব্যবহারকারী নাম নীতিমালা বিরোধী, এবং স্বার্থের সংঘাত",
        summary: "সতর্কতা: ব্যবহারকারী নাম ও স্বার্থের সংঘাত নীতি",
        heading: "আপনার ব্যবহারকারী নাম",
      },
      "uw-userpage": {
        label: "ব্যবহারকারী পাতা বা উপপাতা নীতিমালা বিরোধী",
        summary: "সতর্কতা: ব্যবহারকারী পাতা বা উপপাতা নীতিমালা বিরোধী",
      },
    },
  };

  // Used repeatedly below across menu rebuilds
  Twinkle.warn.prev_article = null;
  Twinkle.warn.prev_reason = null;
  Twinkle.warn.talkpageObj = null;

  Twinkle.warn.callback.change_category =
    function twinklewarnCallbackChangeCategory(e) {
      var value = e.target.value;
      var sub_group = e.target.root.sub_group;
      sub_group.main_group = value;
      var old_subvalue = sub_group.value;
      var old_subvalue_re;
      if (old_subvalue) {
        if (value === "kitchensink") {
          // Exact match possible in kitchensink menu
          old_subvalue_re = new RegExp(mw.util.escapeRegExp(old_subvalue));
        } else {
          old_subvalue = old_subvalue.replace(/\d*(im)?$/, "");
          old_subvalue_re = new RegExp(
            mw.util.escapeRegExp(old_subvalue) + "(\\d*(?:im)?)$"
          );
        }
      }

      while (sub_group.hasChildNodes()) {
        sub_group.removeChild(sub_group.firstChild);
      }

      var selected = false;
      // worker function to create the combo box entries
      var createEntries = function (contents, container, wrapInOptgroup, val) {
        val = typeof val !== "undefined" ? val : value; // IE doesn't support default parameters
        // level2->2, singlewarn->''; also used to distinguish the
        // scaled levels from singlenotice, singlewarn, and custom
        var level = val.replace(/^\D+/g, "");
        // due to an apparent iOS bug, we have to add an option-group to prevent truncation of text
        // (search WT:TW archives for "Problem selecting warnings on an iPhone")
        if (wrapInOptgroup && $.client.profile().platform === "iphone") {
          var wrapperOptgroup = new Morebits.quickForm.element({
            type: "optgroup",
            label: "ব্যবহারযোগ্য টেমপ্লেটগুলো",
          });
          wrapperOptgroup = wrapperOptgroup.render();
          container.appendChild(wrapperOptgroup);
          container = wrapperOptgroup;
        }

        $.each(contents, function (itemKey, itemProperties) {
          // Skip if the current template doesn't have a version for the current level
          if (!!level && !itemProperties[val]) {
            return;
          }
          var key =
            typeof itemKey === "string" ? itemKey : itemProperties.value;
          var template = key + level;

          var elem = new Morebits.quickForm.element({
            type: "option",
            label:
              "{{" +
              template +
              "}}: " +
              (level ? itemProperties[val].label : itemProperties.label),
            value: template,
          });

          // Select item best corresponding to previous selection
          if (!selected && old_subvalue && old_subvalue_re.test(template)) {
            elem.data.selected = selected = true;
          }
          var elemRendered = container.appendChild(elem.render());
          $(elemRendered).data("messageData", itemProperties);
        });
      };
      var createGroup = function (warnGroup, label, wrapInOptgroup, val) {
        wrapInOptgroup =
          typeof wrapInOptgroup !== "undefined" ? wrapInOptgroup : true;
        var optgroup = new Morebits.quickForm.element({
          type: "optgroup",
          label: label,
        });
        optgroup = optgroup.render();
        sub_group.appendChild(optgroup);
        createEntries(warnGroup, optgroup, wrapInOptgroup, val);
      };

      switch (value) {
        case "singlenotice":
        case "singlewarn":
          createEntries(Twinkle.warn.messages[value], sub_group, true);
          break;
        case "singlecombined":
          var unSortedSinglets = $.extend(
            {},
            Twinkle.warn.messages.singlenotice,
            Twinkle.warn.messages.singlewarn
          );
          var sortedSingletMessages = {};
          Object.keys(unSortedSinglets)
            .sort()
            .forEach(function (key) {
              sortedSingletMessages[key] = unSortedSinglets[key];
            });
          createEntries(sortedSingletMessages, sub_group, true);
          break;
        case "custom":
          createEntries(Twinkle.getPref("customWarningList"), sub_group, true);
          break;
        case "kitchensink":
          ["level1", "level2", "level3", "level4", "level4im"].forEach(
            function (lvl) {
              $.each(
                Twinkle.warn.messages.levels,
                function (levelGroupLabel, levelGroup) {
                  createGroup(
                    levelGroup,
                    "Level " + lvl.slice(5) + ": " + levelGroupLabel,
                    true,
                    lvl
                  );
                }
              );
            }
          );
          createGroup(
            Twinkle.warn.messages.singlenotice,
            "Single-issue notices"
          );
          createGroup(
            Twinkle.warn.messages.singlewarn,
            "Single-issue warnings"
          );
          createGroup(Twinkle.getPref("customWarningList"), "Custom warnings");
          break;
        case "level1":
        case "level2":
        case "level3":
        case "level4":
        case "level4im":
          // Creates subgroup regardless of whether there is anything to place in it;
          // leaves "Removal of deletion tags" empty for 4im
          $.each(
            Twinkle.warn.messages.levels,
            function (groupLabel, groupContents) {
              createGroup(groupContents, groupLabel, false);
            }
          );
          break;
        case "autolevel":
          // Check user page to determine appropriate level
          var autolevelProc = function () {
            var wikitext = Twinkle.warn.talkpageObj.getPageText();
            // history not needed for autolevel
            var latest = Twinkle.warn.callbacks.dateProcessing(wikitext)[0];
            // Pseudo-params with only what's needed to parse the level i.e. no messageData
            var params = {
              sub_group: old_subvalue,
              article: e.target.root.article.value,
            };
            var lvl =
              "level" +
              Twinkle.warn.callbacks.autolevelParseWikitext(
                wikitext,
                params,
                latest
              )[1];

            // Identical to level1, etc. above but explicitly provides the level
            $.each(
              Twinkle.warn.messages.levels,
              function (groupLabel, groupContents) {
                createGroup(groupContents, groupLabel, false, lvl);
              }
            );

            // Trigger subcategory change, add select menu, etc.
            Twinkle.warn.callback.postCategoryCleanup(e);
          };

          if (Twinkle.warn.talkpageObj) {
            autolevelProc();
          } else {
            var usertalk_page = new Morebits.wiki.page(
              "ব্যবহারকারী_আলাপ:" + mw.config.get("wgRelevantUserName"),
              "পূর্ববর্তী সতর্কবার্তাসমূহ লোড হচ্ছে।"
            );
            usertalk_page.setFollowRedirect(true, false);
            usertalk_page.load(
              function (pageobj) {
                Twinkle.warn.talkpageObj = pageobj; // Update talkpageObj
                autolevelProc();
              },
              function () {
                // Catch and warn if the talkpage can't load,
                // most likely because it's a cross-namespace redirect
                // Supersedes the typical $autolevelMessage added in autolevelParseWikitext
                var $noTalkPageNode = $("<strong/>", {
                  text: "ব্যবহারকারীর আলাপ পাতা লোড হচ্ছে না; এটি একটি ক্রস-নেমস্পেসের পুনঃনির্দেশ হতে পারে। স্বয়ংক্রিয় লেভেল সনাক্তকরণ সম্ভব নয়।",
                  id: "twinkle-warn-autolevel-message",
                  css: { color: "red" },
                });
                $noTalkPageNode.insertBefore(
                  $("#twinkle-warn-warning-messages")
                );
                // If a preview was opened while in a different mode, close it
                // Should nullify the need to catch the error in preview callback
                e.target.root.previewer.closePreview();
              }
            );
          }
          break;
        default:
          alert("টুইংকেল সতর্কীকরণে অজানা সতর্কীকরণ গ্রুপ");
          break;
      }

      // Trigger subcategory change, add select menu, etc.
      // Here because of the async load for autolevel
      if (value !== "autolevel") {
        // reset any autolevel-specific messages while we're here
        $("#twinkle-warn-autolevel-message").remove();

        Twinkle.warn.callback.postCategoryCleanup(e);
      }
    };

  Twinkle.warn.callback.postCategoryCleanup =
    function twinklewarnCallbackPostCategoryCleanup(e) {
      // clear overridden label on article textbox
      Morebits.quickForm.setElementTooltipVisibility(
        e.target.root.article,
        true
      );
      Morebits.quickForm.resetElementLabel(e.target.root.article);
      // Trigger custom label/change on main category change
      Twinkle.warn.callback.change_subcategory(e);

      // Use select2 to make the select menu searchable
      if (!Twinkle.getPref("oldSelect")) {
        $("select[name=sub_group]")
          .select2({
            width: "100%",
            matcher: Morebits.select2.matchers.optgroupFull,
            templateResult: Morebits.select2.highlightSearchMatches,
            language: {
              searching: Morebits.select2.queryInterceptor,
            },
          })
          .change(Twinkle.warn.callback.change_subcategory);

        $(".select2-selection").keydown(Morebits.select2.autoStart).focus();

        mw.util.addCSS(
          // Increase height
          ".select2-container .select2-dropdown .select2-results > .select2-results__options { max-height: 350px; }" +
            // Reduce padding
            ".select2-results .select2-results__option { padding-top: 1px; padding-bottom: 1px; }" +
            ".select2-results .select2-results__group { padding-top: 1px; padding-bottom: 1px; } " +
            // Adjust font size
            ".select2-container .select2-dropdown .select2-results { font-size: 13px; }" +
            ".select2-container .selection .select2-selection__rendered { font-size: 13px; }"
        );
      }
    };

  Twinkle.warn.callback.change_subcategory =
    function twinklewarnCallbackChangeSubcategory(e) {
      var main_group = e.target.form.main_group.value;
      var value = e.target.form.sub_group.value;

      // Tags that don't take a linked article, but something else (often a username).
      // The value of each tag is the label next to the input field
      var notLinkedArticle = {
        "uw-agf-sock":
          "অন্য অ্যাকাউন্টের ঐচ্ছিক ব্যবহারকারীর নাম ('ব্যবহারকারী:' ছাড়া) ",
        "uw-bite":
          "'দংশিত' ব্যবহারকারীর ব্যবহারকারীর নাম ('ব্যবহারকারী:' ছাড়া) ",
        "uw-socksuspect":
          "সক মাস্টারের ব্যবহারকারী নাম, যদি জানা থাকে ('ব্যবহারকারী:' ছাড়া) ",
        "uw-username": "ব্যবহারকারী নাম নীতিমালা ভঙ্গ করে কারণ... ",
        "uw-aiv":
          "ঐচ্ছিক ব্যবহারকারীর নাম যেটি রিপোর্ট করা হয়েছে ('ব্যবহারকারী:' ছাড়া) ",
      };

      if (
        ["singlenotice", "singlewarn", "singlecombined", "kitchensink"].indexOf(
          main_group
        ) !== -1
      ) {
        if (notLinkedArticle[value]) {
          if (Twinkle.warn.prev_article === null) {
            Twinkle.warn.prev_article = e.target.form.article.value;
          }
          e.target.form.article.notArticle = true;
          e.target.form.article.value = "";

          // change form labels according to the warning selected
          Morebits.quickForm.setElementTooltipVisibility(
            e.target.form.article,
            false
          );
          Morebits.quickForm.overrideElementLabel(
            e.target.form.article,
            notLinkedArticle[value]
          );
        } else if (e.target.form.article.notArticle) {
          if (Twinkle.warn.prev_article !== null) {
            e.target.form.article.value = Twinkle.warn.prev_article;
            Twinkle.warn.prev_article = null;
          }
          e.target.form.article.notArticle = false;
          Morebits.quickForm.setElementTooltipVisibility(
            e.target.form.article,
            true
          );
          Morebits.quickForm.resetElementLabel(e.target.form.article);
        }
      }

      // add big red notice, warning users about how to use {{uw-[coi-]username}} appropriately
      $("#tw-warn-red-notice").remove();
      var $redWarning;
      if (value === "uw-username") {
        $redWarning = $(
          "<div style='color: red;' id='tw-warn-red-notice'>{{uw-username}} <b>যথাযথ</b> কারণসহ ব্যবহার করুন।</div>"
        );

        $redWarning.insertAfter(
          Morebits.quickForm.getElementLabelObject(e.target.form.reasonGroup)
        );
      } else if (value === "uw-coi-username") {
        $redWarning = $(
          "<div style='color: red;' id='tw-warn-red-notice'>{{uw-coi-username}} <b>যথাযথ</b> কারণসহ ব্যবহার করুন।</div>"
        );
        $redWarning.insertAfter(
          Morebits.quickForm.getElementLabelObject(e.target.form.reasonGroup)
        );
      }
    };

  Twinkle.warn.callbacks = {
    getWarningWikitext: function (templateName, article, reason, isCustom) {
      var text = "{{subst:" + templateName;
      // add linked article for user warnings
      if (article) {
        // c&pmove has the source as the first parameter
        if (templateName === "uw-c&pmove") {
          text += "|to=" + article;
        } else {
          text += "|1=" + article;
        }
      }
      if (reason && !isCustom) {
        // add extra message
        if (
          templateName === "uw-csd" ||
          templateName === "uw-probation" ||
          templateName === "uw-userspacenoindex" ||
          templateName === "uw-userpage"
        ) {
          text += "|3=''" + reason + "''";
        } else {
          text += "|2=''" + reason + "''";
        }
      }
      text += "}}";

      if (reason && isCustom) {
        // we assume that custom warnings lack a {{{2}}} parameter
        text += " ''" + reason + "''";
      }

      return text + " ~~~~";
    },
    showPreview: function (form, templatename) {
      var input = Morebits.quickForm.getInputData(form);
      // Provided on autolevel, not otherwise
      templatename = templatename || input.sub_group;
      var linkedarticle = input.article;
      var templatetext;

      templatetext = Twinkle.warn.callbacks.getWarningWikitext(
        templatename,
        linkedarticle,
        input.reason,
        input.main_group === "custom"
      );

      form.previewer.beginRender(
        templatetext,
        "ব্যবহারকারী_আলাপ:" + mw.config.get("wgRelevantUserName")
      ); // Force wikitext/correct username
    },
    // Just a pass-through unless the autolevel option was selected
    preview: function (form) {
      if (form.main_group.value === "autolevel") {
        // Always get a new, updated talkpage for autolevel processing
        var usertalk_page = new Morebits.wiki.page(
          "ব্যবহারকারী_আলাপ:" + mw.config.get("wgRelevantUserName"),
          "পূর্ববর্তী সতর্কবার্তা গুলো লোড হচ্ছে।"
        );
        usertalk_page.setFollowRedirect(true, false);
        // Will fail silently if the talk page is a cross-ns redirect,
        // removal of the preview box handled when loading the menu
        usertalk_page.load(function (pageobj) {
          Twinkle.warn.talkpageObj = pageobj; // Update talkpageObj

          var wikitext = pageobj.getPageText();
          // history not needed for autolevel
          var latest = Twinkle.warn.callbacks.dateProcessing(wikitext)[0];
          var params = {
            sub_group: form.sub_group.value,
            article: form.article.value,
            messageData: $(form.sub_group)
              .find('option[value="' + $(form.sub_group).val() + '"]')
              .data("messageData"),
          };
          var template = Twinkle.warn.callbacks.autolevelParseWikitext(
            wikitext,
            params,
            latest
          )[0];
          Twinkle.warn.callbacks.showPreview(form, template);

          // If the templates have diverged, fake a change event
          // to reload the menu with the updated pageobj
          if (form.sub_group.value !== template) {
            var evt = document.createEvent("Event");
            evt.initEvent("change", true, true);
            form.main_group.dispatchEvent(evt);
          }
        });
      } else {
        Twinkle.warn.callbacks.showPreview(form);
      }
    },
    /**
     * Used in the main and autolevel loops to determine when to warn
     * about excessively recent, stale, or identical warnings.
     * @param {string} wikitext  The text of a user's talk page, from getPageText()
     * @returns {Object[]} - Array of objects: latest contains most recent
     * warning and date; history lists all prior warnings
     */
    dateProcessing: function (wikitext) {
      var history_re =
        /<!--\s?Template:([uU]w-.*?)\s?-->.*?(\d{1,2}:\d{1,2}, \d{1,2} \w+ \d{4} \(UTC\))/g;
      var history = {};
      var latest = { date: new Morebits.date(0), type: "" };
      var current;

      while ((current = history_re.exec(wikitext)) !== null) {
        var template = current[1],
          current_date = new Morebits.date(current[2]);
        if (
          !(template in history) ||
          history[template].isBefore(current_date)
        ) {
          history[template] = current_date;
        }
        if (!latest.date.isAfter(current_date)) {
          latest.date = current_date;
          latest.type = template;
        }
      }
      return [latest, history];
    },
    /**
     * Main loop for deciding what the level should increment to. Most of
     * this is really just error catching and updating the subsequent data.
     * May produce up to two notices in a twinkle-warn-autolevel-messages div
     *
     * @param {string} wikitext  The text of a user's talk page, from getPageText() (required)
     * @param {Object} params  Params object: sub_group is the template (required);
     * article is the user-provided article (form.article) used to link ARV on recent level4 warnings;
     * messageData is only necessary if getting the full template, as it's
     * used to ensure a valid template of that level exists
     * @param {Object} latest  First element of the array returned from
     * dateProcessing. Provided here rather than processed within to avoid
     * repeated call to dateProcessing
     * @param {(Date|Morebits.date)} date  Date from which staleness is determined
     * @param {Morebits.status} statelem  Status element, only used for handling error in final execution
     *
     * @returns {Array} - Array that contains the full template and just the warning level
     */
    autolevelParseWikitext: function (
      wikitext,
      params,
      latest,
      date,
      statelem
    ) {
      var level; // undefined rather than '' means the isNaN below will return true
      if (/\d(?:im)?$/.test(latest.type)) {
        // level1-4im
        level = parseInt(latest.type.replace(/.*(\d)(?:im)?$/, "$1"), 10);
      } else if (latest.type) {
        // Non-numbered warning
        // Try to leverage existing categorization of
        // warnings, all but one are universally lowercased
        var loweredType = /uw-multipleIPs/i.test(latest.type)
          ? "uw-multipleIPs"
          : latest.type.toLowerCase();
        // It would be nice to account for blocks, but in most
        // cases the hidden message is terminal, not the sig
        if (Twinkle.warn.messages.singlewarn[loweredType]) {
          level = 3;
        } else {
          level = 1; // singlenotice or not found
        }
      }

      var $autolevelMessage = $("<div/>", {
        id: "twinkle-warn-autolevel-message",
      });

      if (isNaN(level)) {
        // No prior warnings found, this is the first
        level = 1;
      } else if (level > 4 || level < 1) {
        // Shouldn't happen
        var message =
          "পূর্ববর্তী সতর্কতা স্তর পার্স করতে অক্ষম, দয়া করে হাত দ্বারা একটি সতর্কতা স্তর নির্বাচন করুন৷";
        if (statelem) {
          statelem.error(message);
        } else {
          alert(message);
        }
        return;
      } else {
        date = date || new Date();
        var autoTimeout = new Morebits.date(latest.date.getTime()).add(
          parseInt(Twinkle.getPref("autolevelStaleDays"), 10),
          "days"
        );
        if (autoTimeout.isAfter(date)) {
          if (level === 4) {
            level = 4;
            // Basically indicates whether we're in the final Main evaluation or not,
            // and thus whether we can continue or need to display the warning and link
            if (!statelem) {
              var $link = $("<a/>", {
                href: "#",
                text: "ARV টুলটি চালু করতে এখানে ক্লিক করুন।",
                css: { fontWeight: "bold" },
                click: function () {
                  Morebits.wiki.actionCompleted.redirect = null;
                  Twinkle.warn.dialog.close();
                  Twinkle.arv.callback(mw.config.get("wgRelevantUserName"));
                  $("input[name=page]").val(params.article); // Target page
                  $("input[value=final]").prop("checked", true); // Vandalism after final
                },
              });
              var statusNode = $("<div/>", {
                text:
                  mw.config.get("wgRelevantUserName") +
                  " সম্প্রতি চতুর্থ স্তরের সতর্কতা বার্তা পেয়েছেন (" +
                  latest.type +
                  ") তাই সম্ভবত অভিযোগ করা ভালো হবে; ",
                css: { color: "red" },
              });
              statusNode.append($link[0]);
              $autolevelMessage.append(statusNode);
            }
          } else {
            // Automatically increase severity
            level += 1;
          }
        } else {
          // Reset warning level if most-recent warning is too old
          level = 1;
        }
      }

      $autolevelMessage.prepend(
        $(
          '<div>একটা ইস্যু সৃষ্টি করবে যা, <span style="font-weight: bold;">লেভেল ' +
            level +
            "</span> টেমপ্লেটে।</div>"
        )
      );
      // Place after the stale and other-user-reverted (text-only) messages
      $("#twinkle-warn-autolevel-message").remove(); // clean slate
      $autolevelMessage.insertAfter($("#twinkle-warn-warning-messages"));

      var template = params.sub_group.replace(/(.*)\d$/, "$1");
      // Validate warning level, falling back to the uw-generic series.
      // Only a few items are missing a level, and in all but a handful
      // of cases, the uw-generic series is explicitly used elsewhere per WP:UTM.
      if (params.messageData && !params.messageData["level" + level]) {
        template = "uw-generic";
      }
      template += level;

      return [template, level];
    },
    main: function (pageobj) {
      var text = pageobj.getPageText();
      var statelem = pageobj.getStatusElement();
      var params = pageobj.getCallbackParameters();
      var messageData = params.messageData;

      // JS somehow didn't get destructured assignment until ES6 so of course IE doesn't support it
      var warningHistory = Twinkle.warn.callbacks.dateProcessing(text);
      var latest = warningHistory[0];
      var history = warningHistory[1];

      var now = new Morebits.date(pageobj.getLoadTime());

      Twinkle.warn.talkpageObj = pageobj; // Update talkpageObj, just in case
      if (params.main_group === "autolevel") {
        // [template, level]
        var templateAndLevel = Twinkle.warn.callbacks.autolevelParseWikitext(
          text,
          params,
          latest,
          now,
          statelem
        );

        // Only if there's a change from the prior display/load
        if (
          params.sub_group !== templateAndLevel[0] &&
          !confirm(
            "{{" +
              templateAndLevel[0] +
              "}} টেমপ্লেটটি ব্যবহারকারীর জন্য একটি ইস্যু তৈরি করবে, ঠিক আছে?"
          )
        ) {
          statelem.error("ব্যবহারকারীর অনুরোধে বাতিল করা হয়েছে");
          return;
        }
        // Update params now that we've selected a warning
        params.sub_group = templateAndLevel[0];
        messageData = params.messageData["level" + templateAndLevel[1]];
      } else if (params.sub_group in history) {
        if (
          new Morebits.date(history[params.sub_group])
            .add(1, "day")
            .isAfter(now)
        ) {
          if (
            !confirm(
              "An identical " +
                params.sub_group +
                " গত ২৪ ঘন্টায় ইস্যুগুলো হয়েছে।  \nআপনি কি এখনও এই সতর্কবার্তা/বিজ্ঞপ্তি যোগ করতে চান?"
            )
          ) {
            statelem.error("ব্যবহারকারীর অনুরোধে বাতিল করা হয়েছে");
            return;
          }
        }
      }

      latest.date.add(1, "minute"); // after long debate, one minute is max

      if (latest.date.isAfter(now)) {
        if (
          !confirm(
            "একটি ইস্যু" +
              latest.type +
              " শেষ মিনিটে উত্থাপিত হয়েছে। \nআপনি কি এখনও এই সতর্কবার্তা/বিজ্ঞপ্তি যোগ করতে চান?"
          )
        ) {
          statelem.error("aborted per user request");
          return;
        }
      }

      // build the edit summary
      // Function to handle generation of summary prefix for custom templates
      var customProcess = function (template) {
        template = template.split("|")[0];
        var prefix;
        switch (template.substr(-1)) {
          case "1":
            prefix = "সাধারণ মন্তব্য";
            break;
          case "2":
            prefix = "সতর্কবার্তা";
            break;
          case "3":
            prefix = "সতর্কবার্তা";
            break;
          case "4":
            prefix = "সর্বশেষ সতর্কবার্তা";
            break;
          case "m":
            if (template.substr(-3) === "4im") {
              prefix = "একমাত্র সতর্কবার্তা";
              break;
            }
          // falls through
          default:
            prefix = "বিজ্ঞপ্তি";
            break;
        }
        return (
          prefix +
          ": " +
          Morebits.string.toUpperCaseFirstChar(messageData.label)
        );
      };

      var summary;
      if (params.main_group === "custom") {
        summary = customProcess(params.sub_group);
      } else {
        // Normalize kitchensink to the 1-4im style
        if (
          params.main_group === "kitchensink" &&
          !/^D+$/.test(params.sub_group)
        ) {
          var sub = params.sub_group.substr(-1);
          if (sub === "m") {
            sub = params.sub_group.substr(-3);
          }
          // Don't overwrite uw-3rr, technically unnecessary
          if (/\d/.test(sub)) {
            params.main_group = "level" + sub;
          }
        }
        // singlet || level1-4im, no need to /^\D+$/.test(params.main_group)
        summary =
          messageData.summary ||
          (messageData[params.main_group] &&
            messageData[params.main_group].summary);
        // Not in Twinkle.warn.messages, assume custom template
        if (!summary) {
          summary = customProcess(params.sub_group);
        }
        if (messageData.suppressArticleInSummary !== true && params.article) {
          if (
            params.sub_group === "uw-agf-sock" ||
            params.sub_group === "uw-socksuspect" ||
            params.sub_group === "uw-aiv"
          ) {
            // these templates require a username
            summary += " [[:ব্যবহারকারী:" + params.article + "]] পাতায়";
          } else {
            summary += " [[:" + params.article + "]] পাতায়";
          }
        }
      }

      pageobj.setEditSummary(summary + "।");
      pageobj.setChangeTags(Twinkle.changeTags);
      pageobj.setWatchlist(Twinkle.getPref("watchWarnings"));

      // Get actual warning text
      var warningText = Twinkle.warn.callbacks.getWarningWikitext(
        params.sub_group,
        params.article,
        params.reason,
        params.main_group === "custom"
      );
      if (
        Twinkle.getPref("showSharedIPNotice") &&
        mw.util.isIPAddress(mw.config.get("wgTitle"))
      ) {
        Morebits.status.info(
          "তথ্য",
          "একটি শেয়ার করা আইপি নোটিশ যোগ করা হচ্ছে।"
        );
        warningText += "\n{{subst:Shared IP advice}}";
      }

      var sectionExists = false,
        sectionNumber = 0;
      // Only check sections if there are sections or there's a chance we won't create our own
      if (!messageData.heading && text.length) {
        // Get all sections
        var sections = text.match(/^(==*).+\1/gm);
        if (sections && sections.length !== 0) {
          // Find the index of the section header in question
          var dateHeaderRegex = now.monthHeaderRegex();
          sectionNumber = 0;
          // Find this month's section among L2 sections, preferring the bottom-most
          sectionExists = sections.reverse().some(function (sec, idx) {
            return (
              /^(==)[^=].+\1/m.test(sec) &&
              dateHeaderRegex.test(sec) &&
              typeof (sectionNumber = sections.length - 1 - idx) === "number"
            );
          });
        }
      }

      if (sectionExists) {
        // append to existing section
        pageobj.setPageSection(sectionNumber + 1);
        pageobj.setAppendText("\n\n" + warningText);
        pageobj.append();
      } else {
        if (messageData.heading) {
          // create new section
          pageobj.setNewSectionTitle(messageData.heading);
        } else {
          Morebits.status.info(
            "তথ্য",
            "যেহেতু কিছুই পাওয়া যায় নি, তাই এই মাসের জন্য নতুন অনুচ্ছেদ তৈরি করা হবে"
          );
          pageobj.setNewSectionTitle(now.monthHeader(0));
        }
        pageobj.setNewSectionText(warningText);
        pageobj.newSection();
      }
    },
  };

  Twinkle.warn.callback.evaluate = function twinklewarnCallbackEvaluate(e) {
    var userTalkPage =
      "ব্যবহারকারী_আলাপ:" + mw.config.get("wgRelevantUserName");

    // reason, main_group, sub_group, article
    var params = Morebits.quickForm.getInputData(e.target);

    // Check that a reason was filled in if uw-username was selected
    if (params.sub_group === "uw-username" && !params.article) {
      alert(
        "{{uw-username}} এই টেমপ্লেটি ব্যবহারের জন্য আপনাকে সঠিক কারণ দর্শাতে হবে।"
      );
      return;
    }

    // The autolevel option will already know by now if a user talk page
    // is a cross-namespace redirect (via !!Twinkle.warn.talkpageObj), so
    // technically we could alert an error here, but the user will have
    // already ignored the bold red error above.  Moreover, they probably
    // *don't* want to actually issue a warning, so the error handling
    // after the form is submitted is probably preferable

    // Find the selected <option> element so we can fetch the data structure
    var $selectedEl = $(e.target.sub_group).find(
      'option[value="' + $(e.target.sub_group).val() + '"]'
    );
    params.messageData = $selectedEl.data("messageData");

    Morebits.simpleWindow.setButtonsEnabled(false);
    Morebits.status.init(e.target);

    Morebits.wiki.actionCompleted.redirect = userTalkPage;
    Morebits.wiki.actionCompleted.notice =
      "সতর্কবার্তা প্রদান করা হয়েছে, কয়েক সেকেন্ডের মধ্যে আলাপ পাতা পুনঃলোড করা হবে";

    var wikipedia_page = new Morebits.wiki.page(
      userTalkPage,
      "আলাপ পাতা পরিবর্তন"
    );
    wikipedia_page.setCallbackParameters(params);
    wikipedia_page.setFollowRedirect(true, false);
    wikipedia_page.load(Twinkle.warn.callbacks.main);
  };

  Twinkle.addInitCallback(Twinkle.warn, "warn");
})(jQuery);

// </nowiki>