Bu modül şu Lua modüllerini kullanıyor: |
Bu Lua modülü yaklaşık 141.000 (ki bu ≈%5 oranına tekabül ediyor) sayfada kullanılmaktadır. Lütfen yapacağınız değişiklikleri büyük ölçekli aksamaları ve sunucuya gereksiz yük binmesini önlemek için öncelikle şablonun ile alt sayfalarında ya da kendi test ediniz. Testten geçen değişiklikler daha sonra bu sayfaya tek bir düzenlemede eklenebilir. Eğer yapmayı planladığınız değişiklikler ile istediğiniz sonucu elde edemiyorsanız görüş alışverişinde bulununuz. |
Bu modül sistem iletilerinde kullanılmaktadır. Yapılacak olan değişiklikler Vikipedi arayüzüne anında yansıyacaktır. Sunuculara ek yük binmesine ve olası hataların arayüze yansımasına engel olmak için yapılacak olan deneme-yanılma değişikliklerinin öncelikle ile alt sayfalarında ya da sınanması gerekmektedir. Sınamadan geçen değişiklikler eğer istenen sonucu veriyorsa bir kerede bu modüla eklenebilirler. Eğer konuyla ilgili yardıma ihtiyaç duyuyorsanız lütfen görüş alışverişinde bulunun. |
Bu modül {{}}, {{}}, {{}}, {{}}, {{}}, {{}} ve {{}} şablonlarının yürütülmesinde kullanılmaktadır. Direkt olarak sayfalarda kullanılmak için tasarlanmayan bu üst modülün işlevlerinden yararlanmak için sıralanan ileti şablonları kullanılmalıdır.
Kullanımı
Bu modülü başka bir Lua modülünde kullanmak için öncelikle söz konusu modüle çağrılması gerekir:
local messageBox = require('Modül:İleti kutusu')
İleti kutusu oluşturmak için main
işlevi kullanılmalıdır. Böylece kutu türü (dizgi olarak) ve ileti kutusunda kullanılacak olarak parametreler çağrılmış olur.
local box = messageBox.main( boxType, { param1 = param1, param2 = param2, -- Daha fazla parametre... })
Kullanılabilir yedi kutu türü bulunmaktadır:
Kutu kodu | Şablon | Kapsam |
---|---|---|
fmbox | {{}} | Başlık ve altlık ileti kutuları için |
mbox | {{}} | Birden fazla ad alanında kullanılacak ileti kutuları için |
imbox | {{}} | Dosya ad alanında kullanılacak ileti kutuları için |
cmbox | {{}} | Kategori ad alanında kullanılacak ileti kutuları için |
ambox | {{}} | Madde ad alanında kullanılacak ileti kutuları için |
tmbox | {{}} | Tartışma ad alanında kullanılacak ileti kutuları için |
ombox | {{}} | Diğer ad alanlarında kullanılacak ileti kutuları için |
Kutulara tanımlı parametreler için şablon belgelemesine bakılabilir.
#invoke ile kullanım
Ana (main
) işlevin yanı sıra her kutu türü için ayrı işlevler de tanımlı bulunmaktadır. Bu işlevlere {{#invoke:İleti kutusu|mbox|...}}
, {{#invoke:İleti kutusu|ambox|...}}
şeklinde kutu kodlarını tanımlayarak erişim sağlanabilir. Bu işlevler diğer modüllerden çağrıldıklarında çalışacaktır ancak yalnızca #invoke çağrısı ile iletilen değişkenleri işlemek için kullanılan kodlara erişebileceklerinden main
işlevini çağırmak verimli bir kullanım biçimi olacaktır.
Teknik detaylar
Bu modül yukarıda listelenen her kutu türü için aynı temel kodu kullansa da (yapılandırma) verilerindeki farklılıklar kutuları birbirlerinden ayırmaktadır. Yapılandırma komutları ve ne anlama geldikleri aşağıda açıklanmıştır:
types
- ileti kutusunun tür parametresi tarafından kullanılan verileri içeren tablodur. Tablo anahtarları, tür parametresine iletilebilecek değerlerden müteşekkil olup bu tablo değerleri türler tarafından kullanılan sınıfları ve resimleri saklamaktadırlar.default
- tür parametresine hiçbir değer girilmezse veya geçersiz bir değer belirtilmişse kullanılacak olan varsayılan tür ayarı.showInvalidTypeError
- tür parametresine girilen değer geçersizse hata gösterilip gösterilmeyeceğine dair ayar.allowBlankParams
- boş değerler modüle iletilen parametrelerden çıkarılır. Ancak allowBlankParams tablosunda yer alan parametrelere girilen boşluk karakteri korunur.allowSmall
- ileti kutusunun "küçük=evet" komutu ile daha küçük boyutta bir sürümünün oluşturulmasına dair ayar.smallParam
- küçük parametresine girilecek özelleştirilebilir değer. Örneğin "left" şeklinde ayarlanmışsa "küçük=left" komutu ile küçük boyutta bir mesaj kutusu oluşturulabilir.smallClass
- küçük ileti kutusu için kullanılacak sınıf.substCheck
- yk ([y]erine [k]oyma) denetiminin yapılıp yapılmayacağına dair ayar.classes
- ileti kutusunda kullanılacak sınıf dizisi.imageEmptyCell
- resim belirtilmemişse boş<td>...</td>
hücresinin kullanılıp kullanılmayacağına dair ayar. Ekranın tamamına yayılmayan ileti kutularının boyut aralıklarını korumak için kullanılır.imageEmptyCellStyle
- boş resim hücrelerinin biçimlendirilip biçimlendirilmeyeceğine dair ayar.imageCheckBlank
- "resim=blank" komutu hiçbir resmin görüntülenmemesini sağlar.imageSmallSize
- küçük ileti kutularında kullanılan resimler otomatik olarak 30x30 piksel olarak ayarlanır. Bu ayar ile özel boyut belirlenebilir.imageCellDiv
- resmin<div>...</div>
içine alınıp izin verilen en büyük boyuta zorlanmasına dair ayar.useCollapsibleTextFields
- "sorun", "çözüm", "tartışma" vb. daraltılabilen metin alanlarının kullanılıp kullanılmayacağına dair ayar. Şu anda yalnızca {{}}'da kullanılmaktadır.imageRightNone
- ileti kutusunun sağ tarafındaki resmin gizlenmesine dair ayar. "sağresim=none" komutu sağ tarafta hiçbir resmin görüntülenmesine izin vermez.sectionDefault
- "altbaşlık" parametresi için varsayılan ad.useCollapsibleTextFields
komuuna bağlı olarak çalışır.allowMainspaceCategories
- ana ad alanında kategorilere izin verilmesine dair ayar.templateCategory
- şablonun kullanıldığı sayfalara yerleştirilecek ana kategorinin adı.templateCategoryRequireName
- şablona tanımlı kategoriyi görüntülemek içinad
parametresinin gerekli olup olmadığına dair ayar.templateErrorCategory
- şablon tarafından kullanılacak olan hata kategorisinin adı.templateErrorParamsToCheck
- kullanılıp kullanılmadığı denetlenecek olan parametre adları. Herhangi biri eksikse hata olarak algılanır vetemplateErrorCategory
uygulanır.
-- This is a meta-module for producing message box templates, including -- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}. -- Load necessary modules. require('Modül:Küresel değil') local getArgs local yesno = require('Modül:Evethayır') -- Get a language object for formatDate and ucfirst. local lang = mw.language.getContentLanguage() -- Define constants local CONFIG_MODULE = 'Modül:İleti kutusu/yapılandırma' local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} -------------------------------------------------------------------------------- -- 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 -------------------------------------------------------------------------------- -- 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 (args["denemealanı"] or args["adalanı"] or args.demospace) and (args["denemealanı"] or args["adalanı"] or args.demospace) ~= '' then -- implement demospace parameter of mbox local demospace = string.lower(args["denemealanı"] or args["adalanı"] or args.demospace) if DEMOSPACES[demospace] then -- use template from DEMOSPACES obj.cfg = cfg[DEMOSPACES[demospace]] elseif string.find( demospace, 'talk' ) then -- demo as a talk page obj.cfg = cfg.tmbox else -- default to ombox obj.cfg = cfg.ombox end elseif 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 = {} -- For lazy loading of [[Modül:Kategori işleyici]]. obj.hasCategories = false return setmetatable(obj, MessageBox) end function MessageBox:addCat(ns, cat, sort) if not cat then return nil end if sort then cat = string.format('[[Kategori:%s|%s]]', cat, sort) else cat = string.format('[[Kategori:%s]]', cat) end self.hasCategories = true 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["tür"] or 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["yk"] or args.subst) == 'SUBST' -- Find whether we are using a small message box. self.isSmall = cfg.allowSmall and ( cfg.smallParam and (args["küçük"] == cfg.smallParam or args["ufak"] == cfg.smallParam or args.small == cfg.smallParam) or not cfg.smallParam and yesno(args["küçük"] or args["ufak"] or args.small) ) -- Add attributes, classes and styles. self.id = (args["kimlik"] or args.id) self.name = (args["ad"] or args.name) if self.name then self:addClass('box-' .. string.gsub(self.name,' ','_')) end if yesno(args["yalınbağ"] or args.plainlinks) ~= false then self:addClass('plainlinks') end 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["sınıf"] or args.class) self.style = (args["biçim"] or args["biçem"] or args["stil"] or args.style) self.attrs = args.attrs -- Set text style. self.textstyle = (args["metinbiçimi"] or args["metinbiçim"] or args["metinbiçemi"] or args["yazıbiçimi"] or args["yazı stili"] or 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 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["altbaşlık"] or args.sect) == '' then sect = 'Bu ' .. (cfg.sectionDefault or 'page') elseif type(args["altbaşlık"] or args.sect) == 'string' then sect = 'Bu ' .. (args["altbaşlık"] or args.sect) end local issue = (args["sorun"] or args.issue) issue = type(issue) == 'string' and issue ~= '' and issue or nil local text = (args["metin"] or args["yazı"] or 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["tartışma"] or 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 = 'Konuya dair fikir alışverişi' if talkArgIsTalkPage then talkText = string.format( '%s [[%s|%s]] sayfasında bulunabilir.', talkText, talk, talkTitle.prefixedText ) else talkText = string.format( '%s [[%s#%s|tartışma sayfası]]nda bulunabilir.', talkText, talkTitle.prefixedText, talk ) end self.talk = talkText end end -- Get other values. self.fix = (args["çözüm"] or args["düzeltme"] or args.fix) ~= '' and (args["çözüm"] or args["düzeltme"] or args.fix) or nil local date if (args["tarih"] or args.date) and (args["tarih"] or args.date) ~= '' then date = (args["tarih"] or args.date) elseif (args["tarih"] or args.date) == '' and self.isTemplatePage then date = lang:formatDate('F Y') end if date then self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date) end self.info = args.info if yesno(args["kaldırmailetisi"] or args.removalnotice) then self.removalNotice = cfg.removalNotice end 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["küçükmetin"] or args["ufakmetin"] or args["küçükyazı"] or args.smalltext) or (args["metin"] or args["yazı"] or args.text) else self.text = (args["metin"] or args["yazı"] or args.text) end -- Set the below row. self.below = cfg.below and (args["alt"] or 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["küçükresim"] or args["ufakresim"] or args["küçük resim"] or args.smallimage) or (args["resim"] 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('[[Dosya:%s|%s|link=|alt=]]', self.typeImage or 'Information icon4.svg', imageSize) end end -- Right image settings. local imageRight = self.isSmall and (args["küçüksağresim"] or args["sağküçükresim"] or args["küçükresimsağ"] or args["ufakresimsağ"] or args["küçük resimsağ"] or args.smallimageright) or (args["sağresim"] or args["resimsağ"] 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', 'kat', 'hepsi', 'tümü'} 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["tarih"] or args.date) date = type(date) == 'string' and date local preposition = '' for _, num in ipairs(nums) do local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)] or args['kat' .. tostring(num)] local allCat = args['all' .. tostring(num)] or args['hepsi' .. tostring(num)] or args['tümü' .. 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 %s', mainCat, preposition, date) self:addCat(0, catTitle) catTitle = getTitleObject('Kategori:' .. catTitle) if not catTitle or not catTitle.exists then self:addCat(0, 'Şablonda geçersiz tarih parametresine sahip maddeler') 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', 'Parametreleri düzeltilmesi gereken Vikipedi bilgi kutuları', allSort) end if self.isSubstituted then self:addCat('all', 'Hatalı olarak değiştirilen şablonlara sahip sayfalar') 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() if not self.hasCategories then -- No categories added, no need to pass them to Category handler so, -- if it was invoked, it would return the empty string. -- So we shortcut and return the empty string. return "" end -- Convert category tables to strings and pass them through -- [[Modül:Kategori işleyici]]. return require('Modül:Kategori işleyici')._main{ main = table.concat(self.categories[0] or {}), template = table.concat(self.categories[10] or {}), all = table.concat(self.categories.all or {}), nocat = (self.args["katyok"] or 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( 'Şablon <code>%s[[Şablon:%s|%s]]%s</code> hatalı olarak değiştirildi.', 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 textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) and not self.isSmall then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('small') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) 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( 'Bu ileti kutusu geçersiz "tür=%s" parametresi kullanıyor olup hatanın düzeltilmesi gereklidir.', 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 box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE)) box:setParameters() box:setCategories() return box:export() end function mt.__index(t, k) return function (frame) if not getArgs then getArgs = require('Modül:Arguments').getArgs end return t.main(k, getArgs(frame, {trim = false, removeBlanks = false})) end end return setmetatable(p, mt)
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Modul belgelemesi gor degistir gecmis temizle Bu modul su Lua modullerini kullaniyor Modul Kuresel degilModul EvethayirModul Kategori isleyiciModul ArgumentsBu Lua modulu yaklasik 141 000 ki bu 5 oranina tekabul ediyor sayfada kullanilmaktadir Lutfen yapacaginiz degisiklikleri buyuk olcekli aksamalari ve sunucuya gereksiz yuk binmesini onlemek icin oncelikle sablonun ile alt sayfalarinda ya da kendi kullanici sayfanizda test ediniz Testten gecen degisiklikler daha sonra bu sayfaya tek bir duzenlemede eklenebilir Eger yapmayi planladiginiz degisiklikler ile istediginiz sonucu elde edemiyorsaniz gorus alisverisinde bulununuz Bu modul sistem iletilerinde kullanilmaktadir Yapilacak olan degisiklikler Vikipedi arayuzune aninda yansiyacaktir Sunuculara ek yuk binmesine ve olasi hatalarin arayuze yansimasina engel olmak icin yapilacak olan deneme yanilma degisikliklerinin oncelikle ile alt sayfalarinda ya da kisisel kullanici alaninda sinanmasi gerekmektedir Sinamadan gecen degisiklikler eger istenen sonucu veriyorsa bir kerede bu modula eklenebilirler Eger konuyla ilgili yardima ihtiyac duyuyorsaniz lutfen gorus alisverisinde bulunun Bu modul bikutu cikutu dikutu kikutu mikutu sikutu ve tikutu sablonlarinin yurutulmesinde kullanilmaktadir Direkt olarak sayfalarda kullanilmak icin tasarlanmayan bu ust modulun islevlerinden yararlanmak icin siralanan ileti sablonlari kullanilmalidir Kullanimi Bu modulu baska bir Lua modulunde kullanmak icin oncelikle soz konusu module cagrilmasi gerekir local messageBox require Modul Ileti kutusu Ileti kutusu olusturmak icin main islevi kullanilmalidir Boylece kutu turu dizgi olarak ve ileti kutusunda kullanilacak olarak parametreler cagrilmis olur local box messageBox main boxType param1 param1 param2 param2 Daha fazla parametre Kullanilabilir yedi kutu turu bulunmaktadir Kutu kodu Sablon Kapsamfmbox bikutu Baslik ve altlik ileti kutulari icinmbox cikutu Birden fazla ad alaninda kullanilacak ileti kutulari icinimbox dikutu Dosya ad alaninda kullanilacak ileti kutulari icincmbox kikutu Kategori ad alaninda kullanilacak ileti kutulari icinambox mikutu Madde ad alaninda kullanilacak ileti kutulari icintmbox tikutu Tartisma ad alaninda kullanilacak ileti kutulari icinombox sikutu Diger ad alanlarinda kullanilacak ileti kutulari icin Kutulara tanimli parametreler icin sablon belgelemesine bakilabilir invoke ile kullanim Ana main islevin yani sira her kutu turu icin ayri islevler de tanimli bulunmaktadir Bu islevlere invoke Ileti kutusu mbox invoke Ileti kutusu ambox seklinde kutu kodlarini tanimlayarak erisim saglanabilir Bu islevler diger modullerden cagrildiklarinda calisacaktir ancak yalnizca invoke cagrisi ile iletilen degiskenleri islemek icin kullanilan kodlara erisebileceklerinden main islevini cagirmak verimli bir kullanim bicimi olacaktir Teknik detaylar Bu modul yukarida listelenen her kutu turu icin ayni temel kodu kullansa da yapilandirma verilerindeki farkliliklar kutulari birbirlerinden ayirmaktadir Yapilandirma komutlari ve ne anlama geldikleri asagida aciklanmistir types ileti kutusunun tur parametresi tarafindan kullanilan verileri iceren tablodur Tablo anahtarlari tur parametresine iletilebilecek degerlerden mutesekkil olup bu tablo degerleri turler tarafindan kullanilan siniflari ve resimleri saklamaktadirlar default tur parametresine hicbir deger girilmezse veya gecersiz bir deger belirtilmisse kullanilacak olan varsayilan tur ayari showInvalidTypeError tur parametresine girilen deger gecersizse hata gosterilip gosterilmeyecegine dair ayar allowBlankParams bos degerler module iletilen parametrelerden cikarilir Ancak allowBlankParams tablosunda yer alan parametrelere girilen bosluk karakteri korunur allowSmall ileti kutusunun kucuk evet komutu ile daha kucuk boyutta bir surumunun olusturulmasina dair ayar smallParam kucuk parametresine girilecek ozellestirilebilir deger Ornegin left seklinde ayarlanmissa kucuk left komutu ile kucuk boyutta bir mesaj kutusu olusturulabilir smallClass kucuk ileti kutusu icin kullanilacak sinif substCheck yk y erine k oyma denetiminin yapilip yapilmayacagina dair ayar classes ileti kutusunda kullanilacak sinif dizisi imageEmptyCell resim belirtilmemisse bos lt td gt lt td gt hucresinin kullanilip kullanilmayacagina dair ayar Ekranin tamamina yayilmayan ileti kutularinin boyut araliklarini korumak icin kullanilir imageEmptyCellStyle bos resim hucrelerinin bicimlendirilip bicimlendirilmeyecegine dair ayar imageCheckBlank resim blank komutu hicbir resmin goruntulenmemesini saglar imageSmallSize kucuk ileti kutularinda kullanilan resimler otomatik olarak 30x30 piksel olarak ayarlanir Bu ayar ile ozel boyut belirlenebilir imageCellDiv resmin lt div gt lt div gt icine alinip izin verilen en buyuk boyuta zorlanmasina dair ayar useCollapsibleTextFields sorun cozum tartisma vb daraltilabilen metin alanlarinin kullanilip kullanilmayacagina dair ayar Su anda yalnizca mikutu da kullanilmaktadir imageRightNone ileti kutusunun sag tarafindaki resmin gizlenmesine dair ayar sagresim none komutu sag tarafta hicbir resmin goruntulenmesine izin vermez sectionDefault altbaslik parametresi icin varsayilan ad useCollapsibleTextFields komuuna bagli olarak calisir allowMainspaceCategories ana ad alaninda kategorilere izin verilmesine dair ayar templateCategory sablonun kullanildigi sayfalara yerlestirilecek ana kategorinin adi templateCategoryRequireName sablona tanimli kategoriyi goruntulemek icin ad parametresinin gerekli olup olmadigina dair ayar templateErrorCategory sablon tarafindan kullanilacak olan hata kategorisinin adi templateErrorParamsToCheck kullanilip kullanilmadigi denetlenecek olan parametre adlari Herhangi biri eksikse hata olarak algilanir ve templateErrorCategory uygulanir Yukaridaki belgeleme icerigi Modul Ileti kutusu belge sayfasindan yansitilmaktadir degistir gecmis Kullanicilar denemelerini bu sablonun deneme tahtasi olustur yansitma ve test senaryosu olustur sayfalarinda yapabilirler Lutfen kategorileri belge alt sayfasina ekleyin Bu modul ile ilgili alt sayfalar icin buraya tiklayiniz This is a meta module for producing message box templates including mbox ambox imbox tmbox ombox cmbox and fmbox Load necessary modules require Modul Kuresel degil local getArgs local yesno require Modul Evethayir Get a language object for formatDate and ucfirst local lang mw language getContentLanguage Define constants local CONFIG MODULE Modul Ileti kutusu yapilandirma local DEMOSPACES talk tmbox image imbox file imbox category cmbox article ambox main ambox 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 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 args denemealani or args adalani or args demospace and args denemealani or args adalani or args demospace then implement demospace parameter of mbox local demospace string lower args denemealani or args adalani or args demospace if DEMOSPACES demospace then use template from DEMOSPACES obj cfg cfg DEMOSPACES demospace elseif string find demospace talk then demo as a talk page obj cfg cfg tmbox else default to ombox obj cfg cfg ombox end elseif 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 For lazy loading of Modul Kategori isleyici obj hasCategories false return setmetatable obj MessageBox end function MessageBox addCat ns cat sort if not cat then return nil end if sort then cat string format Kategori s s cat sort else cat string format Kategori s cat end self hasCategories true 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 tur or 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 yk or args subst SUBST Find whether we are using a small message box self isSmall cfg allowSmall and cfg smallParam and args kucuk cfg smallParam or args ufak cfg smallParam or args small cfg smallParam or not cfg smallParam and yesno args kucuk or args ufak or args small Add attributes classes and styles self id args kimlik or args id self name args ad or args name if self name then self addClass box string gsub self name end if yesno args yalinbag or args plainlinks false then self addClass plainlinks end 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 sinif or args class self style args bicim or args bicem or args stil or args style self attrs args attrs Set text style self textstyle args metinbicimi or args metinbicim or args metinbicemi or args yazibicimi or args yazi stili or 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 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 altbaslik or args sect then sect Bu cfg sectionDefault or page elseif type args altbaslik or args sect string then sect Bu args altbaslik or args sect end local issue args sorun or args issue issue type issue string and issue and issue or nil local text args metin or args yazi or 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 tartisma or 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 Konuya dair fikir alisverisi if talkArgIsTalkPage then talkText string format s s s sayfasinda bulunabilir talkText talk talkTitle prefixedText else talkText string format s s s tartisma sayfasi nda bulunabilir talkText talkTitle prefixedText talk end self talk talkText end end Get other values self fix args cozum or args duzeltme or args fix and args cozum or args duzeltme or args fix or nil local date if args tarih or args date and args tarih or args date then date args tarih or args date elseif args tarih or args date and self isTemplatePage then date lang formatDate F Y end if date then self date string format lt small class date container gt lt span class date gt s lt span gt lt small gt date end self info args info if yesno args kaldirmailetisi or args removalnotice then self removalNotice cfg removalNotice end 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 kucukmetin or args ufakmetin or args kucukyazi or args smalltext or args metin or args yazi or args text else self text args metin or args yazi or args text end Set the below row self below cfg below and args alt or 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 kucukresim or args ufakresim or args kucuk resim or args smallimage or args resim 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 Dosya s s link alt self typeImage or Information icon4 svg imageSize end end Right image settings local imageRight self isSmall and args kucuksagresim or args sagkucukresim or args kucukresimsag or args ufakresimsag or args kucuk resimsag or args smallimageright or args sagresim or args resimsag 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 kat hepsi tumu 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 tarih or args date date type date string and date local preposition for num in ipairs nums do local mainCat args cat tostring num or args category tostring num or args kat tostring num local allCat args all tostring num or args hepsi tostring num or args tumu 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 s mainCat preposition date self addCat 0 catTitle catTitle getTitleObject Kategori catTitle if not catTitle or not catTitle exists then self addCat 0 Sablonda gecersiz tarih parametresine sahip maddeler 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 gt 0 then templateCat templateErrorCategory templateSort tostring count end if self categoryNums and self categoryNums gt 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 Parametreleri duzeltilmesi gereken Vikipedi bilgi kutulari allSort end if self isSubstituted then self addCat all Hatali olarak degistirilen sablonlara sahip sayfalar 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 if not self hasCategories then No categories added no need to pass them to Category handler so if it was invoked it would return the empty string So we shortcut and return the empty string return end Convert category tables to strings and pass them through Modul Kategori isleyici return require Modul Kategori isleyici main main table concat self categories 0 or template table concat self categories 10 or all table concat self categories all or nocat self args katyok or 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 Sablon lt code gt s Sablon s s s lt code gt hatali olarak degistirildi 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 textCellDiv textCell tag div textCellDiv addClass mbox text span wikitext self issue or nil if self talk or self fix and not self isSmall then textCellDiv tag span addClass hide when compact wikitext self talk and self talk or nil wikitext self fix and self fix or nil end textCellDiv wikitext self date and self date or nil if self info and not self isSmall then textCellDiv tag span addClass hide when compact wikitext self info and self info or nil end if self removalNotice then textCellDiv tag small addClass hide when compact tag i wikitext string format s self removalNotice 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 Bu ileti kutusu gecersiz tur s parametresi kullaniyor olup hatanin duzeltilmesi gereklidir 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 box MessageBox new boxType args cfgTables or mw loadData CONFIG MODULE box setParameters box setCategories return box export end function mt index t k return function frame if not getArgs then getArgs require Modul Arguments getArgs end return t main k getArgs frame trim false removeBlanks false end end return setmetatable p mt