לדלג לתוכן

משתמש:מוטי בוט/ערך.js

מתוך המכלול, האנציקלופדיה היהודית

לתשומת ליבך: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
$(document).ready(function () {
  if (
    mw.config.get("wgNamespaceNumber") === 0 && //מרחב ראשי בלבד
    mw.config.get("wgArticleId") === 0 &&//דפים לא קיימים (אין מזהה)
    mw.config.get("aspaklaryaLockdown") !== "create"
  ) {
    var PageName = mw.config
      .get("wgPageName")
      .replace(/^רבי_/, "")
      .replace(/^הרב_/, "")
      .replace(/_/g, " ")
      .replace(/ה"קדושה"/g, "הקדושה")
      .replace(/ה"קדוש"/g, "הקדוש")
      .replace(/ה"קדושים"/g, "הקדושים")
      .replace(/אישיות מהתנ"ך/g, "דמות מקראית");

    var actionExecuted = false;
    var veryNewPage = false;
    const date = Date.parse(new Date());
    const rvend = new Date(date - 1209600000).toISOString();

    var api = new mw.Api();
    var foreignApi = new mw.ForeignApi(mw.user.options.get("userjs-import-source") === "direct" ? "https://he.wikipedia.org/w/api.php" : "https://import.hamichlol.org.il/", {
      anonymous: true,
    });
    const queryParams = {
      action: "query",
      prop: "info|revisions",
      titles: PageName,
      utf8: 1,
      rvprop: "timestamp",
      rvlimit: 25,
      rvdir: "newer",
      tllimit: "1"
    };
    foreignApi
      .get(queryParams)
      .done(function (response) {
        if (!response.query.pages["-1"]) {
          const page = Object.values(response.query.pages)[0];
          const date = Date.parse(rvend) > Date.parse(page.revisions[0].timestamp);
          if (page.revisions.length < 25 && !date) {
            veryNewPage = true;
          }
          var titleBlack = checTitleInList(PageName);
          console.log(titleBlack);
          var $div = $("<div>", {
            class: "centered-content",
            html:
              '<p class="text-center">הדף קיים בוויקיפדיה העברית</p>'
          });
          // אם אין מזהה - לא קיים
          if (mw.config.get("wgUserGroups").indexOf("aspaklaryaEditor") !== -1) {
            addElement($div);
          } else if (mw.config.get("wgUserGroups").indexOf("wikimport") !== -1 && !titleBlack) {
            addElement($div);
          } else if (typeof titleBlack === "string") {
            $div.html('<p class="text-center">הדף קיים בוויקיפדיה העברית, אך לא ניתן לייבאו משום ש' + titleBlack + "</p>")
            addElement($div)
          } else if (titleBlack === false) {
            checkExistingRequest(PageName, function (requestExists) {
              if (requestExists) {
                var $div = $("<div>", {
                  class: "centered-content",
                  html: '<p class="text-center">קיימת בקשת ייבוא עבור ערך זה</p>'
                });
                addElement($div);
                return;
              }
              //לשאר קריאה לפונקציה להוספת אלמנט מתאים
              initializePage();
            });
          }
        }
      });
  }

  // שליחת בקשת עריכה לבקשת יבוא ערך עם שם הדף
  function postRequest() {
    if (actionExecuted) {
      console.log("actionExecuted", actionExecuted);
      mw.notify(" לא ניתן לשלוח בקשה חוזרת");
      return;
    } else {
      actionExecuted = true;
      post();
    }
  }

  function post() {
    var param = {
      sectiontitle: "[[" + PageName + "]]",
      title: "המכלול:בקשת ייבוא ערך",
      text: "תודה! ~~" + "~~",
    };
    api
      .newSection(param.title, param.sectiontitle, param.text)
      .done(function () {
        mw.notify("הבקשה נשמרה בהצלחה!", { type: "success" });
      })
      .fail(function () {
        mw.notify("הבקשה לא נשמרה! תוכלו לבקש בהמכלול:בקשת ערך", {
          type: "error",
        });
      });
  }
  function checkExistingRequest(pageName, callback) {
    api
      .get({
        action: 'query',
        titles: 'המכלול:בקשת ייבוא ערך',
        prop: 'links',
        pllimit: 'max'
      })
      .done(function (response) {
        var pages = response.query.pages;
        var pageId = Object.keys(pages)[0];
        var links = pages[pageId].links || [];
        var requestExists = links.some(function (link) {
          return link.title === pageName;
        });
        callback(requestExists);
      })
      .fail(function () {
        callback(false);
      });
  }

  //יצירת והוספת אלמנט הודעה על קיום הערך בויקיפדיה ואפשרות לבקשת ייבוא
  function initializePage() {
    let rootMassge = '<p class="text-center">דף זה קיים בוויקיפדיה העברית וטרם יובא למכלול</p>' +
      '<p class="text-center">באפשרותכם להוסיפו לרשימת ההמתנה ולזרז את הטיפול בו</p>';
    if (veryNewPage) {
      rootMassge = '<p class="text-center">דף זה נוצר לאחרונה בויקיפדיה העברית וטרם יובא למכלול</p>' +
        '<p class="text-center>מומלץ להמתין עוד מספר ימים עד להשלמת עריכתו</p>' +
        '<p class="text-center>אם בכל זאת תרצו לזרז את הייבוא לחצו למטה</p>'
    }
    rootMassge += '<p class="text-center">יודגש כי בהתאם לכללי נקיות התוכן באתר ייתכן וביצוע בקשתכם יתעכב או לא יתבצע בזמן הקרוב';
    // אלמנט ראשי עם מסגרת וטקסט
    var $centeredContent = $("<div>", {
      class: "centered-content",
      html:
        rootMassge
    });
    // אלמנט הודעה לאנונימיים על שמירת ה-IP
    // אלמנט כפתור
    var $button = $("<button>", {
      id: "Ask-Not-Existing-button",
      class: "mw-ui-button mw-ui-progressive",
      text: "שלח בקשה",
    });

    $centeredContent.append($button);
    addElement($centeredContent);
    setTimeout(function () {
      $button.click(function () {
        // האזנה ללחיצה על הכפתור וקריאה לפונקצית שליחת הבקשה
        postRequest();
      });
    }, 102)
  }
  function addElement(element) {
    console.log("element", element);
    var $warning = $("<p>", {
      html: "<b>שימו לב:</b> כתובת ה-IP שלכם תופיע בדף הבקשות, תוכל ליצור חשבון לצורך הגשת הבקשה ולהימנע מפרסום הכתובת",
      class: "text-center",
    });
    if (mw.user.isAnon()) {
      var $button = $(element.find("button"));
      if ($button.length > 0) {
        $button.before($warning);
      }
      setTimeout(function () {
        $("#bodyContent").empty().append(element);
      }, 100)
    } else {
      setTimeout(function () {
        $("#firstHeading").after(element);
      }, 100)
    }
  }

  function checTitleInList(title) {
    var blackListObject = require("./Ask-Not-Existing.json");
    var utf8ToCodeURI = require("./Ask-Not-Existing-blackList.js");
    var blackList = blackListObject.list.map(function (item) {
      return utf8ToCodeURI(item);
    });
    var blackListMessage = blackListObject.messages;
    for (var i = 0; i < blackList.length; i++) {
      if (new RegExp(blackList[i]).test(title)) {
        if (blackListMessage[utf8ToCodeURI(blackList[i], "utf8")]) {
          return utf8ToCodeURI(blackListMessage[utf8ToCodeURI(blackList[i], "utf8")]);
        } else {
          return true;
        }
      }
    }
    return false;
  }
});
require("./Ask-Not-Existing-blackList.js");