提供: Japanese Scratch-Wiki
細 (→これでいける?) |
|||
9行目: | 9行目: | ||
console.info("loading:common.js"); | console.info("loading:common.js"); | ||
const wiki = {}; | const wiki = {}; | ||
− | wiki.getSkin = () | + | wiki.getSkin = function(){ |
return mw.config.get("skin"); | return mw.config.get("skin"); | ||
} | } | ||
− | wiki.getAction = () | + | wiki.getAction = function(){ |
return mw.config.get("wgAction"); | return mw.config.get("wgAction"); | ||
} | } | ||
− | wiki.getCategory = () | + | wiki.getCategory = function(){ |
return mw.config.get("wgCategories"); | return mw.config.get("wgCategories"); | ||
} | } | ||
− | wiki.isArticle = () | + | wiki.isArticle = function(){ |
return mw.config.get("wgIsArticle"); | return mw.config.get("wgIsArticle"); | ||
} | } | ||
− | wiki.isRedirect = () | + | wiki.isRedirect = function(){ |
return mw.config.get("wgIsRedirect"); | return mw.config.get("wgIsRedirect"); | ||
} | } | ||
− | wiki.pageName = () | + | wiki.pageName = function(){ |
return mw.config.get("wgPageName"); | return mw.config.get("wgPageName"); | ||
} | } | ||
− | wiki.pageNamespace = () | + | wiki.pageNamespace = function(){ |
return mw.config.get("wgNamespaceNumber"); | return mw.config.get("wgNamespaceNumber"); | ||
} | } | ||
− | wiki.userName = () | + | wiki.userName = function(){ |
return mw.config.get("wgUserName"); | return mw.config.get("wgUserName"); | ||
} | } | ||
− | wiki.userEditNumber = () | + | wiki.userEditNumber = function(){ |
return mw.config.get("wgUserEditCount"); | return mw.config.get("wgUserEditCount"); | ||
} | } | ||
− | + | const fireEvent = function(name){ | |
− | |||
− | |||
− | |||
− | |||
var event = null; | var event = null; | ||
name = name + (name?"_":""); | name = name + (name?"_":""); | ||
if(wiki.pageNamespace() === -1){ /* 特別 */ | if(wiki.pageNamespace() === -1){ /* 特別 */ | ||
− | event = new | + | event = new CustomEvent(name + "special"); |
}else if(wiki.pageNamespace() === 0){ /* 無名 */ | }else if(wiki.pageNamespace() === 0){ /* 無名 */ | ||
− | event = new | + | event = new CustomEvent(name + "normal"); |
}else if(wiki.pageNamespace() === 1){ /* 議論 */ | }else if(wiki.pageNamespace() === 1){ /* 議論 */ | ||
− | event = new | + | event = new CustomEvent(name + "talk"); |
}else if(wiki.pageNamespace() === 2){ /* 利用者 */ | }else if(wiki.pageNamespace() === 2){ /* 利用者 */ | ||
− | event = new | + | event = new CustomEvent(name + "user"); |
}else if(wiki.pageNamespace() === 6){ /* ファイル */ | }else if(wiki.pageNamespace() === 6){ /* ファイル */ | ||
− | event = new | + | event = new CustomEvent(name + "file"); |
}else if(wiki.pageNamespace() === 10){ /* テンプレート */ | }else if(wiki.pageNamespace() === 10){ /* テンプレート */ | ||
− | event = new | + | event = new CustomEvent(name + "template"); |
}else if(wiki.pageNamespace() === 12){ /* ヘルプ */ | }else if(wiki.pageNamespace() === 12){ /* ヘルプ */ | ||
− | event = new | + | event = new CustomEvent(name + "help"); |
}else if(wiki.pageNamespace() === 14){ /* カテゴリ */ | }else if(wiki.pageNamespace() === 14){ /* カテゴリ */ | ||
− | event = new | + | event = new CustomEvent(name + "category"); |
} | } | ||
window.dispatchEvent(event); | window.dispatchEvent(event); | ||
195行目: | 191行目: | ||
case "view": | case "view": | ||
console.info("work:common.js/view"); | console.info("work:common.js/view"); | ||
− | event = new | + | event = new CustomEvent("view"); |
window.dispatchEvent(event); | window.dispatchEvent(event); | ||
− | + | fireEvent("view"); | |
break; | break; | ||
case "edit": | case "edit": | ||
console.info("work:common.js/edit"); | console.info("work:common.js/edit"); | ||
− | event = new | + | event = new CustomEvent("edit"); |
window.dispatchEvent(event); | window.dispatchEvent(event); | ||
− | + | fireEvent("edit"); | |
break; | break; | ||
case "history": | case "history": | ||
console.info("work:common.js/history"); | console.info("work:common.js/history"); | ||
− | event = new | + | event = new CustomEvent("history"); |
window.dispatchEvent(event); | window.dispatchEvent(event); | ||
− | + | fireEvent("his"); | |
break; | break; | ||
} | } | ||
− | + | fireEvent(); | |
event = null; | event = null; | ||
}); | }); |
2020年5月19日 (火) 22:57時点における版
/*
このJavaScriptはCC0です。
ほかの場所で使う場合、動作の保障はありません。自己責任で使用してください。
*/
const errorList = [];
window.addEventListener("error",function(e){
errorList.push(e.message);
});
console.info("loading:common.js");
const wiki = {};
wiki.getSkin = function(){
return mw.config.get("skin");
}
wiki.getAction = function(){
return mw.config.get("wgAction");
}
wiki.getCategory = function(){
return mw.config.get("wgCategories");
}
wiki.isArticle = function(){
return mw.config.get("wgIsArticle");
}
wiki.isRedirect = function(){
return mw.config.get("wgIsRedirect");
}
wiki.pageName = function(){
return mw.config.get("wgPageName");
}
wiki.pageNamespace = function(){
return mw.config.get("wgNamespaceNumber");
}
wiki.userName = function(){
return mw.config.get("wgUserName");
}
wiki.userEditNumber = function(){
return mw.config.get("wgUserEditCount");
}
const fireEvent = function(name){
var event = null;
name = name + (name?"_":"");
if(wiki.pageNamespace() === -1){ /* 特別 */
event = new CustomEvent(name + "special");
}else if(wiki.pageNamespace() === 0){ /* 無名 */
event = new CustomEvent(name + "normal");
}else if(wiki.pageNamespace() === 1){ /* 議論 */
event = new CustomEvent(name + "talk");
}else if(wiki.pageNamespace() === 2){ /* 利用者 */
event = new CustomEvent(name + "user");
}else if(wiki.pageNamespace() === 6){ /* ファイル */
event = new CustomEvent(name + "file");
}else if(wiki.pageNamespace() === 10){ /* テンプレート */
event = new CustomEvent(name + "template");
}else if(wiki.pageNamespace() === 12){ /* ヘルプ */
event = new CustomEvent(name + "help");
}else if(wiki.pageNamespace() === 14){ /* カテゴリ */
event = new CustomEvent(name + "category");
}
window.dispatchEvent(event);
}
document.body.insertAdjacentHTML("afterbegin",`<div style="position:fixed;top:0px;left:0px;width:20%;" id="editor_tool"></div>`);
let def = {};
def.search =function(val){
location.href = "https://ja.scratch-wiki.info/w/index.php?title=特別:検索&search=" + val + "&fulltext=検索&profile=all";
}
def.template1 = function(){
document.head.insertAdjacentHTML("beforeend","<style type='text/css'>.summary + div{display:none;}.summary:focus,.summary + div:focus{display:block;}</style>");
document.getElementById("editor_tool").insertAdjacentHTML("afterend",`
<details style='background:#ccc;box-shadow: 0 0 3px rgba(0,0,0,0.25);'>
<summary>ツールバーを展開 
<input onchange=def.search(this.value); placeholder='すべてを対象に検索'> 
<span onclick=def.editMode();>編集モードに移行</span>
<a href='https://ja.scratch-wiki.info/wiki/メインページ'>メインページへ</a>
</summary>
<div>
<span onclick="def.errorList();">ハンドルされたエラー</span> 
<span onclick="def.scratchPad();">JavaScriptスクラッチパッド</span> 
<span onclick="def.sbPad();">ブロックプラグインテスト</span> 
</div>
<div>
<ul style='list-style:none;'>
<li><a href='/wiki/特別:特別ページ一覧'>特別ページ一覧</a></li>
<li><a href='/wiki/特別:最近の更新'>最近の更新</a></li>
<li><a href='/wiki/特別:アップロード'>ファイルをアップロード</a></li>
<li><a href='/wiki/特別:不正利用フィルター'>ファイルをア不正利用フィルターの管理と記録</a></li>
<li><a href='/wiki/JS:CP'>コミュニティーポータル</a></li>
</ul>
<div>
<a href='https://ja.scratch-wiki.info/w/index.php?title=利用者:227kei/common.js&action=edit'>common.jsを管理します</a>
</div>
</div>
</details>`);
}
def.editMode = function(){
document.body.insertAdjacentHTML("afterbegin",`<style>#navigation,#footer,#view > div > div > div.left{display:none !important;}#content,#wpTextbox1{font-size:1.1em;font-family:monospace,'メイリオ',sans-serif;}#box{position:fixed;top:10px;left:10px;width:calc(100% - 20px);}</style>`);
}
def.scratchPad = function(){
document.body.insertAdjacentHTML("afterbegin",`<div style="background:rgba(0,0,0,0.2);"><textarea onblur="console.info(eval(this.value));" placeholder="JavaScript" style="width:90%;"></textarea></div>`);
}
def.sbPad = function(){
document.body.insertAdjacentHTML("afterbegin",`<div style="background:rgba(0,0,0,0.2);"><textarea onblur="console.info(eval(this.value));" placeholder="ブロックプラグインコード" style="width:90%;"></textarea><div id="sb_output"></div></div>`);
document.getElementById("sb_code").addEventListener("keyup",function(e){
let content = this.value;
const output = document.getElementById("sb_output");
content = content.replace(/</g,"<").replace(/>/g,">").replace(/(\n\r|\r\n|\r|\n){2}/g,"<br>");
{
const matchReg = new RegExp("={2,4}");
while(content.match(matchReg)){
const result = content.match(/={2,4}/g);
if(result.length > 0 && (result.length % 2) === 0){
content = content.replace(matchReg,`<h${result[0].length}>`);
content = content.replace(matchReg,`</h${result[0].length}>`);
}else{
break;
}
}
}
{
const matchReg = new RegExp("'{3}");
while(content.match(matchReg)){
const result = content.match(/'{3}/g);
if(result.length > 0 && (result.length % 2) === 0){
content = content.replace(matchReg,`<span style="font-weight:bold;">`);
content = content.replace(matchReg,`</span>`);
}else{
break;
}
}
}
const evalHTMLTag = (tagName) => {
{
const reg = new RegExp(`<\\s*${tagName}.*?>`,"gi");
const matchs = content.match(reg);
if(matchs){
matchs.forEach(i => {
content = content.replace(i,"<" + i.slice(4,-4) + ">");
});
}
}
{
const reg = new RegExp(`<\\s*\/\\s*${tagName}.*?>`,"gi");
const matchs = content.match(reg);
if(matchs){
matchs.forEach(i => {
content = content.replace(i,"<" + i.slice(4,-4) + ">");
});
}
}
}
evalHTMLTag("div");
evalHTMLTag("span");
evalHTMLTag("sb");
evalHTMLTag("scratchblocks");
output.innerHTML = content;
const evalSB = (eleName,{style,inline,scale} = {}) => {
const sbtag = dom.getByTagName(eleName,output);
for(const i of sbtag){
const doc = scratchblocks.parse(i.innerHTML,{
languages:['ja','en'],
inline
});
const docView = scratchblocks.newView(doc, {
style:"scratch" + (style || 3),
});
const svg = docView.render();
i.insertAdjacentElement("afterend",svg);
if(scale){
svg.setAttribute("width",svg.clientWidth * scale);
svg.setAttribute("height",svg.clientHeight * scale);
svg.setAttribute("viewBox","0 0 " + svg.clientWidth / scale + " " + svg.clientHeight / scale);
}
if(inline){
svg.style.verticalAlign = "top";
}
dom.remove(i);
}
}
evalSB("scratchblocks");
evalSB("sb",{inline:true});
});
}
def.errorList = function(){
document.body.insertAdjacentHTML("afterbegin",`<div style="background:rgba(0,0,0,0.2);" id="errorList"></div>`);
errorList.forEach(i => {
document.getElementById("errorList").insertAdjacentHTML("afterend","<div style='border-bottom:1px solid #555;background:#ccc;'>" + e + "</div>");
});
}
console.info("setup:common.js");
window.addEventListener("load",function(){
var event = "";
switch(wiki.getAction()){
case "view":
console.info("work:common.js/view");
event = new CustomEvent("view");
window.dispatchEvent(event);
fireEvent("view");
break;
case "edit":
console.info("work:common.js/edit");
event = new CustomEvent("edit");
window.dispatchEvent(event);
fireEvent("edit");
break;
case "history":
console.info("work:common.js/history");
event = new CustomEvent("history");
window.dispatchEvent(event);
fireEvent("his");
break;
}
fireEvent();
event = null;
});
window.addEventListener("view",function(){
console.info("catch:common.js/onView");
def.template1();
});
window.addEventListener("edit",function(){
console.info("catch:common.js/onEdit");
def.template1();
});
window.addEventListener("edit_talk",function(){
console.info("catch:common.js/onEdit.Talk");
document.getElementById("editor_tool").insertAdjacentHTML("afterend","<center style='background:rgba(0,0,0,0.2);'><b>署名を忘れないでください。</b></center>署名忘れ:<code><nowiki>{{unsigned2|ユーザー名|XXXX-0X-XX XX:XXJST}}</nowiki></code>");
});
console.info("loaded:common.js");