提供: Japanese Scratch-Wiki

< 利用者:227kei

3行目: 3行目:
 
     ほかの場所で使う場合、動作の保障はありません。自己責任で使用してください。
 
     ほかの場所で使う場合、動作の保障はありません。自己責任で使用してください。
 
*/
 
*/
 +
const errorList = [];
 +
window.addEventListener("error",(e) => {
 +
    errorList.push(e.message);
 +
});
 
console.info("loading:common.js");
 
console.info("loading:common.js");
var mw = {};
+
const wiki = {};
mw.getSkin = mw.config.get("skin");
+
wiki.getSkin = () => {
mw.getAction = mw.config.get("wgAction");
+
    return mw.config.get("skin");
mw.getClass = mw.config.get("wgCategories");
+
}
mw.isArticle = mw.config.get("wgIsArticle");
+
wiki.getAction = () => {
mw.isRedirect = mw.config.get("wgIsRedirect");
+
    return mw.config.get("wgAction");
mw.getName = mw.config.get("wgPageName");
+
}
mw.getNameClass = mw.config.get("wgNamespaceNumber");
+
wiki.getCategory = () => {
mw.getUserName = mw.config.get("wgUserName");
+
    return mw.config.get("wgCategories");
mw.getEditCount = mw.config.get("wgUserEditCount");
+
}
mw.constant = {};
+
wiki.isArticle = () => {
mw.constant.username = mw.config.get("wgUserName");
+
    return mw.config.get("wgIsArticle");
var dom = {};
+
}
dom.get = function(id){
+
wiki.isRedirect = () => {
 +
    return mw.config.get("wgIsRedirect");
 +
}
 +
wiki.pageName = () => {
 +
    return mw.config.get("wgPageName");
 +
}
 +
wiki.pageNamespace = () => {
 +
    return mw.config.get("wgNamespaceNumber");
 +
}
 +
wiki.userName = () => {
 +
    return mw.config.get("wgUserName");
 +
}
 +
wiki.userEditNumber = () => {
 +
    return mw.config.get("wgUserEditCount");
 +
}
 +
var document = {};
 +
document.get = function(id){
 
     return document.getElementById(id);
 
     return document.getElementById(id);
 
}
 
}
dom.trigger = function(name){
+
document.trigger = function(name){
        var event = null;
+
    var event = null;
        name = name + (name?"_":"");
+
    name = name + (name?"_":"");
        if(mw.getNameClass === -1){ /* 特別 */
+
    if(wiki.pageNamespace() === -1){ /* 特別 */
            event = new Event(name + "special");
+
        event = new Event(name + "special");
        }else if(mw.getNameClass === 0){ /* 無名 */
+
    }else if(wiki.pageNamespace() === 0){ /* 無名 */
            event = new Event(name + "normal");
+
        event = new Event(name + "normal");
        }else if(mw.getNameClass === 1){ /* 議論 */
+
    }else if(wiki.pageNamespace() === 1){ /* 議論 */
            event = new Event(name + "talk");
+
        event = new Event(name + "talk");
        }else if(mw.getNameClass === 2){ /* 利用者 */
+
    }else if(wiki.pageNamespace() === 2){ /* 利用者 */
            event = new Event(name + "user");
+
        event = new Event(name + "user");
        }else if(mw.getNameClass === 6){ /* ファイル */
+
    }else if(wiki.pageNamespace() === 6){ /* ファイル */
            event = new Event(name + "file");
+
        event = new Event(name + "file");
        }else if(mw.getNameClass === 10){ /* テンプレート */
+
    }else if(wiki.pageNamespace() === 10){ /* テンプレート */
            event = new Event(name + "template");
+
        event = new Event(name + "template");
        }else if(mw.getNameClass === 12){ /* ヘルプ */
+
    }else if(wiki.pageNamespace() === 12){ /* ヘルプ */
            event = new Event(name + "help");
+
        event = new Event(name + "help");
        }else if(mw.getNameClass === 14){ /* カテゴリ */
+
    }else if(wiki.pageNamespace() === 14){ /* カテゴリ */
            event = new Event(name + "category");
+
        event = new Event(name + "category");
        }
+
    }
        window.dispatchEvent(event);     
+
    window.dispatchEvent(event);     
 
}
 
}
var def = {};
+
document.body.insertAdjacentHTML("afterbegin",`<div style="position:fixed;top:0px;left:0px;width:20%;" id="editor_tool"></div>`);
 +
