본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
도움말
최근 바뀜
게임 목록
임의의 게임으로
Top 20
청사진
커뮤니티
오락실
토론란
발전소
추천 게임
게임제작도움방
자매 프로젝트
리버티책
오사인덱스
진실위키
큰숲백과
위키연합회의장
연합회의장
사이트 개발 서버
개발 서버
리버티게임
검색
검색
보이기
계정 만들기
로그인
개인 도구
계정 만들기
로그인
로그아웃한 편집자를 위한 문서
더 알아보기
기여
토론
미디어위키:Gadget-PluginX.js 문서 원본 보기
메시지
토론
English
읽기
원본 보기
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
원본 보기
역사 보기
새로 고침
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보
축약된 URL 얻기
보이기
사이드바로 이동
숨기기
←
미디어위키:Gadget-PluginX.js
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
이 문서는 소프트웨어 인터페이스에 쓰이는 문서로, 부정 행위를 막기 위해 보호되어 있습니다.
이 문서는
관리자
만이 수정할 수 있습니다. 내용의 변경이 필요하다면
관리자 요청
에 편집 요청을 남겨 주세요.
모든 방문자에게 영향을 미칠 수 있기 때문에 이 자바스크립트 문서의 편집 권한이 없습니다.
문서의 원본을 보거나 복사할 수 있습니다.
/** * pluginX Core * pluginX 시스템이 제대로 돌아가게 해 줍니다. * 작성자: [[사용자:Bd3076|Bd3076]] */ function pluginXCore() { var api = MediaWikiAPI(); var ipUser = false; if(mw.config.get("wgUserName") === null) ipUser = true; var script_list = []; var pluginExist = false; var neededPluginExist = false; var html_before; var jsonDoc = "사용자:" + mw.config.get("wgUserName") + "/pluginX.json"; var jsonData = JSON.parse(api.getDocument(jsonDoc)); /// 플러그인의 정보가 담긴 데이터를 만듭니다. var generateScriptData = function(_url, _name, _creator, _doc, _script, _revid){ return { url: _url, name: _name, creator: _creator, doc: _doc, script: _script, revid: _revid }; }; /// 플러그인 목록을 만들어서 script_list[]에 담습니다. var getPluginList = function(){ $(".c_pluginX").each(function() { pluginExist = true; var url = $(this).attr('data-url'); var name = $(this).attr('data-name'); var creator = $(this).attr('data-creator'); var doc = $(this).attr('data-doc'); var revid = $(this).attr('data-revid'); var script = api.getDocument(doc); script_list.push(generateScriptData(url, name, creator, doc, script, revid)); if(jsonData[doc] === undefined || jsonData[doc] !== revid){ console.log(name); neededPluginExist = true; } }); }; /// 플러그인을 실행합니다. var executePlugins = function(){ script_list.forEach(function(data){ var link = data.url; var revid = data.revid; var doc = data.doc; if(neededPluginExist){ jsonData[doc] = revid; } $.getScript(link); }); ///자동 인증된 사용자가 플러그인을 실행할 경우 json을 갱신합니다. var userGroups = mw.config.get('wgUserGroups'); var autocheck = 0; if (userGroups) { for (var i = 0; i < userGroups.length; i++) { if (userGroups[i] === 'autoconfirmed') { autocheck++; } } } if(neededPluginExist && !(autocheck === 0) ){ api.changeDocument(jsonDoc, "pluginX - 새로운 플러그인", JSON.stringify(jsonData)); } }; /// 플러그인을 실행하지 않습니다. var doNotExecutePlugins = function(){ document.getElementById('mw-content-text').innerHTML = html_before; }; /// 알림 창을 만듭니다. var showWindow = function(){ html_before = document.getElementById('mw-content-text').innerHTML; $('#mw-content-text').html(api.readDocument("틀:PluginX/setup")); var script = ""; script_list.forEach(function(data){ var addingCode; addingCode = '<div class="px-code"><pre>'; addingCode = addingCode.concat(((data.script.replace(/&/g, '&')).replace(/</g, '<')).replace(/>/g, '>')); addingCode = addingCode.concat('</pre> </div> <div class="px-codeinfo"> <ul> <li> 플러그인 이름: '); addingCode = addingCode.concat(data.name); addingCode = addingCode.concat('</li> <li> 플러그인 제작자: '); addingCode = addingCode.concat(data.creator); addingCode = addingCode.concat('</li> </ul> </div>'); // 위험 코드 탐지 시작 var pattern; var nscode = data.script.replace(/\r?\n|\r/g, ' '); // 패턴 1. document.innerHTML 사용 (위험도: 심각) pattern = new RegExp("^.*document *\. *innerHTML.*$"); if(pattern.test(nscode)){ addingCode = addingCode.concat('<div class="px-critical">이 플러그인은 문서 열람 시 지장을 줄 수 있습니다.<br>플러그인 제작자를 신뢰할 수 있는 경우에만 실행하시기 바랍니다.</div>'); } // 패턴 2. document.write 사용 (위험도: 심각) pattern = new RegExp("^.*document *\. *write.*$"); if(pattern.test(nscode)){ addingCode = addingCode.concat('<div class="px-critical">이 플러그인은 문서 내용을 왜곡시킬 수 있습니다.<br>플러그인 제작자를 신뢰할 수 있는 경우에만 실행하시기 바랍니다.</div>'); } // 패턴 3. "wgUserName" 사용 (위험도: 안내) pattern = new RegExp('^.*"wgUserName".*$'); if(pattern.test(nscode)){ addingCode = addingCode.concat('<div class="px-notice">이 플러그인은 당신의 사용자 이름을 수집합니다.<br>이를 원치 않으시면 플러그인을 실행하지 마시기 바랍니다.</div>'); } //패턴 4. MediaWikiAPI.changeDocument 사용(위험도: 경고) pattern = new RegExp('^.*MediaWikiAPI.*changeDocument.*$'); if(pattern.test(nscode)){ addingCode = addingCode.concat('<div class="px-warning">이 플러그인은 다른 문서를 편집합니다.<br>이 게임이 계정 생성형 게임일 가능성이 높습니다.<br>플러그인 제작자를 신뢰할 수 있는 경우에만 실행하시기 바랍니다.</div>'); } script += addingCode; }); document.getElementById('px-script').innerHTML = script; $('#px-button').on('click', executePlugins); $('#px-button2').on('click', doNotExecutePlugins); }; getPluginList(); if(pluginExist === false) return; if(neededPluginExist === false){ executePlugins(); return; } else{ showWindow(); return; } } $(pluginXCore); /* pluginX Core 끝 */
미디어위키:Gadget-PluginX.js
문서로 돌아갑니다.