본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
도움말
최근 바뀜
게임 목록
임의의 게임으로
Top 20
청사진
커뮤니티
오락실
토론란
발전소
추천 게임
게임제작도움방
자매 프로젝트
리버티책
오사인덱스
진실위키
큰숲백과
위키연합회의장
연합회의장
사이트 개발 서버
개발 서버
리버티게임
검색
검색
보이기
계정 만들기
로그인
개인 도구
계정 만들기
로그인
로그아웃한 편집자를 위한 문서
더 알아보기
기여
토론
보존:관리자 요청/2017년 5월 문서 원본 보기
보존
토론
한국어
읽기
원본 보기
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
원본 보기
역사 보기
새로 고침
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보
축약된 URL 얻기
보이기
사이드바로 이동
숨기기
←
보존:관리자 요청/2017년 5월
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
보존
이름공간의 문서를 편집할 권한이 없습니다.
문서의 원본을 보거나 복사할 수 있습니다.
{{보존/관리자 요청|2017|5}} == [[MediaWiki:common.js]] 스크립트 추가 요청합니다. == {{글 숨김}} <pre> /** mediawiki api를 통해 간단하게 문서들을 수집, 변경하는 함수. * 플러그인 코어에서 사용하기 위해 만들었습니다. * 작성자: [[사용자:BANIP|BANIP]] */ var token; var getToken = (function(){ $.ajax({ url:"/w/api.php?action=query&meta=tokens", success:function(v,i){ var datas = JSON.parse($(v).find("pre").text()); token = datas["query"]["tokens"]["csrftoken"]; }, async: false }) })(); function entityDecode(doc){ return $('<p></p>').html(doc).text(); } function changeDocument( title, summary, content, editToken ) { $.ajax({ url: mw.util.wikiScript("api"), data: { format: 'json', action: 'edit', title: title, summary: summary, text: content, token: editToken }, dataType: 'json', type: 'POST', success: function( data ) { if ( data && data.edit && data.edit.result == 'Success' ) { window.location.reload(); // reload page if edit was successful } else if ( data && data.error ) { alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info ); } else { alert( 'Error: Unknown result from API.' ); } }, error: function( xhr ) { alert( 'Error: Request failed.' ); } }); } function addDocument( title, summary, content, editToken ){ originContent = getDocument(title) changeDocument( title, summary, originContent + content, editToken ); } function getDocument(title){ var originContent; $.ajax({ url:"/w/index.php?title=" + title + "&action=edit", success:function ajaxSucess(data){ originContent = $(data).find("textarea").html(); }, async: false }) return entityDecode(originContent); } function readDocument(title){ var doc; $.ajax({ url:"/wiki/" + title, success:function ajaxSucess(data){ doc = $(data).find("#mw-content-text"); }, async: false }) return doc; } /** 플러그인 틀을 사용할 수 있게 하는 함수. * 작성자: [[사용자:BANIP|BANIP]] */ var commonjs = "사용자:" + mw.config.get("wgRelevantUserName") + "/common.js"; var plugins = {}, docPlugins = {}, uninstalledPlugins = {}, unupdatedPlugins = {}; var preloadedplugins = [], needPlugins = []; var jsdoc function removePluginByDoc(title,doc){ var reg = new RegExp("\\/\\*\\* 플러그인 "+title+"([\\s\\S]*)\\/\\* "+title+" 끝 \\*\\/","g"); doc = doc.replace(reg,""); return doc } var checkDocPlugin = (function(){ var plusSubTitle = "" $(".use-script").each(function(){ var plugin = { name : $(this).attr("data-name"), descript : $(this).attr("data-descript"), version : $(this).attr("data-version"), local : ($(this).attr("data-local") == "true") ? true : false, creat : $(this).attr("data-creat"), state : $(this).attr("data-state"), link : $(this).attr("data-link"), }; docPlugins[plugin.name] = plugin; plusSubTitle += ", " + $(this).attr("data-name"); }) if(plusSubTitle != ""){ plusSubTitle += " 플러그인 가동중"; $("#siteSub").text(function(i,v){return v + plusSubTitle}); } })(); var checkHavePlugin = (function(){ if(Object.keys(docPlugins).length >= 1){ jsdoc = getDocument(commonjs); var pluginreg = /plugins\.([a-zA-Z0-9_$]*)\s?\=\s?(\{.*\})\;/g; var nameMatch = pluginreg.exec(jsdoc); while(nameMatch){ preloadedplugins.push(JSON.parse( nameMatch[2] )); nameMatch = pluginreg.exec(jsdoc); } for(var keyD in docPlugins){ var docplugin = docPlugins[keyD]; var isHavePlugin = false; for(var keyM in preloadedplugins){ var myplugin = preloadedplugins[keyM] if(docplugin.name == myplugin.name){ if(docplugin.version != myplugin.version){ unupdatedPlugins[docplugin.name] = docplugin; } isHavePlugin = true; break; } } if(isHavePlugin == false){ uninstalledPlugins[docplugin.name] = docplugin; } } for(var key in uninstalledPlugins){ needPlugins.push( docPlugins[key].name ); } for(var key in unupdatedPlugins){ needPlugins.push( docPlugins[key].name ); } } })(); var checkinstalledPlugin = function(){ if( Object.keys(docPlugins).length >= 1 && (Object.keys(unupdatedPlugins).length >= 1 || Object.keys(uninstalledPlugins).length >= 1) ){ function appendBox(plugin,status){ var box = $(".cloneable.p-box").clone().removeClass("cloneable"); var code = readDocument( plugin.state ).find("pre.script").html(); docPlugins[plugin.name].code = code; box.find(".p-status").html(status); box.find(".p-code").html( code.replace(/\s{1,}$/,"") ); box.find(".p-name").text( plugin["name"] ); box.find(".p-descript").text( plugin["descript"] ); if(status == "버전업"){ var thisVersion; for(var key in preloadedplugins){ if (preloadedplugins[key].name == plugin["name"]){ thisVersion = preloadedplugins[key].version; } } box.find(".p-version").text( thisVersion + " => " + plugin["version"] ); } else { box.find(".p-version").text( plugin["version"] ); } box.find(".p-local").text( plugin["local"] == true ? "일부 문서만" : "문서 전체" ); box.find(".p-creat").text( plugin["creat"] ); $.ajax({ url:"/w/api.php?action=query&prop=revisions&rvdir=older&titles=" + plugin.state, success:function(v,i){ var datas = JSON.parse($(v).find("pre").text()); var titleKey = Object.keys(datas["query"]["pages"])[0]; var lastModified = datas["query"]["pages"][titleKey]["revisions"][0]["user"] +"(" + datas["query"]["pages"][titleKey]["revisions"][0]["timestamp"] + ")"; box.find(".p-last").text(lastModified); }, async: false }) $(".box-article").append(box); } var doc = $("#mw-content-text"); var setupMeta = readDocument("틀:플러그인/setup"); doc.html(setupMeta); for(var key in uninstalledPlugins){ appendBox(uninstalledPlugins[key],"설치"); } for(var key in unupdatedPlugins){ appendBox(unupdatedPlugins[key],"버전업"); } function installButtonClick(){ $(".install-button").text("설치중.."); $(".install-button").off("click"); function translateInstallPlugin(plugin){ var toJSONPlugin = Object.assign({}, plugin); toJSONPlugin.code = undefined; toJSONPlugin.link = undefined; var docHead = "", docFoot = ""; docHead += "/** 플러그인 " + plugin["name"] + "***************************\n"; docHead += "* " + plugin["descript"] + "\n"; docHead += "* 버전 => " + plugin["version"] + "\n"; docHead += "* 작성자 : [[사용자:" + plugin["creat"] + "|" + plugin["creat"] + "]] \n"; docHead += "*/ \n"; docHead += "plugins." + plugin["name"] + " = " + JSON.stringify(toJSONPlugin) + "; \n"; docHead += "var plugin_" + plugin["name"] + " = function(){\n"; docFoot += "\n}\n"; if(plugin.local){ docFoot += "if($(\"[data-name='" + plugin["name"] + "']\").length >= 1){\n"; docFoot += "plugin_" + plugin["name"] + "();\n"; docFoot += "}\n"; } else { docFoot += "plugin_" + plugin["name"] + "();\n"; } docFoot += "/* " + plugin["name"] + " 끝 */\n"; return entityDecode(docHead + plugin["code"] + docFoot); } var doc = ""; for(var key in needPlugins){ var pluginName = needPlugins[key]; var plugin = docPlugins[pluginName]; jsdoc = removePluginByDoc(pluginName,jsdoc); doc += translateInstallPlugin( plugin ); } changeDocument(commonjs,"플러그인 "+ needPlugins +"설치", jsdoc + doc, token); } $(".install-button").on("click",installButtonClick); } } if(Object.keys(docPlugins).length >= 1 && (Object.keys(unupdatedPlugins).length >= 1 || Object.keys(uninstalledPlugins).length >= 1)){ if($(".plugin-install").length >= 1){ $(".plugin-install").eq(0).closest("table").show(); $(".plugin-name").eq(0).text(needPlugins); $(".plugin-install").on("click",checkinstalledPlugin); } else { checkinstalledPlugin(); } } </pre> {{글 숨김 끝}} 사용자의 common.js 문서를 미디어위키 api로 고칠 수 있는것을 이용해 일반 문서에서 자바스크립트 활용을 가능케 하는 문서입니다. 이 기능으로 링크와 CGI틀과 같은 양산형 문서 연결게임들보다 훨씬 스펙트럼이 넓은 게임을 자유자재로 만들 수 있습니다. 플래시 없이도 리듬게임이나 액션게임, 정성만 들이면 온라인 rpg게임까지 확장 가능합니다. 스타크래프트의 EUD와 비슷하다고 보셔도 무방합니다. 물론 스크립트 추가 전 사용자에게 설치 여부를 묻는것으로 보안 이슈도 말끔히 처리했습니다. 위 스크립트를 [[MediaWiki:common.js]] 맨 밑 내용에 추가해주시면 됩니다. --{{사용자:BANIP/서명}} 2017년 5월 19일 (금) 17:18 (KST) :{{완료}}했습니다!-- 산천대국 시장 2017년 5월 20일 (토) 07:02 (KST) ::빠른 처리 감사드립니다. 사용자 common.js문서와 전체 문서의 common.js파일의 작동 방식이 다른건지, 테스트때는 오류없이 작동하던게 꿈쩍도 하지 않네요ㅠㅠ --{{사용자:BANIP/서명}} :::힘내시기 바랍니다!(그리고 위에 있는 게 너무 길어서 숨김 처리했습니다!)--산천대국 시장 2017년 5월 21일 (일) 07:54 (KST)
이 문서에서 사용한 틀:
사용자:BANIP/서명
(
편집
)
틀:Rand
(
편집
)
틀:Y-M
(
편집
)
틀:갱신
(
편집
)
틀:글 숨김
(
편집
)
틀:글 숨김 끝
(
편집
)
틀:보존
(
편집
)
틀:보존/관리자 요청
(
편집
)
틀:보존/템플릿
(
편집
)
틀:알림 상자
(
편집
)
틀:완료
(
편집
)
틀:캐싱방지
(
편집
)
모듈:Random
(
편집
)
보존:관리자 요청/2017년 5월
문서로 돌아갑니다.