Василиса▶ Я жду вашего обращения. Что Вы хотите узнать?
Логотип
Модуль:Message box — Википедия Модуль:Message boxМатериал из Википедии — свободной энциклопедии Документация [ просмотр | править | история | обновить ]

Этот модуль предназначен для создания шаблонов-сообщений ( {{ mbox }} , {{ ambox }} , {{ cmbox }} , {{ fmbox }} , {{ imbox }} , {{ ombox }} и {{ tmbox }} ), также он может использоваться другими модулями. Этот модуль не должен вызываться напрямую из статей, для этого используйте один из вышеперечисленных шаблонов-сообщений.

Использование

Чтобы использовать данной модуль в другом модуле, нужно для начала загрузить его:

localmessageBox=require('Module:Message box')

Чтобы создать шаблон-сообщение, используйте функцию main . У неё есть 2 параметра: первый — тип шаблона, второй — таблица с параметрами шаблона.

localbox=messageBox.main(boxType,{param1=param1,param2=param2,-- Еще параметры...})

Существует 7 вариантов оформления в зависимости от пространства имен, в котором располагается шаблон:

Функция Шаблон Тип страницы
mbox {{ mbox }} определяется автоматически
ambox {{ ambox }} статьи
cmbox {{ cmbox }} категории
fmbox {{ fmbox }} страницы интерфейса
imbox {{ imbox }} файлы
tmbox {{ tmbox }} страницы обсуждения
ombox {{ ombox }} другие пространства имен

Подробнее о дополнительных параметрах шаблонов см. их документации.

Вызов через #invoke

