모듈:카테고리 핸들러/샌드박스

Module
-------------------------------------------------------------------------------- --                                                                            -- -- 카테고리 핸들러 -- --                                                                            -- -- 이 모듈은 {{category handler}} 템플릿을 Lua에 구현합니다. -- 일부 개선사항: 모든 네임스페이스와 모든 네임스페이스 별칭 -- --가 지원되며, 이름공간이 자동으로 검출됩니다. -- 로컬 Wiki.이 모듈에는 [Module]이 필요합니다.네임스페이스 검출] -- --및 [[모듈:[Yesno]]를 로컬 Wiki에서 사용할 수 있습니다.그럴 수도 있어요. --의 값을 변경하여 다른 Wiki용으로 설정합니다. -- [[모듈:카테고리 핸들러/구성]) 및 페이지를 블랙리스트에 추가할 수 있습니다. -- [Module]를 사용한 분류로부터.카테고리 핸들러/블랙리스트]]-- --                                                                            -- --------------------------------------------------------------------------------  -- 필요한 모듈을 로드합니다. 현지의 네, 아니요 = 요구하다('모듈:네, 아니요.)  --항상 필요 없는 것을 느긋하게 싣는다. 현지의 공유, 매핑  현지의 p = {}  -------------------------------------------------------------------------------- -- 도우미 기능 --------------------------------------------------------------------------------  현지의 기능. 트림 공백(s, 공백 제거)  한다면 유형(s) ~= '문자열 그리고나서   돌아가다 s  끝.  s = s:경기('^%s*(-)%s*
                
) 한다면 공백 제거 그리고나서 한다면 s ~= '' 그리고나서 돌아가다 s 또 다른 돌아가다 제로 끝. 또 다른 돌아가다 s 끝. 끝. -------------------------------------------------------------------------------- -- Category Handler 클래스 -------------------------------------------------------------------------------- 현지의 카테고리 핸들러 = {} 카테고리 핸들러.__인덱스 = 카테고리 핸들러 기능. 카테고리 핸들러.신규(데이터., args) 현지의 obj = 설정 가능한({ _데이터 = 데이터., _sys = args }, 카테고리 핸들러) -- 제목 오브젝트를 설정합니다. 하다 현지의 pagename = obj:파라미터('해제') 현지의 성공., title Obj 한다면 pagename 그리고나서 성공., title Obj = pcall(.직함.신규, pagename) 끝. 한다면 성공. 그리고. title Obj 그리고나서 obj.직함 = title Obj 한다면 title Obj == .직함.get Current Title(전류 제목)() 그리고나서 obj._uses CurrentTitle = 진실의 끝. 또 다른 obj.직함 = .직함.get Current Title(전류 제목)() obj._uses CurrentTitle = 진실의 끝. 끝. -- 억제 파라미터 값 설정 위해서 _, 열쇠 아이페어{'노캣', '카테고리'} 하다 현지의 가치 = obj:파라미터(열쇠) 가치 = 트림 공백(가치, 진실의) obj['_' .. 열쇠] = 네, 아니요(가치) 끝. 하다 현지의 서브 페이지 = obj:파라미터('서브페이지') 현지의 카테고리 2 = obj:파라미터('카테고리2') 한다면 유형(서브 페이지) == '문자열 그리고나서 서브 페이지 = .스트링.더 낮게(서브 페이지) 끝. 한다면 유형(카테고리 2) == '문자열 그리고나서 서브 페이지 = .스트링.더 낮게(카테고리 2) 끝. obj.서브페이지 = 트림 공백(서브 페이지, 진실의) obj._카테고리2 = 트림 공백(카테고리 2) -- 공백 값을 삭제하지 않음 끝. 돌아가다 obj 끝. 기능. 카테고리 핸들러:파라미터(열쇠) 현지의 파라미터명 = 자신._데이터.파라미터[열쇠] 현지의 pn타입 = 유형(파라미터명) 한다면 pn타입 == '문자열 또는 pn타입 == '숫자' 그리고나서 돌아가다 자신._sys[파라미터명] 그렇지 않으면 pn타입 == '테이블' 그리고나서 위해서 _, 이름. 아이페어(파라미터명) 하다 현지의 가치 = 자신._sys[이름.] 한다면 가치 ~= 제로 그리고나서 돌아가다 가치 끝. 끝. 돌아가다 제로 또 다른 에러(string.format( '설정 키 %s을(를) 삭제', 스트링(열쇠) ), 2) 끝. 끝. 기능. 카테고리 핸들러:isSuppressedByArguments() 돌아가다 -- 카테고리 억제 인수가 설정되어 있는지 확인합니다. 자신._nocat == 진실의 또는 자신._카테고리 == 거짓의 또는 ( 자신._카테고리2 그리고. 자신._카테고리2 ~= 자신._데이터.카테고리 2네. 그리고. 자신._카테고리2 ~= 자신._데이터.카테고리 2 음의 ) -- 서브페이지에 있는지 확인하고 카테고리가 다음 중인지 확인합니다. -- 서브페이지 상태에 따라 억제됩니다. 또는 자신.서브페이지 == 자신._데이터.서브페이지 번호 그리고. 자신.직함.서브페이지 또는 자신.서브페이지 == 자신._데이터.서브페이지만 그리고. 것은 아니다. 자신.직함.서브페이지 끝. 기능. 카테고리 핸들러:should Skip Blacklist Check(검증)() -- 카테고리 억제 인수가 다음을 나타내고 있는지 여부를 확인합니다. -- 블랙리스트 체크를 건너뜁니다. 돌아가다 자신._nocat == 거짓의 또는 자신._카테고리 == 진실의 또는 자신._카테고리2 == 자신._데이터.카테고리 2네. 끝. 기능. 카테고리 핸들러:matches Blacklist() 한다면 자신._uses CurrentTitle 그리고나서 돌아가다 자신._데이터.currentTitleMatches 블랙리스트 또 다른 공유 = 공유 또는 요구하다('모듈:카테고리 핸들러/공유') 돌아가다 공유.matches Blacklist( 자신.직함.프리픽스본문, .로드 데이터('모듈:카테고리 핸들러/블랙리스트') ) 끝. 끝. 기능. 카테고리 핸들러:억제되어 있다() --카테고리가 인수에 의해 억제되는지, 또는 인수에 의해 억제되는지를 확인합니다. -- 블랙리스트와 일치합니다. 돌아가다 자신:isSuppressedByArguments() 또는 것은 아니다. 자신:should Skip Blacklist Check(검증)() 그리고. 자신:matches Blacklist() 끝. 기능. 카테고리 핸들러:get Namespace 파라미터() 한다면 자신._uses CurrentTitle 그리고나서 돌아가다 자신._데이터.currentTitleNamespace 파라미터 또 다른 한다면 것은 아니다. 매핑 그리고나서 공유 = 공유 또는 요구하다('모듈:카테고리 핸들러/공유') 매핑 = 공유.getParamMappings(진실의) -- mw.loadData와의 매핑을 가져옵니다. 끝. 돌아가다 공유.get Namespace 파라미터( 자신.직함, 매핑 ) 끝. 끝. 기능. 카테고리 핸들러:네임스페이스 파라미터존재하다() -- 네임스페이스 파라미터가 지정되어 있는지 여부를 확인합니다. -- 「all」 --> 네임스페이스 파라메스 --> 「other」의 순서를 사용합니다. -- 오래된 템플릿이 사용되었습니다. 한다면 자신:파라미터('모두') 그리고나서 돌아가다 진실의 끝. 한다면 것은 아니다. 매핑 그리고나서 공유 = 공유 또는 요구하다('모듈:카테고리 핸들러/공유') 매핑 = 공유.getParamMappings(진실의) -- mw.loadData와의 매핑을 가져옵니다. 끝. 위해서 ns, 파라미터 쌍들(매핑) 하다 위해서 i, PARAM. 아이페어(파라미터) 하다 한다면 자신._sys[PARAM.] 그리고나서 돌아가다 진실의 끝. 끝. 끝. 한다면 자신:파라미터('기타') 그리고나서 돌아가다 진실의 끝. 돌아가다 거짓의 끝. 기능. 카테고리 핸들러:get categories (카테고리)() 현지의 파라미터 = 자신:get Namespace 파라미터() 현지의 ns카테고리 위해서 i, PARAM. 아이페어(파라미터) 하다 현지의 가치 = 자신._sys[PARAM.] 한다면 가치 ~= 제로 그리고나서 ns카테고리 = 가치 브레이크. 끝. 끝. 한다면 ns카테고리 ~= 제로 또는 자신:네임스페이스 파라미터존재하다() 그리고나서 -- 네임스페이스 파라미터가 존재합니다.고급 사용방법입니다. 한다면 ns카테고리 == 제로 그리고나서 ns카테고리 = 자신:파라미터('기타') 끝. 현지의 리트 = {자신:파라미터('모두')} 현지의 numParam = 톤수(ns카테고리) 한다면 numParam 그리고. numParam >= 1 그리고. math.floor(numParam) == numParam 그리고나서 --nsCategory는 정수입니다. 리트[#리트 + 1] = 자신._sys[numParam] 또 다른 리트[#리트 + 1] = ns카테고리 끝. 한다면 #리트 < > 1 그리고나서 돌아가다 제로 또 다른 돌아가다 table.concat(리트) 끝. 그렇지 않으면 자신._데이터.default 네임스페이스[자신.직함.네임스페이스] 그리고나서 -- 네임스페이스 파라미터는 존재하지 않습니다.단순한 사용방법입니다. 돌아가다 자신._sys[1] 끝. 돌아가다 제로 끝. -------------------------------------------------------------------------------- -- 내보내기 -------------------------------------------------------------------------------- 현지의 p = {} 기능. p._export Classes() -- 테스트 목적으로 사용됩니다. 돌아가다 { 카테고리 핸들러 = 카테고리 핸들러 } 끝. 기능. p.메인(args, 데이터.) 데이터. = 데이터. 또는 .로드 데이터('모듈:카테고리 핸들러/데이터') 현지의 핸들러 = 카테고리 핸들러.신규(데이터., args) 한다면 핸들러:억제되어 있다() 그리고나서 돌아가다 제로 끝. 돌아가다 핸들러:get categories (카테고리)() 끝. 기능. p.주된(, 데이터.) 데이터. = 데이터. 또는 .로드 데이터('모듈:카테고리 핸들러/데이터') 현지의 args = 요구하다('모듈:인수').취득하다(, { 포장지 = 데이터..포장지, 값 펑크 = 기능. (k, v) v = 트림 공백(v) 한다면 유형(k) == '숫자' 그리고나서 한다면 v ~= '' 그리고나서 돌아가다 v 또 다른 돌아가다 제로 끝. 또 다른 돌아가다 v 끝. 끝. }) 돌아가다 p.메인(args, 데이터.) 끝. 돌아가다 p