注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください。
$(function() {
window.PBWTools = {
collapseToolbar: function () {
var toolbarCollapsed = mw.storage.get("pbw-toolbar-collapsed") !== "true" ? false : true;
$("<div>").addClass("cosmos-toolbar-collapse-button").appendTo("#cosmos-toolbar");
$(".cosmos-toolbar-collapse-button").click(function(target) {
$("#cosmos-toolbar").toggleClass("cosmos-toolbar-collapsed");
mw.storage.set("pbw-toolbar-collapsed", !toolbarCollapsed);
});
if (toolbarCollapsed) {
$("#cosmos-toolbar").addClass("cosmos-toolbar-collapsed");
}
},
init: function () {
mw.loader.using("mediawiki.storage").then(this.collapseToolbar);
}
};
window.PBWTools.init();
});
/*font tag for HTML5*/
document.querySelectorAll("font").forEach(function(element){
element.style.color=element.getAttribute("color")||"";
element.style.fontFamily=element.getAttribute("face")||"";
element.style.fontSize=["x-small","small","medium","large","x-large","xx-large","xxx-large"][Number(element.getAttribute("size"))-1||2]||"";
});
/*cosmos-banner*/
(function(){
let myHomeLink=document.createElement("div");
myHomeLink.innerHTML=`<a href="/">ポリティボールwiki</a>`;
myHomeLink.id="mw-banner-home";
myHomeLink.classList.add("visible");
document.getElementById("cosmos-banner-content").prepend(myHomeLink);
if(window.innerWidth>850&&window.scrollY<60){
document.getElementById("cosmos-banner").classList.add("banner-position-top");
myHomeLink.classList.remove("visible");
}
})();
window.onscroll=function(){
let cosmosBanner=document.getElementById("cosmos-banner");
if(window.scrollY>60){
if(document.querySelector("html").classList.contains("client-darkmode")){
cosmosBanner.style.background="rgba(20,20,20,0.7)";
}
else{
cosmosBanner.style.background="rgba(20,20,20,0.75)";
}
cosmosBanner.style.boxShadow="0 2px 5px rgba(0, 0, 0, .4)";
cosmosBanner.classList.remove("banner-position-top");
document.getElementById("mw-banner-home").classList.add("visible");
}
else{
cosmosBanner.style.background="";
cosmosBanner.style.boxShadow="";
if(window.innerWidth>850){
cosmosBanner.classList.add("banner-position-top");
document.getElementById("mw-banner-home").classList.remove("visible");
}
else{
cosmosBanner.classList.remove("banner-position-top");
}
}
document.body.style.setProperty("--theme-body-background-position","center "+(window.scrollY/(document.body.scrollHeight-window.innerHeight)*((1080-window.innerHeight)/(1080/window.innerHeight*3)))+"px");
};
setInterval(function(){
/*spoiler*/
document.querySelectorAll(".mw-spoiler").forEach(function(element){
element.title="クリックで表示";
element.onclick=function(e){
if(element.classList.contains("mw-spoiler")){
e.preventDefault();
}
element.classList.remove("mw-spoiler");
element.classList.add("mw-spoiler-visible");
element.title="";
};
});
if(document.body.classList.contains("talk-comment-mode--cs")){
document.querySelectorAll("span[data-mw-comment-end]:not(h2 span):not(.splited)").forEach(function(element){
element.after(document.createElement("hr"));
element.classList.add("splited");
});
}
//Reply-Link
if(document.body.classList.contains("ns-talk")){
document.querySelectorAll(".ext-discussiontools-init-replylink-buttons:not(.added):not(.ext-discussiontools-ui-replyWidget-preview .ext-discussiontools-init-replylink-buttons)").forEach(function(element){
let myLink=document.createElement("a");
myLink.innerHTML="返信リンクを追加";
myLink.style.cssText="margin-left:1em;display:none;";
element.after(myLink);
element.classList.add("added");
setInterval(function(){
if(element.classList.contains("ext-discussiontools-init-replylink-active")){
myLink.style.fontWeight="bold";
}
else{
myLink.style.fontWeight="";
}
if(document.querySelector(".ve-ce-attachedRootNode")){
myLink.style.display="inline";
if(element.classList.contains("ext-discussiontools-init-replylink-active")&&!element.classList.contains("clicked")&&document.getElementById("reply-button-click")&&document.getElementById("reply-button-click").checked){
setTimeout(function(){
myLink.click();
},500);
element.classList.add("clicked");
}
}
else{
myLink.style.display="none";
element.classList.remove("clicked");
}
},10);
myLink.addEventListener("click",function(){
document.querySelector(".ve-ce-attachedRootNode").focus();
setTimeout(function(){
document.querySelector(".ve-ce-attachedRootNode span").innerHTML="[[{{FULLPAGENAME}}#"+element.getAttribute("data-mw-thread-id")+"|>>返信先]]\n\n"+document.querySelector(".ve-ce-attachedRootNode span").innerHTML;
document.querySelector(".ve-ce-attachedRootNode").blur();
document.querySelector(".ve-ce-attachedRootNode").focus();
},1000);
});
});
document.querySelectorAll("a:not(.added)").forEach(function(element){
if(decodeURI(element.href).indexOf("#c-")!=-1&&element.classList.contains("mw-selflink-fragment")){
let inputNode=document.getElementById(decodeURI(element.href).split("#")[1]).parentElement.cloneNode(true);
element.title=inputNode.textContent;
element.classList.add("added");
}
});
}
},100);
/*Snow Flake Fnc
(function(){
for(var yukiLength=0;yukiLength<(Math.round(document.body.offsetHeight/40)<500?Math.round(document.body.offsetHeight/40):500);yukiLength++){
let myimg=document.createElement("img");
myimg.src="https://japolandballfanon.miraheze.org/wiki/Special:FilePath/Pagesnowflake.svg";
myimg.width="40";
myimg.height="40";
myimg.style.cssText="position:absolute;";
myimg.style.top=(Math.floor(Math.random() *(document.body.offsetHeight-40))+1)+"px";
myimg.style.left=(Math.floor(Math.random() *(document.body.offsetWidth-40))+1)+"px";
document.body.style.background=window.getComputedStyle(document.getElementById("mw-content")).background;
document.body.appendChild(myimg);
myimg.onclick=function(){
myimg.remove();
};
}
})();
*/
function addScript(src){
let scr=document.createElement("script");
scr.src="https://japolandball.miraheze.org/wiki/MediaWiki:"+src+".js?action=raw&ctype=text/javascript";
document.body.appendChild(scr);
}
function importItem(href,rel,element="head"){
let link=document.createElement("link");
link.href=href;
link.rel=rel;
document.querySelector(element).appendChild(link);
}
/*iconMaker*/
addScript("IconMaker");
/*AutoFill*/
addScript("AutoFill");
/*AbuseFilter*/
addScript("AbuseFilter");
/*limited design*/
addScript("LimitedDesign");
/*ArticleTemplate*/
addScript("ArticleTemplate");
/*UserColor*/
addScript("LinkColor");
(function(){
document.querySelector(".mw-html-checkbox")?document.querySelectorAll(".mw-html-checkbox").forEach(function(element){
let myZobj={};
let checkbox=document.createElement("input");
checkbox.type="checkbox";
element.innerHTML.replaceAll("\n","").split(";").forEach(function(mypp){
myZobj[mypp.split(":")[0].replaceAll("-","")]=mypp.split(":")[1];
});
myZobj.boxsize?checkbox.style.width=myZobj.boxsize:"";
myZobj.boxsize?checkbox.style.height=myZobj.boxsize:"";
if(myZobj.class){
myZobj.class.split(" ").forEach(function(classData){
checkbox.classList.add(classData);
});
}
myZobj.id?checkbox.id=myZobj.id:"";
myZobj.value?checkbox.value=myZobj.value:"";
myZobj.checked=="true"?checkbox.checked=true:"";
myZobj.disabled=="true"?checkbox.disabled=true:"";
if(myZobj.label){
let mylabel=document.createElement("label");
mylabel.style.userSelect="none";
myZobj.labelfontsize?mylabel.style.fontSize=myZobj.labelfontsize:"";
if(myZobj.labelposition&&myZobj.labelposition=="after"){
mylabel.innerHTML=myZobj.label;
mylabel.appendChild(checkbox);
mylabel.innerHTML+=`<br><span style="font-size:${myZobj.detailfontsize||"0.8em"};">${myZobj.detail||""}</span>`;
}
else{
mylabel.appendChild(checkbox);
mylabel.innerHTML+=myZobj.label+"<br>"+(myZobj.detail?(`<span style="margin-left:${myZobj.boxsize||"1em"};"></span>`):"")+`<span style="font-size:${myZobj.detailfontsize||"0.8em"};">${myZobj.detail||""}</span>`;
}
element.after(mylabel);
}
else{
element.after(checkbox);
}
element.remove();
}):"";
document.querySelector(".mw-html-text")?document.querySelectorAll(".mw-html-text").forEach(function(element){
let myZobj={};
let mytextbox=document.createElement("input");
mytextbox.type="text";
element.innerHTML.replaceAll("\n","").split(";").forEach(function(mypp){
myZobj[mypp.split(":")[0].replaceAll("-","")]=mypp.split(":")[1];
});
mytextbox.value=myZobj.value||"";
mytextbox.placeholder=myZobj.placeholder||"";
if(myZobj.class){
myZobj.class.split(" ").forEach(function(classData){
mytextbox.classList.add(classData);
});
}
mytextbox.id=myZobj.id||"";
mytextbox.style.height=myZobj.height||"";
myZobj.readonly=="true"?mytextbox.readOnly=true:"";
myZobj.disabled=="true"?mytextbox.disabled=true:"";
element.getAttribute("style")?mytextbox.style.cssText=element.getAttribute("style"):"";
element.after(mytextbox);
element.remove();
}):"";
document.getElementById("mw-upload-polandball-rule-checkbox")?document.getElementById("mw-upload-polandball-rule-checkbox").onchange=function(e){
if(e.target.checked){
document.getElementById("mw-upload-polandball-rule-fieldset").style.display="block";
document.querySelector("input[name='wpUpload']").onclick=function(event){
event.preventDefault();
let isCheckboxChecked=true;
for(let myElementLength=0;myElementLength<document.querySelectorAll(".mw-upload-polandball-rule-confirm-checkbox").length;myElementLength++){
if(document.querySelectorAll(".mw-upload-polandball-rule-confirm-checkbox")[myElementLength].checked==false){
isCheckboxChecked=false;
break;
}
}
if(isCheckboxChecked){
document.querySelector("input[name='wpUpload']").onclick=null;
document.querySelector("input[name='wpUpload']").click();
}
else{
window.alert("ポーランドボールのルールに則ったイラストをアップロードしてください。");
location.hash="";
location.hash="mw-upload-polandball-rule-fieldset";
}
};
}
else{
document.getElementById("mw-upload-polandball-rule-fieldset").style.display="none";
document.querySelector("input[name='wpUpload']").onclick=null;
}
}:"";
if(document.getElementById("wpDestFile")&&document.getElementById("wpDestFile").value!=""){
document.getElementById("mw-upload-polandball-rule-parent-div").innerHTML="<span style='font-size:1.2em;'>※回答済み</span>";
}
document.querySelector(".filehistory,.mw-blocklist")?document.querySelectorAll(".filehistory,.mw-blocklist").forEach(function(element){
let mydiv=document.createElement("div");
mydiv.style.cssText="max-width:100%;overflow-x:auto;";
mydiv.appendChild(element.cloneNode(true));
element.after(mydiv);
element.remove();
}):"";
if(mw.config.values.wgAction=="edit"||mw.config.values.wgAction=="submit"){
let mylabel=document.createElement("label");
mylabel.style.cssText="font-size:1.2em;font-weight:bold;";
mylabel.innerHTML=`<input type="checkbox" id="mw-edit-rule-checker" style="width:1.5em;height:1.5em;margin-right:1.5em"><a href="Project:ルール" style="color:var(--theme-link-color) !important;" target="_blank">ルール</a>をよく読み、これに遵守します。`;
document.getElementById("editpage-copywarn").after(document.createElement("br"));
document.getElementById("editpage-copywarn").after(document.createElement("br"));
document.getElementById("editpage-copywarn").after(mylabel);
document.getElementById("wpSave").onclick=function(e){
e.preventDefault();
if(document.getElementById("mw-edit-rule-checker").checked){
document.getElementById("wpSave").onclick=null;
document.getElementById("wpSave").click();
}
else{
window.alert("wikiのルールに則った編集を行ってください。過激な発言等は削除されます。");
if(window.confirm("ルールに同意して保存しますか?\n編集画面に戻る際はキャンセルを選択してください。")){
document.getElementById("mw-edit-rule-checker").checked=true;
document.getElementById("wpSave").onclick=null;
document.getElementById("wpSave").click();
}
}
};
}
if(document.getElementById("template-cursor")){
document.querySelector("html").style.cssText="--theme-page-cursor:url(/wiki/Special:FilePath/"+document.getElementById("template-cursor-auto").innerHTML+"),auto !important;--theme-page-cursor-link:url(/wiki/Special:FilePath/"+document.getElementById("template-cursor-pointer").innerHTML+"),pointer !important;";
}
if(document.getElementById("mw-upload-file-uploader")){
let mydiv=document.createElement("div");
let myspan=document.createElement("span");
mydiv.id="mw-upload-file-uploader-area";
myspan.id="mw-upload-file-uploader-text";
myspan.innerHTML="ファイルをここにドロップ";
mydiv.appendChild(myspan);
document.body.appendChild(mydiv);
document.getElementById("mw-upload-file-uploader").remove();
window.ondragover=function(e){
e.preventDefault();
document.getElementById("mw-upload-file-uploader-area").style.display="block";
};
document.body.onmousemove=function(){
document.getElementById("mw-upload-file-uploader-area").style.display="none";
};
document.body.ondrop=function(e){
e.preventDefault();
document.querySelector("input[type='file']").files=e.dataTransfer.files;
document.getElementById("wpDestFile").value==""?document.getElementById("wpDestFile").value=document.querySelector("input[type='file']").files[0].name:"";
document.getElementById("mw-upload-file-uploader-area").style.display="none";
};
}
//Template:LCS
if(document.getElementById("template-lcs")||mw.config.values.wgNamespaceNumber==1){
document.body.classList.add("talk-comment-mode--cs");
}
//Template:DSC
if(document.getElementById("template-dsc")){
document.body.classList.remove("talk-comment-mode--cs");
}
//Talk Radio Button
if(document.getElementById("top-notice-ns")&&document.body.classList.contains("ns-talk")){
let myForm=document.createElement("form");
let myLabelDefault=document.createElement("label");
let myLabelCS=document.createElement("label");
let myLabelReply=document.createElement("label");
myLabelDefault.innerHTML=`<input type="radio" name="talkCommentMode" id="talk-comment-mode--default" value="default">デフォルトモード`;
myLabelDefault.style.cssText="margin-right:1em;";
myLabelCS.innerHTML=`<input type="radio" name="talkCommentMode" id="talk-comment-mode--cs" value="cs">疑似CS`;
myLabelCS.style.cssText="margin-right:1em;";
myLabelReply.innerHTML=`<input type="checkbox" id="reply-button-click"><a>>>返信先</a>をデフォルトで入力`;
myLabelReply.style.cssText="margin-right:1em;";
myForm.id="talk-comment-form";
myForm.style.cssText="border-bottom:1px solid var(--theme-text-color);font-size:1.1em;margin-bottom:0.8em;";
myForm.appendChild(myLabelDefault);
myForm.appendChild(myLabelCS);
myForm.appendChild(myLabelReply);
myForm.innerHTML+=`<br><label style="margin-right:1em;"><input type="checkbox" id="template-scroll-button-visibility">スクロールボタンを表示</label>`;
document.getElementById("top-notice-ns").after(myForm);
//talk-comment-mode
if(document.body.classList.contains("talk-comment-mode--cs")){
document.getElementById("talk-comment-mode--cs").checked=true;
}
else{
document.getElementById("talk-comment-mode--default").checked=true;
}
//reply-button-click
if(localStorage.getItem("reply-button-click")){
if(localStorage.getItem("reply-button-click")=="yes"){
document.getElementById("reply-button-click").checked=true;
}
}
else{
localStorage.setItem("reply-button-click","yes");
document.getElementById("reply-button-click").checked=true;
}
//scroll-button-visibility
if(localStorage.getItem("scroll-button-visibility")){
if(localStorage.getItem("scroll-button-visibility")=="visible"){
document.getElementById("template-scroll-button-visibility").checked=true;
}
}
else{
localStorage.setItem("scroll-button-visibility","visible");
document.getElementById("template-scroll-button-visibility").checked=true;
}
myForm.oninput=function(){
if(myForm.talkCommentMode.value=="cs"){
document.body.classList.add("talk-comment-mode--cs");
}
else{
document.body.classList.remove("talk-comment-mode--cs");
document.querySelectorAll("span.splited+hr").forEach(function(element){
element.remove();
});
document.querySelectorAll("span.splited").forEach(function(element){
element.classList.remove("splited");
});
}
};
document.getElementById("reply-button-click").onchange=function(){
if(document.getElementById("reply-button-click").checked){
localStorage.setItem("reply-button-click","yes");
}
else{
localStorage.setItem("reply-button-click","no");
}
};
document.getElementById("template-scroll-button-visibility").onchange=function(){
if(document.getElementById("template-scroll-button-visibility").checked){
localStorage.setItem("scroll-button-visibility","visible");
}
else{
localStorage.setItem("scroll-button-visibility","hidden");
}
};
}
//Scroll Button
if(document.body.classList.contains("ns-talk")||document.getElementById("template-scroll-button")){
let myScrollUpBtn=document.createElement("span");
let myScrollDownBtn=document.createElement("span");
myScrollUpBtn.classList.add("template-scroll-button");
myScrollDownBtn.classList.add("template-scroll-button");
myScrollUpBtn.style.bottom="9em";
myScrollDownBtn.style.bottom="5em";
myScrollUpBtn.innerHTML=`<span class="template-scroll-button-mark template-scroll-button-mark-up"></span>`;
myScrollDownBtn.innerHTML=`<span class="template-scroll-button-mark template-scroll-button-mark-down"></span>`;
document.body.appendChild(myScrollUpBtn);
document.body.appendChild(myScrollDownBtn);
myScrollUpBtn.onclick=function(){
document.querySelector("html").style.scrollBehavior="smooth";
window.scroll(0,0);
document.querySelector("html").style.scrollBehavior="";
};
myScrollDownBtn.onclick=function(){
document.querySelector("html").style.scrollBehavior="smooth";
window.scroll(0,document.body.offsetHeight);
document.querySelector("html").style.scrollBehavior="";
};
setInterval(function(){
if(document.getElementById("template-scroll-button-visibility")){
if(document.getElementById("template-scroll-button-visibility").checked){
myScrollUpBtn.style.display="";
myScrollDownBtn.style.display="";
}
else{
myScrollUpBtn.style.display="none";
myScrollDownBtn.style.display="none";
}
}
},10);
}
//color-menu
if(mw.config.values.wgUserName&&(mw.config.values.wgAction=="edit"||mw.config.values.wgAction=="submit"||document.body.classList.contains("ns-talk"))){
function toHEX(rgbdata){
let rgb=rgbdata.replaceAll("rgba(","").replaceAll("rgb(","").replaceAll(")","").replaceAll(" ","").split(",");
rgb=rgb.map(function(data){
return Number(data);
});
return "#"+rgb.map(function(data){
return ("0"+data.toString(16)).slice(-2);
}).join("");
}
function nn(number){
if(number.length==1){
number="0"+number;
}
return number;
}
let myColor=document.createElement("span");
let myMenu=document.createElement("div");
myColor.id="colorTestButton";
myColor.innerHTML="🎨";
myMenu.id="colorTestMenu";
myMenu.innerHTML=`色合い<br>
<div class="colorTestMenu-colorSelector">文字色<br><input type="color" id="colorTestMenu-color"><br>透明度<br><input type="range" min="0" max="1" value="1" data-value="1" step="0.1" id="colorTestMenu-color-opacity"><span id="colorTestMenu-color-opacity-value" class="colorTestMenu-output">10</span></div>
<div class="colorTestMenu-colorSelector">背景色<br><input type="color" id="colorTestMenu-bgcolor"><br>透明度<br><input type="range" min="0" max="1" value="0" data-value="0" step="0.1" id="colorTestMenu-bgcolor-opacity"><span id="colorTestMenu-bgcolor-opacity-value" class="colorTestMenu-output">0</span></div><br>
プレビュー:<br>
<div id="colorTestMenu-preview" class="colorTestMenu-result">テキスト<br><b>太字テキスト</b><br><a style="color:var(--theme-link-color)">リンクテキスト</a></div>
CSS:<br>
<div class="colorTestMenu-result" id="colorTestMenu-cssText" style="height:2em;user-select:all;">background:;color:;</div>
<input type="button" class="colorTestMenu-copyButton" data-target="colorTestMenu-cssText,innerHTML" value="CSSをコピー"><input type="button" value="リセット" class="colorTestMenu-reset">
<hr>
混色<br>
<div class="colorTestMenu-colorSelector">色A<br><input type="color" id="colorTestMenu-colorA" value="#000000"><br>透明度<br><input type="range" min="0" max="1" value="1" step="0.1" id="colorTestMenu-colorA-opacity"><span id="colorTestMenu-colorA-opacity-value" class="colorTestMenu-output">10</span></div>
<div class="colorTestMenu-colorSelector">色B<br><input type="color" id="colorTestMenu-colorB" value="#ff0000"><br>透明度<br><input type="range" min="0" max="1" value="1" step="0.1" id="colorTestMenu-colorB-opacity"><span id="colorTestMenu-colorB-opacity-value" class="colorTestMenu-output">10</span></div><br>
プレビュー:<br>
<div id="colorTestMenu-mix-preview" class="colorTestMenu-result" style="background:color-mix(in srgb,red,black);"></div>
カラーコード:<br>
<div class="colorTestMenu-result" id="colorTestMenu-mix-colorCode" style="height:2em;user-select:all;">color(srgb 0.5 0 0)</div>
<input type="button" class="colorTestMenu-copyButton" data-target="colorTestMenu-mix-colorCode,innerHTML" value="カラーコードをコピー">
<hr>
カスタムプロパティ一覧<br>
<select id="colorTestMenu-varTable"></select><br>
プレビュー:<br>
ライトモード:<div class="colorTestMenu-varTable-modepreview"><div class="client-defaultmode"></div></div><br>
ダークモード:<div class="colorTestMenu-varTable-modepreview"><div class="client-darkmode"></div></div><br>
CSS:<br>
<div class="colorTestMenu-result" id="colorTestMenu-varTable-property" style="height:2em;user-select:all;"></div>
<input type="button" class="colorTestMenu-copyButton" data-target="colorTestMenu-varTable-property,innerHTML" value="CSSをコピー"><br><br>
値として利用:<br>
<div class="colorTestMenu-result" id="colorTestMenu-varTable-value" style="height:2em;user-select:all;"></div>
<input type="button" class="colorTestMenu-copyButton" data-target="colorTestMenu-varTable-value,innerHTML" value="値をコピー">
`;
document.body.appendChild(myColor);
document.body.appendChild(myMenu);
myColor.onclick=function(){
myMenu.classList.toggle("visible");
if(myMenu.classList.contains("visible")){
let closeArea=document.createElement("div");
closeArea.style.cssText="background:transparent;position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:2999;";
closeArea.id="colorTestCloseArea";
closeArea.onclick=function(){
myColor.click();
};
document.body.appendChild(closeArea);
myColor.innerHTML="✕";
}
else{
myColor.innerHTML="🎨";
document.getElementById("colorTestCloseArea").remove();
}
};
let sbody=document.createElement("div");
sbody.style.cssText="background:var(--theme-main-color);color:var(--theme-text-color);";
document.body.appendChild(sbody);
document.getElementById("colorTestMenu-color").value=document.getElementById("colorTestMenu-color").dataset.value=toHEX(window.getComputedStyle(sbody).color);
document.getElementById("colorTestMenu-bgcolor").value=document.getElementById("colorTestMenu-bgcolor").dataset.value=toHEX(window.getComputedStyle(sbody).getPropertyValue("background-color"));
document.getElementById("colorTestMenu-cssText").innerHTML="background:"+toHEX(window.getComputedStyle(sbody).getPropertyValue("background-color"))+"00;color:"+toHEX(window.getComputedStyle(sbody).color)+"ff;";
sbody.remove();
function inputAreaFnc(){
let color=document.getElementById("colorTestMenu-color");
let coloropa=document.getElementById("colorTestMenu-color-opacity");
let bg=document.getElementById("colorTestMenu-bgcolor");
let bgopa=document.getElementById("colorTestMenu-bgcolor-opacity");
let colorA=document.getElementById("colorTestMenu-colorA");
let colorAopa=document.getElementById("colorTestMenu-colorA-opacity");
let colorB=document.getElementById("colorTestMenu-colorB");
let colorBopa=document.getElementById("colorTestMenu-colorB-opacity");
document.getElementById("colorTestMenu-preview").style.cssText=document.getElementById("colorTestMenu-cssText").innerHTML="background:"+bg.value+nn(Math.round(bgopa.value*255).toString(16))+";color:"+color.value+nn(Math.round(coloropa.value*255).toString(16))+";";
document.getElementById("colorTestMenu-color-opacity-value").innerHTML=coloropa.value*10;
document.getElementById("colorTestMenu-bgcolor-opacity-value").innerHTML=bgopa.value*10;
let mix=document.createElement("div");
mix.style.background="color-mix(in srgb,"+colorA.value+nn(Math.round(colorAopa.value*255).toString(16))+","+colorB.value+nn(Math.round(colorBopa.value*255).toString(16))+")";
document.body.appendChild(mix);
document.getElementById("colorTestMenu-mix-preview").style.background=document.getElementById("colorTestMenu-mix-colorCode").innerHTML=window.getComputedStyle(mix).getPropertyValue("background-color");
mix.remove();
document.getElementById("colorTestMenu-colorA-opacity-value").innerHTML=colorAopa.value*10;
document.getElementById("colorTestMenu-colorB-opacity-value").innerHTML=colorBopa.value*10;
}
let customProperty=[["文字色","--theme-text-color"],["リンク色","--theme-link-color"],["hover時のリンク色","--theme-link-color--hover"],["メインカラー","--theme-main-bg-color"],["中間色","--theme-page-second-color"]];
let cps=document.getElementById("colorTestMenu-varTable");
customProperty.forEach(function(data){
let myOption=document.createElement("option");
myOption.innerHTML=data[0];
myOption.value=data[1];
cps.appendChild(myOption);
});
document.getElementById("colorTestMenu-varTable-value").innerHTML=customProperty[0][1]+":;";
function selectVarTableFnc(){
document.getElementById("colorTestMenu-varTable-property").innerHTML=cps.value+":;";
document.getElementById("colorTestMenu-varTable-value").innerHTML="var("+cps.value+")";
document.querySelectorAll(".colorTestMenu-varTable-modepreview").forEach(function(element){
element.querySelector("div").style.background="var("+cps.value+")";
});
}
selectVarTableFnc();
cps.oninput=selectVarTableFnc;
myMenu.oninput=inputAreaFnc;
document.querySelector(".colorTestMenu-copyButton")?document.querySelectorAll(".colorTestMenu-copyButton").forEach(function(element){
if(window.isSecureContext){
element.onclick=function(){
let originValue=element.value;
navigator.clipboard.writeText(document.getElementById(element.dataset.target.split(",")[0])[element.dataset.target.split(",")[1]]);
element.value="コピーしました";
element.disabled=true;
setTimeout(function(){
element.value=originValue;
element.disabled=false;
},1000);
};
}
else{
element.remove();
}
}):"";
document.querySelector(".colorTestMenu-reset")?document.querySelectorAll(".colorTestMenu-reset").forEach(function(reset){
reset.onclick=function(){
document.querySelectorAll("#colorTestMenu input[data-value]").forEach(function(element){
element.value=element.dataset.value;
inputAreaFnc();
});
};
}):"";
}
//upload-icon
if(mw.config.values.wgUserName){
let uploadIcon=document.createElement("a");
uploadIcon.classList.add("wds-button");
uploadIcon.classList.add("wds-is-secondary");
uploadIcon.href="https://japolitiball.myht.org/index.php?title=Special:Upload";
uploadIcon.innerHTML="<img src='https://japolandball.miraheze.org/wiki/Special:FilePath/Upload-icon.svg' width='22' height='22' class='wds-icon-small'>";
uploadIcon.title="ファイルをアップロード";
document.getElementById("createpage").after(uploadIcon);
}
//Template:CF
if(document.getElementById("template-cf")){
let myStorage=localStorage.getItem("template-cf")||"";
let visible=true;
for(let data of myStorage.split("\n")){
if(mw.config.values.wgPageName==data){
visible=false;
break;
}
}
if(visible){
let mydiv=document.createElement("div");
mydiv.classList.add("template-confirm");
mydiv.id="template-cf-confirmbox";
mydiv.innerHTML=`<div class="template-confirm-main" id="template-cf-confirmbox-main" style="background:${document.getElementById("template-cf-bgcolor").innerHTML};color:${document.getElementById("template-cf-color").innerHTML};"><span style="font-size:1.2em;font-weight:bold;display:inline-block;margin-bottom:0.5em;">${document.getElementById("template-cf-title").innerHTML}</span>
<br>
${document.getElementById("template-cf-message").innerHTML}<br><br>
<label style="font-size:0.9em;position:relative;top:1em;"><input type="checkbox" id="template-cf-checkbox" style="width:0.9em;height:0.9em;">次回からは表示しない</label>
<br>
<a href="/wiki/Template:CF/doc" style="--theme-link-color:#003399;font-size:0.8em;position:relative;top:2em;">詳細</a><br>
<div style="text-align:right;">
<input type="button" value="いいえ" id="template-cf-cancel-btn">
<input type="button" value="はい" id="template-cf-ok-btn" style="background:var(--theme-main-bg-color);color:white;border-color:var(--theme-main-bg-color);">
</div></div>`;
document.body.appendChild(mydiv);
window.scroll(0,0);
document.body.style.overflow="hidden";
document.getElementById("mw-content").style.filter="blur(5px)";
document.getElementById("template-cf-confirmbox-main").style.top=((window.innerHeight-document.getElementById("template-cf-confirmbox-main").offsetHeight)/2)+"px";
document.getElementById("template-cf-cancel-btn").onclick=function(){
document.getElementById("template-cf-checkbox").checked=false;
document.querySelector("#template-cf-return a").click();
};
document.getElementById("template-cf-ok-btn").onclick=function(){
document.body.style.overflow="auto";
document.getElementById("mw-content").style.filter="";
if(document.getElementById("template-cf-checkbox").checked){
myStorage+=mw.config.values.wgPageName+"\n";
localStorage.setItem("template-cf",myStorage);
}
mydiv.remove();
};
document.getElementById("template-cf-ok-btn").focus();
}
}
if(document.getElementById("template-cf-form")){
let myStorage=localStorage.getItem("template-cf");
let textarea=document.createElement("textarea");
textarea.value=myStorage;
textarea.oninput=function(){
localStorage.setItem("template-cf",textarea.value);
};
textarea.onblur=function(){
if(textarea.value.split("")[textarea.value.length-1]!="\n"&&textarea.value!=""){
textarea.value+="\n";
localStorage.setItem("template-cf",textarea.value);
}
};
textarea.style.cssText="width:90%;height:300px;font-size:1em;";
document.getElementById("template-cf-textarea").after(textarea);
document.getElementById("template-cf-textarea").remove();
document.getElementById("template-cf-reload").onclick=function(e){
if(!e.target.classList.contains("clicked")){
let loadmsg=document.createElement("div");
textarea.style.display="none";
loadmsg.innerHTML="読み込み中...";
textarea.after(loadmsg);
e.target.classList.add("clicked");
setTimeout(function(){
textarea.value=localStorage.getItem("template-cf");
textarea.style.display="inline-block";
loadmsg.remove();
e.target.classList.remove("clicked");
},1000);
}
};
}
/*template-imageLoad*/
if(document.getElementById("template-imageLoad")){
document.querySelectorAll("img").forEach(function(element){
element.src?element.src=element.src:"";
});
}
//Button Tag
document.querySelector(".mw-html-button")?document.querySelectorAll(".mw-html-button").forEach(function(element){
let myZobj={};
let mybtn=document.createElement("input");
mybtn.type="button";
element.innerHTML.replaceAll("\n","").split(";").forEach(function(mypp){
myZobj[mypp.split(":")[0].replaceAll("-","")]=mypp.split(":")[1];
});
mybtn.value=myZobj.value||"";
if(myZobj.class){
myZobj.class.split(" ").forEach(function(classData){
mybtn.classList.add(classData);
});
}
mybtn.id=myZobj.id||"";
mybtn.style.height=myZobj.height||"";
myZobj.readonly=="true"?mybtn.readOnly=true:"";
myZobj.disabled=="true"?mybtn.disabled=true:"";
element.getAttribute("style")?mybtn.style.cssText=element.getAttribute("style"):"";
element.after(mybtn);
element.remove();
}):"";
//File Tag
document.querySelector(".mw-html-file")?document.querySelectorAll(".mw-html-file").forEach(function(element){
let myZobj={};
let mybtn=document.createElement("input");
mybtn.type="file";
element.innerHTML.replaceAll("\n","").split(";").forEach(function(mypp){
myZobj[mypp.split(":")[0].replaceAll("-","")]=mypp.split(":")[1];
});
if(myZobj.class){
myZobj.class.split(" ").forEach(function(classData){
mybtn.classList.add(classData);
});
}
mybtn.id=myZobj.id||"";
myZobj.readonly=="true"?mybtn.readOnly=true:"";
myZobj.disabled=="true"?mybtn.disabled=true:"";
element.getAttribute("style")?mybtn.style.cssText=element.getAttribute("style"):"";
element.after(mybtn);
element.remove();
}):"";
//Extension Conversion
if(document.getElementById("page-ec")){
function topngFnc(){
let myfile=document.getElementById("mypage-topng-upload-btn");
let r=new FileReader();
r.readAsDataURL(myfile.files[0]);
r.onload=function(){
let myimg=new Image();
myimg.src=r.result;
myimg.onload=function(){
let mycanvas=document.createElement("canvas");
let myctx=mycanvas.getContext("2d");
mycanvas.height=myimg.height;
mycanvas.width=myimg.width;
myctx.drawImage(myimg,0,0,mycanvas.width,mycanvas.height);
document.getElementById("mypage-topng-change-btn").value="ダウンロード";
document.getElementById("mypage-topng-upload-btn").style.display="none";
document.getElementById("mypage-topng-retry").style.display="inline-block";
document.getElementById("mypage-topng-change-btn").onclick=function(){
let mya=document.createElement("a");
mya.href=mycanvas.toDataURL();
mya.download=(document.getElementById("mypage-topng-upload-after-name").value||"download").split(".")[0]+".png";
mya.click();
};
document.getElementById("mypage-topng-retry").onclick=function(){
document.getElementById("mypage-topng-upload-btn").style.display="inline-block";
document.getElementById("mypage-topng-upload-btn").value="";
document.getElementById("mypage-topng-change-btn").value="変換";
document.getElementById("mypage-topng-change-btn").onclick=topngFnc;
document.getElementById("mypage-topng-upload-data").style.display="none";
document.getElementById("mypage-topng-upload-file-name").innerHTML="";
document.getElementById("mypage-topng-upload-after-name").value="";
document.getElementById("mypage-topng-retry").style.display="none";
};
};
myimg.onerror=function(){
window.alert("エラーが発生しました。");
};
};
}
document.getElementById("mypage-topng-upload-btn").onchange=function(e){
document.getElementById("mypage-topng-upload-file-name").innerHTML=e.target.files[0].name;
document.getElementById("mypage-topng-upload-after-name").value=e.target.files[0].name.split(".")[0];
document.getElementById("mypage-topng-upload-data").style.display="block";
};
document.getElementById("mypage-topng-change-btn").onclick=topngFnc;
}
let myobj={};
document.querySelector("span.sitestyle")?document.querySelector("span.sitestyle").innerHTML.replaceAll("\n","").split(";").forEach(function(mypp){
myobj[mypp.split(":")[0]]=mypp.split(":")[1];
}):"";
document.getElementById("mw-content").style.background=myobj.bgcolor?("color-mix(in srgb, "+myobj.bgcolor+" var(--theme-mode-opacity), rgba(var(--theme-page-color--rgb),0.9))"):"";
myobj.maincolor?document.querySelector("html").style.setProperty("--theme-main-bg-color",myobj.maincolor):"";
myobj.link?document.querySelector("html").style.setProperty("--theme-link-color",myobj.link):"";
myobj.linkhover?document.querySelector("html").style.setProperty("--theme-link-color--hover",myobj.linkhover):"";
document.querySelector(".cosmos-header").style.background=myobj.headerbg||"";
document.querySelector(".cosmos-header").style.color=myobj.headercolor||"";
})();
//jsload-delete
(function(){
document.querySelector(".jsload-delete")?document.querySelectorAll(".jsload-delete").forEach(function(element){
element.remove();
}):"";
})();