let def = {};
 
def.search =function(val){
 
def.search =function(val){
 
     location.href = "https://ja.scratch-wiki.info/w/index.php?title=特別:検索&search=" + val + "&fulltext=検索&profile=all";
 
     location.href = "https://ja.scratch-wiki.info/w/index.php?title=特別:検索&search=" + val + "&fulltext=検索&profile=all";
48行目: 69行目:
 
def.template1 = function(){
 
def.template1 = function(){
 
     document.head.insertAdjacentHTML("beforeend","<style type='text/css'>.summary + div{display:none;}.summary:focus,.summary + div:focus{display:block;}</style>");
 
     document.head.insertAdjacentHTML("beforeend","<style type='text/css'>.summary + div{display:none;}.summary:focus,.summary + div:focus{display:block;}</style>");
     dom.get("navigation").insertAdjacentHTML("afterend","<div style='color:#fff;background:#673ab7;box-shadow: 0 0 3px rgba(0,0,0,0.25);'><div class='summary'>ツールバーを展開&emsp;<input onchange=def.search(this.value); placeholder='すべてを対象に検索'>&emsp;<span onclick=def.editMode();>編集モードに移行</span>&nbsp;<a href='https://ja.scratch-wiki.info/wiki/メインページ'>メインページへ</a></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></div>");
+
     document.getElementById("editor_tool").insertAdjacentHTML("afterend",`
 +
            <details style='background:#ccc;box-shadow: 0 0 3px rgba(0,0,0,0.25);'>
 +
                <summary>ツールバーを展開&emsp;
 +
                    <input onchange=def.search(this.value); placeholder='すべてを対象に検索'>&emsp;
 +
                    <span onclick=def.editMode();>編集モードに移行</span>&nbsp;
 +
                    <a href='https://ja.scratch-wiki.info/wiki/メインページ'>メインページへ</a>
 +
                </summary>
 +
                <div>
 +
                    <span onclick="def.errorList();">ハンドルされたエラー</span>&ensp;
 +
                    <span onclick="def.scratchPad();">JavaScriptスクラッチパッド</span>&ensp;
 +
                    <span onclick="def.sbPad();">ブロックプラグインテスト</span>&ensp;
 +
                </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(){
 
def.editMode = function(){
     ["navigation","footer","siteNotice","feet"].forEach(function(i){
+
     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>`);
         dom.get(i).style.display = "none";
+
}
 +
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,"&lt;").replace(/>/g,"&gt;").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(`&lt;\\s*${tagName}.*?&gt;`,"gi");
 +
                const matchs = content.match(reg);
 +
                if(matchs){
 +
                    matchs.forEach(i => {
 +
                        content = content.replace(i,"<" + i.slice(4,-4) + ">");
 +
                    });
 +
                }
 +
            }
 +
            {
 +
                const reg = new RegExp(`&lt;\\s*\/\\s*${tagName}.*?&gt;`,"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>");
 
     });
 
     });
    document.querySelector("#view > div > div > div.left").style.display = "none";
 
 
}
 
}
 
console.info("setup:common.js");
 
console.info("setup:common.js");
 
window.addEventListener("load",function(){
 
window.addEventListener("load",function(){
 
     var event = "";
 
     var event = "";
     if(mw.getAction == "view"){
+
     switch(wiki.getAction()){
        console.info("work:common.js/view");
+
        case "view":
        event = new Event("view");
+
            console.info("work:common.js/view");
        window.dispatchEvent(event);
+
            event = new Event("view");
        dom.trigger("view");
+
            window.dispatchEvent(event);
    }else if(mw.getAction == "edit"){
+
            document.trigger("view");
        console.info("work:common.js/edit");
+
            break;
        event = new Event("edit");
+
        case "edit":
        window.dispatchEvent(event);
+
            console.info("work:common.js/edit");
        dom.trigger("edit");
+
            event = new Event("edit");
    }else if(mw.getAction == "history"){
+
            window.dispatchEvent(event);
        console.info("work:common.js/history");
+
            document.trigger("edit");
        event = new Event("history");
+
            break;
        window.dispatchEvent(event);
+
        case "history":
        dom.trigger("his");
+
            console.info("work:common.js/history");
 +
            event = new Event("history");
 +
            window.dispatchEvent(event);
 +
            document.trigger("his");
 +
            break;
 
     }
 
     }
     dom.trigger();
+
     document.trigger();
 
     event = null;
 
     event = null;
 
});
 
});
88行目: 225行目:
 