Помимо функции main , в модуле есть отдельные функции для каждого типа сообщений. Они вызываются кодом {{#invoke:Message box | mbox | ...}} , {{#invoke:Message box | ambox | ...}} и т. д. Также эти функции могут быть вызваны другими модулями, однако это менее эффективно, чем вызов функции main .

Технические детали

Все перечисленные выше шаблоны основаны на одном базовом коде, а различия между каждым из них настраиваются на отдельной странице . Ниже перечислены различные параметры конфигурации:

types — a table containing data used by the type parameter of the message box. The table keys are the values that can be passed to the type parameter, and the table values are tables containing the class and the image used by that type.default — the type to use if no value was passed to the type parameter, or if an invalid value was specified.showInvalidTypeError — whether to show an error if the value passed to the type parameter was invalid.allowBlankParams — usually blank values are stripped from parameters passed to the module. However, whitespace is preserved for the parameters included in the allowBlankParams table.allowSmall — whether a small version of the message box can be produced with «small=yes».smallParam — a custom name for the small parameter. For example, if set to «left» you can produce a small message box using «small=left».smallClass — the class to use for small message boxes.substCheck — whether to perform a subst check or not.classes — an array of classes to use with the message box.imageEmptyCell — whether to use an empty <td></td> cell if there is no image set. This is used to preserve spacing for message boxes with a width of less than 100 % of the screen.imageEmptyCellStyle — whether empty image cells should be styled.imageCheckBlank — whether «image=blank» results in no image being displayed.imageSmallSize — usually, images used in small message boxes are set to 30x30px. This sets a custom size.imageCellDiv — whether to enclose the image in a div enforcing a maximum image size.useCollapsibleTextFields — whether to use text fields that can be collapsed, i.e. «issue», «fix», «talk», etc. Currently only used in ambox.imageRightNone — whether imageright=none results in no image being displayed on the right-hand side of the message box.sectionDefault — the default name for the «section» parameter. Depends on useCollapsibleTextFields.allowMainspaceCategories — allow categorisation in the main namespace.templateCategory — the name of a category to be placed on the template page.templateCategoryRequireName — whether the name parameter is required to display the template category.templateErrorCategory — the name of the error category to be used on the template page.templateErrorParamsToCheck — an array of parameter names to check. If any are absent, the templateErrorCategory is applied to the template page.

Во избежание поломок страниц, использующих этот модуль, экспериментируйте в песочнице для модулей .
Пожалуйста, добавляйте категории на подстраницу /doc . Подстраницы этого модуля .

-- This is a meta-module for producing message box templates, including-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.-- Load necessary modules.--require('Module:No globals')localgetArgslocalcategoryHandler=require('Module:Category handler')._mainlocalyesno=require('Module:Yesno')-- Get a language object for formatDate and ucfirst.locallang=mw.language.getContentLanguage()localdates=require('Module:Dates')-- Define constantslocalCONFIG_MODULE='Module:Message box/configuration'---------------------------------------------------------------------------------- Helper functions--------------------------------------------------------------------------------localfunctiongetTitleObject(...)-- Get the title object, passing the function through pcall-- in case we are over the expensive function count limit.localsuccess,title=pcall(mw.title.new,...)ifsuccessthenreturntitleendendlocalfunctionunion(t1,t2)-- Returns the union of two arrays.localvals={}fori,vinipairs(t1)dovals[v]=trueendfori,vinipairs(t2)dovals[v]=trueendlocalret={}forkinpairs(vals)dotable.insert(ret,k)endtable.sort(ret)returnretendlocalfunctiongetArgNums(args,prefix)localnums={}fork,vinpairs(args)dolocalnum=mw.ustring.match(tostring(k),'^'..prefix..'([1-9]%d*)$')ifnumthentable.insert(nums,tonumber(num))endendtable.sort(nums)returnnumsend---------------------------------------------------------------------------------- Box class definition--------------------------------------------------------------------------------localMessageBox={}MessageBox.__index=MessageBoxfunctionMessageBox.new(boxType,args,cfg)args=argsor{}localobj={}-- Set the title object and the namespace.obj.title=getTitleObject(args.page)ormw.title.getCurrentTitle()-- Set the config for our box type.obj.cfg=cfg[boxType]ifnotobj.cfgthenlocalns=obj.title.namespace-- boxType is "mbox" or invalid inputifns==0thenobj.cfg=cfg.ambox-- main namespaceelseifns==6thenobj.cfg=cfg.imbox-- file namespaceelseifns==14thenobj.cfg=cfg.cmbox-- category namespaceelselocalnsTable=mw.site.namespaces[ns]ifnsTableandnsTable.isTalkthenobj.cfg=cfg.tmbox-- any talk namespaceelseobj.cfg=cfg.ombox-- other namespaces or invalid inputendendend-- Set the arguments, and remove all blank arguments except for the ones-- listed in cfg.allowBlankParams.dolocalnewArgs={}fork,vinpairs(args)doifv~=''thennewArgs[k]=vendendfori,paraminipairs(obj.cfg.allowBlankParamsor{})donewArgs[param]=args[param]endobj.args=newArgsend-- Define internal data structure.obj.categories={}obj.classes={}returnsetmetatable(obj,MessageBox)endfunctionMessageBox:addCat(ns,cat,sort)ifnotcatthenreturnnilendifsortthencat=string.format('[[Категория:%s|%s]]',cat,sort)elsecat=string.format('[[Категория:%s]]',cat)endself.categories[ns]=self.categories[ns]or{}table.insert(self.categories[ns],cat)endfunctionMessageBox:addClass(class)ifnotclassthenreturnnilendtable.insert(self.classes,class)endfunctionMessageBox:setParameters()localargs=self.argslocalcfg=self.cfg-- Get type data.self.type=args.typelocaltypeData=cfg.types[self.type]self.invalidTypeError=cfg.showInvalidTypeErrorandself.typeandnottypeDatatypeData=typeDataorcfg.types[cfg.default]self.typeClass=typeData.classself.typeImage=typeData.image-- Find if the box has been wrongly substituted.self.isSubstituted=cfg.substCheckandargs.subst=='SUBST'-- Find whether we are using a small message box.self.isSmall=cfg.allowSmalland(cfg.smallParamandargs.small==cfg.smallParamornotcfg.smallParamandyesno(args.small))-- Add attributes, classes and styles.self.id=args.idifyesno(args.plainlinks)~=falsethenself:addClass('plainlinks')endifargs.minithenself:addClass('ambox-mini')endfor_,classinipairs(cfg.classesor{})doself:addClass(class)endifself.isSmallthenself:addClass(cfg.smallClassor'mbox-small')endself:addClass(self.typeClass)self:addClass(args.class)self.style=args.styleself.attrs=args.attrsself.dataLabel1=args['data-label-1']self.dataLabel2=args['data-label-2']self.dataLabel3=args['data-label-3']self.dataValue1=args['data-value-1']self.dataValue2=args['data-value-2']self.dataValue3=args['data-value-3']-- 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.useCollapsibleTextFieldsifself.useCollapsibleTextFieldsorcfg.templateCategoryandcfg.templateCategoryRequireNamethenself.name=args.nameifself.namethenlocaltemplateName=mw.ustring.match(self.name,'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$')orself.nametemplateName=('Template:'..templateName)or('Шаблон:'..templateName)self.templateTitle=getTitleObject(templateName)endself.isTemplatePage=self.templateTitleandmw.title.equals(self.title,self.templateTitle)end-- Process data for collapsible text fields. At the moment these are only-- used in {{ambox}}.ifself.useCollapsibleTextFieldsthen-- Get the self.issue value.ifself.isSmallandargs.smalltextthenself.issue=args.smalltextelselocalsectifargs.sect==''thensect='<span style="font-weight:bold">Эта '..(cfg.sectionDefaultor'статья')..'</span>'elseiftype(args.sect)=='string'thensect='<span style="font-weight:bold">'..args.sect..'</span>'endlocalissue=args.issueissue=type(issue)=='string'andissue~=''andissueornillocaltext=args.texttext=type(text)=='string'andtextornillocalissues={}table.insert(issues,sect)table.insert(issues,issue)table.insert(issues,text)self.issue=table.concat(issues,' ')end-- Get the self.talk value.localtalk=args.talk-- Show talk links on the template page or template subpages if the talk-- parameter is blank.iftalk==''andself.templateTitleand(mw.title.equals(self.templateTitle,self.title)orself.title:isSubpageOf(self.templateTitle))thentalk='#'elseiftalk==''thentalk=nilendiftalkthen-- 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.localtalkTitle=getTitleObject(talk)localtalkArgIsTalkPage=trueifnottalkTitleornottalkTitle.isTalkPagethentalkArgIsTalkPage=falsetalkTitle=getTitleObject(self.title.text,mw.site.namespaces[self.title.namespace].talk.id)endiftalkTitleandtalkTitle.existsthenlocaltalkText='Соответствующую дискуссию можно найти на'iftalkArgIsTalkPagethentalkText=string.format('%s [[%s|%s]].',talkText,talk,talkTitle.prefixedText)elsetalkText=string.format('%s [[%s#%s|странице обсуждения]].',talkText,talkTitle.prefixedText,talk)endself.talk=talkTextendend-- Get other values.self.fix=args.fix~=''andargs.fixornillocaldateifargs.dateandargs.date~=''thenifdates.Yyyymmdd(args.date)==nilthendate=args.dateelselocaly,m,d=dates.Yyyymmdd(args.date)date=string.format('%4i-i-i',y,m,d)endelseifargs.date==''andself.isTemplatePagethendate=lang:formatDate('d xg Y')endifdatethenself.date=string.format(" ''(%s)''",lang:formatDate('d xg Y',date))endself.info=args.infoifyesno(args.removalnotice)thenself.removalNotice=cfg.removalNoticeendend-- 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.ifself.isSmallthenself.text=args.smalltextorargs.textelseself.text=args.textself.textsmall=args['text-small']end-- Set the below row.self.below=cfg.belowandargs.below-- General image settings.self.imageCellDiv=notself.isSmallandcfg.imageCellDivself.imageEmptyCell=cfg.imageEmptyCellifcfg.imageEmptyCellStylethenself.imageEmptyCellStyle='border:none;padding:0px;width:1px'end-- Left image settings.localimageLeft=self.isSmallandargs.smallimageorargs.imageifcfg.imageCheckBlankandimageLeft~='blank'andimageLeft~='none'andimageLeft~=''ornotcfg.imageCheckBlankandimageLeft~='none'thenself.imageLeft=imageLeftifnotimageLeftthenlocalimageSize=self.isSmalland(cfg.imageSmallSizeor'30x30px')orcfg.imageSizeor'40x40px'self.imageLeft=string.format('[[File:%s|%s|alt=]]',self.typeImageor'Information icon4.svg',imageSize)endend-- Right image settings.localimageRight=self.isSmallandargs.smallimagerightorargs.imagerightifnot(cfg.imageRightNoneandimageRight=='none')thenself.imageRight=imageRightendendfunctionMessageBox:setMainspaceCategories()localargs=self.argslocalcfg=self.cfgifnotcfg.allowMainspaceCategoriesthenreturnnilendlocalnums={}for_,prefixinipairs{'cat','category','all'}doargs[prefix..'1']=args[prefix]nums=union(nums,getArgNums(args,prefix))end-- The following is roughly equivalent to the old {{Ambox/category}}.localdate=args.datedate=type(date)=='string'anddatelocalpreposition='с'localsuffix='года'for_,numinipairs(nums)dolocalmainCat=args['cat'..tostring(num)]orargs['category'..tostring(num)]localallCat=args['all'..tostring(num)]mainCat=type(mainCat)=='string'andmainCatallCat=type(allCat)=='string'andallCatifmainCatanddateanddate~=''thenifdates.Yyyymmdd(args.date)==nilthendate=args.dateelselocaly,m,d=dates.Yyyymmdd(args.date)date=string.format('%4i-i-i',y,m,d)endlocalcatTitle=string.format('%s %s %s %s',mainCat,preposition,lang:formatDate('xg Y',date),suffix)self:addCat(0,catTitle)catTitle=getTitleObject('Категория:'..catTitle)ifnotcatTitleornotcatTitle.existsthenself:addCat(0,'Википедия:Статьи с недопустимым параметром даты в шаблоне')endelseifmainCatand(notdateordate=='')thenself:addCat(0,mainCat)endifallCatthenself:addCat(0,allCat)endendendfunctionMessageBox:setTemplateCategories()localargs=self.argslocalcfg=self.cfg-- Add template categories.ifcfg.templateCategorythenifcfg.templateCategoryRequireNamethenifself.isTemplatePagethenself:addCat(10,cfg.templateCategory)endelseifnotself.title.isSubpagethenself:addCat(10,cfg.templateCategory)endend-- Add template error categories.ifcfg.templateErrorCategorythenlocaltemplateErrorCategory=cfg.templateErrorCategorylocaltemplateCat,templateSortifnotself.nameandnotself.title.isSubpagethentemplateCat=templateErrorCategoryelseifself.isTemplatePagethenlocalparamsToCheck=cfg.templateErrorParamsToCheckor{}localcount=0fori,paraminipairs(paramsToCheck)doifnotargs[param]thencount=count+1endendifcount>0thentemplateCat=templateErrorCategorytemplateSort=tostring(count)endifself.categoryNumsand#self.categoryNums>0thentemplateCat=templateErrorCategorytemplateSort='C'endendself:addCat(10,templateCat,templateSort)endendfunctionMessageBox:setAllNamespaceCategories()-- Set categories for all namespaces.ifself.invalidTypeErrorthenlocalallSort=(self.title.namespace==0and'Main:'or'')..self.title.prefixedTextself:addCat('all','Википедия:Необходимо исправить параметр в шаблоне-сообщении',allSort)endifself.isSubstitutedthenself:addCat('all','Википедия:Страницы с ошибочно подставленными шаблонами')endendfunctionMessageBox:setCategories()ifself.title.namespace==0thenself:setMainspaceCategories()elseifself.title.namespace==10thenself:setTemplateCategories()endself:setAllNamespaceCategories()endfunctionMessageBox:renderCategories()-- Convert category tables to strings and pass them through-- [[Module:Category handler]].returncategoryHandler{main=table.concat(self.categories[0]or{}),template=table.concat(self.categories[10]or{}),all=table.concat(self.categories.allor{}),nocat=self.args.nocat,page=self.args.page}endfunctionMessageBox:export()localroot=mw.html.create()-- Add the subst check error.ifself.isSubstitutedandself.namethenroot: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.localboxTable=root:tag('table')boxTable:attr('id',self.idornil)fori,classinipairs(self.classesor{})doboxTable:addClass(classornil)endboxTable:cssText(self.styleornil):attr('role','presentation')ifself.dataLabel1thenboxTable:attr('data-'..self.dataLabel1,self.dataValue1)endifself.dataLabel2thenboxTable:attr('data-'..self.dataLabel2,self.dataValue2)endifself.dataLabel3thenboxTable:attr('data-'..self.dataLabel3,self.dataValue3)endifself.attrsthenboxTable:attr(self.attrs)end-- Add the left-hand image.localrow=boxTable:tag('tr')ifself.imageLeftthenlocalimageLeftCell=row:tag('td'):addClass('mbox-image')ifself.imageCellDivthen-- 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')endimageLeftCell:wikitext(self.imageLeftornil)elseifself.imageEmptyCellthen-- 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.imageEmptyCellStyleornil)end-- Add the text.localtextCell=row:tag('td'):addClass('mbox-text')ifself.useCollapsibleTextFieldsthen-- The message box uses advanced text parameters that allow things to be-- collapsible. At the moment, only ambox uses this.textCell:cssText(self.textstyleornil)localtextCellDiv=textCell:tag('div')textCellDiv:addClass('mbox-text-div'):wikitext(self.issueornil)localtextsmallCellDiv=textCell:tag('div')textsmallCellDiv:addClass('mbox-textsmall-div hide-when-compact'):cssText(self.textsmallstyleor'font-size:85%'):wikitext(self.textsmallornil)if(self.talkorself.fix)andnotself.isSmallthentextsmallCellDiv:tag('span'):addClass('hide-when-compact'):wikitext(self.talkand(' '..self.talk)ornil):wikitext(self.fixand(' '..self.fix)ornil)endtextsmallCellDiv:wikitext(self.dateand(' '..self.date)ornil)ifself.infoandnotself.isSmallthentextsmallCellDiv:tag('span'):addClass('hide-when-compact'):wikitext(self.infoand(' '..self.info)ornil)endifself.removalNoticethentextsmallCellDiv:tag('small'):addClass('hide-when-compact'):tag('i'):wikitext(string.format(" (%s)",self.removalNotice))endelse-- Default text formatting - anything goes.textCell:cssText(self.textstyleornil):wikitext(self.textornil)end-- Add the right-hand image.ifself.imageRightthenlocalimageRightCell=row:tag('td'):addClass('mbox-imageright')ifself.imageCellDivthen-- If we are using a div, redefine imageRightCell so that the image-- is inside it.imageRightCell=imageRightCell:tag('div'):css('width','52px')endimageRightCell:wikitext(self.imageRightornil)end-- Add the below row.ifself.belowthenboxTable:tag('tr'):tag('td'):attr('colspan',self.imageRightand'3'or'2'):addClass('mbox-text'):cssText(self.textstyleornil):wikitext(self.belowornil)end-- Add error message for invalid type parameters.ifself.invalidTypeErrorthenroot:tag('div'):css('text-align','center'):wikitext(string.format('Этот шаблон-сообщение использует неверный параметр "type=%s", необходимо исправить.',self.typeor''))end-- Add categories.root:wikitext(self:renderCategories()ornil)returntostring(root)end---------------------------------------------------------------------------------- Exports--------------------------------------------------------------------------------localp,mt={},{}functionp._exportClasses()-- For testing.return{MessageBox=MessageBox}endfunctionp.main(boxType,args,cfgTables)localbox=MessageBox.new(boxType,args,cfgTablesormw.loadData(CONFIG_MODULE))box:setParameters()box:setCategories()returnbox:export()endfunctionmt.__index(t,k)returnfunction(frame)ifnotgetArgsthengetArgs=require('Module:Arguments').getArgsendreturnt.main(k,getArgs(frame,{trim=false,removeBlanks=false}))endendreturnsetmetatable(p,mt) Источник — https://ru.wikipedia.org/w/index.php?title=Модуль:Message_box&oldid=95395537 Категория : Модули:Критические НавигацияПерсональные инструментыВы не представились системе Обсуждение Вклад Создать учётную запись Войти Пространства имён Модуль Обсуждение ВариантыПросмотры Читать Просмотр кода История ЕщёПоиск
Навигация Заглавная страница Рубрикация Указатель А — Я Избранные статьи Случайная статья Текущие события Участие Сообщить об ошибке Сообщество Форум Свежие правки Новые страницы Справка Пожертвовать Инструменты Ссылки сюда Связанные правки Служебные страницы Постоянная ссылка Сведения о странице Элемент Викиданных В других проектах Викисклад MediaWiki Мета-вики Викивиды Викиданные Печать/экспорт Скачать как PDF На других языках Afrikaans አማርኛ العربية مصرى Asturianu Aymar aru Azərbaycanca تۆرکجه Башҡортса Bali Bikol Central Беларуская Беларуская (тарашкевіца)‎ Български ������� Bislama ����� Brezhoneg Bosanski Català Mìng-dĕ̤ng-ngṳ̄ Нохчийн Cebuano Chamoru کوردی Cymraeg Dansk Thuɔŋjäŋ Zazaki ދިވެހިބަސް Ελληνικά English Español Eesti Euskara Estremeñu فارسی Fulfulde Suomi Føroyskt Français Arpetan Nordfriisk Gàidhlig Galego ������ ������ / Gõychi Konknni Bahasa Hulontalo ������� 客家語/Hak-kâ-ngî Hawaiʻi עברית ������ Hrvatski Kreyòl ayisyen Հայերեն Արեւմտահայերէն Bahasa Indonesia Ilokano ГӀалгӀай Ido Italiano 日本語 Jawa ქართული Kabɩyɛ Қазақша ភាសាខ្មែរ ����� 한국어 Kurdî Lëtzebuergesch لۊری شومالی Lietuvių Latgaļu Latviešu ������ Malagasy Македонски ������ Монгол ဘာသာ မန် ����� Bahasa Melayu Mirandés မြန်မာဘာသာ Эрзянь مازِرونی ������ ����� ���� Nederlands Norsk nynorsk Norsk bokmål Occitan ����� Pangasinan Norfuk / Pitkern پښتو Português Kirundi Română ��������� Scots سنڌي Srpskohrvatski / српскохрватски ၽႃႇသႃႇတႆး ����� Simple English ChiShona Shqip Српски / srpski Sunda Sakizaya ����� ���� ������ Tetun Тоҷикӣ ��� Tagalog Setswana Türkçe ChiTumbuka Українська اردو Tiếng Việt Winaray 吴语 IsiXhosa Yorùbá 中文 文言 Bân-lâm-gú 粵語 Править ссылки Эта страница в последний раз была отредактирована 2 октября 2018 в 20:53.Текст доступен по лицензии Creative Commons Attribution-ShareAlike ; в отдельных случаях могут действовать дополнительные условия. Подробнее см. Условия использования . Wikipedia® — зарегистрированный товарный знак некоммерческой организации Wikimedia Foundation, Inc. Политика конфиденциальности Описание Википедии Отказ от ответственности Свяжитесь с нами Разработчики Статистика Заявление о куки Мобильная версия Wikimedia Foundation Powered by MediaWiki
© 2014-2020 ЯВИКС - все права защищены.
Наши контакты/Карта ссылок