모듈:모수 유효성 검사
Module:Parameter validation| 이 모듈은 다음과 같은 다른 모듈에 의존한다. |
사용법
이 모듈은 calculateViolations(프레임, 하위 페이지)와 validParams(프레임 )의 두 가지 기능을 내보낸다.
calculateViolations(프레임, 하위 페이지 )는 템플리트 페이지 또는 목록에 있는 하위 페이지 중 하나에서 템플리트를 찾는다(제공되는 경우).위반사항이 있는 테이블을 반환한다. 없는 테이블은 비어있다.그렇지 않으면 그것은 그 구조를 가지고 있다.
{ 위반1 = { param1 = 값1, param2 = 값2 }, 위반2 = { ... }, ...} 위반1, 위반2 등은 아래에 설명된 바와 같이 특정 위반의 이름 중 하나이다. param1, param2 등은 템플릿에 전달되거나 템플리트에 정의된 매개변수의 이름이다.value1, value2 등은 템플릿에 전달된 값이며, 이러한 매개 변수가 전달되지 않은 경우 빈 문자열이다.
다른 위반 사항은 다음과 같다.
- 무염화과
템플릿 페이지 또는 설명서 하위 페이지에서 유효한 템플리트를 찾을 수 없음 - 신고되지 않은
이름이 지정된 매개 변수(비임계값 포함), 템플리트에 없음 - 빈털터리의
이름이 지정된 매개 변수(빈 값 포함), 템플리트에 없음 - 신고되지 않은
비반복 값을 가진 숫자 매개변수가 템플리트에 없음 - 빈털터리의
값이 비어 있는 숫자 매개변수, 템플리트에 없음 - 불모의
템플리트에 "사용되지 않음"으로 표시된 비사용 값을 가진 매개변수 - 빈털터리가 있는
템플리트에 "사용되지 않음"으로 표시된 빈 값을 가진 매개변수 - 텅 빈
템플리트에 "messages"로 표시된 매개변수가 없거나 비어 있음 - 양립할 수 없는
템플리트에 전달된 비반복 매개변수, 템플리트에 정의된 매개변수 유형과 호환되지 않음
두 번째 함수인 validParams(프레임 )는 #invoke를 사용하여 템플릿에서 호출할 수 있다.출력 정의가 포함된 "parameter"라는 매개 변수를 예상한다.일반적으로 다음과 같은 것을 배치하여 사용한다.
<<includeonly만>{#invoke:파라미터 유효성 검사 validateParams 옵션 = {{PV 기본 옵션}}}</includefinancially> 템플릿의 맨 위에 있음(템플릿에 공백과 새 줄을 추가하지 않도록 주의하십시오).
옵션 매개 변수는 출력 및 일부 특수 동작을 정의하는 JSON 인코딩 문자열이어야 한다.위의 예는 이름이 지정된 위키 페이지가 존재한다고 가정하고 유효한 JSON 문자열을 포함하고 있다.위에서 정의한 각 위반에 대해 "발생"은 출력 문자열을 정의할 수 있으므로 기본적으로 "발생"은 다음과 같이 보인다.
{ 위반1: 출력 문자열1, 위반2: 출력 문자열2, .... , 동작1: 일부 값, .... } 모든 위반이 정의될 필요는 없다. "위반"에 정의되지 않은 위반은 무시될 것이다.
호출될 때 옵션 매개 변수에서 "하위 페이지"를 추출하여 다음과 같이 호출한다.
- 계산위반(프레임, 하위 페이지 )
반환된 테이블이 비어 있으면 위반 사항이 발견되지 않으며 빈 문자열은 반환되고 다른 작업은 발생하지 않는다.
그렇지 않으면, 각 위반, 즉 반환된 테이블의 키에 대해, "corresonding"에 이 키가 포함되어 있을 때, corressonding 값이 출력에 추가된다.
일부 추가 처리가 수행된다.
- 여러 토큰이 계산된 값으로 대체된다.이것들은 아래에 설명되어 있다.
- 일부 "임의의" 위반은 계산된다. 즉, 옵션에서 "임의"로 키를 누른 문자열이 적절한 대체와 함께 출력에 추가되는 것과 같은 방법으로 "임의" 메타 데이터가 출력에 추가된다.마찬가지로, 둘 이상의 유형의 비-매개적 위반이 발생할 때 "비매개적" 메타 데이터가 생성된다.
- 출력이 비어 있지 않으면 접두사 및 접미사 문자열이 앞에 붙고 여기에 추가된다.
이것들은 토큰과 대체품이다.
- 템플리트 이름
네임스페이스를 포함한 전체 템플릿 이름. - tname_message
네임스페이스가 없는 템플릿 이름. - 매개 변수 이름
쉼표로 구분된 매개 변수 목록 - 파라만드밸류
쉼표로 구분된 "이름: 값" 쌍의 매개 변수 및 값 목록으로 대체
첫 번째 두 가지는 sumux와 접두사를 포함한 전체 출력에 적용되며, 나머지는 개별 위반에 적용되며 각각 위반 파라미터와 값의 리스트가 있다.
일부 키의 값이 null이면 이 오류 조건은 무시되며 "임의" 및 "임의" 조건을 계산할 때 계산되지 않는다.
다른 선택적 필드는 옵션을 통해 전달될 수 있다.
- 문서 하위 페이지
템플리트를 포함할 수 있는 템플리트의 하위 페이지를 나타내는 문자열 또는 문자열 목록(사각형 고사리)이 될 수 있다. - 무시하다
무늬 목록이름이 패턴과 일치하는 매개변수는 규칙 위반으로 간주되지 않는다. - 깡충깡충 뛰다
따옴표로 묶인 경우 모듈은 이 숫자까지 비어 있지 않은 빈 숫자 매개 변수를 무시함 - 포장지로 포장한
outpot의 포장지 요소 열기(다음과 동일)<div class = 'paramvalidator-wrapper'>) - 포장지로 포장한
출력의 닫기 래퍼 요소("</div"에 포함)
명명된 옵션1, 옵션2 등의 추가 옵션 매개변수를 전달할 수 있다.이 옵션에서 정의된 모든 항목은 이전 값을 재정의한다.일반적인 용도는 다음과 같다.
일반적으로 이 JSON 구조물은 별도의 템플릿에 배치되고 위와 같이 모듈 사용을 위해 검색된다.
<<includeonly만>{#invoke:매개 변수 유효성 검사 validateParams 옵션 = {{PV 기본 옵션1 = {"key":"value"}}{}</include only> "키"는 위에 설명된 옵션 필드를 재정의할 수 있다.
귀인
이 모듈의 출처는 다음과 같다.모듈:ParamValidator.
국부적 이용하다 = { 텅 빈 = 기능을 발휘하다( s ) 돌아오다 s == 못을 박다 또는 타자를 치다( s ) == '끈' 그리고 mw.문자 메시지를 보내다.다듬다( s ) == '' 종지부를 찍다 , ract_use = 기능을 발휘하다 ( 액자에 넣다, 옵션사전 수정 ) 옵션사전 수정 = 옵션사전 수정 또는 'options' 국부적 옵션들, n, 더 많은 = {} 만일 액자에 넣다.아그['module_options'] 그때 국부적 module_module = mw.로드데이터( 액자에 넣다.아그['module_options'] ) 만일 타자를 치다( module_module ) ~= '테이블' 그때 돌아오다 {} 종지부를 찍다 국부적 칭호를 붙이다 = mw.칭호를 붙이다.getCurrentTitle() 국부적 local_ptions = module_module[ 칭호를 붙이다.네임스페이스 ] 또는 module_module[ 칭호를 붙이다.ns텍스트 ] 또는 {} 을 위해 k, v 에 쌍들( local_ptions ) 하다 옵션들[k] = v 종지부를 찍다 종지부를 찍다 되풀이하여 말하다 네 알겠습니다, 더 많은 = 피콜( mw.문자 메시지를 보내다.jsonDecode, 액자에 넣다.아그[옵션사전 수정 .. ( n 또는 '' )] ) 만일 네 알겠습니다 그리고 타자를 치다( 더 많은 ) == '테이블' 그때 을 위해 k, v 에 쌍들( 더 많은 ) 하다 옵션들[k] = v 종지부를 찍다 종지부를 찍다 n = ( n 또는 0 ) + 1 까지 아닌 네 알겠습니다 돌아오다 옵션들 종지부를 찍다 , build_namelist = 기능을 발휘하다 ( template_name, sp ) 국부적 재방송하다 = { template_name } 만일 sp 그때 만일 타자를 치다( sp ) == '끈' 그때 sp = { sp } 종지부를 찍다 을 위해 _, p 에 아이페어( sp ) 하다 table.insert( 재방송하다, template_name .. '/' .. p ) 종지부를 찍다 종지부를 찍다 돌아오다 재방송하다 종지부를 찍다 , table_properties = 기능을 발휘하다( t ) -- 보통, 다음(t)이 nil인지 테스트하지만, 어떤 비뚤어진 이유로 load에 의해 반환된 비어 있지 않은 테이블 데이터 반환 nil... 만일 타자를 치다( t ) ~= '테이블' 그때 돌아오다 진실의 종지부를 찍다 을 위해 a, b 에 쌍들( t ) 하다 돌아오다 거짓의 종지부를 찍다 돌아오다 진실의 종지부를 찍다 , } 국부적 기능을 발휘하다 _readTemplateData( templateName ) 국부적 칭호를 붙이다 = mw.칭호를 붙이다.makeTitle( 0, templateName ) 국부적 template내용 = 칭호를 붙이다 그리고 칭호를 붙이다.존재한다 그리고 칭호를 붙이다:getContent() -- 템플릿의 원시 내용 국부적 포획하다 = template내용 그리고 mw.우스트링.짝을 맞추다( template내용, ''<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>><<<<<<<<< ) -- 텍스트로 템플리트화된 문서 --capture = capture and mw.ustring.gsub(capture, ''%d+", tonumber ) -- "1": {}을(를) 1: {} 프레임.args는 주문 기반 매개 변수에 숫자 인덱스를 사용한다. 국부적 trailingComma = 포획하다 그리고 mw.우스트링.찾아내다( 포획하다, ',%s*[%]%]' ) -- 찾기 ,] 또는 ,} : jsonDecode는 허용하지만, json에서는 berbotten이다. 만일 포획하다 그리고 아닌 trailingComma 그때 돌아오다 피콜( mw.문자 메시지를 보내다.jsonDecode, 포획하다 ) 종지부를 찍다 돌아오다 거짓의 종지부를 찍다 국부적 기능을 발휘하다 readTemplateData( templateName ) 만일 타자를 치다( templateName ) == '끈' 그때 templateName = { templateName, templateName .. '/' .. docSubPage } 종지부를 찍다 만일 타자를 치다( templateName ) == "테이블" 그때 을 위해 _, 이름을 붙이다 에 아이페어( templateName ) 하다 국부적 td를, 결과 = _readTemplateData( 이름을 붙이다 ) 만일 td를 그때 돌아오다 결과 종지부를 찍다 종지부를 찍다 종지부를 찍다 돌아오다 못을 박다 종지부를 찍다 -- 이것은 다른 모듈에서 호출하는 기능이다.프레임을 예상한 다음 하위 페이지의 선택적 목록(예: { "문서" }). - 두 번째 매개변수가 0일 경우 템플리트 페이지만 템플리타 검색된다. 기능을 발휘하다 위반을 계산하다( 액자에 넣다, 하위 페이지 ) -- 매개 변수 유형 유효성 검사에 사용됨.TD '유형' 문자열로 키 지정. 값은 기능(val) 복귀 bool이다. 국부적 type_validators = { ['숫자'] = 기능을 발휘하다( s ) 돌아오다 mw.언어.getContentLanguage():구문 분석포맷번호( s ) 종지부를 찍다 } 기능을 발휘하다 양립할 수 있는( 오타를 치다, 발랄하게 하다 ) 국부적 펑크 = type_validators[오타를 치다] 돌아오다 타자를 치다( 펑크 ) ~= '기능' 또는 이용하다.텅 빈( 발랄하게 하다 ) 또는 펑크( 발랄하게 하다 ) 종지부를 찍다 국부적 t_frame = 액자에 넣다:getParent() 국부적 t_args, template_name = t_frame.아그, t_frame:getTitle() template_name = mw.우스트링.gsub( template_name, '/message', '', 1 ) 국부적 td_source = 이용하다.build_namelist( template_name, 하위 페이지 ) 만일 액자에 넣다.아그['td_source'] 그때 table.insert(td_source, 액자에 넣다.아그['td_source']) 종지부를 찍다 국부적 목화목 = readTemplateData( td_source ) 국부적 td_params = 목화목 그리고 목화목.모조품 국부적 all_aliases, all_series = {}, {} 만일 아닌 td_params 그때 돌아오다 { ['무염화탄'] = { [''] = '' } } 종지부를 찍다 - 지금부터, 우리는 템플리트가 유효하다는 것을 안다. 국부적 재방송하다 = {} - 호출자에게 돌아가기 전에 빈 테이블을 제거하십시오. -- 별칭 허용 을 위해 x, p 에 쌍들( td_params ) 하다 을 위해 y, 가명 에 아이페어( p.가명 또는 {} ) 하다 p['primary'] = x td_params[x] = p all_aliases[가명] = p 만일 톤넘버(가명) 그때 all_aliases[톤넘버(가명)] = p 종지부를 찍다 종지부를 찍다 종지부를 찍다 -- 보고되지 않은 처리 및 사용되지 않은 처리 국부적 이미 본 = {} 국부적 시리즈 = 액자에 넣다.아그['시리즈'] 을 위해 p_name, 가치를 매기다 에 쌍들( t_args ) 하다 국부적 tp_param, 노발, 숫자상의, table_name = td_params[p_name] 또는 all_aliases[p_name], 이용하다.텅 빈( 가치를 매기다 ), 톤넘버( p_name ) 국부적 하스발 = 아닌 노발 만일 아닌 tp_param 그리고 시리즈 그때 - 두 번째 기회.시리즈가 있는지 확인하다 을 위해 s_name, p 에 쌍들(td_params) 하다 만일 mw.우스트링.짝을 맞추다( p_name, '^' .. s_name .. '%d+' .. '