모듈:네임스페이스 검출/샌드박스
Module| 모듈 샌드박스 페이지는 다음과 같습니다.네임스페이스 검출(diff). 테스트 케이스에 대해서는, 부속의 서브 페이지도 참조해 주세요(실행). |
| 이 Lua 모듈은 시스템메시지에 사용되며 약 15,500,000페이지(전체 페이지의 약 27%)에 사용됩니다. 이를 변경하면 Wikipedia 사용자 인터페이스가 즉시 변경될 수 있습니다. 중대한 중단과 서버 로드를 방지하려면 모듈의 /sandbox 또는 /testcase 서브페이지 또는 자체 모듈 샌드박스에서 변경을 테스트해야 합니다.테스트한 변경은 한 번의 편집으로 이 페이지에 추가할 수 있습니다.토크 페이지에서 변경 사항을 논의한 후 구현하십시오. |
| 이 모듈은 페이지 보호 대상입니다.이 모듈은 매우 많은 페이지에서 사용 중이거나 매우 자주 교체됩니다.파손이나 실수는 많은 페이지에 영향을 미치고 사소한 편집이라도 서버에 큰 부하가 걸릴 수 있으므로 편집으로부터 보호됩니다. |
이 모듈을 사용하면 특정 페이지가 속한 네임스페이스에 따라 다른 텍스트를 출력할 수 있습니다.이는 {{namespace detect} 템플릿의 Lua 구현으로, 일부 개선 사항이 있습니다. 즉, 모든 네임스페이스와 모든 네임스페이스 에일리어스가 지원되며 로컬 Wiki에서 네임스페이스 이름이 자동으로 검출됩니다.
사용.
{{#제외:네임스페이스 탐지: = < - > > 텍스트 > 텍스트: > 텍스트 > 텍스트 > 텍스트: > - 텍스트 > 텍스트 > 텍스트 범주 == 미디어Wik = 미디어Wik = 미디어 = 미디어 = 미디어 = 파일 = 파일 = 및 기타 = 파일 =용 =용 = 파일 = 파일 & 미디어 GT;demospace = <!-- 네임스페이스: --> subjectns의 텍스트를 표시합니다.= 토크 페이지를 대응하는 제목 페이지로서 취급하려면 , 「!--」로 설정합니다. 파라미터
- main - 페이지가 메인 네임스페이스에 있는 경우 반환할 텍스트입니다.
- talk - 페이지가 토크 이름 공간에 있는 경우 반환되는 텍스트입니다.이것은 임의의 토크 네임스페이스가 될 수 있으며, "Talk:", "Wikipedia talk:", "User talk:" 등과 일치합니다.
- 제목 네임스페이스 매개 변수(예: 위키백과, 사용자, 파일...)- 페이지가 대응하는 네임스페이스에 있는 경우 반환할 텍스트.이 모듈에서는 네임스페이스 에일리어스 및 가상 네임스페이스를 포함한 모든 제목 네임스페이스를 파라미터로 받아들입니다.지원되는 값 목록은 아래를 참조하십시오.
- other - 페이지 네임스페이스에 대한 매개 변수가 지정되지 않은 경우 반환할 텍스트입니다.이 텍스트는 다음과 같은 경우에도 반환됩니다.
demospace=유효하지 않은 네임스페이스 값으로 설정되었습니다. - subjectns - 토크페이지에 있는 경우 대응하는 제목 페이지를 사용합니다."yes", "y", "true" 또는 "1" 값을 사용하여 설정할 수 있습니다.
- demopage - 네임스페이스를 탐지할 페이지를 지정합니다.지정되지 않은 경우 및
demospace=파라미터가 설정되지 않은 경우 모듈은 현재 페이지를 사용합니다. - demospace - 모듈이 지정된 네임스페이스에 페이지가 있는 것처럼 동작하도록 합니다.데모에 자주 사용됩니다.
네임스페이스 파라미터
서브젝트 네임스페이스 파라미터의 가능한 값은 다음과 같습니다.
| 네임스페이스 | 에일리어스 |
|---|---|
main | |
user | |
wikipedia | project,wp |
file | image |
mediawiki | |
template | |
help | |
category | |
portal | |
draft | |
timedtext | |
module | |
gadget | |
gadget definition |
테이블 함수
네임스페이스 파라미터가 다른 테이블을 표시하려면 다음 명령을 사용합니다.
{{#제외:네임스페이스가 테이블 토크를 검출했습니다=yes} 토크 네임스페이스 파라미터를 포함하려면 talk=yes.
다른 Wiki로의 이식
이 모듈은 휴대용으로 설계되어 있습니다.다른 Wiki에서 사용하려면 모듈의 값을 변경하기만 하면 됩니다.네임스페이스 검출/구성.순서는 그 페이지에서 확인할 수 있습니다.
기술적 세부사항
모듈에서는 다음 모듈의 데이터 페이지를 사용합니다.네임스페이스 검출/데이터.이 페이지는 mw.loadData로 로드됩니다.즉, #invoke마다 1회 처리되는 것이 아니라 페이지마다 1회 처리됩니다.이것은 퍼포먼스상의 이유로 행해지고 있습니다.
--[[ -------------------------------------------------------------------------------- -- -- -- 네임스페이스 검출 -- -- -- -- 이 모듈은 Lua에서 {{namespace detect} 템플릿을 구현합니다. -- 몇 가지 개선사항: 모든 네임스페이스와 모든 네임스페이스 에일리어스가 지원됩니다. -- 및 네임스페이스 이름은 로컬 Wiki에서 자동으로 탐지됩니다.그... -- 모듈에서는 대응하는 서브젝트네임스페이스 값도 사용할 수 있습니다. --토크 페이지에서 사용됩니다.매개 변수 이름은 다른 Wiki에 대해 구성할 수 있습니다. -- 의 "cfg" 테이블의 값을 변경합니다. -- 모듈:네임스페이스 검출/구성. -- -- -- -------------------------------------------------------------------------------- --]] 현지의 데이터. = 음.로드 데이터('모듈:네임스페이스 검출/데이터') 현지의 arg키 = 데이터..arg키 현지의 cfg = 데이터..cfg 현지의 매핑 = 데이터..매핑 현지의 네, 아니요 = 요구하다('모듈:네, 아니요.) 현지의 mArguments(인수) -- 모듈 초기화:논쟁들 현지의 mTable툴 -- 게으른 초기화 모듈:표 도구 현지의 ustring Lower(아래쪽) = 음.스트링.더 낮게 현지의 p = {} 현지의 기능. fetch 값(t1, t2) -- 어레이 t2의 첫 번째 키에 대한 값을 테이블 t1에서 가져옵니다. -- t1이라는 비표준값이 존재합니다. 위해서 i, 열쇠 에 아이페어(t2) 하다 현지의 가치 = t1[열쇠] 한다면 가치 ~= 제로 그리고나서 돌아가다 가치 끝. 끝. 돌아가다 제로 끝. 현지의 기능. 등가 어레이 값(t, 가치) -- 값이 배열 t의 값과 같으면 true를 반환합니다.그렇지않으면 -- false를 반환합니다. 위해서 i, 어레이 값 에 아이페어(t) 하다 한다면 가치 == 어레이 값 그리고나서 돌아가다 진실의 끝. 끝. 돌아가다 거짓의 끝. 기능. p.get Page Object(페이지 오브젝트)(페이지입니다.) -- 페이지 오브젝트를 취득하여 pcall을 통해 기능을 전달합니다. -- 예를 들어 고가의 함수 수 제한을 초과하는 오류. 한다면 페이지입니다. 그리고나서 현지의 성공., page Object(페이지 오브젝트) = pcall(음.직함.신규, 페이지입니다.) 한다면 성공. 그리고나서 돌아가다 page Object(페이지 오브젝트) 또 다른 돌아가다 제로 끝. 또 다른 돌아가다 음.직함.get Current Title(전류 제목)() 끝. 끝. -- 다른 모듈과의 하위 호환성을 위해 제공됨 기능. p.getParamMappings() 돌아가다 매핑 끝. 현지의 기능. get Namespace(args) -- 이 함수는 페이지 개체에서 네임스페이스 이름을 가져옵니다. 현지의 페이지입니다. = fetch 값(args, arg키.디모피지) 한다면 페이지입니다. == '' 그리고나서 페이지입니다. = 제로 끝. 현지의 데스페이스 = fetch 값(args, arg키.데스페이스) 한다면 데스페이스 == '' 그리고나서 데스페이스 = 제로 끝. 현지의 서브젝트 = fetch 값(args, arg키.서브젝트) 현지의 리트 한다면 데스페이스 그리고나서 -- 「demospace=main」을 적절히 취급한다. 한다면 등가 어레이 값(arg키.주된, ustring Lower(아래쪽)(데스페이스)) 그리고나서 리트 = 음.위치.네임스페이스[0].이름. 또 다른 리트 = 데스페이스 끝. 또 다른 현지의 page Object(페이지 오브젝트) = p.get Page Object(페이지 오브젝트)(페이지입니다.) 한다면 page Object(페이지 오브젝트) 그리고나서 한다면 page Object(페이지 오브젝트).isTalkPage 그리고나서 -- 옵션이 설정되어 있는 경우는, 서브젝트 네임스페이스를 가져옵니다. --그렇지 않으면 "talk"를 사용합니다. 한다면 네, 아니요(서브젝트) 그리고나서 리트 = 음.위치.네임스페이스[page Object(페이지 오브젝트).네임스페이스].주제.이름. 또 다른 리트 = '말하다' 끝. 또 다른 리트 = page Object(페이지 오브젝트).nsText 끝. 또 다른 돌아가다 제로 -- 페이지 오브젝트가 존재하지 않으면 0을 반환합니다. 끝. 끝. 리트 = 리트:서브('_', ' ') 돌아가다 ustring Lower(아래쪽)(리트) 끝. 기능. p.메인(args) -- 매핑 테이블에 저장되어 있는 파라미터에 일치하는 것이 없는지 확인합니다. 현지의 네임스페이스 = get Namespace(args) 또는 '기타' -- "other"는 테이블 키가 0이 되지 않도록 합니다. 현지의 파라미터 = 매핑[네임스페이스] 또는 {} 현지의 리트 = fetch 값(args, 파라미터) --[[ -- 일치하는 항목이 없는 경우 다른 네임스페이스에 대한 매개변수를 반환합니다. -- 이것은 네임스페이스에 지정된 텍스트가 없는 경우에 발생합니다. --가 검출되었거나 demospace 파라미터가 유효하지 않은 경우 -- 네임스페이스.탐지된 네임스페이스의 매개 변수는 다음과 같아야 합니다. --이러한 일이 일어나려면, 아무것도 없는 것 뿐만이 아니라, 전혀 없습니다. --]] 한다면 리트 == 제로 그리고나서 리트 = fetch 값(args, arg키.다른.) 끝. 돌아가다 리트 끝. 기능. p.주된(틀) mArguments(인수) = 요구하다('모듈:인수') 현지의 args = mArguments(인수).취득하다(틀, {공백 제거 = 거짓의}) 현지의 리트 = p.메인(args) 돌아가다 리트 또는 '' 끝. 기능. p.테이블(틀) --[[ -- 모든 서브젝트 네임스페이스 파라미터의 Wikable을 만듭니다. -- 문서의 목적.talk 파라미터는 옵션입니다. -- 매뉴얼에서 제외해야 합니다. --]] -- 모듈을 로드하고 변수를 초기화합니다. mTable툴 = 요구하다('모듈:테이블 도구') 현지의 네임스페이스 = 음.위치.네임스페이스 현지의 cfg = 데이터..cfg 현지의 useTalk = 유형(틀) == '테이블' 그리고. 유형(틀.args) == '테이블' 그리고. 네, 아니요(틀.args.말해라.) -- talk 파라미터를 사용할지 여부. -- 헤더 이름을 가져옵니다. 현지의 기능. 체크밸류(가치, 체납) 한다면 유형(가치) == '문자열 그리고나서 돌아가다 가치 또 다른 돌아가다 체납 끝. 끝. 현지의 nsheader = 체크밸류(cfg.wikable Namespace Header, '네임스페이스') 현지의 에일리어스 헤더 = 체크밸류(cfg.Wikiable의에일리어스 헤더, '에일리어스') -- 네임스페이스를 정렬합니다. 현지의 매핑 순서 = {} 위해서 nsname, 파라미터 에 쌍들(매핑) 하다 한다면 useTalk 또는 nsname ~= '말하다' 그리고나서 현지의 nsid = 네임스페이스[nsname].아이디 -- 어레이는 1로 시작해야 하므로 1을 추가합니다.그렇지 않으면 nsid 0이 손실됩니다. nsid = nsid + 1 매핑 순서[nsid] = 파라미터 끝. 끝. 매핑 순서 = mTable툴.compressSparseArray(매핑 순서) -- 테이블을 작성합니다. 현지의 리트 = '{ class='불가능'' .. '\n-' .. '\n! ' .. nsheader .. '\n! ' .. 에일리어스 헤더 위해서 i, 파라미터 에 아이페어(매핑 순서) 하다 위해서 j, PARAM. 에 아이페어(파라미터) 하다 한다면 j == 1 그리고나서 리트 = 리트 .. '\n-' .. '\n<코드>' .. PARAM. .. '/code>' .. '\n' 그렇지 않으면 j == 2 그리고나서 리트 = 리트 .. '<코드>' .. PARAM. .. '/code>' 또 다른 리트 = 리트 .. ', <코드> .. PARAM. .. '/code>' 끝. 끝. 끝. 리트 = 리트 .. '\n-' .. '\n}' 돌아가다 리트 끝. 돌아가다 p