window.addEventListener("edit_talk",function(){
 
window.addEventListener("edit_talk",function(){
 
     console.info("catch:common.js/onEdit.Talk");
 
     console.info("catch:common.js/onEdit.Talk");
     dom.get("navigation").insertAdjacentHTML("afterend","<center><b>署名を忘れないでください。</b></center>署名忘れ:<code><nowiki>{{unsigned2|ユーザー名|XXXX-0X-XX XX:XXJST}}</nowiki></code>");
+
     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");
 
console.info("loaded:common.js");

2020年5月18日 (月) 04:11時点における版

/*
    このJavaScriptはCC0です。
    ほかの場所で使う場合、動作の保障はありません。自己責任で使用してください。
*/
const errorList = [];
window.addEventListener("error",(e) => {
    errorList.push(e.message);
});
console.info("loading:common.js");
const wiki = {};
wiki.getSkin = () => {
    return mw.config.get("skin");
}
wiki.getAction = () => {
    return mw.config.get("wgAction");
}
wiki.getCategory = () => {
    return mw.config.get("wgCategories");
}
wiki.isArticle = () => {
    return mw.config.get("wgIsArticle");
}
wiki.isRedirect = () => {
    return mw.config.get("wgIsRedirect");
}
wiki.pageName = () => {
    return mw.config.get("wgPageName");
}
wiki.pageNamespace = () => {
    return mw.config.get("wgNamespaceNumber");
}
wiki.userName = () => {
    return mw.config.get("wgUserName");
}
wiki.userEditNumber = () => {
    return mw.config.get("wgUserEditCount");
}
var document = {};
document.get = function(id){
    return document.getElementById(id);
}
document.trigger = function(name){
    var event = null;
    name = name + (name?"_":"");
    if(wiki.pageNamespace() === -1){ /* 特別 */
        event = new Event(name + "special");
    }else if(wiki.pageNamespace() === 0){ /* 無名 */
        event = new Event(name + "normal");
    }else if(wiki.pageNamespace() === 1){ /* 議論 */
        event = new Event(name + "talk");
    }else if(wiki.pageNamespace() === 2){ /* 利用者 */
        event = new Event(name + "user");
    }else if(wiki.pageNamespace() === 6){ /* ファイル */
        event = new Event(name + "file");
    }else if(wiki.pageNamespace() === 10){ /* テンプレート */
        event = new Event(name + "template");
    }else if(wiki.pageNamespace() === 12){ /* ヘルプ */
        event = new Event(name + "help");
    }else if(wiki.pageNamespace() === 14){ /* カテゴリ */
        event = new Event(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>ツールバーを展開&emsp;
                    <input onchange=def.search(this.value); placeholder='すべてを対象に検索'>&emsp;
                    <span onclick=def.editMode();>編集モードに移行</span>&nbsp;
                    <a href='https://ja.scratch-wiki.info/wiki/メインページ'>メインページへ</a>
                </summary>
                <div>
                    <span onclick="def.errorList();">ハンドルされたエラー</span>&ensp;
                    <span onclick="def.scratchPad();">JavaScriptスクラッチパッド</span>&ensp;
                    <span onclick="def.sbPad();">ブロックプラグインテスト</span>&ensp;
                </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,"&lt;").replace(/>/g,"&gt;").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(`&lt;\\s*${tagName}.*?&gt;`,"gi");
                const matchs = content.match(reg);
                if(matchs){
                    matchs.forEach(i => {
                        content = content.replace(i,"<" + i.slice(4,-4) + ">");
                    });
                }
            }
            {
                const reg = new RegExp(`&lt;\\s*\/\\s*${tagName}.*?&gt;`,"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 Event("view");
            window.dispatchEvent(event);
            document.trigger("view");
            break;
        case "edit":
            console.info("work:common.js/edit");
            event = new Event("edit");
            window.dispatchEvent(event);
            document.trigger("edit");
            break;
        case "history":
            console.info("work:common.js/history");
            event = new Event("history");
            window.dispatchEvent(event);
            document.trigger("his");
            break;
    }
    document.trigger();
    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");
Cookieは私達のサービスを提供するのに役立ちます。このサービスを使用することにより、お客様はCookieの使用に同意するものとします。