모듈:보호 배너
Module![]() | 이 Lua 모듈은 약 53,000 페이지에서 사용되며 변화를 널리 알 수 있습니다.모듈의 /sandbox 또는 /test case 하위 페이지 또는 사용자 자신의 모듈 샌드박스에서 변경 사항을 테스트합니다.변경사항을 구현하기 전에 대화 페이지에서 변경사항에 대해 논의하는 것을 고려합니다. |
![]() | 이 모듈은 페이지 보호 대상입니다.매우 많은 페이지에서 사용 중이거나 매우 자주 교체되는 가시성이 높은 모듈입니다.파괴 행위나 실수는 많은 페이지에 영향을 미치고 사소한 편집도 서버에 상당한 부하를 줄 수 있으므로 편집으로부터 보호됩니다. |
![]() | 이 모듈은 다음과 같은 다른 모듈에 따라 달라집니다. |
이 모듈은 보호된 페이지의 맨 위에 배치된 보호 배너 및 자물쇠 아이콘을 만듭니다.
사용.
대부분의 사용자는 이 모듈을 직접 사용할 필요가 없습니다.페이지에 보호 템플릿을 추가하려면 {pp} 템플릿을 사용하거나 아래 표에 있는 보다 구체적인 보호 템플릿 중 하나를 사용하는 것이 더 편리할 수 있습니다.
위키텍스트에서
{{#선택사항:보호 배너 메인 1 = 이유 소 = 예/무 조치 = 조치 날짜 = 보호 날짜 사용자 = 사용자 이름 섹션 = 대화 페이지 섹션 이름 범주 = no }
#invoke 구문은 {pp}보다 구체적인 보호 템플릿을 생성하는 데 사용할 수 있습니다.예를 들어, 코드를 사용하여 항상 자물쇠 아이콘을 표시하는 보호 템플릿을 만들 수 있습니다.{{#invoke:Protection banner main small=yes}}
이 템플릿을 호출하는 페이지는 여전히 액션과 같은 다른 인수를 사용할 수 있습니다.그러나 이것은 한 단계 깊이에서만 작동합니다. 위의 코드가 포함된 다른 템플릿을 호출하는 템플릿을 호출하는 페이지에서는 작업과 같은 매개 변수를 자동으로 사용할 수 없습니다.
참고: 만료는 모든 경우에 자동으로 검색되므로 더 이상 지정하지 마십시오.
루아에서
먼저 모듈을 로드합니다.
현지의 m보호 배너 = 요구하다('모듈:보호 배너')
그런 다음 _main 함수를 사용하여 보호 배너를 만들 수 있습니다.
m보호 배너._본(논병아리, cfg, 제목 Obj)
args모듈에 전달할 인수 테이블입니다.이 표에 사용할 수 있는 키 및 값은 매개 변수 섹션을 참조하십시오.cfg그리고.titleObj변수는 테스트용으로만 사용됩니다.cfg모듈 대신 사용할 사용자 지정 구성 테이블을 지정합니다.보호 배너/구성 및titleObj현재 제목 대신 사용할 mw.mw.mw 개체를 지정합니다.args,cfg그리고.titleObj모두 선택 사항입니다.
매개변수
모든 매개 변수는 선택 사항입니다.
- 1 – 페이지가 보호된 이유입니다.설정된 경우 이 값은 이유 표에 나열된 값 중 하나여야 합니다.
- small – "yes", "y", "1" 또는 "true"로 설정하면 전체 보호 배너 대신 자물쇠 아이콘이 생성됩니다.
- 조치 – 보호 조치."편집"(일반 보호), "이동"(이동 보호) 또는 "자동 검토"(보류 중인 변경) 중 하나여야 합니다.기본값은 "edit"입니다.
- date – 보호 날짜입니다.이것은 #time parser 함수의 두 번째 파라미터에 대한 유효한 입력이어야 합니다.이 인수는 구성에서 PROTECTIONDATE 매개 변수를 사용하는 이유로 인해 적용됩니다.2014년 7월 현재, 이러한 이유는 "사무실" 및 "재설정"입니다.
- user – 링크를 생성할 사용자의 사용자 이름입니다.2014년 7월부터 "사용자 대화" 이유가 지정된 경우에만 적용됩니다.
- 섹션 – 토론이 진행 중인 보호된 페이지의 대화 페이지 섹션 이름입니다.이것은 모든 것은 아니지만 대부분의 이성 가치관에 효과가 있습니다.
- 범주 – 범주는 "아니오", "n", "0" 또는 "거짓"으로 설정된 경우 억제됩니다.
- cat only – "yes", "y", "1" 또는 "true"로 설정하면 보호 범주만 반환되고 배너 또는 자물쇠는 반환되지 않습니다.표시되는 출력이 없습니다.
이유들
다음 표에는 사용 가능한 이유와 사용 가능한 작업이 나와 있습니다.
이유 | 액션. | 묘사 |
---|---|---|
blp | 편집을 | 생존자의 전기 정책 준수를 촉진하기 위해 보호되는 페이지의 경우 |
분쟁 | 편집을 | 편집 분쟁으로 인해 보호되는 페이지의 경우 |
dmca | 편집을 | 디지털 밀레니엄 저작권법으로 인해 위키미디어 재단이 보호하는 페이지의 경우 다운 요청 |
ecp | 편집을 | ArbCom에서 인증했거나 커뮤니티 사용 기준을 충족하는 주제 영역의 기사의 경우 |
메인 페이지 | 편집을 | 기본 페이지에 표시되도록 보호된 페이지의 경우 |
사무실. | 편집을 | Wikimedia Foundation에서 보호하는 페이지의 경우 |
리셋 | 편집을 | Wikimedia Foundation에 의해 보호되고 기본 버전으로 "재설정"되는 페이지의 경우 |
양말 | 편집을 | 양말 인형술로 보호되는 페이지의 경우 |
템플릿 | 편집을 | 고위험 템플릿 및 Lua 모듈용 |
사용자 대화 | 편집을 | 특정 사용자의 중단된 편집으로부터 보호되는 페이지의 경우 |
공공 기물 파손 | 편집을 | 파괴 행위로부터 보호되는 페이지의 경우 |
분쟁 | 이사를 | 페이지 제목 분쟁으로 인해 페이지 이동으로부터 보호되는 페이지의 경우 |
공공 기물 파손 | 이사를 | 페이지 이동 반달리즘으로부터 보호되는 페이지의 경우 |
오류
다음은 이 모듈에서 발생할 수 있는 몇 가지 일반적인 오류와 해결 방법의 목록입니다.
잘못된 보호 날짜
오류: 잘못된 보호 날짜("abc")
이 오류는 다음을 제공할 경우 발생합니다. date=
#timeparser 함수에 의해 유효한 날짜로 인식되지 않는 매개 변수 값.확실하지 않으면 "dd Month YYYY" 형식(예: "2023년 8월 31일")으로 날짜를 사용할 수 있습니다.유효한 입력의 전체 범위를 보려면 #time 설명서를 참조하십시오(첫 번째 매개 변수인 형식 문자열만 지정할 수 있음).
잘못된 작업
오류: 잘못된 작업("abc")
잘못된 보호 작업을 지정하면 이 오류가 발생합니다.유효한 작업은 세 가지뿐입니다.edit
(일반 보호의 경우 기본값),move
(이동 보호용) 및autoreview
(보류 중인 변경사항의 경우).이 작업은 {pp}과(와) 같이 보호 작업을 수동으로 지정할 수 있는 템플릿을 사용하거나 #invoke를 직접 사용하는 경우에만 가능합니다.그렇지 않은 경우 모듈 토크에 메시지를 남겨 주십시오.보호 배너.
이유는 파이프 문자를 포함할 수 없습니다.
오류: 이유는 파이프 문자(" ")를 포함할 수 없습니다.
이 오류는 다음을 사용하여 이유를 지정할 경우 발생합니다. 1=
파이프 문자("")를 포함하는 매개 변수입니다.{{}를 입력하지 않았는지 확인하십시오!템플릿을 이 매개 변수에 잘못 입력했습니다.파이프 문자는 모듈이 내부적으로 사용하기 때문에 허용되지 않습니다.유효한 이유 목록은 이유 섹션에서 확인할 수 있습니다.
기타 오류
위의 오류 이외의 오류가 발견되면 모듈의 버그이거나 구성의 오류일 가능성이 높습니다.모듈 토크에서 이에 대한 메시지를 게시하십시오.보호 배너.
기술적 세부사항
이 모듈은 모듈의 구성 데이터를 사용합니다.보호 배너/구성.모듈의 동작 대부분을 구성할 수 있으므로 다른 위키와 다른 언어로 쉽게 이동할 수 있습니다.
모듈에 대한 일반적인 테스트 사례는 다음 모듈에서 확인할 수 있습니다.Enwiki의 구성과 관련된 보호 배너/테스트 사례 및 테스트 사례는 다음 모듈에서 확인할 수 있습니다.보호 배너/구성/테스트 사례.
이 모듈은 {pp-meta} 및 다음과 같은 딸 템플릿을 구현합니다. {pp-proxy}, {pp-proxy}, {pp-proxy}, 및 {pp-property}. 필요한 모듈을 초기화합니다. 요구하다('''비공식''') 현지의 makeFileLink = 요구하다('모듈:파일 링크')._본 현지의 유효 보호 수준 = 요구하다('모듈:효과적인 보호 수준')._본 현지의 유효한 보호 만료 = 요구하다('모듈:효과적인 보호 만료')._본 현지의 예 아니오 = 요구하다('모듈:'예스노') 항상 필요하지 않은 모듈과 객체를 게으르게 초기화합니다. 현지의 args를 얻다, 메시지 상자 만들기, 랑그 상수를 설정합니다. 현지의 CONFIG_MODULE = '모듈:보호 배너/구성' -------------------------------------------------------------------------------- 도우미 기능 -------------------------------------------------------------------------------- 현지의 기능. 범주 연결 만들기(고양이, 종류) 한다면 고양이 그리고나서 돌아가다 string.형식( '[%s:%s %s]', mw.위치.네임스페이스[14].이름., 고양이, 종류 ) 끝. 끝. 만료 및 보호 날짜에 대한 유효성 검사 기능 현지의 기능. 유효성 검사 날짜(dateString, 날짜 유형) 한다면 것은 아니다. 랑그 그리고나서 랑그 = mw.언어.콘텐츠 언어 가져오기() 끝. 현지의 성공., 결과 = pcall(랑그.formatDate, 랑그, 'U', dateString) 한다면 성공. 그리고나서 결과 = 수에 달하여(결과) 한다면 결과 그리고나서 돌아가다 결과 끝. 끝. 오류(string.형식( '%s: %s'을(으)로 표시됨), 날짜 유형, 끈으로 묶는(dateString) ), 4) 끝. 현지의 기능. 전체 URL 만들기(페이지입니다., 문의, 과시하는) 돌아가다 string.형식( '[%s %s]', 끈으로 묶는(mw.uri.전체 URL(페이지입니다., 문의)), 과시하는 ) 끝. 직접 계승자의 노드 -> 표로 형식이 지정된 방향 그래프를 고려할 때, 지정된 노드에서 도달할 수 있는 모든 노드의 테이블 가져오기(항상 그렇지만) 지정된 노드 포함). 현지의 기능. 도달 가능한 노드 가져오기(그래프, 시작) 현지의 걷기, 철회의 = {[시작] = 진실의}, {} 하는 동안에 진실의 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 반복하는 동안 항목을 추가하고 제거하기 때문에 쌍()을 사용할 수 없습니다. 현지의 k = 다음 분.(걷기) 이것은 항상 "첫 번째" 키를 받습니다. 한다면 k == 영의 그리고나서 돌아가다 철회의 끝. 걷기[k] = 영의 철회의[k] = 진실의 위해서 _,v 에 짝을 짓다(그래프[k]) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 것은 아니다. 철회의[v] 그리고나서 걷기[v] = 진실의 끝. 끝. 끝. 끝. -------------------------------------------------------------------------------- 보호 클래스 -------------------------------------------------------------------------------- 현지의 보호. = {} 보호..__index = 보호. 보호..지원되는 작업 = { 편집을 = 진실의, 이사를 = 진실의, 자동 리뷰 = 진실의, 업로드 = 진실의 } 보호..배너구성필드 = { '텍스트', '해석', '도구 설명', '알트', '링크', '이미지' } 기능. 보호..신규(논병아리, cfg, 제목) 현지의 obj = {} obj._cfg = cfg obj.제목 = 제목 또는 mw.제목.현재 제목 가져오기() 액션 설정 한다면 것은 아니다. 논병아리.액션. 그리고나서 obj.액션. = '편집' 그렇지 않으면 보호..지원되는 작업[논병아리.액션.] 그리고나서 obj.액션. = 논병아리.액션. 또 다른 오류(string.형식( '경고 작업: %s', 끈으로 묶는(논병아리.액션.) ), 3) 끝. 레벨 설정 obj.수평의 = 논병아리.데모 레벨 또는 유효 보호 수준(obj.액션., obj.제목) 한다면 것은 아니다. obj.수평의 또는 (obj.액션. == '이동' 그리고. obj.수평의 == '자동 확인됨') 그리고나서 페이지를 이동하려면 사용자를 자동으로 확인해야 하므로 처리 반 이동 보호된 페이지를 보호되지 않음으로 표시됩니다. obj.수평의 = '*' 끝. 만료 설정 현지의 유효 만료 = 유효한 보호 만료(obj.액션., obj.제목) 한다면 유효 만료 == '''비공식''' 그리고나서 obj.만기의 = '''비공식''' 그렇지 않으면 유효 만료 ~= '''비공식''' 그리고나서 obj.만기의 = 유효성 검사 날짜(유효 만료, '시작 날짜') 끝. 이유 설정 한다면 논병아리[1] 그리고나서 obj.이유 = mw.ustring.더 낮게(논병아리[1]) 한다면 obj.이유:찾아내다(' ') 그리고나서 오류('pipe는 파이프 문자(" ")를 포함할 수 없습니다., 3) 끝. 끝. 보호 날짜 설정 한다면 논병아리.날짜. 그리고나서 obj.보호 날짜 = 유효성 검사 날짜(논병아리.날짜., '보호 날짜') 끝. 배너 구성 설정 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 obj.배너구성 = {} 현지의 config 테이블 = {} 한다면 cfg.현수막[obj.액션.] 그리고나서 config 테이블[#config 테이블 + 1] = cfg.현수막[obj.액션.][obj.이유] 끝. 한다면 cfg.기본 배너[obj.액션.] 그리고나서 config 테이블[#config 테이블 + 1] = cfg.기본 배너[obj.액션.][obj.수평의] config 테이블[#config 테이블 + 1] = cfg.기본 배너[obj.액션.].체납 끝. config 테이블[#config 테이블 + 1] = cfg.마스터 배너 위해서 i, 들판 에 짝을 짓다(보호..배너구성필드) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 위해서 j, t 에 짝을 짓다(config 테이블) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 t[들판] 그리고나서 obj.배너구성[들판] = t[들판] 브레이크. 끝. 끝. 끝. 끝. 돌아가다 상을 차리다(obj, 보호.) 끝. 기능. 보호.:isUserScript() 페이지가 사용자 JavaScript인지 CSS 페이지인지 여부. 현지의 제목 = 자신.제목 돌아가다 제목.네임스페이스 == 2 그리고. ( 제목.내용 모델 == '스크립트' 또는 제목.내용 모델 == '''비공식''' ) 끝. 기능. 보호.:보호됨() 돌아가다 자신.수평의 ~= '*' 끝. 기능. 보호.:shouldShowLock() 배너/패드락 출력 여부 돌아가다 자신:보호됨() 그리고. 것은 아니다. 자신:isUserScript() 끝. 이 페이지에 보호 카테고리가 필요한지 여부를 나타냅니다. 보호..보호 범주가 있어야 함 = 보호..shouldShowLock 기능. 보호.:임시임시() 돌아가다 유형(자신.만기의) == '숫자' 끝. 기능. 보호.:보호 카테고리 만들기() 한다면 것은 아니다. 자신:보호 범주가 있어야 함() 그리고나서 돌아가다 '' 끝. 현지의 cfg = 자신._cfg 현지의 제목 = 자신.제목 만료 키 조각을 가져옵니다. 현지의 만료 플래그먼트 한다면 자신.만기의 == '''비공식''' 그리고나서 만료 플래그먼트 = 자신.만기의 그렇지 않으면 유형(자신.만기의) == '숫자' 그리고나서 만료 플래그먼트 = '''비공식''' 끝. 네임스페이스 키 조각을 가져옵니다. 현지의 네임스페이스Fragment = cfg.카테고리 네임스페이스키[제목.네임스페이스] 한다면 것은 아니다. 네임스페이스Fragment 그리고. 제목.네임스페이스 % 2 == 1 그리고나서 네임스페이스Fragment = '말하기' 끝. 키 조각을 테스트할 순서를 정의합니다.이 작업은 다음과 같이 수행됩니다. 테스트할 값을 포함하는 테이블 배열 및 그와 함께 cfg.protectionCategories 테이블의 위치. 현지의 주문 = { {발 = 만료 플래그먼트, 키포스 = 1}, {발 = 네임스페이스Fragment, 키포스 = 2}, {발 = 자신.이유, 키포스 = 3}, {발 = 자신.수평의, 키포스 = 4}, {발 = 자신.액션., 키포스 = 5} } --[[ 기존 보호 템플릿은 임시 보호 범주 시스템을 사용했습니다. 카테고리에서 네임스페이스의 우선순위를 지정하는 일부 템플릿을 사용합니다. 다른 사람들은 보호 이유에 우선순위를 둡니다.이 모듈에서 이를 에뮬레이트하는 방법 구성 테이블 cfg.dll을 사용합니다.NamespacePriority를 사용하여 다음을 설정합니다. 네임스페이스가 보호 이유보다 우선하는 이유입니다. 이러한 이유 중 하나를 처리하는 경우 네임스페이스 테이블을 다음으로 이동합니다. 주문 테이블의 끝, 즉 가장 높은 우선순위를 부여합니다.그렇지 않을 경우, 이유는 가장 높은 우선순위를 가져야 하므로, 그것을 표의 끝으로 이동합니다. 대신에 --]] 표.삽입(주문, 테이블.제거(주문, 자신.이유 그리고. cfg.네임스페이스 우선순위가 있는 이유[자신.이유] 그리고. 2 또는 3)) --[[ 시도 순서를 정의합니다.비활성 하위 테이블("값"이 0인 하위 테이블) 필드)가 끝으로 이동되고, 나중에 키가 주어집니다. "전부"이는 테이블 검색 수를 줄이기 위한 것입니다. cfg.protectionCategories, 이는 다음과 같이 기하급수적으로 증가합니다. 암호화되지 않은 키활성 하위 테이블의 수를 추적합니다. 활성 매개 변수가 없습니다. --]] 현지의 활성화 안 됨, 주문 시도 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 현지의 활동적인, 활발하지 않은 = {}, {} 위해서 i, t 에 짝을 짓다(주문) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 t.발 그리고나서 활동적인[#활동적인 + 1] = t 또 다른 활발하지 않은[#활발하지 않은 + 1] = t 끝. 끝. 활성화 안 됨 = #활동적인 주문 시도 = 활동적인 위해서 i, t 에 짝을 짓다(활발하지 않은) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 주문 시도[#주문 시도 + 1] = t 끝. 끝. --[[ 일치하는 키를 찾을 때까지 점점 더 일반적인 키 조합을 확인합니다. 특정 범주는 핵심 조각의 조합에 대해 존재합니다. 해당 일치 항목이 먼저 발견됩니다.그렇지 않다면, 우리는 계속해서 다른 노력을 합니다. 키를 사용하여 일치할 때까지 키 조각 조합 "올 올 올 올 올 올 올". -- 키를 생성하기 위해 이진 행렬을 사용하여 키 하위 테이블을 인덱싱합니다. 인덱스 i 및 j.j를 사용할 경우 활성 개수까지만 계산됩니다. 부표예를 들어, 세 개의 활성 하위 테이블이 있는 경우 행렬 0이 키 조각 "all"에 해당하는 경우, 다음과 같습니다. 1은 다른 키 조각에 해당합니다. -- j 1 2 3 아이 -- 1 1 1 1 -- 2 0 1 1 -- 3 1 0 1 -- 4 0 0 1 -- 5 1 1 0 -- 6 0 1 0 -- 7 1 0 0 -- 8 0 0 0 -- 활성 하위 테이블 수보다 높은 j 값이 설정됨 "all"이라는 문자열로. -- i의 각 값에 대해 cfg.protectionCategories 키가 생성됩니다. 키에서 값의 위치는 의 키포스 필드에 의해 결정됩니다. 각 하위 테이블 --]] 현지의 고양이들 = cfg.보호 카테고리 위해서 i = 1, 2^활성화 안 됨 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 현지의 열쇠 = {} 위해서 j, t 에 짝을 짓다(주문 시도) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 j > 활성화 안 됨 그리고나서 열쇠[t.키포스] = '모두' 또 다른 현지의 상당의 = i / 2 ^ (j - 1) 상당의 = 수학, 수학,수학(상당의) 한다면 상당의 % 2 == 1 그리고나서 열쇠[t.키포스] = t.발 또 다른 열쇠[t.키포스] = '모두' 끝. 끝. 끝. 열쇠 = 테이블.콘캣(열쇠, ' ') 현지의 시도 = 고양이들[열쇠] 한다면 시도 그리고나서 돌아가다 범주 연결 만들기(시도, 제목.본문) 끝. 끝. 돌아가다 '' 끝. 기능. 보호.:올바르지 않음() 현지의 만기의 = 자신.만기의 돌아가다 것은 아니다. 자신:보호 범주가 있어야 함() 또는 유형(만기의) == '숫자' 그리고. 만기의 < os.time() 끝. 기능. 보호.:isTemplateProtected비템플릿() 현지의 액션., 네임스페이스 = 자신.액션., 자신.제목.네임스페이스 돌아가다 자신.수평의 == '편집자 권한 없음' 그리고. ( (액션. ~= '편집' 그리고. 액션. ~= '이동') 또는 (네임스페이스 ~= 10 그리고. 네임스페이스 ~= 828) ) 끝. 기능. 보호.:카테고리 링크 만들기() 현지의 메시지 = 자신._cfg.메시지 현지의 리트 = {자신:보호 카테고리 만들기()} 한다면 자신:올바르지 않음() 그리고나서 리트[#리트 + 1] = 범주 연결 만들기( 메시지['http-http-http-http'], 자신.제목.본문 ) 끝. 한다면 자신:isTemplateProtected비템플릿() 그리고나서 리트[#리트 + 1] = 범주 연결 만들기( 메시지['http-http-http-http'], 자신.제목.본문 ) 끝. 돌아가다 테이블.콘캣(리트) 끝. -------------------------------------------------------------------------------- 블러르 클래스 -------------------------------------------------------------------------------- 현지의 블러브 = {} 블러브.__index = 블러브 블러브.배너 텍스트 필드 = { 본문 = 진실의, 설명. = 진실의, 도구 설명 = 진실의, 알트의 = 진실의, 링크 = 진실의 } 기능. 블러브.신규(보호 Obj, 논병아리, cfg) 돌아가다 상을 차리다({ _cfg = cfg, _보호 Obj = 보호 Obj, _args = 논병아리 }, 블러브) 끝. 개인 방법 -- 기능. 블러브:_formatDate(번호) 유닉스 타임스탬프를 dd Month, YYY 형식으로 포맷합니다. 랑그 = 랑그 또는 mw.언어.콘텐츠 언어 가져오기() 현지의 성공., 날짜. = pcall( 랑그.formatDate, 랑그, 자신._cfg.메시지['날짜가 지정된 형식] 또는 'jFY', '@' .. 끈으로 묶는(번호) ) 한다면 성공. 그리고나서 돌아가다 날짜. 끝. 끝. 기능. 블러브:_확장된 메시지 가져오기(메시지 키) 돌아가다 자신:_대체 매개 변수(자신._cfg.메시지[메시지 키]) 끝. 기능. 블러브:_대체 매개 변수(메시지) 한다면 것은 아니다. 자신._params 그리고나서 현지의 매개 변수 펑스 = {} 매개 변수 펑스.현재 버전 = 자신._makeCurrentVersion 매개 변수 매개 변수 펑스.요청 편집 = 자신._makeEditRequestParameter 매개 변수 펑스.만료 = 자신._makeExpiry 매개 변수 매개 변수 펑스.설명 블러버 = 자신._make설명 블러 매개 변수 매개 변수 펑스.이미지 링크 = 자신._makeImageLink 매개 변수 매개 변수 펑스.인트로 교외 = 자신._makeIntroBurb 매개 변수 매개 변수 펑스.소개 조각 = 자신._makeIntroFragment 매개 변수 매개 변수 펑스.페이지 유형 = 자신._make 페이지 유형 매개 변수 매개 변수 펑스.보호 블러브 = 자신._makeProtectionBurb 매개 변수 매개 변수 펑스.보호 날짜 = 자신._makeProtectionDate 매개 변수 매개 변수 펑스.보호 수준 = 자신._makeProtection수준 매개 변수 매개 변수 펑스.보호 로그 = 자신._makeProtectionLog 매개 변수 매개 변수 펑스.토크 페이지 = 자신._makeTalkPage 매개 변수 매개 변수 펑스.공구 팁 블러버 = 자신._makeTooltipBurb 매개 변수 매개 변수 펑스.공구 팁 조각 = 자신._makeTooltipFragment 매개 변수 매개 변수 펑스.반달 = 자신._makeVandalTemplate 매개 변수 자신._params = 상을 차리다({}, { __index = 기능. (t, k) 현지의 PARAM. 한다면 매개 변수 펑스[k] 그리고나서 PARAM. = 매개 변수 펑스[k](자신) 끝. PARAM. = PARAM. 또는 '' t[k] = PARAM. 돌아가다 PARAM. 끝. }) 끝. 메시지 = 메시지:gsub('${(%u+)}', 자신._params) 돌아가다 메시지 끝. 기능. 블러브:_makeCurrentVersion 매개 변수() 페이지 기록 또는 이동 로그에 대한 링크(다음 유형에 따라 다름) 보호. 현지의 페이지명 = 자신._보호 Obj.제목.접두사 텍스트 한다면 자신._보호 Obj.액션. == '이동' 그리고나서 로그 이동 링크가 필요합니다. 돌아가다 전체 URL 만들기( '특수:로그', {유형 = '이동', 페이지입니다. = 페이지명}, 자신:_확장된 메시지 가져오기('current-version-move-display') ) 또 다른 우리는 역사 링크가 필요합니다. 돌아가다 전체 URL 만들기( 페이지명, {액션. = '역사'}, 자신:_확장된 메시지 가져오기('current-version-edit-display') ) 끝. 끝. 기능. 블러브:_makeEditRequestParameter() 현지의 mEditRequest = 요구하다('모듈:편집 요청 제출') 현지의 액션. = 자신._보호 Obj.액션. 현지의 수평의 = 자신._보호 Obj.수평의 편집 요청 유형을 가져옵니다. 현지의 요청 유형 한다면 액션. == '편집' 그리고나서 한다면 수평의 == '자동 확인됨' 그리고나서 요청 유형 = '''비공식''' 그렇지 않으면 수평의 == '확인되지 않음' 그리고나서 요청 유형 = '''비공식''' 그렇지 않으면 수평의 == '편집자 권한 없음' 그리고나서 요청 유형 = '''비공식''' 끝. 끝. 요청 유형 = 요청 유형 또는 '만원' 표시 값을 가져옵니다. 현지의 과시하는 = 자신:_확장된 메시지 가져오기('edit-request-display') 돌아가다 mEditRequest._링크{유형 = 요청 유형, 과시하는 = 과시하는} 끝. 기능. 블러브:_makeExpiry 매개 변수() 현지의 만기의 = 자신._보호 Obj.만기의 한다면 유형(만기의) == '숫자' 그리고나서 돌아가다 자신:_formatDate(만기의) 또 다른 돌아가다 만기의 끝. 끝. 기능. 블러브:_make설명 블러 매개 변수() 특수한 경우를 먼저 처리합니다. 한다면 자신._보호 Obj.제목.네임스페이스 == 8 그리고나서 미디어위키 네임스페이스 돌아가다 자신:_확장된 메시지 가져오기('communication-blurb-flock protect') 끝. 설명 블러 테이블 키 가져오기 현지의 액션. = 자신._보호 Obj.액션. 현지의 수평의 = 자신._보호 Obj.수평의 현지의 talkKey = 자신._보호 Obj.제목.isTalk페이지 그리고. '말하기' 또는 '주제' 설명 블러 테이블에서 메시지를 찾고 아무 것이나 대체합니다. 매개 변수 현지의 설명 = 자신._cfg.해설 블러즈 현지의 메시지 한다면 설명[액션.][수평의] 그리고. 설명[액션.][수평의][talkKey] 그리고나서 메시지 = 설명[액션.][수평의][talkKey] 그렇지 않으면 설명[액션.][수평의] 그리고. 설명[액션.][수평의].체납 그리고나서 메시지 = 설명[액션.][수평의].체납 그렇지 않으면 설명[액션.].체납 그리고. 설명[액션.].체납[talkKey] 그리고나서 메시지 = 설명[액션.].체납[talkKey] 그렇지 않으면 설명[액션.].체납 그리고. 설명[액션.].체납.체납 그리고나서 메시지 = 설명[액션.].체납.체납 또 다른 오류(string.형식( ' 작업 "%s", 수준 "%s" 및 대화 키 "%s"에 대한 설명을 찾을 수 없습니다., 액션., 수평의, talkKey ), 8) 끝. 돌아가다 자신:_대체 매개 변수(메시지) 끝. 기능. 블러브:_makeImageLink 매개 변수() 현지의 imageLinks = 자신._cfg.imageLinks 현지의 액션. = 자신._보호 Obj.액션. 현지의 수평의 = 자신._보호 Obj.수평의 현지의 메시지 한다면 imageLinks[액션.][수평의] 그리고나서 메시지 = imageLinks[액션.][수평의] 그렇지 않으면 imageLinks[액션.].체납 그리고나서 메시지 = imageLinks[액션.].체납 또 다른 메시지 = imageLinks.편집을.체납 끝. 돌아가다 자신:_대체 매개 변수(메시지) 끝. 기능. 블러브:_makeIntroBurb 매개 변수() 한다면 자신._보호 Obj:임시임시() 그리고나서 돌아가다 자신:_확장된 메시지 가져오기('Intro-blurb-burb-burb') 또 다른 돌아가다 자신:_확장된 메시지 가져오기('Intro-Burb-Expiry 없음') 끝. 끝. 기능. 블러브:_makeIntroFragment 매개 변수() 한다면 자신._보호 Obj:임시임시() 그리고나서 돌아가다 자신:_확장된 메시지 가져오기('소개서-기입') 또 다른 돌아가다 자신:_확장된 메시지 가져오기('내보내기-유효기간 없음') 끝. 끝. 기능. 블러브:_make 페이지 유형 매개 변수() 현지의 페이지 유형 = 자신._cfg.페이지 유형 돌아가다 페이지 유형[자신._보호 Obj.제목.네임스페이스] 또는 페이지 유형.체납 또는 오류('기본 페이지 유형이 정의되지 않음', 8) 끝. 기능. 블러브:_makeProtectionBurb 매개 변수() 현지의 프로텍션 블러즈 = 자신._cfg.프로텍션 블러즈 현지의 액션. = 자신._보호 Obj.액션. 현지의 수평의 = 자신._보호 Obj.수평의 현지의 메시지 한다면 프로텍션 블러즈[액션.][수평의] 그리고나서 메시지 = 프로텍션 블러즈[액션.][수평의] 그렇지 않으면 프로텍션 블러즈[액션.].체납 그리고나서 메시지 = 프로텍션 블러즈[액션.].체납 그렇지 않으면 프로텍션 블러즈.편집을.체납 그리고나서 메시지 = 프로텍션 블러즈.편집을.체납 또 다른 오류('protectionBlurbs.edit.default에 대해 정의된 보호 블러가 없습니다.', 8) 끝. 돌아가다 자신:_대체 매개 변수(메시지) 끝. 기능. 블러브:_makeProtectionDate 매개 변수() 현지의 보호 날짜 = 자신._보호 Obj.보호 날짜 한다면 유형(보호 날짜) == '숫자' 그리고나서 돌아가다 자신:_formatDate(보호 날짜) 또 다른 돌아가다 보호 날짜 끝. 끝. 기능. 블러브:_makeProtection수준 매개 변수() 현지의 보호.레벨 = 자신._cfg.보호.레벨 현지의 액션. = 자신._보호 Obj.액션. 현지의 수평의 = 자신._보호 Obj.수평의 현지의 메시지 한다면 보호.레벨[액션.][수평의] 그리고나서 메시지 = 보호.레벨[액션.][수평의] 그렇지 않으면 보호.레벨[액션.].체납 그리고나서 메시지 = 보호.레벨[액션.].체납 그렇지 않으면 보호.레벨.편집을.체납 그리고나서 메시지 = 보호.레벨.편집을.체납 또 다른 오류('보호에 대해 정의된 보호 수준이 없습니다.Levels.edit.default', 8) 끝. 돌아가다 자신:_대체 매개 변수(메시지) 끝. 기능. 블러브:_makeProtectionLog 매개 변수() 현지의 페이지명 = 자신._보호 Obj.제목.접두사 텍스트 한다면 자신._보호 Obj.액션. == '자동 검토' 그리고나서 우리는 보류 중인 변경 로그가 필요합니다. 돌아가다 전체 URL 만들기( '특수:로그', {유형 = '''비공식''', 페이지입니다. = 페이지명}, 자신:_확장된 메시지 가져오기('pc-log-display') ) 또 다른 보호 일지가 필요합니다. 돌아가다 전체 URL 만들기( '특수:로그', {유형 = '보호', 페이지입니다. = 페이지명}, 자신:_확장된 메시지 가져오기('보호 로그 표시') ) 끝. 끝. 기능. 블러브:_makeTalkPage 매개 변수() 돌아가다 string.형식( '[%s:%s#%s %s]', mw.위치.네임스페이스[자신._보호 Obj.제목.네임스페이스].말해라..이름., 자신._보호 Obj.제목.본문, 자신._args.부분 또는 '위', 자신:_확장된 메시지 가져오기('talk-page-link-display') ) 끝. 기능. 블러브:_makeTooltipBurb 매개 변수() 한다면 자신._보호 Obj:임시임시() 그리고나서 돌아가다 자신:_확장된 메시지 가져오기('tooltip-burb-burb-burb') 또 다른 돌아가다 자신:_확장된 메시지 가져오기('툴팁-블러버-만료 없음') 끝. 끝. 기능. 블러브:_makeTooltipFragment 매개 변수() 한다면 자신._보호 Obj:임시임시() 그리고나서 돌아가다 자신:_확장된 메시지 가져오기('도구 설명-아래쪽-아래쪽') 또 다른 돌아가다 자신:_확장된 메시지 가져오기('도구 설명-삭제-만료 없음') 끝. 끝. 기능. 블러브:_makeVandalTemplate 매개 변수() 돌아가다 mw.현재 프레임 가져오기():확장템플릿{ 제목="추가-m", 논병아리={자신._args.사용자 또는 자신._보호 Obj.제목.기본 텍스트} } 끝. 공개 방법 -- 기능. 블러브:배너 텍스트 만들기(열쇠) 입력의 유효성을 검사합니다. 한다면 것은 아니다. 열쇠 또는 것은 아니다. 블러브.배너 텍스트 필드[열쇠] 그리고나서 오류(string.형식( '%s'는 올바른 배너 구성 필드가 아닙니다.', 끈으로 묶는(열쇠) ), 2) 끝. 텍스트를 생성합니다. 현지의 메시지 = 자신._보호 Obj.배너구성[열쇠] 한다면 유형(메시지) == '끈' 그리고나서 돌아가다 자신:_대체 매개 변수(메시지) 그렇지 않으면 유형(메시지) == '함수' 그리고나서 메시지 = 메시지(자신._보호 Obj, 자신._args) 한다면 유형(메시지) ~= '끈' 그리고나서 오류(string.형식( '%s 키를 가진 배너 구성 함수의 출력이 잘못되었습니다.' .. (예상 문자열, %s을(를) 받았습니다.', 끈으로 묶는(열쇠), 유형(메시지) ), 4) 끝. 돌아가다 자신:_대체 매개 변수(메시지) 끝. 끝. -------------------------------------------------------------------------------- BannerTemplate 클래스 -------------------------------------------------------------------------------- 현지의 배너 템플릿 = {} 배너 템플릿.__index = 배너 템플릿 기능. 배너 템플릿.신규(보호 Obj, cfg) 현지의 obj = {} obj._cfg = cfg 이미지 파일 이름을 설정합니다. 현지의 imageFilename = 보호 Obj.배너구성.이미지 한다면 imageFilename 그리고나서 obj._imageFilename = imageFilename 또 다른 배너 구성에 이미지 파일 이름이 명시적으로 지정되지 않은 경우, 보호 상태 및 네임스페이스에서 생성합니다. 현지의 액션. = 보호 Obj.액션. 현지의 수평의 = 보호 Obj.수평의 현지의 네임스페이스 = 보호 Obj.제목.네임스페이스 현지의 이유 = 보호 Obj.이유 특별한 경우를 먼저 처리합니다. 한다면 ( 네임스페이스 == 10 또는 네임스페이스 == 828 또는 이유 그리고. obj._cfg.inf 이미지 이유[이유] ) 그리고. 액션. == '편집' 그리고. 수평의 == '스톱' 그리고. 것은 아니다. 보호 Obj:임시임시() 그리고나서 완전히 보호된 모듈 및 템플릿은 특별한 빨간색 "indef"를 얻습니다. 자물쇠 obj._imageFilename = obj._cfg.메시지['image-discovery-discovery'] 또 다른 일반 보호 유형을 처리합니다. 현지의 이미지들 = obj._cfg.이미지들 한다면 이미지들[액션.] 그리고나서 한다면 이미지들[액션.][수평의] 그리고나서 obj._imageFilename = 이미지들[액션.][수평의] 그렇지 않으면 이미지들[액션.].체납 그리고나서 obj._imageFilename = 이미지들[액션.].체납 끝. 끝. 끝. 끝. 돌아가다 상을 차리다(obj, 배너 템플릿) 끝. 기능. 배너 템플릿:렌더 이미지() 현지의 파일 이름 = 자신._imageFilename 또는 자신._cfg.메시지['image-module-default'] 또는 'Transparent.gif' 돌아가다 makeFileLink{ 파일 = 파일 이름, 크기 = (자신.이미지 폭 또는 20) .. '''비공식''', 알트의 = 자신._imageAlt, 링크 = 자신._imageLink, 캡션 = 자신.이미지 캡션 } 끝. -------------------------------------------------------------------------------- 배너 클래스 -------------------------------------------------------------------------------- 현지의 배너 = 상을 차리다({}, 배너 템플릿) 배너.__index = 배너 기능. 배너.신규(보호 Obj, 흐리멍덩한 Obj, cfg) 현지의 obj = 배너 템플릿.신규(보호 Obj, cfg) 이것은 거품이 필요하지 않습니다. obj.이미지 폭 = 40 obj.이미지 캡션 = 흐리멍덩한 Obj:배너 텍스트 만들기('알트') 큰 배너는 도구 설명의 alt 텍스트를 사용합니다. obj._reasonText = 흐리멍덩한 Obj:배너 텍스트 만들기('텍스트') obj._설명 텍스트 = 흐리멍덩한 Obj:배너 텍스트 만들기('해석') obj._페이지 = 보호 Obj.제목.접두사 텍스트 테스트에 차이가 있을 뿐입니다. 돌아가다 상을 차리다(obj, 배너) 끝. 기능. 배너:__ 문자열로() 배너를 렌더링합니다. 메시지 상자 만들기 = 메시지 상자 만들기 또는 요구하다('모듈:메시지 상자').주된 현지의 이유 텍스트 = 자신._reasonText 또는 오류('이유 텍스트 집합 없음', 2) 현지의 설명 텍스트 = 자신._설명 텍스트 현지의 엠바그 = { 페이지입니다. = 자신._페이지, 유형 = '보호', 이미지 = 자신:렌더 이미지(), 본문 = string.형식( "'''%s'''%s''', 이유 텍스트, 설명 텍스트 그리고. '<br />' .. 설명 텍스트 또는 '' ) } 돌아가다 메시지 상자 만들기('mbox', 엠바그) 끝. -------------------------------------------------------------------------------- 자물쇠 클래스 -------------------------------------------------------------------------------- 현지의 자물쇠 = 상을 차리다({}, 배너 템플릿) 자물쇠.__index = 자물쇠 기능. 자물쇠.신규(보호 Obj, 흐리멍덩한 Obj, cfg) 현지의 obj = 배너 템플릿.신규(보호 Obj, cfg) 이것은 거품이 필요하지 않습니다. obj.이미지 폭 = 20 obj.이미지 캡션 = 흐리멍덩한 Obj:배너 텍스트 만들기('도구 설명') obj._imageAlt = 흐리멍덩한 Obj:배너 텍스트 만들기('알트') obj._imageLink = 흐리멍덩한 Obj:배너 텍스트 만들기('링크') obj._표시기Name = cfg.자물쇠 표시기 이름[보호 Obj.액션.] 또는 cfg.자물쇠 표시기 이름.체납 또는 'pp-default' 돌아가다 상을 차리다(obj, 자물쇠) 끝. 기능. 자물쇠:__ 문자열로() 현지의 틀 = mw.현재 프레임 가져오기() nowiki 태그는 문서 맨 위에 공백이 없도록 도와줍니다. 돌아가다 틀:확장 태그{이름. = 'nowiki'} .. 틀:확장 태그{ 이름. = '''비공식''', 논병아리 = {이름. = 자신._표시기Name}, 내용물 = 자신:렌더 이미지() } 끝. -------------------------------------------------------------------------------- 수출품 -------------------------------------------------------------------------------- 현지의 p = {} 기능. p._export 클래스() 이것은 테스트 목적으로 사용됩니다. 돌아가다 { 보호. = 보호., 블러브 = 블러브, 배너 템플릿 = 배너 템플릿, 배너 = 배너, 자물쇠 = 자물쇠, } 끝. 기능. p._본(논병아리, cfg, 제목) 논병아리 = 논병아리 또는 {} cfg = cfg 또는 요구하다(CONFIG_MODULE) 현지의 보호 Obj = 보호..신규(논병아리, cfg, 제목) 현지의 리트 = {} 페이지의 편집 보호가 페이지의 편집 보호와 동일하거나 더 제한적인 경우 다른 작업으로부터 보호합니다. 그러면 아무것도 표시할 필요가 없습니다. 다른 작업의 경우(카테고리 제외). 한다면 것은 아니다. 예 아니오(논병아리.고양이 전용의) 그리고. (보호 Obj.액션. == '편집' 또는 논병아리.데모 레벨 또는 것은 아니다. 도달 가능한 노드 가져오기( cfg.계층 구조, 보호 Obj.수평의 )[유효 보호 수준('편집', 보호 Obj.제목)]) 그리고나서 burb 개체 초기화 현지의 흐리멍덩한 Obj = 블러브.신규(보호 Obj, 논병아리, cfg) 배너 렌더링 한다면 보호 Obj:shouldShowLock() 그리고나서 리트[#리트 + 1] = 끈으로 묶는( (예 아니오(논병아리.작은.) 그리고. 자물쇠 또는 배너) .신규(보호 Obj, 흐리멍덩한 Obj, cfg) ) 끝. 끝. 범주 렌더링 한다면 예 아니오(논병아리.카테고리) ~= 거짓의 그리고나서 리트[#리트 + 1] = 보호 Obj:카테고리 링크 만들기() 끝. 돌아가다 테이블.콘캣(리트) 끝. 기능. p.주된(틀, cfg) cfg = cfg 또는 요구하다(CONFIG_MODULE) 기본 변수가 있으면 찾습니다. 현지의 부모 = 틀.상위 항목 가져오기 그리고. 틀:상위 항목 가져오기() 현지의 defaultArgs = 부모 그리고. cfg.포장지[부모:제목 가져오기():gsub('/tftp