MediaWiki:Common.js: Difference between revisions
From PBARC
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
// Wikipedia citation tool | // Wikipedia citation tool | ||
const textbox = document.querySelector( | const textbox = document.querySelector("#wpTextbox1") | ||
if (textbox) { | if (textbox) { | ||
const summaryBox = document.querySelector( | |||
"#wpSummaryLabel > div:nth-child(1)" | |||
) | |||
const label = summaryBox.querySelector("label") | |||
label.setAttribute("for", "citations") | |||
label.textContent = | |||
'If you quoted a Wikipedia article, paste its Web address (starting with "https://en.wikipedia.org/") here, then click "Add citation." Do this for each article quoted. This is not necessary if the article is already cited in this page.' | |||
const input = summaryBox.querySelector("input") | |||
input.id = "citations" | |||
input.setAttribute("name", "citations") | |||
input.setAttribute("title", "Enter URLs to Wikipedia articles") | |||
const button = document.createElement("button") | |||
button.classList = ["oo-ui-inputWidget-input", "oo-ui-buttonElement-button"] | |||
button.style.marginBottom = "1em" | |||
button.textContent = "Add citation" | |||
summaryBox.appendChild(button) | |||
button.addEventListener("click", function (e) { | |||
e.preventDefault() | |||
const url = input.value | |||
const regex = /\/wiki\/(.+)/ // Regex pattern to extract the title | |||
const match = url.match(regex) // Perform matching | |||
if (url.search("en.wikipedia.org") != -1 && match && match.length > 1) { | |||
const title = decodeURIComponent(match[1]).replace(/_/g, " ") | |||
const citation = "{{Wikipedia|" + title + "}}" | |||
if (textbox.value.search(citation) == -1) { | |||
textbox.value = textbox.value.trim() + "\n\n" + citation | |||
input.value = "" | |||
} | |||
} else { | |||
alert("That URL does not seem to be a Wikipedia article.") | |||
} | |||
}) | |||
} | } | ||
// End Wikipedia citation tool | // End Wikipedia citation tool | ||
// CC BY-SA checkbox | // CC BY-SA checkbox | ||
if (document.querySelector( | if (document.querySelector(".mw-newarticletext")) { | ||
const checkboxWrapper = document.createElement("div") | |||
checkboxWrapper.innerHTML = | |||
'<div id="mw-editpage-ccbysa" class="oo-ui-layout oo-ui-labelElement oo-ui-fieldLayout oo-ui-fieldLayout-align-inline"><div class="oo-ui-fieldLayout-body"><span class="oo-ui-fieldLayout-field"><span id="wpCcbysaWidget" class="oo-ui-widget oo-ui-widget-enabled oo-ui-inputWidget oo-ui-checkboxInputWidget" data-ooui="{"_":"OO.ui.CheckboxInputWidget","selected":true,"name":"wpCcbysa","inputId":"wpCcbysa","tabIndex":4,"accessKey":"w","required":false}"><input type="checkbox" tabindex="4" accesskey="w" name="wpCcbysa" value="" id="wpCcbysa" class="oo-ui-inputWidget-input" checked="checked"><span class="oo-ui-checkboxInputWidget-checkIcon oo-ui-widget oo-ui-widget-enabled oo-ui-iconElement-icon oo-ui-icon-check oo-ui-iconElement oo-ui-labelElement-invisible oo-ui-iconWidget oo-ui-image-invert"></span></span></span><span class="oo-ui-fieldLayout-header"><label title="Publish this page under CC BY-SA" for="wpCcbysa" class="oo-ui-labelElement-label">Publish under <a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank">CC BY-SA 4.0 International</a> license</label></span></div></div>' | |||
document.querySelector(".editCheckboxes").replaceWith(checkboxWrapper) | |||
const checkbox = checkboxWrapper.firstChild | |||
document.querySelector("textarea").value = | |||
"\n<!-- Please do not edit this line; keep all content above it -->{{CC BY-SA}}" | |||
checkbox.querySelector("input").addEventListener("change", function (e) { | |||
area = document.querySelector("textarea") | |||
if (e.currentTarget.checked) { | |||
area.value = | |||
area.value | |||
.replaceAll("{{CC BY-SA}}", "") | |||
.replaceAll( | |||
"<!-- Please do not edit this line; keep all content above it -->", | |||
"" | |||
) | |||
.trimEnd() + | |||
"\n<!-- Please do not edit this line; keep all content above it -->{{CC BY-SA}}" | |||
} else { | |||
area.value = area.value | |||
.replaceAll("{{CC BY-SA}}", "") | |||
.replaceAll( | |||
"<!-- Please do not edit this line; keep all content above it -->", | |||
"" | |||
) | |||
.trimEnd() | |||
} | |||
}) | |||
document.querySelector(".editCheckboxes").firstChild.appendChild(checkbox) | |||
} | } | ||
if (document.querySelector("#p-personal-label").textContent == "Not logged in") { | if ( | ||
document.querySelector("#p-personal-label").textContent == "Not logged in" | |||
) { | |||
document.querySelectorAll("a.new, .new a").forEach(function (redlink) { | |||
var span = document.createElement("span") | |||
span.textContent = redlink.textContent | |||
} | redlink.replaceWith(span) | ||
}) | |||
} | } | ||
// End CC BY-SA checkbox | // End CC BY-SA checkbox | ||
// MobileEcho | // MobileEcho | ||
var buttonsAdded = false | var buttonsAdded = false | ||
function echoLoading() { | function echoLoading() { | ||
document.body.classList.add("mobileecho-hide-overflow") | |||
if (!buttonsAdded) { | |||
setTimeout(function () { | |||
var closeButton = document.createElement("button") | |||
closeButton.setAttribute( | |||
"class", | |||
"mobileecho-close-button oo-ui-widget oo-ui-widget-enabled oo-ui-iconElement oo-ui-iconElement-icon oo-ui-icon-close oo-ui-labelElement-invisible oo-ui-iconWidget" | |||
) | |||
var headers = document.querySelectorAll(".oo-ui-popupWidget-head") | |||
console.log(headers) | console.log(headers) | ||
var header | |||
for (header in headers) { | |||
var newCloseButton = closeButton.cloneNode() | |||
newCloseButton.addEventListener("click", function () { | |||
document.body.click() | |||
}) | |||
headers[header].appendChild(newCloseButton) | |||
} | |||
}, 500) | |||
buttonsAdded = true | |||
} | |||
setTimeout(function () { | |||
document | |||
.querySelector("a.oo-ui-icon-bell") | |||
.addEventListener("click", echoLoading) | |||
document | |||
.querySelector("a.oo-ui-icon-tray") | |||
.addEventListener("click", echoLoading) | |||
}, 500) | |||
} | } | ||
document.body.addEventListener( | document.body.addEventListener("click", function (e) { | ||
if ( | |||
!document.querySelector(".mw-echo-ui-overlay").contains(e.target) && | |||
!document.querySelector("#personal-extra").contains(e.target) | |||
) { | |||
document.body.classList.remove("mobileecho-hide-overflow") | |||
} | |||
) | }) | ||
document.querySelector( | document | ||
.querySelector("a.oo-ui-icon-bell") | |||
) | .addEventListener("click", echoLoading) | ||
document.querySelector( | document | ||
.querySelector("a.oo-ui-icon-tray") | |||
) | .addEventListener("click", echoLoading) | ||
// End MobileEcho | // End MobileEcho |
Revision as of 17:45, 28 June 2023
// Wikipedia citation tool const textbox = document.querySelector("#wpTextbox1") if (textbox) { const summaryBox = document.querySelector( "#wpSummaryLabel > div:nth-child(1)" ) const label = summaryBox.querySelector("label") label.setAttribute("for", "citations") label.textContent = 'If you quoted a Wikipedia article, paste its Web address (starting with "https://en.wikipedia.org/") here, then click "Add citation." Do this for each article quoted. This is not necessary if the article is already cited in this page.' const input = summaryBox.querySelector("input") input.id = "citations" input.setAttribute("name", "citations") input.setAttribute("title", "Enter URLs to Wikipedia articles") const button = document.createElement("button") button.classList = ["oo-ui-inputWidget-input", "oo-ui-buttonElement-button"] button.style.marginBottom = "1em" button.textContent = "Add citation" summaryBox.appendChild(button) button.addEventListener("click", function (e) { e.preventDefault() const url = input.value const regex = /\/wiki\/(.+)/ // Regex pattern to extract the title const match = url.match(regex) // Perform matching if (url.search("en.wikipedia.org") != -1 && match && match.length > 1) { const title = decodeURIComponent(match[1]).replace(/_/g, " ") const citation = "{{Wikipedia|" + title + "}}" if (textbox.value.search(citation) == -1) { textbox.value = textbox.value.trim() + "\n\n" + citation input.value = "" } } else { alert("That URL does not seem to be a Wikipedia article.") } }) } // End Wikipedia citation tool // CC BY-SA checkbox if (document.querySelector(".mw-newarticletext")) { const checkboxWrapper = document.createElement("div") checkboxWrapper.innerHTML = '<div id="mw-editpage-ccbysa" class="oo-ui-layout oo-ui-labelElement oo-ui-fieldLayout oo-ui-fieldLayout-align-inline"><div class="oo-ui-fieldLayout-body"><span class="oo-ui-fieldLayout-field"><span id="wpCcbysaWidget" class="oo-ui-widget oo-ui-widget-enabled oo-ui-inputWidget oo-ui-checkboxInputWidget" data-ooui="{"_":"OO.ui.CheckboxInputWidget","selected":true,"name":"wpCcbysa","inputId":"wpCcbysa","tabIndex":4,"accessKey":"w","required":false}"><input type="checkbox" tabindex="4" accesskey="w" name="wpCcbysa" value="" id="wpCcbysa" class="oo-ui-inputWidget-input" checked="checked"><span class="oo-ui-checkboxInputWidget-checkIcon oo-ui-widget oo-ui-widget-enabled oo-ui-iconElement-icon oo-ui-icon-check oo-ui-iconElement oo-ui-labelElement-invisible oo-ui-iconWidget oo-ui-image-invert"></span></span></span><span class="oo-ui-fieldLayout-header"><label title="Publish this page under CC BY-SA" for="wpCcbysa" class="oo-ui-labelElement-label">Publish under <a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank">CC BY-SA 4.0 International</a> license</label></span></div></div>' document.querySelector(".editCheckboxes").replaceWith(checkboxWrapper) const checkbox = checkboxWrapper.firstChild document.querySelector("textarea").value = "\n<!-- Please do not edit this line; keep all content above it -->{{CC BY-SA}}" checkbox.querySelector("input").addEventListener("change", function (e) { area = document.querySelector("textarea") if (e.currentTarget.checked) { area.value = area.value .replaceAll("{{CC BY-SA}}", "") .replaceAll( "<!-- Please do not edit this line; keep all content above it -->", "" ) .trimEnd() + "\n<!-- Please do not edit this line; keep all content above it -->{{CC BY-SA}}" } else { area.value = area.value .replaceAll("{{CC BY-SA}}", "") .replaceAll( "<!-- Please do not edit this line; keep all content above it -->", "" ) .trimEnd() } }) document.querySelector(".editCheckboxes").firstChild.appendChild(checkbox) } if ( document.querySelector("#p-personal-label").textContent == "Not logged in" ) { document.querySelectorAll("a.new, .new a").forEach(function (redlink) { var span = document.createElement("span") span.textContent = redlink.textContent redlink.replaceWith(span) }) } // End CC BY-SA checkbox // MobileEcho var buttonsAdded = false function echoLoading() { document.body.classList.add("mobileecho-hide-overflow") if (!buttonsAdded) { setTimeout(function () { var closeButton = document.createElement("button") closeButton.setAttribute( "class", "mobileecho-close-button oo-ui-widget oo-ui-widget-enabled oo-ui-iconElement oo-ui-iconElement-icon oo-ui-icon-close oo-ui-labelElement-invisible oo-ui-iconWidget" ) var headers = document.querySelectorAll(".oo-ui-popupWidget-head") console.log(headers) var header for (header in headers) { var newCloseButton = closeButton.cloneNode() newCloseButton.addEventListener("click", function () { document.body.click() }) headers[header].appendChild(newCloseButton) } }, 500) buttonsAdded = true } setTimeout(function () { document .querySelector("a.oo-ui-icon-bell") .addEventListener("click", echoLoading) document .querySelector("a.oo-ui-icon-tray") .addEventListener("click", echoLoading) }, 500) } document.body.addEventListener("click", function (e) { if ( !document.querySelector(".mw-echo-ui-overlay").contains(e.target) && !document.querySelector("#personal-extra").contains(e.target) ) { document.body.classList.remove("mobileecho-hide-overflow") } }) document .querySelector("a.oo-ui-icon-bell") .addEventListener("click", echoLoading) document .querySelector("a.oo-ui-icon-tray") .addEventListener("click", echoLoading) // End MobileEcho