משתמש:מקף/CheckRequest.js

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

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
/*
מוסיף לשוניות בקשת בדיקה נוספת על מנת שאפשר יהיה לבקש בדיקת שינוי באמצעות דף וק:בד. 
מבוסס על [[מדיה ויקי:Gadget-DeleteRequest.js]]
*/
if (mw.config.get("wgNamespaceNumber") + 1)
	// not a special page
	$(function () {
		function openDialog(code1, code, reasons, req) {
			var dialog = $("<div>")
				.html("סיבה: ")
				.dialog({ title: "בקשה ל" + req })
			var select = $("<select>").append(
				$("<option>").append("בדיקת נכונות")
			)
			dialog.append(select)
			for (var id in reasons) {
				select.append($("<option>").append(reasons[id]))
			}
			var input = $("<input>")
			dialog.append($("<br>"), "פירוט: ", input)
			input.focus()
			$(dialog).keypress(function (event) {
				if (event.key == "Enter") {
					var value = input["0"].value,
						selectValue = select["0"].value
					if (selectValue === "אחר") {
						if (value === "") alert("יש צורך בפירוט")
						else {
							code1(value, selectValue);
							dialog.dialog("close");
						}
					}
					else {
						code(value, selectValue);
						dialog.dialog("close");
					}
				}
			})
			dialog.dialog("option", "buttons", {
				ביצוע: function () {
					var value = input["0"].value,
						selectValue = select["0"].value
					if (selectValue === "אחר") {
						if (value === "") alert("יש צורך בפירוט")
						else {
							code1(value, selectValue);
							dialog.dialog("close");
						}
					}
					else {
						code(value, selectValue);
						dialog.dialog("close");
					}
				},
				סגירה: function () {
					dialog.dialog("close")
				},
			})
		}

		function save(title, summary, content, section, next) {
			var param = {
				action: "edit",
				title: title,
				summary: summary
					.replace(
						/replaceParam/g,
						mw.config.get("wgPageName").replace(/_/g, " ")
					)
					.replace(
						/replaceUser/g,
						mw.config.get("wgRelevantUserName")
					),
				token: mw.user.tokens.get("csrfToken"),
				section: section || "0",
				appendtext: content,
				format: "json",
				tags: "בדיקת-עריכה",
			}
			$.post(mw.util.wikiScript("api"), param, function (data) {
				if (data && data.error)
					mw.notify(
						"שגיאה בשמירה: " + (data.error.info || "שגיאה לא ידועה")
					)
				else if (
					data &&
					data.edit &&
					data.edit.result == "Success" &&
					typeof next == "function"
				)
					next()
			})
		}

		function checkRequestDuplication() {
			var requestChecker = new $.Deferred()
			new mw.Api()
				.get({
					action: "query",
					prop: "links",
					titles: "ויקיפדיה:לבדיקה נוספת",
					pltitles: mw.config.get("wgPageName"),
					indexpageids: 1,
				})
				.done(function (d) {
					d = d.query
					if (d && d.pageids && d.pageids.length) {
						d = d.pages[d.pageids[0]]
						if (d.links && d.links.length > 0) {
							if (
								!confirm(
									"הדף כבר מוזכר בדף הבקשות לבדיקה נוספת. האם לשלוח בכל זאת את הבקשה?"
								)
							) {
								requestChecker.reject(
									"הדף כבר מוזכר בדף הבקשות לבדיקה נוספת. הבקשה לא בוצעה"
								)
								return
							}
						}
					}
					requestChecker.resolve()
				})
			return requestChecker
		}

		function checkSection(selectValue) {
			if (
				selectValue === "בדיקת נכונות" ||
				selectValue === "בדיקת המקור" ||
				selectValue === "בקשה למקורות מידע"
			) {
				return 2
			} else if (
				selectValue === "בדיקת אנציקלופדיות" ||
				selectValue === "בדיקת מהותיות או רלוונטיות המידע"
			) {
				return 3
			} else if (
				selectValue === "בדיקת נייטרליות" ||
				selectValue === "בדיקת צורך בהבהרה"
			) {
				return 4
			} else {
				return 1
			}
		}

		function checkSectionName(selectValue) {
			if (
				selectValue === "בדיקת נכונות" ||
				selectValue === "בדיקת המקור" ||
				selectValue === "בקשה למקורות מידע"
			) {
				return "נכונות ואמינות"
			} else if (
				selectValue === "בדיקת אנציקלופדיות" ||
				selectValue === "בדיקת מהותיות או רלוונטיות המידע"
			) {
				return "אנציקלופדיות, מהותיות ורלוונטיות"
			} else if (
				selectValue === "בדיקת נייטרליות" ||
				selectValue === "בדיקת צורך בהבהרה"
			) {
				return "ניטרליות וצורך בהבהרה"
			} else {
				return "כללי"
			}
		}

		function addMenuItem(caption, tooltip, message, accessKey) {
			var a = mw.util.addPortletLink(
				"p-cactions",
				"#",
				caption,
				"",
				tooltip
					.replace(
						/replaceParam/g,
						mw.config.get("wgPageName").replace(/_/g, " ")
					)
					.replace(
						/replaceUser/g,
						mw.config.get("wgRelevantUserName")
					),
				accessKey || ""
			)
			var alreadySign
			$(a).click(function () {
				checkRequestDuplication()
					.fail(function (err) {
						mw.notify(err)
					})
					.done(function () {
						if (!alreadySign) {
							alreadySign = true
							message += " – reason ~~" + "~~"
							message = message
								.replace(
									/replaceParam/g,
									mw.config.get("wgPageName").replace(/_/g, " ")
								)
								.replace(
									/replaceUser/g,
									mw.config.get("wgRelevantUserName")
								)
						}
						switch (caption) {
							case "לבדיקה נוספת":
								openDialog(
									//code1
									function (value, selectValue) {
										save(
											"ויקיפדיה:לבדיקה נוספת",
											"/*" +
											checkSectionName(selectValue) +
											"*/\t[[replaceParam]]",
											"\n\n* " +
											message.replace(
												/reason/g,
												value
											),
											checkSection(selectValue),
											function () {
												mw.notify(
													$("<a>", {
														href: mw.util.getUrl('ויקיפדיה:לבדיקה_נוספת'),
													}).text(
														"בקשתך נשמרה בדף הבקשות לבדיקה נוספת"
													)
												)
											}
										)
									},
									//code
									function (value, selectValue) {
										save(
											"ויקיפדיה:לבדיקה נוספת",
											"/*" +
											checkSectionName(selectValue) +
											"*/\t[[replaceParam]]",
											"\n\n* " +
											message.replace(
												/reason/g,
												selectValue + ": " + value
											),
											checkSection(selectValue),
											function () {
												mw.notify(
													$("<a>", {
														href: mw.util.getUrl('ויקיפדיה:לבדיקה_נוספת'),
													}).text(
														"בקשתך נשמרה בדף הבקשות לבדיקה נוספת"
													)
												)
											}
										)
									},
									[
										"בדיקת המקור",
										"בקשה למקורות מידע בנושא",
										"בדיקת אנציקלופדיות",
										"בדיקת מהותיות או רלוונטיות המידע",
										"בדיקת נייטרליות",
										"בדיקת צורך בהבהרה",
										"אחר",
									],
									"בדיקה נוספת"
								)
								break;
						}
					})
			})
		}
		var ca =
			$.inArray(mw.config.get("wgNamespaceNumber"), [6, 14]) + 1 ? ":" : ""
		if (mw.util.getParamValue("oldid") || mw.util.getParamValue("diff"))
			addMenuItem(
				"לבדיקה נוספת",
				"בקשה לבדוק את הגרסה " + mw.util.getParamValue("diff"),
				"{{הבדל|" +
				mw.config.get("wgPageName") +
				"|" +
				mw.util.getParamValue("diff") +
				"|" +
				mw.util.getParamValue("oldid") +
				"|טקסט=גרסה זו}} ב[[" +
				ca +
				mw.config.get("wgPageName").replace(/_/g, " ") +
				"]]",
				"c" //shift+alt+c `C`heck request
			)
		$(document).trigger("new-portlet-link")
	})