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

  • ফায়ারফক্স / সাফারি: পুনরায় লোড-এ ক্লিক করার সময় শিফট টিপে ধরে রাখুন, অথবা হয় Ctrl-F5 বা Ctrl-R টিপুন (ম্যাকে ⌘-R টিপুন)
  • গুগল ক্রোম: Ctrl-Shift-R (ম্যাকে ⌘-Shift-R) টিপুন
  • ইন্টারনেট এক্সপ্লোরার / এজ: Ctrl ধরে রাখা অবস্থায় Refresh-এ ক্লিক করুন, অথবা Ctrl-F5 টিপুন
  • অপেরা: Ctrl-F5 টিপুন।
(function (Wikial) {
  /*
   ****************************************
   *** ব্যবহারকারী:মোহাম্মদ মারুফ/catmover.js: catmover module
   ****************************************
   * Mode of invocation:     move catagories in existing one
   * Active on:              catagory namespace
   * Config directives in:   ব্যবহারকারী:মোহাম্মদ মারুফ/script-catmover.js
   * creator:                মোহাম্মদ মারুফ
   * created on:             26 December, 2023
   */
  const api = new mw.Api();
  const page = mw.config.get("wgPageName");
  if (
    mw.config.get("wgAction") === "view" &&
    mw.config.get("wgNamespaceNumber") === 14
  ) {
    var wikial = new Wikial("abc");
    var toolbox = document.getElementById("mr-toolbox");
    var button = document.createElement("button");
    button.innerHTML = "cat mover";
    button.addEventListener("click", () => {
      var initdata = [];
      function loop(continuet, callback) {
        api
          .get({
            action: "query",
            format: "json",
            list: "categorymembers",
            formatversion: "2",
            cmtitle: page,
            cmlimit: "max",
            cmcontinue: continuet || "",
          })
          .done(function (data) {
            initdata.push(...data.query.categorymembers);
            if (continuet) {
              loop(data.continue.cmcontinue, callback);
            } else {
              callback(initdata);
            }
          })
          .fail(function (data) {
            console.log(data);
            wikial.error({
              content: data.error,
            });
            location.reload();
          });
      }
      loop("", (data) => {
        var count = data.length,
          serial = 0;
        var i = 0;
        if (count < 200) {
          var dis = confirm(
            "বিষয়শ্রেণীতে মোট নিবন্ধ রয়েছে " +
              count +
              "টি। যার সবগুলো সরাতে সময় লাগবে " +
              dtime(count * 15) +
              "। শুরু করা যাক?"
          );
          if (!dis) location.reload();
          var cas = new Wikial("case").case({
            title: count + "টি বিষয়শ্রেণী সরানো হয়েছে!",
            from: 1,
            to: count,
            content: "$to টি পাতার মধ্যে $from টি সরানো হয়েছে",
          });
          var which = prompt(
            "যে বিষয়শ্রেণীতে স্থানান্তর করতে চান, তার নাম?",
            page.replace(/_/g, " ")
          );
          function iloop(i, callback) {
            if (i <= count) {
              edit(
                {
                  page: data[i].title,
                  what: page,
                  which: which,
                },
                (res, msg) => {
                  if (res) {
                    serial++;
                    cas.update();
                    console.log(data[i].title);
                  } else {
                    wikial.alert(
                      data[i].title +
                        " পাতাটিকে " +
                        which +
                        " এ স্থানন্তর করা যায়নি"
                    );
                    console.log(msg);
                  }
                }
              );
            } else {
              callback();
            }
            setTimeout(() => {
              i++;
              iloop(i, callback);
            }, 13.5 * 1000);
          }
          iloop(i, () => {
            wikial.alert({
              title: "সম্পূর্ণ হয়েছে",
              content:
                count +
                "টি পাতার মধ্যে " +
                serial +
                "টি পাতাকে " +
                which +
                "এ স্থানন্তর করা সম্ভব হয়েছে। অর্থাৎ " +
                Math.round((serial / count) * 100) +
                "% স্থানন্তর করা সম্ভব হয়েছে।",
              type: "success",
            });
            api //get pagedata
              .get({
                action: "parse",
                format: "json",
                page: page,
                prop: "wikitext",
                formatversion: "2",
              })
              .done((data) => {
                api //edit old page
                  .edit(page, function (revision) {
                    return {
                      text: "{"+"{বিষয়শ্রেণী পুনর্নির্দেশ|" + which + "}}",
                      summary: "হালনাগাদ করা হয়েছে।",
                    };
                  })
                  .done(() => {
                    api //edit target page
                      .edit(which, function (revision) {
                        return {
                          text: data.content.replace(
                            page.split(":")[1].trim(),
                            which.split(":")[1].trim()
                          ),
                          summary: "হালনাগাদ করা হয়েছে।",
                        };
                      })
                      .done(() => {
                        wikial.alert("All done!");
                      })
                      .fail((msg) => {
                        callback(false, msg);
                      });
                  })
                  .fail((msg) => {
                    console.log(false, msg);
                  });
              })
              .fail((msg) => {
                console.log(msg);
              });
          });
        } else {
          alert(
            "এই বিষয়শ্রেণীতে " +
              count +
              " টি পাতা রয়েছে, যা অনেক বেশি! এবং এটির সম্পাদনা শেষ করতে আপনার প্রায় " +
              dtime(count * 15) +
              ' সময় লাগবে। তাই আপনার উচিৎ কোনো প্রসাশকের সাহায্য নেওয়া। কারণ এতো বড় সম্পাদনার ফলে "সাম্প্রতিক পরিবর্তন" এ সমস্যা দেখা দিতে পারে।'
          );
        }
      });
    });
    function dtime(sec) {
      if (sec > 3600) {
        return (sec / 3600).toFixed(2) + " ঘন্টা";
      } else if (sec > 60) {
        return (sec / 60).toFixed(2) + " মিনিট";
      } else {
        return sec + " সেকেন্ড";
      }
    }
    function edit({ page, what, which }, callback) {
      api
        .edit(page, function (revision) {
          return {
            text: revision.content.replace(
              what.replace(/_/g, " "),
              which.replace(/_/g, " ")
            ),
            summary:
              "[[" + what + "]] থেকে [[" + which + "]] এ পরিবর্তন করা হয়েছে।",
            minor: true,
          };
        })
        .done(() => {
          callback(true);
        })
        .fail((msg) => {
          callback(false, msg);
        });
    }
    toolbox.appendChild(button);
  }
})(window.mr.Wikial);