Bu modül şu Lua modüllerini kullanıyor: |
Bu Lua modülü yaklaşık 175.000 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 tartışma sayfasında görüş alışverişinde bulununuz. |
Bu modülle {{}} şablonu yürütülür.
-- {{Bilgi kutusu}} modülüdür local p = {} local args = {} local origArgs = {} local root local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]' local has_rows = false local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Yalın liste/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Yatay liste/biçim.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = ''end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args['başlıksınıfı'] }) root :tag('tr') :addClass(rowArgs.rowclass) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args['başlıksınıfı']) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args['başlıkbiçimi']) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) elseif rowArgs.data then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args['etiketbiçimi']) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderTitle() if not args['anabaşlık'] then return end has_rows = true has_list_class({args['anabaşlıksınıfı']}) root :tag('caption') :addClass('infobox-title') :addClass(args['anabaşlıksınıfı']) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args['anabaşlıkbiçimi']) :wikitext(args['anabaşlık']) end local function renderAboveRow() if not args['üst'] then return end has_rows = true has_list_class({ args['üstsınıf'] }) root :tag('tr') :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args['üstsınıf']) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args['üstbiçim']) :wikitext(fixChildBoxes(args['üst'],'th')) end local function renderBelowRow() if not args['alt'] then return end has_rows = true has_list_class({ args['altsınıf'] }) root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['altsınıf']) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['altbiçim']) :wikitext(fixChildBoxes(args['alt'],'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args['altbaşlık'] then args['altbaşlık1'] = args['altbaşlık'] end if args['altbaşlıksırasınıfı'] then args['altbaşlıksırasınıfı1'] = args['altbaşlıksırasınıfı'] end local subheadernums = getArgNums('altbaşlık') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['altbaşlık' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args['altbaşlıkbiçimi'], rowcellstyle = args['altbaşlıkbiçimi' .. tostring(num)], class = args['altbaşlıkbiçimi'], rowclass = args['altbaşlıksırasınıfı' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args['resim'] then args['resim1'] = args['resim'] end if args['altyazı'] then args['altyazı1'] = args['altyazı'] end local imagenums = getArgNums('resim') for k, num in ipairs(imagenums) do local caption = args['altyazı' .. tostring(num)] local data = mw.html.create():wikitext(args['resim' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args['altyazıbiçimi']) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args['resimbiçimi'], class = args['resimsınıfı'], rowclass = args['resimsırasınıfı' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args['otobaşlıklar'] then return end local rownums = union(getArgNums('başlık'), getArgNums('veri')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['başlık' .. tostring(num)] then if lastheader then args['başlık' .. tostring(lastheader)] = nil end lastheader = num elseif args['veri' .. tostring(num)] and args['veri' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ):match('^%S') then local data = args['veri' .. tostring(num)] if data:gsub(category_in_empty_row_pattern, ''):match('%S') then lastheader = nil end end end if lastheader then args['başlık' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('başlık'), getArgNums('veri')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['başlık' .. tostring(num)], label = args['etiket' .. tostring(num)], data = args['veri' .. tostring(num)], datastyle = args['veribiçimi'], class = args['sınıf' .. tostring(num)], rowclass = args['sırasınıfı' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['sırabiçimi' .. tostring(num)], rowcellstyle = args['sırahücrebiçimi' .. tostring(num)], dataid = args['veriid' .. tostring(num)], labelid = args['etiketid' .. tostring(num)], headerid = args['başlıkid' .. tostring(num)], rowid = args['sıraid' .. tostring(num)] }) end end local function renderNavBar() if not args['ad'] then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Modül:Dolçub')._navbar{ args['ad'], mini = 1, }) end local function renderItalicTitle() local italicTitle = args['Eğikbaşlık'] and mw.ustring.lower(args['eğikbaşlık']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' or italicTitle == 'zorla' then root:wikitext(require('Modül:Eğik sayfa adı')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end local function renderTrackingCategories() if args['decat'] ~= 'yes' then --Burada hata cikabilir. Dikkat et! if #(getArgNums('veri')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Kategori:Hiçbir veri sırasıyla bilgi kutusu şablonlarını kullanan maddeler]]') end if args['child'] == 'yes' and args['anabaşlık'] then root:wikitext('[[Kategori:Başlık parametresiyle gömülü bilgi kutusu şablonu kullanan sayfalar]]') end end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' } } local templatestyles = '' if args['templatestyles'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['templatestyles'] } } end local child_templatestyles = '' if args['child templatestyles'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['child templatestyles'] } } end local grandchild_templatestyles = '' if args['grandchild templatestyles'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['grandchild templatestyles'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderNavBar() renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if args.child ~= 'yes' then root = mw.html.create('table') root :addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox') :addClass(args['gövdesınıfı']) -- @deprecated next; target .infobox-<name> :cssText(args['gövdebiçimi']) has_list_class({ args['gövdesınıfı'] }) renderTitle() renderAboveRow() else root = mw.html.create() root :wikitext(args['anabaşlık']) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Non-table value detected for the prefix table", 2) end if type(step) ~= 'number' then error("Invalid step value detected", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then error('Invalid input detected to preprocessArgs prefix table', 2) end preprocessSingleArg(v.prefix) -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Invalid "depend" parameter value detected in preprocessArgs') end preprocessSingleArg(dependValue) end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() preprocessSingleArg('otobaşlıklar') preprocessSingleArg('child') preprocessSingleArg('gövdesınıfı') preprocessSingleArg('subbox') preprocessSingleArg('gövdebiçimi') preprocessSingleArg('anabaşlık') preprocessSingleArg('anabaşlıksınıfı') preprocessSingleArg('anabaşlıkbiçimi') preprocessSingleArg('üst') preprocessSingleArg('üstsınıf') preprocessSingleArg('üstbiçim') preprocessArgs({ {prefix = 'altbaşlık', depend = {'altbaşlıkbiçimi', 'altbaşlıksırasınıfı'}} }, 10) preprocessSingleArg('altbaşlıkbiçimi') preprocessSingleArg('altbaşlıksınıfı') preprocessArgs({ {prefix = 'resim', depend = {'altyazı', 'resimsırasınıfı'}} }, 10) preprocessSingleArg('altyazıbiçimi') preprocessSingleArg('resimbiçimi') preprocessSingleArg('resimsınıfı') preprocessArgs({ {prefix = 'başlık'}, {prefix = 'veri', depend = {'etiket'}}, {prefix = 'sırasınıfı'}, {prefix = 'sırabiçimi'}, {prefix = 'sırahücrebiçimi'}, {prefix = 'sınıf'}, {prefix = 'veriid'}, {prefix = 'etiketid'}, {prefix = 'başlıkid'}, {prefix = 'sıraid'} }, 50) preprocessSingleArg('başlıksınıfı') preprocessSingleArg('başlıkbiçimi') preprocessSingleArg('etiketbiçimi') preprocessSingleArg('veribiçimi') preprocessSingleArg('alt') preprocessSingleArg('altsınıfı') preprocessSingleArg('altbiçim') preprocessSingleArg('ad') -- different behaviour for italics if blank or absent args['Eğikbaşlık'] = origArgs['Eğikbaşlık'] preprocessSingleArg('decat') preprocessSingleArg('templatestyles') preprocessSingleArg('child templatestyles') preprocessSingleArg('grandchild templatestyles') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end --Bu fonksiyon infobox'ın aynısı, fakat diğer modüllerden --çağırılabilir versiyonudur. function p.infoboxModule(moduleArgs) return p.infobox(nil, moduleArgs) end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p
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 DolcubModul Egik sayfa adiBu Lua modulu yaklasik 175 000 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 tartisma sayfasinda gorus alisverisinde bulununuz Bu modulle Bilgi kutusu sablonu yurutulur Yukaridaki belgeleme icerigi Modul Bilgi 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 Bilgi kutusu moduludur local p local args local origArgs local root local empty row categories local category in empty row pattern s Cc Aa Tt Ee Gg Oo Rr Yy s local has rows false local lists plainlist t patterns plainlist splainlist plainlist s splainlist s found false styles Yalin liste styles css hlist t patterns hlist shlist hlist s shlist s found false styles Yatay liste bicim css local function has list class args to check for list in pairs lists do if not list found then for arg in pairs args to check do for pattern in ipairs list patterns do if mw ustring find arg or pattern then list found true break end end if list found then break end end end end end local function fixChildBoxes sval tt local function notempty s return s and s match S end if notempty sval then local marker lt span class special infobox marker gt local s sval start moving templatestyles and categories inside of table rows local slast while slast s do slast s s mw ustring gsub s lt Tt Rr s gt s s Cc Aa Tt Ee Gg Oo Rr Yy s 2 1 s mw ustring gsub s lt Tt Rr s gt s 127 127 UNIQ templatestyles x QINU 127 127 2 1 end end moving templatestyles and categories inside of table rows s mw ustring gsub s lt s Tt Rr marker 1 s mw ustring gsub s lt Tt Rr s gt 1 marker if s match marker then s mw ustring gsub s marker s marker s mw ustring gsub s r n r n r n s marker 1 s mw ustring gsub s marker s r n 1 s mw ustring gsub s lt Cc Aa Pp Tt Ii Oo Nn s gt s marker 1 s mw ustring gsub s lt s Tt Aa Bb Ll Ee lt gt gt s marker 1 s mw ustring gsub s r n r n s marker 1 s mw ustring gsub s r n r n r n s marker 1 s mw ustring gsub s marker s lt Tt Aa Bb Ll Ee s gt 1 s mw ustring gsub s marker s n 1 end if s match marker then local subcells mw text split s marker s for k 1 subcells do if k 1 then s s subcells k lt tt gt lt tr gt elseif k subcells then local rowstyle style display none if notempty subcells k then rowstyle end s s lt tr rowstyle gt lt tt colspan 2 gt n subcells k elseif notempty subcells k then if k 2 0 then s s subcells k else s s lt tr gt lt tt colspan 2 gt n subcells k lt tt gt lt tr gt end end end end the next two lines add a newline at the end of lists for the PHP parser Special Diff 849054481 remove when phab T191516 is fixed or OBE s mw ustring gsub s r n r n 1 n s mw ustring gsub s r n 1 n s mw ustring gsub s n 1 s mw ustring gsub s n 1 return s else return sval end end Cleans empty tables local function cleanInfobox root tostring root if has rows false then root mw ustring gsub root lt table lt gt gt s lt table gt end end Returns the union of the values of two tables as a sequence local function union t1 t2 local vals for k v in pairs t1 do vals v true end for k v in pairs t2 do vals v true end local ret for k v in pairs vals do table insert ret k end return ret end Returns a table containing the numbers of the arguments that exist for the specified prefix For example if the prefix was data and data1 data2 and data5 exist it would return 1 2 5 local function getArgNums prefix local nums for k v in pairs args do local num tostring k match prefix 1 9 d if num then table insert nums tonumber num end end table sort nums return nums end Adds a row to the infobox with either a header cell or a label data cell combination local function addRow rowArgs if rowArgs header and rowArgs header BLANK then has rows true has list class rowArgs rowclass rowArgs class args basliksinifi root tag tr addClass rowArgs rowclass cssText rowArgs rowstyle tag th attr colspan 2 addClass infobox header addClass rowArgs class addClass args basliksinifi deprecated next target infobox lt name gt infobox header cssText args baslikbicimi cssText rowArgs rowcellstyle wikitext fixChildBoxes rowArgs header th elseif rowArgs data then has rows true has list class rowArgs rowclass rowArgs class local row root tag tr row addClass rowArgs rowclass row cssText rowArgs rowstyle if rowArgs label then row tag th attr scope row addClass infobox label deprecated next target infobox lt name gt infobox label cssText args etiketbicimi cssText rowArgs rowcellstyle wikitext rowArgs label done end local dataCell row tag td dataCell attr colspan not rowArgs label and 2 or nil addClass not rowArgs label and infobox full data or infobox data addClass rowArgs class deprecated next target infobox lt name gt infobox full data cssText rowArgs datastyle cssText rowArgs rowcellstyle wikitext fixChildBoxes rowArgs data td else table insert empty row categories rowArgs data or end end local function renderTitle if not args anabaslik then return end has rows true has list class args anabasliksinifi root tag caption addClass infobox title addClass args anabasliksinifi deprecated next target infobox lt name gt infobox title cssText args anabaslikbicimi wikitext args anabaslik end local function renderAboveRow if not args ust then return end has rows true has list class args ustsinif root tag tr tag th attr colspan 2 addClass infobox above addClass args ustsinif deprecated next target infobox lt name gt infobox above cssText args ustbicim wikitext fixChildBoxes args ust th end local function renderBelowRow if not args alt then return end has rows true has list class args altsinif root tag tr tag td attr colspan 2 addClass infobox below addClass args altsinif deprecated next target infobox lt name gt infobox below cssText args altbicim wikitext fixChildBoxes args alt td end local function addSubheaderRow subheaderArgs if subheaderArgs data and subheaderArgs data gsub category in empty row pattern match S then has rows true has list class subheaderArgs rowclass subheaderArgs class local row root tag tr row addClass subheaderArgs rowclass local dataCell row tag td dataCell attr colspan 2 addClass infobox subheader addClass subheaderArgs class cssText subheaderArgs datastyle cssText subheaderArgs rowcellstyle wikitext fixChildBoxes subheaderArgs data td else table insert empty row categories subheaderArgs data or end end local function renderSubheaders if args altbaslik then args altbaslik1 args altbaslik end if args altbasliksirasinifi then args altbasliksirasinifi1 args altbasliksirasinifi end local subheadernums getArgNums altbaslik for k num in ipairs subheadernums do addSubheaderRow data args altbaslik tostring num deprecated next target infobox lt name gt infobox subheader datastyle args altbaslikbicimi rowcellstyle args altbaslikbicimi tostring num class args altbaslikbicimi rowclass args altbasliksirasinifi tostring num end end local function addImageRow imageArgs if imageArgs data and imageArgs data gsub category in empty row pattern match S then has rows true has list class imageArgs rowclass imageArgs class local row root tag tr row addClass imageArgs rowclass local dataCell row tag td dataCell attr colspan 2 addClass infobox image addClass imageArgs class cssText imageArgs datastyle wikitext fixChildBoxes imageArgs data td else table insert empty row categories imageArgs data or end end local function renderImages if args resim then args resim1 args resim end if args altyazi then args altyazi1 args altyazi end local imagenums getArgNums resim for k num in ipairs imagenums do local caption args altyazi tostring num local data mw html create wikitext args resim tostring num if caption then data tag div addClass infobox caption deprecated next target infobox lt name gt infobox caption cssText args altyazibicimi wikitext caption end addImageRow data tostring data deprecated next target infobox lt name gt infobox image datastyle args resimbicimi class args resimsinifi rowclass args resimsirasinifi tostring num end end When autoheaders are turned on preprocesses the rows local function preprocessRows if not args otobasliklar then return end local rownums union getArgNums baslik getArgNums veri table sort rownums local lastheader for k num in ipairs rownums do if args baslik tostring num then if lastheader then args baslik tostring lastheader nil end lastheader num elseif args veri tostring num and args veri tostring num gsub category in empty row pattern match S then local data args veri tostring num if data gsub category in empty row pattern match S then lastheader nil end end end if lastheader then args baslik tostring lastheader nil end end Gets the union of the header and data argument numbers and renders them all in order local function renderRows local rownums union getArgNums baslik getArgNums veri table sort rownums for k num in ipairs rownums do addRow header args baslik tostring num label args etiket tostring num data args veri tostring num datastyle args veribicimi class args sinif tostring num rowclass args sirasinifi tostring num deprecated next target infobox lt name gt rowclass rowstyle args sirabicimi tostring num rowcellstyle args sirahucrebicimi tostring num dataid args veriid tostring num labelid args etiketid tostring num headerid args baslikid tostring num rowid args siraid tostring num end end local function renderNavBar if not args ad then return end has rows true root tag tr tag td attr colspan 2 addClass infobox navbar wikitext require Modul Dolcub navbar args ad mini 1 end local function renderItalicTitle local italicTitle args Egikbaslik and mw ustring lower args egikbaslik if italicTitle or italicTitle force or italicTitle yes or italicTitle zorla then root wikitext require Modul Egik sayfa adi main end end Categories in otherwise empty rows are collected in empty row categories This function adds them to the module output It is not affected by args decat because this module should not prevent module external categories from rendering local function renderEmptyRowCategories for s in ipairs empty row categories do root wikitext s end end local function renderTrackingCategories if args decat yes then Burada hata cikabilir Dikkat et if getArgNums veri 0 and mw title getCurrentTitle namespace 0 then root wikitext Kategori Hicbir veri sirasiyla bilgi kutusu sablonlarini kullanan maddeler end if args child yes and args anabaslik then root wikitext Kategori Baslik parametresiyle gomulu bilgi kutusu sablonu kullanan sayfalar end end end Loads the templatestyles for the infobox TODO FINISH loading base templatestyles here rather than in MediaWiki Common css There are 4 5000 pages with raw infobox tables See Mediawiki talk Common css to do Infobox and or come help When we do this we should clean up the inline CSS below too Will have to do some bizarre conversion category like with sidebar local function loadTemplateStyles local frame mw getCurrentFrame local hlist templatestyles if lists hlist t found then hlist templatestyles frame extensionTag name templatestyles args src lists hlist t styles end local plainlist templatestyles if lists plainlist t found then plainlist templatestyles frame extensionTag name templatestyles args src lists plainlist t styles end See function description local base templatestyles frame extensionTag name templatestyles args src Module Infobox styles css local templatestyles if args templatestyles then templatestyles frame extensionTag name templatestyles args src args templatestyles end local child templatestyles if args child templatestyles then child templatestyles frame extensionTag name templatestyles args src args child templatestyles end local grandchild templatestyles if args grandchild templatestyles then grandchild templatestyles frame extensionTag name templatestyles args src args grandchild templatestyles end return table concat hlist gt plainlist gt base is best effort to preserve old Common css ordering this ordering is not a guarantee because the rows of interest invoking each class may not be on a specific page hlist templatestyles plainlist templatestyles base templatestyles templatestyles child templatestyles grandchild templatestyles end common functions between the child and non child cases local function structure infobox common renderSubheaders renderImages preprocessRows renderRows renderBelowRow renderNavBar renderItalicTitle renderEmptyRowCategories renderTrackingCategories cleanInfobox end Specify the overall layout of the infobox with special settings if the infobox is used as a child inside another infobox local function infobox if args child yes then root mw html create table root addClass args subbox yes and infobox subbox or infobox addClass args govdesinifi deprecated next target infobox lt name gt cssText args govdebicimi has list class args govdesinifi renderTitle renderAboveRow else root mw html create root wikitext args anabaslik end structure infobox common return loadTemplateStyles root end If the argument exists and isn t blank add it to the argument table Blank arguments are treated as nil to match the behaviour of ParserFunctions local function preprocessSingleArg argName if origArgs argName and origArgs argName then args argName origArgs argName end end Assign the parameters with the given prefixes to the args table in order in batches of the step size specified This is to prevent references etc from appearing in the wrong order The prefixTable should be an array containing tables each of which has two possible fields a prefix string and a depend table The function always parses parameters containing the prefix string but only parses parameters in the depend table if the prefix parameter is present and non blank local function preprocessArgs prefixTable step if type prefixTable table then error Non table value detected for the prefix table 2 end if type step number then error Invalid step value detected 2 end Get arguments without a number suffix and check for bad input for i v in ipairs prefixTable do if type v table or type v prefix string or v depend and type v depend table then error Invalid input detected to preprocessArgs prefix table 2 end preprocessSingleArg v prefix Only parse the depend parameter if the prefix parameter is present and not blank if args v prefix and v depend then for j dependValue in ipairs v depend do if type dependValue string then error Invalid depend parameter value detected in preprocessArgs end preprocessSingleArg dependValue end end end Get arguments with number suffixes local a 1 Counter variable local moreArgumentsExist true while moreArgumentsExist true do moreArgumentsExist false for i a a step 1 do for j v in ipairs prefixTable do local prefixArgName v prefix tostring i if origArgs prefixArgName then Do another loop if any arguments are found even blank ones moreArgumentsExist true preprocessSingleArg prefixArgName end Process the depend table if the prefix argument is present and not blank or we are processing prefix1 and prefix is present and not blank and if the depend table is present if v depend and args prefixArgName or i 1 and args v prefix then for j dependValue in ipairs v depend do local dependArgName dependValue tostring i preprocessSingleArg dependArgName end end end end a a step end end Parse the data parameters in the same order that the old infobox did so that references etc will display in the expected places Parameters that depend on another parameter are only processed if that parameter is present to avoid phantom references appearing in article reference lists local function parseDataParameters preprocessSingleArg otobasliklar preprocessSingleArg child preprocessSingleArg govdesinifi preprocessSingleArg subbox preprocessSingleArg govdebicimi preprocessSingleArg anabaslik preprocessSingleArg anabasliksinifi preprocessSingleArg anabaslikbicimi preprocessSingleArg ust preprocessSingleArg ustsinif preprocessSingleArg ustbicim preprocessArgs prefix altbaslik depend altbaslikbicimi altbasliksirasinifi 10 preprocessSingleArg altbaslikbicimi preprocessSingleArg altbasliksinifi preprocessArgs prefix resim depend altyazi resimsirasinifi 10 preprocessSingleArg altyazibicimi preprocessSingleArg resimbicimi preprocessSingleArg resimsinifi preprocessArgs prefix baslik prefix veri depend etiket prefix sirasinifi prefix sirabicimi prefix sirahucrebicimi prefix sinif prefix veriid prefix etiketid prefix baslikid prefix siraid 50 preprocessSingleArg basliksinifi preprocessSingleArg baslikbicimi preprocessSingleArg etiketbicimi preprocessSingleArg veribicimi preprocessSingleArg alt preprocessSingleArg altsinifi preprocessSingleArg altbicim preprocessSingleArg ad different behaviour for italics if blank or absent args Egikbaslik origArgs Egikbaslik preprocessSingleArg decat preprocessSingleArg templatestyles preprocessSingleArg child templatestyles preprocessSingleArg grandchild templatestyles end If called via invoke use the args passed into the invoking template Otherwise for testing purposes assume args are being passed directly in function p infobox frame if frame mw getCurrentFrame then origArgs frame getParent args else origArgs frame end parseDataParameters return infobox end Bu fonksiyon infobox in aynisi fakat diger modullerden cagirilabilir versiyonudur function p infoboxModule moduleArgs return p infobox nil moduleArgs end For calling via invoke within a template function p infoboxTemplate frame origArgs for k v in pairs frame args do origArgs k mw text trim v end parseDataParameters return infobox end return p