최신판 |
당신의 편집 |
46번째 줄: |
46번째 줄: |
| | | |
| [[파일:Red Apple.jpg|400px]] | | [[파일:Red Apple.jpg|400px]] |
− |
| |
− | ==누리위키는 <s>취소선</s>을 허용 하나요?==
| |
− |
| |
− | <del>작성 규정을 어디서 봐야하징</del> -[[사용자:WikiHK|WikiHK]] ([[사용자토론:WikiHK|토론]]) 2015년 5월 16일 (토) 14:13 (KST)
| |
− |
| |
− | == 취소선 테스트 ==
| |
− |
| |
− | <del>테스트와 [[누리위키]]</del>
| |
− |
| |
− | == 테스트 ==
| |
− |
| |
− | 테스트
| |
− |
| |
− | == 테스트 ==
| |
− |
| |
− | 테스트2
| |
− |
| |
− | == 테스트3 ==
| |
− |
| |
− | 테스트
| |
− |
| |
− | == 테스트 ==
| |
− |
| |
− | 테스트4
| |
− |
| |
− | == 테스트4 ==
| |
− |
| |
− | 테스트4
| |
− | 가나다라마바사
| |
− | 아자차카타파하
| |
− |
| |
− | == 테스트 ==
| |
− | 안녕하세요
| |
− | == math 테스트 ==
| |
− | <nowiki><math>\mathbf{a'}=\mathbf{a} - \boldsymbol{\alpha}\;</math></nowiki>
| |
− | <math>\mathbf{a'}=\mathbf{a} - \boldsymbol{\alpha}\;</math>
| |
− |
| |
− | == 관련 문 ==
| |
− | {{#related:Test with read more}}
| |
− | {{#related:Another test page}}
| |
− |
| |
− | == 연습장두번째 ==
| |
− |
| |
− | # 개요
| |
− | # 주요일정
| |
− | {| class="wikitable"
| |
− | |-
| |
− | ! No. !! Activity !! Contents
| |
− | |-
| |
− | | 1 || Analysis || As-Is
| |
− | |-
| |
− | | 2 || Design || To-Be
| |
− | |-
| |
− | | 3 || Implementation || Test
| |
− | |}
| |
− | # 투입비용
| |
− | # 투입인력
| |
− | # 참고문서
| |
− | # '''''맺음말'''''
| |
− | [https://namu.wiki/w/%EC%84%9C%EC%95%88%20%ED%94%BC%EB%9D%BC%EB%AF%B8%EB%93%9C%20%EA%B3%A0%EC%A1%B0%EC%84%A0%20%EB%AC%B8%EB%AA%85%EC%84%A4 만주피라미드]
| |
− | <nowiki>φΧχΨὓὔὗԅИӂٌَُِةئئ٧٥٥ݫۯژڔړݲڏখঘঞীডডௐ௸ఞటඟඥඦॅोौળิฝมยรຣ໐໌໑໓</nowiki>
| |
− |
| |
− | [[파일:Red Apple.jpg|100px]]<ref>사과받으세요^^</ref><br>
| |
− | [[파일:Imege_88.png]]<ref>떠나세요^^</ref><br>
| |
− | <gallery>
| |
− | 감법혼색.png|설명1
| |
− | </gallery>
| |
− | [https://tip.daum.net/question/3131977 만주피라미드]를 소개합니다.
| |
− |
| |
− | 연습장
| |
− |
| |
− | == 모듈:Message box ==
| |
− |
| |
− | -- This is a meta-module for producing message box templates, including
| |
− | -- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
| |
− |
| |
− | -- Load necessary modules.
| |
− | require('strict')
| |
− | local getArgs
| |
− | local categoryHandler = require('Module:Category handler')._main
| |
− | local yesno = require('Module:Yesno')
| |
− | local localize = mw.loadData('Module:Message box/localize')
| |
− |
| |
− | -- Get a language object for formatDate and ucfirst.
| |
− | local lang = mw.language.getContentLanguage()
| |
− |
| |
− | --------------------------------------------------------------------------------
| |
− | -- Helper functions
| |
− | --------------------------------------------------------------------------------
| |
− |
| |
− | local function getTitleObject(...)
| |
− | -- Get the title object, passing the function through pcall
| |
− | -- in case we are over the expensive function count limit.
| |
− | local success, title = pcall(mw.title.new, ...)
| |
− | if success then
| |
− | return title
| |
− | end
| |
− | end
| |
− |
| |
− | local function union(t1, t2)
| |
− | -- Returns the union of two arrays.
| |
− | local vals = {}
| |
− | for i, v in ipairs(t1) do
| |
− | vals[v] = true
| |
− | end
| |
− | for i, v in ipairs(t2) do
| |
− | vals[v] = true
| |
− | end
| |
− | local ret = {}
| |
− | for k in pairs(vals) do
| |
− | table.insert(ret, k)
| |
− | end
| |
− | table.sort(ret)
| |
− | return ret
| |
− | end
| |
− |
| |
− | local function getArgNums(args, prefix)
| |
− | local nums = {}
| |
− | for k, v in pairs(args) do
| |
− | local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
| |
− | if num then
| |
− | table.insert(nums, tonumber(num))
| |
− | end
| |
− | end
| |
− | table.sort(nums)
| |
− | return nums
| |
− | end
| |
− |
| |
− | local function getDate(date)
| |
− | -- convert yyyy-mm or yyyy-mm-dd to 'yyyy년 m월'
| |
− | local pattern1 = '^(%d%d%d%d)-(%d%d?)$'
| |
− | local pattern2 = '^(%d%d%d%d)-(%d%d?)-(%d%d?)$'
| |
− |
| |
− | if date then
| |
− | local y, m, _
| |
− |
| |
− | y, m = date:match(pattern1)
| |
− | if not y then
| |
− | y, m, _ = date:match(pattern2)
| |
− | end
| |
− |
| |
− | local yy, mm = tonumber(y), tonumber(m)
| |
− |
| |
− | if yy and mm and yy > 2000 and yy < 2100 and mm > 0 and mm < 13 then
| |
− | return yy .. '년 ' .. mm .. '월'
| |
− | end
| |
− | end
| |
− |
| |
− | return date
| |
− | end
| |
− |
| |
− | --------------------------------------------------------------------------------
| |
− | -- Box class definition
| |
− | --------------------------------------------------------------------------------
| |
− |
| |
− | local MessageBox = {}
| |
− | MessageBox.__index = MessageBox
| |
− |
| |
− | function MessageBox.new(boxType, args, cfg)
| |
− | args = args or {}
| |
− | local obj = {}
| |
− |
| |
− | -- Set the title object and the namespace.
| |
− | obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
| |
− |
| |
− | -- Set the config for our box type.
| |
− | obj.cfg = cfg[boxType]
| |
− | if not obj.cfg then
| |
− | local ns = obj.title.namespace
| |
− | -- boxType is "mbox" or invalid input
| |
− | if ns == 0 then
| |
− | obj.cfg = cfg.ambox -- main namespace
| |
− | elseif ns == 6 then
| |
− | obj.cfg = cfg.imbox -- file namespace
| |
− | elseif ns == 14 then
| |
− | obj.cfg = cfg.cmbox -- category namespace
| |
− | else
| |
− | local nsTable = mw.site.namespaces[ns]
| |
− | if nsTable and nsTable.isTalk then
| |
− | obj.cfg = cfg.tmbox -- any talk namespace
| |
− | else
| |
− | obj.cfg = cfg.ombox -- other namespaces or invalid input
| |
− | end
| |
− | end
| |
− | end
| |
− |
| |
− | -- Set the arguments, and remove all blank arguments except for the ones
| |
− | -- listed in cfg.allowBlankParams.
| |
− | do
| |
− | local newArgs = {}
| |
− | for k, v in pairs(args) do
| |
− | if v ~= '' then
| |
− | newArgs[k] = v
| |
− | end
| |
− | end
| |
− | for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
| |
− | newArgs[param] = args[param]
| |
− | end
| |
− | obj.args = newArgs
| |
− | end
| |
− |
| |
− | -- Define internal data structure.
| |
− | obj.categories = {}
| |
− | obj.classes = {}
| |
− |
| |
− | return setmetatable(obj, MessageBox)
| |
− | end
| |
− |
| |
− | function MessageBox:addCat(ns, cat, sort)
| |
− | if not cat then
| |
− | return nil
| |
− | end
| |
− | if sort then
| |
− | cat = string.format('[[분류:%s|%s]]', cat, sort)
| |
− | else
| |
− | cat = string.format('[[분류:%s]]', cat)
| |
− | end
| |
− | self.categories[ns] = self.categories[ns] or {}
| |
− | table.insert(self.categories[ns], cat)
| |
− | end
| |
− |
| |
− | function MessageBox:addClass(class)
| |
− | if not class then
| |
− | return nil
| |
− | end
| |
− | table.insert(self.classes, class)
| |
− | end
| |
− |
| |
− | function MessageBox:setParameters()
| |
− | local args = self.args
| |
− | local cfg = self.cfg
| |
− |
| |
− | -- Get type data.
| |
− | self.type = args.type
| |
− | local typeData = cfg.types[self.type]
| |
− | self.invalidTypeError = cfg.showInvalidTypeError
| |
− | and self.type
| |
− | and not typeData
| |
− | typeData = typeData or cfg.types[cfg.default]
| |
− | self.typeClass = typeData.class
| |
− | self.typeImage = typeData.image
| |
− |
| |
− | -- Find if the box has been wrongly substituted.
| |
− | self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
| |
− |
| |
− | -- Find whether we are using a small message box.
| |
− | self.isSmall = cfg.allowSmall and (
| |
− | cfg.smallParam and args.small == cfg.smallParam
| |
− | or not cfg.smallParam and yesno(args.small)
| |
− | )
| |
− |
| |
− | -- Add attributes, classes and styles.
| |
− | self.id = args.id
| |
− | self:addClass(
| |
− | cfg.usePlainlinksParam and yesno(args.plainlinks or true) and 'plainlinks'
| |
− | )
| |
− | for _, class in ipairs(cfg.classes or {}) do
| |
− | self:addClass(class)
| |
− | end
| |
− | if self.isSmall then
| |
− | self:addClass(cfg.smallClass or 'mbox-small')
| |
− | end
| |
− | self:addClass(self.typeClass)
| |
− | self:addClass(args.class)
| |
− | self.style = args.style
| |
− | self.attrs = args.attrs
| |
− |
| |
− | -- Set text style.
| |
− | self.textstyle = args.textstyle
| |
− |
| |
− | -- Find if we are on the template page or not. This functionality is only
| |
− | -- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
| |
− | -- and cfg.templateCategoryRequireName are set.
| |
− | self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
| |
− | if self.useCollapsibleTextFields
| |
− | or cfg.templateCategory
| |
− | and cfg.templateCategoryRequireName
| |
− | then
| |
− | self.name = args.name
| |
− | if self.name then
| |
− | local templateName = mw.ustring.match(
| |
− | self.name,
| |
− | '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
| |
− | ) or self.name
| |
− | templateName = 'Template:' .. templateName
| |
− | self.templateTitle = getTitleObject(templateName)
| |
− | end
| |
− | self.isTemplatePage = self.templateTitle
| |
− | and mw.title.equals(self.title, self.templateTitle)
| |
− | end
| |
− |
| |
− | -- Process data for collapsible text fields. At the moment these are only
| |
− | -- used in {{ambox}}.
| |
− | if self.useCollapsibleTextFields then
| |
− | -- Get the self.issue value.
| |
− | if self.isSmall and args.smalltext then
| |
− | self.issue = args.smalltext
| |
− | else
| |
− | local sect
| |
− | if args.sect == '' then
| |
− | sect = 'This ' .. (cfg.sectionDefault or 'page')
| |
− | elseif type(args.sect) == 'string' then
| |
− | sect = 'This ' .. args.sect
| |
− | end
| |
− | local issue = args.issue
| |
− | issue = type(issue) == 'string' and issue ~= '' and issue or nil
| |
− | local text = args.text
| |
− | text = type(text) == 'string' and text or nil
| |
− | local issues = {}
| |
− | table.insert(issues, sect)
| |
− | table.insert(issues, issue)
| |
− | table.insert(issues, text)
| |
− | self.issue = table.concat(issues, ' ')
| |
− | end
| |
− |
| |
− | -- Get the self.talk value.
| |
− | local talk = args.talk
| |
− | -- Show talk links on the template page or template subpages if the talk
| |
− | -- parameter is blank.
| |
− | if talk == ''
| |
− | and self.templateTitle
| |
− | and (
| |
− | mw.title.equals(self.templateTitle, self.title)
| |
− | or self.title:isSubpageOf(self.templateTitle)
| |
− | )
| |
− | then
| |
− | talk = '#'
| |
− | elseif talk == '' then
| |
− | talk = nil
| |
− | end
| |
− | if talk then
| |
− | -- If the talk value is a talk page, make a link to that page. Else
| |
− | -- assume that it's a section heading, and make a link to the talk
| |
− | -- page of the current page with that section heading.
| |
− | local talkTitle = getTitleObject(talk)
| |
− | local talkArgIsTalkPage = true
| |
− | if not talkTitle or not talkTitle.isTalkPage then
| |
− | talkArgIsTalkPage = false
| |
− | talkTitle = getTitleObject(
| |
− | self.title.text,
| |
− | mw.site.namespaces[self.title.namespace].talk.id
| |
− | )
| |
− | end
| |
− | if talkTitle and talkTitle.exists then
| |
− | local talkText = '내용에 대한 의견이 있으시다면 '
| |
− | if talkArgIsTalkPage then
| |
− | talkText = string.format(
| |
− | '%s [[%s|%s]]에서 나누어 주세요.',
| |
− | talkText,
| |
− | talk,
| |
− | talkTitle.prefixedText
| |
− | )
| |
− | else
| |
− | talkText = string.format(
| |
− | '%s [[%s#%s|토론 문서]]에서 나누어 주세요.',
| |
− | talkText,
| |
− | talkTitle.prefixedText,
| |
− | talk
| |
− | )
| |
− | end
| |
− | self.talk = talkText
| |
− | end
| |
− | end
| |
− |
| |
− | -- Get other values.
| |
− | self.fix = args.fix ~= '' and args.fix or nil
| |
− | local date
| |
− | if args.date and args.date ~= '' then
| |
− | date = args.date
| |
− | elseif args.date == '' and self.isTemplatePage then
| |
− | date = lang:formatDate('Y년 n월')
| |
− | end
| |
− | if date then
| |
− | self.date = string.format(" <small>(%s)</small>", date)
| |
− | end
| |
− | self.info = args.info
| |
− | end
| |
− |
| |
− | -- Set the non-collapsible text field. At the moment this is used by all box
| |
− | -- types other than ambox, and also by ambox when small=yes.
| |
− | if self.isSmall then
| |
− | self.text = args.smalltext or args.text
| |
− | else
| |
− | self.text = args.text
| |
− | end
| |
− |
| |
− | -- Set the below row.
| |
− | self.below = cfg.below and args.below
| |
− |
| |
− | -- General image settings.
| |
− | self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
| |
− | self.imageEmptyCell = cfg.imageEmptyCell
| |
− | if cfg.imageEmptyCellStyle then
| |
− | self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
| |
− | end
| |
− |
| |
− | -- Left image settings.
| |
− | local imageLeft = self.isSmall and args.smallimage or args.image
| |
− | if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
| |
− | or not cfg.imageCheckBlank and imageLeft ~= 'none'
| |
− | then
| |
− | self.imageLeft = imageLeft
| |
− | if not imageLeft then
| |
− | local imageSize = self.isSmall
| |
− | and (cfg.imageSmallSize or '30x30px')
| |
− | or '40x40px'
| |
− | self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
| |
− | or 'Imbox notice.png', imageSize)
| |
− | end
| |
− | end
| |
− |
| |
− | -- Right image settings.
| |
− | local imageRight = self.isSmall and args.smallimageright or args.imageright
| |
− | if not (cfg.imageRightNone and imageRight == 'none') then
| |
− | self.imageRight = imageRight
| |
− | end
| |
− | end
| |
− |
| |
− | function MessageBox:setMainspaceCategories()
| |
− | local args = self.args
| |
− | local cfg = self.cfg
| |
− |
| |
− | if not cfg.allowMainspaceCategories then
| |
− | return nil
| |
− | end
| |
− |
| |
− | local nums = {}
| |
− | for _, prefix in ipairs{'cat', 'category', 'all'} do
| |
− | args[prefix .. '1'] = args[prefix]
| |
− | nums = union(nums, getArgNums(args, prefix))
| |
− | end
| |
− |
| |
− | -- The following is roughly equivalent to the old {{Ambox/category}}.
| |
− | local date = args.date
| |
− | date = type(date) == 'string' and date
| |
− | local preposition = 'from'
| |
− | for _, num in ipairs(nums) do
| |
− | local mainCat = args['cat' .. tostring(num)]
| |
− | or args['category' .. tostring(num)]
| |
− | local allCat = args['all' .. tostring(num)]
| |
− | mainCat = type(mainCat) == 'string' and mainCat
| |
− | allCat = type(allCat) == 'string' and allCat
| |
− | if mainCat and date and date ~= '' then
| |
− | local catTitle = string.format('%s/%s', mainCat, date)
| |
− | self:addCat(0, catTitle)
| |
− | catTitle = getTitleObject('분류:' .. catTitle)
| |
− | if not catTitle or not catTitle.exists then
| |
− | self:addCat(0, '지정 날짜가 올바르지 않은 틀이 있는 문서')
| |
− | end
| |
− | elseif mainCat and (not date or date == '') then
| |
− | self:addCat(0, mainCat)
| |
− | end
| |
− | if allCat then
| |
− | self:addCat(0, allCat)
| |
− | end
| |
− | end
| |
− | end
| |
− |
| |
− | function MessageBox:setTemplateCategories()
| |
− | local args = self.args
| |
− | local cfg = self.cfg
| |
− |
| |
− | -- Add template categories.
| |
− | if cfg.templateCategory then
| |
− | if cfg.templateCategoryRequireName then
| |
− | if self.isTemplatePage then
| |
− | self:addCat(10, cfg.templateCategory)
| |
− | end
| |
− | elseif not self.title.isSubpage then
| |
− | self:addCat(10, cfg.templateCategory)
| |
− | end
| |
− | end
| |
− |
| |
− | -- Add template error categories.
| |
− | if cfg.templateErrorCategory then
| |
− | local templateErrorCategory = cfg.templateErrorCategory
| |
− | local templateCat, templateSort
| |
− | if not self.name and not self.title.isSubpage then
| |
− | templateCat = templateErrorCategory
| |
− | elseif self.isTemplatePage then
| |
− | local paramsToCheck = cfg.templateErrorParamsToCheck or {}
| |
− | local count = 0
| |
− | for i, param in ipairs(paramsToCheck) do
| |
− | if not args[param] then
| |
− | count = count + 1
| |
− | end
| |
− | end
| |
− | if count > 0 then
| |
− | templateCat = templateErrorCategory
| |
− | templateSort = tostring(count)
| |
− | end
| |
− | if self.categoryNums and #self.categoryNums > 0 then
| |
− | templateCat = templateErrorCategory
| |
− | templateSort = 'C'
| |
− | end
| |
− | end
| |
− | self:addCat(10, templateCat, templateSort)
| |
− | end
| |
− | end
| |
− |
| |
− | function MessageBox:setAllNamespaceCategories()
| |
− | -- Set categories for all namespaces.
| |
− | if self.invalidTypeError then
| |
− | local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
| |
− | self:addCat('all', '잘못된 누리위키 알림 상자', allSort)
| |
− | end
| |
− | if self.isSubstituted then
| |
− | self:addCat('all', '잘못 치환된 틀을 사용한 문서')
| |
− | end
| |
− | end
| |
− |
| |
− | function MessageBox:setCategories()
| |
− | if self.title.namespace == 0 then
| |
− | self:setMainspaceCategories()
| |
− | elseif self.title.namespace == 10 then
| |
− | self:setTemplateCategories()
| |
− | end
| |
− | self:setAllNamespaceCategories()
| |
− | end
| |
− |
| |
− | function MessageBox:renderCategories()
| |
− | -- Convert category tables to strings and pass them through
| |
− | -- [[Module:Category handler]].
| |
− | return categoryHandler{
| |
− | main = table.concat(self.categories[0] or {}),
| |
− | template = table.concat(self.categories[10] or {}),
| |
− | all = table.concat(self.categories.all or {}),
| |
− | nocat = self.args.nocat,
| |
− | page = self.args.page
| |
− | }
| |
− | end
| |
− |
| |
− | function MessageBox:export()
| |
− | local root = mw.html.create()
| |
− |
| |
− | -- Add the subst check error.
| |
− | if self.isSubstituted and self.name then
| |
− | root:tag('b')
| |
− | :addClass('error')
| |
− | :wikitext(string.format(
| |
− | '<code>%s[[틀:%s|%s]]%s</code> 틀이 잘못 치환되었습니다.',
| |
− | mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
| |
− | ))
| |
− | end
| |
− |
| |
− | -- Create the box table.
| |
− | local boxTable = root:tag('table')
| |
− | boxTable:attr('id', self.id or nil)
| |
− | for i, class in ipairs(self.classes or {}) do
| |
− | boxTable:addClass(class or nil)
| |
− | end
| |
− | boxTable
| |
− | :cssText(self.style or nil)
| |
− | :attr('role', 'presentation')
| |
− |
| |
− | if self.attrs then
| |
− | boxTable:attr(self.attrs)
| |
− | end
| |
− |
| |
− | -- Add the left-hand image.
| |
− | local row = boxTable:tag('tr')
| |
− | if self.imageLeft then
| |
− | local imageLeftCell = row:tag('td'):addClass('mbox-image')
| |
− | if self.imageCellDiv then
| |
− | -- If we are using a div, redefine imageLeftCell so that the image
| |
− | -- is inside it. Divs use style="width: 52px;", which limits the
| |
− | -- image width to 52px. If any images in a div are wider than that,
| |
− | -- they may overlap with the text or cause other display problems.
| |
− | imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
| |
− | end
| |
− | imageLeftCell:wikitext(self.imageLeft or nil)
| |
− | elseif self.imageEmptyCell then
| |
− | -- Some message boxes define an empty cell if no image is specified, and
| |
− | -- some don't. The old template code in templates where empty cells are
| |
− | -- specified gives the following hint: "No image. Cell with some width
| |
− | -- or padding necessary for text cell to have 100% width."
| |
− | row:tag('td')
| |
− | :addClass('mbox-empty-cell')
| |
− | :cssText(self.imageEmptyCellStyle or nil)
| |
− | end
| |
− |
| |
− | -- Add the text.
| |
− | local textCell = row:tag('td'):addClass('mbox-text')
| |
− | if self.useCollapsibleTextFields then
| |
− | -- The message box uses advanced text parameters that allow things to be
| |
− | -- collapsible. At the moment, only ambox uses this.
| |
− | textCell:cssText(self.textstyle or nil)
| |
− | local textCellSpan = textCell:tag('span')
| |
− | textCellSpan
| |
− | :addClass('mbox-text-span')
| |
− | :wikitext(self.issue or nil)
| |
− | if not self.isSmall then
| |
− | textCellSpan:tag('span')
| |
− | :addClass('hide-when-compact')
| |
− | :wikitext(self.talk and (' ' .. self.talk) or nil)
| |
− | :wikitext(self.fix and ('<br />' .. self.fix) or nil)
| |
− | end
| |
− | textCellSpan:wikitext(self.date and (' ' .. self.date) or nil)
| |
− | if not self.isSmall then
| |
− | textCellSpan
| |
− | :tag('span')
| |
− | :addClass('hide-when-compact')
| |
− | :wikitext(self.info and (' ' .. self.info) or nil)
| |
− | end
| |
− | else
| |
− | -- Default text formatting - anything goes.
| |
− | textCell
| |
− | :cssText(self.textstyle or nil)
| |
− | :wikitext(self.text or nil)
| |
− | end
| |
− |
| |
− | -- Add the right-hand image.
| |
− | if self.imageRight then
| |
− | local imageRightCell = row:tag('td'):addClass('mbox-imageright')
| |
− | if self.imageCellDiv then
| |
− | -- If we are using a div, redefine imageRightCell so that the image
| |
− | -- is inside it.
| |
− | imageRightCell = imageRightCell:tag('div'):css('width', '52px')
| |
− | end
| |
− | imageRightCell
| |
− | :wikitext(self.imageRight or nil)
| |
− | end
| |
− |
| |
− | -- Add the below row.
| |
− | if self.below then
| |
− | boxTable:tag('tr')
| |
− | :tag('td')
| |
− | :attr('colspan', self.imageRight and '3' or '2')
| |
− | :addClass('mbox-text')
| |
− | :cssText(self.textstyle or nil)
| |
− | :wikitext(self.below or nil)
| |
− | end
| |
− |
| |
− | -- Add error message for invalid type parameters.
| |
− | if self.invalidTypeError then
| |
− | root:tag('div')
| |
− | :css('text-align', 'center')
| |
− | :wikitext(string.format(
| |
− | '이 메시지 상자는 유효하지 않은 "type=%s" 변수를 사용하고 있으므로 수정이 필요합니다.',
| |
− | self.type or ''
| |
− | ))
| |
− | end
| |
− |
| |
− | -- Add categories.
| |
− | root:wikitext(self:renderCategories() or nil)
| |
− |
| |
− | return tostring(root)
| |
− | end
| |
− |
| |
− | --------------------------------------------------------------------------------
| |
− | -- Exports
| |
− | --------------------------------------------------------------------------------
| |
− |
| |
− | local p, mt = {}, {}
| |
− |
| |
− | function p._exportClasses()
| |
− | -- For testing.
| |
− | return {
| |
− | MessageBox = MessageBox
| |
− | }
| |
− | end
| |
− |
| |
− | function p.main(boxType, args, cfgTables)
| |
− | local newargs = {}
| |
− | for k, v in pairs(args) do
| |
− | newargs[localize.arg_map[k] or k] = v
| |
− | end
| |
− | if newargs.type ~= nil then
| |
− | newargs.type = localize.type_map[newargs.type] or newargs.type
| |
− | end
| |
− | if newargs.small ~= nil then
| |
− | newargs.small = localize.small_map[newargs.small] or newargs.small
| |
− | end
| |
− |
| |
− | if newargs.image == '없음' then newargs.image = 'none' end
| |
− | if newargs.imageright == '없음' then newargs.imageright = 'none' end
| |
− | if newargs.smallimage == '없음' then newargs.smallimage = 'none' end
| |
− | if newargs.smallimageright == '없음' then newargs.smallimageright = 'none' end
| |
− | if newargs.date then newargs.date = getDate(newargs.date) end
| |
− |
| |
− | local box = MessageBox.new(boxType, newargs, cfgTables or mw.loadData('Module:Message box/configuration'))
| |
− | box:setParameters()
| |
− | box:setCategories()
| |
− | return box:export()
| |
− | end
| |
− |
| |
− | function mt.__index(t, k)
| |
− | return function (frame)
| |
− | if not getArgs then
| |
− | getArgs = require('Module:Arguments').getArgs
| |
− | end
| |
− | return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
| |
− | end
| |
− | end
| |
− |
| |
− | return setmetatable(p, mt)
| |
− |
| |
− | == 모듈:Check for unknown parameters ==
| |
− |
| |
− | -- This module may be used to compare the arguments passed to the parent
| |
− | -- with a list of arguments, returning a specified result if an argument is
| |
− | -- not on the list
| |
− | local p = {}
| |
− |
| |
− | local function trim(s)
| |
− | return s:match('^%s*(.-)%s*$')
| |
− | end
| |
− |
| |
− | local function isnotempty(s)
| |
− | return s and s:match('%S')
| |
− | end
| |
− |
| |
− | local function clean(text)
| |
− | -- Return text cleaned for display and truncated if too long.
| |
− | -- Strip markers are replaced with dummy text representing the original wikitext.
| |
− | local pos, truncated
| |
− | local function truncate(text)
| |
− | if truncated then
| |
− | return ''
| |
− | end
| |
− | if mw.ustring.len(text) > 25 then
| |
− | truncated = true
| |
− | text = mw.ustring.sub(text, 1, 25) .. '...'
| |
− | end
| |
− | return mw.text.nowiki(text)
| |
− | end
| |
− | local parts = {}
| |
− | for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
| |
− | pos = remainder
| |
− | table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
| |
− | end
| |
− | table.insert(parts, truncate(text:sub(pos or 1)))
| |
− | return table.concat(parts)
| |
− | end
| |
− |
| |
− | function p._check(args, pargs)
| |
− | if type(args) ~= "table" or type(pargs) ~= "table" then
| |
− | -- TODO: error handling
| |
− | return
| |
− | end
| |
− |
| |
− | -- create the list of known args, regular expressions, and the return string
| |
− | local knownargs = {}
| |
− | local regexps = {}
| |
− | for k, v in pairs(args) do
| |
− | if type(k) == 'number' then
| |
− | v = trim(v)
| |
− | knownargs[v] = 1
| |
− | elseif k:find('^regexp[1-9][0-9]*$') then
| |
− | table.insert(regexps, '^' .. v .. '$')
| |
− | end
| |
− | end
| |
− |
| |
− | -- loop over the parent args, and make sure they are on the list
| |
− | local ignoreblank = isnotempty(args['ignoreblank'])
| |
− | local showblankpos = isnotempty(args['showblankpositional'])
| |
− | local values = {}
| |
− | for k, v in pairs(pargs) do
| |
− | if type(k) == 'string' and knownargs[k] == nil then
| |
− | local knownflag = false
| |
− | for _, regexp in ipairs(regexps) do
| |
− | if mw.ustring.match(k, regexp) then
| |
− | knownflag = true
| |
− | break
| |
− | end
| |
− | end
| |
− | if not knownflag and ( not ignoreblank or isnotempty(v) ) then
| |
− | table.insert(values, clean(k))
| |
− | end
| |
− | elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
| |
− | local knownflag = false
| |
− | for _, regexp in ipairs(regexps) do
| |
− | if mw.ustring.match(tostring(k), regexp) then
| |
− | knownflag = true
| |
− | break
| |
− | end
| |
− | end
| |
− | if not knownflag and ( showblankpos or isnotempty(v) ) then
| |
− | table.insert(values, k .. ' = ' .. clean(v))
| |
− | end
| |
− | end
| |
− | end
| |
− |
| |
− | -- add results to the output tables
| |
− | local res = {}
| |
− | if #values > 0 then
| |
− | local unknown_text = args['unknown'] or 'Found _VALUE_, '
| |
− |
| |
− | if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
| |
− | local preview_text = args['preview']
| |
− | if isnotempty(preview_text) then
| |
− | preview_text = require('Module:If preview')._warning({preview_text})
| |
− | elseif preview == nil then
| |
− | preview_text = unknown_text
| |
− | end
| |
− | unknown_text = preview_text
| |
− | end
| |
− | for _, v in pairs(values) do
| |
− | -- Fix odd bug for | = which gets stripped to the empty string and
| |
− | -- breaks category links
| |
− | if v == '' then v = ' ' end
| |
− |
| |
− | -- avoid error with v = 'example%2' ("invalid capture index")
| |
− | local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
| |
− | table.insert(res, r)
| |
− | end
| |
− | end
| |
− |
| |
− | return table.concat(res)
| |
− | end
| |
− |
| |
− | function p.check(frame)
| |
− | local args = frame.args
| |
− | local pargs = frame:getParent().args
| |
− | return p._check(args, pargs)
| |
− | end
| |
− |
| |
− | return p
| |