ব্যবহারকারী:মোহাম্মদ মারুফ/script-task-maneger.js

উইকিপিডিয়া, মুক্ত বিশ্বকোষ থেকে

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

  • ফায়ারফক্স / সাফারি: পুনরায় লোড-এ ক্লিক করার সময় শিফট টিপে ধরে রাখুন, অথবা হয় Ctrl-F5 বা Ctrl-R টিপুন (ম্যাকে ⌘-R টিপুন)
  • গুগল ক্রোম: Ctrl-Shift-R (ম্যাকে ⌘-Shift-R) টিপুন
  • ইন্টারনেট এক্সপ্লোরার / এজ: Ctrl ধরে রাখা অবস্থায় Refresh-এ ক্লিক করুন, অথবা Ctrl-F5 টিপুন
  • অপেরা: Ctrl-F5 টিপুন।
(function () {
  /*
   ****************************************
   *** ব্যবহারকারী:মোহাম্মদ মারুফ/task-maneger.js: task-maneger module
   ****************************************
   * Mode of invocation:     task-maneger with alarm
   * Active on:              only main namespace
   * Config directives in:   ব্যবহারকারী:মোহাম্মদ মারুফ/task-maneger.js
   * creator:                মোহাম্মদ মারুফ
   * created on:             10 May, 2023
   */
  if (mw.config.get("wgNamespaceNumber") === 0) {
    const container = document.getElementById("mw-panel");
    var taskManeger = document.createElement("div");
    taskManeger.id = "task-maneger-container";
    taskManeger.innerHTML =
      '<h5 id="task-maneger-header">Task Maneger<button id="task-maneger-add">+</button></h5><ul id="task-maneger-list"></ul>';
    container.appendChild(taskManeger);
    var taskManegerList = document.getElementById("task-maneger-list");
    var taskManegerAdd = document.getElementById("task-maneger-add");
    loadData(taskManegerList);
    addDeleteEvent(taskManegerList);
    taskManegerAdd.addEventListener("click", function () {
      var task = prompt("Enter your task");
      if (task) {
        //wiki markup to make a link
        if (
          task.search(/\[.*\s.*\]/g) >= 0 &&
          task.search(/(\[\[.*\]\])/g) < 0
        ) {
          task = createLink(task, false);
        } else if (task.search(/(\[\[.*\]\])/g) >= 0) {
          task = createLink(task, true);
        }
        taskManegerList.innerHTML +=
          '<li class="task-maneger-item">' +
          task +
          '<button class="task-maneger-list-delete">X</button></li>';
        saveData(taskManegerList);
        addDeleteEvent(taskManegerList);
      }
    });
    alarm();
  }
  function loadData(container) {
    var data = localStorage.getItem("mr-task-maneger");
    if (data) {
      data = JSON.parse(data).text;
      for (var i = 0; i < data.length; i++) {
        container.innerHTML +=
          '<li class="task-maneger-item">' + data[i] + "</li>";
      }
    }
  }
  function saveData(container) {
    var data = {
      text: [],
      nextTime: new Date().getTime() + 24 * 60 * 60 * 1000,
    };
    var taskManegerListItems =
      container.getElementsByClassName("task-maneger-item");
    for (var i = 0; i < taskManegerListItems.length; i++) {
      data.text.push(taskManegerListItems[i].innerHTML);
    }
    localStorage.setItem("mr-task-maneger", JSON.stringify(data));
  }
  function addDeleteEvent(container) {
    var taskManegerListDelete = document.getElementsByClassName(
      "task-maneger-list-delete"
    );
    if (taskManegerListDelete.length) {
      for (var i = 0; i < taskManegerListDelete.length; i++) {
        taskManegerListDelete[i].addEventListener("click", function () {
          this.parentNode.remove();
          saveData(container);
        });
      }
    }
  }
  function alarm() {
    var data = localStorage.getItem("mr-task-maneger");
    if (data) {
      data = JSON.parse(data);
      if (data.nextTime < new Date().getTime() && data.text.length) {
        alert("You have some task to do");
        data.nextTime = new Date().getTime() + 24 * 60 * 60 * 1000;
        localStorage.setItem("mr-task-maneger", JSON.stringify(data));
      }
    }
  }
  function createLink(text, dission) {
    //extractuct link text
    if (dission) {
      var link = text
        .match(/(\[\[.*\]\])/g)[0]
        .replace(/(\[\[|\]\])/g, "")
        .split("|");
      var title = link[1] ? link[1] : link[0];
      return text.replace(
        /(\[\[.*\]\])/g,
        '<a href="https:' +
          mw.config.get("wgServer") +
          "/wiki/" +
          link[0] +
          '">' +
          title +
          "</a>"
      );
    } else {
      var link = text
        .match(/\[.*\s.*\]/g)[0]
        .replace(/(\[|\])/g, "")
        .split(" ");
      return text.replace(
        /\[.*\s.*\]/g,
        '<a href="' + link[0] + '">' + link[1] + "</a>"
      );
    }
  }
})();